@imaginario27/air-ui-ds 1.0.23 → 1.1.1
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 +15 -15
- package/components/badges/IconTextBadge.vue +2 -2
- package/components/breadcrumbs/Breadcrumbs.vue +92 -27
- package/components/buttons/ActionButton.vue +40 -74
- package/components/buttons/ActionIconButton.vue +23 -51
- 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 +14 -24
- 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
|
@@ -11,16 +11,15 @@
|
|
|
11
11
|
]"
|
|
12
12
|
>
|
|
13
13
|
<!-- Icon -->
|
|
14
|
-
<
|
|
14
|
+
<Icon
|
|
15
15
|
v-if="icon"
|
|
16
|
-
:
|
|
17
|
-
:
|
|
18
|
-
preserveAspectRatio="xMidYMid meet"
|
|
19
|
-
:class="[
|
|
16
|
+
:name="icon"
|
|
17
|
+
:iconClass="[
|
|
20
18
|
hasContainer ? isContainedIconClass : iconClass,
|
|
21
19
|
iconSizeClass,
|
|
22
20
|
]"
|
|
23
21
|
/>
|
|
22
|
+
|
|
24
23
|
<div
|
|
25
24
|
:class="[
|
|
26
25
|
'flex gap-2 flex-col',
|
|
@@ -68,8 +67,8 @@ const props = defineProps({
|
|
|
68
67
|
},
|
|
69
68
|
description: String as PropType<string>,
|
|
70
69
|
icon: {
|
|
71
|
-
type: String as PropType<
|
|
72
|
-
default: '
|
|
70
|
+
type: String as PropType<string>,
|
|
71
|
+
default: 'mdi:database-alert-outline',
|
|
73
72
|
},
|
|
74
73
|
iconClass: {
|
|
75
74
|
type: String as PropType<string>,
|
|
@@ -87,7 +86,10 @@ const props = defineProps({
|
|
|
87
86
|
},
|
|
88
87
|
buttonText: String as PropType<string>,
|
|
89
88
|
buttonIconPosition: String as PropType<IconPosition>,
|
|
90
|
-
buttonIcon:
|
|
89
|
+
buttonIcon: {
|
|
90
|
+
type: String as PropType<string>,
|
|
91
|
+
default: 'mdi:plus',
|
|
92
|
+
},
|
|
91
93
|
buttonStyleType: {
|
|
92
94
|
type: String as PropType<ButtonStyleType>,
|
|
93
95
|
default: ButtonStyleType.PRIMARY_BRAND_FILLED
|
|
@@ -119,20 +121,12 @@ const orientationClass = computed(() => {
|
|
|
119
121
|
return orientationVariant[props.orientation as Orientation] || 'flex-col gap-3 sm:flex-row sm:gap-3'
|
|
120
122
|
})
|
|
121
123
|
|
|
122
|
-
const iconSize = computed(() => {
|
|
123
|
-
const iconSize = {
|
|
124
|
-
[Orientation.VERTICAL]: '40px',
|
|
125
|
-
[Orientation.HORIZONTAL]: '32px',
|
|
126
|
-
}
|
|
127
|
-
return iconSize[props.orientation as Orientation] || '32px'
|
|
128
|
-
})
|
|
129
|
-
|
|
130
124
|
const iconSizeClass = computed(() => {
|
|
131
125
|
const iconSize = {
|
|
132
|
-
[Orientation.VERTICAL]: 'min-w-[40px] max-w-[40px]',
|
|
133
|
-
[Orientation.HORIZONTAL]: 'min-w-[32px] max-w-[32px]',
|
|
126
|
+
[Orientation.VERTICAL]: '!min-w-[40px] !max-w-[40px]',
|
|
127
|
+
[Orientation.HORIZONTAL]: '!min-w-[32px] !max-w-[32px]',
|
|
134
128
|
}
|
|
135
|
-
return iconSize[props.orientation as Orientation] || 'min-w-[32px] max-w-[32px]'
|
|
129
|
+
return iconSize[props.orientation as Orientation] || '!min-w-[32px] max-w-[32px]'
|
|
136
130
|
})
|
|
137
131
|
|
|
138
132
|
const containerClasses = computed(() => {
|
|
@@ -149,22 +143,22 @@ const containerClasses = computed(() => {
|
|
|
149
143
|
|
|
150
144
|
const customContainerClass = computed(() => {
|
|
151
145
|
const variant = {
|
|
152
|
-
[EmptyPlaceholderContainerStyle.DASHED]: 'border-2 border-dashed border-border-default',
|
|
153
|
-
[EmptyPlaceholderContainerStyle.FILLED_NEUTRAL]: 'bg-background-neutral-subtlest',
|
|
154
|
-
[EmptyPlaceholderContainerStyle.FILLED_PRIMARY_BRAND]: 'bg-background-primary-brand-soft',
|
|
146
|
+
[EmptyPlaceholderContainerStyle.DASHED]: '!border-2 border-dashed border-border-default',
|
|
147
|
+
[EmptyPlaceholderContainerStyle.FILLED_NEUTRAL]: '!bg-background-neutral-subtlest',
|
|
148
|
+
[EmptyPlaceholderContainerStyle.FILLED_PRIMARY_BRAND]: '!bg-background-primary-brand-soft',
|
|
155
149
|
|
|
156
150
|
}
|
|
157
|
-
return variant[props.containerStyle as EmptyPlaceholderContainerStyle] || 'bg-background-neutral-subtlest'
|
|
151
|
+
return variant[props.containerStyle as EmptyPlaceholderContainerStyle] || '!bg-background-neutral-subtlest'
|
|
158
152
|
})
|
|
159
153
|
|
|
160
154
|
const isContainedIconClass = computed(() => {
|
|
161
155
|
const variant = {
|
|
162
|
-
[EmptyPlaceholderContainerStyle.DASHED]: 'text-icon-neutral-subtlest',
|
|
163
|
-
[EmptyPlaceholderContainerStyle.FILLED_NEUTRAL]: 'text-icon-neutral-on-subtlest-bg',
|
|
164
|
-
[EmptyPlaceholderContainerStyle.FILLED_PRIMARY_BRAND]: 'text-icon-neutral-on-primary-brand-soft-bg',
|
|
156
|
+
[EmptyPlaceholderContainerStyle.DASHED]: '!text-icon-neutral-subtlest',
|
|
157
|
+
[EmptyPlaceholderContainerStyle.FILLED_NEUTRAL]: '!text-icon-neutral-on-subtlest-bg',
|
|
158
|
+
[EmptyPlaceholderContainerStyle.FILLED_PRIMARY_BRAND]: '!text-icon-neutral-on-primary-brand-soft-bg',
|
|
165
159
|
|
|
166
160
|
}
|
|
167
|
-
return variant[props.containerStyle as EmptyPlaceholderContainerStyle] || 'text-icon-neutral-on-subtlest-bg'
|
|
161
|
+
return variant[props.containerStyle as EmptyPlaceholderContainerStyle] || '!text-icon-neutral-on-subtlest-bg'
|
|
168
162
|
})
|
|
169
163
|
|
|
170
164
|
</script>
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="flex gap-2.5">
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
]"
|
|
12
|
-
/>
|
|
13
|
-
<span
|
|
14
|
-
v-else-if="svgIcon"
|
|
15
|
-
class="w-[24px] h-[24px] min-w-[24px] min-h-[24px]"
|
|
16
|
-
>
|
|
17
|
-
<SVGImage
|
|
18
|
-
:src="svgIcon"
|
|
19
|
-
:color="resolvedSvgIconColor?.value"
|
|
20
|
-
/>
|
|
21
|
-
</span>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
3
|
+
<Icon
|
|
4
|
+
v-if="icon"
|
|
5
|
+
:name="icon"
|
|
6
|
+
:size="IconSize.LG"
|
|
7
|
+
:color="iconColor"
|
|
8
|
+
:iconClass="iconClass"
|
|
9
|
+
/>
|
|
10
|
+
|
|
24
11
|
<div class="w-full flex flex-col gap-1">
|
|
25
12
|
<div class="text-base font-semibold">
|
|
26
13
|
{{ title }}
|
|
@@ -36,42 +23,18 @@
|
|
|
36
23
|
</template>
|
|
37
24
|
<script setup lang="ts">
|
|
38
25
|
// Props
|
|
39
|
-
|
|
26
|
+
defineProps({
|
|
40
27
|
title: {
|
|
41
28
|
type: String as PropType<string>,
|
|
42
29
|
default: 'Title',
|
|
43
30
|
},
|
|
44
31
|
description: String as PropType<string>,
|
|
45
|
-
icon: String as PropType<
|
|
32
|
+
icon: String as PropType<string>,
|
|
46
33
|
iconColor: {
|
|
47
34
|
type: String as PropType<ColorAccent>,
|
|
48
35
|
default: ColorAccent.SECONDARY_BRAND,
|
|
49
36
|
validator: (value: ColorAccent) => Object.values(ColorAccent).includes(value),
|
|
50
37
|
},
|
|
51
|
-
|
|
52
|
-
useSVGIconColor: {
|
|
53
|
-
type: Boolean as PropType<boolean>,
|
|
54
|
-
default: false,
|
|
55
|
-
},
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
// Computed functions
|
|
59
|
-
const resolvedSvgIconColor = computed(() => {
|
|
60
|
-
return props.useSVGIconColor ? undefined : iconColorClass
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
// Class
|
|
64
|
-
const iconColorClass = computed(() => {
|
|
65
|
-
const variant = {
|
|
66
|
-
[ColorAccent.NEUTRAL]: "text-icon-neutral-subtle",
|
|
67
|
-
[ColorAccent.SUCCESS]: "text-icon-success",
|
|
68
|
-
[ColorAccent.WARNING]: "text-icon-warning",
|
|
69
|
-
[ColorAccent.DANGER]: "text-icon-danger",
|
|
70
|
-
[ColorAccent.INFO]: "text-icon-info",
|
|
71
|
-
[ColorAccent.PRIMARY_BRAND]: "text-icon-primary-brand-default",
|
|
72
|
-
[ColorAccent.SECONDARY_BRAND]: "text-icon-secondary-brand-default",
|
|
73
|
-
}
|
|
74
|
-
return variant[props.iconColor as ColorAccent] || 'text-icon-secondary-brand-default"'
|
|
38
|
+
iconClass: String as PropType<string>,
|
|
75
39
|
})
|
|
76
|
-
|
|
77
40
|
</script>
|
|
@@ -22,8 +22,6 @@
|
|
|
22
22
|
:loadingText
|
|
23
23
|
:styleType
|
|
24
24
|
:actionType
|
|
25
|
-
:svgIcon
|
|
26
|
-
:useSVGIconColor
|
|
27
25
|
:isRounded
|
|
28
26
|
:isFullWidth
|
|
29
27
|
:isMobileFullWidth
|
|
@@ -62,19 +60,14 @@ const props = defineProps({
|
|
|
62
60
|
validator: (value: ButtonSize) => Object.values(ButtonSize).includes(value),
|
|
63
61
|
},
|
|
64
62
|
icon: {
|
|
65
|
-
type: String as PropType<
|
|
66
|
-
default: "
|
|
63
|
+
type: String as PropType<string>,
|
|
64
|
+
default: "mdi:help"
|
|
67
65
|
},
|
|
68
66
|
iconPosition: {
|
|
69
67
|
type: String as PropType<IconPosition>,
|
|
70
68
|
default: IconPosition.NONE,
|
|
71
69
|
validator: (value: IconPosition) => Object.values(IconPosition).includes(value),
|
|
72
70
|
},
|
|
73
|
-
svgIcon: String as PropType<string>,
|
|
74
|
-
useSVGIconColor: {
|
|
75
|
-
type: Boolean as PropType<boolean>,
|
|
76
|
-
default: false,
|
|
77
|
-
},
|
|
78
71
|
disabled: {
|
|
79
72
|
type: Boolean as PropType<boolean>,
|
|
80
73
|
default: false,
|
|
@@ -54,12 +54,13 @@
|
|
|
54
54
|
]"
|
|
55
55
|
@click="toggleCheckbox"
|
|
56
56
|
>
|
|
57
|
-
<
|
|
57
|
+
<Icon
|
|
58
58
|
v-if="modelValue"
|
|
59
|
-
|
|
60
|
-
:
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
name="mdi:check-bold"
|
|
60
|
+
:iconClass="[
|
|
61
|
+
checkboxIconSizeClass,
|
|
62
|
+
disabled ? '!text-icon-neutral-disabled' : '!text-icon-neutral-on-filled-bg'
|
|
63
|
+
]"
|
|
63
64
|
/>
|
|
64
65
|
</div>
|
|
65
66
|
|
|
@@ -153,10 +154,10 @@ const controlFieldSizeClass = computed(() => {
|
|
|
153
154
|
|
|
154
155
|
const checkboxIconSizeClass = computed(() => {
|
|
155
156
|
const sizeVariant = {
|
|
156
|
-
[ControlFieldSize.MD]: '
|
|
157
|
-
[ControlFieldSize.LG]: '
|
|
157
|
+
[ControlFieldSize.MD]: '!w-[16px] !h-[16px] !min-w-[16px] !min-h-[16px]',
|
|
158
|
+
[ControlFieldSize.LG]: '!w-[20px] !h-[20px] !min-w-[20px] !min-h-[20px]',
|
|
158
159
|
}
|
|
159
|
-
return sizeVariant[props.size as ControlFieldSize] || '
|
|
160
|
+
return sizeVariant[props.size as ControlFieldSize] || '!w-[16px] !h-[16px] !min-w-[16px] !min-h-[16px]'
|
|
160
161
|
})
|
|
161
162
|
|
|
162
163
|
const labelSizeClass = computed(() => {
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
@error="handleError"
|
|
49
49
|
>
|
|
50
50
|
<template #placeholder-img>
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
<Icon
|
|
52
|
+
name="mdi:cloud-upload-outline"
|
|
53
|
+
:size="IconSize.XXL"
|
|
54
|
+
:color="ColorAccent.NEUTRAL"
|
|
55
55
|
/>
|
|
56
56
|
</template>
|
|
57
57
|
<template #title>
|
|
@@ -109,8 +109,8 @@ const props = defineProps({
|
|
|
109
109
|
},
|
|
110
110
|
helpText: String as PropType<string>,
|
|
111
111
|
icon: {
|
|
112
|
-
type: String as PropType<
|
|
113
|
-
default: '
|
|
112
|
+
type: String as PropType<string>,
|
|
113
|
+
default: 'mdi:cloud-upload-outline',
|
|
114
114
|
},
|
|
115
115
|
buttonText: String as PropType<string>,
|
|
116
116
|
upToText: {
|
|
@@ -42,16 +42,11 @@
|
|
|
42
42
|
]"
|
|
43
43
|
>
|
|
44
44
|
<!-- Icon -->
|
|
45
|
-
<
|
|
45
|
+
<Icon
|
|
46
46
|
v-if="icon"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
:icon="icon"
|
|
51
|
-
size="20"
|
|
52
|
-
preserveAspectRatio="xMidYMid meet"
|
|
53
|
-
/>
|
|
54
|
-
</span>
|
|
47
|
+
:name="icon"
|
|
48
|
+
iconClass="text-icon-neutral-subtler"
|
|
49
|
+
/>
|
|
55
50
|
|
|
56
51
|
<!-- Input -->
|
|
57
52
|
<input
|
|
@@ -98,13 +93,13 @@
|
|
|
98
93
|
'focus:outline-none',
|
|
99
94
|
'transition-colors',
|
|
100
95
|
'cursor-pointer',
|
|
96
|
+
'h-[20px]'
|
|
101
97
|
]"
|
|
102
98
|
@click="handleSuffixClick"
|
|
103
99
|
>
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
preserveAspectRatio="xMidYMid meet"
|
|
100
|
+
<Icon
|
|
101
|
+
v-if="suffixIcon"
|
|
102
|
+
:name="suffixIcon"
|
|
108
103
|
/>
|
|
109
104
|
</button>
|
|
110
105
|
|
|
@@ -118,27 +113,21 @@
|
|
|
118
113
|
'focus:outline-none',
|
|
119
114
|
'transition-colors',
|
|
120
115
|
'cursor-pointer',
|
|
116
|
+
'h-[20px]'
|
|
121
117
|
]"
|
|
122
118
|
@click="() => showPassword = !showPassword"
|
|
123
119
|
>
|
|
124
|
-
<
|
|
125
|
-
:
|
|
126
|
-
size="20"
|
|
127
|
-
preserveAspectRatio="xMidYMid meet"
|
|
120
|
+
<Icon
|
|
121
|
+
:name="showPassword ? 'mdi:eye-off-outline' : 'mdi:eye-outline'"
|
|
128
122
|
/>
|
|
129
123
|
</button>
|
|
130
124
|
|
|
131
125
|
<!-- Error Icon -->
|
|
132
|
-
<
|
|
126
|
+
<Icon
|
|
133
127
|
v-if="hasError && !suffixIcon"
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
icon="mdiAlertCircle"
|
|
138
|
-
size="20"
|
|
139
|
-
preserveAspectRatio="xMidYMid meet"
|
|
140
|
-
/>
|
|
141
|
-
</span>
|
|
128
|
+
name="mdi:alert-circle-outline"
|
|
129
|
+
iconClass="text-icon-error"
|
|
130
|
+
/>
|
|
142
131
|
</div>
|
|
143
132
|
|
|
144
133
|
<!-- Help Text -->
|
|
@@ -171,8 +160,8 @@ const props = defineProps({
|
|
|
171
160
|
default: 'Placeholder',
|
|
172
161
|
},
|
|
173
162
|
helpText: String as PropType<string>,
|
|
174
|
-
icon: String as PropType<
|
|
175
|
-
suffixIcon: String as PropType<
|
|
163
|
+
icon: String as PropType<string>,
|
|
164
|
+
suffixIcon: String as PropType<string>,
|
|
176
165
|
linkText: String as PropType<string>,
|
|
177
166
|
linkUrl: String as PropType<string>,
|
|
178
167
|
size: {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<ActionIconButton
|
|
20
20
|
v-if="index === items.length - 1"
|
|
21
21
|
:styleType="ButtonStyleType.NEUTRAL_OUTLINED"
|
|
22
|
-
icon="
|
|
22
|
+
icon="mdi:plus-circle-outline"
|
|
23
23
|
:size="ButtonSize.SM"
|
|
24
24
|
@click="addItem"
|
|
25
25
|
/>
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
<ActionIconButton
|
|
29
29
|
v-if="items.length > 1"
|
|
30
30
|
:styleType="ButtonStyleType.DELETE_SOFT"
|
|
31
|
-
icon="
|
|
31
|
+
icon="mdi:minus-circle-outline"
|
|
32
32
|
:size="ButtonSize.SM"
|
|
33
33
|
@click="removeItem(index)"
|
|
34
34
|
/>
|
|
@@ -38,13 +38,10 @@
|
|
|
38
38
|
]"
|
|
39
39
|
>
|
|
40
40
|
<!-- Icon -->
|
|
41
|
-
<
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
preserveAspectRatio="xMidYMid meet"
|
|
46
|
-
/>
|
|
47
|
-
</span>
|
|
41
|
+
<Icon
|
|
42
|
+
:name="icon"
|
|
43
|
+
iconClass="text-icon-neutral-subtler"
|
|
44
|
+
/>
|
|
48
45
|
|
|
49
46
|
<!-- Input -->
|
|
50
47
|
<input
|
|
@@ -73,7 +70,7 @@
|
|
|
73
70
|
v-if="filled"
|
|
74
71
|
:size="ButtonSize.SM"
|
|
75
72
|
:styleType="ButtonStyleType.NEUTRAL_TRANSPARENT_SUBTLE"
|
|
76
|
-
icon="
|
|
73
|
+
icon="mdi:close-circle"
|
|
77
74
|
@click="clearField"
|
|
78
75
|
/>
|
|
79
76
|
</div>
|
|
@@ -101,8 +98,8 @@ const props = defineProps({
|
|
|
101
98
|
},
|
|
102
99
|
helpText: String as PropType<string>,
|
|
103
100
|
icon: {
|
|
104
|
-
type: String as PropType<
|
|
105
|
-
default: '
|
|
101
|
+
type: String as PropType<string>,
|
|
102
|
+
default: 'mdi:magnify',
|
|
106
103
|
},
|
|
107
104
|
size: {
|
|
108
105
|
type: String as PropType<InputSize>,
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
'transition-all duration-200',
|
|
70
70
|
disabled
|
|
71
71
|
? 'opacity-50 cursor-not-allowed'
|
|
72
|
-
: 'hover:bg-background-neutral-
|
|
72
|
+
: 'hover:bg-background-neutral-subtler hover:border-border-primary-brand-default hover:text-text-primary-brand-default cursor-pointer',
|
|
73
73
|
'focus:outline-none focus:ring-2 focus:ring-primary-brand-200'
|
|
74
74
|
]"
|
|
75
75
|
@click="startEditing(0)"
|
|
@@ -79,11 +79,10 @@
|
|
|
79
79
|
<span>
|
|
80
80
|
{{ `${currentValuePrefix || ''}${(modelValue as [number, number])[0]}${currentValueSuffix || ''}` }}
|
|
81
81
|
</span>
|
|
82
|
-
<
|
|
83
|
-
|
|
84
|
-
size="
|
|
85
|
-
|
|
86
|
-
class="ml-1 opacity-60"
|
|
82
|
+
<Icon
|
|
83
|
+
name="mdi:pencil"
|
|
84
|
+
:size="IconSize.SM"
|
|
85
|
+
iconClass="ml-1 opacity-60"
|
|
87
86
|
/>
|
|
88
87
|
</button>
|
|
89
88
|
|
|
@@ -167,7 +166,7 @@
|
|
|
167
166
|
'transition-all duration-200',
|
|
168
167
|
disabled
|
|
169
168
|
? 'opacity-50 cursor-not-allowed'
|
|
170
|
-
: 'hover:bg-background-neutral-
|
|
169
|
+
: 'hover:bg-background-neutral-subtler hover:border-border-primary-brand-default hover:text-text-primary-brand-default cursor-pointer',
|
|
171
170
|
'focus:outline-none focus:ring-2 focus:ring-primary-brand-200'
|
|
172
171
|
]"
|
|
173
172
|
@click="startEditing(1)"
|
|
@@ -175,11 +174,10 @@
|
|
|
175
174
|
@keydown.space.prevent="startEditing(1)"
|
|
176
175
|
>
|
|
177
176
|
<span>{{ `${currentValuePrefix || ''}${(modelValue as [number, number])[1]}${currentValueSuffix || ''}` }}</span>
|
|
178
|
-
<
|
|
179
|
-
|
|
180
|
-
size="
|
|
181
|
-
|
|
182
|
-
class="ml-1 opacity-60"
|
|
177
|
+
<Icon
|
|
178
|
+
name="mdi:pencil"
|
|
179
|
+
:size="IconSize.SM"
|
|
180
|
+
iconClass="ml-1 opacity-60"
|
|
183
181
|
/>
|
|
184
182
|
</button>
|
|
185
183
|
</div>
|
|
@@ -231,7 +229,7 @@
|
|
|
231
229
|
'transition-all duration-200',
|
|
232
230
|
disabled
|
|
233
231
|
? 'opacity-50 cursor-not-allowed'
|
|
234
|
-
: 'hover:bg-background-neutral-
|
|
232
|
+
: 'hover:bg-background-neutral-subtler hover:border-border-primary-brand-default hover:text-text-primary-brand-default cursor-pointer hover:shadow-sm',
|
|
235
233
|
'focus:outline-none focus:ring-2 focus:ring-primary-brand-200'
|
|
236
234
|
]"
|
|
237
235
|
@click="startEditing(0)"
|
|
@@ -241,11 +239,10 @@
|
|
|
241
239
|
<span>
|
|
242
240
|
{{ `${currentValuePrefix || ''}${modelValue}${currentValueSuffix || ''}` }}
|
|
243
241
|
</span>
|
|
244
|
-
<
|
|
245
|
-
|
|
246
|
-
size="
|
|
247
|
-
|
|
248
|
-
:class="[
|
|
242
|
+
<Icon
|
|
243
|
+
name="mdi:pencil"
|
|
244
|
+
:size="IconSize.SM"
|
|
245
|
+
:iconClass="[
|
|
249
246
|
'ml-1',
|
|
250
247
|
'opacity-60',
|
|
251
248
|
'group-hover:opacity-100',
|
|
@@ -309,7 +306,7 @@
|
|
|
309
306
|
'left-0',
|
|
310
307
|
'w-full',
|
|
311
308
|
'h-[4px]',
|
|
312
|
-
'bg-background-neutral-
|
|
309
|
+
'bg-background-neutral-subtler',
|
|
313
310
|
'rounded-full',
|
|
314
311
|
'-translate-y-1/2',
|
|
315
312
|
]"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
<div
|
|
23
23
|
:class="[
|
|
24
24
|
'flex items-center gap-3',
|
|
25
|
-
label || icon
|
|
25
|
+
label || icon ? 'justify-between' : 'justify-end',
|
|
26
26
|
'text-sm w-full',
|
|
27
27
|
hasError ? 'text-text-error' : 'text-text-default',
|
|
28
28
|
checkboxWrapperClass && checkboxWrapperClass
|
|
@@ -30,27 +30,15 @@
|
|
|
30
30
|
>
|
|
31
31
|
<!-- Label + Icon block (only if present) -->
|
|
32
32
|
<div
|
|
33
|
-
v-if="label || icon
|
|
33
|
+
v-if="label || icon"
|
|
34
34
|
class="flex gap-2.5 w-full"
|
|
35
35
|
>
|
|
36
36
|
<!-- Icon -->
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
preserveAspectRatio="xMidYMid meet"
|
|
43
|
-
class="text-icon-default"
|
|
44
|
-
/>
|
|
45
|
-
<div
|
|
46
|
-
v-else
|
|
47
|
-
:class="[
|
|
48
|
-
customIconSizeClass,
|
|
49
|
-
'text-icon-default'
|
|
50
|
-
]"
|
|
51
|
-
v-html="customIcon"
|
|
52
|
-
/>
|
|
53
|
-
</template>
|
|
37
|
+
<Icon
|
|
38
|
+
v-if="icon"
|
|
39
|
+
:name="icon"
|
|
40
|
+
:iconClass="iconSizeClass"
|
|
41
|
+
/>
|
|
54
42
|
|
|
55
43
|
<!-- Label -->
|
|
56
44
|
<label
|
|
@@ -59,7 +47,6 @@
|
|
|
59
47
|
:class="[
|
|
60
48
|
disabled && 'text-text-neutral-disabled',
|
|
61
49
|
labelSizeClass,
|
|
62
|
-
customIcon && 'mt-1',
|
|
63
50
|
labelClass && labelClass
|
|
64
51
|
]"
|
|
65
52
|
v-html="label"
|
|
@@ -151,8 +138,7 @@ const props = defineProps({
|
|
|
151
138
|
default: ControlFieldSize.MD,
|
|
152
139
|
validator: (value: ControlFieldSize) => Object.values(ControlFieldSize).includes(value),
|
|
153
140
|
},
|
|
154
|
-
icon: String as PropType<
|
|
155
|
-
customIcon: String as PropType<any>,
|
|
141
|
+
icon: String as PropType<string>,
|
|
156
142
|
styleType: {
|
|
157
143
|
type: String as PropType<SwitchStyle>,
|
|
158
144
|
default: SwitchStyle.BRAND,
|
|
@@ -196,20 +182,12 @@ const labelSizeClass = computed(() => {
|
|
|
196
182
|
return sizeVariant[props.size as ControlFieldSize] || 'text-sm'
|
|
197
183
|
})
|
|
198
184
|
|
|
199
|
-
const
|
|
200
|
-
const sizeVariant = {
|
|
201
|
-
[ControlFieldSize.MD]: '20',
|
|
202
|
-
[ControlFieldSize.LG]: '24',
|
|
203
|
-
}
|
|
204
|
-
return sizeVariant[props.size as ControlFieldSize] || '20'
|
|
205
|
-
})
|
|
206
|
-
|
|
207
|
-
const customIconSizeClass = computed(() => {
|
|
185
|
+
const iconSizeClass = computed(() => {
|
|
208
186
|
const sizeVariant = {
|
|
209
|
-
[ControlFieldSize.MD]: 'w-[20px] h-[20px]',
|
|
210
|
-
[ControlFieldSize.LG]: 'w-[24px] h-[24px]',
|
|
187
|
+
[ControlFieldSize.MD]: 'w-[20px] h-[20px] min-w-[20px] min-h-[20px]',
|
|
188
|
+
[ControlFieldSize.LG]: 'w-[24px] h-[24px] min-w-[24px] min-h-[24px]',
|
|
211
189
|
}
|
|
212
|
-
return sizeVariant[props.size as ControlFieldSize] || 'w-[20px] h-[20px]'
|
|
190
|
+
return sizeVariant[props.size as ControlFieldSize] || 'w-[20px] h-[20px] min-w-[20px] min-h-[20px]'
|
|
213
191
|
})
|
|
214
192
|
|
|
215
193
|
const checkedBackgroundClass = computed(() => {
|
|
@@ -54,11 +54,13 @@
|
|
|
54
54
|
/>
|
|
55
55
|
|
|
56
56
|
<!-- Error Icon -->
|
|
57
|
-
<span
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
<span
|
|
58
|
+
v-if="hasError"
|
|
59
|
+
class="absolute top-4 right-4"
|
|
60
|
+
>
|
|
61
|
+
<Icon
|
|
62
|
+
name="mdi:alert-circle"
|
|
63
|
+
iconClass="text-icon-error"
|
|
62
64
|
/>
|
|
63
65
|
</span>
|
|
64
66
|
</div>
|
|
@@ -37,11 +37,10 @@
|
|
|
37
37
|
modelValue === value ? selectedIconBackgroundColorClass : 'bg-background-neutral-sublter'
|
|
38
38
|
]"
|
|
39
39
|
>
|
|
40
|
-
<
|
|
41
|
-
:
|
|
42
|
-
size="
|
|
43
|
-
|
|
44
|
-
:class="modelValue === value ? selectedIconColorClass : 'text-icon-neutral-subtle'"
|
|
40
|
+
<Icon
|
|
41
|
+
:name="icon"
|
|
42
|
+
:size="IconSize.LG"
|
|
43
|
+
:iconClass="modelValue === value ? selectedIconColorClass : 'text-icon-neutral-subtle'"
|
|
45
44
|
/>
|
|
46
45
|
</div>
|
|
47
46
|
<!-- Label with help text -->
|
|
@@ -126,8 +125,8 @@ const props = defineProps({
|
|
|
126
125
|
required: true,
|
|
127
126
|
},
|
|
128
127
|
icon: {
|
|
129
|
-
type: String as PropType<
|
|
130
|
-
default: '
|
|
128
|
+
type: String as PropType<string>,
|
|
129
|
+
default: 'mdi:help',
|
|
131
130
|
},
|
|
132
131
|
type: {
|
|
133
132
|
type: String as PropType<
|