@weni/unnnic-system 3.12.8-alpha.0 → 3.12.8

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 (90) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{es-52edeb71.mjs → es-62c1e8d3.mjs} +1 -1
  3. package/dist/{index-756fe685.mjs → index-ef197fd5.mjs} +52261 -55425
  4. package/dist/index.d.ts +1449 -5339
  5. package/dist/{pt-br-24583c8c.mjs → pt-br-198b147b.mjs} +1 -1
  6. package/dist/style.css +1 -1
  7. package/dist/unnnic.mjs +203 -233
  8. package/dist/unnnic.umd.js +44 -48
  9. package/package.json +2 -3
  10. package/src/assets/scss/scheme-colors.scss +223 -223
  11. package/src/assets/scss/tailwind.scss +0 -8
  12. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +1 -1
  13. package/src/components/Checkbox/Checkbox.vue +1 -1
  14. package/src/components/Drawer/Drawer.vue +269 -190
  15. package/src/components/Drawer/__tests__/Drawer.spec.js +46 -37
  16. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +19 -18
  17. package/src/components/FormElement/FormElement.vue +1 -1
  18. package/src/components/Input/BaseInput.vue +5 -25
  19. package/src/components/Input/Input.scss +3 -2
  20. package/src/components/Input/Input.vue +1 -24
  21. package/src/components/Input/TextInput.vue +25 -64
  22. package/src/components/Input/__test__/TextInput.spec.js +1 -1
  23. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +1 -5
  24. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -7
  25. package/src/components/ModalDialog/ModalDialog.vue +148 -64
  26. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +221 -11
  27. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +22 -1
  28. package/src/components/MultiSelect/MultiSelect.vue +297 -0
  29. package/src/components/Radio/Radio.vue +1 -1
  30. package/src/components/Switch/Switch.vue +1 -1
  31. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -3
  32. package/src/components/TemplatePreview/TemplatePreview.vue +2 -2
  33. package/src/components/TemplatePreview/TemplatePreviewModal.vue +1 -1
  34. package/src/components/Toast/Toast.vue +9 -16
  35. package/src/components/ToolTip/ToolTip.vue +177 -25
  36. package/src/components/ToolTip/__tests__/ToolTip.spec.js +61 -339
  37. package/src/components/index.ts +6 -62
  38. package/src/components/ui/popover/PopoverContent.vue +4 -5
  39. package/src/components/ui/popover/PopoverOption.vue +0 -4
  40. package/src/components/ui/popover/PopoverTrigger.vue +1 -5
  41. package/src/locales/en.json +1 -3
  42. package/src/locales/es.json +1 -3
  43. package/src/locales/pt_br.json +1 -3
  44. package/src/stories/Drawer.stories.js +1 -1
  45. package/src/stories/Input.mdx +0 -3
  46. package/src/stories/ModalDialog.mdx +0 -3
  47. package/src/stories/ModalDialog.stories.js +1 -1
  48. package/src/stories/MultiSelect.stories.js +45 -143
  49. package/src/components/MultiSelect/MultSelectOption.vue +0 -49
  50. package/src/components/MultiSelect/__tests__/MultiSelect.spec.js +0 -557
  51. package/src/components/MultiSelect/__tests__/MultiSelectOption.spec.js +0 -229
  52. package/src/components/MultiSelect/__tests__/__snapshots__/MultiSelect.spec.js.snap +0 -87
  53. package/src/components/MultiSelect/__tests__/__snapshots__/MultiSelectOption.spec.js.snap +0 -51
  54. package/src/components/MultiSelect/index.vue +0 -265
  55. package/src/components/Select/__tests__/Select.spec.js +0 -422
  56. package/src/components/Select/__tests__/SelectItem.spec.js +0 -330
  57. package/src/components/Select/__tests__/__snapshots__/Popover.spec.js.snap +0 -8
  58. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +0 -71
  59. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +0 -15
  60. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +0 -25
  61. package/src/components/Select/__tests__/__snapshots__/SelectPopover.spec.js.snap +0 -8
  62. package/src/components/Select/index.vue +0 -308
  63. package/src/components/ui/dialog/Dialog.vue +0 -19
  64. package/src/components/ui/dialog/DialogClose.vue +0 -29
  65. package/src/components/ui/dialog/DialogContent.vue +0 -140
  66. package/src/components/ui/dialog/DialogFooter.vue +0 -50
  67. package/src/components/ui/dialog/DialogHeader.vue +0 -83
  68. package/src/components/ui/dialog/DialogTitle.vue +0 -38
  69. package/src/components/ui/dialog/DialogTrigger.vue +0 -16
  70. package/src/components/ui/dialog/index.ts +0 -7
  71. package/src/components/ui/drawer/Drawer.vue +0 -27
  72. package/src/components/ui/drawer/DrawerClose.vue +0 -31
  73. package/src/components/ui/drawer/DrawerContent.vue +0 -111
  74. package/src/components/ui/drawer/DrawerDescription.vue +0 -40
  75. package/src/components/ui/drawer/DrawerFooter.vue +0 -38
  76. package/src/components/ui/drawer/DrawerHeader.vue +0 -57
  77. package/src/components/ui/drawer/DrawerOverlay.vue +0 -33
  78. package/src/components/ui/drawer/DrawerTitle.vue +0 -37
  79. package/src/components/ui/drawer/DrawerTrigger.vue +0 -31
  80. package/src/components/ui/drawer/index.ts +0 -10
  81. package/src/components/ui/tooltip/Tooltip.vue +0 -21
  82. package/src/components/ui/tooltip/TooltipContent.vue +0 -74
  83. package/src/components/ui/tooltip/TooltipTrigger.vue +0 -26
  84. package/src/components/ui/tooltip/index.ts +0 -3
  85. package/src/lib/layer-manager.ts +0 -92
  86. package/src/stories/Dialog.stories.js +0 -832
  87. package/src/stories/DrawerNext.stories.js +0 -611
  88. package/src/stories/LayerManager.docs.mdx +0 -40
  89. package/src/stories/LayerManager.stories.js +0 -364
  90. package/src/stories/Select.stories.js +0 -161
