@weni/unnnic-system 3.8.2-alpha.2 → 3.9.1-alpha.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 (64) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/components/MultiSelect/MultiSelect.vue.d.ts +6 -0
  3. package/dist/components/PageHeader/PageHeader.vue.d.ts +28 -0
  4. package/dist/components/PageHeader/PageHeader.vue.d.ts.map +1 -0
  5. package/dist/components/PageHeader/index.d.ts +3 -0
  6. package/dist/components/PageHeader/index.d.ts.map +1 -0
  7. package/dist/components/PageHeader/types.d.ts +9 -0
  8. package/dist/components/PageHeader/types.d.ts.map +1 -0
  9. package/dist/components/Radio/Radio.vue.d.ts +2 -0
  10. package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
  11. package/dist/components/Tag/DefaultTag.vue.d.ts.map +1 -1
  12. package/dist/components/TextArea/TextArea.vue.d.ts +9 -0
  13. package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
  14. package/dist/components/index.d.ts +312 -0
  15. package/dist/components/index.d.ts.map +1 -1
  16. package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +1 -1
  17. package/dist/components/ui/tabs/Tabs.vue.d.ts +24 -0
  18. package/dist/components/ui/tabs/Tabs.vue.d.ts.map +1 -0
  19. package/dist/components/ui/tabs/TabsContent.vue.d.ts +23 -0
  20. package/dist/components/ui/tabs/TabsContent.vue.d.ts.map +1 -0
  21. package/dist/components/ui/tabs/TabsList.vue.d.ts +23 -0
  22. package/dist/components/ui/tabs/TabsList.vue.d.ts.map +1 -0
  23. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts +23 -0
  24. package/dist/components/ui/tabs/TabsTrigger.vue.d.ts.map +1 -0
  25. package/dist/components/ui/tabs/index.d.ts +5 -0
  26. package/dist/components/ui/tabs/index.d.ts.map +1 -0
  27. package/dist/{es-4f3d094b.mjs → es-ed9b7d22.mjs} +1 -1
  28. package/dist/{index-43281ff3.mjs → index-bbfce723.mjs} +9572 -8837
  29. package/dist/{pt-br-8a34ccb7.mjs → pt-br-8c45d7e7.mjs} +1 -1
  30. package/dist/style.css +1 -1
  31. package/dist/unnnic.mjs +165 -153
  32. package/dist/unnnic.umd.js +39 -36
  33. package/package.json +1 -1
  34. package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +11 -7
  35. package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +1 -1
  36. package/src/components/AvatarIcon/__tests__/__snapshots__/AvatarIcon.spec.js.snap +1 -1
  37. package/src/components/Collapse/__tests__/__snapshots__/Collapse.spec.js.snap +1 -3
  38. package/src/components/Drawer/__tests__/__snapshots__/Drawer.spec.js.snap +3 -3
  39. package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +14 -5
  40. package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
  41. package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
  42. package/src/components/PageHeader/PageHeader.vue +154 -0
  43. package/src/components/PageHeader/index.ts +2 -0
  44. package/src/components/PageHeader/types.ts +10 -0
  45. package/src/components/Radio/Radio.vue +23 -2
  46. package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -3
  47. package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +5 -6
  48. package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
  49. package/src/components/Tag/DefaultTag.vue +5 -0
  50. package/src/components/TextArea/TextArea.vue +6 -0
  51. package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +11 -3
  52. package/src/components/Toast/Toast.vue +4 -4
  53. package/src/components/Toast/__tests__/Toast.spec.js +9 -2
  54. package/src/components/index.ts +22 -0
  55. package/src/components/ui/dialog/DialogHeader.vue +1 -0
  56. package/src/components/ui/tabs/Tabs.vue +19 -0
  57. package/src/components/ui/tabs/TabsContent.vue +22 -0
  58. package/src/components/ui/tabs/TabsList.vue +34 -0
  59. package/src/components/ui/tabs/TabsTrigger.vue +79 -0
  60. package/src/components/ui/tabs/index.ts +4 -0
  61. package/src/stories/PageHeader.stories.js +330 -0
  62. package/src/stories/Radio.stories.js +28 -1
  63. package/src/stories/Tabs.stories.js +125 -0
  64. package/src/stories/TextArea.stories.js +1 -0
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type { TabsListProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { TabsList } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ TabsListProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+ </script>
14
+
15
+ <template>
16
+ <TabsList
17
+ v-bind="delegatedProps"
18
+ :class="cn('unnnic-tabs-list', props.class)"
19
+ >
20
+ <slot />
21
+ </TabsList>
22
+ </template>
23
+
24
+ <style lang="scss" scoped>
25
+ @use '@/assets/scss/unnnic' as *;
26
+
27
+ .unnnic-tabs-list {
28
+ display: flex;
29
+ align-items: center;
30
+ gap: $unnnic-space-6;
31
+ box-shadow: inset 0 (-$unnnic-border-width-thinner) 0 0
32
+ $unnnic-color-border-base;
33
+ }
34
+ </style>
@@ -0,0 +1,79 @@
1
+ <script setup lang="ts">
2
+ import type { TabsTriggerProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { TabsTrigger, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+ import { computed } from 'vue';
8
+
9
+ const props = defineProps<
10
+ TabsTriggerProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+
13
+ const delegatedProps = reactiveOmit(props, 'class');
14
+
15
+ const forwardedProps = useForwardProps(delegatedProps);
16
+
17
+ const classes = computed(() => {
18
+ const defaultClasses = ['unnnic-tabs-trigger'];
19
+
20
+ if (props.disabled) {
21
+ defaultClasses.push('unnnic-tabs-trigger--disabled');
22
+ }
23
+
24
+ return defaultClasses;
25
+ });
26
+ </script>
27
+
28
+ <template>
29
+ <TabsTrigger
30
+ v-bind="forwardedProps"
31
+ :class="
32
+ cn(
33
+ ...classes,
34
+ 'transition-all disabled:pointer-events-none disabled:opacity-50',
35
+ props.class,
36
+ )
37
+ "
38
+ >
39
+ <span class="unnnic-tabs-trigger__content truncate">
40
+ <slot />
41
+ </span>
42
+ </TabsTrigger>
43
+ </template>
44
+
45
+ <style lang="scss" scoped>
46
+ @use '@/assets/scss/unnnic' as *;
47
+
48
+ .unnnic-tabs-trigger {
49
+ background-color: transparent;
50
+ border: none;
51
+
52
+ padding: $unnnic-space-2 $unnnic-space-4;
53
+ font: $unnnic-font-action;
54
+ color: $unnnic-color-fg-base;
55
+
56
+ cursor: pointer;
57
+
58
+ &[data-state='active'] {
59
+ font: $unnnic-font-action;
60
+ color: $unnnic-color-fg-emphasized;
61
+ box-shadow: inset 0 (-$unnnic-border-width-thin) 0 0
62
+ $unnnic-color-border-active;
63
+ }
64
+
65
+ &--disabled {
66
+ color: $unnnic-color-fg-muted;
67
+ }
68
+
69
+ &:hover {
70
+ color: $unnnic-color-fg-emphasized;
71
+ }
72
+
73
+ &__content {
74
+ display: flex;
75
+ align-items: center;
76
+ gap: $unnnic-space-2;
77
+ }
78
+ }
79
+ </style>
@@ -0,0 +1,4 @@
1
+ export { default as Tabs } from './Tabs.vue';
2
+ export { default as TabsContent } from './TabsContent.vue';
3
+ export { default as TabsList } from './TabsList.vue';
4
+ export { default as TabsTrigger } from './TabsTrigger.vue';
@@ -0,0 +1,330 @@
1
+ import { action } from '@storybook/addon-actions';
2
+
3
+ import PageHeader from '../components/PageHeader/PageHeader.vue';
4
+ import UnnnicButton from '../components/Button/Button.vue';
5
+ import UnnnicTag from '../components/Tag/Tag.vue';
6
+ import UnnnicSelectSmart from '../components/SelectSmart/SelectSmart.vue';
7
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';
8
+
9
+ export default {
10
+ title: 'Layout/PageHeader',
11
+ component: PageHeader,
12
+ tags: ['autodocs'],
13
+ parameters: {
14
+ docs: {
15
+ description: {
16
+ component: `A page header component to standardize the header of pages.
17
+ <br/>
18
+ It supports title, description, actions, tabs, tags, and back navigation.
19
+ <br/>
20
+ This component provides multiple variations to handle different page header scenarios.
21
+ `,
22
+ },
23
+ },
24
+ },
25
+ argTypes: {
26
+ title: {
27
+ control: { type: 'text' },
28
+ description: 'The title of the page',
29
+ },
30
+ description: {
31
+ control: { type: 'text' },
32
+ description: 'The description text below the title',
33
+ },
34
+ hasBackButton: {
35
+ control: { type: 'boolean' },
36
+ description: 'Show back navigation button',
37
+ },
38
+ },
39
+ args: {
40
+ title: 'Page Name',
41
+ description: 'Description',
42
+ hasBackButton: false,
43
+ },
44
+ };
45
+
46
+ export const Default = {
47
+ parameters: {
48
+ docs: {
49
+ description: {
50
+ story: 'A simple page header with title and description.',
51
+ },
52
+ source: {
53
+ code: `
54
+ <UnnnicPageHeader
55
+ title="Page Name"
56
+ description="Description"
57
+ />
58
+ `,
59
+ },
60
+ },
61
+ },
62
+ render: (args) => ({
63
+ components: { PageHeader },
64
+ setup() {
65
+ return { args };
66
+ },
67
+ template: `
68
+ <PageHeader v-bind="args" />
69
+ `,
70
+ }),
71
+ };
72
+
73
+ export const WithActions = {
74
+ parameters: {
75
+ docs: {
76
+ description: {
77
+ story:
78
+ 'Page header with action buttons on the right side. Supports primary and secondary actions.',
79
+ },
80
+ source: {
81
+ code: `
82
+ <UnnnicPageHeader
83
+ title="Page Name"
84
+ description="Description"
85
+ >
86
+ <template #actions>
87
+ <UnnnicButton text="Button" type="secondary" />
88
+ <UnnnicButton text="Button" type="primary" />
89
+ </template>
90
+ </UnnnicPageHeader>
91
+ `,
92
+ },
93
+ },
94
+ },
95
+ render: (args) => ({
96
+ components: {
97
+ PageHeader,
98
+ UnnnicButton,
99
+ Tabs,
100
+ TabsList,
101
+ TabsTrigger,
102
+ TabsContent,
103
+ },
104
+ setup() {
105
+ return { args };
106
+ },
107
+ template: `
108
+ <PageHeader v-bind="args">
109
+ <template #actions>
110
+ <UnnnicButton text="Button" type="secondary" />
111
+ <UnnnicButton text="Button" type="primary" />
112
+ </template>
113
+ </PageHeader>
114
+ `,
115
+ }),
116
+ };
117
+
118
+ export const WithTabs = {
119
+ parameters: {
120
+ docs: {
121
+ description: {
122
+ story:
123
+ 'Page header with tabs for navigation. Useful for pages with multiple sections divided by tabs.',
124
+ },
125
+ source: {
126
+ code: `
127
+ <UnnnicPageHeader
128
+ title="Page Name"
129
+ description="Description"
130
+ >
131
+ <template #actions>
132
+ <UnnnicButton text="Button" type="secondary" />
133
+ <UnnnicButton text="Button" type="primary" />
134
+ </template>
135
+ <template #tabs>
136
+ <UnnnicTabs defaultValue="label1">
137
+ <UnnnicTabsList>
138
+ <UnnnicTabsTrigger value="label1">Label</UnnnicTabsTrigger>
139
+ <UnnnicTabsTrigger value="label2">Label</UnnnicTabsTrigger>
140
+ <UnnnicTabsTrigger value="label3">Label</UnnnicTabsTrigger>
141
+ </UnnnicTabsList>
142
+ </UnnnicTabs>
143
+ </template>
144
+ </UnnnicPageHeader>
145
+ `,
146
+ },
147
+ },
148
+ },
149
+ render: (args) => ({
150
+ components: {
151
+ PageHeader,
152
+ UnnnicButton,
153
+ Tabs,
154
+ TabsList,
155
+ TabsTrigger,
156
+ TabsContent,
157
+ },
158
+ setup() {
159
+ return { args };
160
+ },
161
+ template: `
162
+ <PageHeader v-bind="args">
163
+ <template #actions>
164
+ <UnnnicButton text="Button" type="secondary" />
165
+ <UnnnicButton text="Button" type="primary" />
166
+ </template>
167
+ <template #tabs>
168
+ <Tabs defaultValue="label1">
169
+ <TabsList>
170
+ <TabsTrigger value="label1">Label</TabsTrigger>
171
+ <TabsTrigger value="label2">Label</TabsTrigger>
172
+ <TabsTrigger value="label3">Label</TabsTrigger>
173
+ </TabsList>
174
+ </Tabs>
175
+ </template>
176
+ </PageHeader>
177
+ `,
178
+ }),
179
+ };
180
+
181
+ export const WithSelect = {
182
+ parameters: {
183
+ docs: {
184
+ description: {
185
+ story: 'Page header with a select dropdown on the right side.',
186
+ },
187
+ source: {
188
+ code: `
189
+ <UnnnicPageHeader
190
+ title="Page Name"
191
+ description="Description"
192
+ >
193
+ <template #actions>
194
+ <UnnnicSelectSmart />
195
+ </template>
196
+ </UnnnicPageHeader>
197
+ `,
198
+ },
199
+ },
200
+ },
201
+ render: (args) => ({
202
+ components: { PageHeader, UnnnicSelectSmart },
203
+ setup() {
204
+ return { args };
205
+ },
206
+ template: `
207
+ <PageHeader v-bind="args">
208
+ <template #actions>
209
+ <UnnnicSelectSmart />
210
+ </template>
211
+ </PageHeader>
212
+ `,
213
+ }),
214
+ };
215
+
216
+ export const WithTag = {
217
+ parameters: {
218
+ docs: {
219
+ description: {
220
+ story: 'Page header with a tag next to the title and action buttons.',
221
+ },
222
+ source: {
223
+ code: `
224
+ <UnnnicPageHeader
225
+ title="Page Name"
226
+ description="Description"
227
+ >
228
+ <template #tag>
229
+ <UnnnicTag text="Tag name" scheme="gray" />
230
+ </template>
231
+ <template #actions>
232
+ <UnnnicButton text="Button" type="secondary" />
233
+ <UnnnicButton text="Button" type="primary" />
234
+ </template>
235
+ </UnnnicPageHeader>
236
+ `,
237
+ },
238
+ },
239
+ },
240
+ render: (args) => ({
241
+ components: { PageHeader, UnnnicButton, UnnnicTag },
242
+ setup() {
243
+ return { args };
244
+ },
245
+ template: `
246
+ <PageHeader v-bind="args">
247
+ <template #tag>
248
+ <UnnnicTag text="Tag name" scheme="gray" />
249
+ </template>
250
+ <template #actions>
251
+ <UnnnicButton text="Button" type="secondary" />
252
+ <UnnnicButton text="Button" type="primary" />
253
+ </template>
254
+ </PageHeader>
255
+ `,
256
+ }),
257
+ };
258
+
259
+ export const WithMenuButton = {
260
+ parameters: {
261
+ docs: {
262
+ description: {
263
+ story: 'Page header with a menu button (three dots) on the right side.',
264
+ },
265
+ source: {
266
+ code: `
267
+ <UnnnicPageHeader
268
+ title="Page Name"
269
+ description="Description"
270
+ >
271
+ <template #actions>
272
+ <UnnnicButton type="tertiary" iconCenter="more_vert" />
273
+ </template>
274
+ </UnnnicPageHeader>
275
+ `,
276
+ },
277
+ },
278
+ },
279
+ render: (args) => ({
280
+ components: { PageHeader, UnnnicButton },
281
+ setup() {
282
+ return { args };
283
+ },
284
+ template: `
285
+ <PageHeader v-bind="args">
286
+ <template #actions>
287
+ <UnnnicButton type="tertiary" iconCenter="more_vert" />
288
+ </template>
289
+ </PageHeader>
290
+ `,
291
+ }),
292
+ };
293
+
294
+ export const WithBackButton = {
295
+ parameters: {
296
+ docs: {
297
+ description: {
298
+ story: 'Page header with a back navigation button.',
299
+ },
300
+ source: {
301
+ code: `
302
+ <UnnnicPageHeader
303
+ title="Page Name"
304
+ :hasBackButton="true"
305
+ />
306
+ `,
307
+ },
308
+ },
309
+ },
310
+ render: (args) => ({
311
+ components: { PageHeader },
312
+ setup() {
313
+ const handleBack = () => {
314
+ action('back')();
315
+ };
316
+
317
+ return {
318
+ args: {
319
+ ...args,
320
+ hasBackButton: true,
321
+ description: '',
322
+ },
323
+ handleBack,
324
+ };
325
+ },
326
+ template: `
327
+ <PageHeader v-bind="args" @back="handleBack" />
328
+ `,
329
+ }),
330
+ };
@@ -21,9 +21,28 @@ export default {
21
21
  disabled: { control: { type: 'boolean' } },
22
22
  size: { control: { type: 'select', options: ['md', 'sm'] } },
23
23
  },
24
+ render: (args) => ({
25
+ components: {
26
+ UnnnicRadio,
27
+ },
28
+ setup() {
29
+ const updateModelValue = (value) => {
30
+ action('update:modelValue')(value);
31
+ args.modelValue = value;
32
+ };
33
+ return { args, updateModelValue };
34
+ },
35
+ template: `
36
+ <div>
37
+ <UnnnicRadio v-bind="args" @update:model-value="updateModelValue" :value="args.value">
38
+ Option
39
+ </UnnnicRadio>
40
+ </div>
41
+ `,
42
+ }),
24
43
  };
25
44
 
26
- export const Default = {
45
+ export const Multiple = {
27
46
  render: (args) => ({
28
47
  components: {
29
48
  UnnnicRadio,
@@ -75,3 +94,11 @@ export const DisableSelected = {
75
94
  disabled: true,
76
95
  },
77
96
  };
97
+
98
+ export const Helper = {
99
+ args: {
100
+ modelValue: 'option 1',
101
+ value: 'option 1',
102
+ helper: 'Helper text',
103
+ },
104
+ };
@@ -0,0 +1,125 @@
1
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';
2
+ import UnnnicToolTip from '@/components/ToolTip/ToolTip.vue';
3
+ import UnnnicIcon from '@/components/Icon.vue';
4
+ import '@/assets/scss/tailwind.scss';
5
+
6
+ export default {
7
+ title: 'Misc/Tabs',
8
+ component: Tabs,
9
+ tags: ['autodocs'],
10
+ render: (args) => ({
11
+ components: { Tabs, TabsList, TabsTrigger, TabsContent },
12
+ setup() {
13
+ return { args };
14
+ },
15
+ template: `
16
+ <Tabs v-bind="args">
17
+ <TabsList>
18
+ <TabsTrigger value="account">Account</TabsTrigger>
19
+ <TabsTrigger value="password">Password</TabsTrigger>
20
+ <TabsTrigger value="settings">Settings</TabsTrigger>
21
+ </TabsList>
22
+ <TabsContent value="account">
23
+ <div>Make changes to your account here.</div>
24
+ </TabsContent>
25
+ <TabsContent value="password">
26
+ <div>Change your password here.</div>
27
+ </TabsContent>
28
+ <TabsContent value="settings">
29
+ <div>Update your application settings here.</div>
30
+ </TabsContent>
31
+ </Tabs>
32
+ `,
33
+ }),
34
+ args: {
35
+ defaultValue: 'account',
36
+ },
37
+ argTypes: {
38
+ defaultValue: {
39
+ control: { type: 'select' },
40
+ options: ['account', 'password', 'settings'],
41
+ },
42
+ },
43
+ };
44
+
45
+ export const Default = {
46
+ args: {
47
+ defaultValue: 'account',
48
+ },
49
+ };
50
+
51
+ export const Disabled = {
52
+ render: (args) => ({
53
+ components: { Tabs, TabsList, TabsTrigger, TabsContent },
54
+ setup() {
55
+ return { args };
56
+ },
57
+ template: `
58
+ <Tabs v-bind="args">
59
+ <TabsList>
60
+ <TabsTrigger value="account">Account</TabsTrigger>
61
+ <TabsTrigger value="password" disabled>Password</TabsTrigger>
62
+ <TabsTrigger value="settings" disabled>Settings</TabsTrigger>
63
+ </TabsList>
64
+ <TabsContent value="account">
65
+ <div>Make changes to your account here.</div>
66
+ </TabsContent>
67
+ <TabsContent value="password">
68
+ <div>Change your password here.</div>
69
+ </TabsContent>
70
+ <TabsContent value="settings">
71
+ <div>Update your application settings here.</div>
72
+ </TabsContent>
73
+ </Tabs>
74
+ `,
75
+ }),
76
+ args: {
77
+ defaultValue: 'account',
78
+ },
79
+ };
80
+
81
+ export const WithTooltip = {
82
+ render: (args) => ({
83
+ components: {
84
+ Tabs,
85
+ TabsList,
86
+ TabsTrigger,
87
+ TabsContent,
88
+ UnnnicToolTip,
89
+ UnnnicIcon,
90
+ },
91
+ setup() {
92
+ return { args };
93
+ },
94
+ template: `
95
+ <Tabs v-bind="args">
96
+ <TabsList>
97
+ <TabsTrigger value="account">
98
+ Account
99
+ <UnnnicToolTip enabled text="Manage your account settings" side="bottom" class="!inline-flex items-center">
100
+ <UnnnicIcon icon="help" size="sm" scheme="fg-base"/>
101
+ </UnnnicToolTip>
102
+ </TabsTrigger>
103
+ <TabsTrigger value="password">
104
+ <span>Password</span>
105
+ </TabsTrigger>
106
+ <TabsTrigger value="settings">
107
+ <span>Settings</span>
108
+ </TabsTrigger>
109
+ </TabsList>
110
+ <TabsContent value="account">
111
+ <div>Make changes to your account here.</div>
112
+ </TabsContent>
113
+ <TabsContent value="password">
114
+ <div>Change your password here.</div>
115
+ </TabsContent>
116
+ <TabsContent value="settings">
117
+ <div>Update your application settings here.</div>
118
+ </TabsContent>
119
+ </Tabs>
120
+ `,
121
+ }),
122
+ args: {
123
+ defaultValue: 'account',
124
+ },
125
+ };
@@ -37,6 +37,7 @@ export const Default = {
37
37
  errors: [],
38
38
  size: 'md',
39
39
  message: 'Helper text',
40
+ tooltip: 'Tooltip',
40
41
  },
41
42
  };
42
43