@fy-/fws-vue 0.2.9 → 0.3.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/ui/DefaultInput.vue +204 -213
- package/package.json +2 -12
- package/presets/Lara/accordion/index.js +0 -86
- package/presets/Lara/autocomplete/index.js +0 -284
- package/presets/Lara/avatar/index.js +0 -46
- package/presets/Lara/badge/index.js +0 -44
- package/presets/Lara/badgedirective/index.js +0 -49
- package/presets/Lara/blockui/index.js +0 -8
- package/presets/Lara/breadcrumb/index.js +0 -64
- package/presets/Lara/button/index.js +0 -470
- package/presets/Lara/calendar/index.js +0 -683
- package/presets/Lara/card/index.js +0 -37
- package/presets/Lara/carousel/index.js +0 -152
- package/presets/Lara/cascadeselect/index.js +0 -228
- package/presets/Lara/checkbox/index.js +0 -106
- package/presets/Lara/chip/index.js +0 -45
- package/presets/Lara/chips/index.js +0 -118
- package/presets/Lara/colorpicker/index.js +0 -129
- package/presets/Lara/confirmpopup/index.js +0 -107
- package/presets/Lara/contextmenu/index.js +0 -130
- package/presets/Lara/datatable/index.js +0 -1289
- package/presets/Lara/dataview/index.js +0 -40
- package/presets/Lara/deferred/index.js +0 -3
- package/presets/Lara/dialog/index.js +0 -249
- package/presets/Lara/divider/index.js +0 -72
- package/presets/Lara/dock/index.js +0 -97
- package/presets/Lara/dropdown/index.js +0 -300
- package/presets/Lara/fieldset/index.js +0 -98
- package/presets/Lara/fileupload/index.js +0 -173
- package/presets/Lara/floatlabel/index.js +0 -26
- package/presets/Lara/galleria/index.js +0 -351
- package/presets/Lara/global.js +0 -90
- package/presets/Lara/iconfield/index.js +0 -22
- package/presets/Lara/image/index.js +0 -206
- package/presets/Lara/index.js +0 -181
- package/presets/Lara/inlinemessage/index.js +0 -36
- package/presets/Lara/inplace/index.js +0 -27
- package/presets/Lara/inputgroup/index.js +0 -5
- package/presets/Lara/inputgroupaddon/index.js +0 -28
- package/presets/Lara/inputmask/index.js +0 -37
- package/presets/Lara/inputnumber/index.js +0 -253
- package/presets/Lara/inputotp/index.js +0 -72
- package/presets/Lara/inputswitch/index.js +0 -93
- package/presets/Lara/inputtext/index.js +0 -61
- package/presets/Lara/knob/index.js +0 -47
- package/presets/Lara/listbox/index.js +0 -170
- package/presets/Lara/megamenu/index.js +0 -207
- package/presets/Lara/menu/index.js +0 -98
- package/presets/Lara/menubar/index.js +0 -181
- package/presets/Lara/message/index.js +0 -87
- package/presets/Lara/metergroup/index.js +0 -110
- package/presets/Lara/multiselect/index.js +0 -589
- package/presets/Lara/orderlist/index.js +0 -266
- package/presets/Lara/organizationchart/index.js +0 -142
- package/presets/Lara/overlaypanel/index.js +0 -41
- package/presets/Lara/paginator/index.js +0 -590
- package/presets/Lara/panel/index.js +0 -93
- package/presets/Lara/panelmenu/index.js +0 -139
- package/presets/Lara/password/index.js +0 -140
- package/presets/Lara/picklist/index.js +0 -659
- package/presets/Lara/progressbar/index.js +0 -61
- package/presets/Lara/progressspinner/index.js +0 -51
- package/presets/Lara/radiobutton/index.js +0 -116
- package/presets/Lara/rating/index.js +0 -95
- package/presets/Lara/ripple/index.js +0 -6
- package/presets/Lara/scrollpanel/index.js +0 -77
- package/presets/Lara/scrolltop/index.js +0 -45
- package/presets/Lara/selectbutton/index.js +0 -60
- package/presets/Lara/sidebar/index.js +0 -163
- package/presets/Lara/skeleton/index.js +0 -19
- package/presets/Lara/slider/index.js +0 -149
- package/presets/Lara/speeddial/index.js +0 -535
- package/presets/Lara/splitbutton/index.js +0 -1081
- package/presets/Lara/splitter/index.js +0 -64
- package/presets/Lara/stepper/index.js +0 -183
- package/presets/Lara/steps/index.js +0 -115
- package/presets/Lara/tabmenu/index.js +0 -82
- package/presets/Lara/tabview/index.js +0 -166
- package/presets/Lara/tag/index.js +0 -37
- package/presets/Lara/terminal/index.js +0 -60
- package/presets/Lara/textarea/index.js +0 -39
- package/presets/Lara/tieredmenu/index.js +0 -125
- package/presets/Lara/timeline/index.js +0 -107
- package/presets/Lara/toast/index.js +0 -113
- package/presets/Lara/togglebutton/index.js +0 -100
- package/presets/Lara/toolbar/index.js +0 -28
- package/presets/Lara/tooltip/index.js +0 -73
- package/presets/Lara/tree/index.js +0 -281
- package/presets/Lara/treeselect/index.js +0 -387
- package/presets/Lara/treetable/index.js +0 -509
- package/presets/Lara/tristatecheckbox/index.js +0 -112
- package/presets/Wind/accordion/index.js +0 -75
- package/presets/Wind/autocomplete/index.js +0 -294
- package/presets/Wind/avatar/index.js +0 -48
- package/presets/Wind/badge/index.js +0 -43
- package/presets/Wind/badgedirective/index.js +0 -50
- package/presets/Wind/blockui/index.js +0 -8
- package/presets/Wind/breadcrumb/index.js +0 -45
- package/presets/Wind/button/index.js +0 -474
- package/presets/Wind/calendar/index.js +0 -659
- package/presets/Wind/card/index.js +0 -40
- package/presets/Wind/carousel/index.js +0 -152
- package/presets/Wind/cascadeselect/index.js +0 -225
- package/presets/Wind/checkbox/index.js +0 -112
- package/presets/Wind/chip/index.js +0 -45
- package/presets/Wind/chips/index.js +0 -120
- package/presets/Wind/colorpicker/index.js +0 -129
- package/presets/Wind/confirmpopup/index.js +0 -123
- package/presets/Wind/contextmenu/index.js +0 -128
- package/presets/Wind/datatable/index.js +0 -1330
- package/presets/Wind/dataview/index.js +0 -40
- package/presets/Wind/deferred/index.js +0 -3
- package/presets/Wind/dialog/index.js +0 -251
- package/presets/Wind/divider/index.js +0 -72
- package/presets/Wind/dock/index.js +0 -97
- package/presets/Wind/dropdown/index.js +0 -287
- package/presets/Wind/fieldset/index.js +0 -99
- package/presets/Wind/fileupload/index.js +0 -173
- package/presets/Wind/floatlabel/index.js +0 -26
- package/presets/Wind/galleria/index.js +0 -351
- package/presets/Wind/global.js +0 -77
- package/presets/Wind/iconfield/index.js +0 -22
- package/presets/Wind/image/index.js +0 -206
- package/presets/Wind/index.js +0 -181
- package/presets/Wind/inlinemessage/index.js +0 -29
- package/presets/Wind/inplace/index.js +0 -30
- package/presets/Wind/inputgroup/index.js +0 -5
- package/presets/Wind/inputgroupaddon/index.js +0 -28
- package/presets/Wind/inputmask/index.js +0 -34
- package/presets/Wind/inputnumber/index.js +0 -244
- package/presets/Wind/inputotp/index.js +0 -72
- package/presets/Wind/inputswitch/index.js +0 -106
- package/presets/Wind/inputtext/index.js +0 -61
- package/presets/Wind/knob/index.js +0 -47
- package/presets/Wind/listbox/index.js +0 -159
- package/presets/Wind/megamenu/index.js +0 -218
- package/presets/Wind/menu/index.js +0 -111
- package/presets/Wind/menubar/index.js +0 -188
- package/presets/Wind/message/index.js +0 -87
- package/presets/Wind/metergroup/index.js +0 -110
- package/presets/Wind/multiselect/index.js +0 -619
- package/presets/Wind/orderlist/index.js +0 -275
- package/presets/Wind/organizationchart/index.js +0 -143
- package/presets/Wind/overlaypanel/index.js +0 -42
- package/presets/Wind/paginator/index.js +0 -596
- package/presets/Wind/panel/index.js +0 -95
- package/presets/Wind/panelmenu/index.js +0 -136
- package/presets/Wind/password/index.js +0 -141
- package/presets/Wind/picklist/index.js +0 -684
- package/presets/Wind/progressbar/index.js +0 -68
- package/presets/Wind/progressspinner/index.js +0 -51
- package/presets/Wind/radiobutton/index.js +0 -92
- package/presets/Wind/rating/index.js +0 -86
- package/presets/Wind/ripple/index.js +0 -6
- package/presets/Wind/scrollpanel/index.js +0 -77
- package/presets/Wind/scrolltop/index.js +0 -45
- package/presets/Wind/selectbutton/index.js +0 -58
- package/presets/Wind/sidebar/index.js +0 -165
- package/presets/Wind/skeleton/index.js +0 -19
- package/presets/Wind/slider/index.js +0 -135
- package/presets/Wind/speeddial/index.js +0 -536
- package/presets/Wind/splitbutton/index.js +0 -1078
- package/presets/Wind/splitter/index.js +0 -64
- package/presets/Wind/stepper/index.js +0 -180
- package/presets/Wind/steps/index.js +0 -132
- package/presets/Wind/tabmenu/index.js +0 -84
- package/presets/Wind/tabview/index.js +0 -168
- package/presets/Wind/tag/index.js +0 -37
- package/presets/Wind/terminal/index.js +0 -60
- package/presets/Wind/textarea/index.js +0 -40
- package/presets/Wind/tieredmenu/index.js +0 -121
- package/presets/Wind/timeline/index.js +0 -107
- package/presets/Wind/toast/index.js +0 -111
- package/presets/Wind/togglebutton/index.js +0 -91
- package/presets/Wind/toolbar/index.js +0 -30
- package/presets/Wind/tooltip/index.js +0 -43
- package/presets/Wind/tree/index.js +0 -300
- package/presets/Wind/treeselect/index.js +0 -404
- package/presets/Wind/treetable/index.js +0 -505
- package/presets/Wind/tristatecheckbox/index.js +0 -118
|
@@ -3,15 +3,6 @@ import { LinkIcon } from "@heroicons/vue/24/solid";
|
|
|
3
3
|
import { computed, ref, toRef } from "vue";
|
|
4
4
|
import type { ErrorObject } from "@vuelidate/core";
|
|
5
5
|
import { useTranslation } from "../../composables/translations";
|
|
6
|
-
import InputText from "primevue/inputtext";
|
|
7
|
-
import Textarea from "primevue/textarea";
|
|
8
|
-
import Calendar from "primevue/calendar";
|
|
9
|
-
import Password from "primevue/password";
|
|
10
|
-
import Checkbox from "primevue/checkbox";
|
|
11
|
-
import Dropdown from "primevue/dropdown";
|
|
12
|
-
import Chips from "primevue/chips";
|
|
13
|
-
import InputSwitch from "primevue/inputswitch";
|
|
14
|
-
import InputMask from "primevue/inputmask";
|
|
15
6
|
|
|
16
7
|
type modelValueType = string | number | string[] | number[] | undefined;
|
|
17
8
|
|
|
@@ -62,20 +53,29 @@ const checkErrors = computed(() => {
|
|
|
62
53
|
return null;
|
|
63
54
|
});
|
|
64
55
|
|
|
65
|
-
const formattedOptions = computed(() => {
|
|
66
|
-
return props.options.map((option) => {
|
|
67
|
-
return { value: option[0], label: option[1] };
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
56
|
const focus = () => {
|
|
72
57
|
if (inputRef.value) inputRef.value.focus();
|
|
73
58
|
};
|
|
59
|
+
const blur = () => {
|
|
60
|
+
if (inputRef.value) inputRef.value.blur();
|
|
61
|
+
};
|
|
74
62
|
const getInputRef = () => {
|
|
75
63
|
if (inputRef.value) return inputRef.value;
|
|
76
64
|
};
|
|
77
65
|
|
|
78
|
-
const
|
|
66
|
+
const handleFocus = () => {
|
|
67
|
+
emit("focus", props.id);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const handleBlur = () => {
|
|
71
|
+
emit("blur", props.id);
|
|
72
|
+
};
|
|
73
|
+
const emit = defineEmits([
|
|
74
|
+
"update:modelValue",
|
|
75
|
+
"update:checkboxValue",
|
|
76
|
+
"focus",
|
|
77
|
+
"blur",
|
|
78
|
+
]);
|
|
79
79
|
const model = computed({
|
|
80
80
|
get: () => props.modelValue,
|
|
81
81
|
set: (items) => {
|
|
@@ -88,7 +88,7 @@ const modelCheckbox = computed({
|
|
|
88
88
|
emit("update:checkboxValue", items);
|
|
89
89
|
},
|
|
90
90
|
});
|
|
91
|
-
defineExpose({ focus, getInputRef });
|
|
91
|
+
defineExpose({ focus, blur, getInputRef });
|
|
92
92
|
</script>
|
|
93
93
|
<template>
|
|
94
94
|
<div>
|
|
@@ -112,148 +112,162 @@ defineExpose({ focus, getInputRef });
|
|
|
112
112
|
"
|
|
113
113
|
>
|
|
114
114
|
<div class="flex flex-col gap-2">
|
|
115
|
-
<
|
|
116
|
-
<!-- @vue-skip -->
|
|
117
|
-
<InputText
|
|
118
|
-
:id="id"
|
|
119
|
-
v-model="model"
|
|
120
|
-
:placeholder="placeholder"
|
|
121
|
-
:invalid="checkErrors ? true : false"
|
|
122
|
-
:pt:root:autocomplete="autocomplete"
|
|
123
|
-
:pt:root:type="type"
|
|
124
|
-
:aria-describedby="
|
|
125
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
126
|
-
? `${id}-help`
|
|
127
|
-
: undefined
|
|
128
|
-
"
|
|
115
|
+
<div
|
|
129
116
|
v-if="
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
:id="id"
|
|
140
|
-
v-model="model"
|
|
141
|
-
:placeholder="placeholder"
|
|
142
|
-
:invalid="checkErrors ? true : false"
|
|
143
|
-
:pt:root:autocomplete="autocomplete"
|
|
144
|
-
:pt:root:type="type"
|
|
145
|
-
:mask="mask"
|
|
146
|
-
:aria-describedby="
|
|
147
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
148
|
-
? `${id}-help`
|
|
149
|
-
: undefined
|
|
150
|
-
"
|
|
151
|
-
v-if="type == 'mask' || (type == 'text' && mask)"
|
|
152
|
-
/>
|
|
153
|
-
<!-- @vue-skip -->
|
|
154
|
-
<Textarea
|
|
155
|
-
:id="id"
|
|
156
|
-
v-model="model"
|
|
157
|
-
:placeholder="placeholder"
|
|
158
|
-
:invalid="checkErrors ? true : false"
|
|
159
|
-
:aria-describedby="
|
|
160
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
161
|
-
? `${id}-help`
|
|
162
|
-
: undefined
|
|
163
|
-
"
|
|
164
|
-
v-if="type == 'textarea'"
|
|
165
|
-
/>
|
|
166
|
-
<!-- @vue-skip -->
|
|
167
|
-
<Calendar
|
|
168
|
-
:id="id"
|
|
169
|
-
v-model="model"
|
|
170
|
-
:placeholder="placeholder"
|
|
171
|
-
:invalid="checkErrors ? true : false"
|
|
172
|
-
showIcon
|
|
173
|
-
iconDisplay="input"
|
|
174
|
-
:aria-describedby="
|
|
175
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
176
|
-
? `${id}-help`
|
|
177
|
-
: undefined
|
|
117
|
+
[
|
|
118
|
+
'text',
|
|
119
|
+
'phone',
|
|
120
|
+
'password',
|
|
121
|
+
'email',
|
|
122
|
+
'search',
|
|
123
|
+
'url',
|
|
124
|
+
'mask',
|
|
125
|
+
].includes(type)
|
|
178
126
|
"
|
|
179
|
-
|
|
180
|
-
/>
|
|
181
|
-
<!-- @vue-skip -->
|
|
182
|
-
<Calendar
|
|
183
|
-
:id="id"
|
|
184
|
-
v-model="model"
|
|
185
|
-
:placeholder="placeholder"
|
|
186
|
-
:invalid="checkErrors ? true : false"
|
|
187
|
-
showTime
|
|
188
|
-
hourFormat="24"
|
|
189
|
-
showIcon
|
|
190
|
-
:aria-describedby="
|
|
191
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
192
|
-
? `${id}-help`
|
|
193
|
-
: undefined
|
|
194
|
-
"
|
|
195
|
-
v-if="type == 'datetime'"
|
|
196
|
-
/>
|
|
197
|
-
<!-- @vue-skip -->
|
|
198
|
-
<Password
|
|
199
|
-
:id="id"
|
|
200
|
-
v-model="model"
|
|
201
|
-
:placeholder="placeholder"
|
|
202
|
-
:invalid="checkErrors ? true : false"
|
|
203
|
-
:aria-describedby="
|
|
204
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
205
|
-
? `${id}-help`
|
|
206
|
-
: undefined
|
|
207
|
-
"
|
|
208
|
-
toggleMask
|
|
209
|
-
v-if="type == 'password'"
|
|
210
|
-
/>
|
|
211
|
-
<!-- @vue-skip -->
|
|
212
|
-
<Dropdown
|
|
213
|
-
:id="id"
|
|
214
|
-
v-model="model"
|
|
215
|
-
:options="formattedOptions"
|
|
216
|
-
:placeholder="placeholder"
|
|
217
|
-
optionLabel="label"
|
|
218
|
-
optionValue="value"
|
|
219
|
-
:invalid="checkErrors ? true : false"
|
|
220
|
-
:aria-describedby="
|
|
221
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
222
|
-
? `${id}-help`
|
|
223
|
-
: undefined
|
|
224
|
-
"
|
|
225
|
-
v-if="type == 'select'"
|
|
226
|
-
/>
|
|
227
|
-
<!-- @vue-skip -->
|
|
228
|
-
<Chips
|
|
229
|
-
:id="id"
|
|
230
|
-
v-model="model"
|
|
231
|
-
:placeholder="placeholder"
|
|
232
|
-
separator=","
|
|
233
|
-
:invalid="checkErrors ? true : false"
|
|
234
|
-
:aria-describedby="
|
|
235
|
-
help && !['checkbox', 'radio'].includes(type)
|
|
236
|
-
? `${id}-help`
|
|
237
|
-
: undefined
|
|
238
|
-
"
|
|
239
|
-
v-if="type == 'chips'"
|
|
240
|
-
/>
|
|
241
|
-
<small
|
|
242
|
-
:id="`${id}-help`"
|
|
243
|
-
v-if="help && !['checkbox', 'radio'].includes(type)"
|
|
127
|
+
class="relative"
|
|
244
128
|
>
|
|
245
|
-
|
|
246
|
-
|
|
129
|
+
<input
|
|
130
|
+
ref="inputRef"
|
|
131
|
+
:type="type"
|
|
132
|
+
:id="id"
|
|
133
|
+
:name="id"
|
|
134
|
+
:class="{
|
|
135
|
+
error: checkErrors,
|
|
136
|
+
}"
|
|
137
|
+
:autocomplete="autocomplete"
|
|
138
|
+
:disabled="disabled"
|
|
139
|
+
:aria-describedby="help ? `${id}-help` : id"
|
|
140
|
+
class="block px-2.5 pb-2.5 pt-4 w-full text-sm text-fv-neutral-900 bg-transparent rounded-lg border-1 border-fv-neutral-300 appearance-none dark:text-white dark:border-fv-neutral-600 dark:focus:border-fv-primary-500 focus:outline-none focus:ring-0 focus:border-fv-primary-600 peer"
|
|
141
|
+
:required="req"
|
|
142
|
+
@focus="handleFocus"
|
|
143
|
+
@blur="handleBlur"
|
|
144
|
+
/>
|
|
145
|
+
<label
|
|
146
|
+
:for="id"
|
|
147
|
+
v-if="label || placeholder"
|
|
148
|
+
class="absolute text-sm text-fv-neutral-500 dark:text-fv-neutral-400 duration-300 transform -translate-y-4 scale-75 top-2 z-10 origin-[0] bg-white dark:bg-fv-neutral-900 px-2 peer-focus:px-2 peer-focus:text-fv-primary-600 peer-focus:dark:text-fv-primary-500 peer-placeholder-shown:scale-100 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:top-1/2 peer-focus:top-2 peer-focus:scale-75 peer-focus:-translate-y-4 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto start-1"
|
|
149
|
+
>{{ label ? label : placeholder }}
|
|
150
|
+
</label>
|
|
151
|
+
</div>
|
|
152
|
+
<div class="group relative" v-else-if="type == 'textarea'">
|
|
153
|
+
<label
|
|
154
|
+
:for="id"
|
|
155
|
+
class="block mb-2 text-sm font-medium text-fv-neutral-900 dark:text-white"
|
|
156
|
+
>Your message</label
|
|
157
|
+
>
|
|
158
|
+
<textarea
|
|
159
|
+
:id="id"
|
|
160
|
+
:name="id"
|
|
161
|
+
ref="inputRef"
|
|
162
|
+
:class="{
|
|
163
|
+
error: checkErrors,
|
|
164
|
+
}"
|
|
165
|
+
:placeholder="placeholder"
|
|
166
|
+
:disabled="disabled"
|
|
167
|
+
:aria-describedby="help ? `${id}-help` : id"
|
|
168
|
+
:required="req"
|
|
169
|
+
@focus="handleFocus"
|
|
170
|
+
@blur="handleBlur"
|
|
171
|
+
class="block p-2.5 w-full text-sm text-fv-neutral-900 bg-fv-neutral-50 rounded-lg border border-fv-neutral-300 focus:ring-fv-primary-500 focus:border-fv-primary-500 dark:bg-fv-neutral-700 dark:border-fv-neutral-600 dark:placeholder-fv-neutral-400 dark:text-white dark:focus:ring-fv-primary-500 dark:focus:border-fv-primary-500"
|
|
172
|
+
></textarea>
|
|
173
|
+
</div>
|
|
174
|
+
<div
|
|
175
|
+
class="relative max-w-sm"
|
|
176
|
+
v-else-if="type == 'datetime' || type == 'date'"
|
|
177
|
+
>
|
|
178
|
+
<div
|
|
179
|
+
class="absolute inset-y-0 start-0 flex items-center ps-3.5 pointer-events-none"
|
|
180
|
+
>
|
|
181
|
+
<svg
|
|
182
|
+
class="w-4 h-4 text-fv-neutral-500 dark:text-fv-neutral-400"
|
|
183
|
+
aria-hidden="true"
|
|
184
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
185
|
+
fill="currentColor"
|
|
186
|
+
viewBox="0 0 20 20"
|
|
187
|
+
>
|
|
188
|
+
<path
|
|
189
|
+
d="M20 4a2 2 0 0 0-2-2h-2V1a1 1 0 0 0-2 0v1h-3V1a1 1 0 0 0-2 0v1H6V1a1 1 0 0 0-2 0v1H2a2 2 0 0 0-2 2v2h20V4ZM0 18a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8H0v10Zm5-8h10a1 1 0 0 1 0 2H5a1 1 0 0 1 0-2Z"
|
|
190
|
+
/>
|
|
191
|
+
</svg>
|
|
192
|
+
</div>
|
|
193
|
+
<label
|
|
194
|
+
:for="id"
|
|
195
|
+
v-if="label"
|
|
196
|
+
class="block mb-2 text-sm font-medium text-fv-neutral-900 dark:text-white"
|
|
197
|
+
>{{ label }}</label
|
|
198
|
+
>
|
|
199
|
+
|
|
200
|
+
<input
|
|
201
|
+
datepicker
|
|
202
|
+
ref="inputRef"
|
|
203
|
+
type="text"
|
|
204
|
+
:class="{
|
|
205
|
+
error: checkErrors,
|
|
206
|
+
}"
|
|
207
|
+
class="bg-fv-neutral-50 border border-fv-neutral-300 text-fv-neutral-900 text-sm rounded-lg focus:ring-fv-primary-500 focus:border-fv-primary-500 block w-full ps-10 p-2.5 dark:bg-fv-neutral-700 dark:border-fv-neutral-600 dark:placeholder-fv-neutral-400 dark:text-white dark:focus:ring-fv-primary-500 dark:focus:border-fv-primary-500"
|
|
208
|
+
:id="id"
|
|
209
|
+
:name="id"
|
|
210
|
+
:disabled="disabled"
|
|
211
|
+
:aria-describedby="help ? `${id}-help` : id"
|
|
212
|
+
:required="req"
|
|
213
|
+
@focus="handleFocus"
|
|
214
|
+
@blur="handleBlur"
|
|
215
|
+
:placeholder="placeholder"
|
|
216
|
+
/>
|
|
217
|
+
</div>
|
|
218
|
+
<div class="relative" v-else-if="type == 'select'">
|
|
219
|
+
<label
|
|
220
|
+
:for="id"
|
|
221
|
+
v-if="label"
|
|
222
|
+
class="block mb-2 text-sm font-medium text-fv-neutral-900 dark:text-white"
|
|
223
|
+
>{{ label }}</label
|
|
224
|
+
>
|
|
225
|
+
<select
|
|
226
|
+
:id="id"
|
|
227
|
+
:name="id"
|
|
228
|
+
ref="inputRef"
|
|
229
|
+
:disabled="disabled"
|
|
230
|
+
:aria-describedby="help ? `${id}-help` : id"
|
|
231
|
+
:required="req"
|
|
232
|
+
@focus="handleFocus"
|
|
233
|
+
@blur="handleBlur"
|
|
234
|
+
:class="{
|
|
235
|
+
error: checkErrors,
|
|
236
|
+
}"
|
|
237
|
+
class="bg-fv-neutral-50 border border-fv-neutral-300 text-fv-neutral-900 text-sm rounded-lg focus:ring-fv-primary-500 focus:border-fv-primary-500 block w-full p-2.5 dark:bg-fv-neutral-700 dark:border-fv-neutral-600 dark:placeholder-fv-neutral-400 dark:text-white dark:focus:ring-fv-primary-500 dark:focus:border-fv-primary-500"
|
|
238
|
+
>
|
|
239
|
+
<option
|
|
240
|
+
v-for="opt in options"
|
|
241
|
+
:value="opt[0]"
|
|
242
|
+
:key="opt[0].toString()"
|
|
243
|
+
>
|
|
244
|
+
{{ opt[1] }}
|
|
245
|
+
</option>
|
|
246
|
+
</select>
|
|
247
|
+
</div>
|
|
247
248
|
</div>
|
|
248
249
|
</template>
|
|
249
250
|
<template v-else-if="type === 'toggle'">
|
|
250
|
-
<label
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
<label
|
|
252
|
+
class="inline-flex items-center mb-5 cursor-pointer"
|
|
253
|
+
:class="{
|
|
254
|
+
error: checkErrors,
|
|
255
|
+
}"
|
|
256
|
+
>
|
|
257
|
+
<input
|
|
258
|
+
type="checkbox"
|
|
259
|
+
v-model="modelCheckbox"
|
|
260
|
+
class="sr-only peer"
|
|
261
|
+
@focus="handleFocus"
|
|
262
|
+
@blur="handleBlur"
|
|
263
|
+
/>
|
|
264
|
+
<div
|
|
265
|
+
class="relative w-11 h-6 bg-fv-neutral-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-fv-primary-300 dark:peer-focus:ring-fv-primary-800 rounded-full peer dark:bg-fv-neutral-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-fv-neutral-300 after:border after:rounded-full after:w-5 after:h-5 after:transition-all dark:border-fv-neutral-600 peer-checked:bg-fv-primary-600"
|
|
266
|
+
></div>
|
|
254
267
|
<span
|
|
255
|
-
class="ms-3 font-medium text-fv-neutral-900 dark:text-fv-neutral-300"
|
|
256
|
-
|
|
268
|
+
class="ms-3 text-sm font-medium text-fv-neutral-900 dark:text-fv-neutral-300"
|
|
269
|
+
>
|
|
270
|
+
{{ label }}
|
|
257
271
|
<template v-if="help">
|
|
258
272
|
<p class="text-fv-neutral-600 dark:text-fv-neutral-400 !text-sm">
|
|
259
273
|
{{ help }}
|
|
@@ -262,80 +276,57 @@ defineExpose({ focus, getInputRef });
|
|
|
262
276
|
</span>
|
|
263
277
|
</label>
|
|
264
278
|
</template>
|
|
265
|
-
<template v-else-if="type == 'checkbox'">
|
|
266
|
-
<div class="flex
|
|
267
|
-
<
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
279
|
+
<template v-else-if="type == 'checkbox' || type == 'radio'">
|
|
280
|
+
<div class="flex mb-4">
|
|
281
|
+
<div class="flex items-center h-5">
|
|
282
|
+
<input
|
|
283
|
+
:id="id"
|
|
284
|
+
:class="{
|
|
285
|
+
error: checkErrors,
|
|
286
|
+
}"
|
|
287
|
+
:aria-describedby="help ? `${id}-help` : id"
|
|
288
|
+
:type="type"
|
|
289
|
+
@focus="handleFocus"
|
|
290
|
+
@blur="handleBlur"
|
|
291
|
+
v-model="modelCheckbox"
|
|
292
|
+
class="w-4 h-4 text-fv-primary-600 bg-fv-neutral-100 border-fv-neutral-300 rounded focus:ring-fv-primary-500 dark:focus:ring-fv-primary-600 dark:ring-offset-fv-neutral-800 dark:focus:ring-offset-fv-neutral-800 focus:ring-2 dark:bg-fv-neutral-700 dark:border-fv-neutral-600"
|
|
293
|
+
/>
|
|
294
|
+
</div>
|
|
295
|
+
<div class="ms-2 text-sm">
|
|
296
|
+
<label
|
|
297
|
+
:for="id"
|
|
298
|
+
class="font-medium text-gray-900 dark:text-gray-300"
|
|
299
|
+
>{{ label }}</label
|
|
300
|
+
>
|
|
301
|
+
<p
|
|
302
|
+
:id="`${id}-help`"
|
|
303
|
+
v-if="help"
|
|
304
|
+
class="text-xs font-normal text-gray-500 dark:text-gray-400"
|
|
305
|
+
>
|
|
306
|
+
{{ help }}
|
|
307
|
+
</p>
|
|
308
|
+
</div>
|
|
284
309
|
</div>
|
|
285
310
|
</template>
|
|
286
|
-
<p v-if="checkErrors" class="mt-0.5 text-
|
|
311
|
+
<p v-if="checkErrors" class="mt-0.5 text-sm text-red-600 dark:text-red-300">
|
|
287
312
|
{{ checkErrors }}
|
|
288
313
|
</p>
|
|
289
314
|
|
|
290
315
|
<p
|
|
291
|
-
|
|
292
|
-
|
|
316
|
+
:id="`${id}-help`"
|
|
317
|
+
class="mt-1 text-sm text-fv-neutral-500 dark:text-fv-neutral-400"
|
|
318
|
+
v-if="help && !['checkbox', 'radio', 'toggle'].includes(type)"
|
|
293
319
|
>
|
|
294
320
|
{{ help }}
|
|
295
321
|
</p>
|
|
296
322
|
</div>
|
|
297
323
|
</template>
|
|
298
324
|
<style scoped>
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
&.error {
|
|
303
|
-
@apply text-red-700 dark:text-red-500;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
.fws-input-helper {
|
|
307
|
-
@apply mt-2 text-sm text-fv-neutral-500 dark:text-fv-neutral-400;
|
|
308
|
-
}
|
|
309
|
-
.fws-input {
|
|
310
|
-
@apply shadow-sm bg-fv-neutral-50 border border-fv-neutral-300 text-fv-neutral-900 text-sm rounded-sm focus:ring-fv-primary-500 focus:border-fv-primary-500 block w-full p-2.5 dark:bg-fv-neutral-700 dark:border-fv-neutral-600 dark:placeholder-fv-neutral-400 dark:text-white dark:focus:ring-fv-primary-500 dark:focus:border-fv-primary-500;
|
|
311
|
-
&.error {
|
|
312
|
-
@apply bg-red-50 border border-red-500 text-red-900 placeholder-red-700 text-sm rounded-sm focus:ring-red-500 focus:border-red-500 block w-full p-2.5 dark:bg-red-100 dark:border-red-400;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
.fws-textarea {
|
|
316
|
-
@apply block p-2.5 w-full text-sm text-fv-neutral-900 bg-fv-neutral-50 rounded-sm border border-fv-neutral-300 focus:ring-fv-primary-500 focus:border-fv-primary-500 dark:bg-fv-neutral-700 dark:border-fv-neutral-600 dark:placeholder-fv-neutral-400 dark:text-white dark:focus:ring-fv-primary-500 dark:focus:border-fv-primary-500;
|
|
317
|
-
&.error {
|
|
318
|
-
@apply bg-red-50 border border-red-500 text-red-900 placeholder-red-700 text-sm rounded-sm focus:ring-red-500 focus:border-red-500 block w-full p-2.5 dark:bg-red-100 dark:border-red-400;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
.fws-select {
|
|
323
|
-
@apply bg-fv-neutral-50 border border-fv-neutral-300 text-fv-neutral-900 text-sm rounded-sm focus:ring-fv-primary-500 focus:border-fv-primary-500 block w-full p-2.5 dark:bg-fv-neutral-700 dark:border-fv-neutral-600 dark:placeholder-fv-neutral-400 dark:text-white dark:focus:ring-fv-primary-500 dark:focus:border-fv-primary-500;
|
|
325
|
+
input,
|
|
326
|
+
textarea,
|
|
327
|
+
select {
|
|
324
328
|
&.error {
|
|
325
|
-
@apply
|
|
329
|
+
@apply border-red-500 dark:border-red-400;
|
|
326
330
|
}
|
|
327
331
|
}
|
|
328
|
-
.fws-checkbox {
|
|
329
|
-
@apply flex items-center mb-4;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
.fws-checkbox input {
|
|
333
|
-
@apply w-4 h-4 text-fv-primary-600 bg-fv-neutral-100 border-fv-neutral-300 rounded focus:ring-fv-primary-500 dark:focus:ring-fv-primary-600 dark:ring-offset-fv-neutral-800 dark:focus:ring-offset-fv-neutral-800 focus:ring-2 dark:bg-fv-neutral-700 dark:border-fv-neutral-600;
|
|
334
|
-
&.error {
|
|
335
|
-
@apply bg-red-50 border border-red-500 text-red-900 placeholder-red-700 text-sm rounded-sm focus:ring-red-500 focus:border-red-500 block w-full p-2.5 dark:bg-red-100 dark:border-red-400;
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
.fws-checkbox label {
|
|
339
|
-
@apply ml-2 text-sm font-medium text-fv-neutral-900 dark:text-fv-neutral-300;
|
|
340
|
-
}
|
|
341
332
|
</style>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fy-/fws-vue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"author": "Florian 'Fy' Gasquez <m@fy.to>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -24,16 +24,6 @@
|
|
|
24
24
|
"./style.css": {
|
|
25
25
|
"import": "./style.css",
|
|
26
26
|
"require": "./style.css"
|
|
27
|
-
},
|
|
28
|
-
"./presets/Lara": {
|
|
29
|
-
"import": "./presets/Lara/index.js",
|
|
30
|
-
"require": "./presets/Lara/index.js",
|
|
31
|
-
"types": "./presets/Lara/index.js"
|
|
32
|
-
},
|
|
33
|
-
"./presets/Wind": {
|
|
34
|
-
"import": "./presets/Wind/index.js",
|
|
35
|
-
"require": "./presets/Wind/index.js",
|
|
36
|
-
"types": "./presets/Wind/index.js"
|
|
37
27
|
}
|
|
38
28
|
},
|
|
39
29
|
"peerDependencies": {
|
|
@@ -48,6 +38,6 @@
|
|
|
48
38
|
"timeago.js": "^4.0.x",
|
|
49
39
|
"vue": "^3.3.x",
|
|
50
40
|
"vue-router": "^4.1.x",
|
|
51
|
-
"
|
|
41
|
+
"flowbite": "^2.3.x"
|
|
52
42
|
}
|
|
53
43
|
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
accordiontab: {
|
|
3
|
-
root: {
|
|
4
|
-
class: "mb-1",
|
|
5
|
-
},
|
|
6
|
-
header: ({ props }) => ({
|
|
7
|
-
class: [
|
|
8
|
-
// State
|
|
9
|
-
{
|
|
10
|
-
"select-none pointer-events-none cursor-default opacity-60":
|
|
11
|
-
props?.disabled,
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
}),
|
|
15
|
-
headerAction: ({ context }) => ({
|
|
16
|
-
class: [
|
|
17
|
-
// Font
|
|
18
|
-
"font-bold",
|
|
19
|
-
"leading-none",
|
|
20
|
-
|
|
21
|
-
// Alignments
|
|
22
|
-
"flex items-center",
|
|
23
|
-
"relative",
|
|
24
|
-
|
|
25
|
-
// Sizing
|
|
26
|
-
"p-5",
|
|
27
|
-
|
|
28
|
-
// Shape
|
|
29
|
-
"rounded-t-md",
|
|
30
|
-
{
|
|
31
|
-
"rounded-br-md rounded-bl-md": !context.active,
|
|
32
|
-
"rounded-br-0 rounded-bl-0": context.active,
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
// Color
|
|
36
|
-
"border border-surface-200 dark:border-surface-700",
|
|
37
|
-
"bg-surface-50 dark:bg-surface-800",
|
|
38
|
-
"text-surface-600 dark:text-surface-0/80",
|
|
39
|
-
{ "text-surface-900": context.active },
|
|
40
|
-
|
|
41
|
-
// Transition
|
|
42
|
-
"transition duration-200 ease-in-out",
|
|
43
|
-
"transition-shadow duration-200",
|
|
44
|
-
|
|
45
|
-
// States
|
|
46
|
-
"hover:bg-surface-100 dark:hover:bg-surface-700/40",
|
|
47
|
-
"hover:text-surface-900",
|
|
48
|
-
"focus:outline-none focus:outline-offset-0 focus-visible:ring focus-visible:ring-primary-400/50 ring-inset dark:focus-visible:ring-primary-300/50", // Focus
|
|
49
|
-
|
|
50
|
-
// Misc
|
|
51
|
-
"cursor-pointer no-underline select-none",
|
|
52
|
-
],
|
|
53
|
-
}),
|
|
54
|
-
headerIcon: {
|
|
55
|
-
class: "inline-block mr-2",
|
|
56
|
-
},
|
|
57
|
-
headerTitle: {
|
|
58
|
-
class: "leading-none",
|
|
59
|
-
},
|
|
60
|
-
content: {
|
|
61
|
-
class: [
|
|
62
|
-
// Spacing
|
|
63
|
-
"p-5",
|
|
64
|
-
|
|
65
|
-
// Shape
|
|
66
|
-
"rounded-tl-none rounded-tr-none rounded-br-lg rounded-bl-lg",
|
|
67
|
-
"border-t-0",
|
|
68
|
-
|
|
69
|
-
// Color
|
|
70
|
-
"bg-surface-0 dark:bg-surface-800",
|
|
71
|
-
"border border-surface-200 dark:border-surface-700",
|
|
72
|
-
"text-surface-700 dark:text-surface-0/80",
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
transition: {
|
|
76
|
-
enterFromClass: "max-h-0",
|
|
77
|
-
enterActiveClass:
|
|
78
|
-
"overflow-hidden transition-[max-height] duration-1000 ease-[cubic-bezier(0.42,0,0.58,1)]",
|
|
79
|
-
enterToClass: "max-h-[1000px]",
|
|
80
|
-
leaveFromClass: "max-h-[1000px]",
|
|
81
|
-
leaveActiveClass:
|
|
82
|
-
"overflow-hidden transition-[max-height] duration-[450ms] ease-[cubic-bezier(0,1,0,1)]",
|
|
83
|
-
leaveToClass: "max-h-0",
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
};
|