@saasmakers/ui 0.1.77 → 0.1.80

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 (38) hide show
  1. package/app/components/bases/BaseAlert.stories.ts +42 -0
  2. package/app/components/bases/BaseAvatar.stories.ts +18 -0
  3. package/app/components/bases/BaseBordered.stories.ts +22 -0
  4. package/app/components/bases/BaseButton.stories.ts +81 -0
  5. package/app/components/bases/BaseCharacter.stories.ts +31 -0
  6. package/app/components/bases/BaseChart.stories.ts +20 -0
  7. package/app/components/bases/BaseDivider.stories.ts +25 -0
  8. package/app/components/bases/BaseEmoji.stories.ts +28 -0
  9. package/app/components/bases/BaseHeading.stories.ts +49 -0
  10. package/app/components/bases/BaseIcon.stories.ts +56 -0
  11. package/app/components/bases/BaseMessage.stories.ts +20 -0
  12. package/app/components/bases/BaseMetric.stories.ts +39 -0
  13. package/app/components/bases/BaseOverlay.stories.ts +30 -0
  14. package/app/components/bases/BaseParagraph.stories.ts +36 -0
  15. package/app/components/bases/BasePower.stories.ts +59 -0
  16. package/app/components/bases/BaseQuote.stories.ts +63 -0
  17. package/app/components/bases/BaseSpinner.stories.ts +42 -0
  18. package/app/components/bases/BaseTag.stories.ts +44 -0
  19. package/app/components/bases/BaseTags.stories.ts +42 -0
  20. package/app/components/bases/BaseText.stories.ts +48 -0
  21. package/app/components/bases/BaseText.vue +21 -15
  22. package/app/components/bases/BaseToast.stories.ts +29 -0
  23. package/app/components/fields/FieldCheckbox.stories.ts +36 -0
  24. package/app/components/fields/FieldDays.stories.ts +10 -0
  25. package/app/components/fields/FieldEmojis.stories.ts +10 -0
  26. package/app/components/fields/FieldInput.stories.ts +80 -0
  27. package/app/components/fields/FieldLabel.stories.ts +30 -0
  28. package/app/components/fields/FieldMessage.stories.ts +22 -0
  29. package/app/components/fields/FieldSelect.stories.ts +73 -0
  30. package/app/components/fields/FieldTabs.stories.ts +44 -0
  31. package/app/components/fields/FieldTextarea.stories.ts +44 -0
  32. package/app/components/fields/FieldTime.stories.ts +39 -0
  33. package/app/components/layout/LayoutToasts.stories.ts +8 -0
  34. package/app/types/bases.d.ts +8 -10
  35. package/app/types/fields.d.ts +1 -3
  36. package/app/types/global.d.ts +3 -0
  37. package/nuxt.config.ts +1 -0
  38. package/package.json +4 -1
