edvoyui-component-library-test-flight 0.0.24 → 0.0.26
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/{input/EUIInput.vue.d.ts → EUIInput.vue.d.ts} +1 -1
- package/dist/EUIInput.vue.d.ts.map +1 -0
- package/dist/button/EUIButton.vue.d.ts.map +1 -0
- package/dist/library-vue-ts.cjs.js +16 -16
- package/dist/library-vue-ts.es.js +6034 -6021
- package/dist/library-vue-ts.umd.js +19 -19
- package/dist/modal/EUIModal.vue.d.ts +1 -1
- package/dist/modal/EUIModal.vue.d.ts.map +1 -1
- package/dist/popover/EUIPopover.vue.d.ts +1 -1
- package/dist/table/EUIDashboardTable.vue.d.ts +1 -1
- package/dist/table/EUITable.vue.d.ts +1 -1
- package/package.json +2 -1
- package/src/assets/svg/ChevronBigDown.vue +22 -0
- package/src/components/HelloWorld.vue +235 -77
- package/src/components/checkbox/EUICheckbox.vue +2 -2
- package/src/components/datepicker/EUIDatepicker.stories.ts +136 -12
- package/src/components/datepicker/EUIDatepicker.vue +31 -7
- package/src/components/delete.vue +49 -1
- package/src/components/index.ts +0 -1
- package/src/components/input/EUIInput.stories.ts +219 -6
- package/src/components/input/EUIInput.vue +30 -15
- package/src/components/modal/EUIModal.vue +13 -16
- package/src/components/select/EUISelect.stories.ts +49 -3
- package/src/components/select/EUISelect.vue +79 -34
- package/src/components/table/EUIDashboardTable.vue +2 -2
- package/src/components/table/EUITable.vue +2 -2
- package/src/components/telephone/EUITelephone.stories.ts +164 -8
- package/src/components/telephone/EUITelephone.vue +33 -11
- package/src/components/textArea/EUITextArea.stories.ts +52 -0
- package/src/components/textArea/EUITextArea.vue +36 -5
- package/dist/EUIButton.vue.d.ts.map +0 -1
- package/dist/input/EUIInput.vue.d.ts.map +0 -1
- package/dist/inputNormal/EUIInputNormal.vue.d.ts +0 -5
- package/dist/inputNormal/EUIInputNormal.vue.d.ts.map +0 -1
- package/src/components/inputNormal/EUIInputNormal.stories.ts +0 -164
- package/src/components/inputNormal/EUIInputNormal.vue +0 -161
- package/src/components/select/EUISelect.scss +0 -0
- /package/dist/{EUIButton.vue.d.ts → button/EUIButton.vue.d.ts} +0 -0
|
@@ -1,38 +1,43 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
+
<label
|
|
4
|
+
v-if="!inputFilled && label"
|
|
5
|
+
:for="`${name}-${id}`"
|
|
6
|
+
:class="[
|
|
7
|
+
'text-xs w-full text-gray-500 cursor-pointer font-medium',
|
|
8
|
+
required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
|
|
9
|
+
]"
|
|
10
|
+
>
|
|
11
|
+
{{ label }}
|
|
12
|
+
</label>
|
|
3
13
|
<div
|
|
4
|
-
:class="
|
|
5
|
-
class="relative w-full mb-2 overflow-hidden border border-gray-100 cursor-pointer group h-14 rounded-2xl focus-within:border-purple-600 focus-within:ring-1 focus-within:ring-purple-600"
|
|
14
|
+
:class="[{'pointer-events-none cursor-not-allowed': disabled}, {'h-14 rounded-2xl focus-within:border-purple-600 focus-within:ring-1 focus-within:ring-purple-600 border border-gray-100': inputFilled}, 'group cursor-pointer relative w-full mb-2 overflow-hidden']"
|
|
6
15
|
>
|
|
7
16
|
<label
|
|
17
|
+
v-if="inputFilled"
|
|
8
18
|
:for="`${name}-${id}`"
|
|
9
19
|
:class="[
|
|
10
20
|
getIconClass(),
|
|
11
21
|
inputValue
|
|
12
22
|
? 'top-3.5 text-xs text-gray-400 leading-none cursor-default'
|
|
13
|
-
: 'top-1/2 text-sm w-full text-gray-700 cursor-pointer h-14 pt-5 pb-4
|
|
14
|
-
disabled ? '
|
|
23
|
+
: 'top-1/2 text-sm w-full text-gray-700 cursor-pointer h-14 pt-5 pb-4',
|
|
24
|
+
disabled ? 'cursor-not-allowed bg-gray-50 z-10' : 'z-0 bg-white',
|
|
15
25
|
required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
|
|
26
|
+
'absolute font-medium left-0 px-4 -translate-y-1/2 duration-300 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0 first-letter:capitalize transition-all ease-in-out'
|
|
16
27
|
]"
|
|
17
|
-
class="absolute font-medium left-0 px-4 z-0 -translate-y-1/2 duration-200 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0"
|
|
18
28
|
>
|
|
19
|
-
{{ label }}
|
|
29
|
+
{{ label || 'Label' }}
|
|
20
30
|
</label>
|
|
21
31
|
<div
|
|
22
32
|
v-if="icon && iconType"
|
|
23
|
-
class="absolute inset-y-0 flex items-center pointer-events-none"
|
|
24
|
-
:class="[
|
|
25
|
-
iconType === 'startIcon' ? 'left-0 pl-3' : 'right-0 pr-3',
|
|
26
|
-
disabled ? 'cursor-not-allowed' : '',
|
|
27
|
-
]"
|
|
33
|
+
:class="['absolute inset-y-0 flex items-center pointer-events-none', iconType === 'startIcon' ? 'left-0 pl-3' : 'right-0 pr-3', disabled ? 'z-20': '']"
|
|
28
34
|
>
|
|
29
35
|
<component
|
|
30
36
|
:is="icon"
|
|
31
|
-
class="
|
|
37
|
+
class="text-gray-400 size-6"
|
|
32
38
|
aria-hidden="true"
|
|
33
39
|
/>
|
|
34
40
|
</div>
|
|
35
|
-
|
|
36
41
|
<input
|
|
37
42
|
:id="`${name}-${id}`"
|
|
38
43
|
ref="input"
|
|
@@ -40,8 +45,8 @@
|
|
|
40
45
|
:value="modelValue"
|
|
41
46
|
:placeholder="placeholder"
|
|
42
47
|
:name="name"
|
|
43
|
-
class="z-10 block
|
|
44
|
-
|
|
48
|
+
:class="['z-10 block placeholder:text-gray-400 focus:outline-none text-sm font-medium appearance-none disabled:opacity-75 autofill:bg-white leading-6 transition-all duration-100 border-none outline-none', inputFilled ? 'pt-6 pb-3 rounded-2xl size-full' : 'px-4 py-3 h-10 w-full ring-1 ring-gray-100 focus-within:ring-purple-600 focus-within:ring-2 ring-inset', !inputFilled && rounded ? 'rounded-2xl' : 'rounded-md', disabled ? 'cursor-not-allowed' : 'cursor-text', getIconClass(), !inputFilled && className]"
|
|
49
|
+
|
|
45
50
|
:required="required"
|
|
46
51
|
:disabled="disabled"
|
|
47
52
|
:readonly="readonly"
|
|
@@ -118,6 +123,16 @@ const props = defineProps({
|
|
|
118
123
|
type: Boolean,
|
|
119
124
|
default: false,
|
|
120
125
|
},
|
|
126
|
+
inputFilled: {
|
|
127
|
+
type:Boolean,
|
|
128
|
+
default: false
|
|
129
|
+
},
|
|
130
|
+
rounded:Boolean,
|
|
131
|
+
className: {
|
|
132
|
+
type: Array as PropType<string[]>,
|
|
133
|
+
required: false,
|
|
134
|
+
default: () => [],
|
|
135
|
+
},
|
|
121
136
|
});
|
|
122
137
|
|
|
123
138
|
const hasFocus = ref(false);
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
@click.self="closeModal"
|
|
8
8
|
>
|
|
9
9
|
<div
|
|
10
|
-
class="backdrop fixed inset-0 z-[-1] w-screen h-screen bg-black/
|
|
10
|
+
class="backdrop fixed inset-0 z-[-1] w-screen h-screen bg-black/50 pointer-events-none overflow-hidden"
|
|
11
11
|
></div>
|
|
12
12
|
<div
|
|
13
13
|
class="bg-white shadow-lg max-w-lg w-full max-h-[calc(100svh-3rem)] md:h-auto overflow-hidden relative"
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
</template>
|
|
21
21
|
<div
|
|
22
22
|
v-else
|
|
23
|
-
class="flex items-center justify-between font-medium text-gray-700"
|
|
23
|
+
class="flex flex-row items-center justify-between font-medium text-gray-700"
|
|
24
24
|
:class="slimHeader ? 'p-4 text-base' : 'p-6 text-lg'"
|
|
25
25
|
>
|
|
26
26
|
<h3 class="text-xl font-semibold">
|
|
27
27
|
<slot name="title">{{ title || "Modal Title" }}</slot>
|
|
28
28
|
</h3>
|
|
29
|
-
<div>
|
|
29
|
+
<div v-if="visibleClose" class="flex-initial">
|
|
30
30
|
<button
|
|
31
31
|
type="button"
|
|
32
32
|
class="flex items-center justify-center text-gray-400 bg-white hover:bg-gray-50 rounded-3xl hover:text-gray-600 size-8"
|
|
@@ -104,6 +104,10 @@ export default defineComponent({
|
|
|
104
104
|
type: String,
|
|
105
105
|
default: "",
|
|
106
106
|
},
|
|
107
|
+
visibleClose: {
|
|
108
|
+
type: Boolean,
|
|
109
|
+
default: true,
|
|
110
|
+
},
|
|
107
111
|
},
|
|
108
112
|
emits: ["update:isVisible", "confirm"],
|
|
109
113
|
methods: {
|
|
@@ -131,33 +135,26 @@ export default defineComponent({
|
|
|
131
135
|
<style lang="scss" scoped>
|
|
132
136
|
.modal-enter-active,
|
|
133
137
|
.modal-leave-active {
|
|
134
|
-
transition: opacity 0.
|
|
138
|
+
transition: opacity 0.3s ease, transform 0.3s ease;
|
|
135
139
|
}
|
|
136
140
|
.modal-enter-from,
|
|
137
141
|
.modal-leave-to {
|
|
138
|
-
opacity
|
|
139
|
-
transform-origin: top;
|
|
140
|
-
transform: translateY(40%) scale(0.4);
|
|
142
|
+
@apply opacity-0;
|
|
141
143
|
}
|
|
142
144
|
.modal-enter-to,
|
|
143
145
|
.modal-leave-from {
|
|
144
|
-
|
|
145
|
-
transform-origin: top center;
|
|
146
|
-
transform: translateY(0%) scale(1);
|
|
146
|
+
@apply opacity-100;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
.backdrop {
|
|
150
|
-
transition: opacity 0.
|
|
150
|
+
transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
151
151
|
}
|
|
152
152
|
.modal-enter-from .backdrop,
|
|
153
153
|
.modal-leave-to .backdrop {
|
|
154
|
-
|
|
155
|
-
opacity: 0;
|
|
154
|
+
@apply opacity-0;
|
|
156
155
|
}
|
|
157
156
|
.modal-enter-to .backdrop,
|
|
158
157
|
.modal-leave-from .backdrop {
|
|
159
|
-
|
|
160
|
-
transform: scale(1) rotate3d(0, 0, 0, 90deg); // fade effect only
|
|
161
|
-
opacity: 0.2;
|
|
158
|
+
@apply opacity-100;
|
|
162
159
|
}
|
|
163
160
|
</style>
|
|
@@ -25,6 +25,15 @@ const meta = {
|
|
|
25
25
|
description:
|
|
26
26
|
"Object containing validation errors where keys are field names and values are the error messages.",
|
|
27
27
|
},
|
|
28
|
+
inputFilled: {
|
|
29
|
+
control: "boolean",
|
|
30
|
+
description: "Toggles the alternate Select input Filled design.",
|
|
31
|
+
defaultValue: false,
|
|
32
|
+
table: {
|
|
33
|
+
type: { summary: "Boolean" },
|
|
34
|
+
defaultValue: { summary: "false" },
|
|
35
|
+
},
|
|
36
|
+
},
|
|
28
37
|
},
|
|
29
38
|
} satisfies Meta<typeof EUISelect>;
|
|
30
39
|
|
|
@@ -35,8 +44,8 @@ type Story = StoryObj<typeof meta>;
|
|
|
35
44
|
export const Default: Story = {
|
|
36
45
|
args: {
|
|
37
46
|
name: "country",
|
|
38
|
-
label: "
|
|
39
|
-
placeholder: "country",
|
|
47
|
+
label: "Country Name",
|
|
48
|
+
placeholder: "select country",
|
|
40
49
|
items: [
|
|
41
50
|
{ value: "usa", label: "United States", name: "United States" },
|
|
42
51
|
{ value: "canada", label: "Canada", name: "Canada" },
|
|
@@ -44,6 +53,43 @@ export const Default: Story = {
|
|
|
44
53
|
],
|
|
45
54
|
modelValue: { value: "usa", label: "United States", name: "United States" },
|
|
46
55
|
errors: {},
|
|
47
|
-
required:
|
|
56
|
+
required: false,
|
|
48
57
|
},
|
|
58
|
+
render: (args) => ({
|
|
59
|
+
components: { EUISelect },
|
|
60
|
+
setup() {
|
|
61
|
+
return { args };
|
|
62
|
+
},
|
|
63
|
+
template: '<div class="max-w-xs"><EUISelect v-bind="args" /></div>',
|
|
64
|
+
}),
|
|
49
65
|
};
|
|
66
|
+
|
|
67
|
+
export const inputFilled: Story = {
|
|
68
|
+
args: {
|
|
69
|
+
name: "country",
|
|
70
|
+
label: "Country Name",
|
|
71
|
+
placeholder: "select country",
|
|
72
|
+
items: [
|
|
73
|
+
{ value: "usa", label: "United States", name: "United States" },
|
|
74
|
+
{ value: "canada", label: "Canada", name: "Canada" },
|
|
75
|
+
{ value: "uk", label: "United Kingdom", name: "United Kingdom" },
|
|
76
|
+
],
|
|
77
|
+
modelValue: [],
|
|
78
|
+
errors: {},
|
|
79
|
+
inputFilled: true,
|
|
80
|
+
},
|
|
81
|
+
parameters: {
|
|
82
|
+
docs: {
|
|
83
|
+
description: {
|
|
84
|
+
story: "Toggles the alternate Select Filled design.",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
render: (args) => ({
|
|
89
|
+
components: { EUISelect },
|
|
90
|
+
setup() {
|
|
91
|
+
return { args };
|
|
92
|
+
},
|
|
93
|
+
template: '<div class="max-w-xs"><EUISelect v-bind="args" /></div>',
|
|
94
|
+
}),
|
|
95
|
+
};
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div :class="isUseCustomSelect ? 'isUseCustomSelect' : ''">
|
|
3
|
+
<label
|
|
4
|
+
v-if="!inputFilled && label"
|
|
5
|
+
:class="[
|
|
6
|
+
'text-xs w-full text-gray-500 cursor-pointer font-medium block mb-1',
|
|
7
|
+
required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
|
|
8
|
+
]"
|
|
9
|
+
>
|
|
10
|
+
{{ label }}
|
|
11
|
+
</label>
|
|
3
12
|
<vSelect
|
|
4
13
|
v-model="selected"
|
|
5
14
|
:filter="isFussySeach ? fuseSearch : undefined"
|
|
@@ -18,7 +27,14 @@
|
|
|
18
27
|
:loading="loading"
|
|
19
28
|
:disabled="disabled"
|
|
20
29
|
:selectable="selectedLimit"
|
|
21
|
-
:class="[
|
|
30
|
+
:class="[
|
|
31
|
+
isUseCustomSelect
|
|
32
|
+
? 'customselect'
|
|
33
|
+
: 'border border-gray-200 focus-within:border-purple-600 focus-within:ring-inset focus-within:ring-1 focus-within:ring-purple-600 z-10 focus-within:rounded',
|
|
34
|
+
inputFilled ? 'rounded-2xl min-h-14' : 'rounded-md min-h-10',
|
|
35
|
+
'group relative w-full bg-white cursor-pointer overflow-hidden',
|
|
36
|
+
{ 'opacity-25': disabled },
|
|
37
|
+
]"
|
|
22
38
|
:clearable="isUseCustomSelect ? clearable : undefined"
|
|
23
39
|
:no-drop="nodropDown"
|
|
24
40
|
@search="search($event)"
|
|
@@ -26,18 +42,18 @@
|
|
|
26
42
|
@option:deselected="deselected($event)"
|
|
27
43
|
@option:created="handleOptionCreate"
|
|
28
44
|
>
|
|
29
|
-
<template #header>
|
|
45
|
+
<template v-if="inputFilled" #header>
|
|
30
46
|
<div
|
|
31
47
|
:class="[
|
|
32
48
|
inputValue
|
|
33
49
|
? 'top-3.5 text-xs text-gray-400 cursor-default max-w-max'
|
|
34
|
-
: 'top-1/2 text-sm text-gray-700 cursor-pointer h-14 pt-5 pb-4 bg-transparent ring-0 ring-gray-200 group-hover:top-3.5 group-hover:py-0 group-hover:h-auto bg-white group-hover:text-xs group-hover:
|
|
50
|
+
: 'top-1/2 text-sm text-gray-700 cursor-pointer h-14 pt-5 pb-4 bg-transparent ring-0 ring-gray-200 group-hover:top-3.5 group-hover:py-0 group-hover:h-auto bg-white group-hover:text-xs group-hover:w-max w-11/12 group-hover:-translate-y-1/2 group-hover:text-gray-400',
|
|
35
51
|
disabled ? ' cursor-not-allowed' : '',
|
|
36
52
|
required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
|
|
37
53
|
]"
|
|
38
54
|
class="absolute text-left font-medium inset-x-0 px-4 z-10 -translate-y-1/2 duration-200 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0 capitalize leading-[normal]"
|
|
39
55
|
>
|
|
40
|
-
{{ startCaseText(label) }}
|
|
56
|
+
{{ startCaseText(label) || "Select" }}
|
|
41
57
|
</div>
|
|
42
58
|
</template>
|
|
43
59
|
<template #selected-option="{ name: nameText, iconlink }">
|
|
@@ -90,6 +106,11 @@
|
|
|
90
106
|
</button>
|
|
91
107
|
</div>
|
|
92
108
|
</template>
|
|
109
|
+
<template #open-indicator="{ attributes }">
|
|
110
|
+
<span v-bind="attributes as Record<string, any>"
|
|
111
|
+
><ChevronBigDown class="text-current size-6"
|
|
112
|
+
/></span>
|
|
113
|
+
</template>
|
|
93
114
|
</vSelect>
|
|
94
115
|
<EUIErrorMessage :errors="errors" :name="name" class="mt-2" />
|
|
95
116
|
</div>
|
|
@@ -111,8 +132,8 @@ import {
|
|
|
111
132
|
toRefs,
|
|
112
133
|
watch,
|
|
113
134
|
} from "vue";
|
|
114
|
-
import "./EUISelect.scss";
|
|
115
135
|
import { ValidationErrors } from "../../utils/types";
|
|
136
|
+
import ChevronBigDown from "../../assets/svg/ChevronBigDown.vue";
|
|
116
137
|
|
|
117
138
|
type VirtualElement = {
|
|
118
139
|
getBoundingClientRect: () => ClientRect | DOMRect;
|
|
@@ -146,7 +167,7 @@ const props = defineProps({
|
|
|
146
167
|
default: "",
|
|
147
168
|
required: false,
|
|
148
169
|
},
|
|
149
|
-
customOffset:{
|
|
170
|
+
customOffset: {
|
|
150
171
|
type: Array as PropType<any>,
|
|
151
172
|
required: false,
|
|
152
173
|
},
|
|
@@ -170,7 +191,7 @@ const props = defineProps({
|
|
|
170
191
|
},
|
|
171
192
|
label: {
|
|
172
193
|
type: String,
|
|
173
|
-
default: "
|
|
194
|
+
default: "",
|
|
174
195
|
required: false,
|
|
175
196
|
},
|
|
176
197
|
searchLabel: {
|
|
@@ -198,10 +219,10 @@ const props = defineProps({
|
|
|
198
219
|
required: false,
|
|
199
220
|
default: false,
|
|
200
221
|
},
|
|
201
|
-
multipleLimit:{
|
|
222
|
+
multipleLimit: {
|
|
202
223
|
type: Number,
|
|
203
224
|
required: false,
|
|
204
|
-
default: false
|
|
225
|
+
default: false,
|
|
205
226
|
},
|
|
206
227
|
disabled: {
|
|
207
228
|
type: Boolean as PropType<boolean>,
|
|
@@ -252,6 +273,10 @@ const props = defineProps({
|
|
|
252
273
|
required: false,
|
|
253
274
|
default: true,
|
|
254
275
|
},
|
|
276
|
+
inputFilled: {
|
|
277
|
+
type: Boolean,
|
|
278
|
+
default: false,
|
|
279
|
+
},
|
|
255
280
|
});
|
|
256
281
|
|
|
257
282
|
const {
|
|
@@ -302,7 +327,7 @@ const deselected = (newValue: any) => {
|
|
|
302
327
|
}
|
|
303
328
|
};
|
|
304
329
|
|
|
305
|
-
watch(modelValue, (newValue:any) => {
|
|
330
|
+
watch(modelValue, (newValue: any) => {
|
|
306
331
|
selected.value = newValue;
|
|
307
332
|
});
|
|
308
333
|
|
|
@@ -311,8 +336,8 @@ const search = (x: string) => {
|
|
|
311
336
|
emit("search", x);
|
|
312
337
|
};
|
|
313
338
|
|
|
314
|
-
const selectWidth = computed(() => props.customWidth)
|
|
315
|
-
const offsetValue = computed(() => props.customOffset)
|
|
339
|
+
const selectWidth = computed(() => props.customWidth);
|
|
340
|
+
const offsetValue = computed(() => props.customOffset);
|
|
316
341
|
|
|
317
342
|
const withPopper = (
|
|
318
343
|
dropdownList: HTMLElement,
|
|
@@ -320,10 +345,10 @@ const withPopper = (
|
|
|
320
345
|
{ width }: any
|
|
321
346
|
) => {
|
|
322
347
|
const newwidth = selectWidth.value || width; //setcustom width '400px'
|
|
323
|
-
const newOffset = offsetValue.value || [0,
|
|
348
|
+
const newOffset = offsetValue.value || [0, 7]; //setcustom Offset '[123, -1]'
|
|
324
349
|
const customWidth = isUseCustomSelect.value ? newwidth : width;
|
|
325
350
|
dropdownList.style.width = customWidth;
|
|
326
|
-
const offsetValues = isUseCustomSelect.value ? newOffset : [0,
|
|
351
|
+
const offsetValues = isUseCustomSelect.value ? newOffset : [0, 7];
|
|
327
352
|
const popper = createPopper(component.$refs.toggle, dropdownList, {
|
|
328
353
|
placement: "bottom",
|
|
329
354
|
modifiers: [
|
|
@@ -360,7 +385,13 @@ onBeforeUnmount(() => {
|
|
|
360
385
|
|
|
361
386
|
const slectedChipbg = computed(() => (props.multiple ? "#f3e8ff" : ""));
|
|
362
387
|
const slectedChiptextColor = computed(() => (props.multiple ? "#7e22ce" : ""));
|
|
363
|
-
const slectedChipHeight = computed(() =>
|
|
388
|
+
const slectedChipHeight = computed(() =>
|
|
389
|
+
props.multiple && props.inputFilled
|
|
390
|
+
? "fit-content"
|
|
391
|
+
: props.inputFilled
|
|
392
|
+
? ""
|
|
393
|
+
: "auto"
|
|
394
|
+
);
|
|
364
395
|
|
|
365
396
|
const dropDownIcon = computed(() => (props.clearable ? "flex" : "none"));
|
|
366
397
|
|
|
@@ -372,17 +403,17 @@ const selectBG = computed(() => {
|
|
|
372
403
|
});
|
|
373
404
|
const selectHeight = computed(() => {
|
|
374
405
|
if (selected.value?.length === 0 || _.isEmpty(selected.value)) {
|
|
375
|
-
return "54px";
|
|
406
|
+
return props.inputFilled ? "54px" : "36px";
|
|
376
407
|
}
|
|
377
408
|
|
|
378
409
|
let heightValue;
|
|
379
410
|
|
|
380
411
|
if (props.multiple) {
|
|
381
|
-
heightValue = "32px";
|
|
412
|
+
heightValue = props.inputFilled ? "32px" : "0px";
|
|
382
413
|
} else if (isUseCustomSelect.value) {
|
|
383
414
|
heightValue = "fit-content";
|
|
384
415
|
} else {
|
|
385
|
-
heightValue = "
|
|
416
|
+
heightValue = props.inputFilled ? "40px" : "30px";
|
|
386
417
|
}
|
|
387
418
|
|
|
388
419
|
return heightValue;
|
|
@@ -396,15 +427,28 @@ const selectedMultiple = computed(() => {
|
|
|
396
427
|
let heightValue;
|
|
397
428
|
|
|
398
429
|
if (isUseCustomSelect.value || props.multiple) {
|
|
399
|
-
heightValue = "24px";
|
|
430
|
+
heightValue = props.inputFilled ? "24px" : "4px";
|
|
400
431
|
} else {
|
|
401
|
-
heightValue = "2px";
|
|
432
|
+
heightValue = props.inputFilled ? "12px" : "2px";
|
|
402
433
|
}
|
|
403
434
|
|
|
404
435
|
return heightValue;
|
|
405
436
|
});
|
|
406
437
|
|
|
407
|
-
const selectFocus = computed(() =>
|
|
438
|
+
const selectFocus = computed(() =>
|
|
439
|
+
props.multiple && props.inputFilled
|
|
440
|
+
? "8px"
|
|
441
|
+
: props.inputFilled
|
|
442
|
+
? "8px"
|
|
443
|
+
: "0px"
|
|
444
|
+
);
|
|
445
|
+
const searchMargin = computed(() =>
|
|
446
|
+
props.multiple && props.inputFilled
|
|
447
|
+
? "10px"
|
|
448
|
+
: props.inputFilled
|
|
449
|
+
? "10px"
|
|
450
|
+
: "0px"
|
|
451
|
+
);
|
|
408
452
|
|
|
409
453
|
const selectRequited = computed(() =>
|
|
410
454
|
props.required
|
|
@@ -435,7 +479,8 @@ const inputValue = computed(() => {
|
|
|
435
479
|
const selectedValue = selected.value;
|
|
436
480
|
if (modelValue) return true;
|
|
437
481
|
if (Array.isArray(selectedValue)) return !!selectedValue.length;
|
|
438
|
-
if (selectedValue && typeof selectedValue ===
|
|
482
|
+
if (selectedValue && typeof selectedValue === "object")
|
|
483
|
+
return !!Object.keys(selectedValue).length;
|
|
439
484
|
return !!selectedValue;
|
|
440
485
|
});
|
|
441
486
|
|
|
@@ -444,17 +489,18 @@ const handleOptionCreate = (e: any) => {
|
|
|
444
489
|
};
|
|
445
490
|
|
|
446
491
|
const isSelectable = computed(() => {
|
|
447
|
-
return
|
|
492
|
+
return (
|
|
493
|
+
!props.multipleLimit || (selected.value?.length ?? 0) < props.multipleLimit
|
|
494
|
+
);
|
|
448
495
|
});
|
|
449
496
|
|
|
450
|
-
const selectedLimit = () =>
|
|
451
|
-
if(!props.multipleLimit) return true
|
|
497
|
+
const selectedLimit = () => {
|
|
498
|
+
if (!props.multipleLimit) return true;
|
|
452
499
|
|
|
453
|
-
if(props.multipleLimit) {
|
|
454
|
-
return isSelectable.value
|
|
500
|
+
if (props.multipleLimit) {
|
|
501
|
+
return isSelectable.value;
|
|
455
502
|
}
|
|
456
|
-
}
|
|
457
|
-
|
|
503
|
+
};
|
|
458
504
|
|
|
459
505
|
// const handlers = (e: Event) => {
|
|
460
506
|
// console.log("@e", e);
|
|
@@ -492,9 +538,6 @@ const selectedLimit = () => {
|
|
|
492
538
|
}
|
|
493
539
|
}
|
|
494
540
|
|
|
495
|
-
.vs__search:focus {
|
|
496
|
-
padding-top: v-bind(selectFocus);
|
|
497
|
-
}
|
|
498
541
|
.vs--single.vs--open .vs__selected,
|
|
499
542
|
.vs--single.vs--loading .vs__selected {
|
|
500
543
|
@apply opacity-0;
|
|
@@ -551,9 +594,11 @@ const selectedLimit = () => {
|
|
|
551
594
|
|
|
552
595
|
.vs {
|
|
553
596
|
&__search {
|
|
554
|
-
@apply
|
|
597
|
+
@apply px-2 placeholder:text-sm placeholder:font-medium placeholder:leading-loose appearance-none;
|
|
598
|
+
margin-top: v-bind(searchMargin);
|
|
555
599
|
&:focus {
|
|
556
|
-
@apply text-sm font-medium;
|
|
600
|
+
@apply text-sm font-medium pl-2.5;
|
|
601
|
+
padding-top: v-bind(selectFocus);
|
|
557
602
|
}
|
|
558
603
|
}
|
|
559
604
|
&__selected {
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
</template>
|
|
97
97
|
</tbody>
|
|
98
98
|
<tbody v-if="computedItems.length === 0">
|
|
99
|
-
<tr>
|
|
99
|
+
<tr class="norecords">
|
|
100
100
|
<td :colspan="headers.length">
|
|
101
101
|
<div
|
|
102
102
|
class="flex items-center justify-center text-xl font-medium text-gray-500 min-h-96"
|
|
@@ -458,7 +458,7 @@ watch(() => tableContainer.value?.clientWidth, checkOverflow);
|
|
|
458
458
|
}
|
|
459
459
|
tbody {
|
|
460
460
|
@apply snap-y snap-mandatory snap-always;
|
|
461
|
-
tr
|
|
461
|
+
tr:not(.norecords) {
|
|
462
462
|
@apply text-gray-500 transition-all duration-150 rounded-xl bg-white snap-start ease-in-out snap-x snap-mandatory;
|
|
463
463
|
&:hover {
|
|
464
464
|
@apply shadow-[1px_2px_40px_0px_#03022912] ring-1 ring-gray-100 ring-inset z-30;
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
</template>
|
|
126
126
|
</tbody>
|
|
127
127
|
<tbody v-if="computedItems.length === 0">
|
|
128
|
-
<tr>
|
|
128
|
+
<tr class="norecords">
|
|
129
129
|
<td :colspan="checkable === true ? headers.length + 1 : headers.length">
|
|
130
130
|
<div
|
|
131
131
|
class="flex items-center justify-center text-xl font-medium text-gray-500 min-h-96"
|
|
@@ -484,7 +484,7 @@ watch(() => tableContainer.value?.clientWidth, checkOverflow);
|
|
|
484
484
|
|
|
485
485
|
tbody {
|
|
486
486
|
@apply snap-y snap-mandatory snap-always;
|
|
487
|
-
|
|
487
|
+
tr:not(.norecords) {
|
|
488
488
|
@apply text-gray-600 transition-colors duration-100 bg-white snap-start ease-in-out snap-x snap-mandatory rounded-sm h-12;
|
|
489
489
|
&:hover {
|
|
490
490
|
@apply bg-purple-50 ring-1 ring-purple-100 ring-inset;
|