@vue-interface/select-field
Version:
A Vue select field component.
152 lines (151 loc) • 5.48 kB
JavaScript
import { defineComponent as N, mergeModels as V, useModel as x, useTemplateRef as d, onMounted as E, useSlots as P, createElementBlock as m, openBlock as s, normalizeClass as g, unref as t, renderSlot as r, createElementVNode as n, createCommentVNode as c, toDisplayString as v, normalizeProps as y, guardReactiveProps as b, withDirectives as D, mergeProps as R, vModelSelect as G, createVNode as w, Transition as I, withCtx as h, createBlock as T, createTextVNode as U } from "vue";
import { ActivityIndicator as j } from "@vue-interface/activity-indicator";
import { useFormControl as q, FormControlErrors as H, FormControlFeedback as J } from "@vue-interface/form-control";
const K = ["for"], L = { class: "form-control-inner" }, O = { class: "form-control-activity-indicator" }, Q = {
invalid: "",
class: "invalid-feedback"
}, W = {
valid: "",
class: "valid-feedback"
}, _ = /* @__PURE__ */ N({
inheritAttrs: !1,
__name: "SelectField",
props: /* @__PURE__ */ V({
activity: { type: Boolean },
disabled: { type: Boolean },
error: {},
errors: {},
feedback: {},
formControlClass: { default: "form-select" },
helpText: {},
id: {},
indicator: {},
indicatorSize: {},
invalid: { type: Boolean },
label: {},
labelClass: { default: "form-label" },
modelValue: {},
name: {},
plaintext: { type: Boolean },
size: { default: "form-select-md" },
color: {},
readonly: { type: Boolean },
valid: { type: Boolean },
value: {}
}, {
modelValue: {},
modelModifiers: {}
}),
emits: /* @__PURE__ */ V(["blur", "focus", "focusin", "focusout", "click", "doubleclick", "contextmenu", "mousedown", "mouseup", "mouseover", "mouseout", "mouseenter", "mouseleave", "mousemove", "keydown", "keyup", "keypress", "select", "selectionchange", "invalid", "submit", "reset", "scroll", "wheel", "copy", "cut", "paste", "touchstart", "touchend", "touchmove", "touchcancel", "change", "input", "beforeinput"], ["update:modelValue"]),
setup(e, { expose: z, emit: F }) {
const u = e, f = x(e, "modelValue"), M = F, {
controlAttributes: k,
formGroupClasses: A,
listeners: p
} = q({ model: f, props: u, emit: M }), C = d("activity"), $ = d("help"), S = d("label"), a = d("field"), B = d("wrapper");
return z({
activity: C,
help: $,
field: a,
label: S,
wrapper: B,
focus: () => a.value?.focus(),
blur: () => a.value?.blur()
}), E(() => {
const o = P().default;
if (o)
for (const l of o()) {
if (!l.props)
return;
"selected" in l.props && (l.props.value ?? l.children) && (f.value = l.props.value ?? l.children);
}
}), (o, l) => (s(), m("div", {
ref_key: "wrapper",
ref: B,
class: g(["select-field", t(A)])
}, [
r(o.$slots, "label", {}, () => [
u.label ? (s(), m("label", {
key: 0,
ref_key: "label",
ref: S,
for: t(k).id,
class: g(e.labelClass),
onClick: l[0] || (l[0] = (i) => a.value?.click())
}, v(u.label), 11, K)) : c("", !0)
]),
n("div", L, [
r(o.$slots, "control", y(b({ controlAttributes: t(k), listeners: t(p) })), () => [
o.$slots.icon ? (s(), m("div", {
key: 0,
class: "form-control-inner-icon",
onClick: l[1] || (l[1] = (i) => a.value?.focus())
}, [
r(o.$slots, "icon")
])) : c("", !0),
D(n("select", R({
ref_key: "field",
ref: a,
"onUpdate:modelValue": l[2] || (l[2] = (i) => f.value = i)
}, { ...t(k), ...t(p) }), [
r(o.$slots, "default")
], 16), [
[G, f.value]
])
]),
n("div", O, [
r(o.$slots, "activity", {}, () => [
w(I, { name: "select-field-fade" }, {
default: h(() => [
u.activity && e.indicator ? (s(), T(t(j), {
key: "activity",
ref_key: "activity",
ref: C,
type: e.indicator,
size: e.indicatorSize
}, null, 8, ["type", "size"])) : c("", !0)
]),
_: 1
})
])
])
]),
r(o.$slots, "errors", y(b({ error: e.error, errors: e.errors, id: e.id, name: e.name })), () => [
e.error || e.errors ? (s(), T(t(H), {
key: 0,
id: e.id && String(e.id),
name: e.name && String(e.name),
error: e.error,
errors: e.errors
}, {
default: h(({ error: i }) => [
n("div", Q, [
U(v(i), 1),
l[3] || (l[3] = n("br", null, null, -1))
])
]),
_: 1
}, 8, ["id", "name", "error", "errors"])) : c("", !0)
]),
r(o.$slots, "feedback", y(b({ feedback: e.feedback })), () => [
w(t(J), { feedback: e.feedback }, {
default: h(({ feedback: i }) => [
n("div", W, v(i), 1)
]),
_: 1
}, 8, ["feedback"])
]),
r(o.$slots, "help", y(b({ helpText: e.helpText })), () => [
e.helpText ? (s(), m("small", {
key: 0,
ref_key: "help",
ref: $
}, v(e.helpText), 513)) : c("", !0)
])
], 2));
}
});
export {
_ as SelectField
};
//# sourceMappingURL=select-field.js.map