@@ -0,0 +1,44 @@
1
+ import BaseTag from './BaseTag.vue'
2
+
3
+ export default {
4
+ component: BaseTag,
5
+ title: 'Bases/BaseTag',
6
+
7
+ argTypes: {
8
+ active: { control: 'boolean' },
9
+ avatar: { control: 'text' },
10
+ circle: { control: 'text' },
11
+ clickable: { control: 'boolean' },
12
+ color: {
13
+ control: 'select',
14
+ options: [
15
+ 'black',
16
+ 'gray',
17
+ 'green',
18
+ 'indigo',
19
+ 'orange',
20
+ 'red',
21
+ 'white',
22
+ ] satisfies BaseColor[],
23
+ },
24
+ draggable: { control: 'boolean' },
25
+ editable: { control: 'boolean' },
26
+ icon: { control: 'text' },
27
+ iconSize: { control: 'number' },
28
+ id: { control: 'number' },
29
+ isCreation: { control: 'boolean' },
30
+ light: { control: 'boolean' },
31
+ order: { control: 'number' },
32
+ removable: { control: 'boolean' },
33
+ rounded: { control: 'boolean' },
34
+ size: {
35
+ control: 'select',
36
+ options: ['sm', 'base'] satisfies BaseTagSize[],
37
+ },
38
+ text: { control: 'text' },
39
+ truncate: { control: 'boolean' },
40
+ uppercase: { control: 'boolean' },
41
+ },
42
+ } satisfies Meta<typeof BaseTag>
43
+
44
+ export const Default: StoryObj<typeof BaseTag> = { args: { text: 'Tag' } satisfies Partial<BaseTag> }
@@ -0,0 +1,42 @@
1
+ import BaseTags from './BaseTags.vue'
2
+
3
+ export default {
4
+ component: BaseTags,
5
+ title: 'Bases/BaseTags',
6
+
7
+ argTypes: {
8
+ active: { control: 'boolean' },
9
+ clickable: { control: 'boolean' },
10
+ draggable: { control: 'boolean' },
11
+ editable: { control: 'boolean' },
12
+ hasBack: { control: 'boolean' },
13
+ hasCreation: { control: 'boolean' },
14
+ maxTags: { control: 'number' },
15
+ modelValue: { control: 'object' },
16
+ removable: { control: 'boolean' },
17
+ selectable: { control: 'boolean' },
18
+ selectableUnique: { control: 'boolean' },
19
+ size: {
20
+ control: 'select',
21
+ options: ['sm', 'base'] satisfies BaseTagSize[],
22
+ },
23
+ tags: { control: 'object' },
24
+ wrap: { control: 'boolean' },
25
+ },
26
+ } satisfies Meta<typeof BaseTags>
27
+
28
+ export const Default: StoryObj<typeof BaseTags> = {
29
+ args: {
30
+ modelValue: [],
31
+ tags: [
32
+ {
33
+ id: 1,
34
+ text: 'Tag 1',
35
+ },
36
+ {
37
+ id: 2,
38
+ text: 'Tag 2',
39
+ },
40
+ ],
41
+ } satisfies Partial<BaseTags>,
42
+ }
@@ -0,0 +1,48 @@
1
+ import BaseText from './BaseText.vue'
2
+
3
+ export default {
4
+ component: BaseText,
5
+ title: 'Bases/BaseText',
6
+
7
+ argTypes: {
8
+ alignment: {
9
+ control: 'select',
10
+ options: [
11
+ 'center',
12
+ 'left',
13
+ 'right',
14
+ ] satisfies BaseAlignment[],
15
+ },
16
+ background: {
17
+ control: 'select',
18
+ options: ['gray', 'white'] satisfies BaseBackground[],
19
+ },
20
+ block: { control: 'boolean' },
21
+ bold: { control: 'boolean' },
22
+ hasMargin: { control: 'boolean' },
23
+ maxCharacters: { control: 'number' },
24
+ noWrap: { control: 'boolean' },
25
+ reverse: { control: 'boolean' },
26
+ size: {
27
+ control: 'select',
28
+ options: [
29
+ '2xs',
30
+ 'xs',
31
+ 'sm',
32
+ 'base',
33
+ 'lg',
34
+ 'xl',
35
+ '2xl',
36
+ '3xl',
37
+ '4xl',
38
+ ] satisfies BaseSize[],
39
+ },
40
+ skeleton: { control: 'boolean' },
41
+ text: { control: 'text' },
42
+ truncate: { control: 'boolean' },
43
+ underline: { control: 'boolean' },
44
+ uppercase: { control: 'boolean' },
45
+ },
46
+ } satisfies Meta<typeof BaseText>
47
+
48
+ export const Default: StoryObj<typeof BaseText> = { args: { text: 'Text content' } satisfies Partial<BaseText> }
@@ -3,7 +3,9 @@ import type { BaseText } from '../../types/bases'
3
3
  import { NuxtLinkLocale } from '#components'
4
4
 
