@imaginario27/air-ui-ds 1.0.23 → 1.1.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.
- package/components/accordions/AccordionItem.vue +1 -1
- package/components/alerts/Alert.vue +19 -22
- package/components/badges/Badge.vue +32 -25
- package/components/badges/IconBadge.vue +7 -7
- package/components/badges/IconTextBadge.vue +2 -2
- package/components/breadcrumbs/Breadcrumbs.vue +92 -27
- package/components/buttons/ActionButton.vue +34 -68
- package/components/buttons/ActionIconButton.vue +11 -39
- package/components/buttons/AlertButton.vue +8 -13
- package/components/buttons/AlertIconButton.vue +6 -7
- package/components/buttons/CopyButton.vue +4 -4
- package/components/buttons/options/OptionButton.vue +2 -2
- package/components/buttons/toggle/ToggleButton.vue +8 -10
- package/components/cards/specific/ContactDetailsCard.vue +4 -8
- package/components/cards/specific/FeatureCard.vue +2 -2
- package/components/cards/specific/HelpTopicCard.vue +4 -4
- package/components/cards/specific/subscription/SubscriptionPlanCard.vue +6 -6
- package/components/cards/specific/subscription/UniqueSubscriptionPlanCard.vue +1 -1
- package/components/collapsibles/Collapsible.vue +1 -1
- package/components/content/ContentItem.vue +2 -2
- package/components/content/ContentItemImage.vue +12 -14
- package/components/dropdowns/DropdownMenuItem.vue +10 -10
- package/components/dropdowns/DropdownSelect.vue +5 -16
- package/components/dropdowns/DropdownSelectItem.vue +13 -23
- package/components/empty-states/EmptyState.vue +21 -27
- package/components/features/Feature.vue +11 -48
- package/components/forms/fields/ButtonField.vue +2 -9
- package/components/forms/fields/CheckboxField.vue +9 -8
- package/components/forms/fields/DataField.vue +1 -1
- package/components/forms/fields/FileUploadField.vue +6 -6
- package/components/forms/fields/InputField.vue +17 -28
- package/components/forms/fields/RepeaterField.vue +2 -2
- package/components/forms/fields/SearchField.vue +7 -10
- package/components/forms/fields/SliderField.vue +16 -19
- package/components/forms/fields/SwitchField.vue +12 -34
- package/components/forms/fields/TextareaField.vue +7 -5
- package/components/forms/fields/radio/RadioButtonField.vue +6 -7
- package/components/icons/ContainedIcon.vue +5 -15
- package/components/icons/Icon.vue +13 -22
- package/components/layouts/ErrorDisplay.vue +3 -3
- package/components/layouts/headers/CompactHeader.vue +4 -4
- package/components/layouts/headers/ContentPageHeader.vue +1 -1
- package/components/lists/List.vue +1 -1
- package/components/lists/ListItem.vue +11 -14
- package/components/loaders/LoadingScreen.vue +3 -3
- package/components/modals/DangerModalDialog.vue +4 -4
- package/components/modals/InfoModalDialog.vue +3 -3
- package/components/modals/ModalDialog.vue +1 -1
- package/components/modals/SuccessModalDialog.vue +2 -2
- package/components/navigation/links/NavLink.vue +10 -10
- package/components/navigation/nav-sidebar/BottomUserNavBar.vue +3 -3
- package/components/navigation/nav-sidebar/NavSidebar.vue +9 -9
- package/components/navigation/nav-sidebar/NavSidebarMenuItem.vue +7 -9
- package/components/navigation/nav-sidebar/NavSidebarMenuSectionTitle.vue +4 -5
- package/components/pagination/ButtonPagination.vue +6 -10
- package/components/pagination/SimplePagination.vue +2 -2
- package/components/password/SecurePasswordCondition.vue +5 -6
- package/components/rating/InteractiveRating.vue +6 -6
- package/components/rating/Rating.vue +6 -6
- package/components/rating/RatingItem.vue +12 -13
- package/components/steppers/CircleStepper.vue +11 -13
- package/components/steppers/Step.vue +2 -2
- package/components/steppers/StepIndicator.vue +29 -28
- package/components/steppers/TabStepper.vue +1 -1
- package/components/steppers/vertical-stepper/VerticalStep.vue +2 -2
- package/components/steppers/vertical-stepper/VerticalStepper.vue +1 -1
- package/components/tabs/Tab.vue +4 -9
- package/models/enums/dropdowns.ts +1 -0
- package/models/types/buttons.ts +1 -1
- package/models/types/selects.ts +1 -2
- package/nuxt.config.ts +1 -1
- package/package.json +1 -2
- package/components/navigation/nav-menu/NavFooterMenu.vue +0 -90
|
@@ -5,14 +5,11 @@
|
|
|
5
5
|
spaced && 'py-4'
|
|
6
6
|
]"
|
|
7
7
|
>
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
:size="iconSize"
|
|
14
|
-
/>
|
|
15
|
-
</span>
|
|
8
|
+
<Icon
|
|
9
|
+
v-if="icon"
|
|
10
|
+
:name="icon"
|
|
11
|
+
:class="[iconClass, iconSizeClass]"
|
|
12
|
+
/>
|
|
16
13
|
<span :class="[contentSizeClass, 'w-full']">
|
|
17
14
|
<slot />
|
|
18
15
|
</span>
|
|
@@ -21,7 +18,7 @@
|
|
|
21
18
|
<script setup lang="ts">
|
|
22
19
|
// Props
|
|
23
20
|
const props = defineProps({
|
|
24
|
-
icon: String as PropType<
|
|
21
|
+
icon: String as PropType<string>,
|
|
25
22
|
iconClass: {
|
|
26
23
|
type: String as PropType<string>,
|
|
27
24
|
default: 'text-icon-secondary-brand-default'
|
|
@@ -38,13 +35,13 @@ const props = defineProps({
|
|
|
38
35
|
})
|
|
39
36
|
|
|
40
37
|
// Computed
|
|
41
|
-
const
|
|
38
|
+
const iconSizeClass = computed(() => {
|
|
42
39
|
const sizeVariant = {
|
|
43
|
-
[ListItemSize.XS]: '
|
|
44
|
-
[ListItemSize.SM]: '
|
|
45
|
-
[ListItemSize.MD]: '
|
|
40
|
+
[ListItemSize.XS]: 'w-[16px] h-[16px] min-w-[16px] min-h-[16px]',
|
|
41
|
+
[ListItemSize.SM]: 'w-[20px] h-[20px] min-w-[20px] min-h-[20px]',
|
|
42
|
+
[ListItemSize.MD]: 'w-[24px] h-[24px] min-w-[24px] min-h-[24px]',
|
|
46
43
|
}
|
|
47
|
-
return sizeVariant[props.size as ListItemSize] || '
|
|
44
|
+
return sizeVariant[props.size as ListItemSize] || 'w-[20px] h-[20px] min-w-[20px] min-h-[20px]'
|
|
48
45
|
})
|
|
49
46
|
|
|
50
47
|
const contentSizeClass = computed(() => {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
<ContainedIcon
|
|
36
36
|
v-if="!$slots['graphic']"
|
|
37
37
|
:color="ColorAccent.DANGER"
|
|
38
|
-
icon="
|
|
38
|
+
icon="mdi:alert-circle-outline"
|
|
39
39
|
:size="iconContainerSize"
|
|
40
40
|
/>
|
|
41
41
|
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
:text="retryButtonText"
|
|
96
96
|
:size="buttonSize"
|
|
97
97
|
:iconPosition="IconPosition.LEFT"
|
|
98
|
-
icon="
|
|
98
|
+
icon="mdi:refresh"
|
|
99
99
|
class="self-center"
|
|
100
100
|
:disabled="isRetryButtonDisabled"
|
|
101
101
|
isMobileFullWidth
|
|
@@ -151,7 +151,7 @@ const props = defineProps({
|
|
|
151
151
|
},
|
|
152
152
|
goBackIcon: {
|
|
153
153
|
type: String as PropType<string>,
|
|
154
|
-
default: "
|
|
154
|
+
default: "mdi:keyboard-backspace",
|
|
155
155
|
},
|
|
156
156
|
hasRetryButton: {
|
|
157
157
|
type: Boolean as PropType<boolean>,
|
|
@@ -78,8 +78,8 @@ defineProps({
|
|
|
78
78
|
default: false,
|
|
79
79
|
},
|
|
80
80
|
icon: {
|
|
81
|
-
type: String as PropType<
|
|
82
|
-
default: '
|
|
81
|
+
type: String as PropType<string>,
|
|
82
|
+
default: 'mdi:alert-outline',
|
|
83
83
|
},
|
|
84
84
|
title: {
|
|
85
85
|
type: String as PropType<string>,
|
|
@@ -95,8 +95,8 @@ defineProps({
|
|
|
95
95
|
default: 'Delete',
|
|
96
96
|
},
|
|
97
97
|
buttonActionIcon: {
|
|
98
|
-
type: String as PropType<
|
|
99
|
-
default: '
|
|
98
|
+
type: String as PropType<string>,
|
|
99
|
+
default: 'mdi:delete-forever-outline',
|
|
100
100
|
},
|
|
101
101
|
isLoading: {
|
|
102
102
|
type: Boolean as PropType<boolean>,
|
|
@@ -78,8 +78,8 @@ defineProps({
|
|
|
78
78
|
default: false,
|
|
79
79
|
},
|
|
80
80
|
icon: {
|
|
81
|
-
type: String as PropType<
|
|
82
|
-
default: '
|
|
81
|
+
type: String as PropType<string>,
|
|
82
|
+
default: 'mdi:information-outline',
|
|
83
83
|
},
|
|
84
84
|
title: {
|
|
85
85
|
type: String as PropType<string>,
|
|
@@ -91,7 +91,7 @@ defineProps({
|
|
|
91
91
|
default: 'Close',
|
|
92
92
|
},
|
|
93
93
|
buttonActionText: String as PropType<string>,
|
|
94
|
-
buttonActionIcon: String as PropType<
|
|
94
|
+
buttonActionIcon: String as PropType<string>,
|
|
95
95
|
isLoading: {
|
|
96
96
|
type: Boolean as PropType<boolean>,
|
|
97
97
|
default: false,
|
|
@@ -14,21 +14,21 @@
|
|
|
14
14
|
gapClass,
|
|
15
15
|
]">
|
|
16
16
|
<!-- Left icon -->
|
|
17
|
-
<
|
|
17
|
+
<Icon
|
|
18
18
|
v-if="iconPosition === IconPosition.LEFT"
|
|
19
|
-
:
|
|
20
|
-
:
|
|
21
|
-
preserveAspectRatio="xMidYMid meet"
|
|
19
|
+
:name="icon"
|
|
20
|
+
:iconClass="iconSizeClass"
|
|
22
21
|
/>
|
|
22
|
+
|
|
23
23
|
<span :class="[ textSizeClass, textClass ]">
|
|
24
24
|
{{ text }}
|
|
25
25
|
</span>
|
|
26
|
+
|
|
26
27
|
<!-- Right icon -->
|
|
27
|
-
<
|
|
28
|
+
<Icon
|
|
28
29
|
v-if="iconPosition === IconPosition.RIGHT"
|
|
29
|
-
:
|
|
30
|
-
:
|
|
31
|
-
preserveAspectRatio="xMidYMid meet"
|
|
30
|
+
:name="icon"
|
|
31
|
+
:iconClass="iconSizeClass"
|
|
32
32
|
/>
|
|
33
33
|
</div>
|
|
34
34
|
</NuxtLink>
|
|
@@ -47,8 +47,8 @@ const props = defineProps({
|
|
|
47
47
|
validator: (value: NavLinkSize) => Object.values(NavLinkSize).includes(value),
|
|
48
48
|
},
|
|
49
49
|
icon: {
|
|
50
|
-
type: String as PropType<
|
|
51
|
-
default: "
|
|
50
|
+
type: String as PropType<string>,
|
|
51
|
+
default: "mdi:arrow-right-thin"
|
|
52
52
|
},
|
|
53
53
|
iconPosition: {
|
|
54
54
|
type: String as PropType<IconPosition>,
|
|
@@ -63,16 +63,16 @@ defineProps({
|
|
|
63
63
|
default: () => [
|
|
64
64
|
{
|
|
65
65
|
text: 'Account settings',
|
|
66
|
-
icon: '
|
|
66
|
+
icon: 'mdi:account-cog-outline',
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
text: 'Support',
|
|
70
|
-
icon: '
|
|
70
|
+
icon: 'mdi:lifebuoy',
|
|
71
71
|
to: '/',
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
text: 'Logout',
|
|
75
|
-
icon: '
|
|
75
|
+
icon: 'mdi:logout',
|
|
76
76
|
actionType: DropdownActionType.ACTION,
|
|
77
77
|
type: DropdownItemType.DANGER_ICON,
|
|
78
78
|
callback: () => {},
|
|
@@ -191,30 +191,30 @@ const props = defineProps({
|
|
|
191
191
|
{
|
|
192
192
|
isSectionTitle: true,
|
|
193
193
|
text: 'Section title',
|
|
194
|
-
icon: '
|
|
194
|
+
icon: 'mdi:bullseye',
|
|
195
195
|
},
|
|
196
196
|
{
|
|
197
197
|
text: 'Item 1',
|
|
198
|
-
icon: '
|
|
198
|
+
icon: 'mdi:help',
|
|
199
199
|
to: '/',
|
|
200
200
|
},
|
|
201
201
|
{
|
|
202
202
|
text: 'Item 2',
|
|
203
|
-
icon: '
|
|
203
|
+
icon: 'mdi:help',
|
|
204
204
|
to: '/',
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
text: 'Item 3',
|
|
208
|
-
icon: '
|
|
208
|
+
icon: 'mdi:help',
|
|
209
209
|
children: [
|
|
210
210
|
{
|
|
211
211
|
text: 'Subitem 1',
|
|
212
|
-
icon: '
|
|
212
|
+
icon: 'mdi:help',
|
|
213
213
|
to: '/',
|
|
214
214
|
},
|
|
215
215
|
{
|
|
216
216
|
text: 'Subitem 2',
|
|
217
|
-
icon: '
|
|
217
|
+
icon: 'mdi:help',
|
|
218
218
|
to: '/',
|
|
219
219
|
},
|
|
220
220
|
],
|
|
@@ -264,11 +264,11 @@ const props = defineProps({
|
|
|
264
264
|
},
|
|
265
265
|
collapsedStateIcon: {
|
|
266
266
|
type: String as PropType<string>,
|
|
267
|
-
default: '
|
|
267
|
+
default: 'mdi:menu-close',
|
|
268
268
|
},
|
|
269
269
|
expandedStateIcon: {
|
|
270
270
|
type: String as PropType<string>,
|
|
271
|
-
default: '
|
|
271
|
+
default: 'mdi:menu-open',
|
|
272
272
|
},
|
|
273
273
|
showMobileSidebarClose: {
|
|
274
274
|
type: Boolean as PropType<boolean>,
|
|
@@ -276,7 +276,7 @@ const props = defineProps({
|
|
|
276
276
|
},
|
|
277
277
|
mobileSidebarCloseIcon: {
|
|
278
278
|
type: String as PropType<string>,
|
|
279
|
-
default: '
|
|
279
|
+
default: 'mdi:close-circle',
|
|
280
280
|
},
|
|
281
281
|
isFixed: {
|
|
282
282
|
type: Boolean as PropType<boolean>,
|
|
@@ -22,11 +22,10 @@
|
|
|
22
22
|
gapClass,
|
|
23
23
|
]"
|
|
24
24
|
>
|
|
25
|
-
<
|
|
25
|
+
<Icon
|
|
26
26
|
v-if="icon"
|
|
27
|
-
:icon
|
|
28
|
-
|
|
29
|
-
:class="['text-icon-neutral-subtler', iconSizeClass]"
|
|
27
|
+
:name="icon"
|
|
28
|
+
:iconClass="['!text-icon-neutral-subtler', iconSizeClass]"
|
|
30
29
|
/>
|
|
31
30
|
|
|
32
31
|
<span
|
|
@@ -37,11 +36,10 @@
|
|
|
37
36
|
</span>
|
|
38
37
|
</div>
|
|
39
38
|
|
|
40
|
-
<
|
|
39
|
+
<Icon
|
|
41
40
|
v-if="showDropdownArrow && !isCollapsed"
|
|
42
|
-
:
|
|
43
|
-
|
|
44
|
-
:class="['text-icon-default', iconSizeClass]"
|
|
41
|
+
:name="isOpen ? 'mdi:chevron-up' : 'mdi:chevron-down'"
|
|
42
|
+
:class="iconSizeClass"
|
|
45
43
|
/>
|
|
46
44
|
</NuxtLink>
|
|
47
45
|
</template>
|
|
@@ -52,7 +50,7 @@ const props = defineProps({
|
|
|
52
50
|
type: String as PropType<string>,
|
|
53
51
|
default: 'Item text'
|
|
54
52
|
},
|
|
55
|
-
icon: String as PropType<
|
|
53
|
+
icon: String as PropType<string>,
|
|
56
54
|
to: {
|
|
57
55
|
type: String as PropType<string>,
|
|
58
56
|
default: null
|
|
@@ -12,11 +12,10 @@
|
|
|
12
12
|
spacingClass,
|
|
13
13
|
]"
|
|
14
14
|
>
|
|
15
|
-
<
|
|
15
|
+
<Icon
|
|
16
16
|
v-if="icon"
|
|
17
|
-
:icon
|
|
18
|
-
|
|
19
|
-
:class="['text-icon-neutral-subtle', iconSizeClass]"
|
|
17
|
+
:name="icon"
|
|
18
|
+
:iconClass="['!text-icon-neutral-subtle', iconSizeClass]"
|
|
20
19
|
/>
|
|
21
20
|
|
|
22
21
|
<span>
|
|
@@ -32,7 +31,7 @@ const props = defineProps({
|
|
|
32
31
|
type: String as PropType<string>,
|
|
33
32
|
default: 'Item text'
|
|
34
33
|
},
|
|
35
|
-
icon: String as PropType<
|
|
34
|
+
icon: String as PropType<string>,
|
|
36
35
|
styleType: {
|
|
37
36
|
type: String as PropType<SidebarNavMenuItemStyleType>,
|
|
38
37
|
default: SidebarNavMenuItemStyleType.COMPACT,
|
|
@@ -62,11 +62,9 @@
|
|
|
62
62
|
:disabled="modelValue === 1"
|
|
63
63
|
@click="goToPreviousPage"
|
|
64
64
|
>
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
preserveAspectRatio="xMidYMid meet"
|
|
69
|
-
class="text-icon-neutral-subtle"
|
|
65
|
+
<Icon
|
|
66
|
+
name="mdi:chevron-left"
|
|
67
|
+
iconClass="text-icon-neutral-subtle"
|
|
70
68
|
/>
|
|
71
69
|
</PaginationButton>
|
|
72
70
|
|
|
@@ -122,11 +120,9 @@
|
|
|
122
120
|
:disabled="modelValue === totalPages"
|
|
123
121
|
@click="goToNextPage"
|
|
124
122
|
>
|
|
125
|
-
<
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
preserveAspectRatio="xMidYMid meet"
|
|
129
|
-
class="text-icon-neutral-subtle"
|
|
123
|
+
<Icon
|
|
124
|
+
name="mdi:chevron-right"
|
|
125
|
+
iconClass="text-icon-neutral-subtle"
|
|
130
126
|
/>
|
|
131
127
|
</PaginationButton>
|
|
132
128
|
</nav>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<nav class="flex items-center justify-center gap-2">
|
|
3
3
|
<ActionIconButton
|
|
4
|
-
icon="
|
|
4
|
+
icon="mdi:chevron-left"
|
|
5
5
|
:styleType="ButtonStyleType.NEUTRAL_TRANSPARENT"
|
|
6
6
|
:disabled="modelValue === 1"
|
|
7
7
|
:class="[
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
{{ computedResultsText }}
|
|
15
15
|
</p>
|
|
16
16
|
<ActionIconButton
|
|
17
|
-
icon="
|
|
17
|
+
icon="mdi:chevron-right"
|
|
18
18
|
:styleType="ButtonStyleType.NEUTRAL_TRANSPARENT"
|
|
19
19
|
:disabled="modelValue === totalPages"
|
|
20
20
|
:class="[
|
|
@@ -8,13 +8,12 @@
|
|
|
8
8
|
'gap-2',
|
|
9
9
|
]"
|
|
10
10
|
>
|
|
11
|
-
<
|
|
12
|
-
:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
isValid ? 'text-icon-success-subtle' : 'text-text-neutral-subtle',
|
|
16
|
-
'w-[16px] h-[16px] min-w-[16px] min-h-[16px]',
|
|
11
|
+
<Icon
|
|
12
|
+
:name="isValid ? 'mdi:check' : 'mdi:close'"
|
|
13
|
+
:iconClass="[
|
|
14
|
+
isValid ? '!text-icon-success-subtle' : '!text-text-neutral-subtle',
|
|
17
15
|
]"
|
|
16
|
+
:size="IconSize.SM"
|
|
18
17
|
/>
|
|
19
18
|
<span
|
|
20
19
|
:class="[
|
|
@@ -33,16 +33,16 @@ const props = defineProps({
|
|
|
33
33
|
validator: (value: RatingItemColor) => Object.values(RatingItemColor).includes(value),
|
|
34
34
|
},
|
|
35
35
|
emptyIndicatorIcon: {
|
|
36
|
-
type: String as PropType<
|
|
37
|
-
default: '
|
|
36
|
+
type: String as PropType<string>,
|
|
37
|
+
default: 'mdi:star-outline'
|
|
38
38
|
},
|
|
39
39
|
halfIndicatorIcon: {
|
|
40
|
-
type: String as PropType<
|
|
41
|
-
default: '
|
|
40
|
+
type: String as PropType<string>,
|
|
41
|
+
default: 'mdi:star-half-full'
|
|
42
42
|
},
|
|
43
43
|
fullIndicatorIcon: {
|
|
44
|
-
type: String as PropType<
|
|
45
|
-
default: '
|
|
44
|
+
type: String as PropType<string>,
|
|
45
|
+
default: 'mdi:star'
|
|
46
46
|
},
|
|
47
47
|
hoverPreview: {
|
|
48
48
|
type: Boolean,
|
|
@@ -28,16 +28,16 @@ const props = defineProps({
|
|
|
28
28
|
validator: (value: RatingItemColor) => Object.values(RatingItemColor).includes(value),
|
|
29
29
|
},
|
|
30
30
|
emptyIndicatorIcon: {
|
|
31
|
-
type: String as PropType<
|
|
32
|
-
default: '
|
|
31
|
+
type: String as PropType<string>,
|
|
32
|
+
default: 'mdi:star-outline'
|
|
33
33
|
},
|
|
34
34
|
halfIndicatorIcon: {
|
|
35
|
-
type: String as PropType<
|
|
36
|
-
default: '
|
|
35
|
+
type: String as PropType<string>,
|
|
36
|
+
default: 'mdi:star-half-full'
|
|
37
37
|
},
|
|
38
38
|
fullIndicatorIcon: {
|
|
39
|
-
type: String as PropType<
|
|
40
|
-
default: '
|
|
39
|
+
type: String as PropType<string>,
|
|
40
|
+
default: 'mdi:star'
|
|
41
41
|
}
|
|
42
42
|
})
|
|
43
43
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
:icon
|
|
4
|
-
:size="iconSize"
|
|
5
|
-
preserveAspectRatio="xMidYMid meet"
|
|
2
|
+
<Icon
|
|
3
|
+
:name="icon"
|
|
6
4
|
:class="[
|
|
5
|
+
iconSizeClass,
|
|
7
6
|
colorClass,
|
|
8
7
|
isInteractive && 'hover:cursor-pointer'
|
|
9
8
|
]"
|
|
@@ -13,8 +12,8 @@
|
|
|
13
12
|
// Props
|
|
14
13
|
const props = defineProps({
|
|
15
14
|
icon: {
|
|
16
|
-
type: String as PropType<
|
|
17
|
-
default: '
|
|
15
|
+
type: String as PropType<string>,
|
|
16
|
+
default: 'mdi:star-outline'
|
|
18
17
|
},
|
|
19
18
|
size: {
|
|
20
19
|
type: String as PropType<RatingItemSize>,
|
|
@@ -33,15 +32,15 @@ const props = defineProps({
|
|
|
33
32
|
})
|
|
34
33
|
|
|
35
34
|
// Computed
|
|
36
|
-
const
|
|
35
|
+
const iconSizeClass = computed(() => {
|
|
37
36
|
const sizeVariant = {
|
|
38
|
-
[RatingItemSize.SM]: '
|
|
39
|
-
[RatingItemSize.MD]: '
|
|
40
|
-
[RatingItemSize.LG]: '
|
|
41
|
-
[RatingItemSize.XL]: '
|
|
42
|
-
[RatingItemSize.XXL]: '
|
|
37
|
+
[RatingItemSize.SM]: 'w-[20px] h-[20px] min-w-[20px] min-h-[20px]',
|
|
38
|
+
[RatingItemSize.MD]: 'w-[24px] h-[24px] min-w-[24px] min-h-[24px]',
|
|
39
|
+
[RatingItemSize.LG]: 'w-[32px] h-[32px] min-w-[32px] min-h-[32px]',
|
|
40
|
+
[RatingItemSize.XL]: 'w-[40px] h-[40px] min-w-[40px] min-h-[40px]',
|
|
41
|
+
[RatingItemSize.XXL]: 'w-[48px] h-[48px] min-w-[48px] min-h-[48px]',
|
|
43
42
|
}
|
|
44
|
-
return sizeVariant[props.size as RatingItemSize] || '
|
|
43
|
+
return sizeVariant[props.size as RatingItemSize] || 'w-[20px] h-[20px] min-w-[20px] min-h-[20px]'
|
|
45
44
|
})
|
|
46
45
|
|
|
47
46
|
const colorClass = computed(() => {
|
|
@@ -47,19 +47,19 @@ const props = defineProps({
|
|
|
47
47
|
type: [Array, Number] as PropType<number | CircleStep[]>,
|
|
48
48
|
default: () => [
|
|
49
49
|
{
|
|
50
|
-
icon: '
|
|
50
|
+
icon: 'mdi:home-outline',
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
icon: '
|
|
53
|
+
icon: 'mdi:account-outline',
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
|
-
icon: '
|
|
56
|
+
icon: 'mdi:map-marker-star-outline',
|
|
57
57
|
},
|
|
58
58
|
],
|
|
59
59
|
},
|
|
60
60
|
type: String as PropType<StepIndicatorType>,
|
|
61
61
|
size: String as PropType<StepIndicatorSize>,
|
|
62
|
-
completedIcon: String as PropType<
|
|
62
|
+
completedIcon: String as PropType<string>,
|
|
63
63
|
isInteractive: {
|
|
64
64
|
type: Boolean as PropType<boolean>,
|
|
65
65
|
default: false,
|
|
@@ -78,25 +78,23 @@ const hoveredIndex = ref<number | null>(null)
|
|
|
78
78
|
const stepItems = computed(() => {
|
|
79
79
|
const activeIndex = props.modelValue > 0 ? props.modelValue - 1 : 0
|
|
80
80
|
|
|
81
|
-
const stepsArray = Array.isArray(props.steps)
|
|
82
|
-
? props.steps
|
|
81
|
+
const stepsArray: CircleStep[] = Array.isArray(props.steps)
|
|
82
|
+
? props.steps as CircleStep[]
|
|
83
83
|
: Array.from({ length: props.steps }, () => ({}))
|
|
84
84
|
|
|
85
85
|
return stepsArray.map((step, index) => {
|
|
86
|
-
let status: StepStatus
|
|
86
|
+
let status: StepStatus;
|
|
87
87
|
|
|
88
88
|
if (index < activeIndex) {
|
|
89
|
-
status = StepStatus.COMPLETED
|
|
89
|
+
status = StepStatus.COMPLETED;
|
|
90
90
|
} else if (index === activeIndex) {
|
|
91
|
-
status = StepStatus.CURRENT
|
|
91
|
+
status = StepStatus.CURRENT;
|
|
92
92
|
} else {
|
|
93
|
-
status = StepStatus.INACTIVE
|
|
93
|
+
status = StepStatus.INACTIVE;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
const icon = typeof step === 'object' && 'icon' in step ? step.icon : undefined
|
|
97
|
-
|
|
98
96
|
return {
|
|
99
|
-
icon,
|
|
97
|
+
icon: step.icon,
|
|
100
98
|
status,
|
|
101
99
|
}
|
|
102
100
|
})
|
|
@@ -49,8 +49,8 @@ const props = defineProps({
|
|
|
49
49
|
status: String as PropType<StepStatus>,
|
|
50
50
|
size: String as PropType<StepIndicatorSize>,
|
|
51
51
|
step: Number as PropType<number>,
|
|
52
|
-
stepIcon: String as PropType<
|
|
53
|
-
completedIcon: String as PropType<
|
|
52
|
+
stepIcon: String as PropType<string>,
|
|
53
|
+
completedIcon: String as PropType<string>,
|
|
54
54
|
isInteractive: {
|
|
55
55
|
type: Boolean as PropType<boolean>,
|
|
56
56
|
default: false,
|