@weni/unnnic-system 3.9.1-alpha.1 → 3.9.1-alpha.3

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 (83) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/Button/Button.vue.d.ts.map +1 -1
  3. package/dist/components/DateFilter/DateFilter.vue.d.ts +3 -82
  4. package/dist/components/Input/BaseInput.vue.d.ts +0 -22
  5. package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
  6. package/dist/components/Input/Input.vue.d.ts +3 -82
  7. package/dist/components/Input/Input.vue.d.ts.map +1 -1
  8. package/dist/components/Input/TextInput.vue.d.ts +2 -53
  9. package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
  10. package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +4 -83
  11. package/dist/components/InputNext/InputNext.vue.d.ts +1 -1
  12. package/dist/components/ModalDialog/ModalDialog.vue.d.ts +29 -203
  13. package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
  14. package/dist/components/ModalNext/ModalNext.vue.d.ts +3 -82
  15. package/dist/components/SelectSmart/SelectSmart.vue.d.ts +2 -53
  16. package/dist/components/SelectTime/index.vue.d.ts +2 -53
  17. package/dist/components/index.d.ts +116 -1568
  18. package/dist/components/index.d.ts.map +1 -1
  19. package/dist/{es-de156c12.mjs → es-4ab705d8.mjs} +1 -1
  20. package/dist/{index-21cbba5d.mjs → index-fca1e425.mjs} +10495 -11246
  21. package/dist/locales/en.json.d.ts +1 -2
  22. package/dist/locales/es.json.d.ts +1 -2
  23. package/dist/locales/pt_br.json.d.ts +1 -2
  24. package/dist/{pt-br-5fa49a3e.mjs → pt-br-b286b97c.mjs} +1 -1
  25. package/dist/style.css +1 -1
  26. package/dist/unnnic.mjs +180 -194
  27. package/dist/unnnic.umd.js +35 -39
  28. package/package.json +1 -1
  29. package/src/assets/scss/tailwind.scss +0 -8
  30. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +1 -1
  31. package/src/components/Button/Button.vue +0 -1
  32. package/src/components/Input/BaseInput.vue +2 -21
  33. package/src/components/Input/Input.scss +3 -3
  34. package/src/components/Input/Input.vue +1 -19
  35. package/src/components/Input/TextInput.vue +21 -62
  36. package/src/components/ModalDialog/ModalDialog.vue +148 -62
  37. package/src/components/ModalDialog/__tests__/ModalDialog.spec.js +221 -11
  38. package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +22 -1
  39. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +1 -0
  40. package/src/components/index.ts +8 -36
  41. package/src/locales/en.json +1 -2
  42. package/src/locales/es.json +1 -2
  43. package/src/locales/pt_br.json +1 -2
  44. package/src/stories/ModalDialog.mdx +0 -3
  45. package/src/stories/ModalDialog.stories.js +1 -1
  46. package/dist/components/ui/dialog/Dialog.vue.d.ts +0 -23
  47. package/dist/components/ui/dialog/Dialog.vue.d.ts.map +0 -1
  48. package/dist/components/ui/dialog/DialogClose.vue.d.ts +0 -19
  49. package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +0 -1
  50. package/dist/components/ui/dialog/DialogContent.vue.d.ts +0 -43
  51. package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +0 -1
  52. package/dist/components/ui/dialog/DialogFooter.vue.d.ts +0 -25
  53. package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +0 -1
  54. package/dist/components/ui/dialog/DialogHeader.vue.d.ts +0 -29
  55. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +0 -1
  56. package/dist/components/ui/dialog/DialogTitle.vue.d.ts +0 -23
  57. package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +0 -1
  58. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +0 -19
  59. package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +0 -1
  60. package/dist/components/ui/dialog/index.d.ts +0 -8
  61. package/dist/components/ui/dialog/index.d.ts.map +0 -1
  62. package/src/components/Alert/SIMPLE_MIGRATION_GUIDE.md +0 -152
  63. package/src/components/Popover/__tests__/Popover.spec.js +0 -147
  64. package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +0 -8
  65. package/src/components/Popover/index.vue +0 -146
  66. package/src/components/Select/SelectOption.vue +0 -65
  67. package/src/components/Select/__tests__/Select.spec.js +0 -412
  68. package/src/components/Select/__tests__/SelectItem.spec.js +0 -330
  69. package/src/components/Select/__tests__/SelectOption.spec.js +0 -174
  70. package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +0 -97
  71. package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +0 -15
  72. package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +0 -25
  73. package/src/components/Select/index.vue +0 -245
  74. package/src/components/ui/dialog/Dialog.vue +0 -15
  75. package/src/components/ui/dialog/DialogClose.vue +0 -25
  76. package/src/components/ui/dialog/DialogContent.vue +0 -133
  77. package/src/components/ui/dialog/DialogFooter.vue +0 -46
  78. package/src/components/ui/dialog/DialogHeader.vue +0 -79
  79. package/src/components/ui/dialog/DialogTitle.vue +0 -34
  80. package/src/components/ui/dialog/DialogTrigger.vue +0 -12
  81. package/src/components/ui/dialog/index.ts +0 -7
  82. package/src/stories/Dialog.stories.js +0 -832
  83. package/src/stories/Select.stories.js +0 -158