5
5
  const props = withDefaults(defineProps<BaseText>(), {
6
+ alignment: undefined,
6
7
  background: undefined,
8
+ block: false,
7
9
  bold: false,
8
10
  hasMargin: false,
9
11
  maxCharacters: 0,
@@ -77,35 +79,39 @@ function onShowMore() {
77
79
  <component
78
80
  :is="to ? NuxtLinkLocale : 'div'"
79
81
  :class="{
80
- 'font-bold': bold,
81
- 'font-medium': uppercase || !bold,
82
- 'truncate': truncate,
83
- 'underline text-indigo-700 dark:text-indigo-300': !!to,
84
- 'uppercase': uppercase,
85
- 'whitespace-nowrap': noWrap,
86
- 'underline': underline,
87
82
  'bg-gray-100 dark:bg-gray-900': background === 'gray',
88
83
  'bg-white dark:bg-gray-900': background === 'white',
84
+ 'block': block,
85
+ 'font-bold': bold,
86
+ 'font-medium': uppercase || !bold,
89
87
  'ml-0.5': ['3xs'].includes(size) && !reverse && hasMargin,
90
88
  'ml-1.5': ['2xs', 'xs', 'sm'].includes(size) && !reverse && hasMargin,
91
- 'ml-2': ['base', 'lg'].includes(size) && !reverse && hasMargin,
92
89
  'ml-2.5': ['xl', '2xl'].includes(size) && !reverse && hasMargin,
90
+ 'ml-2': ['base', 'lg'].includes(size) && !reverse && hasMargin,
93
91
  'ml-3': ['3xl', '4xl'].includes(size) && !reverse && hasMargin,
94
92
  'mr-0.5': ['3xs'].includes(size) && reverse && hasMargin,
95
93
  'mr-1.5': ['2xs', 'xs', 'sm'].includes(size) && reverse && hasMargin,
96
- 'mr-2': ['base', 'lg'].includes(size) && reverse && hasMargin,
97
94
  'mr-2.5': ['xl', '2xl'].includes(size) && reverse && hasMargin,
95
+ 'mr-2': ['base', 'lg'].includes(size) && reverse && hasMargin,
98
96
  'mr-3': ['3xl', '4xl'].includes(size) && reverse && hasMargin,
99
- 'text-3xs': (size === '3xs') && !uppercase,
97
+ 'text-2xl': (size === '2xl' && !uppercase) || (size === '3xl' && uppercase),
100
98
  'text-2xs': (size === '2xs') || (size === 'xs' && uppercase),
101
- 'text-xs': (size === 'xs' && !uppercase) || (size === 'sm' && uppercase),
102
- 'text-sm': (size === 'sm' && !uppercase) || (size === 'base' && uppercase),
99
+ 'text-3xl': (size === '3xl' && !uppercase) || (size === '4xl' && uppercase),
100
+ 'text-3xs': (size === '3xs') && !uppercase,
101
+ 'text-4xl': size === '4xl' && !uppercase,
103
102
  'text-base': (size === 'base' && !uppercase) || (size === 'lg' && uppercase),
103
+ 'text-center': alignment === 'center',
104
+ 'text-left': alignment === 'left',
104
105
  'text-lg': (size === 'lg' && !uppercase) || (size === 'xl' && uppercase),
106
+ 'text-right': alignment === 'right',
107
+ 'text-sm': (size === 'sm' && !uppercase) || (size === 'base' && uppercase),
105
108
  'text-xl': (size === 'xl' && !uppercase) || (size === '2xl' && uppercase),
106
- 'text-2xl': (size === '2xl' && !uppercase) || (size === '3xl' && uppercase),
107
- 'text-3xl': (size === '3xl' && !uppercase) || (size === '4xl' && uppercase),
108
- 'text-4xl': size === '4xl' && !uppercase,
109
+ 'text-xs': (size === 'xs' && !uppercase) || (size === 'sm' && uppercase),
110
+ 'truncate': truncate,
111
+ 'underline text-indigo-700 dark:text-indigo-300': !!to,
112
+ 'underline': underline,
113
+ 'uppercase': uppercase,
114
+ 'whitespace-nowrap': noWrap,
109
115
  }"
110
116
  :to="to"
111
117
  @click="onClick"
@@ -0,0 +1,29 @@
1
+ import BaseToast from './BaseToast.vue'
2
+
3
+ export default {
4
+ component: BaseToast,
5
+ title: 'Bases/BaseToast',
6
+
7
+ argTypes: {
8
+ hasClose: { control: 'boolean' },
9
+ id: { control: 'text' },
10
+ status: {
11
+ control: 'select',
12
+ options: [
13
+ 'error',
14
+ 'info',
15
+ 'success',
16
+ 'warning',
17
+ ] satisfies BaseStatus[],
18
+ },
19
+ text: { control: 'text' },
20
+ },
21
+ } satisfies Meta<typeof BaseToast>
22
+
23
+ export const Default: StoryObj<typeof BaseToast> = {
24
+ args: {
25
+ id: 'toast-1',
26
+ status: 'info',
27
+ text: 'Toast message',
28
+ } satisfies Partial<BaseToast>,
29
+ }
@@ -0,0 +1,36 @@
1
+ import FieldCheckbox from './FieldCheckbox.vue'
2
+
3
+ export default {
4
+ component: FieldCheckbox,
5
+ title: 'Fields/FieldCheckbox',
6
+
7
+ argTypes: {
8
+ description: { control: 'text' },
9
+ disabled: { control: 'boolean' },
10
+ fullWidth: { control: 'boolean' },
11
+ hideError: { control: 'boolean' },
12
+ label: { control: 'text' },
13
+ labelIcon: { control: 'text' },
14
+ lineThrough: { control: 'boolean' },
15
+ loading: { control: 'boolean' },
16
+ required: { control: 'boolean' },
17
+ size: {
18
+ control: 'select',
19
+ options: [
20
+ 'xs',
21
+ 'sm',
22
+ 'base',
23
+ 'lg',
24
+ ] satisfies FieldSize[],
25
+ },
26
+ truncate: { control: 'boolean' },
27
+ uppercase: { control: 'boolean' },
28
+ },
29
+ } satisfies Meta<typeof FieldCheckbox>
30
+
31
+ export const Default: StoryObj<typeof FieldCheckbox> = {
32
+ args: {
33
+ label: 'Checkbox Label',
34
+ modelValue: false,
35
+ } satisfies Partial<FieldCheckbox>,
36
+ }
@@ -0,0 +1,10 @@
1
+ import FieldDays from './FieldDays.vue'
2
+
3
+ export default {
4
+ component: FieldDays,
5
+ title: 'Fields/FieldDays',
6
+
7
+ argTypes: {},
8
+ } satisfies Meta<typeof FieldDays>
9
+
10
+ export const Default: StoryObj<typeof FieldDays> = { args: { modelValue: [] } satisfies Partial<FieldDays> }
@@ -0,0 +1,10 @@
1
+ import FieldEmojis from './FieldEmojis.vue'
2
+
3
+ export default {
4
+ component: FieldEmojis,
5
+ title: 'Fields/FieldEmojis',
6
+
7
+ argTypes: {},
8
+ } satisfies Meta<typeof FieldEmojis>
9
+
10
+ export const Default: StoryObj<typeof FieldEmojis> = { args: { modelValue: '' } satisfies Partial<FieldEmojis> }
@@ -0,0 +1,80 @@
1
+ import FieldInput from './FieldInput.vue'
2
+
3
+ export default {
4
+ component: FieldInput,
5
+ title: 'Fields/FieldInput',
6
+
7
+ argTypes: {
8
+ alignment: {
9
+ control: 'select',
10
+ options: [
11
+ 'center',
12
+ 'left',
13
+ 'right',
14
+ ] satisfies BaseAlignment[],
15
+ },
16
+ autocomplete: { control: 'boolean' },
17
+ autofocus: { control: 'boolean' },
18
+ background: {
19
+ control: 'select',
20
+ options: ['gray', 'white'] satisfies FieldBackground[],
21
+ },
22
+ border: {
23
+ control: 'select',
24
+ options: [
25
+ 'bottom',
26
+ 'full',
27
+ 'none',
28
+ ] satisfies FieldInputBorder[],
29
+ },
30
+ description: { control: 'text' },
31
+ disabled: { control: 'boolean' },
32
+ fullWidth: { control: 'boolean' },
33
+ hideError: { control: 'boolean' },
34
+ label: { control: 'text' },
35
+ labelIcon: { control: 'text' },
36
+ lineThrough: { control: 'boolean' },
37
+ loading: { control: 'boolean' },
38
+ lowercaseOnly: { control: 'boolean' },
39
+ max: { control: 'number' },
40
+ min: { control: 'number' },
41
+ placeholder: { control: 'text' },
42
+ required: { control: 'boolean' },
43
+ size: {
44
+ control: 'select',
45
+ options: [
46
+ 'xs',
47
+ 'sm',
48
+ 'base',
49
+ 'lg',
50
+ ] satisfies FieldSize[],
51
+ },
52
+ type: {
53
+ control: 'select',
54
+ options: [
55
+ 'currency',
56
+ 'date',
57
+ 'datetime-local',
58
+ 'email',
59
+ 'month',
60
+ 'number',
61
+ 'password',
62
+ 'search',
63
+ 'tel',
64
+ 'text',
65
+ 'time',
66
+ 'url',
67
+ 'week',
68
+ ] satisfies FieldInputType[],
69
+ },
70
+ uppercase: { control: 'boolean' },
71
+ },
72
+ } satisfies Meta<typeof FieldInput>
73
+
74
+ export const Default: StoryObj<typeof FieldInput> = {
75
+ args: {
76
+ label: 'Input Label',
77
+ modelValue: '',
78
+ placeholder: 'Enter text...',
79
+ } satisfies Partial<FieldInput>,
80
+ }
@@ -0,0 +1,30 @@
1
+ import FieldLabel from './FieldLabel.vue'
2
+
3
+ export default {
4
+ component: FieldLabel,
5
+ title: 'Fields/FieldLabel',
6
+
7
+ argTypes: {
8
+ disabled: { control: 'boolean' },
9
+ forField: { control: 'text' },
10
+ hasMarginBottom: { control: 'boolean' },
11
+ hasMarginLeft: { control: 'boolean' },
12
+ icon: { control: 'text' },
13
+ label: { control: 'text' },
14
+ lineThrough: { control: 'boolean' },
15
+ loading: { control: 'boolean' },
16
+ required: { control: 'boolean' },
17
+ size: {
18
+ control: 'select',
19
+ options: [
20
+ 'xs',
21
+ 'sm',
22
+ 'base',
23
+ 'lg',
24
+ ] satisfies FieldSize[],
25
+ },
26
+ truncate: { control: 'boolean' },
27
+ },
28
+ } satisfies Meta<typeof FieldLabel>
29
+
30
+ export const Default: StoryObj<typeof FieldLabel> = { args: { label: 'Label Text' } satisfies Partial<FieldLabel> }
@@ -0,0 +1,22 @@
1
+ import FieldMessage from './FieldMessage.vue'
2
+
3
+ export default {
4
+ component: FieldMessage,
5
+ title: 'Fields/FieldMessage',
6
+
7
+ argTypes: {
8
+ description: { control: 'text' },
9
+ hideError: { control: 'boolean' },
10
+ size: {
11
+ control: 'select',
12
+ options: [
13
+ 'xs',
14
+ 'sm',
15
+ 'base',
16
+ 'lg',
17
+ ] satisfies FieldSize[],
18
+ },
19
+ },
20
+ } satisfies Meta<typeof FieldMessage>
21
+
22
+ export const Default: StoryObj<typeof FieldMessage> = { args: { description: 'This is a message' } satisfies Partial<FieldMessage> }
@@ -0,0 +1,73 @@
1
+ import FieldSelect from './FieldSelect.vue'
2
+
3
+ export default {
4
+ component: FieldSelect,
5
+ title: 'Fields/FieldSelect',
6
+
7
+ argTypes: {
8
+ border: {
9
+ control: 'select',
10
+ options: [
11
+ 'bottom',
12
+ 'full',
13
+ 'none',
14
+ ] satisfies FieldSelectBorder[],
15
+ },
16
+ caret: { control: 'boolean' },
17
+ columns: { control: 'object' },
18
+ description: { control: 'text' },
19
+ direction: {
20
+ control: 'select',
21
+ options: ['bottom', 'top'] satisfies FieldSelectDirection[],
22
+ },
23
+ disabled: { control: 'boolean' },
24
+ hideError: { control: 'boolean' },
25
+ label: { control: 'text' },
26
+ labelIcon: { control: 'text' },
27
+ maxHeight: {
28
+ control: 'select',
29
+ options: [
30
+ 'xs',
31
+ 'sm',
32
+ 'md',
33
+ 'lg',
34
+ ] satisfies FieldSelectMaxHeight[],
35
+ },
36
+ openOnHover: { control: 'boolean' },
37
+ options: { control: 'object' },
38
+ padding: { control: 'boolean' },
39
+ placeholder: { control: 'text' },
40
+ required: { control: 'boolean' },
41
+ size: {
42
+ control: 'select',
43
+ options: [
44
+ 'xs',
45
+ 'sm',
46
+ 'base',
47
+ 'lg',
48
+ ] satisfies FieldSize[],
49
+ },
50
+ },
51
+ } satisfies Meta<typeof FieldSelect>
52
+
53
+ export const Default: StoryObj<typeof FieldSelect> = {
54
+ args: {
55
+ label: 'Select Label',
56
+ modelValue: '',
57
+ options: [
58
+ {
59
+ text: 'Option 1',
60
+ value: '1',
61
+ },
62
+ {
63
+ text: 'Option 2',
64
+ value: '2',
65
+ },
66
+ {
67
+ text: 'Option 3',
68
+ value: '3',
69
+ },
70
+ ],
71
+ placeholder: 'Choose an option...',
72
+ } satisfies Partial<FieldSelect>,
73
+ }
@@ -0,0 +1,44 @@
1
+ import FieldTabs from './FieldTabs.vue'
2
+
3
+ export default {
4
+ component: FieldTabs,
5
+ title: 'Fields/FieldTabs',
6
+
7
+ argTypes: {
8
+ minimizeOnMobile: { control: 'boolean' },
9
+ size: {
10
+ control: 'select',
11
+ options: [
12
+ 'xs',
13
+ 'sm',
14
+ 'base',
15
+ 'lg',
16
+ ] satisfies FieldSize[],
17
+ },
18
+ tabs: { control: 'object' },
19
+ theme: {
20
+ control: 'select',
21
+ options: ['border', 'rounded'] satisfies FieldTabsTheme[],
22
+ },
23
+ },
24
+ } satisfies Meta<typeof FieldTabs>
25
+
26
+ export const Default: StoryObj<typeof FieldTabs> = {
27
+ args: {
28
+ modelValue: 'tab1',
29
+ tabs: [
30
+ {
31
+ label: 'Tab 1',
32
+ value: 'tab1',
33
+ },
34
+ {
35
+ label: 'Tab 2',
36
+ value: 'tab2',
37
+ },
38
+ {
39
+ label: 'Tab 3',
40
+ value: 'tab3',
41
+ },
42
+ ],
43
+ } satisfies Partial<FieldTabs>,
44
+ }
@@ -0,0 +1,44 @@
1
+ import FieldTextarea from './FieldTextarea.vue'
2
+
3
+ export default {
4
+ component: FieldTextarea,
5
+ title: 'Fields/FieldTextarea',
6
+
7
+ argTypes: {
8
+ autofocus: { control: 'boolean' },
9
+ background: {
10
+ control: 'select',
11
+ options: ['gray', 'white'] satisfies FieldBackground[],
12
+ },
13
+ border: { control: 'boolean' },
14
+ description: { control: 'text' },
15
+ disabled: { control: 'boolean' },
16
+ fullWidth: { control: 'boolean' },
17
+ hideError: { control: 'boolean' },
18
+ label: { control: 'text' },
19
+ labelIcon: { control: 'text' },
20
+ loading: { control: 'boolean' },
21
+ padding: { control: 'boolean' },
22
+ placeholder: { control: 'text' },
23
+ required: { control: 'boolean' },
24
+ resize: { control: 'boolean' },
25
+ rows: { control: 'number' },
26
+ size: {
27
+ control: 'select',
28
+ options: [
29
+ 'xs',
30
+ 'sm',
31
+ 'base',
32
+ 'lg',
33
+ ] satisfies FieldSize[],
34
+ },
35
+ },
36
+ } satisfies Meta<typeof FieldTextarea>
37
+
38
+ export const Default: StoryObj<typeof FieldTextarea> = {
39
+ args: {
40
+ label: 'Textarea Label',
41
+ modelValue: '',
42
+ placeholder: 'Enter text...',
43
+ } satisfies Partial<FieldTextarea>,
44
+ }
@@ -0,0 +1,39 @@
1
+ import FieldTime from './FieldTime.vue'
2
+
3
+ export default {
4
+ component: FieldTime,
5
+ title: 'Fields/FieldTime',
6
+
7
+ argTypes: {
8
+ background: {
9
+ control: 'select',
10
+ options: ['gray', 'white'] satisfies FieldBackground[],
11
+ },
12
+ description: { control: 'text' },
13
+ disabled: { control: 'boolean' },
14
+ hideError: { control: 'boolean' },
15
+ icon: { control: 'text' },
16
+ id: { control: 'text' },
17
+ label: { control: 'text' },
18
+ labelIcon: { control: 'text' },
19
+ name: { control: 'text' },
20
+ required: { control: 'boolean' },
21
+ size: {
22
+ control: 'select',
23
+ options: [
24
+ 'xs',
25
+ 'sm',
26
+ 'base',
27
+ 'lg',
28
+ ] satisfies FieldSize[],
29
+ },
30
+ },
31
+ } satisfies Meta<typeof FieldTime>
32
+
33
+ export const Default: StoryObj<typeof FieldTime> = {
34
+ args: {
35
+ id: 'time-1',
36
+ label: 'Time Label',
37
+ modelValue: '',
38
+ } satisfies Partial<FieldTime>,
39
+ }
@@ -0,0 +1,8 @@
1
+ import LayoutToasts from './LayoutToasts.vue'
2
+
3
+ export default {
4
+ component: LayoutToasts,
5
+ title: 'Layout/LayoutToasts',
6
+ } satisfies Meta<typeof LayoutToasts>
7
+
8
+ export const Default: StoryObj<typeof LayoutToasts> = { args: {} }