@weni/unnnic-system 3.14.0-alpha-teleports.0 → 3.14.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 (77) hide show
  1. package/README.md +1 -9
  2. package/dist/{es-0d53b5b2.mjs → es-91ae9eed.mjs} +1 -1
  3. package/dist/{index-d7070de8.mjs → index-3b503557.mjs} +26122 -28965
  4. package/dist/index.d.ts +1485 -4826
  5. package/dist/{pt-br-bf4e1f97.mjs → pt-br-9553a558.mjs} +1 -1
  6. package/dist/style.css +1 -1
  7. package/dist/unnnic.mjs +204 -232
  8. package/dist/unnnic.umd.js +44 -48
  9. package/package.json +2 -3
  10. package/src/assets/scss/tailwind.scss +0 -8
  11. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +1 -1
  12. package/src/components/ChartFunnel/DefaultFunnel/ChartDefaultFunnelBase.vue +1 -2
  13. package/src/components/ChartFunnel/SvgFunnel/ChartFunnelTwoRows.vue +60 -61
  14. package/src/components/CheckboxGroup/CheckboxGroup.vue +7 -5
  15. package/src/components/Chip/Chip.vue +1 -1
  16. package/src/components/DatePicker/DatePicker.vue +1 -10
  17. package/src/components/Drawer/Drawer.vue +270 -180
  18. package/src/components/Drawer/__tests__/Drawer.spec.js +43 -32
  19. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +19 -18
  20. package/src/components/FormElement/FormElement.vue +96 -87
  21. package/src/components/InputDatePicker/InputDatePicker.vue +73 -68
  22. package/src/components/InputDatePicker/__test__/InputDatePicker.spec.js +24 -31
  23. package/src/components/ModalDialog/ModalDialog.vue +154 -63
  24. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +210 -30
  25. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +22 -1
  26. package/src/components/Radio/Radio.vue +12 -6
  27. package/src/components/Radio/__test__/Radio.spec.js +3 -1
  28. package/src/components/RadioGroup/RadioGroup.vue +18 -10
  29. package/src/components/Select/__tests__/SelectItem.spec.js +35 -15
  30. package/src/components/Switch/Switch.vue +10 -3
  31. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -3
  32. package/src/components/TemplatePreview/TemplatePreview.vue +28 -25
  33. package/src/components/TemplatePreview/TemplatePreviewModal.vue +10 -10
  34. package/src/components/TemplatePreview/types.d.ts +3 -3
  35. package/src/components/Toast/Toast.vue +1 -4
  36. package/src/components/Toast/ToastManager.ts +1 -4
  37. package/src/components/Toast/__tests__/ToastManager.spec.js +6 -10
  38. package/src/components/ToolTip/ToolTip.vue +177 -25
  39. package/src/components/ToolTip/__tests__/ToolTip.spec.js +61 -339
  40. package/src/components/index.ts +0 -56
  41. package/src/components/ui/popover/PopoverContent.vue +4 -7
  42. package/src/components/ui/popover/PopoverTrigger.vue +1 -5
  43. package/src/index.ts +2 -9
  44. package/src/stories/Drawer.stories.js +1 -1
  45. package/src/stories/ModalDialog.mdx +0 -3
  46. package/src/stories/ModalDialog.stories.js +1 -96
  47. package/src/stories/TemplatePreview.stories.js +27 -27
  48. package/src/stories/TemplatePreviewModal.stories.js +31 -31
  49. package/src/components/ui/dialog/Dialog.vue +0 -19
  50. package/src/components/ui/dialog/DialogClose.vue +0 -29
  51. package/src/components/ui/dialog/DialogContent.vue +0 -140
  52. package/src/components/ui/dialog/DialogFooter.vue +0 -50
  53. package/src/components/ui/dialog/DialogHeader.vue +0 -83
  54. package/src/components/ui/dialog/DialogTitle.vue +0 -38
  55. package/src/components/ui/dialog/DialogTrigger.vue +0 -16
  56. package/src/components/ui/dialog/index.ts +0 -7
  57. package/src/components/ui/drawer/Drawer.vue +0 -27
  58. package/src/components/ui/drawer/DrawerClose.vue +0 -31
  59. package/src/components/ui/drawer/DrawerContent.vue +0 -113
  60. package/src/components/ui/drawer/DrawerDescription.vue +0 -40
  61. package/src/components/ui/drawer/DrawerFooter.vue +0 -38
  62. package/src/components/ui/drawer/DrawerHeader.vue +0 -57
  63. package/src/components/ui/drawer/DrawerOverlay.vue +0 -33
  64. package/src/components/ui/drawer/DrawerTitle.vue +0 -37
  65. package/src/components/ui/drawer/DrawerTrigger.vue +0 -31
  66. package/src/components/ui/drawer/index.ts +0 -10
  67. package/src/components/ui/tooltip/Tooltip.vue +0 -21
  68. package/src/components/ui/tooltip/TooltipContent.vue +0 -77
  69. package/src/components/ui/tooltip/TooltipTrigger.vue +0 -24
  70. package/src/components/ui/tooltip/index.ts +0 -3
  71. package/src/lib/__tests__/teleport-target.spec.ts +0 -73
  72. package/src/lib/layer-manager.ts +0 -64
  73. package/src/lib/teleport-target.ts +0 -46
  74. package/src/stories/Dialog.stories.js +0 -832
  75. package/src/stories/DrawerNext.stories.js +0 -611
  76. package/src/stories/LayerManager.docs.mdx +0 -40
  77. package/src/stories/LayerManager.stories.js +0 -407
