@datametria/vue-components 1.2.0 → 2.1.0

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 (103) hide show
  1. package/README.md +554 -657
  2. package/dist/index.es.js +2570 -1433
  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 +137 -137
  7. package/src/components/DatametriaAutocomplete.vue +184 -138
  8. package/src/components/DatametriaAvatar.vue +177 -33
  9. package/src/components/DatametriaBadge.vue +98 -98
  10. package/src/components/DatametriaBreadcrumb.vue +21 -21
  11. package/src/components/DatametriaButton.vue +177 -165
  12. package/src/components/DatametriaCard.vue +12 -12
  13. package/src/components/DatametriaCheckbox.vue +8 -8
  14. package/src/components/DatametriaChip.vue +145 -149
  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/DatametriaFloatingBar.vue +126 -0
  20. package/src/components/DatametriaGrid.vue +3 -3
  21. package/src/components/DatametriaInput.vue +15 -15
  22. package/src/components/DatametriaMenu.vue +604 -619
  23. package/src/components/DatametriaModal.vue +16 -16
  24. package/src/components/DatametriaNavbar.vue +230 -252
  25. package/src/components/DatametriaPasswordInput.vue +430 -0
  26. package/src/components/DatametriaProgress.vue +18 -18
  27. package/src/components/DatametriaRadio.vue +20 -20
  28. package/src/components/DatametriaSelect.vue +15 -15
  29. package/src/components/DatametriaSidebar.vue +230 -0
  30. package/src/components/DatametriaSkeleton.vue +243 -239
  31. package/src/components/DatametriaSlider.vue +395 -407
  32. package/src/components/DatametriaSortableTable.vue +585 -0
  33. package/src/components/DatametriaSpinner.vue +7 -7
  34. package/src/components/DatametriaSwitch.vue +16 -16
  35. package/src/components/DatametriaTable.vue +14 -14
  36. package/src/components/DatametriaTabs.vue +150 -29
  37. package/src/components/DatametriaTextarea.vue +28 -28
  38. package/src/components/DatametriaTimePicker.vue +285 -285
  39. package/src/components/DatametriaToast.vue +176 -176
  40. package/src/components/DatametriaTooltip.vue +408 -408
  41. package/src/components/__tests__/DatametriaAlert.test.js +35 -35
  42. package/src/components/__tests__/DatametriaAlert.test.ts +190 -0
  43. package/src/components/__tests__/DatametriaAutocomplete.test.ts +180 -0
  44. package/src/components/__tests__/DatametriaAvatar.test.ts +152 -0
  45. package/src/components/__tests__/DatametriaBadge.test.js +29 -29
  46. package/src/components/__tests__/DatametriaBadge.test.ts +167 -0
  47. package/src/components/__tests__/DatametriaBreadcrumb.test.ts +75 -0
  48. package/src/components/__tests__/DatametriaButton.test.js +30 -30
  49. package/src/components/__tests__/DatametriaButton.test.ts +283 -0
  50. package/src/components/__tests__/DatametriaCard.test.ts +201 -0
  51. package/src/components/__tests__/DatametriaCheckbox.test.ts +47 -0
  52. package/src/components/__tests__/DatametriaChip.test.js +38 -38
  53. package/src/components/__tests__/DatametriaContainer.test.ts +52 -0
  54. package/src/components/__tests__/DatametriaDatePicker.test.ts +234 -0
  55. package/src/components/__tests__/DatametriaDivider.test.ts +54 -0
  56. package/src/components/__tests__/DatametriaFileUpload.test.ts +291 -0
  57. package/src/components/__tests__/DatametriaFloatingBar.test.ts +137 -0
  58. package/src/components/__tests__/DatametriaGrid.test.ts +31 -0
  59. package/src/components/__tests__/DatametriaInput.test.ts +72 -0
  60. package/src/components/__tests__/DatametriaMenu.test.ts +366 -0
  61. package/src/components/__tests__/DatametriaModal.test.ts +86 -0
  62. package/src/components/__tests__/DatametriaNavbar.test.js +48 -48
  63. package/src/components/__tests__/DatametriaNavbar.test.ts +203 -0
  64. package/src/components/__tests__/DatametriaPasswordInput.test.js +305 -0
  65. package/src/components/__tests__/DatametriaProgress.test.ts +90 -0
  66. package/src/components/__tests__/DatametriaRadio.test.ts +77 -0
  67. package/src/components/__tests__/DatametriaSelect.test.ts +77 -0
  68. package/src/components/__tests__/DatametriaSidebar.test.ts +169 -0
  69. package/src/components/__tests__/DatametriaSlider.test.ts +261 -0
  70. package/src/components/__tests__/DatametriaSortableTable.test.js +168 -0
  71. package/src/components/__tests__/DatametriaSpinner.test.ts +156 -0
  72. package/src/components/__tests__/DatametriaSwitch.test.ts +64 -0
  73. package/src/components/__tests__/DatametriaTable.test.ts +97 -0
  74. package/src/components/__tests__/DatametriaTabs.test.ts +232 -0
  75. package/src/components/__tests__/DatametriaTextarea.test.ts +66 -0
  76. package/src/components/__tests__/DatametriaToast.test.js +48 -48
  77. package/src/components/__tests__/DatametriaToast.test.ts +99 -0
  78. package/src/composables/useAccessibilityScale.ts +94 -94
  79. package/src/composables/useBreakpoints.ts +82 -82
  80. package/src/composables/useHapticFeedback.ts +439 -439
  81. package/src/composables/useRipple.ts +218 -218
  82. package/src/index.ts +70 -61
  83. package/src/stories/Variants.stories.js +95 -95
  84. package/src/styles/design-tokens.css +623 -623
  85. package/src/theme/ThemeProvider.vue +96 -0
  86. package/src/theme/__tests__/ThemeProvider.test.ts +208 -0
  87. package/src/theme/__tests__/constants.test.ts +31 -0
  88. package/src/theme/__tests__/presets.test.ts +166 -0
  89. package/src/theme/__tests__/tokens.test.ts +155 -0
  90. package/src/theme/__tests__/types.test.ts +153 -0
  91. package/src/theme/__tests__/useTheme.test.ts +146 -0
  92. package/src/theme/constants.ts +14 -0
  93. package/src/theme/index.ts +12 -0
  94. package/src/theme/presets/datametria.ts +94 -0
  95. package/src/theme/presets/default.ts +94 -0
  96. package/src/theme/presets/index.ts +8 -0
  97. package/src/theme/tokens/colors.ts +28 -0
  98. package/src/theme/tokens/index.ts +47 -0
  99. package/src/theme/tokens/spacing.ts +21 -0
  100. package/src/theme/tokens/typography.ts +35 -0
  101. package/src/theme/types.ts +111 -0
  102. package/src/theme/useTheme.ts +28 -0
  103. package/src/types/index.ts +19 -0