@@ -7,11 +7,10 @@
7
7
  >
8
8
  <aside
9
9
  v-if="isVisible"
10
- :class="['unnnic-toast', `unnnic-toast--${validType}`]"
11
- :role="validType === 'error' ? 'alert' : 'status'"
12
- :aria-live="validType === 'error' ? 'assertive' : 'polite'"
10
+ :class="['unnnic-toast', `unnnic-toast--${type}`]"
11
+ :role="type === 'error' ? 'alert' : 'status'"
12
+ :aria-live="type === 'error' ? 'assertive' : 'polite'"
13
13
  data-testid="toast"
14
- :style="{ zIndex: toastZIndex }"
15
14
  >
16
15
  <section
17
16
  class="unnnic-toast__content"
@@ -23,7 +22,7 @@
23
22
  >
24
23
  <UnnnicIcon
25
24
  :icon="typeConfig.icon"
26
- :scheme="typeConfig.scheme as SchemeColor"
25
+ :scheme="typeConfig.scheme"
27
26
  size="ant"
28
27
  data-testid="toast-type-icon"
29
28
  />
@@ -75,7 +74,6 @@ import { ref, computed, onMounted, onUnmounted } from 'vue';
75
74
 
76
75
  import UnnnicIcon from '@/components/Icon.vue';
77
76
  import UnnnicButton from '@/components/Button/Button.vue';
78
- import { useLayerZIndex } from '@/lib/layer-manager';
79
77
 
80
78
  import type { ToastProps, ToastEmits } from './types';
81
79
  import type { SchemeColor } from '@/types/scheme-colors';
@@ -97,13 +95,6 @@ const emit = defineEmits<ToastEmits>();
97
95
  const isVisible = ref(false);
98
96
  let timeoutId: number | null = null;
99
97
 
