@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.
Files changed (73) hide show
  1. package/components/accordions/AccordionItem.vue +1 -1
  2. package/components/alerts/Alert.vue +19 -22
  3. package/components/badges/Badge.vue +32 -25
  4. package/components/badges/IconBadge.vue +7 -7
  5. package/components/badges/IconTextBadge.vue +2 -2
  6. package/components/breadcrumbs/Breadcrumbs.vue +92 -27
  7. package/components/buttons/ActionButton.vue +34 -68
  8. package/components/buttons/ActionIconButton.vue +11 -39
  9. package/components/buttons/AlertButton.vue +8 -13
  10. package/components/buttons/AlertIconButton.vue +6 -7
  11. package/components/buttons/CopyButton.vue +4 -4
  12. package/components/buttons/options/OptionButton.vue +2 -2
  13. package/components/buttons/toggle/ToggleButton.vue +8 -10
  14. package/components/cards/specific/ContactDetailsCard.vue +4 -8
  15. package/components/cards/specific/FeatureCard.vue +2 -2
  16. package/components/cards/specific/HelpTopicCard.vue +4 -4
  17. package/components/cards/specific/subscription/SubscriptionPlanCard.vue +6 -6
  18. package/components/cards/specific/subscription/UniqueSubscriptionPlanCard.vue +1 -1
  19. package/components/collapsibles/Collapsible.vue +1 -1
  20. package/components/content/ContentItem.vue +2 -2
  21. package/components/content/ContentItemImage.vue +12 -14
  22. package/components/dropdowns/DropdownMenuItem.vue +10 -10
  23. package/components/dropdowns/DropdownSelect.vue +5 -16
  24. package/components/dropdowns/DropdownSelectItem.vue +13 -23
  25. package/components/empty-states/EmptyState.vue +21 -27
  26. package/components/features/Feature.vue +11 -48
  27. package/components/forms/fields/ButtonField.vue +2 -9
  28. package/components/forms/fields/CheckboxField.vue +9 -8
  29. package/components/forms/fields/DataField.vue +1 -1
  30. package/components/forms/fields/FileUploadField.vue +6 -6
  31. package/components/forms/fields/InputField.vue +17 -28
  32. package/components/forms/fields/RepeaterField.vue +2 -2
  33. package/components/forms/fields/SearchField.vue +7 -10
  34. package/components/forms/fields/SliderField.vue +16 -19
  35. package/components/forms/fields/SwitchField.vue +12 -34
  36. package/components/forms/fields/TextareaField.vue +7 -5
  37. package/components/forms/fields/radio/RadioButtonField.vue +6 -7
  38. package/components/icons/ContainedIcon.vue +5 -15
  39. package/components/icons/Icon.vue +13 -22
  40. package/components/layouts/ErrorDisplay.vue +3 -3
  41. package/components/layouts/headers/CompactHeader.vue +4 -4
  42. package/components/layouts/headers/ContentPageHeader.vue +1 -1
  43. package/components/lists/List.vue +1 -1
  44. package/components/lists/ListItem.vue +11 -14
  45. package/components/loaders/LoadingScreen.vue +3 -3
  46. package/components/modals/DangerModalDialog.vue +4 -4
  47. package/components/modals/InfoModalDialog.vue +3 -3
  48. package/components/modals/ModalDialog.vue +1 -1
  49. package/components/modals/SuccessModalDialog.vue +2 -2
  50. package/components/navigation/links/NavLink.vue +10 -10
  51. package/components/navigation/nav-sidebar/BottomUserNavBar.vue +3 -3
  52. package/components/navigation/nav-sidebar/NavSidebar.vue +9 -9
  53. package/components/navigation/nav-sidebar/NavSidebarMenuItem.vue +7 -9
  54. package/components/navigation/nav-sidebar/NavSidebarMenuSectionTitle.vue +4 -5
  55. package/components/pagination/ButtonPagination.vue +6 -10
  56. package/components/pagination/SimplePagination.vue +2 -2
  57. package/components/password/SecurePasswordCondition.vue +5 -6
  58. package/components/rating/InteractiveRating.vue +6 -6
  59. package/components/rating/Rating.vue +6 -6
  60. package/components/rating/RatingItem.vue +12 -13
  61. package/components/steppers/CircleStepper.vue +11 -13
  62. package/components/steppers/Step.vue +2 -2
  63. package/components/steppers/StepIndicator.vue +29 -28
  64. package/components/steppers/TabStepper.vue +1 -1
  65. package/components/steppers/vertical-stepper/VerticalStep.vue +2 -2
  66. package/components/steppers/vertical-stepper/VerticalStepper.vue +1 -1
  67. package/components/tabs/Tab.vue +4 -9
  68. package/models/enums/dropdowns.ts +1 -0
  69. package/models/types/buttons.ts +1 -1
  70. package/models/types/selects.ts +1 -2
  71. package/nuxt.config.ts +1 -1
  72. package/package.json +1 -2
  73. package/components/navigation/nav-menu/NavFooterMenu.vue +0 -90
