@weni/unnnic-system 2.0.10 → 2.0.12

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weni/unnnic-system",
3
- "version": "2.0.10",
3
+ "version": "2.0.12",
4
4
  "type": "commonjs",
5
5
  "files": [
6
6
  "dist",
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <section class="unnnic-disclaimer">
3
+ <unnnic-icon
4
+ class="unnnic-disclaimer__icon"
5
+ size="avatar-nano"
6
+ :icon="icon"
7
+ :scheme="iconColor"
8
+ />
9
+ <p class="unnnic-disclaimer__text">{{ text }}</p>
10
+ </section>
11
+ </template>
12
+
13
+ <script>
14
+ import icons from '../../utils/iconList';
15
+ import colors from '../../utils/colorsList';
16
+
17
+ import unnnicIcon from '../Icon.vue';
18
+
19
+ export default {
20
+ name: 'unnnic-disclaimer',
21
+ components: { unnnicIcon },
22
+ props: {
23
+ text: {
24
+ type: String,
25
+ required: true,
26
+ },
27
+ icon: {
28
+ type: String,
29
+ default: 'alert-circle-1-1',
30
+ validator(value) {
31
+ return icons.includes(value);
32
+ },
33
+ },
34
+ iconColor: {
35
+ type: String,
36
+ validator(value) {
37
+ return colors.includes(value);
38
+ },
39
+ },
40
+ },
41
+ };
42
+ </script>
43
+
44
+ <style lang="scss" scoped>
45
+ @import '../../assets/scss/unnnic.scss';
46
+ .unnnic-disclaimer {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ gap: $unnnic-spacing-xs;
50
+ padding: $unnnic-spacing-sm;
51
+ border-radius: $unnnic-border-radius-sm;
52
+ border: 1px solid $unnnic-color-neutral-soft;
53
+ background: $unnnic-color-background-lightest;
54
+ .unnnic-disclaimer__text {
55
+ margin: 0;
56
+ font-family: $unnnic-font-family-secondary;
57
+ font-size: $unnnic-font-size-body-gt;
58
+ line-height: $unnnic-line-height-large * 1.375;
59
+ font-weight: $unnnic-font-weight-regular;
60
+ color: $unnnic-color-neutral-dark;
61
+ }
62
+ }
63
+
64
+ </style>
@@ -0,0 +1,262 @@
1
+ <template>
2
+ <aside
3
+ v-if="modelValue"
4
+ class="unnnic-drawer"
5
+ >
6
+ <section
7
+ class="unnnic-drawer__overlay"
8
+ @click.stop="close"
9
+ />
10
+ <transition
11
+ appear
12
+ name="drawer"
13
+ >
14
+ <section
15
+ v-if="showDrawer"
16
+ :class="[
17
+ 'unnnic-drawer__container',
18
+ wide && 'unnnic-drawer__container--wide',
19
+ ]"
20
+ >
21
+ <header class="unnnic-drawer__header">
22
+ <section class="unnnic-drawer__title-container">
23
+ <h1 class="unnnic-drawer__title">{{ title }}</h1>
24
+ <p
25
+ v-if="description"
26
+ class="unnnic-drawer__description"
27
+ >
28
+ {{ description }}
29
+ </p>
30
+ </section>
31
+ <unnnic-icon
32
+ class="unnnic-drawer__close"
33
+ icon="arrow_back"
34
+ size="avatar-nano"
35
+ clickable
36
+ @click="close"
37
+ />
38
+ </header>
39
+ <section class="unnnic-drawer__content">
40
+ <slot name="content"></slot>
41
+ </section>
42
+ <footer
43
+ v-if="showFooter"
44
+ class="unnnic-drawer__footer"
45
+ >
46
+ <unnnic-button
47
+ v-if="secondaryButtonText"
48
+ size="large"
49
+ type="tertiary"
50
+ :disabled="disabledSecondaryButton"
51
+ :loading="loadingSecondaryButton"
52
+ :text="secondaryButtonText"
53
+ @click="$emit('secondaryButtonClick')"
54
+ />
55
+ <unnnic-button
56
+ v-if="primaryButtonText"
57
+ size="large"
58
+ :disabled="disabledPrimaryButton"
59
+ :loading="loadingPrimaryButton"
60
+ :type="primaryButtonType"
61
+ :text="primaryButtonText"
62
+ @click="$emit('primaryButtonClick')"
63
+ />
64
+ </footer>
65
+ </section>
66
+ </transition>
67
+ </aside>
68
+ </template>
69
+
70
+ <script>
71
+ import unnnicIcon from '../Icon.vue';
72
+ import unnnicButton from '../Button/Button.vue';
73
+
74
+ export default {
75
+ name: 'unnnic-drawer',
76
+ emits: ['primaryButtonClick', 'secondaryButtonClick', 'close'],
77
+ components: {
78
+ unnnicIcon,
79
+ unnnicButton,
80
+ },
81
+ data() {
82
+ return {
83
+ showDrawer: true,
84
+ };
85
+ },
86
+ props: {
87
+ title: {
88
+ type: String,
89
+ required: true,
90
+ },
91
+ description: {
92
+ type: String,
93
+ },
94
+ disabledPrimaryButton: {
95
+ type: Boolean,
96
+ default: false,
97
+ },
98
+ disabledSecondaryButton: {
99
+ type: Boolean,
100
+ default: false,
101
+ },
102
+ loadingPrimaryButton: {
103
+ type: Boolean,
104
+ default: false,
105
+ },
106
+ loadingSecondaryButton: {
107
+ type: Boolean,
108
+ default: false,
109
+ },
110
+ primaryButtonText: {
111
+ type: String,
112
+ },
113
+ primaryButtonType: {
114
+ type: String,
115
+ default: 'primary',
116
+ },
117
+ secondaryButtonText: {
118
+ type: String,
119
+ },
120
+ wide: {
121
+ type: Boolean,
122
+ default: false,
123
+ },
124
+ modelValue: {
125
+ type: Boolean,
126
+ required: true,
127
+ },
128
+ },
129
+ computed: {
130
+ showFooter() {
131
+ return !!(this.primaryButtonText || this.secondaryButtonText);
132
+ },
133
+ },
134
+ methods: {
135
+ close() {
136
+ this.showDrawer = false;
137
+ setTimeout(() => {
138
+ this.$emit('close');
139
+ this.showDrawer = true;
140
+ }, 200);
141
+ },
142
+ },
143
+ };
144
+ </script>
145
+
146
+ <style lang="scss" scoped>
147
+ @import '../../assets/scss/unnnic.scss';
148
+ * {
149
+ margin: 0;
150
+ padding: 0;
151
+ box-sizing: border-box;
152
+ }
153
+
154
+ @keyframes drawerOpen {
155
+ from {
156
+ transform: translateX(100%);
157
+ }
158
+ to {
159
+ transform: translateX(0);
160
+ }
161
+ }
162
+
163
+ @keyframes drawerClose {
164
+ from {
165
+ transform: translateX(0);
166
+ }
167
+ to {
168
+ transform: translateX(100%);
169
+ }
170
+ }
171
+
172
+ .drawer-enter-active,
173
+ .drawer-enter-to {
174
+ animation: drawerOpen 200ms ease-in;
175
+ }
176
+
177
+ .drawer-leave-active,
178
+ .drawer-leave-to {
179
+ display: none;
180
+ animation: drawerClose 200ms ease-in;
181
+ }
182
+
183
+ .unnnic-drawer {
184
+ width: 100vw;
185
+ height: 100vh;
186
+ position: fixed;
187
+ left: 0;
188
+ top: 0;
189
+ z-index: 8;
190
+ }
191
+
192
+ .unnnic-drawer__overlay {
193
+ z-index: 9;
194
+ background-color: rgba(0, 0, 0, 0.4);
195
+ width: 100%;
196
+ height: 100%;
197
+ }
198
+
199
+ .unnnic-drawer__container {
200
+ z-index: 10;
201
+ top: 0;
202
+ right: 0;
203
+ position: fixed;
204
+ display: flex;
205
+ flex-direction: column;
206
+ font-family: $unnnic-font-family-secondary;
207
+ justify-content: space-between;
208
+ height: 100%;
209
+ background-color: $unnnic-color-neutral-white;
210
+ width: calc(100% / 3);
211
+
212
+ &--wide {
213
+ width: 50%;
214
+ }
215
+
216
+ .unnnic-drawer__header {
217
+ display: flex;
218
+ justify-content: space-between;
219
+ border-bottom: 1px solid $unnnic-color-neutral-soft;
220
+ padding: $unnnic-spacing-md;
221
+ .unnnic-drawer__title-container {
222
+ .unnnic-drawer__title {
223
+ color: $unnnic-color-neutral-darkest;
224
+ font-family: $unnnic-font-family-secondary;
225
+ font-size: $unnnic-font-size-title-sm;
226
+ font-weight: $unnnic-font-weight-black;
227
+ line-height: $unnnic-line-height-large * 1.75;
228
+ }
229
+
230
+ .unnnic-drawer__description {
231
+ color: $unnnic-color-neutral-cloudy;
232
+ font-family: $unnnic-font-family-secondary;
233
+ font-size: $unnnic-font-size-body-gt;
234
+ font-weight: $unnnic-font-weight-regular;
235
+ line-height: $unnnic-line-height-large * 1.375;
236
+ }
237
+ }
238
+
239
+ .unnnic-drawer__close {
240
+ margin: $unnnic-spacing-nano;
241
+ transform: rotate(180deg);
242
+ display: flex;
243
+ }
244
+ }
245
+
246
+ .unnnic-drawer__content {
247
+ overflow-y: auto;
248
+ color: $unnnic-color-neutral-cloudy;
249
+ padding: $unnnic-spacing-md $unnnic-spacing-md 0 $unnnic-spacing-md;
250
+ flex: 1 0 0;
251
+ }
252
+
253
+ .unnnic-drawer__footer {
254
+ display: flex;
255
+ padding: $unnnic-spacing-md;
256
+ gap: $unnnic-spacing-ant;
257
+ > * {
258
+ flex-grow: 1;
259
+ }
260
+ }
261
+ }
262
+ </style>
@@ -77,6 +77,8 @@ import ChatsUserAvatar from './ChatsUserAvatar/ChatsUserAvatar.vue';
77
77
  import ChartMultiLine from './ChartMultiLine/ChartMultiLine.vue';