100
- const validType = computed(() => {
101
- if (['informational', 'attention', 'success', 'error'].includes(props.type)) {
102
- return props.type;
103
- }
104
- return 'informational';
105
- });
106
-
107
98
  const typeConfig = computed(() => {
108
99
  const configMap = {
109
100
  informational: { icon: 'info', scheme: 'blue-500' },
@@ -112,11 +103,12 @@ const typeConfig = computed(() => {
112
103
  error: { icon: 'cancel', scheme: 'red-500' },
113
104
  };
114
105
 
115
- return configMap[validType.value];
106
+ return configMap[props.type || 'informational'] as {
107
+ icon: string;
108
+ scheme: SchemeColor;
109
+ };
116
110
  });
117
111
 
118
- const toastZIndex = useLayerZIndex('toast');
119
-
120
112
  const handleClose = () => {
121
113
  isVisible.value = false;
122
114
  emit('close');
@@ -160,6 +152,7 @@ onUnmounted(() => {
160
152
  position: fixed;
161
153
  bottom: $unnnic-space-4;
162
154
  right: $unnnic-space-4;
155
+ z-index: 9999;
163
156
 
164
157
  display: flex;
165
158
  align-items: flex-end;
@@ -1,25 +1,23 @@
1
1
  <template>
2
- <Tooltip
3
- :disabled="!(enabled || forceOpen)"
4
- :open="forceOpen || undefined"
5
- data-testid="tooltip-wrapper"
2
+ <div
3
+ ref="tooltip"
4
+ :class="{
5
+ 'unnnic-tooltip': enabled || forceOpen,
6
+ 'force-open': forceOpen,
7
+ }"
8
+ @mouseover="handleResize"
6
9
  >
7
- <TooltipTrigger data-testid="tooltip-trigger">
8
- <slot />
9
- </TooltipTrigger>
10
-
11
- <TooltipContent
10
+ <slot />
11
+ <span
12
+ v-show="enabled || forceOpen"
13
+ ref="label"
12
14
  :class="['unnnic-tooltip-label', `unnnic-tooltip-label-${side}`]"
13
- :style="{ maxWidth: maxWidth }"
14
- :side="side"
15
- data-testid="tooltip-content"
15
+ :style="{ maxWidth: maxWidth, left: leftPos, top: topPos }"
16
+ data-testid="tooltip-label"
16
17
  >
17
18
  <template v-if="enableHtml">
18
19
  <!-- eslint-disable-next-line vue/no-v-html -->
19
- <section
20
- data-testid="tooltip-html-content"
21
- v-html="text"
22
- ></section>
20
+ <section v-html="text"></section>
23
21
  </template>
24
22
  <template
25
23
  v-for="(line, index) in text.split('\n')"
@@ -29,20 +27,22 @@
29
27
  {{ line }}
30
28
  <br />
31
29
  </template>
32
- </TooltipContent>
33
- </Tooltip>
30
+
31
+ <template v-if="shortcutText">
32
+ <span
33
+ class="unnnic-tooltip-label-shortcut"
34
+ data-testid="tooltip-label-shortcut"
35
+ >
36
+ {{ shortcutText }}
37
+ </span>
38
+ </template>
39
+ </span>
40
+ </div>
34
41
  </template>
35
42
 
36
43
  <script>
37
- import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';
38
-
39
44
  export default {
40
45
  name: 'UnnnicTooltip',
41
- components: {
42
- Tooltip,
43
- TooltipTrigger,
44
- TooltipContent,
45
- },
46
46
  props: {
47
47
  text: {
48
48
  type: String,
@@ -67,10 +67,162 @@ export default {
67
67
  type: String,
68
68
  default: '',
69
69
  },
70
+ shortcutText: {
71
+ type: String,
72
+ default: null,
73
+ },
70
74
  enableHtml: {
71
75
  type: Boolean,
72
76
  default: false,
73
77
  },
74
78
  },
79
+ data() {
80
+ return {
81
+ topPos: null,
82
+ leftPos: null,
83
+ };
84
+ },
85
+ watch: {
86
+ side() {
87
+ this.getRightPost(this.$refs.tooltip);
88
+ },
89
+ },
90
+ mounted() {
91
+ this.handleResize();
92
+
93
+ window.addEventListener('scroll', this.handleResize);
94
+ window.addEventListener('resize', this.handleResize);
95
+ },
96
+ unmounted() {
97
+ window.removeEventListener('scroll', this.handleResize);
98
+ window.removeEventListener('resize', this.handleResize);
99
+ },
100
+ methods: {
101
+ handleResize() {
102
+ this.getRightPost(this.$refs.tooltip);
103
+ },
104
+ getRightPost(element) {
105
+ const elementPos = element.getBoundingClientRect();
106
+
107
+ if (element && this.$refs.label) {
108
+ if (this.side === 'right') {
109
+ this.leftPos = `${elementPos.x + elementPos.width + 8}px`;
110
+ this.topPos = `${elementPos.y + elementPos.height / 2 - this.$refs.label.offsetHeight / 2}px`;
111
+ } else if (this.side === 'left') {
112
+ this.leftPos = `${elementPos.x - this.$refs.label.offsetWidth - 8}px`;
113
+ this.topPos = `${elementPos.y + elementPos.height / 2 - this.$refs.label.offsetHeight / 2}px`;
114
+ } else if (this.side === 'top') {
115
+ this.leftPos = `${elementPos.x + elementPos.width / 2 - this.$refs.label.clientWidth / 2}px`;
116
+ this.topPos = `${elementPos.y - this.$refs.label.offsetHeight - 8}px`;
117
+ } else if (this.side === 'bottom') {
118
+ this.leftPos = `${elementPos.x + elementPos.width / 2 - this.$refs.label.clientWidth / 2}px`;
119
+ this.topPos = `${elementPos.y + elementPos.height + 8}px`;
120
+ }
121
+ }
122
+ },
123
+ },
75
124
  };
76
125
  </script>
126
+
127
+ <style lang="scss" scoped>
128
+ @use '@/assets/scss/unnnic' as *;
129
+
130
+ .unnnic-tooltip {
131
+ position: relative;
132
+ display: inline-block;
133
+ overflow-wrap: break-word;
134
+ }
135
+
136
+ .unnnic-tooltip-label {
137
+ z-index: 1;
138
+ visibility: hidden;
139
+ text-align: center;
140
+ position: fixed;
141
+ width: max-content;
142
+ min-width: 2 * $unnnic-font-size;
143
+ box-sizing: border-box;
144
+ width: auto;
145
+ display: flex;
146
+ justify-content: center;
147
+ gap: $unnnic-spacing-xs;
148
+ align-items: center;
149
+
150
+ background-color: $unnnic-color-neutral-black;
151
+ color: $unnnic-color-neutral-snow;
152
+ border-radius: $unnnic-border-radius-sm;
153
+ padding: $unnnic-inset-nano;
154
+ box-shadow: $unnnic-shadow-level-near;
155
+ font-size: $unnnic-font-size-body-md;
156
+ font-family: $unnnic-font-family-secondary;
157
+ font-weight: $unnnic-font-weight-regular;
158
+ line-height: ($unnnic-font-size-body-md + $unnnic-line-height-medium);
159
+
160
+ &::after {
161
+ content: '';
162
+ position: absolute;
163
+ border-width: 5px;
164
+ border-style: solid;
165
+ }
166
+
167
+ &-top {
168
+ position: fixed;
169
+ &::after {
170
+ top: 100%;
171
+ left: 50%;
172
+ margin-left: -5px;
173
+ border-color: $unnnic-color-neutral-black transparent transparent
174
+ transparent;
175
+ }
176
+ }
177
+
178
+ &-bottom {
179
+ position: fixed;
180
+ &::after {
181
+ bottom: 100%;
182
+ left: 50%;
183
+ margin-left: -5px;
184
+ border-color: transparent transparent $unnnic-color-neutral-black
185
+ transparent;
186
+ }
187
+ }
188
+ &-right {
189
+ position: fixed;
190
+ &::after {
191
+ top: 50%;
192
+ right: 100%;
193
+ margin-top: -5px;
194
+ border-color: transparent $unnnic-color-neutral-black transparent
195
+ transparent;
196
+ }
197
+ }
198
+ &-left {
199
+ position: fixed;
200
+ &::after {
201
+ top: 50%;
202
+ left: 100%;
203
+ margin-top: -5px;
204
+ border-color: transparent transparent transparent
205
+ $unnnic-color-neutral-black;
206
+ }
207
+ }
208
+
209
+ &-shortcut {
210
+ background-color: $unnnic-color-neutral-darkest;
211
+ border-radius: $unnnic-border-radius-sm;
212
+ padding: calc($unnnic-inset-nano / 2) $unnnic-inset-nano;
213
+ }
214
+ }
215
+
216
+ .unnnic-tooltip.force-open {
217
+ .unnnic-tooltip-label {
218
+ visibility: visible;
219
+ }
220
+ }
221
+
222
+ .unnnic-tooltip:hover {
223
+ .unnnic-tooltip-label {
224
+ visibility: visible;
225
+ width: auto;
226
+ }
227
+ }
228
+ </style>