@@ -1,8 +1,10 @@
1
1
  <template>
2
- <section :class="[
3
- 'unnnic-radio-group__container',
4
- `unnnic-radio-group--state-${state}`
5
- ]">
2
+ <section
3
+ :class="[
4
+ 'unnnic-radio-group__container',
5
+ `unnnic-radio-group--state-${state}`,
6
+ ]"
7
+ >
6
8
  <UnnnicLabel
7
9
  v-if="label"
8
10
  :label="label"
@@ -68,11 +70,14 @@ const emit = defineEmits(['update:modelValue']);
68
70
 
69
71
  const contextModelValue = ref(props.modelValue);
70
72
 
71
- watch(() => props.modelValue, (newVal) => {
72
- if (newVal !== contextModelValue.value) {
73
- contextModelValue.value = newVal;
74
- }
75
- });
73
+ watch(
74
+ () => props.modelValue,
75
+ (newVal) => {
76
+ if (newVal !== contextModelValue.value) {
77
+ contextModelValue.value = newVal;
78
+ }
79
+ },
80
+ );
76
81
 
77
82
  watch(contextModelValue, (newVal) => {
78
83
  if (newVal !== props.modelValue) {
@@ -81,7 +86,10 @@ watch(contextModelValue, (newVal) => {
81
86
  });
82
87
 
83
88
  const computedName = computed(() => {
84
- return props.name || `unnnic-radio-group-${Math.random().toString(36).substring(2, 15)}`;
89
+ return (
90
+ props.name ||
91
+ `unnnic-radio-group-${Math.random().toString(36).substring(2, 15)}`
92
+ );
85
93
  });
86
94
 
87
95
  provide('contextModelValue', contextModelValue);
@@ -3,9 +3,9 @@ import { beforeEach, describe, expect, test } from 'vitest';
3
3
  import SelectItem from '../SelectItem.vue';
4
4
 
5
5
  const createWrapper = (props = {}, slots = {}) => {
6
- return mount(SelectItem, {
6
+ return mount(SelectItem, {
7
7
  props,
8
- slots: slots.default ? { default: slots.default } : {}
8
+ slots: slots.default ? { default: slots.default } : {},
9
9
  });
10
10
  };
11
11
 
@@ -76,8 +76,12 @@ describe('SelectItem.vue', () => {
76
76
  test('does not apply size class when size is empty', async () => {
77
77
  await wrapper.setProps({ size: '' });
78
78
  const labelElement = wrapper.find('.unnnic-select-item__label');
79
- expect(labelElement.classes()).not.toContain('unnnic-select-item__label--md');
80
- expect(labelElement.classes()).not.toContain('unnnic-select-item__label--sm');
79
+ expect(labelElement.classes()).not.toContain(
80
+ 'unnnic-select-item__label--md',
81
+ );
82
+ expect(labelElement.classes()).not.toContain(
83
+ 'unnnic-select-item__label--sm',
84
+ );
81
85
  });
82
86
  });
83
87
 
@@ -128,7 +132,10 @@ describe('SelectItem.vue', () => {
128
132
  });
129
133
 
130
134
  test('emits click event even when selectable is false', async () => {
131
- const clickWrapper = createWrapper({ selectable: false }, { default: 'Test Item' });
135
+ const clickWrapper = createWrapper(
136
+ { selectable: false },
137
+ { default: 'Test Item' },
138
+ );
132
139
  await clickWrapper.trigger('click');
133
140
  expect(clickWrapper.emitted('click')).toBeTruthy();
134
141
  expect(clickWrapper.emitted('click').length).toBeGreaterThanOrEqual(1);
@@ -194,7 +201,7 @@ describe('SelectItem.vue', () => {
194
201
  test('has proper semantic structure', () => {
195
202
  const div = wrapper.find('.unnnic-select-item');
196
203
  const span = wrapper.find('.unnnic-select-item__label');
197
-
204
+
198
205
  expect(div.exists()).toBe(true);
199
206
  expect(span.exists()).toBe(true);
200
207
  expect(span.element.tagName).toBe('SPAN');
@@ -214,7 +221,8 @@ describe('SelectItem.vue', () => {
214
221
  });
215
222
 
216
223
  test('handles long slot content', async () => {
217
- const longText = 'This is a very long text content that should be handled properly by the component';
224
+ const longText =
225
+ 'This is a very long text content that should be handled properly by the component';
218
226
  const longWrapper = createWrapper({}, { default: longText });
219
227
  const labelElement = longWrapper.find('.unnnic-select-item__label');
220
228
  expect(labelElement.text()).toBe(longText);
@@ -237,8 +245,12 @@ describe('SelectItem.vue', () => {
237
245
 
238
246
  describe('CSS class combinations', () => {
239
247
  test('applies correct classes for non-selectable inactive item', async () => {
240
- await wrapper.setProps({ selectable: false, active: false, textFocused: false });
241
-
248
+ await wrapper.setProps({
249
+ selectable: false,
250
+ active: false,
251
+ textFocused: false,
252
+ });
253
+
242
254
  expect(wrapper.classes()).toContain('unnnic-select-item');
243
255
  expect(wrapper.classes()).not.toContain('unnnic-select-item--selectable');
244
256
  expect(wrapper.classes()).not.toContain('unnnic--clickable');
@@ -247,8 +259,12 @@ describe('SelectItem.vue', () => {
247
259
  });
248
260
 
249
261
  test('applies correct classes for selectable active item', async () => {
250
- await wrapper.setProps({ selectable: true, active: true, textFocused: false });
251
-
262
+ await wrapper.setProps({
263
+ selectable: true,
264
+ active: true,
265
+ textFocused: false,
266
+ });
267
+
252
268
  expect(wrapper.classes()).toContain('unnnic-select-item');
253
269
  expect(wrapper.classes()).toContain('unnnic-select-item--selectable');
254
270
  expect(wrapper.classes()).toContain('unnnic--clickable');
@@ -257,8 +273,12 @@ describe('SelectItem.vue', () => {
257
273
  });
258
274
 
259
275
  test('applies correct classes for text-focused item', async () => {
260
- await wrapper.setProps({ selectable: true, active: false, textFocused: true });
261
-
276
+ await wrapper.setProps({
277
+ selectable: true,
278
+ active: false,
279
+ textFocused: true,
280
+ });
281
+
262
282
  expect(wrapper.classes()).toContain('unnnic-select-item');
263
283
  expect(wrapper.classes()).toContain('unnnic-select-item--selectable');
264
284
  expect(wrapper.classes()).toContain('unnnic--clickable');
@@ -298,11 +318,11 @@ describe('SelectItem.vue', () => {
298
318
  });
299
319
 
300
320
  test('matches snapshot with all states combined', async () => {
301
- await wrapper.setProps({
321
+ await wrapper.setProps({
302
322
  size: 'md',
303
323
  selectable: true,
304
324
  active: true,
305
- textFocused: true
325
+ textFocused: true,
306
326
  });
307
327
  expect(wrapper.html()).toMatchSnapshot();
308
328
  });
@@ -8,7 +8,12 @@
8
8
  class="unnnic-switch__label"
9
9
  />
10
10
 
11
- <label :class="['unnnic-switch__input-wrapper', {'unnnic-switch__input-wrapper--disabled': disabled}]">
11
+ <label
12
+ :class="[
13
+ 'unnnic-switch__input-wrapper',
14
+ { 'unnnic-switch__input-wrapper--disabled': disabled },
15
+ ]"
16
+ >
12
17
  <input
13
18
  class="unnnic-switch__input"
14
19
  type="checkbox"
@@ -78,7 +83,7 @@ export default {
78
83
  type: String,
79
84
  default: '',
80
85
  },
81
-
86
+
82
87
  helper: {
83
88
  type: String,
84
89
  default: '',
@@ -176,7 +181,9 @@ $switch-height: 20px;
176
181
  background-repeat: no-repeat;
177
182
  background-position: 4px center;
178
183
 
179
- transition: 120ms linear background-position, 120ms linear background-color;
184
+ transition:
185
+ 120ms linear background-position,
186
+ 120ms linear background-color;
180
187
 
181
188
  cursor: pointer;
182
189
 
@@ -4,9 +4,7 @@ exports[`Tab.vue > matches the snapshot 1`] = `
4
4
  "<div data-v-b4e39fac="" class="tab size-md">
5
5
  <header data-v-b4e39fac="" class="tab-header">
6
6
  <ul data-v-b4e39fac="" class="tab-content">
7
- <li data-v-b4e39fac="" class="tab-head">tab1<div data-v-b3d24f2b="" class="unnnic-tooltip-trigger" data-testid="tooltip-trigger" data-state="closed" data-grace-area-trigger=""><span data-v-26446d8e="" data-v-b4e39fac="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--sm unnnic-icon__size--sm" data-testid="material-icon" translate="no">help</span></div>
8
- <!--teleport start-->
9
- <!--teleport end-->
7
+ <li data-v-b4e39fac="" class="tab-head">tab1<div data-v-bf0cf546="" data-v-b4e39fac="" class="unnnic-tooltip"><span data-v-26446d8e="" data-v-b4e39fac="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--sm unnnic-icon__size--sm" data-testid="material-icon" translate="no">help</span><span data-v-bf0cf546="" class="unnnic-tooltip-label unnnic-tooltip-label-bottom" data-testid="tooltip-label" style="left: 0px; top: 8px;">Tooltip text <br data-v-bf0cf546=""><!--v-if--></span></div>
10
8
  </li>
11
9
  <li data-v-b4e39fac="" class="tab-head tab-head--active">tab2
12
10
  <!--v-if-->
@@ -75,7 +75,10 @@
75
75
  {{ template?.footer }}
76
76
  </footer>
77
77
  </section>
78
- <footer v-if="hasButtons" class="unnnic-template-preview__buttons">
78
+ <footer
79
+ v-if="hasButtons"
80
+ class="unnnic-template-preview__buttons"
81
+ >
79
82
  <section
80
83
  v-for="(button, index) in template?.buttons"
81
84
  :key="`button-${index}`"
@@ -96,15 +99,15 @@
96
99
  </template>
97
100
 
98
101
  <script lang="ts" setup>
99
- import { computed } from "vue";
102
+ import { computed } from 'vue';
100
103
 
101
- import type { Template } from "./types";
104
+ import type { Template } from './types';
102
105
 
103
- import imagePreview from "../../assets/img/previews/image-preview.png";
104
- import documentPreview from "../../assets/img/previews/doc-preview.png";
105
- import videoPreview from "../../assets/img/previews/video-preview.png";
106
+ import imagePreview from '../../assets/img/previews/image-preview.png';
107
+ import documentPreview from '../../assets/img/previews/doc-preview.png';
108
+ import videoPreview from '../../assets/img/previews/video-preview.png';
106
109
 
107
- import UnnnicIcon from "../Icon.vue";
110
+ import UnnnicIcon from '../Icon.vue';
108
111
 
109
112
  interface Props {
110
113
  template?: Template | null;
@@ -115,30 +118,30 @@ const props = withDefaults(defineProps<Props>(), {
115
118
  });
116
119
 
117
120
  const hasHeader = computed(
118
- () => props.template?.header && props.template.header.type
121
+ () => props.template?.header && props.template.header.type,
119
122
  );
120
123
  const hasHeaderMedia = computed(
121
- () => !!props.template?.header && props.template.header.type === "MEDIA"
124
+ () => !!props.template?.header && props.template.header.type === 'MEDIA',
122
125
  );
123
126
  const hasBody = computed(
124
- () => !!props.template?.body && props.template.body.length > 0
127
+ () => !!props.template?.body && props.template.body.length > 0,
125
128
  );
126
129
  const hasFooter = computed(
127
- () => !!props.template?.footer && props.template.footer.length > 0
130
+ () => !!props.template?.footer && props.template.footer.length > 0,
128
131
  );
129
132
  const hasButtons = computed(
130
- () => !!props.template?.buttons && props.template.buttons.length > 0
133
+ () => !!props.template?.buttons && props.template.buttons.length > 0,
131
134
  );
132
135
  const parsedBody = computed(() => {
133
- if (!hasBody.value) return "";
136
+ if (!hasBody.value) return '';
134
137
 
135
138
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
136
139
  const result = props
137
- .template!.body!.replaceAll("\n", "<br/>")
138
- .replaceAll(/(?:\*)([^*<\n]+)(?:\*)/g, "<strong>$1</strong>")
139
- .replaceAll(/(?:_)([^_<\n]+)(?:_)/g, "<i>$1</i>")
140
- .replaceAll(/(?:~)([^~<\n]+)(?:~)/g, "<s>$1</s>")
141
- .replaceAll(/(?:```)([^```<\n]+)(?:```)/g, "<tt>$1</tt>")
140
+ .template!.body!.replaceAll('\n', '<br/>')
141
+ .replaceAll(/(?:\*)([^*<\n]+)(?:\*)/g, '<strong>$1</strong>')
142
+ .replaceAll(/(?:_)([^_<\n]+)(?:_)/g, '<i>$1</i>')
143
+ .replaceAll(/(?:~)([^~<\n]+)(?:~)/g, '<s>$1</s>')
144
+ .replaceAll(/(?:```)([^```<\n]+)(?:```)/g, '<tt>$1</tt>')
142
145
  .replaceAll(/{{.*?}}/g, (match) => `<strong>${match}</strong>`);
143
146
 
144
147
  return result;
@@ -146,19 +149,19 @@ const parsedBody = computed(() => {
146
149
 
147
150
  const getButtonIcon = (buttonType) => {
148
151
  const buttonMapper = {
149
- PHONE_NUMBER: "phone",
150
- URL: "open_in_new",
151
- COPY_CODE: "content_copy",
152
- FLOW: "",
153
- QUICK_REPLY: "reply",
152
+ PHONE_NUMBER: 'phone',
153
+ URL: 'open_in_new',
154
+ COPY_CODE: 'content_copy',
155
+ FLOW: '',
156
+ QUICK_REPLY: 'reply',
154
157
  };
155
158
 
156
- return buttonMapper[buttonType] || "";
159
+ return buttonMapper[buttonType] || '';
157
160
  };
158
161
  </script>
159
162
 
160
163
  <style lang="scss" scoped>
161
- @use "@/assets/scss/unnnic" as *;
164
+ @use '@/assets/scss/unnnic' as *;
162
165
 
163
166
  .unnnic-template-preview {
164
167
  display: flex;
@@ -1,9 +1,9 @@
1
1
  <template>
2
2
  <UnnnicModalDialog
3
- :model-value="modelValue"
3
+ :modelValue="modelValue"
4
4
  @update:modelValue="$event === false && $emit('close')"
5
5
  :title="defaultTranslations.title[props.locale]"
6
- :show-close-icon="true"
6
+ :showCloseIcon="true"
7
7
  class="unnnic-template-preview-modal"
8
8
  >
9
9
  <UnnnicTemplatePreview :template="template" />
@@ -11,16 +11,16 @@
11
11
  </template>
12
12
 
13
13
  <script lang="ts" setup>
14
- import UnnnicTemplatePreview from "./TemplatePreview.vue";
15
- import UnnnicModalDialog from "../ModalDialog/ModalDialog.vue";
14
+ import UnnnicTemplatePreview from './TemplatePreview.vue';
15
+ import UnnnicModalDialog from '../ModalDialog/ModalDialog.vue';
16
16
 
17
- import type { Template } from "./types";
17
+ import type { Template } from './types';
18
18
 
19
19
  const defaultTranslations = {
20
20
  title: {
21
- "pt-br": "Visualizar modelo",
22
- en: "Template preview",
23
- es: "Vista previa de plantilla",
21
+ 'pt-br': 'Visualizar modelo',
22
+ en: 'Template preview',
23
+ es: 'Vista previa de plantilla',
24
24
  },
25
25
  };
26
26
 
@@ -31,7 +31,7 @@ interface Props {
31
31
  }
32
32
 
33
33
  const props = withDefaults(defineProps<Props>(), {
34
- locale: "en",
34
+ locale: 'en',
35
35
  });
36
36
 
37
37
  defineEmits<{
@@ -40,7 +40,7 @@ defineEmits<{
40
40
  </script>
41
41
 
42
42
  <style lang="scss" scoped>
43
- @use "@/assets/scss/unnnic" as *;
43
+ @use '@/assets/scss/unnnic' as *;
44
44
 
45
45
  :deep(.unnnic-modal-dialog__container__content) {
46
46
  display: flex;
@@ -1,14 +1,14 @@
1
1
  export interface Template {
2
2
  header: {
3
- type: "TEXT" | "MEDIA";
4
- mediaType?: "IMAGE" | "VIDEO" | "DOCUMENT";
3
+ type: 'TEXT' | 'MEDIA';
4
+ mediaType?: 'IMAGE' | 'VIDEO' | 'DOCUMENT';
5
5
  text?: string | null;
6
6
  src?: string | null;
7
7
  };
8
8
  body?: string;
9
9
  footer?: string;
10
10
  buttons?: Array<{
11
- type: "QUICK_REPLY" | "PHONE_NUMBER";
11
+ type: 'QUICK_REPLY' | 'PHONE_NUMBER';
12
12
  text: string;
13
13
  countryCode?: string;
14
14
  phoneNumber?: string;
@@ -11,7 +11,6 @@
11
11
  :role="type === 'error' ? 'alert' : 'status'"
12
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"
@@ -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';
@@ -111,8 +109,6 @@ const typeConfig = computed(() => {
111
109
  };
112
110
  });
113
111
 
114
- const toastZIndex = useLayerZIndex();
115
-
116
112
  const handleClose = () => {
117
113
  isVisible.value = false;
118
114
  emit('close');
@@ -156,6 +152,7 @@ onUnmounted(() => {
156
152
  position: fixed;
157
153
  bottom: $unnnic-space-4;
158
154
  right: $unnnic-space-4;
155
+ z-index: 9999;
159
156
 
160
157
  display: flex;
161
158
  align-items: flex-end;
@@ -1,5 +1,4 @@
1
1
  import { createApp } from 'vue';
2
- import { getTeleportContainer } from '@/lib/teleport-target';
3
2
  import Toast from './Toast.vue';
4
3
  import type {
5
4
  ToastProps,
@@ -21,9 +20,7 @@ class ToastManager implements ToastManager {
21
20
  this.container = document.createElement('div');
22
21
  this.container.setAttribute('unnnic-toast-container', 'true');
23
22
 
24
- const host = getTeleportContainer() ?? document.body;
25
- host?.appendChild(this.container);
26
-
23
+ document.body.appendChild(this.container);
27
24
  return this.container;
28
25
  }
29
26
 
@@ -1,15 +1,11 @@
1
1
  import { beforeEach, describe, expect, afterEach, test, vi } from 'vitest';
2
2
 
3
- vi.mock('vue', async () => {
4
- const actual = await vi.importActual('vue');
5
- return {
6
- ...actual,
7
- createApp: vi.fn(() => ({
8
- mount: vi.fn(),
9
- unmount: vi.fn(),
10
- })),
11
- };
12
- });
3
+ vi.mock('vue', () => ({
4
+ createApp: vi.fn(() => ({
5
+ mount: vi.fn(),
6
+ unmount: vi.fn(),
7
+ })),
8
+ }));
13
9
 
14
10
  vi.mock('../Toast.vue', () => ({
15
11
  default: {