78
78
  import EmojiPicker from './EmojiPicker/EmojiPicker.vue';
79
79
  import ChartFunnel from './ChartFunnel/ChartFunnel.vue';
80
+ import Disclaimer from './Disclaimer/Disclaimer.vue';
81
+ import Drawer from './Drawer/Drawer.vue';
80
82
 
81
83
  export const components = {
82
84
  unnnicFormElement: formElement,
@@ -159,6 +161,8 @@ export const components = {
159
161
  unnnicChartMultiLine: ChartMultiLine,
160
162
  unnnicEmojiPicker: EmojiPicker,
161
163
  unnnicChartFunnel: ChartFunnel,
164
+ unnnicDisclaimer: Disclaimer,
165
+ unnnicDrawer: Drawer,
162
166
  };
163
167
 
164
168
  export const unnnicFontSize = fontSize;
@@ -242,3 +246,5 @@ export const unnnicChatsUserAvatar = ChatsUserAvatar;
242
246
  export const unnnicChartMultiLine = ChartMultiLine;
243
247
  export const unnnicEmojiPicker = EmojiPicker;
244
248
  export const unnnicChartFunnel = ChartFunnel;
249
+ export const unnnicDisclaimer = Disclaimer;
250
+ export const unnnicDrawer = Drawer;
@@ -0,0 +1,37 @@
1
+ import unnnicDisclaimer from '../components/Disclaimer/Disclaimer.vue';
2
+ import icons from '../utils/iconList';
3
+ import colors from '../utils/colorsList';
4
+
5
+ export default {
6
+ title: 'Example/Disclaimer',
7
+ component: unnnicDisclaimer,
8
+ args: {},
9
+ argTypes: {
10
+ text: { control: { type: 'text' } },
11
+ icon: { options: icons, control: { type: 'select', } },
12
+ iconColor: { options: colors, control: { type: 'select', } },
13
+ },
14
+ };
15
+
16
+ const Template = (args) => ({
17
+ components: {
18
+ unnnicDisclaimer,
19
+ },
20
+ setup() {
21
+ return { args };
22
+ },
23
+ props: Object.keys(args),
24
+ template: `
25
+ <div>
26
+ <unnnic-disclaimer v-bind="args" />
27
+ </div>
28
+ `,
29
+ });
30
+
31
+ export const Default = Template.bind({});
32
+
33
+ Default.args = {
34
+ text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
35
+ icon: 'alert-circle-1-1',
36
+ iconColor: 'feedback-yellow',
37
+ };
@@ -0,0 +1,150 @@
1
+ import unnnicDrawer from '../components/Drawer/Drawer.vue';
2
+ import unnnicButton from '../components/Button/Button.vue';
3
+
4
+ const primaryButtonTypeOptions = [
5
+ 'primary',
6
+ 'secondary',
7
+ 'tertiary',
8
+ 'alternative',
9
+ 'warning',
10
+ 'attention',
11
+ ];
12
+
13
+ export default {
14
+ title: 'Example/Drawer',
15
+ component: unnnicDrawer,
16
+ argTypes: {
17
+ title: { control: { type: 'text' } },
18
+ description: { control: { type: 'text' } },
19
+ primaryButtonType: {
20
+ options: primaryButtonTypeOptions,
21
+ control: { type: 'select' },
22
+ },
23
+ disabledPrimaryButton: { control: { type: 'boolean' } },
24
+ disabledSecondaryButton: { control: { type: 'boolean' } },
25
+ loadingPrimaryButton: { control: { type: 'boolean' } },
26
+ loadingSecondaryButton: { control: { type: 'boolean' } },
27
+ primaryButtonText: { control: { type: 'text' } },
28
+ secondaryButtonText: { control: { type: 'text' } },
29
+ modelValue: { control: { type: 'boolean' } },
30
+ wide: { control: { type: 'boolean' } },
31
+ },
32
+ };
33
+
34
+ const Template = (args) => ({
35
+ props: Object.keys(args),
36
+ setup() {
37
+ return { args };
38
+ },
39
+ components: { unnnicDrawer, unnnicButton },
40
+ data() {
41
+ return {
42
+ opened: false,
43
+ };
44
+ },
45
+ methods: {
46
+ primaryClick() {
47
+ console.log('primaryClick');
48
+ },
49
+ secondaryClick() {
50
+ console.log('secondaryClick');
51
+ },
52
+ },
53
+ template: `
54
+ <div>
55
+ <pre>v-model: {{ opened }}</pre>
56
+ <button @click="opened = !opened">Change</button>
57
+ <unnnic-drawer v-bind="args" v-model="opened" @close="opened = false" @primaryButtonClick="primaryClick" @secondaryButtonClick="secondaryClick">
58
+ <template #content>
59
+ <p style="padding: 0; margin:0;">Conteúdo</p>
60
+ </template>
61
+ </unnnic-drawer>
62
+ </div>
63
+ `,
64
+ });
65
+
66
+ export const Default = Template.bind({});
67
+ Default.args = {
68
+ title: 'Title',
69
+ description: 'Description',
70
+ primaryButtonText: 'Confirmar',
71
+ secondaryButtonText: 'Cancelar',
72
+ };
73
+
74
+ export const Wide = Template.bind({});
75
+ Wide.args = {
76
+ title: 'Title',
77
+ description: 'Description',
78
+ primaryButtonText: 'Confirmar',
79
+ secondaryButtonText: 'Cancelar',
80
+ wide: true,
81
+ };
82
+
83
+ const TemplateOveflowed = (args) => ({
84
+ props: Object.keys(args),
85
+ components: { unnnicDrawer, unnnicButton },
86
+ setup() {
87
+ return { args };
88
+ },
89
+ data() {
90
+ return {
91
+ opened: false,
92
+ };
93
+ },
94
+ template: `
95
+ <div>
96
+ <pre>v-model: {{ opened }}</pre>
97
+ <button @click="opened = !opened">Change</button>
98
+ <unnnic-drawer v-bind="args" v-model="opened" @close="opened = false">
99
+ <template #content>
100
+ <p style="padding: 0; margin:0;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum dolor viverra, aliquam metus dictum, vehicula felis. Nulla sapien nisi, laoreet sit amet nisi sed, consectetur ornare odio. Nullam facilisis a ligula quis accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus et sodales ex. Donec mauris dui, tempor eget lorem vel, blandit consequat tellus. Maecenas ut justo vitae orci commodo consectetur eget id nisl. Donec auctor sollicitudin ex at lacinia. Integer lobortis, eros nec congue facilisis, augue nisl elementum nibh, pharetra euismod odio turpis eu lorem. Vivamus a tristique tellus.</p>
101
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum dolor viverra, aliquam metus dictum, vehicula felis. Nulla sapien nisi, laoreet sit amet nisi sed, consectetur ornare odio. Nullam facilisis a ligula quis accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus et sodales ex. Donec mauris dui, tempor eget lorem vel, blandit consequat tellus. Maecenas ut justo vitae orci commodo consectetur eget id nisl. Donec auctor sollicitudin ex at lacinia. Integer lobortis, eros nec congue facilisis, augue nisl elementum nibh, pharetra euismod odio turpis eu lorem. Vivamus a tristique tellus.</p>
102
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum dolor viverra, aliquam metus dictum, vehicula felis. Nulla sapien nisi, laoreet sit amet nisi sed, consectetur ornare odio. Nullam facilisis a ligula quis accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus et sodales ex. Donec mauris dui, tempor eget lorem vel, blandit consequat tellus. Maecenas ut justo vitae orci commodo consectetur eget id nisl. Donec auctor sollicitudin ex at lacinia. Integer lobortis, eros nec congue facilisis, augue nisl elementum nibh, pharetra euismod odio turpis eu lorem. Vivamus a tristique tellus.</p>
103
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum dolor viverra, aliquam metus dictum, vehicula felis. Nulla sapien nisi, laoreet sit amet nisi sed, consectetur ornare odio. Nullam facilisis a ligula quis accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus et sodales ex. Donec mauris dui, tempor eget lorem vel, blandit consequat tellus. Maecenas ut justo vitae orci commodo consectetur eget id nisl. Donec auctor sollicitudin ex at lacinia. Integer lobortis, eros nec congue facilisis, augue nisl elementum nibh, pharetra euismod odio turpis eu lorem. Vivamus a tristique tellus.</p>
104
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum dolor viverra, aliquam metus dictum, vehicula felis. Nulla sapien nisi, laoreet sit amet nisi sed, consectetur ornare odio. Nullam facilisis a ligula quis accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus et sodales ex. Donec mauris dui, tempor eget lorem vel, blandit consequat tellus. Maecenas ut justo vitae orci commodo consectetur eget id nisl. Donec auctor sollicitudin ex at lacinia. Integer lobortis, eros nec congue facilisis, augue nisl elementum nibh, pharetra euismod odio turpis eu lorem. Vivamus a tristique tellus.</p>
105
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed interdum dolor viverra, aliquam metus dictum, vehicula felis. Nulla sapien nisi, laoreet sit amet nisi sed, consectetur ornare odio. Nullam facilisis a ligula quis accumsan. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus et sodales ex. Donec mauris dui, tempor eget lorem vel, blandit consequat tellus. Maecenas ut justo vitae orci commodo consectetur eget id nisl. Donec auctor sollicitudin ex at lacinia. Integer lobortis, eros nec congue facilisis, augue nisl elementum nibh, pharetra euismod odio turpis eu lorem. Vivamus a tristique tellus.</p>
106
+ </template>
107
+ </unnnic-drawer>
108
+ </div>
109
+ `,
110
+ });
111
+
112
+ export const ContentOverflowed = TemplateOveflowed.bind({});
113
+ ContentOverflowed.args = {
114
+ title: 'Title',
115
+ description: 'Description',
116
+ primaryButtonText: 'Confirmar',
117
+ secondaryButtonText: 'Cancelar',
118
+ wide: true,
119
+ };
120
+
121
+ const TemplateVideo = (args) => ({
122
+ props: Object.keys(args),
123
+ components: { unnnicDrawer, unnnicButton },
124
+ setup() {
125
+ return { args };
126
+ },
127
+ data() {
128
+ return {
129
+ opened: false,
130
+ };
131
+ },
132
+ template: `
133
+ <div>
134
+ <pre>v-model: {{ opened }}</pre>
135
+ <button @click="opened = !opened">Change</button>
136
+ <unnnic-drawer v-bind="args" v-model="opened" @close="opened = false">
137
+ <template #content>
138
+ <iframe width="100%" height="315" src="https://www.youtube.com/embed/dD8ENnN-2CI?si=68dJEsG5FdiNaYvY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
139
+ </template>
140
+ </unnnic-drawer>
141
+ </div>
142
+ `,
143
+ });
144
+
145
+ export const ContentVideo = TemplateVideo.bind({});
146
+ ContentVideo.args = {
147
+ title: 'Title',
148
+ description: 'Description',
149
+ wide: true,
150
+ };
@@ -1,3 +0,0 @@
1
- {
2
- "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
3
- }