@antify/ui-module 1.7.1 → 1.7.3
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/dist/module.d.mts +1 -14
- package/dist/module.d.ts +1 -14
- package/dist/module.json +1 -1
- package/dist/module.mjs +1 -19
- package/dist/runtime/components/AntTooltip.vue +72 -66
- package/dist/runtime/components/__stories/AntTooltip.stories.d.ts +5 -0
- package/dist/runtime/components/__stories/AntTooltip.stories.mjs +24 -0
- package/dist/runtime/components/buttons/AntActionButton.vue +22 -19
- package/dist/runtime/components/buttons/AntSaveAndNewButton.vue +12 -11
- package/dist/runtime/components/buttons/AntSaveButton.vue +11 -10
- package/dist/runtime/components/buttons/__stories/AntActionButton.stories.mjs +9 -5
- package/dist/runtime/components/crud/AntCrudDetailActions.vue +1 -1
- package/dist/runtime/components/crud/AntCrudDetailNav.vue +9 -2
- package/dist/runtime/components/dialogs/AntDialog.vue +1 -1
- package/dist/runtime/components/forms/AntField.vue +17 -3
- package/dist/runtime/components/inputs/AntCheckbox.vue +18 -19
- package/dist/runtime/components/inputs/AntCheckboxGroup.vue +4 -4
- package/dist/runtime/components/inputs/AntDateInput.vue +8 -1
- package/dist/runtime/components/inputs/AntNumberInput.vue +5 -0
- package/dist/runtime/components/inputs/AntRadio.vue +45 -31
- package/dist/runtime/components/inputs/AntRadioGroup.vue +19 -8
- package/dist/runtime/components/inputs/AntSearch.vue +3 -0
- package/dist/runtime/components/inputs/AntSelect.vue +13 -5
- package/dist/runtime/components/inputs/AntSwitch.vue +31 -19
- package/dist/runtime/components/inputs/AntTagInput.vue +18 -10
- package/dist/runtime/components/inputs/AntTextInput.vue +3 -0
- package/dist/runtime/components/inputs/AntTextarea.vue +11 -5
- package/dist/runtime/components/inputs/AntUnitInput.vue +3 -0
- package/dist/runtime/components/inputs/Elements/AntBaseInput.vue +22 -7
- package/dist/runtime/components/inputs/Elements/AntInputLabel.vue +12 -8
- package/dist/runtime/components/inputs/Elements/__stories/AntInputLabel.stories.mjs +1 -1
- package/dist/runtime/components/inputs/__stories/AntCheckbox.stories.mjs +49 -8
- package/dist/runtime/components/inputs/__stories/AntCheckboxGroup.stories.mjs +2 -3
- package/dist/runtime/components/inputs/__stories/AntNumberInput.stories.d.ts +1 -0
- package/dist/runtime/components/inputs/__stories/AntNumberInput.stories.mjs +141 -1
- package/dist/runtime/components/inputs/__stories/AntRadioGroup.stories.mjs +14 -6
- package/dist/runtime/components/inputs/__stories/AntSwitch.stories.mjs +55 -7
- package/dist/runtime/components/inputs/__types/AntCheckbox.types.d.ts +0 -4
- package/dist/runtime/components/inputs/__types/AntCheckbox.types.mjs +0 -5
- package/dist/runtime/components/inputs/__types/AntRadio.types.d.ts +0 -4
- package/dist/runtime/components/inputs/__types/AntRadio.types.mjs +0 -5
- package/dist/runtime/components/inputs/__types/index.d.ts +0 -1
- package/dist/runtime/components/inputs/__types/index.mjs +0 -1
- package/dist/runtime/components/table/AntTable.vue +3 -3
- package/dist/runtime/components/table/AntTableSortButton.vue +1 -1
- package/dist/runtime/components/table/AntTd.vue +1 -1
- package/dist/runtime/components/table/AntTh.vue +9 -5
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
- package/src/runtime/components/AntTooltip.vue +72 -66
- package/src/runtime/components/buttons/AntActionButton.vue +22 -19
- package/src/runtime/components/buttons/AntSaveAndNewButton.vue +12 -11
- package/src/runtime/components/buttons/AntSaveButton.vue +11 -10
- package/src/runtime/components/crud/AntCrudDetailActions.vue +1 -1
- package/src/runtime/components/crud/AntCrudDetailNav.vue +9 -2
- package/src/runtime/components/dialogs/AntDialog.vue +1 -1
- package/src/runtime/components/forms/AntField.vue +17 -3
- package/src/runtime/components/inputs/AntCheckbox.vue +18 -19
- package/src/runtime/components/inputs/AntCheckboxGroup.vue +4 -4
- package/src/runtime/components/inputs/AntDateInput.vue +8 -1
- package/src/runtime/components/inputs/AntNumberInput.vue +5 -0
- package/src/runtime/components/inputs/AntRadio.vue +45 -31
- package/src/runtime/components/inputs/AntRadioGroup.vue +19 -8
- package/src/runtime/components/inputs/AntSearch.vue +3 -0
- package/src/runtime/components/inputs/AntSelect.vue +13 -5
- package/src/runtime/components/inputs/AntSwitch.vue +31 -19
- package/src/runtime/components/inputs/AntTagInput.vue +18 -10
- package/src/runtime/components/inputs/AntTextInput.vue +3 -0
- package/src/runtime/components/inputs/AntTextarea.vue +11 -5
- package/src/runtime/components/inputs/AntUnitInput.vue +3 -0
- package/src/runtime/components/inputs/Elements/AntBaseInput.vue +22 -7
- package/src/runtime/components/inputs/Elements/AntInputLabel.vue +12 -8
- package/src/runtime/components/table/AntTable.vue +3 -3
- package/src/runtime/components/table/AntTableSortButton.vue +1 -1
- package/src/runtime/components/table/AntTd.vue +1 -1
- package/src/runtime/components/table/AntTh.vue +9 -5
- package/dist/runtime/components/inputs/__types/AntSwitch.types.d.ts +0 -4
- package/dist/runtime/components/inputs/__types/AntSwitch.types.mjs +0 -5
|
@@ -8,7 +8,6 @@ import {handleEnumValidation} from '../../handler';
|
|
|
8
8
|
import {faCheck} from '@fortawesome/free-solid-svg-icons';
|
|
9
9
|
import AntIcon from '../AntIcon.vue';
|
|
10
10
|
import {IconSize} from '../__types';
|
|
11
|
-
import {AntCheckboxSize} from './__types/AntCheckbox.types';
|
|
12
11
|
|
|
13
12
|
const emit = defineEmits(['update:modelValue', 'update:skeleton', 'validate', 'blur']);
|
|
14
13
|
const props =
|
|
@@ -18,14 +17,14 @@ const props =
|
|
|
18
17
|
label?: string;
|
|
19
18
|
description?: string;
|
|
20
19
|
state?: InputState;
|
|
21
|
-
size?:
|
|
20
|
+
size?: Size,
|
|
22
21
|
skeleton?: boolean;
|
|
23
22
|
disabled?: boolean;
|
|
24
23
|
readonly?: boolean;
|
|
25
24
|
messages?: string[];
|
|
26
25
|
}>(), {
|
|
27
26
|
state: InputState.base,
|
|
28
|
-
size:
|
|
27
|
+
size: Size.md,
|
|
29
28
|
skeleton: false,
|
|
30
29
|
disabled: false,
|
|
31
30
|
readonly: false,
|
|
@@ -63,12 +62,12 @@ const inputClasses = computed(() => {
|
|
|
63
62
|
'focus:ring-offset-0': true,
|
|
64
63
|
'invisible': props.skeleton,
|
|
65
64
|
'cursor-pointer': !hasInputState.value,
|
|
66
|
-
'focus:ring-2': props.size ===
|
|
67
|
-
'focus:ring-4': props.size ===
|
|
68
|
-
'h-5 w-5': props.size ===
|
|
69
|
-
'h-4 w-4': props.size ===
|
|
65
|
+
'focus:ring-2': !hasInputState.value && (props.size === Size.sm || props.size === Size.xs || props.size === Size.xs2),
|
|
66
|
+
'focus:ring-4': !hasInputState.value && (props.size === Size.lg || props.size === Size.md),
|
|
67
|
+
'h-5 w-5': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
68
|
+
'h-4 w-4': props.size === Size.xs || props.size === Size.xs2,
|
|
70
69
|
'cursor-not-allowed opacity-50': props.disabled,
|
|
71
|
-
[focusColorVariant[props.state]]: hasInputState.value,
|
|
70
|
+
[focusColorVariant[props.state]]: !hasInputState.value,
|
|
72
71
|
[activeColorVariant[props.state]]: delayedValue.value,
|
|
73
72
|
[inactiveColorVariant[props.state]]: !_modelValue.value,
|
|
74
73
|
};
|
|
@@ -77,15 +76,15 @@ const contentClasses = computed(() => ({
|
|
|
77
76
|
'text-for-white-bg-font': true,
|
|
78
77
|
'cursor-pointer': !hasInputState.value,
|
|
79
78
|
'cursor-not-allowed opacity-50': props.disabled,
|
|
80
|
-
'text-sm': props.size ===
|
|
81
|
-
'text-xs': props.size ===
|
|
79
|
+
'text-sm': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
80
|
+
'text-xs': props.size === Size.xs || props.size === Size.xs2,
|
|
82
81
|
}));
|
|
83
|
-
const
|
|
84
|
-
if (props.size ===
|
|
85
|
-
return
|
|
82
|
+
const itemSize = computed(() => {
|
|
83
|
+
if (props.size === Size.xs ||props.size === Size.xs2) {
|
|
84
|
+
return IconSize.xs;
|
|
85
|
+
} else {
|
|
86
|
+
return IconSize.sm;
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
-
return Size.xs;
|
|
89
88
|
});
|
|
90
89
|
|
|
91
90
|
/**
|
|
@@ -116,7 +115,7 @@ function onBlur(e: FocusEvent) {
|
|
|
116
115
|
}
|
|
117
116
|
|
|
118
117
|
onMounted(() => {
|
|
119
|
-
handleEnumValidation(props.size,
|
|
118
|
+
handleEnumValidation(props.size, Size, 'size');
|
|
120
119
|
handleEnumValidation(props.state, InputState, 'state');
|
|
121
120
|
|
|
122
121
|
if (!props.skeleton && props.modelValue !== null) {
|
|
@@ -131,7 +130,7 @@ onMounted(() => {
|
|
|
131
130
|
:description="description"
|
|
132
131
|
:skeleton="skeleton"
|
|
133
132
|
:state="state"
|
|
134
|
-
:size="
|
|
133
|
+
:size="size"
|
|
135
134
|
:expanded="false"
|
|
136
135
|
:messages="messages"
|
|
137
136
|
>
|
|
@@ -150,7 +149,7 @@ onMounted(() => {
|
|
|
150
149
|
v-if="_modelValue"
|
|
151
150
|
:icon="faCheck"
|
|
152
151
|
class="absolute !text-white pointer-events-none"
|
|
153
|
-
:size="
|
|
152
|
+
:size="itemSize"
|
|
154
153
|
/>
|
|
155
154
|
|
|
156
155
|
<AntSkeleton
|
|
@@ -162,7 +161,7 @@ onMounted(() => {
|
|
|
162
161
|
|
|
163
162
|
<div
|
|
164
163
|
class="relative flex items-center"
|
|
165
|
-
:class="props.size ===
|
|
164
|
+
:class="props.size === Size.md ? 'h-5' : 'h-4'"
|
|
166
165
|
>
|
|
167
166
|
<span :class="contentClasses">
|
|
168
167
|
<slot />
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {type AntCheckboxType
|
|
2
|
+
import {type AntCheckboxType} from './__types/AntCheckbox.types';
|
|
3
3
|
import {AntField} from './Elements';
|
|
4
4
|
import {useVModel} from '@vueuse/core';
|
|
5
5
|
import AntCheckbox from './AntCheckbox.vue';
|
|
@@ -16,7 +16,7 @@ const props = withDefaults(
|
|
|
16
16
|
description?: string;
|
|
17
17
|
direction?: Direction;
|
|
18
18
|
state?: InputState;
|
|
19
|
-
size?:
|
|
19
|
+
size?: Size,
|
|
20
20
|
skeleton?: boolean;
|
|
21
21
|
readonly?: boolean;
|
|
22
22
|
disabled?: boolean;
|
|
@@ -25,7 +25,7 @@ const props = withDefaults(
|
|
|
25
25
|
{
|
|
26
26
|
direction: Direction.column,
|
|
27
27
|
state: InputState.base,
|
|
28
|
-
size:
|
|
28
|
+
size: Size.md,
|
|
29
29
|
skeleton: false,
|
|
30
30
|
readonly: false,
|
|
31
31
|
disabled: false,
|
|
@@ -90,7 +90,7 @@ onMounted(() => {
|
|
|
90
90
|
:description="description"
|
|
91
91
|
:skeleton="skeleton"
|
|
92
92
|
:state="state"
|
|
93
|
-
:size="size
|
|
93
|
+
:size="size"
|
|
94
94
|
:messages="messages"
|
|
95
95
|
label-for="noop"
|
|
96
96
|
>
|
|
@@ -22,12 +22,14 @@ const props = withDefaults(defineProps<{
|
|
|
22
22
|
type?: AntDateInputTypes;
|
|
23
23
|
state?: InputState;
|
|
24
24
|
disabled?: boolean;
|
|
25
|
+
readonly?: boolean;
|
|
25
26
|
skeleton?: boolean;
|
|
26
27
|
messages?: string[];
|
|
27
28
|
}>(), {
|
|
28
29
|
state: InputState.base,
|
|
29
30
|
type: AntDateInputTypes.date,
|
|
30
31
|
disabled: false,
|
|
32
|
+
readonly: false,
|
|
31
33
|
skeleton: false,
|
|
32
34
|
size: Size.md,
|
|
33
35
|
messages: () => []
|
|
@@ -58,7 +60,11 @@ onMounted(() => {
|
|
|
58
60
|
});
|
|
59
61
|
|
|
60
62
|
function onClickCalendar() {
|
|
61
|
-
|
|
63
|
+
if (!props.disabled && !props.readonly) {
|
|
64
|
+
inputRef.value?.showPicker();
|
|
65
|
+
} else {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
62
68
|
}
|
|
63
69
|
</script>
|
|
64
70
|
|
|
@@ -79,6 +85,7 @@ function onClickCalendar() {
|
|
|
79
85
|
:size="size"
|
|
80
86
|
:skeleton="skeleton"
|
|
81
87
|
:disabled="disabled"
|
|
88
|
+
:readonly="readonly"
|
|
82
89
|
:show-icon="false"
|
|
83
90
|
v-bind="$attrs"
|
|
84
91
|
@validate="val => $emit('validate', val)"
|
|
@@ -21,6 +21,7 @@ const props = withDefaults(defineProps<{
|
|
|
21
21
|
size?: Size;
|
|
22
22
|
state?: InputState;
|
|
23
23
|
disabled?: boolean;
|
|
24
|
+
readonly?: boolean;
|
|
24
25
|
skeleton?: boolean;
|
|
25
26
|
steps?: number;
|
|
26
27
|
min?: number;
|
|
@@ -31,6 +32,7 @@ const props = withDefaults(defineProps<{
|
|
|
31
32
|
}>(), {
|
|
32
33
|
state: InputState.base,
|
|
33
34
|
disabled: false,
|
|
35
|
+
readonly: false,
|
|
34
36
|
skeleton: false,
|
|
35
37
|
size: Size.md,
|
|
36
38
|
steps: 1,
|
|
@@ -115,6 +117,7 @@ function onButtonBlur() {
|
|
|
115
117
|
:size="size"
|
|
116
118
|
:skeleton="skeleton"
|
|
117
119
|
:disabled="isPrevButtonDisabled"
|
|
120
|
+
:readonly="readonly"
|
|
118
121
|
@click="subtract"
|
|
119
122
|
@blur="onButtonBlur"
|
|
120
123
|
/>
|
|
@@ -130,6 +133,7 @@ function onButtonBlur() {
|
|
|
130
133
|
:min="min"
|
|
131
134
|
:max="max"
|
|
132
135
|
:disabled="disabled"
|
|
136
|
+
:readonly="readonly"
|
|
133
137
|
:placeholder="placeholder || label"
|
|
134
138
|
:show-icon="false"
|
|
135
139
|
v-bind="$attrs"
|
|
@@ -144,6 +148,7 @@ function onButtonBlur() {
|
|
|
144
148
|
:size="size"
|
|
145
149
|
:skeleton="skeleton"
|
|
146
150
|
:disabled="isNextButtonDisabled"
|
|
151
|
+
:readonly="readonly"
|
|
147
152
|
@click="add"
|
|
148
153
|
@blur="onButtonBlur"
|
|
149
154
|
/>
|
|
@@ -3,7 +3,7 @@ import {AntField} from './Elements';
|
|
|
3
3
|
import {InputState, Size} from '../../enums';
|
|
4
4
|
import AntSkeleton from '../AntSkeleton.vue';
|
|
5
5
|
import {computed, onMounted, watch} from 'vue';
|
|
6
|
-
import {
|
|
6
|
+
import {type AntRadioTypes} from './__types/AntRadio.types';
|
|
7
7
|
import {handleEnumValidation} from '../../handler';
|
|
8
8
|
|
|
9
9
|
defineOptions({inheritAttrs: false});
|
|
@@ -16,13 +16,13 @@ const props = withDefaults(
|
|
|
16
16
|
description?: string;
|
|
17
17
|
skeleton?: boolean;
|
|
18
18
|
state?: InputState;
|
|
19
|
-
size?:
|
|
19
|
+
size?: Size;
|
|
20
20
|
readonly?: boolean;
|
|
21
21
|
disabled?: boolean;
|
|
22
22
|
messages?: string[];
|
|
23
23
|
}>(), {
|
|
24
24
|
state: InputState.base,
|
|
25
|
-
size:
|
|
25
|
+
size: Size.md,
|
|
26
26
|
readonly: false,
|
|
27
27
|
disabled: false,
|
|
28
28
|
messages: () => []
|
|
@@ -45,16 +45,16 @@ const inputClasses = computed(() => {
|
|
|
45
45
|
'flex items-center justify-center rounded-full appearance-none': true,
|
|
46
46
|
'cursor-pointer': !hasInputState.value,
|
|
47
47
|
'rounded-full transition-colors ease-in-out duration-200 disabled:opacity-50': true,
|
|
48
|
-
'focus:ring-2': props.size ===
|
|
49
|
-
'focus:ring-4': props.size ===
|
|
48
|
+
'focus:ring-2': !hasInputState.value && (props.size === Size.sm || props.size === Size.xs || props.size === Size.xs2),
|
|
49
|
+
'focus:ring-4': !hasInputState.value && (props.size === Size.lg || props.size === Size.md),
|
|
50
50
|
'outline-neutral-300': props.state === InputState.base,
|
|
51
51
|
'outline-primary-500': props.state === InputState.base && isActive.value,
|
|
52
52
|
'outline-info-500': props.state === InputState.info,
|
|
53
53
|
'outline-success-500': props.state === InputState.success,
|
|
54
54
|
'outline-warning-500': props.state === InputState.warning,
|
|
55
55
|
'outline-danger-500': props.state === InputState.danger,
|
|
56
|
-
'h-4 w-4 small': props.size ===
|
|
57
|
-
'h-5 w-5': props.size ===
|
|
56
|
+
'h-4 w-4 small': props.size === Size.xs || props.size === Size.xs2,
|
|
57
|
+
'h-5 w-5': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
const focusColorVariant = {
|
|
@@ -73,30 +73,41 @@ const valueClass = computed(() => ({
|
|
|
73
73
|
'relative w-fit full-height text-for-white-bg-font': true,
|
|
74
74
|
'cursor-pointer': !hasInputState.value,
|
|
75
75
|
'cursor-not-allowed opacity-50': props.disabled,
|
|
76
|
-
'text-sm': props.size ===
|
|
77
|
-
'text-xs': props.size ===
|
|
76
|
+
'text-sm': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
77
|
+
'text-xs': props.size === Size.xs || props.size === Size.xs2,
|
|
78
78
|
}));
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
const gapSize = computed(() => {
|
|
80
|
+
switch (props.size) {
|
|
81
|
+
case Size.lg:
|
|
82
|
+
return 'gap-2.5';
|
|
83
|
+
case Size.md:
|
|
84
|
+
return 'gap-2';
|
|
85
|
+
case Size.sm:
|
|
86
|
+
return 'gap-1.5';
|
|
87
|
+
case Size.xs:
|
|
88
|
+
return 'gap-1.5';
|
|
89
|
+
default:
|
|
90
|
+
return 'gap-1';
|
|
84
91
|
}
|
|
85
92
|
});
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return 'bg-success-500';
|
|
92
|
-
case InputState.warning:
|
|
93
|
-
return 'bg-warning-500';
|
|
94
|
-
case InputState.danger:
|
|
95
|
-
return 'bg-danger-500';
|
|
96
|
-
default:
|
|
97
|
-
return 'bg-primary-500';
|
|
93
|
+
const valueSize = computed(() => {
|
|
94
|
+
if (props.size === Size.xs || props.size === Size.xs2) {
|
|
95
|
+
return 'h-4';
|
|
96
|
+
} else {
|
|
97
|
+
return 'h-5';
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
|
+
const innerRadioClass = computed(() => (
|
|
101
|
+
{
|
|
102
|
+
'bg-primary-500': props.state === InputState.base,
|
|
103
|
+
'bg-info-500': props.state === InputState.info,
|
|
104
|
+
'bg-success-500': props.state === InputState.success,
|
|
105
|
+
'bg-warning-500': props.state === InputState.warning,
|
|
106
|
+
'bg-danger-500': props.state === InputState.danger,
|
|
107
|
+
'h-3 w-3': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
108
|
+
'h-2 w-2': props.size === Size.xs || props.size === Size.xs2,
|
|
109
|
+
}
|
|
110
|
+
));
|
|
100
111
|
|
|
101
112
|
/**
|
|
102
113
|
* Validate default value if given after delayed data fetching.
|
|
@@ -136,18 +147,21 @@ onMounted(() => {
|
|
|
136
147
|
:state="state"
|
|
137
148
|
class="cursor-pointer"
|
|
138
149
|
:skeleton="skeleton"
|
|
139
|
-
:size="
|
|
150
|
+
:size="size"
|
|
140
151
|
:expanded="false"
|
|
141
152
|
:messages="messages"
|
|
142
153
|
>
|
|
143
|
-
<div
|
|
154
|
+
<div
|
|
155
|
+
class="flex items-center"
|
|
156
|
+
:class="gapSize"
|
|
157
|
+
>
|
|
144
158
|
<div class="relative full-height flex items-center">
|
|
145
159
|
<div class="absolute flex items-center justify-center w-full h-full">
|
|
146
160
|
<Transition name="fade-radio">
|
|
147
161
|
<div
|
|
148
162
|
v-if="isActive"
|
|
149
|
-
class="
|
|
150
|
-
:class="
|
|
163
|
+
class="rounded-full transition-all"
|
|
164
|
+
:class="innerRadioClass"
|
|
151
165
|
/>
|
|
152
166
|
</Transition>
|
|
153
167
|
</div>
|
|
@@ -171,7 +185,7 @@ onMounted(() => {
|
|
|
171
185
|
|
|
172
186
|
<div
|
|
173
187
|
class="relative flex items-center"
|
|
174
|
-
:class="
|
|
188
|
+
:class="valueSize"
|
|
175
189
|
>
|
|
176
190
|
<span :class="valueClass">
|
|
177
191
|
{{ value.label }}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import AntRadio from './AntRadio.vue';
|
|
3
3
|
import {useVModel} from '@vueuse/core';
|
|
4
4
|
import {AntField} from './Elements';
|
|
5
|
-
import {type AntRadioTypes
|
|
5
|
+
import {type AntRadioTypes} from './__types/AntRadio.types';
|
|
6
6
|
import {InputState, Size} from '../../enums';
|
|
7
7
|
import {computed, onMounted, ref, watch} from 'vue';
|
|
8
8
|
import {Direction} from '../../enums/Direction.enum';
|
|
@@ -19,7 +19,7 @@ const props = withDefaults(
|
|
|
19
19
|
description?: string;
|
|
20
20
|
direction?: Direction;
|
|
21
21
|
state?: InputState;
|
|
22
|
-
size?:
|
|
22
|
+
size?: Size;
|
|
23
23
|
skeleton?: boolean;
|
|
24
24
|
disabled?: boolean;
|
|
25
25
|
readonly?: boolean;
|
|
@@ -27,7 +27,7 @@ const props = withDefaults(
|
|
|
27
27
|
}>(), {
|
|
28
28
|
direction: Direction.column,
|
|
29
29
|
state: InputState.base,
|
|
30
|
-
size:
|
|
30
|
+
size: Size.md,
|
|
31
31
|
skeleton: false,
|
|
32
32
|
disabled: false,
|
|
33
33
|
readonly: false,
|
|
@@ -35,17 +35,28 @@ const props = withDefaults(
|
|
|
35
35
|
});
|
|
36
36
|
const _modelValue = useVModel(props, 'modelValue', emit);
|
|
37
37
|
const containerClasses = computed(() => ({
|
|
38
|
-
'flex
|
|
38
|
+
'flex justify-start': true,
|
|
39
39
|
'flex-row': props.direction === Direction.row,
|
|
40
40
|
'flex-col': props.direction === Direction.column,
|
|
41
|
+
'gap-2.5': props.size === Size.lg,
|
|
42
|
+
'gap-2': props.size === Size.md,
|
|
43
|
+
'gap-1.5': props.size === Size.sm || props.size === Size.xs,
|
|
44
|
+
'gap-1': props.size === Size.xs2,
|
|
41
45
|
}));
|
|
42
46
|
const containerRef = ref<null | HTMLElement>(null);
|
|
43
47
|
const fieldSize = computed(() => {
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
switch (props.size) {
|
|
49
|
+
case Size.lg:
|
|
50
|
+
return Size.lg;
|
|
51
|
+
case Size.md:
|
|
52
|
+
return Size.md;
|
|
53
|
+
case Size.sm:
|
|
54
|
+
return Size.sm;
|
|
55
|
+
case Size.xs:
|
|
56
|
+
return Size.xs;
|
|
57
|
+
default:
|
|
58
|
+
return Size.xs2;
|
|
46
59
|
}
|
|
47
|
-
|
|
48
|
-
return Size.xs;
|
|
49
60
|
});
|
|
50
61
|
|
|
51
62
|
watch(_modelValue, (val) => {
|
|
@@ -15,12 +15,14 @@ const props = withDefaults(defineProps<{
|
|
|
15
15
|
description?: string;
|
|
16
16
|
size?: Size;
|
|
17
17
|
disabled?: boolean;
|
|
18
|
+
readonly?: boolean;
|
|
18
19
|
skeleton?: boolean;
|
|
19
20
|
inputTimeout?: number;
|
|
20
21
|
query?: string;
|
|
21
22
|
}>(), {
|
|
22
23
|
disabled: false,
|
|
23
24
|
skeleton: false,
|
|
25
|
+
readonly: false,
|
|
24
26
|
size: Size.md,
|
|
25
27
|
inputTimeout: 300,
|
|
26
28
|
placeholder: 'Search'
|
|
@@ -63,6 +65,7 @@ onMounted(() => handleEnumValidation(props.size, Size, 'size'));
|
|
|
63
65
|
:size="size"
|
|
64
66
|
:skeleton="skeleton"
|
|
65
67
|
:disabled="disabled"
|
|
68
|
+
:readonly="readonly"
|
|
66
69
|
:placeholder="placeholder"
|
|
67
70
|
:icon-left="faSearch"
|
|
68
71
|
nullable
|
|
@@ -39,6 +39,7 @@ const props = withDefaults(
|
|
|
39
39
|
size?: Size;
|
|
40
40
|
state?: InputState;
|
|
41
41
|
disabled?: boolean;
|
|
42
|
+
readonly?: boolean;
|
|
42
43
|
skeleton?: boolean;
|
|
43
44
|
nullable?: boolean;
|
|
44
45
|
grouped?: Grouped;
|
|
@@ -51,6 +52,7 @@ const props = withDefaults(
|
|
|
51
52
|
grouped: Grouped.none,
|
|
52
53
|
size: Size.md,
|
|
53
54
|
disabled: false,
|
|
55
|
+
readonly: false,
|
|
54
56
|
skeleton: false,
|
|
55
57
|
nullable: false,
|
|
56
58
|
expanded: true,
|
|
@@ -65,6 +67,7 @@ const _modelValue = computed({
|
|
|
65
67
|
emit('update:modelValue', val);
|
|
66
68
|
},
|
|
67
69
|
});
|
|
70
|
+
const hasInputState = computed(() => props.skeleton || props.readonly || props.disabled);
|
|
68
71
|
const valueLabel = computed(() => props.options.find(option => option.value === _modelValue.value)?.label || null);
|
|
69
72
|
const inputClasses = computed(() => {
|
|
70
73
|
const variants: Record<InputState, string> = {
|
|
@@ -84,8 +87,13 @@ const inputClasses = computed(() => {
|
|
|
84
87
|
// Disabled
|
|
85
88
|
'disabled:opacity-50 disabled:cursor-not-allowed': true,
|
|
86
89
|
// Size
|
|
87
|
-
'
|
|
88
|
-
'
|
|
90
|
+
'p-1 text-xs': props.size === Size.xs2,
|
|
91
|
+
'p-1.5 text-xs': props.size === Size.xs,
|
|
92
|
+
'p-1.5 text-sm': props.size === Size.sm,
|
|
93
|
+
'p-2 text-sm': props.size === Size.md,
|
|
94
|
+
'p-2.5 text-sm': props.size === Size.lg,
|
|
95
|
+
'focus:ring-2': !hasInputState.value && (props.size === Size.sm || props.size === Size.xs || props.size === Size.xs2),
|
|
96
|
+
'focus:ring-4': !hasInputState.value && (props.size === Size.lg || props.size === Size.md),
|
|
89
97
|
// Grouped
|
|
90
98
|
'rounded-tl-md rounded-bl-md rounded-tr-none rounded-br-none': props.grouped === Grouped.left,
|
|
91
99
|
'rounded-tl-none rounded-bl-none rounded-tr-md rounded-br-md': props.grouped === Grouped.right,
|
|
@@ -184,7 +192,7 @@ function onClickOutside() {
|
|
|
184
192
|
function onClickSelectInput(e: MouseEvent) {
|
|
185
193
|
e.preventDefault();
|
|
186
194
|
|
|
187
|
-
if (props.disabled) {
|
|
195
|
+
if (props.disabled || props.readonly) {
|
|
188
196
|
return;
|
|
189
197
|
}
|
|
190
198
|
|
|
@@ -221,7 +229,7 @@ function onClickRemoveButton() {
|
|
|
221
229
|
<div
|
|
222
230
|
v-on-click-outside="onClickOutside"
|
|
223
231
|
class="relative w-full"
|
|
224
|
-
:class="{'cursor-pointer': !skeleton}"
|
|
232
|
+
:class="{'cursor-pointer': !skeleton && !readonly}"
|
|
225
233
|
>
|
|
226
234
|
<AntSkeleton
|
|
227
235
|
v-if="skeleton"
|
|
@@ -240,7 +248,7 @@ function onClickRemoveButton() {
|
|
|
240
248
|
<div
|
|
241
249
|
ref="inputRef"
|
|
242
250
|
:class="inputClasses"
|
|
243
|
-
:tabindex="disabled ?
|
|
251
|
+
:tabindex="disabled || readonly ? -1 : 0"
|
|
244
252
|
v-bind="$attrs"
|
|
245
253
|
@mousedown="onClickSelectInput"
|
|
246
254
|
@click="inputRef?.focus()"
|
|
@@ -3,7 +3,6 @@ import AntField from '../forms/AntField.vue';
|
|
|
3
3
|
import {computed, onMounted, watch} from 'vue';
|
|
4
4
|
import AntSkeleton from '../AntSkeleton.vue';
|
|
5
5
|
import {InputState, Size} from '../../enums';
|
|
6
|
-
import {AntSwitchSize} from './__types/AntSwitch.types';
|
|
7
6
|
import {hasSlotContent} from '../../utils';
|
|
8
7
|
|
|
9
8
|
const emit = defineEmits(['update:modelValue', 'input', 'blur', 'validate']);
|
|
@@ -14,11 +13,11 @@ const props = withDefaults(defineProps<{
|
|
|
14
13
|
skeleton?: boolean;
|
|
15
14
|
readonly?: boolean;
|
|
16
15
|
disabled?: boolean;
|
|
17
|
-
size?:
|
|
16
|
+
size?: Size;
|
|
18
17
|
state?: InputState
|
|
19
18
|
messages?: string[]
|
|
20
19
|
}>(), {
|
|
21
|
-
size:
|
|
20
|
+
size: Size.md,
|
|
22
21
|
state: InputState.base,
|
|
23
22
|
messages: () => []
|
|
24
23
|
});
|
|
@@ -35,10 +34,10 @@ const buttonClasses = computed(() => {
|
|
|
35
34
|
'relative inline-flex flex-shrink-0': true,
|
|
36
35
|
'focus:outline-none': true,
|
|
37
36
|
'rounded-full ease-in-out duration-200': true,
|
|
38
|
-
'focus-within:ring-
|
|
39
|
-
'focus-within:ring-
|
|
40
|
-
'h-
|
|
41
|
-
'h-
|
|
37
|
+
'focus-within:ring-4': !hasInputState.value && (props.size === Size.lg || props.size === Size.md),
|
|
38
|
+
'focus-within:ring-2': !hasInputState.value && (props.size === Size.sm || props.size === Size.xs || props.size === Size.xs2),
|
|
39
|
+
'h-5 w-9': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
40
|
+
'h-4 w-[30px]': props.size === Size.xs || props.size === Size.xs2,
|
|
42
41
|
'bg-neutral-300': !_value.value,
|
|
43
42
|
'invisible': props.skeleton,
|
|
44
43
|
// Disabled
|
|
@@ -67,27 +66,40 @@ const buttonClasses = computed(() => {
|
|
|
67
66
|
});
|
|
68
67
|
const ballClasses = computed(() => ({
|
|
69
68
|
'pointer-events-none inline-block rounded-full bg-neutral-100 shadow transform ring-0 transition ease-in-out duration-200': true,
|
|
70
|
-
'h-4 w-4 translate-y-0.5': props.size ===
|
|
71
|
-
'
|
|
72
|
-
'translate-x-
|
|
73
|
-
'
|
|
74
|
-
'translate-x-[.925rem]': _value.value && props.size ===
|
|
75
|
-
'translate-x-[1px]': !_value.value && props.size ===
|
|
69
|
+
'h-4 w-4 translate-y-0.5': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
70
|
+
'translate-x-[1.125rem]': _value.value && (props.size === Size.lg || props.size === Size.md || props.size === Size.sm),
|
|
71
|
+
'translate-x-0.5': !_value.value && (props.size === Size.lg || props.size === Size.md || props.size === Size.sm),
|
|
72
|
+
'h-3.5 w-3.5 translate-y-[1px]': props.size === Size.xs || props.size === Size.xs2,
|
|
73
|
+
'translate-x-[.925rem]': _value.value && (props.size === Size.xs || props.size === Size.xs2),
|
|
74
|
+
'translate-x-[1px]': !_value.value && (props.size === Size.xs || props.size === Size.xs2),
|
|
76
75
|
'invisible': props.skeleton
|
|
77
76
|
}));
|
|
78
77
|
const valueClasses = computed(() => ({
|
|
79
78
|
'text-for-white-bg-font': true,
|
|
80
|
-
'text-
|
|
81
|
-
'text-
|
|
79
|
+
'text-sm': props.size === Size.lg || props.size === Size.md || props.size === Size.sm,
|
|
80
|
+
'text-xs': props.size === Size.xs || props.size === Size.xs2,
|
|
82
81
|
'opacity-50 cursor-not-allowed': props.disabled,
|
|
83
82
|
'cursor-pointer': !hasInputState.value,
|
|
84
83
|
}));
|
|
85
84
|
const fieldSize = computed(() => {
|
|
86
|
-
if (props.size ===
|
|
85
|
+
if (props.size === Size.lg) {
|
|
86
|
+
return Size.lg;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (props.size === Size.md) {
|
|
90
|
+
return Size.md;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (props.size === Size.sm) {
|
|
87
94
|
return Size.sm;
|
|
88
|
-
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (props.size === Size.xs) {
|
|
89
98
|
return Size.xs;
|
|
90
99
|
}
|
|
100
|
+
|
|
101
|
+
return Size.xs2;
|
|
102
|
+
|
|
91
103
|
});
|
|
92
104
|
|
|
93
105
|
/**
|
|
@@ -124,7 +136,7 @@ function onBlur(e: FocusEvent) {
|
|
|
124
136
|
<template>
|
|
125
137
|
<AntField
|
|
126
138
|
:label="label"
|
|
127
|
-
:size="
|
|
139
|
+
:size="size"
|
|
128
140
|
:description="description"
|
|
129
141
|
:skeleton="skeleton"
|
|
130
142
|
:state="state"
|
|
@@ -162,7 +174,7 @@ function onBlur(e: FocusEvent) {
|
|
|
162
174
|
<div
|
|
163
175
|
v-if="hasSlotContent($slots['default'])"
|
|
164
176
|
class="relative flex items-center"
|
|
165
|
-
:class="props.size ===
|
|
177
|
+
:class="props.size === Size.lg || props.size === Size.md ||props.size === Size.sm ? 'h-5' : 'h-4'"
|
|
166
178
|
>
|
|
167
179
|
<span :class="valueClasses">
|
|
168
180
|
<slot />
|