@@ -1,8 +0,0 @@
1
- export { default as Dialog } from './Dialog.vue';
2
- export { default as DialogClose } from './DialogClose.vue';
3
- export { default as DialogContent } from './DialogContent.vue';
4
- export { default as DialogFooter } from './DialogFooter.vue';
5
- export { default as DialogHeader } from './DialogHeader.vue';
6
- export { default as DialogTitle } from './DialogTitle.vue';
7
- export { default as DialogTrigger } from './DialogTrigger.vue';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,152 +0,0 @@
1
- # 🚀 Guia de Migração: Alert → Toast
2
-
3
- ## 📦 Importação
4
-
5
- **ANTES:**
6
-
7
- ```javascript
8
- import Unnnic from '@weni/unnnic-system';
9
-
10
- Unnnic.unnnicCallAlert(...);
11
- ```
12
-
13
- **DEPOIS:**
14
-
15
- ```javascript
16
- import { toast } from "@weni/unnnic-system";
17
- ```
18
-
19
- ---
20
-
21
- ## 📋 Mapeamento de Propriedades
22
-
23
- | Alert | Toast | Alteração |
24
- | ------------------- | ------------------- | ------------------------------- |
25
- | `text` | `title` | Propriedade renomeada |
26
- | `seconds` | `timeout` | Agora em **milissegundos (ms)** |
27
- | `type: 'success'` | `toast.success()` | Substituído por método direto |
28
- | `type: 'error'` | `toast.error()` | Substituído por método direto |
29
- | `type: 'attention'` | `toast.attention()` | Substituído por método direto |
30
- | `type: 'default'` | `toast.info()` | Substituído por método direto |
31
-
32
- ---
33
-
34
- ## 🔄 Exemplos de Uso
35
-
36
- ### Exemplo 1 – Uso com Função
37
-
38
- **ANTES:**
39
-
40
- ```javascript
41
- // callAlert
42
- alert.callAlert({
43
- props: {
44
- text: "Dados salvos com sucesso!",
45
- type: "success",
46
- },
47
- seconds: 3,
48
- });
49
- ```
50
-
51
- **DEPOIS:**
52
-
53
- ```javascript
54
- // toast
55
- toast.success("Dados salvos com sucesso!");
56
- ```
57
-
58
- ---
59
-
60
- ### Exemplo 2 – Uso com Componente
61
-
62
- **ANTES:**
63
-
64
- ```vue
65
- <!-- UnnnicAlert -->
66
- <UnnnicAlert
67
- text="Dados salvos com sucesso!"
68
- type="success"
69
- @close="handleClose"
70
- />
71
- ```
72
-
73
- **DEPOIS:**
74
-
75
- ```vue
76
- <!-- UnnnicToast -->
77
- <UnnnicToast
78
- title="Dados salvos com sucesso!"
79
- type="success"
80
- @close="handleClose"
81
- />
82
- ```
83
-
84
- ---
85
-
86
- ## 📚 Casos Comuns
87
-
88
- ### ✅ Sucesso
89
-
90
- **ANTES:**
91
-
92
- ```javascript
93
- alert.callAlert({
94
- props: {
95
- text: "Dados salvos com sucesso!",
96
- type: "success",
97
- },
98
- seconds: 5,
99
- });
100
- ```
101
-
102
- **DEPOIS:**
103
-
104
- ```javascript
105
- toast.success("Dados salvos com sucesso!");
106
- ```
107
-
108
- ---
109
-
110
- ### ❌ Erro
111
-
112
- **ANTES:**
113
-
114
- ```javascript
115
- alert.callAlert({
116
- props: {
117
- text: "Erro ao salvar dados",
118
- type: "error",
119
- },
120
- seconds: 5,
121
- });
122
- ```
123
-
124
- **DEPOIS:**
125
-
126
- ```javascript
127
- toast.error("Erro ao salvar dados");
128
- ```
129
-
130
- ---
131
-
132
- ### ⏱ Timeout Personalizado
133
-
134
- **ANTES:**
135
-
136
- ```javascript
137
- alert.callAlert({
138
- props: {
139
- text: "Mensagem importante",
140
- type: "success",
141
- },
142
- seconds: 10, // 10 segundos
143
- });
144
- ```
145
-
146
- **DEPOIS:**
147
-
148
- ```javascript
149
- toast.success("Mensagem importante", "", {
150
- timeout: 10000, // 10 segundos em ms
151
- });
152
- ```
@@ -1,147 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import { beforeEach, describe, expect, afterEach, test, vi } from 'vitest';
3
- import UnnnicPopover from '@/components/Popover/index.vue';
4
-
5
- vi.mock('@vueuse/core', () => ({
6
- onClickOutside: vi.fn(),
7
- useResizeObserver: vi.fn(),
8
- }));
9
-
10
- describe('UnnnicPopover.vue', () => {
11
- let wrapper;
12
-
13
- const defaultSlots = {
14
- trigger: '<button data-testid="trigger-button">Click me</button>',
15
- content: '<div data-testid="popover-content">Popover content</div>',
16
- };
17
-
18
- const mountWrapper = (props) => {
19
- return mount(UnnnicPopover, {
20
- slots: defaultSlots,
21
- props: {
22
- ...props,
23
- },
24
- });
25
- };
26
-
27
- beforeEach(() => {
28
- wrapper = mountWrapper();
29
- });
30
-
31
- afterEach(() => {
32
- wrapper?.unmount();
33
- });
34
-
35
- test('renders correctly', () => {
36
- expect(wrapper.exists()).toBe(true);
37
- expect(wrapper.find('.unnnic-popover').exists()).toBe(true);
38
- });
39
-
40
- test('renders trigger slot', () => {
41
- const trigger = wrapper.find('[data-testid="popover-trigger"]');
42
- const triggerButton = wrapper.find('[data-testid="trigger-button"]');
43
-
44
- expect(trigger.exists()).toBe(true);
45
- expect(triggerButton.exists()).toBe(true);
46
- expect(triggerButton.text()).toBe('Click me');
47
- });
48
-
49
- test('renders content slot inside balloon', async () => {
50
- wrapper.vm.open = true;
51
- await wrapper.vm.$nextTick();
52
- const balloon = wrapper.find('[data-testid="popover-balloon"]');
53
- const content = wrapper.find('[data-testid="popover-content"]');
54
-
55
- expect(balloon.exists()).toBe(true);
56
- expect(content.exists()).toBe(true);
57
- expect(content.text()).toBe('Popover content');
58
- });
59
-
60
- test('balloon is hidden by default', () => {
61
- const balloon = wrapper.find('[data-testid="popover-balloon"]');
62
- expect(balloon.exists()).toBe(false);
63
- });
64
-
65
- test('toggles balloon visibility when trigger is clicked', async () => {
66
- const trigger = wrapper.find('[data-testid="popover-trigger"]');
67
-
68
- let balloon = wrapper.find('[data-testid="popover-balloon"]');
69
-
70
- expect(balloon.exists()).toBe(false);
71
-
72
- await trigger.trigger('click');
73
- await wrapper.vm.$nextTick();
74
-
75
- balloon = wrapper.find('[data-testid="popover-balloon"]');
76
-
77
- expect(balloon.exists()).toBe(true);
78
- });
79
-
80
- test('uses modelValue when provided', async () => {
81
- const wrapper = mountWrapper({ modelValue: true });
82
- const balloon = wrapper.find('[data-testid="popover-balloon"]');
83
- expect(balloon.isVisible()).toBe(true);
84
- });
85
-
86
- test('emits update:modelValue when open state changes', async () => {
87
- await wrapper.setProps({ modelValue: false });
88
-
89
- const trigger = wrapper.find('[data-testid="popover-trigger"]');
90
- await trigger.trigger('click');
91
-
92
- expect(wrapper.emitted('update:modelValue')).toBeTruthy();
93
- expect(wrapper.emitted('update:modelValue')[0]).toEqual([true]);
94
- });
95
-
96
- test('does not emit update:modelValue when modelValue is undefined', async () => {
97
- const trigger = wrapper.find('[data-testid="popover-trigger"]');
98
- await trigger.trigger('click');
99
-
100
- expect(wrapper.emitted('update:modelValue')).toBeFalsy();
101
- });
102
-
103
- test('exposes open ref', () => {
104
- expect(wrapper.vm.open).toBeDefined();
105
- expect(typeof wrapper.vm.open).toBe('boolean');
106
- });
107
-
108
- test('open ref can be controlled programmatically', async () => {
109
- wrapper.vm.open = true;
110
- await wrapper.vm.$nextTick();
111
-
112
- const balloon = wrapper.find('[data-testid="popover-balloon"]');
113
- expect(balloon.isVisible()).toBe(true);
114
- });
115
-
116
- test('persistent prop prevents closing on outside click', async () => {
117
- await wrapper.setProps({ persistent: true });
118
-
119
- const { onClickOutside } = await import('@vueuse/core');
120
- const mockOnClickOutside = vi.mocked(onClickOutside);
121
-
122
- const callback = mockOnClickOutside.mock.calls[0][1];
123
-
124
- wrapper.vm.open = true;
125
- await wrapper.vm.$nextTick();
126
-
127
- callback();
128
-
129
- const balloon = wrapper.find('[data-testid="popover-balloon"]');
130
- expect(balloon.isVisible()).toBe(true);
131
- });
132
-
133
- test('applies correct CSS classes', async () => {
134
- wrapper.vm.open = true;
135
- await wrapper.vm.$nextTick();
136
-
137
- const popover = wrapper.find('.unnnic-popover');
138
- const balloon = wrapper.find('.unnnic-popover__balloon');
139
-
140
- expect(popover.exists()).toBe(true);
141
- expect(balloon.exists()).toBe(true);
142
- });
143
-
144
- test('matches the snapshot', () => {
145
- expect(wrapper.html()).toMatchSnapshot();
146
- });
147
- });
@@ -1,8 +0,0 @@
1
- // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
-
3
- exports[`UnnnicPopover.vue > matches the snapshot 1`] = `
4
- "<section data-v-5a3125ac="" class="unnnic-popover">
5
- <div data-v-5a3125ac="" class="unnnic-popover__trigger" data-testid="popover-trigger"><button data-testid="trigger-button">Click me</button></div>
6
- <!--v-if-->
7
- </section>"
8
- `;
@@ -1,146 +0,0 @@
1
- <template>
2
- <section
3
- ref="popover"
4
- class="unnnic-popover"
5
- >
6
- <div
7
- class="unnnic-popover__trigger"
8
- data-testid="popover-trigger"
9
- @click="toggleOpen()"
10
- >
11
- <slot name="trigger" />
12
- </div>
13
- <div
14
- v-if="open"
15
- class="unnnic-popover__balloon"
16
- data-testid="popover-balloon"
17
- >
18
- <slot name="content" />
19
- </div>
20
- </section>
21
- </template>
22
-
23
- <script setup lang="ts">
24
- import { computed, onMounted, ref, useTemplateRef, watch } from 'vue';
25
- import { onClickOutside, useResizeObserver } from '@vueuse/core';
26
-
27
- const target = useTemplateRef<HTMLDivElement>('popover');
28
-
29
- const popoverWidth = ref<string>('');
30
-
31
- useResizeObserver(target, (entries) => {
32
- const entry = entries[0];
33
- const { width } = entry.contentRect;
34
- popoverWidth.value = `${width}px`;
35
- });
36
-
37
- onClickOutside(target, () => {
38
- if (props.persistent) return;
39
- open.value = false;
40
- });
41
-
42
- defineOptions({
43
- name: 'UnnnicPopover',
44
- });
45
-
46
- interface PopoverBalloonProps {
47
- width?: string;
48
- height?: string;
49
- maxHeight?: string;
50
- }
51
-
52
- interface PopoverProps {
53
- modelValue?: boolean;
54
- persistent?: boolean;
55
- popoverBalloonProps?: PopoverBalloonProps;
56
- }
57
-
58
- const props = withDefaults(defineProps<PopoverProps>(), {
59
- modelValue: undefined,
60
- persistent: false,
61
- });
62
-
63
- const emit = defineEmits<{
64
- 'update:modelValue': [value: boolean];
65
- }>();
66
-
67
- const useModelValue = computed(() => props.modelValue !== undefined);
68
-
69
- const open = ref<boolean>(
70
- useModelValue.value ? Boolean(props.modelValue) : false,
71
- );
72
-
73
- const toggleOpen = () => {
74
- open.value = !open.value;
75
- };
76
-
77
- const calculatedPopoverWidth = computed(() => {
78
- return props.popoverBalloonProps?.width || popoverWidth.value;
79
- });
80
-
81
- const popoverHeight = computed(() => {
82
- return props.popoverBalloonProps?.height || 'unset';
83
- });
84
-
85
- const popoverMaxHeight = computed(() => {
86
- return props.popoverBalloonProps?.maxHeight || 'unset';
87
- });
88
-
89
- onMounted(() => {
90
- if (useModelValue.value) {
91
- open.value = Boolean(props.modelValue);
92
- }
93
- });
94
-
95
- watch(open, (value) => {
96
- if (useModelValue.value) {
97
- emit('update:modelValue', value);
98
- }
99
- });
100
-
101
- watch(
102
- () => props.modelValue,
103
- (value) => {
104
- open.value = !!value;
105
- },
106
- );
107
- </script>
108
-
109
- <style lang="scss" scoped>
110
- @use '@/assets/scss/unnnic' as *;
111
-
112
- * {
113
- margin: 0;
114
- padding: 0;
115
- box-sizing: border-box;
116
- }
117
-
118
- .unnnic-popover {
119
- &__balloon {
120
- border-radius: $unnnic-radius-2;
121
- padding: $unnnic-space-4;
122
- background: $unnnic-color-bg-base;
123
- box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.16);
124
- // margin-top: $unnnic-space-1;
125
- position: fixed;
126
- width: v-bind(calculatedPopoverWidth);
127
- height: v-bind(popoverHeight);
128
- max-height: v-bind(popoverMaxHeight);
129
- overflow: auto;
130
-
131
- &::-webkit-scrollbar {
132
- width: $unnnic-spacing-inline-nano;
133
- }
134
-
135
- &::-webkit-scrollbar-thumb {
136
- background: $unnnic-color-neutral-cleanest;
137
- border-radius: $unnnic-border-radius-pill;
138
- }
139
-
140
- &::-webkit-scrollbar-track {
141
- background: $unnnic-color-neutral-soft;
142
- border-radius: $unnnic-border-radius-pill;
143
- }
144
- }
145
- }
146
- </style>
@@ -1,65 +0,0 @@
1
- <template>
2
- <div
3
- :class="[
4
- 'unnnic-select-option',
5
- {
6
- 'unnnic-select-option--disabled': props.disabled,
7
- 'unnnic-select-option--active': props.active,
8
- 'unnnic-select-option--focused': props.focused,
9
- },
10
- ]"
11
- >
12
- <p class="unnnic-select-option__label">{{ props.label }}</p>
13
- </div>
14
- </template>
15
-
16
- <script setup lang="ts">
17
- defineOptions({
18
- name: 'UnnnicSelectOption',
19
- });
20
-
21
- interface SelectOptionProps {
22
- label: string;
23
- disabled?: boolean;
24
- active?: boolean;
25
- focused?: boolean;
26
- }
27
-
28
- const props = withDefaults(defineProps<SelectOptionProps>(), {
29
- disabled: false,
30
- active: false,
31
- focused: false,
32
- });
33
- </script>
34
-
35
- <style lang="scss" scoped>
36
- @use '@/assets/scss/unnnic' as *;
37
- * {
38
- margin: 0;
39
- padding: 0;
40
- box-sizing: border-box;
41
- }
42
-
43
- .unnnic-select-option {
44
- cursor: pointer;
45
- border-radius: $unnnic-radius-1;
46
- padding: $unnnic-space-2 $unnnic-space-4;
47
- font: $unnnic-font-emphasis;
48
-
49
- &:hover:not(&--active):not(&--disabled),
50
- &--focused {
51
- background-color: $unnnic-color-bg-soft;
52
- }
53
-
54
- &--active {
55
- background-color: $unnnic-color-bg-active;
56
- color: $unnnic-color-fg-inverted;
57
- }
58
-
59
- &--disabled {
60
- color: $unnnic-color-fg-muted;
61
- background-color: $unnnic-color-bg-muted;
62
- cursor: not-allowed;
63
- }
64
- }
65
- </style>