@@ -5,14 +5,11 @@
5
5
  spaced && 'py-4'
6
6
  ]"
7
7
  >
8
- <span v-if="icon">
9
- <MdiIcon
10
- :class="iconClass"
11
- :icon="icon"
12
- preserveAspectRatio="xMidYMid meet"
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<any>,
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 iconSize = computed(() => {
38
+ const iconSizeClass = computed(() => {
42
39
  const sizeVariant = {
43
- [ListItemSize.XS]: '16',
44
- [ListItemSize.SM]: '20',
45
- [ListItemSize.MD]: '24',
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] || '20'
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="mdiAlertCircleOutline"
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="mdiRefresh"
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: "mdiKeyboardBackspace",
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<any>,
82
- default: 'mdiAlertOutline',
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<any>,
99
- default: 'mdiDeleteForeverOutline',
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<any>,
82
- default: 'mdiInformationOutline',
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<any>,
94
+ buttonActionIcon: String as PropType<string>,
95
95
  isLoading: {
96
96
  type: Boolean as PropType<boolean>,
97
97
  default: false,
@@ -22,7 +22,7 @@
22
22
  v-if="hasCornerCloseButton"
23
23
  :styleType="ButtonStyleType.NEUTRAL_TRANSPARENT"
24
24
  :size="ButtonSize.MD"
25
- icon="mdiClose"
25
+ icon="mdi:close"
26
26
  class="absolute top-4 right-4 z-10"
27
27
  @click="closeModal"
28
28
  />
@@ -42,8 +42,8 @@ defineProps({
42
42
  default: false,
43
43
  },
44
44
  icon: {
45
- type: String as PropType<any>,
46
- default: 'mdiCheckBold',
45
+ type: String as PropType<string>,
46
+ default: 'mdi:check-bold',
47
47
  },
48
48
  title: {
49
49
  type: String as PropType<string>,
@@ -14,21 +14,21 @@
14
14
  gapClass,
15
15
  ]">
16
16
  <!-- Left icon -->
17
- <MdiIcon
17
+ <Icon
18
18
  v-if="iconPosition === IconPosition.LEFT"
19
- :icon="icon"
20
- :size="iconSizeClass"
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
- <MdiIcon
28
+ <Icon
28
29
  v-if="iconPosition === IconPosition.RIGHT"
29
- :icon="icon"
30
- :size="iconSizeClass"
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<any>,
51
- default: "mdiArrowRightThin"
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: 'mdiAccountCogOutline',
66
+ icon: 'mdi:account-cog-outline',
67
67
  },
68
68
  {
69
69
  text: 'Support',
70
- icon: 'mdiLifebuoy',
70
+ icon: 'mdi:lifebuoy',
71
71
  to: '/',
72
72
  },
73
73
  {
74
74
  text: 'Logout',
75
- icon: 'mdiLogout',
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: 'mdiBullseye',
194
+ icon: 'mdi:bullseye',
195
195
  },
196
196
  {
197
197
  text: 'Item 1',
198
- icon: 'mdiHelp',
198
+ icon: 'mdi:help',
199
199
  to: '/',
200
200
  },
201
201
  {
202
202
  text: 'Item 2',
203
- icon: 'mdiHelp',
203
+ icon: 'mdi:help',
204
204
  to: '/',
205
205
  },
206
206
  {
207
207
  text: 'Item 3',
208
- icon: 'mdiHelp',
208
+ icon: 'mdi:help',
209
209
  children: [
210
210
  {
211
211
  text: 'Subitem 1',
212
- icon: 'mdiHelp',
212
+ icon: 'mdi:help',
213
213
  to: '/',
214
214
  },
215
215
  {
216
216
  text: 'Subitem 2',
217
- icon: 'mdiHelp',
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: 'mdiMenuClose',
267
+ default: 'mdi:menu-close',
268
268
  },
269
269
  expandedStateIcon: {
270
270
  type: String as PropType<string>,
271
- default: 'mdiMenuOpen',
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: 'mdiClose',
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
- <MdiIcon
25
+ <Icon
26
26
  v-if="icon"
27
- :icon
28
- preserveAspectRatio="xMidYMid meet"
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
- <MdiIcon
39
+ <Icon
41
40
  v-if="showDropdownArrow && !isCollapsed"
42
- :icon="isOpen ? 'mdiChevronUp' : 'mdiChevronDown'"
43
- preserveAspectRatio="xMidYMid meet"
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<any>,
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
- <MdiIcon
15
+ <Icon
16
16
  v-if="icon"
17
- :icon
18
- preserveAspectRatio="xMidYMid meet"
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<any>,
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
- <MdiIcon
66
- icon="mdiChevronLeft"
67
- size="20px"
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
- <MdiIcon
126
- icon="mdiChevronRight"
127
- size="20px"
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="mdiChevronLeft"
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="mdiChevronRight"
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
- <MdiIcon
12
- :icon="isValid ? 'mdiCheck' : 'mdiClose'"
13
- preserveAspectRatio="xMidYMid meet"
14
- :class="[
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<any>,
37
- default: 'mdiStarOutline'
36
+ type: String as PropType<string>,
37
+ default: 'mdi:star-outline'
38
38
  },
39
39
  halfIndicatorIcon: {
40
- type: String as PropType<any>,
41
- default: 'mdiStarHalfFull'
40
+ type: String as PropType<string>,
41
+ default: 'mdi:star-half-full'
42
42
  },
43
43
  fullIndicatorIcon: {
44
- type: String as PropType<any>,
45
- default: 'mdiStar'
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<any>,
32
- default: 'mdiStarOutline'
31
+ type: String as PropType<string>,
32
+ default: 'mdi:star-outline'
33
33
  },
34
34
  halfIndicatorIcon: {
35
- type: String as PropType<any>,
36
- default: 'mdiStarHalfFull'
35
+ type: String as PropType<string>,
36
+ default: 'mdi:star-half-full'
37
37
  },
38
38
  fullIndicatorIcon: {
39
- type: String as PropType<any>,
40
- default: 'mdiStar'
39
+ type: String as PropType<string>,
40
+ default: 'mdi:star'
41
41
  }
42
42
  })
43
43
 
@@ -1,9 +1,8 @@
1
1
  <template>
2
- <MdiIcon
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<any>,
17
- default: 'mdiStarOutline'
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 iconSize = computed(() => {
35
+ const iconSizeClass = computed(() => {
37
36
  const sizeVariant = {
38
- [RatingItemSize.SM]: '20',
39
- [RatingItemSize.MD]: '24',
40
- [RatingItemSize.LG]: '32',
41
- [RatingItemSize.XL]: '40',
42
- [RatingItemSize.XXL]: '48',
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] || '20'
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: 'mdiHomeOutline',
50
+ icon: 'mdi:home-outline',
51
51
  },
52
52
  {
53
- icon: 'mdiAccountOutline',
53
+ icon: 'mdi:account-outline',
54
54
  },
55
55
  {
56
- icon: 'mdiMapMarkerStarOutline',
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<any>,
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<any>,
53
- completedIcon: String as PropType<any>,
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,