@@ -0,0 +1,126 @@
1
+ <template>
2
+ <div
3
+ :class="floatingBarClasses"
4
+ role="toolbar"
5
+ :aria-label="ariaLabel"
6
+ :style="positionStyle"
7
+ >
8
+ <div class="dm-floating-bar__content">
9
+ <slot></slot>
10
+ </div>
11
+ </div>
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ import { computed } from 'vue'
16
+
17
+ interface Props {
18
+ position?: 'top' | 'bottom' | 'left' | 'right'
19
+ variant?: 'light' | 'dark' | 'primary'
20
+ offset?: string
21
+ shadow?: boolean
22
+ rounded?: boolean
23
+ ariaLabel?: string
24
+ }
25
+
26
+ const props = withDefaults(defineProps<Props>(), {
27
+ position: 'bottom',
28
+ variant: 'light',
29
+ offset: '16px',
30
+ shadow: true,
31
+ rounded: true,
32
+ ariaLabel: 'Floating toolbar'
33
+ })
34
+
35
+ const floatingBarClasses = computed(() => [
36
+ 'dm-floating-bar',
37
+ `dm-floating-bar--${props.position}`,
38
+ `dm-floating-bar--${props.variant}`,
39
+ { 'dm-floating-bar--shadow': props.shadow },
40
+ { 'dm-floating-bar--rounded': props.rounded }
41
+ ])
42
+
43
+ const positionStyle = computed(() => {
44
+ const styles: Record<string, string> = {}
45
+
46
+ switch (props.position) {
47
+ case 'top':
48
+ styles.top = props.offset
49
+ break
50
+ case 'bottom':
51
+ styles.bottom = props.offset
52
+ break
53
+ case 'left':
54
+ styles.left = props.offset
55
+ break
56
+ case 'right':
57
+ styles.right = props.offset
58
+ break
59
+ }
60
+
61
+ return styles
62
+ })
63
+ </script>
64
+
65
+ <style scoped>
66
+ .dm-floating-bar {
67
+ position: fixed;
68
+ z-index: 1000;
69
+ background: var(--dm-neutral-50, #ffffff);
70
+ border: 1px solid var(--dm-neutral-200, #e5e7eb);
71
+ transition: all 0.3s ease;
72
+ }
73
+
74
+ .dm-floating-bar--top,
75
+ .dm-floating-bar--bottom {
76
+ left: 50%;
77
+ transform: translateX(-50%);
78
+ max-width: calc(100% - 32px);
79
+ }
80
+
81
+ .dm-floating-bar--left,
82
+ .dm-floating-bar--right {
83
+ top: 50%;
84
+ transform: translateY(-50%);
85
+ max-height: calc(100vh - 32px);
86
+ }
87
+
88
+ .dm-floating-bar--dark {
89
+ background: var(--dm-neutral-900, #111827);
90
+ border-color: var(--dm-neutral-800, #1f2937);
91
+ color: var(--dm-neutral-50, #ffffff);
92
+ }
93
+
94
+ .dm-floating-bar--primary {
95
+ background: var(--dm-primary, #0072CE);
96
+ border-color: color-mix(in srgb, var(--dm-primary, #0072CE) 90%, black);
97
+ color: var(--dm-neutral-50, #ffffff);
98
+ }
99
+
100
+ .dm-floating-bar--shadow {
101
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
102
+ }
103
+
104
+ .dm-floating-bar--rounded {
105
+ border-radius: var(--dm-radius-lg, 0.5rem);
106
+ }
107
+
108
+ .dm-floating-bar__content {
109
+ padding: var(--dm-spacing-3, 0.75rem) var(--dm-spacing-4, 1rem);
110
+ display: flex;
111
+ align-items: center;
112
+ gap: var(--dm-spacing-2, 0.5rem);
113
+ }
114
+
115
+ @media (max-width: 768px) {
116
+ .dm-floating-bar--top,
117
+ .dm-floating-bar--bottom {
118
+ max-width: calc(100% - 16px);
119
+ }
120
+
121
+ .dm-floating-bar__content {
122
+ padding: var(--dm-spacing-2, 0.5rem) var(--dm-spacing-3, 0.75rem);
123
+ gap: var(--dm-spacing-1, 0.25rem);
124
+ }
125
+ }
126
+ </style>
@@ -18,7 +18,7 @@ interface Props {
18
18
 
19
19
  withDefaults(defineProps<Props>(), {
20
20
  cols: 12,
21
- gap: 'var(--dm-space-4)'
21
+ gap: 'var(--dm-spacing-4, 1rem)'
22
22
  })
23
23
  </script>
24
24
 
@@ -26,7 +26,7 @@ withDefaults(defineProps<Props>(), {
26
26
  .dm-grid {
27
27
  display: grid;
28
28
  grid-template-columns: repeat(var(--dm-grid-cols, 12), 1fr);
29
- gap: var(--dm-grid-gap, var(--dm-space-4));
29
+ gap: var(--dm-grid-gap, var(--dm-spacing-4, 1rem));
30
30
  }
31
31
 
32
32
  @media (max-width: 1024px) {
@@ -38,7 +38,7 @@ withDefaults(defineProps<Props>(), {
38
38
  @media (max-width: 640px) {
39
39
  .dm-grid {
40
40
  grid-template-columns: 1fr;
41
- gap: var(--dm-space-3);
41
+ gap: var(--dm-spacing-3, 0.75rem);
42
42
  }
43
43
  }
44
44
  </style>
@@ -58,45 +58,45 @@ const inputClasses = computed(() => [
58
58
  .datametria-input {
59
59
  display: flex;
60
60
  flex-direction: column;
61
- gap: 0.5rem;
61
+ gap: var(--dm-spacing-2, 0.5rem);
62
62
  }
63
63
 
64
64
  .datametria-input__label {
65
- font-size: 0.875rem;
66
- font-weight: 500;
67
- color: #374151;
65
+ font-size: var(--dm-font-size-sm, 0.875rem);
66
+ font-weight: var(--dm-font-weight-medium, 500);
67
+ color: var(--dm-neutral-700, #374151);
68
68
  }
69
69
 
70
70
  .datametria-input__required {
71
- color: #ef4444;
71
+ color: var(--dm-error, #ef4444);
72
72
  }
73
73
 
74
74
  .datametria-input__field {
75
- padding: 0.75rem;
76
- border: 1px solid #d1d5db;
77
- border-radius: 0.375rem;
78
- font-size: 1rem;
75
+ padding: var(--dm-spacing-3, 0.75rem);
76
+ border: 1px solid var(--dm-neutral-300, #d1d5db);
77
+ border-radius: var(--dm-radius-md, 0.375rem);
78
+ font-size: var(--dm-font-size-base, 1rem);
79
79
  transition: all 0.2s;
80
80
  }
81
81
 
82
82
  .datametria-input__field:focus {
83
83
  outline: none;
84
- border-color: #0072CE;
85
- box-shadow: 0 0 0 3px rgba(0, 114, 206, 0.1);
84
+ border-color: var(--dm-primary, #0072CE);
85
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--dm-primary, #0072CE) 10%, transparent);
86
86
  }
87
87
 
88
88
  .datametria-input__field--error {
89
- border-color: #ef4444;
89
+ border-color: var(--dm-error, #ef4444);
90
90
  }
91
91
 
92
92
  .datametria-input__field--disabled {
93
- background: #f3f4f6;
93
+ background: var(--dm-neutral-100, #f3f4f6);
94
94
  cursor: not-allowed;
95
95
  }
96
96
 
97
97
  .datametria-input__error {
98
- font-size: 0.875rem;
99
- color: #ef4444;
98
+ font-size: var(--dm-font-size-sm, 0.875rem);
99
+ color: var(--dm-error, #ef4444);
100
100
  margin: 0;
101
101
  }
102
102
  </style>