import { defineComponent as N, createBlock as P, openBlock as p, mergeProps as oe, withCtx as z, renderSlot as ie, computed as A, ref as w, createElementBlock as k, createCommentVNode as J, createSlots as Le, createVNode as V, createTextVNode as pe, toDisplayString as Y, Fragment as K, renderList as ee, resolveComponent as H, createElementVNode as B, h as Ae, watch as le, withDirectives as He, withKeys as Ye, vModelText as Fe, normalizeStyle as ge, resolveDynamicComponent as ye, normalizeClass as se, withModifiers as De, Teleport as Re, onMounted as We, onBeforeUnmount as Je } from "vue"; import { VBtn as Ze } from "vuetify/components/VBtn"; import { VBadge as Xe } from "vuetify/components/VBadge"; import { VCheckbox as Ge } from "vuetify/components/VCheckbox"; import { VIcon as Ke } from "vuetify/components/VIcon"; import { VRadio as Qe } from "vuetify/components/VRadio"; import { VRadioGroup as xe } from "vuetify/components/VRadioGroup"; import { VSelect as ea } from "vuetify/components/VSelect"; import { VTextField as Pe } from "vuetify/components/VTextField"; import { VTextarea as aa } from "vuetify/components/VTextarea"; import { VCard as Te, VCardTitle as Oe, VCardText as qe, VCardActions as Ie } from "vuetify/components/VCard"; import { VContainer as ta } from "vuetify/components/VGrid"; const oa = N({ name: "EliBotao", inheritAttrs: !1, props: { color: { type: String, default: "primary" }, variant: { type: String, default: "elevated" }, size: { type: String, default: "default" }, disabled: { type: Boolean, default: !1 }, loading: { type: Boolean, default: !1 } } }), j = (e, a) => { const u = e.__vccOpts || e; for (const [i, c] of a) u[i] = c; return u; }; function ra(e, a, u, i, c, m) { return p(), P(Ze, oe({ color: e.color, variant: e.variant, size: e.size, disabled: e.disabled, loading: e.loading }, e.$attrs, { class: "eli-botao text-none pt-1" }), { default: z(() => [ ie(e.$slots, "default") ]), _: 3 }, 16, ["color", "variant", "size", "disabled", "loading"]); } const Ue = /* @__PURE__ */ j(oa, [["render", ra]]), Ee = { suave: "4px", pill: "10px" }, na = N({ name: "EliBadge", inheritAttrs: !1, props: { color: { type: String, default: "primary" }, location: { type: String, default: "top right" }, offsetX: { type: String, default: "0" }, offsetY: { type: String, default: "0" }, dot: { type: Boolean, default: !1 }, visible: { type: Boolean, default: !0 }, badge: { type: [String, Number], default: void 0 }, /** 🔥 NOVO: controla só o radius */ radius: { type: String, default: "suave" } }, setup(e) { const a = A(() => e.radius in Ee ? Ee[e.radius] : e.radius), u = A(() => e.dot || e.badge !== void 0 ? e.visible : !1), i = A(() => ({ "--eli-badge-radius": a.value })); return { showBadge: u, badgeStyle: i }; } }); function la(e, a, u, i, c, m) { return e.showBadge ? (p(), P(Xe, oe({ key: 0, color: e.color }, e.$attrs, { location: e.location, "offset-x": e.offsetX, "offset-y": e.offsetY, dot: e.dot, content: e.badge, style: e.badgeStyle, class: "eli-badge" }), { default: z(() => [ ie(e.$slots, "default", {}, void 0, !0) ]), _: 3 }, 16, ["color", "location", "offset-x", "offset-y", "dot", "content", "style"])) : ie(e.$slots, "default", { key: 1 }, void 0, !0); } const Ce = /* @__PURE__ */ j(na, [["render", la], ["__scopeId", "data-v-371c8db4"]]); function ia(e) { return e.replace(/\D+/g, ""); } function sa(e) { const a = ia(e); return a.length <= 11 ? a.replace(/(\d{3})(\d)/, "$1.$2").replace(/(\d{3})(\d)/, "$1.$2").replace(/(\d{3})(\d{1,2})$/, "$1-$2").slice(0, 14) : a.replace(/^(\d{2})(\d)/, "$1.$2").replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3").replace(/\.(\d{3})(\d)/, ".$1/$2").replace(/(\d{4})(\d)/, "$1-$2").slice(0, 18); } function ua(e) { return e.replace(/\D+/g, ""); } function da(e) { const a = ua(e); return a ? a.length <= 10 ? a.replace(/^(\d{2})(\d)/, "($1) $2").replace(/(\d{4})(\d)/, "$1-$2").slice(0, 14) : a.replace(/^(\d{2})(\d)/, "($1) $2").replace(/(\d{5})(\d)/, "$1-$2").slice(0, 15) : ""; } function Ve(e) { return e.replace(/\D+/g, ""); } function Ne(e) { const a = e.replace(/[^\d,]/g, ""), u = a.split(","); return u.length > 2 ? u[0] + "," + u.slice(1).join("") : a; } function ca(e) { return Ne(e.replace(/%/g, "")); } function ma(e) { const a = Ve(e); return a ? (parseInt(a, 10) / 100).toFixed(2).replace(".", ",").replace(/\B(?=(\d{3})+(?!\d))/g, ".") : ""; } function pa(e) { const a = Ve(e).slice(0, 8); return a.length <= 5 ? a : a.replace(/^(\d{5})(\d{1,3})$/, "$1-$2"); } const fa = N({ name: "EliInput", inheritAttrs: !1, props: { /** * Aceita valor simples (text-like) ou lista de valores (checkbox/select multiple). * O componente não converte tipos automaticamente: mantém o que receber. */ modelValue: { type: [String, Number, Boolean, Array], default: "" }, type: { type: String, default: "text" }, label: String, placeholder: String, disabled: Boolean, error: Boolean, errorMessages: { type: [String, Array], default: () => [] }, hint: String, persistentHint: Boolean, rows: { type: Number, default: 4 }, /** * Para select/radio/checkbox. * Aceita lista já normalizada ({ label, value }) ou valores primitivos. */ options: { type: Array, default: () => [] }, clearable: Boolean, variant: { type: String, default: "outlined" }, density: { type: String, default: "comfortable" }, color: { type: String, default: "primary" }, row: Boolean, showPasswordToggle: Boolean, multiple: Boolean, chips: Boolean }, emits: ["update:modelValue", "change", "focus", "blur"], setup(e, { emit: a, attrs: u }) { const i = w(!1), c = w(!1), m = A({ get: () => e.modelValue, set: (y) => { a("update:modelValue", y), a("change", y); } }), n = A( () => [ "text", "password", "email", "search", "url", "telefone", "cpfCnpj", "numericoInteiro", "numericoDecimal", "numericoMoeda", "porcentagem", "cep" ].includes(e.type) ), s = A( () => e.type === "password" ? c.value ? "text" : "password" : "text" ), $ = A(() => { if (e.type === "telefone") return "tel"; if (e.type === "porcentagem") return "decimal"; if (e.type.startsWith("numerico")) return "numeric"; }), r = A( () => e.error ? "error" : i.value ? e.color : void 0 ); function h(y) { const q = y.target; let _ = q.value; switch (e.type) { case "numericoInteiro": _ = Ve(_); break; case "numericoDecimal": _ = Ne(_); break; case "numericoMoeda": _ = ma(_); break; case "porcentagem": _ = ca(_); break; case "telefone": _ = da(_); break; case "cpfCnpj": _ = sa(_); break; case "cep": _ = pa(_); break; } q.value = _, a("update:modelValue", _), a("change", _); } function g() { c.value = !c.value; } const T = A(() => (e.options || []).map((y) => { if (y && typeof y == "object" && "value" in y) { const _ = y.value; return { label: y.label ?? String(_), value: _, disabled: y.disabled }; } const q = y; return { label: String(q), value: q }; })); return { attrs: u, value: m, isTextLike: n, inputHtmlType: s, inputMode: $, internalColor: r, showPassword: c, togglePassword: g, onInput: h, onFocus: () => a("focus"), onBlur: () => a("blur"), computedItems: T }; } }), ba = { class: "eli-input" }, va = { key: 4, class: "checkbox-group" }; function ha(e, a, u, i, c, m) { return p(), k("div", ba, [ e.isTextLike ? (p(), P(Pe, oe({ key: 0, modelValue: e.value, "onUpdate:modelValue": a[0] || (a[0] = (n) => e.value = n), type: e.inputHtmlType, label: e.label, placeholder: e.placeholder, disabled: e.disabled, clearable: e.clearable && e.type !== "password", error: e.error, "error-messages": e.errorMessages, hint: e.hint, "persistent-hint": e.persistentHint, density: e.density, variant: e.variant, color: e.internalColor, inputmode: e.inputMode, suffix: e.type === "porcentagem" ? "%" : void 0 }, e.attrs, { onFocus: e.onFocus, onBlur: e.onBlur, onInput: e.onInput }), Le({ _: 2 }, [ e.type === "password" && e.showPasswordToggle ? { name: "append-inner", fn: z(() => [ V(Ke, { class: "cursor-pointer", onClick: e.togglePassword }, { default: z(() => [ pe(Y(e.showPassword ? "mdi-eye-off" : "mdi-eye"), 1) ]), _: 1 }, 8, ["onClick"]) ]), key: "0" } : void 0 ]), 1040, ["modelValue", "type", "label", "placeholder", "disabled", "clearable", "error", "error-messages", "hint", "persistent-hint", "density", "variant", "color", "inputmode", "suffix", "onFocus", "onBlur", "onInput"])) : e.type === "textarea" ? (p(), P(aa, oe({ key: 1, modelValue: e.value, "onUpdate:modelValue": a[1] || (a[1] = (n) => e.value = n), label: e.label, rows: e.rows, density: e.density, variant: e.variant }, e.attrs), null, 16, ["modelValue", "label", "rows", "density", "variant"])) : e.type === "select" ? (p(), P(ea, oe({ key: 2, modelValue: e.value, "onUpdate:modelValue": a[2] || (a[2] = (n) => e.value = n), items: e.computedItems, label: e.label, placeholder: e.placeholder, multiple: e.multiple, chips: e.chips, clearable: e.clearable, disabled: e.disabled, density: e.density, variant: e.variant, "item-title": "label", "item-value": "value", error: e.error, "error-messages": e.errorMessages }, e.attrs, { onFocus: e.onFocus, onBlur: e.onBlur }), null, 16, ["modelValue", "items", "label", "placeholder", "multiple", "chips", "clearable", "disabled", "density", "variant", "error", "error-messages", "onFocus", "onBlur"])) : e.type === "radio" ? (p(), P(xe, { key: 3, modelValue: e.value, "onUpdate:modelValue": a[3] || (a[3] = (n) => e.value = n), row: e.row }, { default: z(() => [ (p(!0), k(K, null, ee(e.computedItems, (n) => (p(), P(Qe, { key: String(n.value), label: n.label, value: n.value }, null, 8, ["label", "value"]))), 128)) ]), _: 1 }, 8, ["modelValue", "row"])) : e.type === "checkbox" ? (p(), k("div", va, [ (p(!0), k(K, null, ee(e.computedItems, (n) => (p(), P(Ge, { key: String(n.value), modelValue: e.value, "onUpdate:modelValue": a[4] || (a[4] = (s) => e.value = s), label: n.label, value: n.value, density: e.density }, null, 8, ["modelValue", "label", "value", "density"]))), 128)) ])) : J("", !0) ]); } const je = /* @__PURE__ */ j(fa, [["render", ha], ["__scopeId", "data-v-756cb549"]]), ga = N({ name: "EliOlaMundo", components: { EliBotao: Ue, EliBadge: Ce, EliInput: je }, setup() { const e = w(""), a = w([]), u = w(""), i = w(""), c = w(""), m = w(""), n = w(""), s = w(""), $ = w(""), r = w(""), h = w(""), g = w(null), T = w([]); return { nome: e, email: s, documento: h, estado: a, telefone: i, mensagem: $, senha: r, cor: g, habilidades: T, idade: c, altura: m, cep: u, valor: n }; } }), ya = { class: "grid-example" }; function $a(e, a, u, i, c, m) { const n = H("EliBadge"), s = H("EliInput"), $ = H("EliBotao"); return p(), P(ta, null, { default: z(() => [ V(Te, { class: "mx-auto", max_width: "400" }, { default: z(() => [ V(Oe, null, { default: z(() => [ V(n, { badge: "Novo", "offset-x": "-15", location: "right center" }, { default: z(() => [...a[14] || (a[14] = [ pe(" Olá Mundo! ", -1) ])]), _: 1 }) ]), _: 1 }), V(qe, null, { default: z(() => [ a[15] || (a[15] = pe(" Este é um componente de exemplo integrado com Vuetify. ", -1)), B("div", ya, [ V(s, { modelValue: e.nome, "onUpdate:modelValue": a[0] || (a[0] = (r) => e.nome = r), label: "Nome", placeholder: "Digite o nome", density: "compact" }, null, 8, ["modelValue"]), V(s, { modelValue: e.idade, "onUpdate:modelValue": a[1] || (a[1] = (r) => e.idade = r), type: "numericoInteiro", label: "Idade", density: "default" }, null, 8, ["modelValue"]), V(s, { modelValue: e.altura, "onUpdate:modelValue": a[2] || (a[2] = (r) => e.altura = r), type: "numericoDecimal", label: "Altura", density: "comfortable" }, null, 8, ["modelValue"]), V(s, { modelValue: e.valor, "onUpdate:modelValue": a[3] || (a[3] = (r) => e.valor = r), type: "numericoMoeda", label: "Valor" }, null, 8, ["modelValue"]), V(s, { modelValue: e.telefone, "onUpdate:modelValue": a[4] || (a[4] = (r) => e.telefone = r), type: "telefone", label: "Telefone" }, null, 8, ["modelValue"]), V(s, { modelValue: e.cep, "onUpdate:modelValue": a[5] || (a[5] = (r) => e.cep = r), type: "cep", label: "CEP", placeholder: "00000-000" }, null, 8, ["modelValue"]), V(s, { type: "select", label: "Estado", options: [ { label: "São Paulo", value: "SP" }, { label: "Rio de Janeiro", value: "RJ" } ], modelValue: e.estado, "onUpdate:modelValue": a[6] || (a[6] = (r) => e.estado = r), multiple: "" }, null, 8, ["modelValue"]), V(s, { modelValue: e.documento, "onUpdate:modelValue": a[7] || (a[7] = (r) => e.documento = r), type: "cpfCnpj", label: "CPF / CNPJ" }, null, 8, ["modelValue"]), V(s, { modelValue: e.email, "onUpdate:modelValue": a[8] || (a[8] = (r) => e.email = r), label: "Email", placeholder: "email@exemplo.com" }, null, 8, ["modelValue"]), V(s, { modelValue: e.senha, "onUpdate:modelValue": a[9] || (a[9] = (r) => e.senha = r), label: "Senha", type: "password", showPasswordToggle: !0, placeholder: "Digite sua senha" }, null, 8, ["modelValue"]), V(s, { type: "textarea", modelValue: e.mensagem, "onUpdate:modelValue": a[10] || (a[10] = (r) => e.mensagem = r), label: "Mensagem", rows: 5 }, null, 8, ["modelValue"]), V(s, { type: "radio", modelValue: e.cor, "onUpdate:modelValue": a[11] || (a[11] = (r) => e.cor = r), label: "Cor favorita", options: [ { label: "Azul", value: "azul" }, { label: "Verde", value: "verde" } ] }, null, 8, ["modelValue"]), V(s, { type: "checkbox", modelValue: e.habilidades, "onUpdate:modelValue": a[12] || (a[12] = (r) => e.habilidades = r), options: [ { label: "Vue", value: "vue" }, { label: "React", value: "react" } ] }, null, 8, ["modelValue"]), V(s, { modelValue: e.nome, "onUpdate:modelValue": a[13] || (a[13] = (r) => e.nome = r), label: "Nome", error: !0, "error-messages": ["Obrigatório"] }, null, 8, ["modelValue"]) ]) ]), _: 1 }), V(Ie, null, { default: z(() => [ V($, { color: "primary", variant: "elevated", block: "" }, { default: z(() => [...a[16] || (a[16] = [ pe(" Botão Vuetify ", -1) ])]), _: 1 }) ]), _: 1 }) ]), _: 1 }) ]), _: 1 }); } const ka = /* @__PURE__ */ j(ga, [["render", $a]]), Aa = N({ name: "EliCartao", components: { EliBadge: Ce }, inheritAttrs: !1, props: { /** Título de fallback caso o slot `titulo` não seja usado. */ titulo: { type: String, default: "" }, /** * Status semântico do cartão. * Usado para cor/label e para permitir filtros por status. */ status: { type: String, required: !0 }, /** Variante visual do v-card (Vuetify). */ variant: { type: String, default: "outlined" } }, emits: { /** Emit opcional para padronizar clique no cartão. */ clicar: (e) => !0 }, setup(e, { emit: a }) { const u = A(() => e.status), i = A(() => { switch (e.status) { case "novo": return "primary"; case "rascunho": return "secondary"; case "vendido": return "success"; case "cancelado": return "error"; } }), c = A(() => `eli-cartao--${e.status}`); function m() { a("clicar", e.status); } return { rotuloStatus: u, corStatus: i, classeStatus: c, onClick: m }; } }), Ca = { class: "eli-cartao__titulo-texto" }, Va = { class: "eli-cartao__status" }; function Ea(e, a, u, i, c, m) { const n = H("EliBadge"); return p(), P(Te, oe({ class: ["eli-cartao", e.classeStatus], variant: e.variant }, e.$attrs), { default: z(() => [ V(Oe, { class: "eli-cartao__titulo" }, { default: z(() => [ B("div", Ca, [ ie(e.$slots, "titulo", {}, () => [ pe(Y(e.titulo), 1) ], !0) ]), B("div", Va, [ V(n, { badge: e.rotuloStatus, radius: "pill", color: e.corStatus }, { default: z(() => [...a[0] || (a[0] = [ B("span", null, null, -1) ])]), _: 1 }, 8, ["badge", "color"]) ]) ]), _: 3 }), V(qe, { class: "eli-cartao__conteudo" }, { default: z(() => [ ie(e.$slots, "default", {}, void 0, !0) ]), _: 3 }), e.$slots.acoes ? (p(), P(Ie, { key: 0, class: "eli-cartao__acoes" }, { default: z(() => [ ie(e.$slots, "acoes", {}, void 0, !0) ]), _: 3 })) : J("", !0) ]), _: 3 }, 16, ["variant", "class"]); } const _a = /* @__PURE__ */ j(Aa, [["render", Ea], ["__scopeId", "data-v-6c492bd9"]]); function Ma(e) { return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e; } var he = { exports: {} }, wa = he.exports, _e; function Sa() { return _e || (_e = 1, (function(e, a) { (function(u, i) { e.exports = i(); })(wa, (function() { var u = 1e3, i = 6e4, c = 36e5, m = "millisecond", n = "second", s = "minute", $ = "hour", r = "day", h = "week", g = "month", T = "quarter", y = "year", q = "date", _ = "Invalid Date", Q = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, x = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, L = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(f) { var t = ["th", "st", "nd", "rd"], o = f % 100; return "[" + f + (t[(o - 20) % 10] || t[o] || t[0]) + "]"; } }, re = function(f, t, o) { var d = String(f); return !d || d.length >= t ? f : "" + Array(t + 1 - d.length).join(o) + f; }, ke = { s: re, z: function(f) { var t = -f.utcOffset(), o = Math.abs(t), d = Math.floor(o / 60), l = o % 60; return (t <= 0 ? "+" : "-") + re(d, 2, "0") + ":" + re(l, 2, "0"); }, m: function f(t, o) { if (t.date() < o.date()) return -f(o, t); var d = 12 * (o.year() - t.year()) + (o.month() - t.month()), l = t.clone().add(d, g), v = o - l < 0, b = t.clone().add(d + (v ? -1 : 1), g); return +(-(d + (o - l) / (v ? l - b : b - l)) || 0); }, a: function(f) { return f < 0 ? Math.ceil(f) || 0 : Math.floor(f); }, p: function(f) { return { M: g, y, w: h, d: r, D: q, h: $, m: s, s: n, ms: m, Q: T }[f] || String(f || "").toLowerCase().replace(/s$/, ""); }, u: function(f) { return f === void 0; } }, Z = "en", X = {}; X[Z] = L; var ue = "$isDayjsObject", de = function(f) { return f instanceof ae || !(!f || !f[ue]); }, ne = function f(t, o, d) { var l; if (!t) return Z; if (typeof t == "string") { var v = t.toLowerCase(); X[v] && (l = v), o && (X[v] = o, l = v); var b = t.split("-"); if (!l && b.length > 1) return f(b[0]); } else { var C = t.name; X[C] = t, l = C; } return !d && l && (Z = l), l || !d && Z; }, O = function(f, t) { if (de(f)) return f.clone(); var o = typeof t == "object" ? t : {}; return o.date = f, o.args = arguments, new ae(o); }, E = ke; E.l = ne, E.i = de, E.w = function(f, t) { return O(f, { locale: t.$L, utc: t.$u, x: t.$x, $offset: t.$offset }); }; var ae = (function() { function f(o) { this.$L = ne(o.locale, null, !0), this.parse(o), this.$x = this.$x || o.x || {}, this[ue] = !0; } var t = f.prototype; return t.parse = function(o) { this.$d = (function(d) { var l = d.date, v = d.utc; if (l === null) return /* @__PURE__ */ new Date(NaN); if (E.u(l)) return /* @__PURE__ */ new Date(); if (l instanceof Date) return new Date(l); if (typeof l == "string" && !/Z$/i.test(l)) { var b = l.match(Q); if (b) { var C = b[2] - 1 || 0, M = (b[7] || "0").substring(0, 3); return v ? new Date(Date.UTC(b[1], C, b[3] || 1, b[4] || 0, b[5] || 0, b[6] || 0, M)) : new Date(b[1], C, b[3] || 1, b[4] || 0, b[5] || 0, b[6] || 0, M); } } return new Date(l); })(o), this.init(); }, t.init = function() { var o = this.$d; this.$y = o.getFullYear(), this.$M = o.getMonth(), this.$D = o.getDate(), this.$W = o.getDay(), this.$H = o.getHours(), this.$m = o.getMinutes(), this.$s = o.getSeconds(), this.$ms = o.getMilliseconds(); }, t.$utils = function() { return E; }, t.isValid = function() { return this.$d.toString() !== _; }, t.isSame = function(o, d) { var l = O(o); return this.startOf(d) <= l && l <= this.endOf(d); }, t.isAfter = function(o, d) { return O(o) < this.startOf(d); }, t.isBefore = function(o, d) { return this.endOf(d) < O(o); }, t.$g = function(o, d, l) { return E.u(o) ? this[d] : this.set(l, o); }, t.unix = function() { return Math.floor(this.valueOf() / 1e3); }, t.valueOf = function() { return this.$d.getTime(); }, t.startOf = function(o, d) { var l = this, v = !!E.u(d) || d, b = E.p(o), C = function(R, I) { var G = E.w(l.$u ? Date.UTC(l.$y, I, R) : new Date(l.$y, I, R), l); return v ? G : G.endOf(r); }, M = function(R, I) { return E.w(l.toDate()[R].apply(l.toDate("s"), (v ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(I)), l); }, S = this.$W, D = this.$M, U = this.$D, F = "set" + (this.$u ? "UTC" : ""); switch (b) { case y: return v ? C(1, 0) : C(31, 11); case g: return v ? C(1, D) : C(0, D + 1); case h: var W = this.$locale().weekStart || 0, te = (S < W ? S + 7 : S) - W; return C(v ? U - te : U + (6 - te), D); case r: case q: return M(F + "Hours", 0); case $: return M(F + "Minutes", 1); case s: return M(F + "Seconds", 2); case n: return M(F + "Milliseconds", 3); default: return this.clone(); } }, t.endOf = function(o) { return this.startOf(o, !1); }, t.$set = function(o, d) { var l, v = E.p(o), b = "set" + (this.$u ? "UTC" : ""), C = (l = {}, l[r] = b + "Date", l[q] = b + "Date", l[g] = b + "Month", l[y] = b + "FullYear", l[$] = b + "Hours", l[s] = b + "Minutes", l[n] = b + "Seconds", l[m] = b + "Milliseconds", l)[v], M = v === r ? this.$D + (d - this.$W) : d; if (v === g || v === y) { var S = this.clone().set(q, 1); S.$d[C](M), S.init(), this.$d = S.set(q, Math.min(this.$D, S.daysInMonth())).$d; } else C && this.$d[C](M); return this.init(), this; }, t.set = function(o, d) { return this.clone().$set(o, d); }, t.get = function(o) { return this[E.p(o)](); }, t.add = function(o, d) { var l, v = this; o = Number(o); var b = E.p(d), C = function(D) { var U = O(v); return E.w(U.date(U.date() + Math.round(D * o)), v); }; if (b === g) return this.set(g, this.$M + o); if (b === y) return this.set(y, this.$y + o); if (b === r) return C(1); if (b === h) return C(7); var M = (l = {}, l[s] = i, l[$] = c, l[n] = u, l)[b] || 1, S = this.$d.getTime() + o * M; return E.w(S, this); }, t.subtract = function(o, d) { return this.add(-1 * o, d); }, t.format = function(o) { var d = this, l = this.$locale(); if (!this.isValid()) return l.invalidDate || _; var v = o || "YYYY-MM-DDTHH:mm:ssZ", b = E.z(this), C = this.$H, M = this.$m, S = this.$M, D = l.weekdays, U = l.months, F = l.meridiem, W = function(I, G, ce, be) { return I && (I[G] || I(d, v)) || ce[G].slice(0, be); }, te = function(I) { return E.s(C % 12 || 12, I, "0"); }, R = F || function(I, G, ce) { var be = I < 12 ? "AM" : "PM"; return ce ? be.toLowerCase() : be; }; return v.replace(x, (function(I, G) { return G || (function(ce) { switch (ce) { case "YY": return String(d.$y).slice(-2); case "YYYY": return E.s(d.$y, 4, "0"); case "M": return S + 1; case "MM": return E.s(S + 1, 2, "0"); case "MMM": return W(l.monthsShort, S, U, 3); case "MMMM": return W(U, S); case "D": return d.$D; case "DD": return E.s(d.$D, 2, "0"); case "d": return String(d.$W); case "dd": return W(l.weekdaysMin, d.$W, D, 2); case "ddd": return W(l.weekdaysShort, d.$W, D, 3); case "dddd": return D[d.$W]; case "H": return String(C); case "HH": return E.s(C, 2, "0"); case "h": return te(1); case "hh": return te(2); case "a": return R(C, M, !0); case "A": return R(C, M, !1); case "m": return String(M); case "mm": return E.s(M, 2, "0"); case "s": return String(d.$s); case "ss": return E.s(d.$s, 2, "0"); case "SSS": return E.s(d.$ms, 3, "0"); case "Z": return b; } return null; })(I) || b.replace(":", ""); })); }, t.utcOffset = function() { return 15 * -Math.round(this.$d.getTimezoneOffset() / 15); }, t.diff = function(o, d, l) { var v, b = this, C = E.p(d), M = O(o), S = (M.utcOffset() - this.utcOffset()) * i, D = this - M, U = function() { return E.m(b, M); }; switch (C) { case y: v = U() / 12; break; case g: v = U(); break; case T: v = U() / 3; break; case h: v = (D - S) / 6048e5; break; case r: v = (D - S) / 864e5; break; case $: v = D / c; break; case s: v = D / i; break; case n: v = D / u; break; default: v = D; } return l ? v : E.a(v); }, t.daysInMonth = function() { return this.endOf(g).$D; }, t.$locale = function() { return X[this.$L]; }, t.locale = function(o, d) { if (!o) return this.$L; var l = this.clone(), v = ne(o, d, !0); return v && (l.$L = v), l; }, t.clone = function() { return E.w(this.$d, this); }, t.toDate = function() { return new Date(this.valueOf()); }, t.toJSON = function() { return this.isValid() ? this.toISOString() : null; }, t.toISOString = function() { return this.$d.toISOString(); }, t.toString = function() { return this.$d.toUTCString(); }, f; })(), fe = ae.prototype; return O.prototype = fe, [["$ms", m], ["$s", n], ["$m", s], ["$H", $], ["$W", r], ["$M", g], ["$y", y], ["$D", q]].forEach((function(f) { fe[f[1]] = function(t) { return this.$g(t, f[0], f[1]); }; })), O.extend = function(f, t) { return f.$i || (f(t, ae, O), f.$i = !0), O; }, O.locale = ne, O.isDayjs = de, O.unix = function(f) { return O(1e3 * f); }, O.en = X[Z], O.Ls = X, O.p = {}, O; })); })(he)), he.exports; } var Ba = Sa(); const ve = /* @__PURE__ */ Ma(Ba), Da = N({ name: "EliDataHora", inheritAttrs: !1, props: { /** * Valor em ISO 8601: * - com offset (ex.: `2026-01-09T13:15:00-03:00`) * - ou UTC absoluto (ex.: `2026-01-09T16:15:00Z`) */ modelValue: { type: String, default: null }, /** * Define o tipo de entrada. * - `dataHora`: usa `datetime-local` * - `data`: usa `date` */ modo: { type: String, default: "dataHora" }, /** Rótulo exibido no v-text-field (Vuetify). */ rotulo: { type: String, default: "Data e hora" }, /** Placeholder do input. */ placeholder: { type: String, default: "" }, /** Desabilita a interação. */ desabilitado: { type: Boolean, default: !1 }, /** Se true, mostra ícone para limpar o valor (Vuetify clearable). */ limpavel: { type: Boolean, default: !1 }, /** Estado de erro (visual). */ erro: { type: Boolean, default: !1 }, /** Mensagens de erro. */ mensagensErro: { type: [String, Array], default: () => [] }, /** Texto de apoio. */ dica: { type: String, default: "" }, /** Mantém a dica sempre visível. */ dicaPersistente: { type: Boolean, default: !1 }, /** Densidade do campo (Vuetify). */ densidade: { type: String, default: "comfortable" }, /** Variante do v-text-field (Vuetify). */ variante: { type: String, default: "outlined" }, /** * Valor mínimo permitido. * ISO 8601 (offset ou `Z`). */ min: { // ISO 8601 (offset ou Z) type: String, default: void 0 }, /** * Valor máximo permitido. * ISO 8601 (offset ou `Z`). */ max: { // ISO 8601 (offset ou Z) type: String, default: void 0 } }, emits: { /** v-model padrão. */ "update:modelValue": (e) => !0, /** Alias para consumidores que querem um evento semântico. */ alterar: (e) => !0, foco: () => !0, desfoco: () => !0 }, setup(e, { emit: a, attrs: u }) { const i = A( () => e.modo === "data" ? "date" : "datetime-local" ); function c(r) { return e.modo === "data" ? ve(r).format("YYYY-MM-DD") : ve(r).format("YYYY-MM-DDTHH:mm"); } function m(r) { return e.modo === "data" ? ve(`${r}T00:00`).format() : ve(r).format(); } const n = A({ get: () => e.modelValue ? c(e.modelValue) : "", set: (r) => { const h = r && r.length > 0 ? r : null; if (!h) { a("update:modelValue", null), a("alterar", null); return; } const g = m(h); a("update:modelValue", g), a("alterar", g); } }), s = A(() => { if (e.min) return c(e.min); }), $ = A(() => { if (e.max) return c(e.max); }); return { attrs: u, valor: n, emit: a, minLocal: s, maxLocal: $, tipoInput: i }; } }), Pa = { class: "eli-data-hora" }; function Ta(e, a, u, i, c, m) { return p(), k("div", Pa, [ V(Pe, oe({ modelValue: e.valor, "onUpdate:modelValue": a[0] || (a[0] = (n) => e.valor = n), type: e.tipoInput, label: e.rotulo, placeholder: e.placeholder, disabled: e.desabilitado, clearable: e.limpavel, error: e.erro, "error-messages": e.mensagensErro, hint: e.dica, "persistent-hint": e.dicaPersistente, density: e.densidade, variant: e.variante, min: e.minLocal, max: e.maxLocal }, e.attrs, { onFocus: a[1] || (a[1] = (n) => e.emit("foco")), onBlur: a[2] || (a[2] = (n) => e.emit("desfoco")) }), null, 16, ["modelValue", "type", "label", "placeholder", "disabled", "clearable", "error", "error-messages", "hint", "persistent-hint", "density", "variant", "min", "max"]) ]); } const Oa = /* @__PURE__ */ j(Da, [["render", Ta], ["__scopeId", "data-v-71afabb6"]]); var ze = ((e) => (e[e.sucesso = 200] = "sucesso", e[e.erroConhecido = 400] = "erroConhecido", e[e.erroPermissao = 401] = "erroPermissao", e[e.erroNaoEncontrado = 404] = "erroNaoEncontrado", e[e.erroDesconhecido = 500] = "erroDesconhecido", e[e.tempoEsgotado = 504] = "tempoEsgotado", e))(ze || {}); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const qa = (e) => { for (const a in e) if (a.startsWith("aria-") || a === "role" || a === "title") return !0; return !1; }; /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Me = (e) => e === ""; /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Ia = (...e) => e.filter((a, u, i) => !!a && a.trim() !== "" && i.indexOf(a) === u).join(" ").trim(); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const we = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Ua = (e) => e.replace( /^([A-Z])|[\s-_]+(\w)/g, (a, u, i) => i ? i.toUpperCase() : u.toLowerCase() ); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Na = (e) => { const a = Ua(e); return a.charAt(0).toUpperCase() + a.slice(1); }; /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ var me = { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }; /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const ja = ({ name: e, iconNode: a, absoluteStrokeWidth: u, "absolute-stroke-width": i, strokeWidth: c, "stroke-width": m, size: n = me.width, color: s = me.stroke, ...$ }, { slots: r }) => Ae( "svg", { ...me, ...$, width: n, height: n, stroke: s, "stroke-width": Me(u) || Me(i) || u === !0 || i === !0 ? Number(c || m || me["stroke-width"]) * 24 / Number(n) : c || m || me["stroke-width"], class: Ia( "lucide", $.class, ...e ? [`lucide-${we(Na(e))}-icon`, `lucide-${we(e)}`] : ["lucide-icon"] ), ...!r.default && !qa($) && { "aria-hidden": "true" } }, [...a.map((h) => Ae(...h)), ...r.default ? [r.default()] : []] ); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const $e = (e, a) => (u, { slots: i, attrs: c }) => Ae( ja, { ...c, ...u, iconNode: a, name: e }, i ); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Se = $e("arrow-down", [ ["path", { d: "M12 5v14", key: "s699le" }], ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }] ]); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Be = $e("arrow-up", [ ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }], ["path", { d: "M12 19V5", key: "x0mq9r" }] ]); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const za = $e("ellipsis-vertical", [ ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }], ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }], ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }] ]); /** * @license lucide-vue-next v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const La = $e("search", [ ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }], ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }] ]), Ha = N({ name: "EliTabelaCaixaDeBusca", components: { Search: La }, props: { modelo: { type: String, required: !1, default: "" } }, emits: { buscar(e) { return typeof e == "string"; } }, setup(e, { emit: a }) { const u = w(e.modelo ?? ""); le( () => e.modelo, (c) => { c !== void 0 && c !== u.value && (u.value = c); } ); function i() { a("buscar", u.value.trim()); } return { texto: u, emitirBusca: i }; } }), Ya = { class: "eli-tabela__busca" }, Fa = { class: "eli-tabela__busca-input-wrapper" }; function Ra(e, a, u, i, c, m) { const n = H("Search"); return p(), k("div", Ya, [ B("div", Fa, [ He(B("input", { id: "eli-tabela-busca", "onUpdate:modelValue": a[0] || (a[0] = (s) => e.texto = s), type: "search", class: "eli-tabela__busca-input", placeholder: "Digite termos para filtrar", onKeyup: a[1] || (a[1] = Ye((...s) => e.emitirBusca && e.emitirBusca(...s), ["enter"])) }, null, 544), [ [Fe, e.texto] ]), B("button", { type: "button", class: "eli-tabela__busca-botao", "aria-label": "Buscar", title: "Buscar", onClick: a[2] || (a[2] = (...s) => e.emitirBusca && e.emitirBusca(...s)) }, [ V(n, { class: "eli-tabela__busca-botao-icone", size: 16, "stroke-width": 2, "aria-hidden": "true" }) ]) ]) ]); } const Wa = /* @__PURE__ */ j(Ha, [["render", Ra], ["__scopeId", "data-v-f7b534c8"]]), Ja = N({ name: "EliTabelaCabecalho", components: { EliTabelaCaixaDeBusca: Wa }, props: { exibirBusca: { type: Boolean, required: !0 }, valorBusca: { type: String, required: !0 }, acoesCabecalho: { type: Array, required: !0 } }, emits: { buscar(e) { return typeof e == "string"; } }, setup(e, { emit: a }) { const u = A(() => e.acoesCabecalho.length > 0); function i(c) { a("buscar", c); } return { temAcoesCabecalho: u, emitBuscar: i }; } }), Za = { class: "eli-tabela__cabecalho" }, Xa = { key: 1, class: "eli-tabela__acoes-cabecalho" }, Ga = ["onClick"], Ka = { class: "eli-tabela__acoes-cabecalho-rotulo" }; function Qa(e, a, u, i, c, m) { const n = H("EliTabelaCaixaDeBusca"); return p(), k("div", Za, [ e.exibirBusca ? (p(), P(n, { key: 0, modelo: e.valorBusca, onBuscar: e.emitBuscar }, null, 8, ["modelo", "onBuscar"])) : J("", !0), e.temAcoesCabecalho ? (p(), k("div", Xa, [ (p(!0), k(K, null, ee(e.acoesCabecalho, (s, $) => (p(), k("button", { key: `${s.rotulo}-${$}`, type: "button", class: "eli-tabela__acoes-cabecalho-botao", style: ge(s.cor ? { backgroundColor: s.cor, color: "#fff" } : void 0), onClick: s.acao }, [ s.icone ? (p(), P(ye(s.icone), { key: 0, class: "eli-tabela__acoes-cabecalho-icone", size: 16, "stroke-width": 2 })) : J("", !0), B("span", Ka, Y(s.rotulo), 1) ], 12, Ga))), 128)) ])) : J("", !0) ]); } const xa = /* @__PURE__ */ j(Ja, [["render", Qa]]), et = N({ name: "EliTabelaEstados", props: { carregando: { type: Boolean, required: !0 }, erro: { type: String, required: !0 }, mensagemVazio: { type: String, required: !1, default: void 0 } } }), at = { key: 0, class: "eli-tabela eli-tabela--carregando", "aria-busy": "true" }, tt = { key: 1, class: "eli-tabela eli-tabela--erro", role: "alert" }, ot = { class: "eli-tabela__erro-mensagem" }, rt = { key: 2, class: "eli-tabela eli-tabela--vazio" }; function nt(e, a, u, i, c, m) { return e.carregando ? (p(), k("div", at, " Carregando... ")) : e.erro ? (p(), k("div", tt, [ a[0] || (a[0] = B("div", { class: "eli-tabela__erro-titulo" }, "Erro", -1)), B("div", ot, Y(e.erro), 1) ])) : (p(), k("div", rt, Y(e.mensagemVazio ?? "Nenhum registro encontrado."), 1)); } const lt = /* @__PURE__ */ j(et, [["render", nt]]), it = N({ name: "EliTabelaDebug", props: { isDev: { type: Boolean, required: !0 }, menuAberto: { type: Number, required: !0 }, menuPopupPos: { type: Object, required: !0 } } }), st = { key: 0, style: { position: "fixed", left: "8px", bottom: "8px", "z-index": "999999", background: "rgba(185,28,28,0.9)", color: "#fff", padding: "6px 10px", "border-radius": "8px", "font-size": "12px", "max-width": "500px" } }; function ut(e, a, u, i, c, m) { return e.isDev ? (p(), k("div", st, [ a[0] || (a[0] = B("div", null, [ B("b", null, "EliTabela debug") ], -1)), B("div", null, "menuAberto: " + Y(e.menuAberto), 1), B("div", null, "menuPos: top=" + Y(e.menuPopupPos.top) + ", left=" + Y(e.menuPopupPos.left), 1) ])) : J("", !0); } const dt = /* @__PURE__ */ j(it, [["render", ut]]), ct = N({ name: "EliTabelaHead", components: { ArrowUp: Be, ArrowDown: Se }, props: { colunas: { type: Array, required: !0 }, temAcoes: { type: Boolean, required: !0 }, colunaOrdenacao: { type: String, required: !0 }, direcaoOrdenacao: { type: String, required: !0 } }, emits: { alternarOrdenacao(e) { return typeof e == "string" && e.length > 0; } }, setup(e, { emit: a }) { function u(m) { return (m == null ? void 0 : m.coluna_ordem) !== void 0 && (m == null ? void 0 : m.coluna_ordem) !== null; } function i(m) { return m === "direita" ? "eli-tabela__celula--direita" : m === "centro" ? "eli-tabela__celula--centro" : "eli-tabela__celula--esquerda"; } function c(m) { a("alternarOrdenacao", m); } return { ArrowUp: Be, ArrowDown: Se, isOrdenavel: u, obterClasseAlinhamento: i, emitAlternarOrdenacao: c }; } }), mt = { class: "eli-tabela__thead" }, pt = { class: "eli-tabela__tr eli-tabela__tr--header" }, ft = ["onClick"], bt = { class: "eli-tabela__th-texto" }, vt = { key: 1, class: "eli-tabela__th-label" }, ht = { key: 0, class: "eli-tabela__th eli-tabela__th--acoes", scope: "col" }; function gt(e, a, u, i, c, m) { const n = H("ArrowUp"); return p(), k("thead", mt, [ B("tr", pt, [ (p(!0), k(K, null, ee(e.colunas, (s, $) => (p(), k("th", { key: `th-${$}`, class: se(["eli-tabela__th", [ e.isOrdenavel(s) ? "eli-tabela__th--ordenavel" : void 0, e.obterClasseAlinhamento(s.alinhamento) ]]), scope: "col" }, [ e.isOrdenavel(s) ? (p(), k("button", { key: 0, type: "button", class: se(["eli-tabela__th-botao", [ e.colunaOrdenacao === String(s.coluna_ordem) ? "eli-tabela__th-botao--ativo" : void 0 ]]), onClick: (r) => e.emitAlternarOrdenacao(String(s.coluna_ordem)) }, [ B("span", bt, Y(s.rotulo), 1), e.colunaOrdenacao === String(s.coluna_ordem) ? (p(), P(ye(e.direcaoOrdenacao === "asc" ? e.ArrowUp : e.ArrowDown), { key: 0, class: "eli-tabela__th-icone", size: 16, "stroke-width": 2, "aria-hidden": "true" })) : (p(), P(n, { key: 1, class: "eli-tabela__th-icone eli-tabela__th-icone--oculto", size: 16, "stroke-width": 2, "aria-hidden": "true" })) ], 10, ft)) : (p(), k("span", vt, Y(s.rotulo), 1)) ], 2))), 128)), e.temAcoes ? (p(), k("th", ht, " Ações ")) : J("", !0) ]) ]); } const yt = /* @__PURE__ */ j(ct, [["render", gt]]), $t = N({ name: "EliTabelaCelulaTextoSimples", components: {}, props: { dados: { type: Object } }, data() { return {}; }, methods: {}, setup({ dados: e }) { return { dados: e }; } }); function kt(e, a, u, i, c, m) { var n; return Y((n = e.dados) == null ? void 0 : n.texto); } const At = /* @__PURE__ */ j($t, [["render", kt]]), Ct = N({ name: "EliTabelaCelulaNumero", components: {}, props: { dados: { type: Object } }, data() { return {}; }, methods: {}, setup({ dados: e }) { return { dados: e }; } }); function Vt(e, a, u, i, c, m) { var n; return Y(String((n = e.dados) == null ? void 0 : n.numero).replace(".", ",")); } const Et = /* @__PURE__ */ j(Ct, [["render", Vt]]), _t = { textoSimples: At, numero: Et }, Mt = N({ name: "EliTabelaCelula", props: { celula: { // `ComponenteCelula` é uma tupla `readonly [tipo, dados]`. type: Array, required: !0 } }, setup(e) { const a = A(() => e.celula[0]), u = A(() => e.celula[1]), i = A(() => _t[a.value]), c = A(() => u.value); return { Componente: i, dadosParaComponente: c }; } }); function wt(e, a, u, i, c, m) { return p(), P(ye(e.Componente), { dados: e.dadosParaComponente }, null, 8, ["dados"]); } const St = /* @__PURE__ */ j(Mt, [["render", wt]]), Bt = N({ name: "EliTabelaBody", components: { EliTabelaCelula: St, MoreVertical: za }, props: { colunas: { type: Array, required: !0 }, linhas: { type: Array, required: !0 }, temAcoes: { type: Boolean, required: !0 }, menuAberto: { type: Number, required: !0 }, possuiAcoes: { type: Function, required: !0 }, toggleMenu: { type: Function, required: !0 } }, setup() { function e(i) { return i === "direita" ? "eli-tabela__celula--direita" : i === "centro" ? "eli-tabela__celula--centro" : "eli-tabela__celula--esquerda"; } function a(i) { if (i != null) return typeof i == "number" ? `${i}px` : String(i); } function u(i) { if (!Array.isArray(i)) return; const c = i[0], m = i[1]; if (c === "textoSimples") return typeof (m == null ? void 0 : m.texto) == "string" ? m.texto : void 0; if (c === "numero") return typeof (m == null ? void 0 : m.numero) == "number" ? String(m.numero) : void 0; } return { obterClasseAlinhamento: e, obterMaxWidth: a, obterTooltipCelula: u }; } }), Dt = { class: "eli-tabela__tbody" }, Pt = ["onClick"], Tt = ["title"], Ot = ["id", "disabled", "aria-expanded", "aria-controls", "aria-label", "title", "onClick"]; function qt(e, a, u, i, c, m) { const n = H("EliTabelaCelula"), s = H("MoreVertical"); return p(), k("tbody", Dt, [ (p(!0), k(K, null, ee(e.linhas, ($, r) => (p(), k("tr", { key: `tr-${r}`, class: se(["eli-tabela__tr", [r % 2 === 1 ? "eli-tabela__tr--zebra" : void 0]]) }, [ (p(!0), k(K, null, ee(e.colunas, (h, g) => (p(), k("td", { key: `td-${r}-${g}`, class: se(["eli-tabela__td", [ h.acao ? "eli-tabela__td--clicavel" : void 0, e.obterClasseAlinhamento(h.alinhamento) ]]), onClick: (T) => h.acao ? () => { var y; return (y = h.acao) == null ? void 0 : y.call(h); } : void 0 }, [ h.truncar ? (p(), k("span", { key: 0, class: "eli-tabela__celula-conteudo", style: ge(h.largura_maxima ? { maxWidth: e.obterMaxWidth(h.largura_maxima) } : void 0), title: e.obterTooltipCelula(h.celula($)) }, [ V(n, { celula: h.celula($) }, null, 8, ["celula"]) ], 12, Tt)) : (p(), P(n, { key: 1, celula: h.celula($) }, null, 8, ["celula"])) ], 10, Pt))), 128)), e.temAcoes ? (p(), k("td", { class: "eli-tabela__td eli-tabela__td--acoes", key: `td-${r}-acoes` }, [ B("div", { class: se(["eli-tabela__acoes-container", [e.menuAberto === r ? "eli-tabela__acoes-container--aberto" : void 0]]) }, [ B("button", { class: "eli-tabela__acoes-toggle", type: "button", id: `eli-tabela-acoes-toggle-${r}`, disabled: !e.possuiAcoes(r), "aria-haspopup": "menu", "aria-expanded": e.menuAberto === r ? "true" : "false", "aria-controls": e.possuiAcoes(r) ? `eli-tabela-acoes-menu-${r}` : void 0, "aria-label": e.possuiAcoes(r) ? "Ações da linha" : "Nenhuma ação disponível", title: e.possuiAcoes(r) ? "Ações" : "Nenhuma ação disponível", onClick: De((h) => e.toggleMenu(r, h), ["stop"]) }, [ V(s, { class: "eli-tabela__acoes-toggle-icone", size: 18, "stroke-width": 2 }) ], 8, Ot) ], 2) ])) : J("", !0) ], 2))), 128)) ]); } const It = /* @__PURE__ */ j(Bt, [["render", qt]]), Ut = N({ name: "EliTabelaMenuAcoes", props: { menuAberto: { type: Number, required: !0 }, posicao: { type: Object, required: !0 }, acoes: { type: Array, required: !0 }, linha: { // Aceita qualquer tipo de linha (objeto, string, etc.) sem validação runtime. type: null, required: !0 } }, emits: { executar(e) { return e !== null && typeof e == "object"; } }, setup(e, { emit: a, expose: u }) { const i = w(null); u({ menuEl: i }); const c = A(() => e.acoes.length > 0); function m(n) { e.linha && a("executar", { acao: n.acao, linha: e.linha }); } return { menuEl: i, possuiAcoes: c, emitExecutar: m }; } }), Nt = ["id", "aria-labelledby"], jt = ["aria-label", "title", "onClick"], zt = { class: "eli-tabela__acoes-item-texto" }; function Lt(e, a, u, i, c, m) { return p(), P(Re, { to: "body" }, [ e.menuAberto !== null && e.possuiAcoes ? (p(), k("ul", { key: 0, id: `eli-tabela-acoes-menu-${e.menuAberto}`, ref: "menuEl", class: "eli-tabela__acoes-menu", role: "menu", "aria-labelledby": `eli-tabela-acoes-toggle-${e.menuAberto}`, style: ge({ position: "fixed", top: `${e.posicao.top}px`, left: `${e.posicao.left}px`, zIndex: 999999 }) }, [ (p(!0), k(K, null, ee(e.acoes, (n) => (p(), k("li", { key: `acao-${e.menuAberto}-${n.indice}`, class: "eli-tabela__acoes-item", role: "none" }, [ B("button", { type: "button", class: "eli-tabela__acoes-item-botao", style: ge({ color: n.acao.cor }), role: "menuitem", "aria-label": n.acao.rotulo, title: n.acao.rotulo, onClick: De((s) => e.emitExecutar(n), ["stop"]) }, [ (p(), P(ye(n.acao.icone), { class: "eli-tabela__acoes-item-icone", size: 16, "stroke-width": 2 })), B("span", zt, Y(n.acao.rotulo), 1) ], 12, jt) ]))), 128)) ], 12, Nt)) : J("", !0) ]); } const Ht = /* @__PURE__ */ j(Ut, [["render", Lt]]), Yt = N({ name: "EliTabelaPaginacao", props: { pagina: { type: Number, required: !0 }, totalPaginas: { type: Number, required: !0 }, maximoBotoes: { type: Number, required: !1 } }, emits: { alterar(e) { return Number.isFinite(e); } }, setup(e, { emit: a }) { const u = A(() => { const r = e.maximoBotoes; return typeof r == "number" && r >= 5 ? Math.floor(r) : 7; }), i = A(() => { const r = e.totalPaginas, h = e.pagina, g = u.value, T = [], y = (L) => { T.push({ label: String(L), pagina: L, ativo: L === h }); }, q = () => { T.push({ label: "…", ehEllipsis: !0 }); }; if (r <= g) { for (let L = 1; L <= r; L += 1) y(L); return T; } const _ = Math.max(3, g - 2); let Q = Math.max(2, h - Math.floor(_ / 2)), x = Q + _ - 1; x >= r && (x = r - 1, Q = x - _ + 1), y(1), Q > 2 && q(); for (let L = Q; L <= x; L += 1) y(L); return x < r - 1 && q(), y(r), T; }); function c(r) { if (!r) return; const h = Math.min(Math.max(1, r), e.totalPaginas); h !== e.pagina && a("alterar", h); } const m = A(() => e.pagina <= 1), n = A(() => e.pagina >= e.totalPaginas), s = A(() => e.pagina), $ = A(() => e.totalPaginas); return { botoes: i, irParaPagina: c, anteriorDesabilitado: m, proximaDesabilitada: n, paginaAtual: s, totalPaginasExibidas: $ }; } }), Ft = { key: 0, class: "eli-tabela__paginacao", role: "navigation", "aria-label": "Paginação de resultados" }, Rt = ["disabled"], Wt = { key: 0, class: "eli-tabela__pagina-ellipsis", "aria-hidden": "true" }, Jt = ["disabled", "aria-current", "aria-label", "onClick"], Zt = ["disabled"]; function Xt(e, a, u, i, c, m) { return e.totalPaginasExibidas > 1 ? (p(), k("nav", Ft, [ B("button", { type: "button", class: "eli-tabela__pagina-botao", disabled: e.anteriorDesabilitado, "aria-label": "Página anterior", onClick: a[0] || (a[0] = (n) => e.irParaPagina(e.paginaAtual - 1)) }, " << ", 8, Rt), (p(!0), k(K, null, ee(e.botoes, (n, s) => (p(), k(K, { key: `${n.label}-${s}` }, [ n.ehEllipsis ? (p(), k("span", Wt, Y(n.label), 1)) : (p(), k("button", { key: 1, type: "button", class: se(["eli-tabela__pagina-botao", n.ativo ? "eli-tabela__pagina-botao--ativo" : void 0]), disabled: n.ativo, "aria-current": n.ativo ? "page" : void 0, "aria-label": `Ir para página ${n.label}`, onClick: ($) => e.irParaPagina(n.pagina) }, Y(n.label), 11, Jt)) ], 64))), 128)), B("button", { type: "button", class: "eli-tabela__pagina-botao", disabled: e.proximaDesabilitada, "aria-label": "Próxima página", onClick: a[1] || (a[1] = (n) => e.irParaPagina(e.paginaAtual + 1)) }, " >> ", 8, Zt) ])) : J("", !0); } const Gt = /* @__PURE__ */ j(Yt, [["render", Xt], ["__scopeId", "data-v-59d12455"]]), Kt = N({ name: "EliTabela", inheritAttrs: !1, components: { EliTabelaCabecalho: xa, EliTabelaEstados: lt, EliTabelaDebug: dt, EliTabelaHead: yt, EliTabelaBody: It, EliTabelaMenuAcoes: Ht, EliTabelaPaginacao: Gt }, props: { /** Configuração principal da tabela (colunas, consulta e ações) */ tabela: { type: Object, required: !0 } }, setup(e) { const u = w(!1), i = w(null), c = w([]), m = w(0), n = w([]), s = w(null), $ = w(null), r = w({ top: 0, left: 0 }), h = w(""), g = w(1), T = w(null), y = w("asc"), q = A(() => e.tabela), _ = A(() => !!e.tabela.mostrarCaixaDeBusca), Q = A(() => e.tabela.acoesTabela ?? []), x = A(() => Q.value.length > 0), L = A(() => { const t = e.tabela.registros_por_consulta; return typeof t == "number" && t > 0 ? Math.floor(t) : 10; }), re = A(() => { const t = L.value; if (!t || t <= 0) return 1; const o = m.value; return o ? Math.max(1, Math.ceil(o / t)) : 1; }), ke = A(() => (e.tabela.acoesLinha ?? []).length > 0); let Z = 0; function X(t) { var M, S, D, U, F, W; const o = t.getBoundingClientRect(), d = 8, l = ((D = (S = (M = $.value) == null ? void 0 : M.menuEl) == null ? void 0 : S.value) == null ? void 0 : D.offsetHeight) ?? 0, v = ((W = (F = (U = $.value) == null ? void 0 : U.menuEl) == null ? void 0 : F.value) == null ? void 0 : W.offsetWidth) ?? 180; let b = o.bottom + d; const C = o.right - v; l && b + l > window.innerHeight - d && (b = o.top - d - l), r.value = { top: Math.max(d, Math.round(b)), left: Math.max(d, Math.round(C)) }; } function ue(t) { var d, l; if (s.value === null) return; const o = t.target; (l = (d = $.value) == null ? void 0 : d.menuEl) != null && l.value && $.value.menuEl.value.contains(o) || (s.value = null); } function de(t) { if (t) { if (T.value === t) { y.value = y.value === "asc" ? "desc" : "asc", f(); return; } T.value = t, y.value = "asc", g.value !== 1 ? g.value = 1 : f(); } } function ne(t) { h.value !== t && (h.value = t, g.value !== 1 ? g.value = 1 : f()); } function O(t) { const o = Math.min(Math.max(1, t), re.value); o !== g.value && (g.value = o); } function E(t) { const o = e.tabela.acoesLinha ?? [], d = n.value[t] ?? []; return o.map((l, v) => { const b = l.exibir === void 0 ? !0 : typeof l.exibir == "boolean" ? l.exibir : !1; return { acao: l, indice: v, visivel: d[v] ?? b }; }).filter((l) => l.visivel); } function ae(t) { return E(t).length > 0; } function fe(t, o) { if (!ae(t)) return; if (s.value === t) { s.value = null; return; } s.value = t; const d = (o == null ? void 0 : o.currentTarget) ?? null; d && (X(d), requestAnimationFrame(() => X(d))); } async function f() { var v, b; const t = ++Z; u.value = !0, i.value = null, n.value = [], s.value = null; const o = Math.max(1, L.value), l = { offSet: (g.value - 1) * o, limit: o }; h.value && (l.texto_busca = h.value), T.value && (l.coluna_ordem = T.value, l.direcao_ordem = y.value); try { const C = e.tabela, M = await C.consulta(l); if (t !== Z) return; if (M.cod !== ze.sucesso) { c.value = [], m.value = 0, i.value = M.mensagem; return; } const S = ((v = M.valor) == null ? void 0 : v.valores) ?? [], D = ((b = M.valor) == null ? void 0 : b.quantidade) ?? S.length; c.value = S, m.value = D; const U = Math.max(1, Math.ceil((D || 0) / o)); if (g.value > U) { g.value = U; return; } const F = C.acoesLinha ?? []; if (!F.length) { n.value = []; return; } const W = S.map( () => F.map((R) => R.exibir === void 0 ? !0 : typeof R.exibir == "boolean" ? R.exibir : !1) ); n.value = W; const te = await Promise.all( S.map( async (R) => Promise.all( F.map(async (I) => { if (I.exibir === void 0) return !0; if (typeof I.exibir == "boolean") return I.exibir; try { const G = I.exibir(R); return !!await Promise.resolve(G); } catch { return !1; } }) ) ) ); t === Z && (n.value = te); } catch (C) { if (t !== Z) return; c.value = [], m.value = 0, i.value = C instanceof Error ? C.message : "Erro ao carregar dados."; } finally { t === Z && (u.value = !1); } } return We(() => { document.addEventListener("click", ue), f(); }), Je(() => { document.removeEventListener("click", ue); }), le( () => e.tabela.mostrarCaixaDeBusca, (t) => { !t && h.value && (h.value = "", g.value !== 1 ? g.value = 1 : f()); } ), le(g, (t, o) => { t !== o && f(); }), le( () => e.tabela, () => { s.value = null, T.value = null, y.value = "asc", h.value = "", g.value !== 1 ? g.value = 1 : f(); } ), le( () => e.tabela.registros_por_consulta, () => { g.value !== 1 ? g.value = 1 : f(); } ), le(c, () => { s.value = null; }), { // state isDev: !1, tabela: q, carregando: u, erro: i, linhas: c, quantidade: m, menuAberto: s, valorBusca: h, paginaAtual: g, colunaOrdenacao: T, direcaoOrdenacao: y, totalPaginas: re, // computed exibirBusca: _, acoesCabecalho: Q, temAcoesCabecalho: x, temAcoes: ke, // actions alternarOrdenacao: de, atualizarBusca: ne, irParaPagina: O, acoesDisponiveisPorLinha: E, possuiAcoes: ae, toggleMenu: fe, // popup menuPopup: $, menuPopupPos: r }; } }), Qt = { class: "eli-tabela" }, xt = { class: "eli-tabela__table" }; function eo(e, a, u, i, c, m) { const n = H("EliTabelaDebug"), s = H("EliTabelaEstados"), $ = H("EliTabelaCabecalho"), r = H("EliTabelaHead"), h = H("EliTabelaBody"), g = H("EliTabelaMenuAcoes"), T = H("EliTabelaPaginacao"); return p(), k("div", Qt, [ V(n, { isDev: e.isDev, menuAberto: e.menuAberto, menuPopupPos: e.menuPopupPos }, null, 8, ["isDev", "menuAberto", "menuPopupPos"]), e.carregando || e.erro || !e.linhas.length ? (p(), P(s, { key: 0, carregando: e.carregando, erro: e.erro, mensagemVazio: e.tabela.mensagemVazio }, null, 8, ["carregando", "erro", "mensagemVazio"])) : (p(), k(K, { key: 1 }, [ e.exibirBusca || e.temAcoesCabecalho ? (p(), P($, { key: 0, exibirBusca: e.exibirBusca, valorBusca: e.valorBusca, acoesCabecalho: e.acoesCabecalho, onBuscar: e.atualizarBusca }, null, 8, ["exibirBusca", "valorBusca", "acoesCabecalho", "onBuscar"])) : J("", !0), B("table", xt, [ V(r, { colunas: e.tabela.colunas, temAcoes: e.temAcoes, colunaOrdenacao: e.colunaOrdenacao, direcaoOrdenacao: e.direcaoOrdenacao, onAlternarOrdenacao: e.alternarOrdenacao }, null, 8, ["colunas", "temAcoes", "colunaOrdenacao", "direcaoOrdenacao", "onAlternarOrdenacao"]), V(h, { colunas: e.tabela.colunas, linhas: e.linhas, temAcoes: e.temAcoes, menuAberto: e.menuAberto, possuiAcoes: e.possuiAcoes, toggleMenu: e.toggleMenu }, null, 8, ["colunas", "linhas", "temAcoes", "menuAberto", "possuiAcoes", "toggleMenu"]) ]), V(g, { ref: "menuPopup", menuAberto: e.menuAberto, posicao: e.menuPopupPos, acoes: e.menuAberto === null ? [] : e.acoesDisponiveisPorLinha(e.menuAberto), linha: e.menuAberto === null ? null : e.linhas[e.menuAberto], onExecutar: a[0] || (a[0] = ({ acao: y, linha: q }) => { e.menuAberto = null, y.acao(q); }) }, null, 8, ["menuAberto", "posicao", "acoes", "linha"]), e.totalPaginas > 1 && e.quantidade > 0 ? (p(), P(T, { key: 1, pagina: e.paginaAtual, totalPaginas: e.totalPaginas, maximoBotoes: e.tabela.maximo_botoes_paginacao, onAlterar: e.irParaPagina }, null, 8, ["pagina", "totalPaginas", "maximoBotoes", "onAlterar"])) : J("", !0) ], 64)) ]); } const ao = /* @__PURE__ */ j(Kt, [["render", eo]]), bo = { install(e) { e.component("EliOlaMundo", ka), e.component("EliBotao", Ue), e.component("EliBadge", Ce), e.component("EliInput", je), e.component("EliCartao", _a), e.component("EliDataHora", Oa), e.component("EliTabela", ao); } }; export { Ce as EliBadge, Ue as EliBotao, _a as EliCartao, Oa as EliDataHora, je as EliInput, ka as EliOlaMundo, ao as EliTabela, bo as default };