@vasakgroup/vue-libvasak 0.7.2 → 0.12.0

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.
Files changed (30) hide show
  1. package/dist/types/bar/BarSearch.vue.d.ts +5 -0
  2. package/dist/types/dialog/Dialog.vue.d.ts +22 -0
  3. package/dist/types/dialog/DialogContent.vue.d.ts +13 -0
  4. package/dist/types/dialog/DialogDescription.vue.d.ts +13 -0
  5. package/dist/types/dialog/DialogFooter.vue.d.ts +13 -0
  6. package/dist/types/dialog/DialogHeader.vue.d.ts +13 -0
  7. package/dist/types/dialog/DialogTitle.vue.d.ts +13 -0
  8. package/dist/types/dialog/tipos.d.ts +28 -0
  9. package/dist/types/feedback/AlertMessage.vue.d.ts +19 -0
  10. package/dist/types/feedback/EmptyState.vue.d.ts +24 -0
  11. package/dist/types/feedback/ToastArea.vue.d.ts +36 -0
  12. package/dist/types/feedback/tonos.d.ts +21 -0
  13. package/dist/types/forms/ProgressBar.vue.d.ts +9 -0
  14. package/dist/types/forms/TextInput.vue.d.ts +38 -0
  15. package/dist/types/index.d.ts +26 -1
  16. package/dist/types/internos/iconoDelTema.d.ts +5 -9
  17. package/dist/types/search/SearchField.vue.d.ts +77 -0
  18. package/dist/types/search/SearchSelect.vue.d.ts +45 -0
  19. package/dist/types/search/buscar.d.ts +42 -0
  20. package/dist/types/search/ids.d.ts +1 -0
  21. package/dist/types/tooltip/Tooltip.vue.d.ts +22 -0
  22. package/dist/types/tooltip/TooltipContent.vue.d.ts +22 -0
  23. package/dist/types/tooltip/TooltipTrigger.vue.d.ts +13 -0
  24. package/dist/types/tooltip/tipos.d.ts +32 -0
  25. package/dist/types/window/AppBar.vue.d.ts +0 -3
  26. package/dist/types/window/WindowControls.vue.d.ts +8 -3
  27. package/dist/types/window/WindowFrame.vue.d.ts +6 -3
  28. package/dist/vue-libvasak.es.js +1632 -838
  29. package/dist/vue-libvasak.umd.js +1 -1
  30. package/package.json +5 -3
@@ -1,31 +1,52 @@
1
- import { ref as $, onMounted as Q, onUnmounted as je, watch as X, defineComponent as E, toRef as me, computed as k, createElementBlock as i, unref as V, openBlock as l, normalizeStyle as se, createCommentVNode as g, createElementVNode as C, createVNode as j, toDisplayString as T, normalizeClass as p, renderSlot as B, createBlock as G, onBeforeUnmount as J, Fragment as Y, renderList as ae, withCtx as U, mergeModels as be, useAttrs as Pe, useId as Ne, useModel as Fe, withDirectives as xe, mergeProps as ne, isRef as Re, vModelSelect as He, inject as ke, getCurrentInstance as we, provide as ue, createTextVNode as We, toHandlers as $e, createSlots as qe, withModifiers as S, withKeys as O, Teleport as Ce, Transition as ze, nextTick as ce, vShow as Ue, cloneVNode as Ke, h as Ge, Comment as Ye, Text as Qe } from "vue";
2
- import { listen as Xe } from "@tauri-apps/api/event";
3
- import { getSymbolSource as Je, getIconSource as Ze } from "@vasakgroup/plugin-vicons";
4
- import { getCurrentWindow as _e } from "@tauri-apps/api/window";
5
- function et(e, n) {
6
- const t = $("");
7
- let a = null, o = !1, s = 0;
8
- async function c() {
9
- const u = ++s, f = e.value;
10
- if (!f) {
1
+ import { ref as x, onMounted as _, onUnmounted as ve, watch as K, defineComponent as E, toRef as Te, computed as p, createElementBlock as s, unref as F, openBlock as r, normalizeStyle as se, createCommentVNode as C, createElementVNode as B, createVNode as q, toDisplayString as V, normalizeClass as k, renderSlot as A, createBlock as Q, onBeforeUnmount as ie, Fragment as J, renderList as te, withCtx as W, mergeModels as Be, useAttrs as $e, useId as lt, useModel as ot, withDirectives as Ce, mergeProps as ae, isRef as rt, vModelSelect as st, inject as be, getCurrentInstance as je, provide as ue, createTextVNode as Ee, toHandlers as Fe, createSlots as it, withModifiers as M, withKeys as j, Teleport as ce, Transition as pe, nextTick as Y, TransitionGroup as ut, vShow as qe, cloneVNode as ct, h as dt, Comment as ft, Text as mt } from "vue";
2
+ import { listen as vt } from "@tauri-apps/api/event";
3
+ import { getSymbolSource as bt, getIconSource as pt } from "@vasakgroup/plugin-vicons";
4
+ import { getCurrentWindow as gt } from "@tauri-apps/api/window";
5
+ import { useI18n as yt } from "@vasakgroup/tauri-plugin-i18n";
6
+ const ht = "vicons:theme-changed", ke = /* @__PURE__ */ new Map(), oe = /* @__PURE__ */ new Map(), fe = x(0);
7
+ let re = 0, me = null, le = null;
8
+ function xt() {
9
+ ke.clear(), oe.clear(), fe.value++;
10
+ }
11
+ function kt() {
12
+ return re++, me || le ? le ?? Promise.resolve() : (le = vt(ht, xt).then((e) => {
13
+ re <= 0 ? e() : me = e, le = null;
14
+ }), le);
15
+ }
16
+ function wt() {
17
+ re--, !(re > 0) && (re = 0, me?.(), me = null);
18
+ }
19
+ function $t(e, n) {
20
+ const t = `${n}:${e}`, a = ke.get(t);
21
+ if (a !== void 0)
22
+ return Promise.resolve(a);
23
+ const l = oe.get(t);
24
+ if (l)
25
+ return l;
26
+ const o = fe.value, u = (n === "symbol" ? bt(e) : pt(e)).then((i) => (fe.value === o && ke.set(t, i), i)).finally(() => {
27
+ oe.get(t) === u && oe.delete(t);
28
+ });
29
+ return oe.set(t, u), u;
30
+ }
31
+ function Ct(e, n) {
32
+ const t = x("");
33
+ let a = !1, l = 0;
34
+ async function o() {
35
+ const u = ++l, i = e.value;
36
+ if (!i) {
11
37
  t.value = "";
12
38
  return;
13
39
  }
14
- const v = n.value === "symbol" ? await Je(f) : await Ze(f);
15
- u === s && (t.value = v);
40
+ const m = await $t(i, n.value);
41
+ u === l && !a && (t.value = m);
16
42
  }
17
- return Q(async () => {
18
- const u = await Xe("vicons:theme-changed", c);
19
- if (o) {
20
- u();
21
- return;
22
- }
23
- a = u, await c();
24
- }), je(() => {
25
- o = !0, a?.();
26
- }), X(e, c), t;
43
+ return _(async () => {
44
+ await kt(), a || await o();
45
+ }), ve(() => {
46
+ a = !0, wt();
47
+ }), K([e, n], o), K(fe, o), t;
27
48
  }
28
- const tt = ["src", "alt"], N = /* @__PURE__ */ E({
49
+ const Et = ["src", "alt"], H = /* @__PURE__ */ E({
29
50
  __name: "ThemeIcon",
30
51
  props: {
31
52
  name: {},
@@ -34,23 +55,23 @@ const tt = ["src", "alt"], N = /* @__PURE__ */ E({
34
55
  alt: { default: "" }
35
56
  },
36
57
  setup(e) {
37
- const n = e, t = et(me(n, "name"), me(n, "type")), a = k(() => `${n.size}px`);
38
- return (o, s) => V(t) ? (l(), i("img", {
58
+ const n = e, t = Ct(Te(n, "name"), Te(n, "type")), a = p(() => `${n.size}px`);
59
+ return (l, o) => F(t) ? (r(), s("img", {
39
60
  key: 0,
40
- src: V(t),
61
+ src: F(t),
41
62
  alt: e.alt,
42
63
  style: se({ width: a.value, height: a.value }),
43
64
  class: "shrink-0 object-contain"
44
- }, null, 12, tt)) : (l(), i("span", {
65
+ }, null, 12, Et)) : (r(), s("span", {
45
66
  key: 1,
46
67
  style: se({ width: a.value, height: a.value }),
47
68
  class: "shrink-0"
48
69
  }, null, 4));
49
70
  }
50
- }), at = { class: "flex flex-col gap-2" }, nt = ["aria-expanded"], lt = {
71
+ }), Dt = { class: "flex flex-col gap-2" }, zt = ["aria-expanded"], Lt = {
51
72
  key: 1,
52
73
  class: "flex flex-col gap-1"
53
- }, Le = /* @__PURE__ */ E({
74
+ }, Re = /* @__PURE__ */ E({
54
75
  __name: "SideGroup",
55
76
  props: {
56
77
  title: {},
@@ -58,40 +79,40 @@ const tt = ["src", "alt"], N = /* @__PURE__ */ E({
58
79
  defaultOpen: { type: Boolean, default: !0 }
59
80
  },
60
81
  setup(e) {
61
- const n = e, t = $(n.defaultOpen);
62
- return X(
82
+ const n = e, t = x(n.defaultOpen);
83
+ return K(
63
84
  () => n.collapsed,
64
85
  (a) => {
65
86
  a && (t.value = !0);
66
87
  }
67
- ), (a, o) => (l(), i("section", at, [
68
- e.collapsed ? g("", !0) : (l(), i("button", {
88
+ ), (a, l) => (r(), s("section", Dt, [
89
+ e.collapsed ? C("", !0) : (r(), s("button", {
69
90
  key: 0,
70
91
  type: "button",
71
92
  class: "group flex w-full items-center justify-between rounded-corner px-2 py-1 text-tx-muted text-xs uppercase tracking-[0.08em] hover:bg-ui-surface/60",
72
93
  "aria-expanded": t.value,
73
- onClick: o[0] || (o[0] = (s) => t.value = !t.value)
94
+ onClick: l[0] || (l[0] = (o) => t.value = !t.value)
74
95
  }, [
75
- C("span", null, T(e.title), 1),
76
- j(N, {
96
+ B("span", null, V(e.title), 1),
97
+ q(H, {
77
98
  name: "pan-down-symbolic",
78
99
  type: "symbol",
79
100
  size: 12,
80
- class: p(["transition-transform duration-200", t.value ? "" : "-rotate-90"])
101
+ class: k(["transition-transform duration-200", t.value ? "" : "-rotate-90"])
81
102
  }, null, 8, ["class"])
82
- ], 8, nt)),
83
- t.value || e.collapsed ? (l(), i("div", lt, [
84
- B(a.$slots, "default")
85
- ])) : g("", !0)
103
+ ], 8, zt)),
104
+ t.value || e.collapsed ? (r(), s("div", Lt, [
105
+ A(a.$slots, "default")
106
+ ])) : C("", !0)
86
107
  ]));
87
108
  }
88
- }), ot = ["title", "aria-label", "disabled", "aria-current"], it = { key: 1 }, st = {
109
+ }), Tt = ["title", "aria-label", "disabled", "aria-current"], Bt = { key: 1 }, At = {
89
110
  key: 0,
90
111
  class: "min-w-0 flex-1 truncate font-medium"
91
- }, rt = {
112
+ }, St = {
92
113
  key: 1,
93
114
  class: "rounded-corner bg-ui-surface px-2 py-0.5 font-semibold text-tx-muted text-xs"
94
- }, Ee = /* @__PURE__ */ E({
115
+ }, Ne = /* @__PURE__ */ E({
95
116
  __name: "SideButton",
96
117
  props: {
97
118
  label: {},
@@ -103,49 +124,49 @@ const tt = ["src", "alt"], N = /* @__PURE__ */ E({
103
124
  },
104
125
  emits: ["click"],
105
126
  setup(e) {
106
- return (n, t) => (l(), i("button", {
127
+ return (n, t) => (r(), s("button", {
107
128
  type: "button",
108
129
  title: e.collapsed ? e.label : void 0,
109
130
  "aria-label": e.collapsed ? e.label : void 0,
110
131
  disabled: e.disabled,
111
132
  "aria-current": e.active ? "page" : void 0,
112
- class: p(["group relative flex w-full items-center gap-3 rounded-corner border px-3 py-2 text-left text-sm transition-all duration-200", [
133
+ class: k(["group relative flex w-full items-center gap-3 rounded-corner border px-3 py-2 text-left text-sm transition-all duration-200", [
113
134
  e.active ? "border-secondary bg-primary/15 text-tx-main shadow-sm" : "border-transparent bg-transparent hover:border-ui-border hover:bg-ui-surface/70",
114
135
  e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer",
115
136
  e.collapsed ? "justify-center px-2" : ""
116
137
  ]]),
117
138
  onClick: t[0] || (t[0] = (a) => n.$emit("click"))
118
139
  }, [
119
- C("span", {
120
- class: p(["flex h-8 w-8 shrink-0 items-center justify-center rounded-corner font-semibold text-xs uppercase tracking-wide", e.active ? "border-secondary bg-primary/20" : ""]),
140
+ B("span", {
141
+ class: k(["flex h-8 w-8 shrink-0 items-center justify-center rounded-corner font-semibold text-xs uppercase tracking-wide", e.active ? "border-secondary bg-primary/20" : ""]),
121
142
  "aria-hidden": "true"
122
143
  }, [
123
- e.icon ? (l(), G(N, {
144
+ e.icon ? (r(), Q(H, {
124
145
  key: 0,
125
146
  name: e.icon,
126
147
  size: 20
127
- }, null, 8, ["name"])) : (l(), i("span", it, T(e.label.charAt(0).toUpperCase()), 1))
148
+ }, null, 8, ["name"])) : (r(), s("span", Bt, V(e.label.charAt(0).toUpperCase()), 1))
128
149
  ], 2),
129
- e.collapsed ? g("", !0) : (l(), i("span", st, T(e.label), 1)),
130
- !e.collapsed && e.badge !== "" ? (l(), i("span", rt, T(e.badge), 1)) : g("", !0)
131
- ], 10, ot));
150
+ e.collapsed ? C("", !0) : (r(), s("span", At, V(e.label), 1)),
151
+ !e.collapsed && e.badge !== "" ? (r(), s("span", St, V(e.badge), 1)) : C("", !0)
152
+ ], 10, Tt));
132
153
  }
133
- }), ut = {
154
+ }), Mt = {
134
155
  key: 0,
135
156
  class: "flex flex-col gap-2 border-ui-border border-b p-2"
136
- }, ct = { class: "flex items-center gap-2" }, dt = ["aria-label", "aria-expanded"], ft = {
157
+ }, Vt = { class: "flex items-center gap-2" }, Ot = ["aria-label", "aria-expanded"], It = {
137
158
  key: 0,
138
159
  class: "min-w-0 flex-1"
139
- }, mt = {
160
+ }, Pt = {
140
161
  key: 0,
141
162
  class: "truncate font-semibold text-sm"
142
- }, bt = {
163
+ }, jt = {
143
164
  key: 1,
144
165
  class: "truncate text-tx-muted text-xs"
145
- }, vt = { key: 0 }, pt = {
166
+ }, Ft = { key: 0 }, qt = {
146
167
  key: 1,
147
168
  class: "flex border-ui-border border-b p-2"
148
- }, gt = ["aria-label", "aria-expanded"], ht = { class: "flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-2" }, ve = "hidden h-8 w-8 shrink-0 items-center justify-center rounded-corner border border-ui-border bg-ui-surface/70 transition-colors hover:bg-ui-surface md:inline-flex", pe = 767, yt = /* @__PURE__ */ E({
169
+ }, Rt = ["aria-label", "aria-expanded"], Nt = { class: "flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-2" }, Ae = "hidden h-8 w-8 shrink-0 items-center justify-center rounded-corner border border-ui-border bg-ui-surface/70 transition-colors hover:bg-ui-surface md:inline-flex", Se = 767, Ht = /* @__PURE__ */ E({
149
170
  __name: "SideBar",
150
171
  props: {
151
172
  title: { default: "" },
@@ -158,100 +179,100 @@ const tt = ["src", "alt"], N = /* @__PURE__ */ E({
158
179
  },
159
180
  emits: ["update:modelValue", "update:collapsed", "change"],
160
181
  setup(e, { expose: n, emit: t }) {
161
- const a = e, o = t, s = $(a.collapsed ?? !1), c = $(!1);
162
- let u = null, f = null;
163
- const v = k(() => c.value || s.value), y = k(() => !!(a.title || a.subtitle));
164
- k(() => a.categories.length > 0);
165
- function M() {
182
+ const a = e, l = t, o = x(a.collapsed ?? !1), u = x(!1);
183
+ let i = null, m = null;
184
+ const v = p(() => u.value || o.value), f = p(() => !!(a.title || a.subtitle));
185
+ p(() => a.categories.length > 0);
186
+ function T() {
166
187
  return document.documentElement?.clientWidth || window.innerWidth;
167
188
  }
168
- function z() {
169
- c.value = M() <= pe;
189
+ function D() {
190
+ u.value = T() <= Se;
170
191
  }
171
- function L() {
172
- s.value = !s.value, o("update:collapsed", s.value);
192
+ function z() {
193
+ o.value = !o.value, l("update:collapsed", o.value);
173
194
  }
174
- function h(w) {
175
- o("update:modelValue", w), o("change", w);
195
+ function g(d) {
196
+ l("update:modelValue", d), l("change", d);
176
197
  }
177
- return X(
198
+ return K(
178
199
  () => a.collapsed,
179
- (w) => {
180
- w !== void 0 && (s.value = w);
200
+ (d) => {
201
+ d !== void 0 && (o.value = d);
181
202
  }
182
- ), Q(() => {
183
- u = window.matchMedia(`(max-width: ${pe}px)`), z(), u.addEventListener("change", z), window.addEventListener("resize", z), typeof ResizeObserver < "u" && document.documentElement && (f = new ResizeObserver(z), f.observe(document.documentElement));
184
- }), J(() => {
185
- u?.removeEventListener("change", z), window.removeEventListener("resize", z), f?.disconnect(), f = null;
186
- }), n({ collapsed: v }), (w, P) => (l(), i("aside", {
187
- class: p(["relative z-30 flex h-full shrink-0 flex-col rounded-corner border border-ui-border bg-ui-surface/70 transition-all duration-300", ["w-[84px]", v.value ? "md:w-[84px]" : "md:w-72"]])
203
+ ), _(() => {
204
+ i = window.matchMedia(`(max-width: ${Se}px)`), D(), i.addEventListener("change", D), window.addEventListener("resize", D), typeof ResizeObserver < "u" && document.documentElement && (m = new ResizeObserver(D), m.observe(document.documentElement));
205
+ }), ie(() => {
206
+ i?.removeEventListener("change", D), window.removeEventListener("resize", D), m?.disconnect(), m = null;
207
+ }), n({ collapsed: v }), (d, S) => (r(), s("aside", {
208
+ class: k(["relative z-30 flex h-full shrink-0 flex-col rounded-corner border border-ui-border bg-ui-surface/70 transition-all duration-300", ["w-[84px]", v.value ? "md:w-[84px]" : "md:w-72"]])
188
209
  }, [
189
- y.value || w.$slots.header ? (l(), i("header", ut, [
190
- C("div", ct, [
191
- C("button", {
210
+ f.value || d.$slots.header ? (r(), s("header", Mt, [
211
+ B("div", Vt, [
212
+ B("button", {
192
213
  type: "button",
193
- class: p(ve),
214
+ class: k(Ae),
194
215
  "aria-label": v.value ? e.expandLabel : e.collapseLabel,
195
216
  "aria-expanded": !v.value,
196
- onClick: L
217
+ onClick: z
197
218
  }, [
198
- j(N, {
219
+ q(H, {
199
220
  name: v.value ? "pan-end-symbolic" : "pan-start-symbolic",
200
221
  type: "symbol",
201
222
  size: 16
202
223
  }, null, 8, ["name"])
203
- ], 8, dt),
204
- y.value && !v.value ? (l(), i("div", ft, [
205
- e.title ? (l(), i("p", mt, T(e.title), 1)) : g("", !0),
206
- e.subtitle ? (l(), i("p", bt, T(e.subtitle), 1)) : g("", !0)
207
- ])) : g("", !0)
224
+ ], 8, Ot),
225
+ f.value && !v.value ? (r(), s("div", It, [
226
+ e.title ? (r(), s("p", Pt, V(e.title), 1)) : C("", !0),
227
+ e.subtitle ? (r(), s("p", jt, V(e.subtitle), 1)) : C("", !0)
228
+ ])) : C("", !0)
208
229
  ]),
209
- w.$slots.header && !v.value ? (l(), i("div", vt, [
210
- B(w.$slots, "header", { collapsed: v.value })
211
- ])) : g("", !0)
212
- ])) : (l(), i("div", pt, [
213
- C("button", {
230
+ d.$slots.header && !v.value ? (r(), s("div", Ft, [
231
+ A(d.$slots, "header", { collapsed: v.value })
232
+ ])) : C("", !0)
233
+ ])) : (r(), s("div", qt, [
234
+ B("button", {
214
235
  type: "button",
215
- class: p(ve),
236
+ class: k(Ae),
216
237
  "aria-label": v.value ? e.expandLabel : e.collapseLabel,
217
238
  "aria-expanded": !v.value,
218
- onClick: L
239
+ onClick: z
219
240
  }, [
220
- j(N, {
241
+ q(H, {
221
242
  name: v.value ? "pan-end-symbolic" : "pan-start-symbolic",
222
243
  type: "symbol",
223
244
  size: 16
224
245
  }, null, 8, ["name"])
225
- ], 8, gt)
246
+ ], 8, Rt)
226
247
  ])),
227
- C("div", ht, [
228
- (l(!0), i(Y, null, ae(e.categories, (F) => (l(), G(Le, {
229
- key: F.id,
230
- title: F.title,
248
+ B("div", Nt, [
249
+ (r(!0), s(J, null, te(e.categories, (I) => (r(), Q(Re, {
250
+ key: I.id,
251
+ title: I.title,
231
252
  collapsed: v.value
232
253
  }, {
233
- default: U(() => [
234
- (l(!0), i(Y, null, ae(F.items, (x) => (l(), G(Ee, {
235
- key: x.id,
236
- label: x.label,
237
- icon: x.icon,
238
- badge: x.badge,
239
- disabled: x.disabled,
254
+ default: W(() => [
255
+ (r(!0), s(J, null, te(I.items, (w) => (r(), Q(Ne, {
256
+ key: w.id,
257
+ label: w.label,
258
+ icon: w.icon,
259
+ badge: w.badge,
260
+ disabled: w.disabled,
240
261
  collapsed: v.value,
241
- active: e.modelValue === x.id,
242
- onClick: (r) => h(x.id)
262
+ active: e.modelValue === w.id,
263
+ onClick: (c) => g(w.id)
243
264
  }, null, 8, ["label", "icon", "badge", "disabled", "collapsed", "active", "onClick"]))), 128))
244
265
  ]),
245
266
  _: 2
246
267
  }, 1032, ["title", "collapsed"]))), 128)),
247
- B(w.$slots, "default", { collapsed: v.value })
268
+ A(d.$slots, "default", { collapsed: v.value })
248
269
  ])
249
270
  ], 2));
250
271
  }
251
- }), xt = { class: "flex min-w-0 flex-col gap-1" }, kt = ["for"], wt = { class: "relative flex min-w-0 items-center" }, $t = ["id"], Ct = /* @__PURE__ */ E({
272
+ }), Ut = { class: "flex min-w-0 flex-col gap-1" }, Wt = ["for"], Kt = { class: "relative flex min-w-0 items-center" }, Gt = ["id"], Qt = /* @__PURE__ */ E({
252
273
  inheritAttrs: !1,
253
274
  __name: "SelectField",
254
- props: /* @__PURE__ */ be({
275
+ props: /* @__PURE__ */ Be({
255
276
  label: {}
256
277
  }, {
257
278
  modelValue: {
@@ -259,32 +280,32 @@ const tt = ["src", "alt"], N = /* @__PURE__ */ E({
259
280
  },
260
281
  modelModifiers: {}
261
282
  }),
262
- emits: /* @__PURE__ */ be(["change"], ["update:modelValue"]),
283
+ emits: /* @__PURE__ */ Be(["change"], ["update:modelValue"]),
263
284
  setup(e, { emit: n }) {
264
- const t = e, a = Pe(), o = Ne(), s = k(() => a.id ?? o), c = n, [u, f] = Fe(e, "modelValue", {
285
+ const t = e, a = $e(), l = lt(), o = p(() => a.id ?? l), u = n, [i, m] = ot(e, "modelValue", {
265
286
  set(v) {
266
- return f.number ? Number(v) : v;
287
+ return m.number ? Number(v) : v;
267
288
  }
268
289
  });
269
- return (v, y) => (l(), i("div", xt, [
270
- t.label ? (l(), i("label", {
290
+ return (v, f) => (r(), s("div", Ut, [
291
+ t.label ? (r(), s("label", {
271
292
  key: 0,
272
- for: s.value,
293
+ for: o.value,
273
294
  class: "text-tx-muted text-xs"
274
- }, T(t.label), 9, kt)) : g("", !0),
275
- C("div", wt, [
276
- xe(C("select", ne({
277
- id: s.value,
278
- "onUpdate:modelValue": y[0] || (y[0] = (M) => Re(u) ? u.value = M : null),
295
+ }, V(t.label), 9, Wt)) : C("", !0),
296
+ B("div", Kt, [
297
+ Ce(B("select", ae({
298
+ id: o.value,
299
+ "onUpdate:modelValue": f[0] || (f[0] = (T) => rt(i) ? i.value = T : null),
279
300
  class: "min-w-0 flex-1 appearance-none truncate rounded-corner border border-ui-border bg-ui-surface/60 py-1.5 pr-8 pl-2 text-sm text-tx-main"
280
- }, V(a), {
281
- onChange: y[1] || (y[1] = (M) => c("change", M))
301
+ }, F(a), {
302
+ onChange: f[1] || (f[1] = (T) => u("change", T))
282
303
  }), [
283
- B(v.$slots, "default")
284
- ], 16, $t), [
285
- [He, V(u)]
304
+ A(v.$slots, "default")
305
+ ], 16, Gt), [
306
+ [st, F(i)]
286
307
  ]),
287
- j(N, {
308
+ q(H, {
288
309
  name: "pan-down-symbolic",
289
310
  type: "symbol",
290
311
  size: 14,
@@ -293,239 +314,239 @@ const tt = ["src", "alt"], N = /* @__PURE__ */ E({
293
314
  ])
294
315
  ]));
295
316
  }
296
- }), de = /* @__PURE__ */ Symbol("barra de vasak");
297
- function re(e) {
317
+ }), De = /* @__PURE__ */ Symbol("barra de vasak");
318
+ function we(e) {
298
319
  return e === "left" || e === "right" ? "vertical" : "horizontal";
299
320
  }
300
- const zt = ["top", "bottom", "left", "right"];
301
- function Lt(e) {
302
- return typeof e == "string" && zt.includes(e);
321
+ const Yt = ["top", "bottom", "left", "right"];
322
+ function Xt(e) {
323
+ return typeof e == "string" && Yt.includes(e);
303
324
  }
304
- function Z() {
305
- const e = ke(de, null);
325
+ function de() {
326
+ const e = be(De, null);
306
327
  if (e) return e;
307
- const n = $("top");
328
+ const n = x("top");
308
329
  return {
309
330
  posicion: n,
310
- orientacion: k(() => re(n.value)),
311
- vertical: k(() => re(n.value) === "vertical")
331
+ orientacion: p(() => we(n.value)),
332
+ vertical: p(() => we(n.value) === "vertical")
312
333
  };
313
334
  }
314
- const fe = ["minimize", "maximize", "close"], Et = "window", Dt = "barPosition";
315
- function Bt(e) {
316
- const t = e?.[Et]?.[Dt];
317
- return Lt(t) ? t : null;
335
+ const ze = ["minimize", "maximize", "close"], _t = "window", Jt = "barPosition";
336
+ function Zt(e) {
337
+ const t = e?.[_t]?.[Jt];
338
+ return Xt(t) ? t : null;
318
339
  }
319
- function Mt(e = "top") {
320
- const n = $(e);
340
+ function ea(e = "top") {
341
+ const n = x(e);
321
342
  let t = null, a = !1;
322
- async function o() {
343
+ async function l() {
323
344
  try {
324
- const { readConfig: s } = await import("@vasakgroup/plugin-config-manager"), c = await s();
325
- n.value = Bt(c) ?? e;
345
+ const { readConfig: o } = await import("@vasakgroup/plugin-config-manager"), u = await o();
346
+ n.value = Zt(u) ?? e;
326
347
  } catch {
327
348
  }
328
349
  }
329
- return Q(async () => {
330
- await o();
350
+ return _(async () => {
351
+ await l();
331
352
  try {
332
- const { listen: s } = await import("@tauri-apps/api/event"), c = await s("config-changed", () => {
333
- o();
353
+ const { listen: o } = await import("@tauri-apps/api/event"), u = await o("config-changed", () => {
354
+ l();
334
355
  });
335
356
  if (a) {
336
- c();
357
+ u();
337
358
  return;
338
359
  }
339
- t = c;
360
+ t = u;
340
361
  } catch {
341
362
  }
342
- }), J(() => {
363
+ }), ie(() => {
343
364
  a = !0, t?.(), t = null;
344
365
  }), n;
345
366
  }
346
- function De(e) {
347
- const n = we(), t = {};
367
+ function He(e) {
368
+ const n = je(), t = {};
348
369
  for (const a of e) {
349
- const o = `on${a[0].toUpperCase()}${a.slice(1)}`;
350
- n?.vnode.props?.[o] && (t[a] = () => n.emit(a));
370
+ const l = `on${a[0].toUpperCase()}${a.slice(1)}`;
371
+ n?.vnode.props?.[l] && (t[a] = () => n.emit(a));
351
372
  }
352
373
  return t;
353
374
  }
354
- const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title", "aria-label"], ie = "flex items-center justify-center rounded-corner border border-ui-border bg-ui-bg/80 p-1 transition-colors", Be = /* @__PURE__ */ E({
375
+ const ta = ["title", "aria-label"], aa = ["title", "aria-label"], na = ["title", "aria-label"], he = "flex items-center justify-center rounded-corner border border-ui-border bg-ui-bg/80 p-1 transition-colors", Ue = /* @__PURE__ */ E({
355
376
  __name: "WindowControls",
356
377
  props: {
357
- controls: { default: () => fe },
358
- minimizeLabel: { default: "Minimize" },
359
- maximizeLabel: { default: "Maximize" },
360
- closeLabel: { default: "Close" }
378
+ controls: { default: () => ze },
379
+ minimizeLabel: {},
380
+ maximizeLabel: {},
381
+ closeLabel: {}
361
382
  },
362
383
  emits: ["minimize", "maximize", "close"],
363
384
  setup(e, { emit: n }) {
364
- const t = e, a = n, { vertical: o } = Z(), s = k(() => ({
385
+ const t = e, { t: a } = yt(), l = p(() => t.minimizeLabel ?? a("ventana.minimizar")), o = p(() => t.maximizeLabel ?? a("ventana.maximizar")), u = p(() => t.closeLabel ?? a("ventana.cerrar")), i = n, { vertical: m } = de(), v = p(() => ({
365
386
  minimize: t.controls.includes("minimize"),
366
387
  maximize: t.controls.includes("maximize"),
367
388
  close: t.controls.includes("close")
368
389
  }));
369
- function c() {
370
- return _e();
390
+ function f() {
391
+ return gt();
371
392
  }
372
- const u = we();
373
- function f(z) {
374
- return !!u?.vnode.props?.[`on${z}`];
393
+ const T = je();
394
+ function D(S) {
395
+ return !!T?.vnode.props?.[`on${S}`];
375
396
  }
376
- function v() {
377
- if (f("Minimize")) return a("minimize");
378
- c().minimize();
397
+ function z() {
398
+ if (D("Minimize")) return i("minimize");
399
+ f().minimize();
379
400
  }
380
- function y() {
381
- if (f("Maximize")) return a("maximize");
382
- c().toggleMaximize();
401
+ function g() {
402
+ if (D("Maximize")) return i("maximize");
403
+ f().toggleMaximize();
383
404
  }
384
- function M() {
385
- if (f("Close")) return a("close");
386
- c().close();
405
+ function d() {
406
+ if (D("Close")) return i("close");
407
+ f().close();
387
408
  }
388
- return (z, L) => e.controls.length ? (l(), i("div", {
409
+ return (S, I) => e.controls.length ? (r(), s("div", {
389
410
  key: 0,
390
- class: p(["flex shrink-0 gap-1", V(o) ? "flex-col" : ""]),
411
+ class: k(["flex shrink-0 gap-1", F(m) ? "flex-col" : ""]),
391
412
  "data-tauri-drag-region": ""
392
413
  }, [
393
- s.value.minimize ? (l(), i("button", {
414
+ v.value.minimize ? (r(), s("button", {
394
415
  key: 0,
395
416
  type: "button",
396
- class: p([ie, "hover:bg-status-success"]),
397
- title: e.minimizeLabel,
398
- "aria-label": e.minimizeLabel,
399
- onClick: L[0] || (L[0] = (h) => v())
417
+ class: k([he, "hover:bg-status-success"]),
418
+ title: l.value,
419
+ "aria-label": l.value,
420
+ onClick: I[0] || (I[0] = (w) => z())
400
421
  }, [
401
- j(N, {
422
+ q(H, {
402
423
  name: "window-minimize",
403
424
  type: "symbol",
404
425
  size: 24
405
426
  })
406
- ], 10, At)) : g("", !0),
407
- s.value.maximize ? (l(), i("button", {
427
+ ], 10, ta)) : C("", !0),
428
+ v.value.maximize ? (r(), s("button", {
408
429
  key: 1,
409
430
  type: "button",
410
- class: p([ie, "hover:bg-status-warning"]),
411
- title: e.maximizeLabel,
412
- "aria-label": e.maximizeLabel,
413
- onClick: L[1] || (L[1] = (h) => y())
431
+ class: k([he, "hover:bg-status-warning"]),
432
+ title: o.value,
433
+ "aria-label": o.value,
434
+ onClick: I[1] || (I[1] = (w) => g())
414
435
  }, [
415
- j(N, {
436
+ q(H, {
416
437
  name: "window-maximize",
417
438
  type: "symbol",
418
439
  size: 24
419
440
  })
420
- ], 10, St)) : g("", !0),
421
- s.value.close ? (l(), i("button", {
441
+ ], 10, aa)) : C("", !0),
442
+ v.value.close ? (r(), s("button", {
422
443
  key: 2,
423
444
  type: "button",
424
- class: p([ie, "hover:bg-status-error"]),
425
- title: e.closeLabel,
426
- "aria-label": e.closeLabel,
427
- onClick: L[2] || (L[2] = (h) => M())
445
+ class: k([he, "hover:bg-status-error"]),
446
+ title: u.value,
447
+ "aria-label": u.value,
448
+ onClick: I[2] || (I[2] = (w) => d())
428
449
  }, [
429
- j(N, {
450
+ q(H, {
430
451
  name: "window-close",
431
452
  type: "symbol",
432
453
  size: 24
433
454
  })
434
- ], 10, Tt)) : g("", !0)
435
- ], 2)) : g("", !0);
455
+ ], 10, na)) : C("", !0)
456
+ ], 2)) : C("", !0);
436
457
  }
437
- }), It = {
458
+ }), la = {
438
459
  key: 0,
439
460
  class: "flex shrink-0 items-center",
440
461
  "data-tauri-drag-region": ""
441
- }, Ot = {
462
+ }, oa = {
442
463
  key: 1,
443
464
  class: "min-w-0 shrink truncate text-sm",
444
465
  "data-tauri-drag-region": ""
445
- }, Me = /* @__PURE__ */ E({
466
+ }, We = /* @__PURE__ */ E({
446
467
  __name: "AppBar",
447
468
  props: {
448
469
  position: { default: null },
449
470
  title: { default: "" },
450
- minimizeLabel: { default: "Minimize" },
451
- maximizeLabel: { default: "Maximize" },
452
- closeLabel: { default: "Close" },
453
- controls: { default: () => fe }
471
+ minimizeLabel: {},
472
+ maximizeLabel: {},
473
+ closeLabel: {},
474
+ controls: { default: () => ze }
454
475
  },
455
476
  emits: ["minimize", "maximize", "close"],
456
477
  setup(e) {
457
- const n = e, t = Z(), a = k(() => n.position ?? t.posicion.value), o = k(() => a.value === "left" || a.value === "right");
458
- return ue(de, {
478
+ const n = e, t = de(), a = p(() => n.position ?? t.posicion.value), l = p(() => a.value === "left" || a.value === "right");
479
+ return ue(De, {
459
480
  posicion: a,
460
- orientacion: k(() => o.value ? "vertical" : "horizontal"),
461
- vertical: o
462
- }), (s, c) => (l(), i("div", {
463
- class: p(["relative flex shrink-0 items-center gap-2 p-1 font-title", o.value ? "h-full flex-col" : "w-full"]),
481
+ orientacion: p(() => l.value ? "vertical" : "horizontal"),
482
+ vertical: l
483
+ }), (o, u) => (r(), s("div", {
484
+ class: k(["relative flex shrink-0 items-center gap-2 p-1 font-title", l.value ? "h-full flex-col" : "w-full"]),
464
485
  "data-tauri-drag-region": ""
465
486
  }, [
466
- s.$slots.identidad ? (l(), i("div", It, [
467
- B(s.$slots, "identidad")
468
- ])) : g("", !0),
469
- (s.$slots.titulo || e.title) && !o.value ? (l(), i("p", Ot, [
470
- B(s.$slots, "titulo", {}, () => [
471
- We(T(e.title), 1)
487
+ o.$slots.identidad ? (r(), s("div", la, [
488
+ A(o.$slots, "identidad")
489
+ ])) : C("", !0),
490
+ (o.$slots.titulo || e.title) && !l.value ? (r(), s("p", oa, [
491
+ A(o.$slots, "titulo", {}, () => [
492
+ Ee(V(e.title), 1)
472
493
  ])
473
- ])) : g("", !0),
474
- C("div", {
475
- class: p(["flex min-h-0 min-w-0 flex-1 items-center gap-2 overflow-auto", o.value ? "flex-col" : ""]),
494
+ ])) : C("", !0),
495
+ B("div", {
496
+ class: k(["flex min-h-0 min-w-0 flex-1 items-center gap-2 overflow-auto", l.value ? "flex-col" : ""]),
476
497
  "data-tauri-drag-region": ""
477
498
  }, [
478
- B(s.$slots, "default")
499
+ A(o.$slots, "default")
479
500
  ], 2),
480
- s.$slots.acciones ? (l(), i("div", {
501
+ o.$slots.acciones ? (r(), s("div", {
481
502
  key: 2,
482
- class: p(["flex shrink-0 items-center gap-1", o.value ? "flex-col" : ""])
503
+ class: k(["flex shrink-0 items-center gap-1", l.value ? "flex-col" : ""])
483
504
  }, [
484
- B(s.$slots, "acciones")
485
- ], 2)) : g("", !0),
486
- j(Be, ne({
505
+ A(o.$slots, "acciones")
506
+ ], 2)) : C("", !0),
507
+ q(Ue, ae({
487
508
  controls: e.controls,
488
509
  "minimize-label": e.minimizeLabel,
489
510
  "maximize-label": e.maximizeLabel,
490
511
  "close-label": e.closeLabel
491
- }, $e(V(De)(["minimize", "maximize", "close"]))), null, 16, ["controls", "minimize-label", "maximize-label", "close-label"]),
492
- s.$slots.centro ? (l(), i("div", {
512
+ }, Fe(F(He)(["minimize", "maximize", "close"]))), null, 16, ["controls", "minimize-label", "maximize-label", "close-label"]),
513
+ o.$slots.centro ? (r(), s("div", {
493
514
  key: 3,
494
- class: p(["pointer-events-none absolute flex items-center justify-center", o.value ? "inset-x-0 top-1/2 -translate-y-1/2 flex-col" : "inset-y-0 left-1/2 -translate-x-1/2"])
515
+ class: k(["pointer-events-none absolute flex items-center justify-center", l.value ? "inset-x-0 top-1/2 -translate-y-1/2 flex-col" : "inset-y-0 left-1/2 -translate-x-1/2"])
495
516
  }, [
496
- C("div", {
497
- class: p(["pointer-events-auto flex items-center gap-2", o.value ? "flex-col" : ""])
517
+ B("div", {
518
+ class: k(["pointer-events-auto flex items-center gap-2", l.value ? "flex-col" : ""])
498
519
  }, [
499
- B(s.$slots, "centro")
520
+ A(o.$slots, "centro")
500
521
  ], 2)
501
- ], 2)) : g("", !0)
522
+ ], 2)) : C("", !0)
502
523
  ], 2));
503
524
  }
504
- }), Vt = { class: "flex min-h-0 min-w-0 flex-1" }, jt = /* @__PURE__ */ E({
525
+ }), ra = { class: "flex min-h-0 min-w-0 flex-1" }, sa = /* @__PURE__ */ E({
505
526
  __name: "WindowFrame",
506
527
  props: {
507
528
  position: { default: null },
508
529
  title: { default: "" },
509
- minimizeLabel: { default: "Minimize" },
510
- maximizeLabel: { default: "Maximize" },
511
- closeLabel: { default: "Close" },
512
- controls: { default: () => fe },
530
+ minimizeLabel: {},
531
+ maximizeLabel: {},
532
+ closeLabel: {},
533
+ controls: { default: () => ze },
513
534
  hideBar: { type: Boolean, default: !1 }
514
535
  },
515
536
  emits: ["minimize", "maximize", "close"],
516
537
  setup(e) {
517
- const n = e, t = Mt(), a = k(() => n.position ?? t.value), o = k(() => re(a.value)), s = k(() => o.value === "vertical");
518
- ue(de, { posicion: a, orientacion: o, vertical: s });
519
- const c = {
538
+ const n = e, t = ea(), a = p(() => n.position ?? t.value), l = p(() => we(a.value)), o = p(() => l.value === "vertical");
539
+ ue(De, { posicion: a, orientacion: l, vertical: o });
540
+ const u = {
520
541
  top: "flex-col",
521
542
  bottom: "flex-col-reverse",
522
543
  left: "flex-row",
523
544
  right: "flex-row-reverse"
524
545
  };
525
- return (u, f) => (l(), i("div", {
526
- class: p(["flex h-screen w-screen overflow-hidden rounded-corner-window border border-ui-border bg-ui-bg/80", c[a.value]])
546
+ return (i, m) => (r(), s("div", {
547
+ class: k(["flex h-screen w-screen overflow-hidden rounded-corner-window border border-ui-border bg-ui-bg/80", u[a.value]])
527
548
  }, [
528
- e.hideBar ? g("", !0) : (l(), G(Me, ne({
549
+ e.hideBar ? C("", !0) : (r(), Q(We, ae({
529
550
  key: 0,
530
551
  position: a.value,
531
552
  title: e.title,
@@ -533,57 +554,57 @@ const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title",
533
554
  "maximize-label": e.maximizeLabel,
534
555
  "close-label": e.closeLabel,
535
556
  controls: e.controls
536
- }, $e(V(De)(["minimize", "maximize", "close"]))), qe({
537
- default: U(() => [
538
- B(u.$slots, "barra")
557
+ }, Fe(F(He)(["minimize", "maximize", "close"]))), it({
558
+ default: W(() => [
559
+ A(i.$slots, "barra")
539
560
  ]),
540
561
  _: 2
541
562
  }, [
542
- u.$slots.identidad ? {
563
+ i.$slots.identidad ? {
543
564
  name: "identidad",
544
- fn: U(() => [
545
- B(u.$slots, "identidad")
565
+ fn: W(() => [
566
+ A(i.$slots, "identidad")
546
567
  ]),
547
568
  key: "0"
548
569
  } : void 0,
549
- u.$slots.titulo ? {
570
+ i.$slots.titulo ? {
550
571
  name: "titulo",
551
- fn: U(() => [
552
- B(u.$slots, "titulo")
572
+ fn: W(() => [
573
+ A(i.$slots, "titulo")
553
574
  ]),
554
575
  key: "1"
555
576
  } : void 0,
556
- u.$slots.centro ? {
577
+ i.$slots.centro ? {
557
578
  name: "centro",
558
- fn: U(() => [
559
- B(u.$slots, "centro")
579
+ fn: W(() => [
580
+ A(i.$slots, "centro")
560
581
  ]),
561
582
  key: "2"
562
583
  } : void 0,
563
- u.$slots.acciones ? {
584
+ i.$slots.acciones ? {
564
585
  name: "acciones",
565
- fn: U(() => [
566
- B(u.$slots, "acciones")
586
+ fn: W(() => [
587
+ A(i.$slots, "acciones")
567
588
  ]),
568
589
  key: "3"
569
590
  } : void 0
570
591
  ]), 1040, ["position", "title", "minimize-label", "maximize-label", "close-label", "controls"])),
571
- C("div", Vt, [
572
- B(u.$slots, "default")
592
+ B("div", ra, [
593
+ A(i.$slots, "default")
573
594
  ])
574
595
  ], 2));
575
596
  }
576
- }), Pt = ["aria-selected", "title", "aria-label", "tabindex"], Nt = {
597
+ }), ia = ["aria-selected", "title", "aria-label", "tabindex"], ua = {
577
598
  key: 1,
578
599
  "aria-hidden": "true"
579
- }, Ft = {
600
+ }, ca = {
580
601
  key: 2,
581
602
  class: "min-w-0 flex-1 truncate"
582
- }, Rt = ["title", "aria-label"], Ht = { class: "whitespace-nowrap" }, Wt = {
603
+ }, da = ["title", "aria-label"], fa = { class: "whitespace-nowrap" }, ma = {
583
604
  key: 0,
584
605
  class: "size-2 shrink-0 rounded-full bg-current",
585
606
  "aria-hidden": "true"
586
- }, qt = ["title", "aria-label"], Ut = 500, ge = 8, he = 6, Ae = /* @__PURE__ */ E({
607
+ }, va = ["title", "aria-label"], ba = 500, Me = 8, Ve = 6, Ke = /* @__PURE__ */ E({
587
608
  __name: "TabItem",
588
609
  props: {
589
610
  tab: {},
@@ -594,165 +615,165 @@ const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title",
594
615
  },
595
616
  emits: ["select", "close", "menu", "mover", "navegar"],
596
617
  setup(e, { emit: n }) {
597
- const t = e, a = n, { vertical: o, posicion: s } = Z(), c = $(null), u = $(null), f = $(!1), v = $(!1), y = $(!1), M = $({ top: 0, left: 0, right: 0 });
598
- let z = null, L = null;
599
- const h = k(() => t.tab.closable !== !1), w = k(() => t.tab.tooltip ?? t.tab.label), P = k(
618
+ const t = e, a = n, { vertical: l, posicion: o } = de(), u = x(null), i = x(null), m = x(!1), v = x(!1), f = x(!1), T = x({ top: 0, left: 0, right: 0 });
619
+ let D = null, z = null;
620
+ const g = p(() => t.tab.closable !== !1), d = p(() => t.tab.tooltip ?? t.tab.label), S = p(
600
621
  () => t.tab.dirty ? `${t.tab.label} · ${t.dirtyLabel}` : t.tab.label
601
- ), F = k(() => t.tab.label.trim().charAt(0).toUpperCase()), x = k(() => f.value || y.value), r = k(
602
- () => !!t.tab.dirty && !(x.value && h.value)
603
- ), d = k(
604
- () => h.value && (x.value || t.active || !t.tab.dirty)
605
- ), b = k(
606
- () => o.value && (f.value || v.value || y.value)
607
- ), D = k(() => {
608
- const A = { position: "fixed", top: `${M.value.top}px`, zIndex: 50 };
609
- return s.value === "right" ? { ...A, right: `${M.value.right + he}px` } : { ...A, left: `${M.value.left + he}px` };
622
+ ), I = p(() => t.tab.label.trim().charAt(0).toUpperCase()), w = p(() => m.value || f.value), c = p(
623
+ () => !!t.tab.dirty && !(w.value && g.value)
624
+ ), b = p(
625
+ () => g.value && (w.value || t.active || !t.tab.dirty)
626
+ ), y = p(
627
+ () => l.value && (m.value || v.value || f.value)
628
+ ), P = p(() => {
629
+ const R = { position: "fixed", top: `${T.value.top}px`, zIndex: 50 };
630
+ return o.value === "right" ? { ...R, right: `${T.value.right + Ve}px` } : { ...R, left: `${T.value.left + Ve}px` };
610
631
  });
611
- function _() {
612
- const A = c.value;
613
- if (!A) return;
614
- const m = A.getBoundingClientRect();
615
- M.value = {
616
- top: m.top,
617
- left: m.right,
618
- right: window.innerWidth - m.left
632
+ function Z() {
633
+ const R = u.value;
634
+ if (!R) return;
635
+ const h = R.getBoundingClientRect();
636
+ T.value = {
637
+ top: h.top,
638
+ left: h.right,
639
+ right: window.innerWidth - h.left
619
640
  };
620
641
  }
621
- function H(A) {
622
- const m = A.relatedTarget;
623
- m && u.value?.contains(m) || (y.value = !1);
642
+ function U(R) {
643
+ const h = R.relatedTarget;
644
+ h && i.value?.contains(h) || (f.value = !1);
624
645
  }
625
646
  function ee() {
626
- f.value = !0, _();
647
+ m.value = !0, Z();
627
648
  }
628
- function W() {
629
- v.value = !0, _();
649
+ function G() {
650
+ v.value = !0, Z();
630
651
  }
631
- function R() {
632
- z !== null && clearTimeout(z), z = null, L = null;
652
+ function L() {
653
+ D !== null && clearTimeout(D), D = null, z = null;
633
654
  }
634
- function K(A) {
635
- A.button === 0 && (L = { x: A.clientX, y: A.clientY }, z = setTimeout(() => {
636
- L && a("menu", L), R();
637
- }, Ut));
655
+ function $(R) {
656
+ R.button === 0 && (z = { x: R.clientX, y: R.clientY }, D = setTimeout(() => {
657
+ z && a("menu", z), L();
658
+ }, ba));
638
659
  }
639
- function te(A) {
640
- if (!L) return;
641
- (Math.abs(A.clientX - L.x) > ge || Math.abs(A.clientY - L.y) > ge) && R();
660
+ function O(R) {
661
+ if (!z) return;
662
+ (Math.abs(R.clientX - z.x) > Me || Math.abs(R.clientY - z.y) > Me) && L();
642
663
  }
643
- function Oe(A) {
644
- A.button === 1 && h.value && (A.preventDefault(), a("close"));
664
+ function ne(R) {
665
+ R.button === 1 && g.value && (R.preventDefault(), a("close"));
645
666
  }
646
- function Ve(A) {
647
- A.preventDefault(), a("menu", { x: A.clientX, y: A.clientY });
667
+ function nt(R) {
668
+ R.preventDefault(), a("menu", { x: R.clientX, y: R.clientY });
648
669
  }
649
- return J(R), (A, m) => (l(), i("div", {
670
+ return ie(L), (R, h) => (r(), s("div", {
650
671
  ref_key: "raiz",
651
- ref: c,
652
- class: p(["group relative flex shrink-0 cursor-pointer items-center gap-2 rounded-corner border border-ui-border transition-colors", [
672
+ ref: u,
673
+ class: k(["group relative flex shrink-0 cursor-pointer items-center gap-2 rounded-corner border border-ui-border transition-colors", [
653
674
  e.active ? "bg-primary font-bold text-tx-on-primary" : "bg-ui-bg/80 hover:bg-ui-surface/70",
654
- V(o) ? "size-8 justify-center p-0 text-sm" : "w-34 max-w-34 px-3 py-1 text-sm"
675
+ F(l) ? "size-8 justify-center p-0 text-sm" : "w-34 max-w-34 px-3 py-1 text-sm"
655
676
  ]]),
656
677
  role: "tab",
657
678
  "aria-selected": e.active,
658
- title: w.value,
659
- "aria-label": P.value,
679
+ title: d.value,
680
+ "aria-label": S.value,
660
681
  tabindex: e.tabindex,
661
- onClick: m[5] || (m[5] = S((I) => a("select"), ["stop"])),
682
+ onClick: h[5] || (h[5] = M((N) => a("select"), ["stop"])),
662
683
  onKeydown: [
663
- m[6] || (m[6] = O(S((I) => a("select"), ["stop"]), ["enter"])),
664
- m[7] || (m[7] = O(S((I) => a("select"), ["prevent", "stop"]), ["space"])),
665
- m[8] || (m[8] = O(S((I) => a("navegar", "anterior"), ["prevent", "stop"]), ["left"])),
666
- m[9] || (m[9] = O(S((I) => a("navegar", "anterior"), ["prevent", "stop"]), ["up"])),
667
- m[10] || (m[10] = O(S((I) => a("navegar", "siguiente"), ["prevent", "stop"]), ["right"])),
668
- m[11] || (m[11] = O(S((I) => a("navegar", "siguiente"), ["prevent", "stop"]), ["down"])),
669
- m[12] || (m[12] = O(S((I) => a("navegar", "primera"), ["prevent", "stop"]), ["home"])),
670
- m[13] || (m[13] = O(S((I) => a("navegar", "ultima"), ["prevent", "stop"]), ["end"])),
671
- m[14] || (m[14] = O(S((I) => a("mover", -1), ["alt", "prevent", "stop"]), ["left"])),
672
- m[15] || (m[15] = O(S((I) => a("mover", -1), ["alt", "prevent", "stop"]), ["up"])),
673
- m[16] || (m[16] = O(S((I) => a("mover", 1), ["alt", "prevent", "stop"]), ["right"])),
674
- m[17] || (m[17] = O(S((I) => a("mover", 1), ["alt", "prevent", "stop"]), ["down"])),
675
- m[18] || (m[18] = O(S((I) => h.value && a("close"), ["prevent", "stop"]), ["delete"]))
684
+ h[6] || (h[6] = j(M((N) => a("select"), ["stop"]), ["enter"])),
685
+ h[7] || (h[7] = j(M((N) => a("select"), ["prevent", "stop"]), ["space"])),
686
+ h[8] || (h[8] = j(M((N) => a("navegar", "anterior"), ["prevent", "stop"]), ["left"])),
687
+ h[9] || (h[9] = j(M((N) => a("navegar", "anterior"), ["prevent", "stop"]), ["up"])),
688
+ h[10] || (h[10] = j(M((N) => a("navegar", "siguiente"), ["prevent", "stop"]), ["right"])),
689
+ h[11] || (h[11] = j(M((N) => a("navegar", "siguiente"), ["prevent", "stop"]), ["down"])),
690
+ h[12] || (h[12] = j(M((N) => a("navegar", "primera"), ["prevent", "stop"]), ["home"])),
691
+ h[13] || (h[13] = j(M((N) => a("navegar", "ultima"), ["prevent", "stop"]), ["end"])),
692
+ h[14] || (h[14] = j(M((N) => a("mover", -1), ["alt", "prevent", "stop"]), ["left"])),
693
+ h[15] || (h[15] = j(M((N) => a("mover", -1), ["alt", "prevent", "stop"]), ["up"])),
694
+ h[16] || (h[16] = j(M((N) => a("mover", 1), ["alt", "prevent", "stop"]), ["right"])),
695
+ h[17] || (h[17] = j(M((N) => a("mover", 1), ["alt", "prevent", "stop"]), ["down"])),
696
+ h[18] || (h[18] = j(M((N) => g.value && a("close"), ["prevent", "stop"]), ["delete"]))
676
697
  ],
677
- onAuxclick: S(Oe, ["stop"]),
678
- onContextmenu: Ve,
679
- onPointerdown: K,
680
- onPointermove: te,
681
- onPointerup: R,
682
- onPointerleave: R,
698
+ onAuxclick: M(ne, ["stop"]),
699
+ onContextmenu: nt,
700
+ onPointerdown: $,
701
+ onPointermove: O,
702
+ onPointerup: L,
703
+ onPointerleave: L,
683
704
  onMouseenter: ee,
684
- onMouseleave: m[19] || (m[19] = (I) => f.value = !1),
685
- onFocus: W,
686
- onBlur: m[20] || (m[20] = (I) => v.value = !1)
705
+ onMouseleave: h[19] || (h[19] = (N) => m.value = !1),
706
+ onFocus: G,
707
+ onBlur: h[20] || (h[20] = (N) => v.value = !1)
687
708
  }, [
688
- e.tab.icon ? (l(), G(N, {
709
+ e.tab.icon ? (r(), Q(H, {
689
710
  key: 0,
690
711
  name: e.tab.icon,
691
712
  size: 16,
692
713
  class: "shrink-0"
693
- }, null, 8, ["name"])) : V(o) ? (l(), i("span", Nt, T(F.value), 1)) : g("", !0),
694
- V(o) ? g("", !0) : (l(), i("span", Ft, T(e.tab.label), 1)),
695
- r.value ? (l(), i("span", {
714
+ }, null, 8, ["name"])) : F(l) ? (r(), s("span", ua, V(I.value), 1)) : C("", !0),
715
+ F(l) ? C("", !0) : (r(), s("span", ca, V(e.tab.label), 1)),
716
+ c.value ? (r(), s("span", {
696
717
  key: 3,
697
- class: p(["size-2 shrink-0 rounded-full bg-current", V(o) ? "absolute right-0.5 top-0.5" : ""]),
718
+ class: k(["size-2 shrink-0 rounded-full bg-current", F(l) ? "absolute right-0.5 top-0.5" : ""]),
698
719
  "aria-hidden": "true"
699
- }, null, 2)) : d.value && !V(o) ? (l(), i("button", {
720
+ }, null, 2)) : b.value && !F(l) ? (r(), s("button", {
700
721
  key: 4,
701
722
  type: "button",
702
723
  class: "flex size-4 shrink-0 items-center justify-center rounded-corner-sm hover:bg-ui-surface",
703
724
  title: e.closeLabel,
704
- "aria-label": `${e.closeLabel}: ${P.value}`,
705
- onClick: m[0] || (m[0] = S((I) => a("close"), ["stop"]))
725
+ "aria-label": `${e.closeLabel}: ${S.value}`,
726
+ onClick: h[0] || (h[0] = M((N) => a("close"), ["stop"]))
706
727
  }, [
707
- j(N, {
728
+ q(H, {
708
729
  name: "gtk-close",
709
730
  type: "symbol",
710
731
  size: 12
711
732
  })
712
- ], 8, Rt)) : g("", !0),
713
- (l(), G(Ce, { to: "body" }, [
714
- j(ze, {
733
+ ], 8, da)) : C("", !0),
734
+ (r(), Q(ce, { to: "body" }, [
735
+ q(pe, {
715
736
  "enter-active-class": "transition duration-150 ease-out",
716
737
  "enter-from-class": "opacity-0 scale-95",
717
738
  "leave-active-class": "transition duration-100 ease-in",
718
739
  "leave-to-class": "opacity-0 scale-95"
719
740
  }, {
720
- default: U(() => [
721
- b.value ? (l(), i("div", {
741
+ default: W(() => [
742
+ y.value ? (r(), s("div", {
722
743
  key: 0,
723
- class: p(["flex items-center gap-2 rounded-corner border border-ui-border bg-ui-surface/95 px-3 py-1 text-sm shadow-lg", e.active ? "font-bold" : ""]),
744
+ class: k(["flex items-center gap-2 rounded-corner border border-ui-border bg-ui-surface/95 px-3 py-1 text-sm shadow-lg", e.active ? "font-bold" : ""]),
724
745
  ref_key: "desplegadoRef",
725
- ref: u,
726
- style: se(D.value),
727
- onMouseenter: m[2] || (m[2] = (I) => y.value = !0),
728
- onMouseleave: m[3] || (m[3] = (I) => y.value = !1),
729
- onFocusin: m[4] || (m[4] = (I) => y.value = !0),
730
- onFocusout: H
746
+ ref: i,
747
+ style: se(P.value),
748
+ onMouseenter: h[2] || (h[2] = (N) => f.value = !0),
749
+ onMouseleave: h[3] || (h[3] = (N) => f.value = !1),
750
+ onFocusin: h[4] || (h[4] = (N) => f.value = !0),
751
+ onFocusout: U
731
752
  }, [
732
- C("span", Ht, T(e.tab.label), 1),
733
- e.tab.dirty ? (l(), i("span", Wt)) : g("", !0),
734
- h.value ? (l(), i("button", {
753
+ B("span", fa, V(e.tab.label), 1),
754
+ e.tab.dirty ? (r(), s("span", ma)) : C("", !0),
755
+ g.value ? (r(), s("button", {
735
756
  key: 1,
736
757
  type: "button",
737
758
  class: "flex size-4 shrink-0 items-center justify-center rounded-corner-sm hover:bg-ui-surface",
738
759
  title: e.closeLabel,
739
- "aria-label": `${e.closeLabel}: ${P.value}`,
740
- onClick: m[1] || (m[1] = S((I) => a("close"), ["stop"]))
760
+ "aria-label": `${e.closeLabel}: ${S.value}`,
761
+ onClick: h[1] || (h[1] = M((N) => a("close"), ["stop"]))
741
762
  }, [
742
- j(N, {
763
+ q(H, {
743
764
  name: "gtk-close",
744
765
  type: "symbol",
745
766
  size: 12
746
767
  })
747
- ], 8, qt)) : g("", !0)
748
- ], 38)) : g("", !0)
768
+ ], 8, va)) : C("", !0)
769
+ ], 38)) : C("", !0)
749
770
  ]),
750
771
  _: 1
751
772
  })
752
773
  ]))
753
- ], 42, Pt));
774
+ ], 42, ia));
754
775
  }
755
- }), Kt = ["aria-orientation"], Gt = ["draggable", "onDragstart", "onDragover", "onDrop"], Yt = ["title", "aria-label"], Qt = /* @__PURE__ */ E({
776
+ }), pa = ["aria-orientation"], ga = ["draggable", "onDragstart", "onDragover", "onDrop"], ya = ["title", "aria-label"], ha = /* @__PURE__ */ E({
756
777
  __name: "TabBar",
757
778
  props: {
758
779
  tabs: {},
@@ -764,171 +785,310 @@ const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title",
764
785
  },
765
786
  emits: ["update:modelValue", "select", "close", "new", "reorder", "menu"],
766
787
  setup(e, { emit: n }) {
767
- const t = e, a = n, { vertical: o } = Z(), s = $(null), c = $(0), u = $(null), f = $(null);
768
- function v(x) {
769
- a("update:modelValue", x), a("select", x);
788
+ const t = e, a = n, { vertical: l } = de(), o = x(null), u = x(0), i = x(null), m = x(null);
789
+ function v(w) {
790
+ a("update:modelValue", w), a("select", w);
770
791
  }
771
- async function y(x, r) {
772
- const d = t.tabs.length - 1;
773
- if (d < 0) return;
774
- const b = r === "primera" ? 0 : r === "ultima" ? d : r === "anterior" ? (x - 1 + t.tabs.length) % t.tabs.length : (x + 1) % t.tabs.length;
775
- c.value = b, await ce(), s.value?.querySelectorAll('[role="tab"]')?.[b]?.focus();
792
+ async function f(w, c) {
793
+ const b = t.tabs.length - 1;
794
+ if (b < 0) return;
795
+ const y = c === "primera" ? 0 : c === "ultima" ? b : c === "anterior" ? (w - 1 + t.tabs.length) % t.tabs.length : (w + 1) % t.tabs.length;
796
+ u.value = y, await Y(), o.value?.querySelectorAll('[role="tab"]')?.[y]?.focus();
776
797
  }
777
- function M(x, r) {
798
+ function T(w, c) {
778
799
  if (t.fixedOrder) return;
779
- const d = x + r;
780
- if (d < 0 || d >= t.tabs.length) return;
781
- const b = [...t.tabs], [D] = b.splice(x, 1);
782
- D && (b.splice(d, 0, D), c.value = d, a("reorder", b));
783
- }
784
- function z(x) {
785
- const r = s.value;
786
- if (!r) return;
787
- const d = x.deltaY || x.deltaX || 0, b = o.value ? r.scrollTop : r.scrollLeft;
788
- o.value ? r.scrollTop += d : r.scrollLeft += d, (o.value ? r.scrollTop : r.scrollLeft) !== b && x.preventDefault();
789
- }
790
- function L(x, r) {
791
- t.fixedOrder || (u.value = x, r.dataTransfer?.setData("text/plain", String(x)), r.dataTransfer && (r.dataTransfer.effectAllowed = "move"));
792
- }
793
- function h(x, r) {
794
- t.fixedOrder || u.value === null || (r.preventDefault(), f.value = x, r.dataTransfer && (r.dataTransfer.dropEffect = "move"));
795
- }
796
- function w(x) {
797
- const r = u.value;
798
- if (P(), t.fixedOrder || r === null || r === x) return;
799
- const d = [...t.tabs], [b] = d.splice(r, 1);
800
- b && (d.splice(x, 0, b), a("reorder", d));
801
- }
802
- function P() {
803
- u.value = null, f.value = null;
804
- }
805
- const F = k(
806
- () => o.value ? "flex h-full flex-col items-center gap-1 overflow-y-auto overflow-x-hidden" : "flex items-center gap-1 overflow-x-auto overflow-y-hidden"
800
+ const b = w + c;
801
+ if (b < 0 || b >= t.tabs.length) return;
802
+ const y = [...t.tabs], [P] = y.splice(w, 1);
803
+ P && (y.splice(b, 0, P), u.value = b, a("reorder", y));
804
+ }
805
+ function D(w) {
806
+ const c = o.value;
807
+ if (!c) return;
808
+ const b = w.deltaY || w.deltaX || 0, y = l.value ? c.scrollTop : c.scrollLeft;
809
+ l.value ? c.scrollTop += b : c.scrollLeft += b, (l.value ? c.scrollTop : c.scrollLeft) !== y && w.preventDefault();
810
+ }
811
+ function z(w, c) {
812
+ t.fixedOrder || (i.value = w, c.dataTransfer?.setData("text/plain", String(w)), c.dataTransfer && (c.dataTransfer.effectAllowed = "move"));
813
+ }
814
+ function g(w, c) {
815
+ t.fixedOrder || i.value === null || (c.preventDefault(), m.value = w, c.dataTransfer && (c.dataTransfer.dropEffect = "move"));
816
+ }
817
+ function d(w) {
818
+ const c = i.value;
819
+ if (S(), t.fixedOrder || c === null || c === w) return;
820
+ const b = [...t.tabs], [y] = b.splice(c, 1);
821
+ y && (b.splice(w, 0, y), a("reorder", b));
822
+ }
823
+ function S() {
824
+ i.value = null, m.value = null;
825
+ }
826
+ const I = p(
827
+ () => l.value ? "flex h-full flex-col items-center gap-1 overflow-y-auto overflow-x-hidden" : "flex items-center gap-1 overflow-x-auto overflow-y-hidden"
807
828
  );
808
- return (x, r) => (l(), i("div", {
809
- class: p(["flex min-h-0 min-w-0 items-center gap-1", V(o) ? "w-full flex-col" : "h-full"]),
829
+ return (w, c) => (r(), s("div", {
830
+ class: k(["flex min-h-0 min-w-0 items-center gap-1", F(l) ? "w-full flex-col" : "h-full"]),
810
831
  role: "tablist",
811
- "aria-orientation": V(o) ? "vertical" : "horizontal"
832
+ "aria-orientation": F(l) ? "vertical" : "horizontal"
812
833
  }, [
813
- C("div", {
834
+ B("div", {
814
835
  ref_key: "carril",
815
- ref: s,
816
- class: p(F.value),
817
- onWheel: z
836
+ ref: o,
837
+ class: k(I.value),
838
+ onWheel: D
818
839
  }, [
819
- (l(!0), i(Y, null, ae(e.tabs, (d, b) => (l(), i("div", {
820
- key: d.id,
821
- class: p(["transition-opacity", [
822
- u.value === b ? "opacity-40" : "",
823
- f.value === b && u.value !== b ? "ring-2 ring-secondary rounded-corner" : ""
840
+ (r(!0), s(J, null, te(e.tabs, (b, y) => (r(), s("div", {
841
+ key: b.id,
842
+ class: k(["transition-opacity", [
843
+ i.value === y ? "opacity-40" : "",
844
+ m.value === y && i.value !== y ? "ring-2 ring-secondary rounded-corner" : ""
824
845
  ]]),
825
846
  draggable: !e.fixedOrder,
826
- onDragstart: (D) => L(b, D),
827
- onDragover: (D) => h(b, D),
828
- onDrop: S((D) => w(b), ["prevent"]),
829
- onDragend: P
847
+ onDragstart: (P) => z(y, P),
848
+ onDragover: (P) => g(y, P),
849
+ onDrop: M((P) => d(y), ["prevent"]),
850
+ onDragend: S
830
851
  }, [
831
- j(Ae, {
832
- tab: d,
833
- active: d.id === e.modelValue,
852
+ q(Ke, {
853
+ tab: b,
854
+ active: b.id === e.modelValue,
834
855
  "close-label": e.closeLabel,
835
856
  "dirty-label": e.dirtyLabel,
836
- tabindex: b === c.value ? 0 : -1,
837
- onSelect: (D) => v(d.id),
838
- onClose: (D) => a("close", d.id),
839
- onMenu: (D) => a("menu", { id: d.id, ...D }),
840
- onNavegar: (D) => y(b, D),
841
- onMover: (D) => M(b, D)
857
+ tabindex: y === u.value ? 0 : -1,
858
+ onSelect: (P) => v(b.id),
859
+ onClose: (P) => a("close", b.id),
860
+ onMenu: (P) => a("menu", { id: b.id, ...P }),
861
+ onNavegar: (P) => f(y, P),
862
+ onMover: (P) => T(y, P)
842
863
  }, null, 8, ["tab", "active", "close-label", "dirty-label", "tabindex", "onSelect", "onClose", "onMenu", "onNavegar", "onMover"])
843
- ], 42, Gt))), 128))
864
+ ], 42, ga))), 128))
844
865
  ], 34),
845
- e.newLabel ? (l(), i("button", {
866
+ e.newLabel ? (r(), s("button", {
846
867
  key: 0,
847
868
  type: "button",
848
869
  class: "flex size-7 shrink-0 items-center justify-center rounded-corner border border-ui-border bg-ui-bg/80 hover:bg-ui-surface/70",
849
870
  title: e.newLabel,
850
871
  "aria-label": e.newLabel,
851
- onClick: r[0] || (r[0] = (d) => a("new"))
872
+ onClick: c[0] || (c[0] = (b) => a("new"))
852
873
  }, [
853
- j(N, {
874
+ q(H, {
854
875
  name: "gtk-add",
855
876
  type: "symbol",
856
877
  size: 14
857
878
  })
858
- ], 8, Yt)) : g("", !0)
859
- ], 10, Kt));
879
+ ], 8, ya)) : C("", !0)
880
+ ], 10, pa));
881
+ }
882
+ }), xa = ["id", "aria-label", "type", "value", "placeholder", "disabled", "readonly", "required", "aria-invalid"], Ge = /* @__PURE__ */ E({
883
+ __name: "TextInput",
884
+ props: {
885
+ modelValue: {},
886
+ type: { default: "text" },
887
+ id: {},
888
+ ariaLabel: {},
889
+ placeholder: {},
890
+ disabled: { type: Boolean, default: !1 },
891
+ readonly: { type: Boolean, default: !1 },
892
+ invalid: { type: Boolean, default: !1 },
893
+ mono: { type: Boolean, default: !1 },
894
+ required: { type: Boolean, default: !1 },
895
+ lazy: { type: Boolean, default: !1 }
896
+ },
897
+ emits: ["update:modelValue"],
898
+ setup(e, { emit: n }) {
899
+ const t = e, a = n;
900
+ function l(i) {
901
+ t.lazy || a("update:modelValue", i.target.value);
902
+ }
903
+ function o(i) {
904
+ t.lazy && a("update:modelValue", i.target.value);
905
+ }
906
+ const u = p(() => [
907
+ "w-full rounded-corner border bg-ui-surface/70 px-3 py-1.5 text-sm text-tx-main",
908
+ "placeholder:text-tx-muted focus:outline-none focus:ring-1 focus:ring-primary",
909
+ t.invalid ? "border-status-error" : "border-ui-border",
910
+ t.mono ? "font-mono" : "",
911
+ t.disabled ? "cursor-not-allowed opacity-60" : ""
912
+ ]);
913
+ return (i, m) => (r(), s("input", {
914
+ id: e.id,
915
+ "aria-label": e.ariaLabel,
916
+ type: e.type,
917
+ value: e.modelValue,
918
+ placeholder: e.placeholder,
919
+ disabled: e.disabled,
920
+ readonly: e.readonly,
921
+ required: e.required,
922
+ "aria-invalid": e.invalid || void 0,
923
+ class: k(u.value),
924
+ onInput: l,
925
+ onChange: o
926
+ }, null, 42, xa));
927
+ }
928
+ }), ka = { class: "pointer-events-none absolute left-2 flex items-center" }, wa = ["aria-label"], Le = /* @__PURE__ */ E({
929
+ __name: "SearchField",
930
+ props: {
931
+ modelValue: { default: "" },
932
+ placeholder: { default: "" },
933
+ label: { default: "" },
934
+ disabled: { type: Boolean, default: !1 },
935
+ autofocus: { type: Boolean, default: !1 },
936
+ debounce: { default: 0 },
937
+ clearable: { type: Boolean, default: !0 },
938
+ busy: { type: Boolean, default: !1 },
939
+ listboxId: {},
940
+ activeOptionId: {},
941
+ expanded: { type: Boolean }
942
+ },
943
+ emits: ["update:modelValue", "search", "clear"],
944
+ setup(e, { expose: n, emit: t }) {
945
+ const a = e, l = t, o = x(null);
946
+ let u;
947
+ const i = p(() => a.modelValue.length > 0), m = p(
948
+ () => a.listboxId ? {
949
+ role: "combobox",
950
+ "aria-autocomplete": "list",
951
+ "aria-controls": a.listboxId,
952
+ "aria-expanded": String(a.expanded),
953
+ "aria-activedescendant": a.activeOptionId || void 0
954
+ } : {}
955
+ ), v = p(() => a.clearable && i.value && !a.disabled);
956
+ function f() {
957
+ clearTimeout(u), u = void 0;
958
+ }
959
+ function T(d) {
960
+ l("update:modelValue", d), !(a.debounce <= 0) && (f(), u = setTimeout(() => l("search", d), a.debounce));
961
+ }
962
+ function D() {
963
+ f(), l("search", a.modelValue);
964
+ }
965
+ function z() {
966
+ f(), l("update:modelValue", ""), l("clear"), g();
967
+ }
968
+ function g() {
969
+ o.value?.$el?.focus?.();
970
+ }
971
+ return n({ enfocar: g }), _(async () => {
972
+ a.autofocus && (await Y(), g());
973
+ }), ve(f), K(
974
+ () => a.disabled,
975
+ (d) => {
976
+ d && f();
977
+ }
978
+ ), (d, S) => (r(), s("div", {
979
+ class: "relative flex items-center",
980
+ onKeydown: j(D, ["enter"])
981
+ }, [
982
+ B("span", ka, [
983
+ q(H, {
984
+ name: e.busy ? "content-loading" : "system-search",
985
+ type: "symbol",
986
+ size: 14,
987
+ class: k(e.busy ? "animate-spin opacity-70" : "opacity-60")
988
+ }, null, 8, ["name", "class"])
989
+ ]),
990
+ q(Ge, ae({
991
+ ref_key: "campo",
992
+ ref: o,
993
+ type: "search",
994
+ "model-value": e.modelValue,
995
+ placeholder: e.placeholder || e.label,
996
+ ariaLabel: e.label || void 0
997
+ }, m.value, {
998
+ disabled: e.disabled,
999
+ class: ["pl-7 [&::-webkit-search-cancel-button]:appearance-none", v.value ? "pr-8" : ""],
1000
+ "onUpdate:modelValue": T
1001
+ }), null, 16, ["model-value", "placeholder", "ariaLabel", "disabled", "class"]),
1002
+ v.value ? (r(), s("button", {
1003
+ key: 0,
1004
+ type: "button",
1005
+ class: "absolute right-1 flex size-6 items-center justify-center rounded-corner text-tx-muted hover:bg-ui-surface",
1006
+ "aria-label": e.label ? `${e.label}: vaciar` : "Vaciar",
1007
+ onMousedown: S[0] || (S[0] = M(() => {
1008
+ }, ["prevent"])),
1009
+ onClick: z
1010
+ }, [
1011
+ q(H, {
1012
+ name: "gtk-close",
1013
+ type: "symbol",
1014
+ size: 12,
1015
+ alt: ""
1016
+ })
1017
+ ], 40, wa)) : C("", !0)
1018
+ ], 32));
860
1019
  }
861
- }), Xt = { class: "relative flex shrink-0 items-center" }, Jt = ["title", "aria-label", "aria-expanded"], Zt = ["value", "placeholder", "aria-label"], _t = /* @__PURE__ */ E({
1020
+ }), $a = ["title", "aria-label", "aria-expanded"], Ca = /* @__PURE__ */ E({
862
1021
  __name: "BarSearch",
863
1022
  props: {
864
1023
  modelValue: { default: "" },
865
1024
  placeholder: { default: "" },
866
1025
  label: { default: "Search" },
867
- collapsed: { type: Boolean, default: !1 }
1026
+ collapsed: { type: Boolean, default: !1 },
1027
+ disabled: { type: Boolean, default: !1 },
1028
+ debounce: { default: 0 }
868
1029
  },
869
1030
  emits: ["update:modelValue", "search", "open", "close"],
870
1031
  setup(e, { emit: n }) {
871
- const t = e, a = n, { vertical: o, posicion: s } = Z(), c = $(!1), u = $(null), f = k(() => o.value || t.collapsed), v = k(() => !f.value || c.value), y = k(() => {
872
- if (!f.value) return "";
873
- const w = "absolute z-40 w-64 rounded-corner border border-ui-border bg-ui-surface/95 p-1 shadow-lg";
874
- return s.value === "left" ? `${w} left-full top-0 ml-1` : s.value === "right" ? `${w} right-full top-0 mr-1` : s.value === "bottom" ? `${w} bottom-full right-0 mb-1` : `${w} top-full right-0 mt-1`;
1032
+ const t = e, a = n, { vertical: l, posicion: o } = de(), u = x(!1), i = x(null), m = p(() => l.value || t.collapsed), v = p(() => !m.value || u.value), f = p(() => {
1033
+ if (!m.value) return "";
1034
+ const g = "absolute z-40 w-64 rounded-corner border border-ui-border bg-ui-surface/95 p-1 shadow-lg";
1035
+ return o.value === "left" ? `${g} left-full top-0 ml-1` : o.value === "right" ? `${g} right-full top-0 mr-1` : o.value === "bottom" ? `${g} bottom-full right-0 mb-1` : `${g} top-full right-0 mt-1`;
875
1036
  });
876
- async function M() {
877
- c.value = !0, a("open"), await ce(), u.value?.focus();
1037
+ async function T() {
1038
+ u.value = !0, a("open"), await Y(), i.value?.enfocar();
878
1039
  }
879
- function z() {
880
- c.value && (c.value = !1, a("close"));
881
- }
882
- function L(w) {
883
- a("update:modelValue", w.target.value);
1040
+ function D() {
1041
+ u.value && (u.value = !1, a("close"));
884
1042
  }
885
- function h() {
886
- a("search", t.modelValue);
1043
+ function z(g) {
1044
+ const d = g.relatedTarget;
1045
+ d && g.currentTarget.contains(d) || D();
887
1046
  }
888
- return (w, P) => (l(), i("div", Xt, [
889
- f.value ? (l(), i("button", {
1047
+ return (g, d) => (r(), s("div", {
1048
+ class: "relative flex shrink-0 items-center",
1049
+ onFocusout: z
1050
+ }, [
1051
+ m.value ? (r(), s("button", {
890
1052
  key: 0,
891
1053
  type: "button",
892
1054
  class: "flex size-7 items-center justify-center rounded-corner border border-ui-border bg-ui-bg/80 hover:bg-ui-surface/70",
893
1055
  title: e.label,
894
1056
  "aria-label": e.label,
895
- "aria-expanded": c.value,
896
- onMousedown: P[0] || (P[0] = S(() => {
1057
+ "aria-expanded": u.value,
1058
+ onMousedown: d[0] || (d[0] = M(() => {
897
1059
  }, ["prevent"])),
898
- onClick: P[1] || (P[1] = (F) => c.value ? z() : M())
1060
+ onClick: d[1] || (d[1] = (S) => u.value ? D() : T())
899
1061
  }, [
900
- j(N, {
1062
+ q(H, {
901
1063
  name: "system-search",
902
1064
  type: "symbol",
903
1065
  size: 14
904
1066
  })
905
- ], 40, Jt)) : g("", !0),
906
- v.value ? (l(), i("div", {
1067
+ ], 40, $a)) : C("", !0),
1068
+ v.value ? (r(), s("div", {
907
1069
  key: 1,
908
- class: p(y.value)
1070
+ class: k(f.value),
1071
+ onKeydown: j(D, ["esc"])
909
1072
  }, [
910
- C("input", {
1073
+ q(Le, {
911
1074
  ref_key: "campo",
912
- ref: u,
913
- type: "search",
914
- class: p(["w-full rounded-corner border border-ui-border bg-ui-bg/80 px-2 py-1 text-sm outline-none focus:border-ui-border-strong", f.value ? "" : "w-48"]),
915
- value: e.modelValue,
916
- placeholder: e.placeholder || e.label,
917
- "aria-label": e.label,
918
- onInput: L,
919
- onKeydown: [
920
- O(h, ["enter"]),
921
- O(z, ["esc"])
922
- ],
923
- onBlur: z
924
- }, null, 42, Zt)
925
- ], 2)) : g("", !0)
926
- ]));
1075
+ ref: i,
1076
+ "model-value": e.modelValue,
1077
+ placeholder: e.placeholder,
1078
+ label: e.label,
1079
+ disabled: e.disabled,
1080
+ debounce: e.debounce,
1081
+ class: k(m.value ? "" : "w-48"),
1082
+ "onUpdate:modelValue": d[2] || (d[2] = (S) => a("update:modelValue", S)),
1083
+ onSearch: d[3] || (d[3] = (S) => a("search", S))
1084
+ }, null, 8, ["model-value", "placeholder", "label", "disabled", "debounce", "class"])
1085
+ ], 34)) : C("", !0)
1086
+ ], 32));
927
1087
  }
928
- }), ea = ["type", "disabled"], ta = {
1088
+ }), Ea = ["type", "disabled"], Da = {
929
1089
  key: 0,
930
1090
  class: "w-4 h-4 animate-spin rounded-full border-2 border-current border-t-transparent"
931
- }, aa = ["src", "alt"], na = { key: 2 }, la = ["src", "alt"], oa = /* @__PURE__ */ E({
1091
+ }, za = ["src", "alt"], La = { key: 2 }, Ta = ["src", "alt"], Ba = /* @__PURE__ */ E({
932
1092
  __name: "ActionButton",
933
1093
  props: {
934
1094
  label: {},
@@ -947,51 +1107,356 @@ const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title",
947
1107
  },
948
1108
  emits: ["click"],
949
1109
  setup(e, { emit: n }) {
950
- const t = e, a = n, o = {
1110
+ const t = e, a = n, l = {
951
1111
  primary: "bg-primary dark:bg-primary-dark text-tx-on-primary dark:text-tx-on-primary-dark hover:bg-primary/90 dark:hover:bg-primary-dark/90",
952
1112
  secondary: "bg-secondary dark:bg-secondary-dark text-tx-on-primary dark:text-tx-on-primary-dark hover:bg-secondary/80 dark:hover:bg-secondary-dark/80",
953
1113
  danger: "bg-status-error dark:bg-status-error-dark text-tx-on-primary dark:text-tx-on-primary-dark hover:bg-status-error/90 dark:hover:bg-status-error-dark/90"
954
- }, s = {
1114
+ }, o = {
955
1115
  sm: "px-2 py-1 text-xs",
956
1116
  md: "px-3 py-1 text-sm",
957
1117
  lg: "px-4 py-2 text-base"
958
- }, c = (u) => {
959
- t.stopPropagation && u.stopPropagation(), t.preventDefault && u.preventDefault(), !t.disabled && !t.loading && a("click");
1118
+ }, u = (i) => {
1119
+ t.stopPropagation && i.stopPropagation(), t.preventDefault && i.preventDefault(), !t.disabled && !t.loading && a("click");
960
1120
  };
961
- return (u, f) => (l(), i("button", {
1121
+ return (i, m) => (r(), s("button", {
962
1122
  type: t.type,
963
- onClick: c,
964
- class: p(["rounded-corner transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2", [
965
- o[t.variant],
966
- s[t.size],
1123
+ onClick: u,
1124
+ class: k(["rounded-corner transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2", [
1125
+ l[t.variant],
1126
+ o[t.size],
967
1127
  t.fullWidth ? "w-full" : "",
968
1128
  t.iconSrc && !t.label ? "px-2 py-2" : "",
969
1129
  e.customClass
970
1130
  ]]),
971
1131
  disabled: t.disabled || t.loading
972
1132
  }, [
973
- e.loading ? (l(), i("span", ta)) : g("", !0),
974
- t.iconSrc && !t.iconRight ? (l(), i("img", {
1133
+ e.loading ? (r(), s("span", Da)) : C("", !0),
1134
+ t.iconSrc && !t.iconRight ? (r(), s("img", {
975
1135
  key: 1,
976
1136
  src: t.iconSrc,
977
1137
  alt: t.iconAlt || t.label,
978
1138
  class: "w-4 h-4"
979
- }, null, 8, aa)) : g("", !0),
980
- t.label ? (l(), i("span", na, T(t.label), 1)) : g("", !0),
981
- t.iconSrc && t.iconRight ? (l(), i("img", {
1139
+ }, null, 8, za)) : C("", !0),
1140
+ t.label ? (r(), s("span", La, V(t.label), 1)) : C("", !0),
1141
+ t.iconSrc && t.iconRight ? (r(), s("img", {
982
1142
  key: 3,
983
1143
  src: t.iconSrc,
984
1144
  alt: t.iconAlt || t.label,
985
1145
  class: "w-4 h-4"
986
- }, null, 8, la)) : g("", !0)
987
- ], 10, ea));
1146
+ }, null, 8, Ta)) : C("", !0)
1147
+ ], 10, Ea));
988
1148
  }
989
- }), le = (e, n) => {
1149
+ }), ge = (e, n) => {
990
1150
  const t = e.__vccOpts || e;
991
- for (const [a, o] of n)
992
- t[a] = o;
1151
+ for (const [a, l] of n)
1152
+ t[a] = l;
993
1153
  return t;
994
- }, ia = /* @__PURE__ */ le(oa, [["__scopeId", "data-v-2eaf6e27"]]), sa = { class: "text-base font-semibold m-0 text-primary dark:text-primary-dark" }, ra = /* @__PURE__ */ E({
1154
+ }, Aa = /* @__PURE__ */ ge(Ba, [["__scopeId", "data-v-2eaf6e27"]]), Qe = {
1155
+ info: "border-ui-border bg-ui-surface/70 text-tx-main",
1156
+ success: "border-status-success/40 bg-status-success/10 text-tx-main",
1157
+ warning: "border-status-warning/40 bg-status-warning/10 text-tx-main",
1158
+ error: "border-status-error/40 bg-status-error/10 text-tx-main"
1159
+ };
1160
+ function Ye(e) {
1161
+ return e === "error" ? "alert" : "status";
1162
+ }
1163
+ const Sa = ["role"], Ma = /* @__PURE__ */ E({
1164
+ __name: "AlertMessage",
1165
+ props: {
1166
+ tone: { default: "info" }
1167
+ },
1168
+ setup(e) {
1169
+ const n = e, t = p(() => Qe[n.tone]), a = p(() => Ye(n.tone));
1170
+ return (l, o) => (r(), s("div", {
1171
+ role: a.value,
1172
+ "aria-atomic": "true",
1173
+ class: k(["rounded-corner border px-4 py-2 text-sm", t.value])
1174
+ }, [
1175
+ A(l.$slots, "default")
1176
+ ], 10, Sa));
1177
+ }
1178
+ }), Va = { class: "font-medium text-sm text-tx-main" }, Oa = {
1179
+ key: 0,
1180
+ class: "text-sm text-tx-muted"
1181
+ }, Ia = /* @__PURE__ */ E({
1182
+ __name: "EmptyState",
1183
+ props: {
1184
+ title: {},
1185
+ note: {},
1186
+ icon: { default: "dialog-information" },
1187
+ bordered: { type: Boolean, default: !1 }
1188
+ },
1189
+ setup(e) {
1190
+ return (n, t) => (r(), s("div", {
1191
+ class: k(["flex flex-col items-center justify-center gap-3 px-8 py-12 text-center", e.bordered ? "rounded-corner border border-ui-border border-dashed bg-ui-surface/20" : ""])
1192
+ }, [
1193
+ q(H, {
1194
+ name: e.icon,
1195
+ size: 48,
1196
+ class: "opacity-60"
1197
+ }, null, 8, ["name"]),
1198
+ B("p", Va, V(e.title), 1),
1199
+ e.note ? (r(), s("p", Oa, V(e.note), 1)) : C("", !0),
1200
+ A(n.$slots, "default")
1201
+ ], 2));
1202
+ }
1203
+ }), Pa = ["role"], ja = /* @__PURE__ */ E({
1204
+ __name: "ToastArea",
1205
+ props: {
1206
+ toasts: {},
1207
+ position: { default: "bottom-right" }
1208
+ },
1209
+ setup(e) {
1210
+ const n = e, t = p(
1211
+ () => n.position === "bottom-center" ? "bottom-4 left-1/2 -translate-x-1/2" : "right-4 bottom-4"
1212
+ );
1213
+ return (a, l) => (r(), Q(ce, { to: "body" }, [
1214
+ B("div", {
1215
+ class: k(["pointer-events-none fixed z-50 flex flex-col gap-2", t.value])
1216
+ }, [
1217
+ q(ut, {
1218
+ "enter-active-class": "transition-all duration-300 ease-out",
1219
+ "leave-active-class": "transition-all duration-200 ease-in",
1220
+ "enter-from-class": "translate-y-2 opacity-0",
1221
+ "leave-to-class": "translate-y-2 opacity-0",
1222
+ "move-class": "transition-transform duration-300"
1223
+ }, {
1224
+ default: W(() => [
1225
+ (r(!0), s(J, null, te(e.toasts, (o) => (r(), s("div", {
1226
+ key: o.id,
1227
+ role: F(Ye)(o.tone ?? "info"),
1228
+ "aria-atomic": "true",
1229
+ class: k(["pointer-events-auto rounded-corner border px-4 py-2 text-sm shadow-lg backdrop-blur-sm", F(Qe)[o.tone ?? "info"]])
1230
+ }, [
1231
+ A(a.$slots, "default", { aviso: o }, () => [
1232
+ Ee(V(o.message), 1)
1233
+ ])
1234
+ ], 10, Pa))), 128))
1235
+ ]),
1236
+ _: 3
1237
+ })
1238
+ ], 2)
1239
+ ]));
1240
+ }
1241
+ }), Fa = ["aria-label", "aria-valuenow"], qa = {
1242
+ key: 1,
1243
+ class: "h-full w-1/3 animate-pulse rounded-corner bg-primary"
1244
+ }, Ra = /* @__PURE__ */ E({
1245
+ __name: "ProgressBar",
1246
+ props: {
1247
+ value: {},
1248
+ label: {}
1249
+ },
1250
+ setup(e) {
1251
+ const n = e, t = p(
1252
+ () => n.value === null ? null : Math.max(0, Math.min(100, n.value))
1253
+ );
1254
+ return (a, l) => (r(), s("div", {
1255
+ role: "progressbar",
1256
+ "aria-label": e.label,
1257
+ "aria-valuenow": t.value ?? void 0,
1258
+ "aria-valuemin": "0",
1259
+ "aria-valuemax": "100",
1260
+ class: "h-2 w-full overflow-hidden rounded-corner bg-ui-surface/70"
1261
+ }, [
1262
+ t.value !== null ? (r(), s("div", {
1263
+ key: 0,
1264
+ class: "h-full rounded-corner bg-primary transition-[width] duration-300 ease-out",
1265
+ style: se({ width: `${t.value}%` })
1266
+ }, null, 4)) : (r(), s("div", qa))
1267
+ ], 8, Fa));
1268
+ }
1269
+ }), Na = /[/\-_.]/;
1270
+ function xe(e, n) {
1271
+ if (!n) return 100;
1272
+ const t = n.toLowerCase();
1273
+ return t === e ? 0 : t.startsWith(e) ? 10 : t.split(Na).some((a) => a.startsWith(e)) ? 30 : t.includes(e) ? 40 : 100;
1274
+ }
1275
+ function Ha(e, n) {
1276
+ const t = n.trim().toLowerCase();
1277
+ if (!t) return e;
1278
+ const a = [];
1279
+ for (let l = 0; l < e.length; l++) {
1280
+ const o = e[l], u = xe(t, o.valor), i = xe(t, o.etiqueta), m = i === 10 ? 20 : i, f = xe(t, o.detalle) === 100 ? 100 : 40, T = Math.min(u, m, f);
1281
+ T !== 100 && a.push({ opcion: o, rango: T, orden: l });
1282
+ }
1283
+ return a.sort((l, o) => l.rango - o.rango || l.orden - o.orden), a.map((l) => l.opcion);
1284
+ }
1285
+ let Oe = 0;
1286
+ function Ua() {
1287
+ return Oe += 1, `vsk-lista-${Oe}`;
1288
+ }
1289
+ const Wa = ["disabled", "aria-label", "aria-expanded"], Ka = { class: "min-w-0 flex-1 truncate" }, Ga = {
1290
+ key: 0,
1291
+ class: "ml-2 text-tx-muted text-xs"
1292
+ }, Qa = { class: "border-ui-border border-b p-2" }, Ya = ["id"], Xa = {
1293
+ key: 0,
1294
+ class: "p-3 text-center text-tx-muted text-xs"
1295
+ }, _a = ["id", "data-indice", "aria-selected"], Ja = { class: "min-w-0 flex-1 truncate" }, Za = {
1296
+ key: 0,
1297
+ class: "shrink-0 text-tx-muted text-xs"
1298
+ }, en = {
1299
+ key: 1,
1300
+ class: "px-2 py-1 text-tx-muted text-xs"
1301
+ }, tn = /* @__PURE__ */ E({
1302
+ __name: "SearchSelect",
1303
+ props: {
1304
+ modelValue: {},
1305
+ options: {},
1306
+ label: { default: "" },
1307
+ searchPlaceholder: { default: "" },
1308
+ emptyText: { default: "" },
1309
+ placeholder: { default: "—" },
1310
+ disabled: { type: Boolean, default: !1 },
1311
+ limit: { default: 60 },
1312
+ up: { type: Boolean, default: !1 }
1313
+ },
1314
+ emits: ["update:modelValue"],
1315
+ setup(e, { emit: n }) {
1316
+ const t = e, a = n, l = x(""), o = x(!1), u = x(0), i = x(null), m = x(null), v = x(null), f = Ua(), T = p(
1317
+ () => t.options.find((L) => L.valor === t.modelValue) ?? null
1318
+ ), D = p(() => Ha(t.options, l.value)), z = p(() => D.value.slice(0, t.limit)), g = p(() => Math.max(0, D.value.length - t.limit)), d = p(
1319
+ () => z.value.length > 0 ? `${f}-${u.value}` : void 0
1320
+ );
1321
+ function S(L) {
1322
+ a("update:modelValue", L), w();
1323
+ }
1324
+ async function I() {
1325
+ o.value = !0;
1326
+ const L = z.value.findIndex(($) => $.valor === t.modelValue);
1327
+ u.value = L >= 0 ? L : 0, await Y(), v.value?.enfocar(), U();
1328
+ }
1329
+ function w(L = !0) {
1330
+ o.value && (o.value = !1, l.value = "", L && Y(() => m.value?.focus()));
1331
+ }
1332
+ function c(L) {
1333
+ const $ = z.value.length;
1334
+ $ !== 0 && (u.value = (u.value + L + $) % $, U());
1335
+ }
1336
+ function b(L) {
1337
+ u.value = L, U();
1338
+ }
1339
+ function y(L) {
1340
+ const $ = L.target?.closest?.("[data-indice]");
1341
+ if (!$) return null;
1342
+ const O = Number($.getAttribute("data-indice"));
1343
+ return Number.isInteger(O) ? O : null;
1344
+ }
1345
+ function P(L) {
1346
+ const $ = y(L), O = $ === null ? void 0 : z.value[$];
1347
+ O && S(O.valor);
1348
+ }
1349
+ function Z(L) {
1350
+ const $ = y(L);
1351
+ $ !== null && (u.value = $);
1352
+ }
1353
+ function U() {
1354
+ Y(() => {
1355
+ i.value?.querySelector(`[data-indice="${u.value}"]`)?.scrollIntoView({ block: "nearest" });
1356
+ });
1357
+ }
1358
+ function ee() {
1359
+ const L = z.value[u.value];
1360
+ L && S(L.valor);
1361
+ }
1362
+ K(
1363
+ () => t.disabled,
1364
+ (L) => {
1365
+ L && w(!1);
1366
+ }
1367
+ ), K(l, () => {
1368
+ u.value = 0, U();
1369
+ });
1370
+ function G(L) {
1371
+ const $ = L.relatedTarget;
1372
+ $ && L.currentTarget.contains($) || w(!1);
1373
+ }
1374
+ return (L, $) => (r(), s("div", {
1375
+ class: "relative",
1376
+ onFocusout: G
1377
+ }, [
1378
+ B("button", {
1379
+ ref_key: "boton",
1380
+ ref: m,
1381
+ type: "button",
1382
+ disabled: e.disabled,
1383
+ class: "flex w-full items-center justify-between gap-2 rounded-corner border border-ui-border-strong bg-ui-surface px-2 py-1 text-left text-sm text-tx-main transition-colors hover:bg-ui-bg/60 disabled:cursor-not-allowed disabled:opacity-50",
1384
+ "aria-label": e.label || void 0,
1385
+ "aria-expanded": o.value,
1386
+ "aria-haspopup": "listbox",
1387
+ onClick: $[0] || ($[0] = (O) => o.value ? w() : I()),
1388
+ onKeydown: [
1389
+ $[1] || ($[1] = j(M((O) => o.value ? c(1) : I(), ["prevent"]), ["down"])),
1390
+ $[2] || ($[2] = j(M((O) => o.value ? c(-1) : I(), ["prevent"]), ["up"]))
1391
+ ]
1392
+ }, [
1393
+ B("span", Ka, [
1394
+ Ee(V(T.value?.etiqueta ?? e.placeholder) + " ", 1),
1395
+ T.value?.detalle ? (r(), s("span", Ga, V(T.value.detalle), 1)) : C("", !0)
1396
+ ]),
1397
+ q(H, {
1398
+ name: "go-down",
1399
+ type: "symbol",
1400
+ size: 12,
1401
+ class: "shrink-0 opacity-60"
1402
+ })
1403
+ ], 40, Wa),
1404
+ o.value ? (r(), s("div", {
1405
+ key: 0,
1406
+ class: k(["absolute z-20 w-full min-w-64 rounded-corner border border-ui-border-strong bg-ui-bg shadow-lg", e.up ? "bottom-full mb-1" : "mt-1"]),
1407
+ onKeydown: [
1408
+ $[4] || ($[4] = j(M((O) => w(), ["prevent"]), ["escape"])),
1409
+ $[5] || ($[5] = j(M((O) => c(1), ["prevent"]), ["down"])),
1410
+ $[6] || ($[6] = j(M((O) => c(-1), ["prevent"]), ["up"])),
1411
+ $[7] || ($[7] = j(M((O) => b(0), ["prevent"]), ["home"])),
1412
+ $[8] || ($[8] = j(M((O) => b(z.value.length - 1), ["prevent"]), ["end"])),
1413
+ $[9] || ($[9] = j(M((O) => ee(), ["prevent"]), ["enter"])),
1414
+ $[10] || ($[10] = j((O) => w(!1), ["tab"]))
1415
+ ],
1416
+ onClick: P,
1417
+ onMousemove: Z
1418
+ }, [
1419
+ B("div", Qa, [
1420
+ q(Le, {
1421
+ ref_key: "campo",
1422
+ ref: v,
1423
+ modelValue: l.value,
1424
+ "onUpdate:modelValue": $[3] || ($[3] = (O) => l.value = O),
1425
+ label: e.label,
1426
+ placeholder: e.searchPlaceholder,
1427
+ "listbox-id": F(f),
1428
+ "active-option-id": d.value,
1429
+ expanded: o.value
1430
+ }, null, 8, ["modelValue", "label", "placeholder", "listbox-id", "active-option-id", "expanded"])
1431
+ ]),
1432
+ B("ul", {
1433
+ id: F(f),
1434
+ ref_key: "lista",
1435
+ ref: i,
1436
+ role: "listbox",
1437
+ class: "max-h-56 overflow-y-auto p-1"
1438
+ }, [
1439
+ z.value.length === 0 ? (r(), s("li", Xa, V(e.emptyText), 1)) : C("", !0),
1440
+ (r(!0), s(J, null, te(z.value, (O, ne) => (r(), s("li", {
1441
+ id: `${F(f)}-${ne}`,
1442
+ key: O.valor,
1443
+ "data-indice": ne,
1444
+ role: "option",
1445
+ "aria-selected": O.valor === e.modelValue,
1446
+ class: k(["flex cursor-pointer items-baseline gap-2 rounded-corner px-2 py-1 text-sm", [
1447
+ ne === u.value ? "bg-ui-surface" : "",
1448
+ O.valor === e.modelValue ? "font-medium text-primary" : "text-tx-main"
1449
+ ]])
1450
+ }, [
1451
+ B("span", Ja, V(O.etiqueta), 1),
1452
+ O.detalle ? (r(), s("span", Za, V(O.detalle), 1)) : C("", !0)
1453
+ ], 10, _a))), 128)),
1454
+ g.value > 0 ? (r(), s("li", en, "+" + V(g.value), 1)) : C("", !0)
1455
+ ], 8, Ya)
1456
+ ], 34)) : C("", !0)
1457
+ ], 32));
1458
+ }
1459
+ }), an = { class: "text-base font-semibold m-0 text-primary dark:text-primary-dark" }, nn = /* @__PURE__ */ E({
995
1460
  __name: "ConfigSection",
996
1461
  props: {
997
1462
  title: {},
@@ -999,26 +1464,26 @@ const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title",
999
1464
  customClass: { default: () => ({}) }
1000
1465
  },
1001
1466
  setup(e) {
1002
- return (n, t) => (l(), i("div", {
1003
- class: p(["flex flex-col gap-4 p-4 background rounded-corner", e.customClass])
1467
+ return (n, t) => (r(), s("div", {
1468
+ class: k(["flex flex-col gap-4 p-4 background rounded-corner", e.customClass])
1004
1469
  }, [
1005
- C("h3", sa, T(e.icon ? `${e.icon} ${e.title}` : e.title), 1),
1006
- B(n.$slots, "default", {}, void 0, !0)
1470
+ B("h3", an, V(e.icon ? `${e.icon} ${e.title}` : e.title), 1),
1471
+ A(n.$slots, "default", {}, void 0, !0)
1007
1472
  ], 2));
1008
1473
  }
1009
- }), ua = /* @__PURE__ */ le(ra, [["__scopeId", "data-v-45bd4eab"]]), ca = { class: "flex items-center gap-3 flex-1 min-w-0" }, da = ["src", "alt"], fa = { class: "min-w-0" }, ma = { class: "font-semibold truncate" }, ba = {
1474
+ }), ln = /* @__PURE__ */ ge(nn, [["__scopeId", "data-v-45bd4eab"]]), on = { class: "flex items-center gap-3 flex-1 min-w-0" }, rn = ["src", "alt"], sn = { class: "min-w-0" }, un = { class: "font-semibold truncate" }, cn = {
1010
1475
  key: 0,
1011
1476
  class: "text-xs text-gray-400 truncate"
1012
- }, va = {
1477
+ }, dn = {
1013
1478
  key: 1,
1014
1479
  class: "text-xs text-gray-400 truncate"
1015
- }, pa = {
1480
+ }, fn = {
1016
1481
  key: 2,
1017
1482
  class: "text-xs text-gray-400 flex gap-2 mt-1"
1018
- }, ga = {
1483
+ }, mn = {
1019
1484
  key: 1,
1020
1485
  class: "w-2 h-2 rounded-full bg-green-500"
1021
- }, ha = /* @__PURE__ */ E({
1486
+ }, vn = /* @__PURE__ */ E({
1022
1487
  __name: "DeviceCard",
1023
1488
  props: {
1024
1489
  icon: {},
@@ -1037,51 +1502,211 @@ const At = ["title", "aria-label"], St = ["title", "aria-label"], Tt = ["title",
1037
1502
  setup(e, { emit: n }) {
1038
1503
  const t = n, a = () => {
1039
1504
  t("action");
1040
- }, o = () => {
1505
+ }, l = () => {
1041
1506
  t("click");
1042
1507
  };
1043
- return (s, c) => (l(), i("div", {
1044
- class: p(["flex items-center justify-between background rounded-vsk px-6 py-3 mb-4", [{ "border-l-4 border-green-500": e.isConnected }, e.customClass]]),
1045
- onClick: o
1508
+ return (o, u) => (r(), s("div", {
1509
+ class: k(["flex items-center justify-between background rounded-vsk px-6 py-3 mb-4", [{ "border-l-4 border-green-500": e.isConnected }, e.customClass]]),
1510
+ onClick: l
1046
1511
  }, [
1047
- C("div", ca, [
1048
- C("img", {
1512
+ B("div", on, [
1513
+ B("img", {
1049
1514
  src: e.icon,
1050
1515
  alt: e.title,
1051
1516
  class: "h-7 w-7 shrink-0"
1052
- }, null, 8, da),
1053
- C("div", fa, [
1054
- C("div", ma, T(e.title), 1),
1055
- e.subtitle ? (l(), i("div", ba, T(e.subtitle), 1)) : g("", !0),
1056
- e.metadata ? (l(), i("div", va, T(e.metadata), 1)) : g("", !0),
1057
- e.extraInfo && e.extraInfo.length > 0 ? (l(), i("div", pa, [
1058
- (l(!0), i(Y, null, ae(e.extraInfo, (u, f) => (l(), i("span", { key: f }, T(u), 1))), 128))
1059
- ])) : g("", !0)
1517
+ }, null, 8, rn),
1518
+ B("div", sn, [
1519
+ B("div", un, V(e.title), 1),
1520
+ e.subtitle ? (r(), s("div", cn, V(e.subtitle), 1)) : C("", !0),
1521
+ e.metadata ? (r(), s("div", dn, V(e.metadata), 1)) : C("", !0),
1522
+ e.extraInfo && e.extraInfo.length > 0 ? (r(), s("div", fn, [
1523
+ (r(!0), s(J, null, te(e.extraInfo, (i, m) => (r(), s("span", { key: m }, V(i), 1))), 128))
1524
+ ])) : C("", !0)
1060
1525
  ])
1061
1526
  ]),
1062
- e.showActionButton ? (l(), i("button", {
1527
+ e.showActionButton ? (r(), s("button", {
1063
1528
  key: 0,
1064
1529
  class: "bg-vsk-primary rounded-vsk px-4 py-2 text-sm font-semibold cursor-pointer hover:opacity-70",
1065
- onClick: S(a, ["stop"])
1066
- }, T(e.actionLabel), 1)) : g("", !0),
1067
- e.showStatusIndicator && e.isConnected ? (l(), i("div", ga)) : g("", !0)
1530
+ onClick: M(a, ["stop"])
1531
+ }, V(e.actionLabel), 1)) : C("", !0),
1532
+ e.showStatusIndicator && e.isConnected ? (r(), s("div", mn)) : C("", !0)
1068
1533
  ], 2));
1069
1534
  }
1070
- }), Se = /* @__PURE__ */ Symbol("menú de vasak");
1071
- function oe() {
1072
- const e = ke(Se, null);
1535
+ }), Xe = /* @__PURE__ */ Symbol("diálogo de vasak");
1536
+ function _e() {
1537
+ const e = be(Xe, null);
1538
+ if (e) return e;
1539
+ const n = x(!1);
1540
+ return {
1541
+ abierto: p(() => n.value),
1542
+ cerrar: () => {
1543
+ n.value = !1;
1544
+ },
1545
+ idDelTitulo: x(null),
1546
+ ponerElTitulo: () => {
1547
+ }
1548
+ };
1549
+ }
1550
+ let Ie = 0;
1551
+ function bn() {
1552
+ return Ie += 1, `vsk-dialogo-titulo-${Ie}`;
1553
+ }
1554
+ const pn = /* @__PURE__ */ E({
1555
+ __name: "Dialog",
1556
+ props: {
1557
+ open: { type: Boolean, default: !1 }
1558
+ },
1559
+ emits: ["update:open"],
1560
+ setup(e, { emit: n }) {
1561
+ const t = e, a = n, l = x(null);
1562
+ return ue(Xe, {
1563
+ abierto: p(() => t.open),
1564
+ cerrar: () => a("update:open", !1),
1565
+ idDelTitulo: l,
1566
+ ponerElTitulo: (o) => {
1567
+ l.value = o;
1568
+ }
1569
+ }), (o, u) => A(o.$slots, "default");
1570
+ }
1571
+ }), gn = ["aria-labelledby"], yn = /* @__PURE__ */ E({
1572
+ inheritAttrs: !1,
1573
+ __name: "DialogContent",
1574
+ setup(e) {
1575
+ const n = $e(), t = p(() => n.class ?? ""), a = p(() => {
1576
+ const { class: d, ...S } = n;
1577
+ return S;
1578
+ }), l = _e(), o = p(() => l.abierto.value), u = x(null), i = x(null);
1579
+ let m = null;
1580
+ function v() {
1581
+ return i.value ? [...i.value.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')] : [];
1582
+ }
1583
+ function f(d) {
1584
+ if (d.key === "Escape") {
1585
+ l.cerrar();
1586
+ return;
1587
+ }
1588
+ if (d.key !== "Tab") return;
1589
+ const S = v();
1590
+ if (S.length === 0) {
1591
+ d.preventDefault(), i.value?.focus();
1592
+ return;
1593
+ }
1594
+ const I = S[0], w = S[S.length - 1], c = document.activeElement;
1595
+ d.shiftKey && (c === I || c === i.value) ? (d.preventDefault(), w.focus()) : !d.shiftKey && c === w && (d.preventDefault(), I.focus());
1596
+ }
1597
+ function T(d) {
1598
+ d.target === d.currentTarget && l.cerrar();
1599
+ }
1600
+ function D(d) {
1601
+ u.value?.contains(d.target) || f(d);
1602
+ }
1603
+ function z() {
1604
+ document.removeEventListener("keydown", D);
1605
+ }
1606
+ function g() {
1607
+ const d = m;
1608
+ m = null, d?.isConnected && d.focus();
1609
+ }
1610
+ return K(
1611
+ o,
1612
+ async (d) => {
1613
+ if (d) {
1614
+ m = document.activeElement, document.addEventListener("keydown", D), await Y(), i.value?.focus();
1615
+ return;
1616
+ }
1617
+ z(), g();
1618
+ },
1619
+ // `watch` no corre para el valor inicial, y un diálogo se puede montar ya
1620
+ // abierto —una vista que arranca preguntando algo—. Sin esto, ése no recibe
1621
+ // el foco y ni Escape ni el Tab hacen nada: el `aria-modal` queda en promesa.
1622
+ { immediate: !0 }
1623
+ ), ve(() => {
1624
+ z(), g();
1625
+ }), (d, S) => (r(), Q(ce, { to: "body" }, [
1626
+ q(pe, {
1627
+ "enter-active-class": "transition-opacity duration-200 ease-out",
1628
+ "leave-active-class": "transition-opacity duration-150 ease-in",
1629
+ "enter-from-class": "opacity-0",
1630
+ "leave-to-class": "opacity-0"
1631
+ }, {
1632
+ default: W(() => [
1633
+ o.value ? (r(), s("div", {
1634
+ key: 0,
1635
+ ref_key: "velo",
1636
+ ref: u,
1637
+ class: "fixed inset-0 z-50 flex items-center justify-center",
1638
+ onClick: T,
1639
+ onKeydown: f
1640
+ }, [
1641
+ S[0] || (S[0] = B("div", { class: "absolute inset-0 bg-ui-border-dark/40" }, null, -1)),
1642
+ B("div", ae({
1643
+ ref_key: "panel",
1644
+ ref: i,
1645
+ tabindex: "-1",
1646
+ role: "dialog",
1647
+ "aria-modal": "true",
1648
+ "aria-labelledby": F(l).idDelTitulo.value ?? void 0
1649
+ }, a.value, {
1650
+ class: [
1651
+ t.value,
1652
+ "relative z-10 w-full max-w-lg rounded-corner border border-ui-border bg-ui-bg/80 p-6 text-tx-main shadow-lg"
1653
+ ]
1654
+ }), [
1655
+ A(d.$slots, "default")
1656
+ ], 16, gn)
1657
+ ], 544)) : C("", !0)
1658
+ ]),
1659
+ _: 3
1660
+ })
1661
+ ]));
1662
+ }
1663
+ }), hn = { class: "text-sm text-tx-muted" }, xn = /* @__PURE__ */ E({
1664
+ __name: "DialogDescription",
1665
+ setup(e) {
1666
+ return (n, t) => (r(), s("p", hn, [
1667
+ A(n.$slots, "default")
1668
+ ]));
1669
+ }
1670
+ }), kn = { class: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end" }, wn = /* @__PURE__ */ E({
1671
+ __name: "DialogFooter",
1672
+ setup(e) {
1673
+ return (n, t) => (r(), s("div", kn, [
1674
+ A(n.$slots, "default")
1675
+ ]));
1676
+ }
1677
+ }), $n = { class: "flex flex-col gap-1.5 text-center sm:text-left" }, Cn = /* @__PURE__ */ E({
1678
+ __name: "DialogHeader",
1679
+ setup(e) {
1680
+ return (n, t) => (r(), s("div", $n, [
1681
+ A(n.$slots, "default")
1682
+ ]));
1683
+ }
1684
+ }), En = ["id"], Dn = /* @__PURE__ */ E({
1685
+ __name: "DialogTitle",
1686
+ setup(e) {
1687
+ const n = _e(), t = bn();
1688
+ return _(() => n.ponerElTitulo(t)), ve(() => n.ponerElTitulo(null)), (a, l) => (r(), s("h2", {
1689
+ id: F(t),
1690
+ class: "font-semibold text-lg leading-none tracking-tight"
1691
+ }, [
1692
+ A(a.$slots, "default")
1693
+ ], 8, En));
1694
+ }
1695
+ }), Je = /* @__PURE__ */ Symbol("menú de vasak");
1696
+ function ye() {
1697
+ const e = be(Je, null);
1073
1698
  if (e) return e;
1074
- const n = $(!1);
1699
+ const n = x(!1);
1075
1700
  return {
1076
1701
  abierto: n,
1077
1702
  idDelMenu: "vsk-menu-suelto",
1078
- idDeLaEtiqueta: $(null),
1703
+ idDeLaEtiqueta: x(null),
1079
1704
  ponerLaEtiqueta: () => {
1080
1705
  },
1081
- disparador: $(null),
1706
+ disparador: x(null),
1082
1707
  ponerElDisparador: () => {
1083
1708
  },
1084
- focoAlAbrir: $("ninguno"),
1709
+ focoAlAbrir: x("ninguno"),
1085
1710
  abrir: () => {
1086
1711
  n.value = !0;
1087
1712
  },
@@ -1093,70 +1718,70 @@ function oe() {
1093
1718
  }
1094
1719
  };
1095
1720
  }
1096
- let ye = 0;
1097
- function Te() {
1098
- return ye += 1, `vsk-menu-${ye}`;
1721
+ let Pe = 0;
1722
+ function Ze() {
1723
+ return Pe += 1, `vsk-menu-${Pe}`;
1099
1724
  }
1100
- const ya = { class: "relative inline-block" }, xa = /* @__PURE__ */ E({
1725
+ const zn = { class: "relative inline-block" }, Ln = /* @__PURE__ */ E({
1101
1726
  __name: "DropdownMenu",
1102
1727
  props: {
1103
1728
  open: { type: Boolean, default: void 0 }
1104
1729
  },
1105
1730
  emits: ["update:open"],
1106
1731
  setup(e, { emit: n }) {
1107
- const t = e, a = n, o = $(!1), s = $(null), c = $(null), u = $("ninguno"), f = Te();
1732
+ const t = e, a = n, l = x(!1), o = x(null), u = x(null), i = x("ninguno"), m = Ze();
1108
1733
  let v = null;
1109
- const y = k({
1110
- get: () => t.open ?? o.value,
1111
- set: (h) => {
1112
- t.open === void 0 && (o.value = h), a("update:open", h);
1734
+ const f = p({
1735
+ get: () => t.open ?? l.value,
1736
+ set: (g) => {
1737
+ t.open === void 0 && (l.value = g), a("update:open", g);
1113
1738
  }
1114
1739
  });
1115
- X(y, (h) => {
1116
- if (h) {
1117
- const w = document.activeElement;
1118
- v = w instanceof HTMLElement ? w : null;
1740
+ K(f, (g) => {
1741
+ if (g) {
1742
+ const d = document.activeElement;
1743
+ v = d instanceof HTMLElement ? d : null;
1119
1744
  } else
1120
- u.value = "ninguno";
1745
+ i.value = "ninguno";
1121
1746
  });
1122
- function M(h = "ninguno") {
1123
- u.value = h, y.value = !0;
1747
+ function T(g = "ninguno") {
1748
+ i.value = g, f.value = !0;
1124
1749
  }
1125
- function z(h = {}) {
1126
- if (y.value = !1, !h.devolverElFoco) return;
1127
- const w = v ?? s.value;
1128
- w?.isConnected && w.focus();
1750
+ function D(g = {}) {
1751
+ if (f.value = !1, !g.devolverElFoco) return;
1752
+ const d = v ?? o.value;
1753
+ d?.isConnected && d.focus();
1129
1754
  }
1130
- function L(h = "ninguno") {
1131
- if (y.value) {
1132
- z({ devolverElFoco: !0 });
1755
+ function z(g = "ninguno") {
1756
+ if (f.value) {
1757
+ D({ devolverElFoco: !0 });
1133
1758
  return;
1134
1759
  }
1135
- M(h);
1136
- }
1137
- return ue(Se, {
1138
- abierto: y,
1139
- idDelMenu: f,
1140
- idDeLaEtiqueta: c,
1141
- ponerLaEtiqueta: (h) => {
1142
- c.value = h;
1760
+ T(g);
1761
+ }
1762
+ return ue(Je, {
1763
+ abierto: f,
1764
+ idDelMenu: m,
1765
+ idDeLaEtiqueta: u,
1766
+ ponerLaEtiqueta: (g) => {
1767
+ u.value = g;
1143
1768
  },
1144
- disparador: s,
1145
- ponerElDisparador: (h) => {
1146
- s.value = h;
1769
+ disparador: o,
1770
+ ponerElDisparador: (g) => {
1771
+ o.value = g;
1147
1772
  },
1148
- focoAlAbrir: u,
1149
- abrir: M,
1150
- cerrar: z,
1151
- alternar: L
1152
- }), (h, w) => (l(), i("div", ya, [
1153
- B(h.$slots, "default")
1773
+ focoAlAbrir: i,
1774
+ abrir: T,
1775
+ cerrar: D,
1776
+ alternar: z
1777
+ }), (g, d) => (r(), s("div", zn, [
1778
+ A(g.$slots, "default")
1154
1779
  ]));
1155
1780
  }
1156
- }), ka = ["id", "aria-labelledby", "inert"], wa = {
1781
+ }), Tn = ["id", "aria-labelledby", "inert"], Bn = {
1157
1782
  role: "none",
1158
1783
  class: "py-1"
1159
- }, q = 8, $a = /* @__PURE__ */ E({
1784
+ }, X = 8, An = /* @__PURE__ */ E({
1160
1785
  inheritAttrs: !1,
1161
1786
  __name: "DropdownMenuContent",
1162
1787
  props: {
@@ -1165,7 +1790,7 @@ const ya = { class: "relative inline-block" }, xa = /* @__PURE__ */ E({
1165
1790
  sideOffset: { default: 4 }
1166
1791
  },
1167
1792
  setup(e) {
1168
- const n = e, t = oe(), { idDelMenu: a, idDeLaEtiqueta: o } = t, s = k(() => t.disparador.value), c = k(() => t.abierto.value), u = $(null), f = $({
1793
+ const n = e, t = ye(), { idDelMenu: a, idDeLaEtiqueta: l } = t, o = p(() => t.disparador.value), u = p(() => t.abierto.value), i = x(null), m = x({
1169
1794
  top: 0,
1170
1795
  left: 0,
1171
1796
  techo: null
@@ -1175,241 +1800,241 @@ const ya = { class: "relative inline-block" }, xa = /* @__PURE__ */ E({
1175
1800
  left: "right",
1176
1801
  right: "left"
1177
1802
  };
1178
- function y(r, d) {
1179
- const b = n.sideOffset + q;
1180
- switch (r) {
1803
+ function f(c, b) {
1804
+ const y = n.sideOffset + X;
1805
+ switch (c) {
1181
1806
  case "bottom":
1182
- return window.innerHeight - d.bottom - b;
1807
+ return window.innerHeight - b.bottom - y;
1183
1808
  case "top":
1184
- return d.top - b;
1809
+ return b.top - y;
1185
1810
  case "right":
1186
- return window.innerWidth - d.right - b;
1811
+ return window.innerWidth - b.right - y;
1187
1812
  case "left":
1188
- return d.left - b;
1813
+ return b.left - y;
1189
1814
  }
1190
1815
  }
1191
- function M(r, d, b) {
1192
- return b < d ? d : Math.min(Math.max(r, d), b);
1816
+ function T(c, b, y) {
1817
+ return y < b ? b : Math.min(Math.max(c, b), y);
1193
1818
  }
1194
- function z() {
1195
- if (!s.value || !u.value) return;
1196
- const r = s.value.getBoundingClientRect(), d = u.value.scrollHeight, b = u.value.offsetWidth, D = n.side === "top" || n.side === "bottom", _ = D ? d : b;
1197
- let H = n.side;
1198
- const ee = y(H, r);
1199
- ee < _ && y(v[H], r) > ee && (H = v[H]);
1200
- let W = 0, R = 0, K = null;
1201
- switch (H) {
1819
+ function D() {
1820
+ if (!o.value || !i.value) return;
1821
+ const c = o.value.getBoundingClientRect(), b = i.value.scrollHeight, y = i.value.offsetWidth, P = n.side === "top" || n.side === "bottom", Z = P ? b : y;
1822
+ let U = n.side;
1823
+ const ee = f(U, c);
1824
+ ee < Z && f(v[U], c) > ee && (U = v[U]);
1825
+ let G = 0, L = 0, $ = null;
1826
+ switch (U) {
1202
1827
  case "bottom": {
1203
- W = r.bottom + n.sideOffset, K = Math.max(window.innerHeight - W - q, 0);
1828
+ G = c.bottom + n.sideOffset, $ = Math.max(window.innerHeight - G - X, 0);
1204
1829
  break;
1205
1830
  }
1206
1831
  case "top": {
1207
- K = Math.max(y("top", r), 0), W = r.top - n.sideOffset - Math.min(d, K);
1832
+ $ = Math.max(f("top", c), 0), G = c.top - n.sideOffset - Math.min(b, $);
1208
1833
  break;
1209
1834
  }
1210
1835
  case "left":
1211
1836
  case "right": {
1212
- R = H === "right" ? r.right + n.sideOffset : r.left - b - n.sideOffset;
1213
- const te = window.innerHeight - 2 * q;
1214
- W = M(r.top, q, window.innerHeight - Math.min(d, te) - q), K = Math.max(window.innerHeight - W - q, 0);
1837
+ L = U === "right" ? c.right + n.sideOffset : c.left - y - n.sideOffset;
1838
+ const O = window.innerHeight - 2 * X;
1839
+ G = T(c.top, X, window.innerHeight - Math.min(b, O) - X), $ = Math.max(window.innerHeight - G - X, 0);
1215
1840
  break;
1216
1841
  }
1217
1842
  }
1218
- if (D)
1843
+ if (P)
1219
1844
  switch (n.align) {
1220
1845
  case "start":
1221
- R = r.left;
1846
+ L = c.left;
1222
1847
  break;
1223
1848
  case "center":
1224
- R = r.left + r.width / 2 - b / 2;
1849
+ L = c.left + c.width / 2 - y / 2;
1225
1850
  break;
1226
1851
  case "end":
1227
- R = r.right - b;
1852
+ L = c.right - y;
1228
1853
  break;
1229
1854
  }
1230
- R = M(R, q, window.innerWidth - b - q), f.value = { top: W, left: R, techo: K };
1855
+ L = T(L, X, window.innerWidth - y - X), m.value = { top: G, left: L, techo: $ };
1231
1856
  }
1232
- function L() {
1233
- return u.value ? Array.from(u.value.querySelectorAll('[role="menuitem"]')) : [];
1857
+ function z() {
1858
+ return i.value ? Array.from(i.value.querySelectorAll('[role="menuitem"]')) : [];
1234
1859
  }
1235
- function h(r) {
1236
- const d = L();
1237
- if (!d.length) return;
1238
- const b = d.length;
1239
- d[(r % b + b) % b]?.focus();
1860
+ function g(c) {
1861
+ const b = z();
1862
+ if (!b.length) return;
1863
+ const y = b.length;
1864
+ b[(c % y + y) % y]?.focus();
1240
1865
  }
1241
- function w() {
1242
- const r = document.activeElement;
1243
- return r instanceof HTMLElement ? L().indexOf(r) : -1;
1866
+ function d() {
1867
+ const c = document.activeElement;
1868
+ return c instanceof HTMLElement ? z().indexOf(c) : -1;
1244
1869
  }
1245
- function P(r) {
1246
- const d = w();
1247
- switch (r.key) {
1870
+ function S(c) {
1871
+ const b = d();
1872
+ switch (c.key) {
1248
1873
  case "ArrowDown":
1249
- r.preventDefault(), h(d + 1);
1874
+ c.preventDefault(), g(b + 1);
1250
1875
  break;
1251
1876
  case "ArrowUp":
1252
- r.preventDefault(), h(d <= 0 ? -1 : d - 1);
1877
+ c.preventDefault(), g(b <= 0 ? -1 : b - 1);
1253
1878
  break;
1254
1879
  case "Home":
1255
- r.preventDefault(), h(0);
1880
+ c.preventDefault(), g(0);
1256
1881
  break;
1257
1882
  case "End":
1258
- r.preventDefault(), h(-1);
1883
+ c.preventDefault(), g(-1);
1259
1884
  break;
1260
1885
  case "Escape":
1261
- r.preventDefault(), r.stopPropagation(), t.cerrar({ devolverElFoco: !0 });
1886
+ c.preventDefault(), c.stopPropagation(), t.cerrar({ devolverElFoco: !0 });
1262
1887
  break;
1263
1888
  case "Tab":
1264
- r.preventDefault(), t.cerrar({ devolverElFoco: !0 });
1889
+ c.preventDefault(), t.cerrar({ devolverElFoco: !0 });
1265
1890
  break;
1266
1891
  }
1267
1892
  }
1268
- X(c, async (r) => {
1269
- if (r)
1270
- switch (await ce(), requestAnimationFrame(() => {
1271
- z();
1893
+ K(u, async (c) => {
1894
+ if (c)
1895
+ switch (await Y(), requestAnimationFrame(() => {
1896
+ D();
1272
1897
  }), t.focoAlAbrir.value) {
1273
1898
  case "primero":
1274
- h(0);
1899
+ g(0);
1275
1900
  break;
1276
1901
  case "ultimo":
1277
- h(-1);
1902
+ g(-1);
1278
1903
  break;
1279
1904
  // Abierto con el ratón: el foco va al menú y no a un ítem —no hay
1280
1905
  // ninguno elegido todavía—, que es lo que deja andar las flechas y el
1281
1906
  // Escape sin haber tocado nada.
1282
1907
  default:
1283
- u.value?.focus();
1908
+ i.value?.focus();
1284
1909
  }
1285
1910
  });
1286
- function F(r) {
1287
- c.value && (r && u.value?.contains(r.target) || z());
1288
- }
1289
- function x(r) {
1290
- const d = r.target, b = !!d.closest("[data-dropdown-content]"), D = !!s.value?.contains(d);
1291
- !b && !D && t.cerrar();
1292
- }
1293
- return Q(() => {
1294
- document.addEventListener("click", x), window.addEventListener("resize", F), window.addEventListener("scroll", F, !0);
1295
- }), J(() => {
1296
- document.removeEventListener("click", x), window.removeEventListener("resize", F), window.removeEventListener("scroll", F, !0);
1297
- }), (r, d) => (l(), G(Ce, { to: "body" }, [
1298
- j(ze, {
1911
+ function I(c) {
1912
+ u.value && (c && i.value?.contains(c.target) || D());
1913
+ }
1914
+ function w(c) {
1915
+ const b = c.target, y = !!b.closest("[data-dropdown-content]"), P = !!o.value?.contains(b);
1916
+ !y && !P && t.cerrar();
1917
+ }
1918
+ return _(() => {
1919
+ document.addEventListener("click", w), window.addEventListener("resize", I), window.addEventListener("scroll", I, !0);
1920
+ }), ie(() => {
1921
+ document.removeEventListener("click", w), window.removeEventListener("resize", I), window.removeEventListener("scroll", I, !0);
1922
+ }), (c, b) => (r(), Q(ce, { to: "body" }, [
1923
+ q(pe, {
1299
1924
  "enter-active-class": "transition-all duration-150 ease-in-out",
1300
1925
  "leave-active-class": "transition-all duration-150 ease-in-out",
1301
1926
  "enter-from-class": "opacity-0 scale-95",
1302
1927
  "leave-to-class": "opacity-0 scale-95",
1303
- onEnter: d[1] || (d[1] = (b) => b.offsetHeight),
1304
- onLeave: d[2] || (d[2] = (b) => b.offsetHeight)
1928
+ onEnter: b[1] || (b[1] = (y) => y.offsetHeight),
1929
+ onLeave: b[2] || (b[2] = (y) => y.offsetHeight)
1305
1930
  }, {
1306
- default: U(() => [
1307
- xe(C("div", ne({
1931
+ default: W(() => [
1932
+ Ce(B("div", ae({
1308
1933
  ref_key: "contenido",
1309
- ref: u
1310
- }, r.$attrs, {
1311
- id: V(a),
1934
+ ref: i
1935
+ }, c.$attrs, {
1936
+ id: F(a),
1312
1937
  role: "menu",
1313
1938
  tabindex: "-1",
1314
1939
  "aria-orientation": "vertical",
1315
- "aria-labelledby": V(o) ?? void 0,
1316
- inert: !c.value,
1940
+ "aria-labelledby": F(l) ?? void 0,
1941
+ inert: !u.value,
1317
1942
  style: {
1318
1943
  position: "fixed",
1319
- top: `${f.value.top}px`,
1320
- left: `${f.value.left}px`,
1321
- maxHeight: f.value.techo === null ? void 0 : `${f.value.techo}px`,
1944
+ top: `${m.value.top}px`,
1945
+ left: `${m.value.left}px`,
1946
+ maxHeight: m.value.techo === null ? void 0 : `${m.value.techo}px`,
1322
1947
  overflowY: "auto",
1323
1948
  overscrollBehavior: "contain",
1324
1949
  zIndex: 50
1325
1950
  },
1326
1951
  "data-dropdown-content": "",
1327
1952
  class: "min-w-30 rounded-corner border border-primary bg-ui-bg/80 shadow-lg focus:outline-none",
1328
- onClick: d[0] || (d[0] = (b) => b.stopPropagation()),
1329
- onKeydown: P
1953
+ onClick: b[0] || (b[0] = (y) => y.stopPropagation()),
1954
+ onKeydown: S
1330
1955
  }), [
1331
- C("div", wa, [
1332
- B(r.$slots, "default")
1956
+ B("div", Bn, [
1957
+ A(c.$slots, "default")
1333
1958
  ])
1334
- ], 16, ka), [
1335
- [Ue, c.value]
1959
+ ], 16, Tn), [
1960
+ [qe, u.value]
1336
1961
  ])
1337
1962
  ]),
1338
1963
  _: 3
1339
1964
  })
1340
1965
  ]));
1341
1966
  }
1342
- }), Ca = ["aria-disabled", "onKeydown"], za = /* @__PURE__ */ E({
1967
+ }), Sn = ["aria-disabled", "onKeydown"], Mn = /* @__PURE__ */ E({
1343
1968
  __name: "DropdownMenuItem",
1344
1969
  props: {
1345
1970
  disabled: { type: Boolean, default: !1 }
1346
1971
  },
1347
1972
  emits: ["select", "click"],
1348
1973
  setup(e, { emit: n }) {
1349
- const t = e, a = n, o = oe();
1350
- function s(c) {
1351
- t.disabled || (a("select"), a("click", c), o.cerrar({ devolverElFoco: !0 }));
1974
+ const t = e, a = n, l = ye();
1975
+ function o(u) {
1976
+ t.disabled || (a("select"), a("click", u), l.cerrar({ devolverElFoco: !0 }));
1352
1977
  }
1353
- return (c, u) => (l(), i("div", {
1978
+ return (u, i) => (r(), s("div", {
1354
1979
  role: "menuitem",
1355
1980
  tabindex: "0",
1356
1981
  "aria-disabled": e.disabled || void 0,
1357
- class: p([
1982
+ class: k([
1358
1983
  "px-3 py-2 text-sm transition-colors outline-none",
1359
1984
  {
1360
1985
  "opacity-50 cursor-not-allowed": e.disabled,
1361
1986
  "cursor-pointer hover:bg-primary hover:text-tx-on-primary focus-visible:bg-primary focus-visible:text-tx-on-primary": !e.disabled
1362
1987
  }
1363
1988
  ]),
1364
- onClick: s,
1989
+ onClick: o,
1365
1990
  onKeydown: [
1366
- O(S(s, ["prevent"]), ["enter"]),
1367
- O(S(s, ["prevent"]), ["space"])
1991
+ j(M(o, ["prevent"]), ["enter"]),
1992
+ j(M(o, ["prevent"]), ["space"])
1368
1993
  ]
1369
1994
  }, [
1370
- B(c.$slots, "default")
1371
- ], 42, Ca));
1995
+ A(u.$slots, "default")
1996
+ ], 42, Sn));
1372
1997
  }
1373
- }), La = /* @__PURE__ */ E({
1998
+ }), Vn = /* @__PURE__ */ E({
1374
1999
  __name: "DropdownMenuLabel",
1375
2000
  setup(e) {
1376
- const n = oe(), t = `${Te()}-titulo`;
1377
- return Q(() => {
2001
+ const n = ye(), t = `${Ze()}-titulo`;
2002
+ return _(() => {
1378
2003
  n.ponerLaEtiqueta(t);
1379
- }), J(() => {
2004
+ }), ie(() => {
1380
2005
  n.ponerLaEtiqueta(null);
1381
- }), (a, o) => (l(), i("div", {
2006
+ }), (a, l) => (r(), s("div", {
1382
2007
  id: t,
1383
2008
  role: "presentation",
1384
2009
  class: "px-3 py-2 text-sm font-semibold text-tx-main"
1385
2010
  }, [
1386
- B(a.$slots, "default")
2011
+ A(a.$slots, "default")
1387
2012
  ]));
1388
2013
  }
1389
- }), Ea = {
2014
+ }), On = {
1390
2015
  role: "separator",
1391
2016
  "aria-orientation": "horizontal",
1392
2017
  class: "bg-ui-bg/80 my-4 h-0.5"
1393
- }, Da = /* @__PURE__ */ E({
2018
+ }, In = /* @__PURE__ */ E({
1394
2019
  __name: "DropdownMenuSeparator",
1395
2020
  setup(e) {
1396
- return (n, t) => (l(), i("div", Ea));
2021
+ return (n, t) => (r(), s("div", On));
1397
2022
  }
1398
2023
  });
1399
- function Ie(e) {
2024
+ function et(e) {
1400
2025
  const n = e.filter(
1401
- (a) => a.type !== Ye && !(a.type === Qe && typeof a.children == "string" && !a.children.trim())
2026
+ (a) => a.type !== ft && !(a.type === mt && typeof a.children == "string" && !a.children.trim())
1402
2027
  );
1403
2028
  if (n.length !== 1) return null;
1404
2029
  const t = n[0];
1405
- return t.type === Y && Array.isArray(t.children) ? Ie(t.children) : t;
2030
+ return t.type === J && Array.isArray(t.children) ? et(t.children) : t;
1406
2031
  }
1407
- function Ba(e) {
2032
+ function Pn(e) {
1408
2033
  if (e instanceof HTMLElement) return e;
1409
2034
  const n = e?.$el;
1410
2035
  return n instanceof HTMLElement ? n : null;
1411
2036
  }
1412
- const Ma = E({
2037
+ const jn = E({
1413
2038
  name: "DropdownMenuTrigger",
1414
2039
  inheritAttrs: !1,
1415
2040
  props: {
@@ -1419,35 +2044,35 @@ const Ma = E({
1419
2044
  disabled: { type: Boolean, default: !1 }
1420
2045
  },
1421
2046
  setup(e, { slots: n, attrs: t }) {
1422
- const a = oe(), o = $(null);
1423
- function s() {
1424
- a.ponerElDisparador(Ba(o.value));
2047
+ const a = ye(), l = x(null);
2048
+ function o() {
2049
+ a.ponerElDisparador(Pn(l.value));
1425
2050
  }
1426
- function c() {
1427
- e.disabled || (s(), a.alternar());
2051
+ function u() {
2052
+ e.disabled || (o(), a.alternar());
1428
2053
  }
1429
- function u(f) {
2054
+ function i(m) {
1430
2055
  if (!e.disabled)
1431
- switch (f.key) {
2056
+ switch (m.key) {
1432
2057
  case "Enter":
1433
2058
  case " ":
1434
- f.preventDefault(), s(), a.alternar("primero");
2059
+ m.preventDefault(), o(), a.alternar("primero");
1435
2060
  break;
1436
2061
  case "ArrowDown":
1437
- f.preventDefault(), s(), a.abrir("primero");
2062
+ m.preventDefault(), o(), a.abrir("primero");
1438
2063
  break;
1439
2064
  case "ArrowUp":
1440
- f.preventDefault(), s(), a.abrir("ultimo");
2065
+ m.preventDefault(), o(), a.abrir("ultimo");
1441
2066
  break;
1442
2067
  case "Escape":
1443
- a.abierto.value && (f.preventDefault(), a.cerrar({ devolverElFoco: !0 }));
2068
+ a.abierto.value && (m.preventDefault(), a.cerrar({ devolverElFoco: !0 }));
1444
2069
  break;
1445
2070
  }
1446
2071
  }
1447
2072
  return () => {
1448
- const f = {
1449
- ref: (y) => {
1450
- o.value = y, s();
2073
+ const m = {
2074
+ ref: (f) => {
2075
+ l.value = f, o();
1451
2076
  },
1452
2077
  "aria-haspopup": "menu",
1453
2078
  "aria-expanded": a.abierto.value ? "true" : "false",
@@ -1455,21 +2080,21 @@ const Ma = E({
1455
2080
  // a un elemento que el lector no expone —el menú cerrado está
1456
2081
  // `inert`— es una referencia rota.
1457
2082
  "aria-controls": a.abierto.value ? a.idDelMenu : void 0,
1458
- onClick: c,
1459
- onKeydown: u
2083
+ onClick: u,
2084
+ onKeydown: i
1460
2085
  }, v = n.default?.() ?? [];
1461
2086
  if (e.asChild) {
1462
- const y = Ie(v);
1463
- if (y) return Ke(y, { ...t, ...f });
2087
+ const f = et(v);
2088
+ if (f) return ct(f, { ...t, ...m });
1464
2089
  }
1465
- return Ge(
2090
+ return dt(
1466
2091
  "div",
1467
- { ...t, class: ["dropdown-menu-trigger inline-block", t.class], ...f },
2092
+ { ...t, class: ["dropdown-menu-trigger inline-block", t.class], ...m },
1468
2093
  v
1469
2094
  );
1470
2095
  };
1471
2096
  }
1472
- }), Aa = ["for"], Sa = /* @__PURE__ */ E({
2097
+ }), Fn = ["for"], qn = /* @__PURE__ */ E({
1473
2098
  __name: "FormGroup",
1474
2099
  props: {
1475
2100
  label: {},
@@ -1478,18 +2103,18 @@ const Ma = E({
1478
2103
  labelClass: { default: () => ({}) }
1479
2104
  },
1480
2105
  setup(e) {
1481
- return (n, t) => (l(), i("div", {
1482
- class: p(["flex flex-col gap-2", e.customClass])
2106
+ return (n, t) => (r(), s("div", {
2107
+ class: k(["flex flex-col gap-2", e.customClass])
1483
2108
  }, [
1484
- e.label ? (l(), i("label", {
2109
+ e.label ? (r(), s("label", {
1485
2110
  key: 0,
1486
2111
  for: e.htmlFor,
1487
- class: p(["text-sm font-medium text-primary dark:text-primary-dark", e.labelClass])
1488
- }, T(e.label), 11, Aa)) : g("", !0),
1489
- B(n.$slots, "default", {}, void 0, !0)
2112
+ class: k(["text-sm font-medium text-primary dark:text-primary-dark", e.labelClass])
2113
+ }, V(e.label), 11, Fn)) : C("", !0),
2114
+ A(n.$slots, "default", {}, void 0, !0)
1490
2115
  ], 2));
1491
2116
  }
1492
- }), Ta = /* @__PURE__ */ le(Sa, [["__scopeId", "data-v-c0d9d9cb"]]), Ia = /* @__PURE__ */ E({
2117
+ }), Rn = /* @__PURE__ */ ge(qn, [["__scopeId", "data-v-c0d9d9cb"]]), Nn = /* @__PURE__ */ E({
1493
2118
  __name: "ListCard",
1494
2119
  props: {
1495
2120
  clickable: { type: Boolean, default: !1 },
@@ -1497,26 +2122,26 @@ const Ma = E({
1497
2122
  },
1498
2123
  emits: ["click"],
1499
2124
  setup(e, { emit: n }) {
1500
- const t = e, a = n, o = () => {
2125
+ const t = e, a = n, l = () => {
1501
2126
  t.clickable && a("click");
1502
2127
  };
1503
- return (s, c) => (l(), i("div", {
1504
- class: p([
2128
+ return (o, u) => (r(), s("div", {
2129
+ class: k([
1505
2130
  "flex items-center justify-between background p-3 rounded-vsk border border-vsk-primary/70 transition-colors duration-200",
1506
2131
  {
1507
2132
  "hover:bg-vsk-primary/5 cursor-pointer": t.clickable
1508
2133
  },
1509
2134
  e.customClass
1510
2135
  ]),
1511
- onClick: o
2136
+ onClick: l
1512
2137
  }, [
1513
- B(s.$slots, "default", {}, void 0, !0)
2138
+ A(o.$slots, "default", {}, void 0, !0)
1514
2139
  ], 2));
1515
2140
  }
1516
- }), Oa = /* @__PURE__ */ le(Ia, [["__scopeId", "data-v-f86d47da"]]), Va = { class: "background rounded-corner flex flex-row items-center gap-2 justify-between w-full h-auto p-4 transition-all duration-200 hover:bg-ui-surface/80 dark:hover:bg-ui-surface-dark/80" }, ja = ["src", "alt", "title"], Pa = {
2141
+ }), Hn = /* @__PURE__ */ ge(Nn, [["__scopeId", "data-v-f86d47da"]]), Un = { class: "background rounded-corner flex flex-row items-center gap-2 justify-between w-full h-auto p-4 transition-all duration-200 hover:bg-ui-surface/80 dark:hover:bg-ui-surface-dark/80" }, Wn = ["src", "alt", "title"], Kn = {
1517
2142
  key: 1,
1518
2143
  class: "w-8 h-8 flex items-center justify-center"
1519
- }, Na = ["src", "alt"], Fa = ["min", "max", "value"], Ra = /* @__PURE__ */ E({
2144
+ }, Gn = ["src", "alt"], Qn = ["min", "max", "value"], Yn = /* @__PURE__ */ E({
1520
2145
  __name: "SliderControl",
1521
2146
  props: {
1522
2147
  icon: {},
@@ -1531,49 +2156,49 @@ const Ma = E({
1531
2156
  },
1532
2157
  emits: ["update:modelValue", "buttonClick"],
1533
2158
  setup(e, { emit: n }) {
1534
- const t = e, a = n, o = k(() => {
2159
+ const t = e, a = n, l = p(() => {
1535
2160
  if (t.max <= t.min) return 0;
1536
- const f = t.max - t.min, v = t.modelValue - t.min;
1537
- return Math.round(v / f * 100);
1538
- }), s = k(() => t.getPercentageClass ? t.getPercentageClass(o.value) : ""), c = (f) => {
1539
- const v = f.target;
2161
+ const m = t.max - t.min, v = t.modelValue - t.min;
2162
+ return Math.round(v / m * 100);
2163
+ }), o = p(() => t.getPercentageClass ? t.getPercentageClass(l.value) : ""), u = (m) => {
2164
+ const v = m.target;
1540
2165
  a("update:modelValue", Number(v.value));
1541
- }, u = () => {
2166
+ }, i = () => {
1542
2167
  a("buttonClick");
1543
2168
  };
1544
- return (f, v) => (l(), i("div", Va, [
1545
- e.showButton ? (l(), i("button", {
2169
+ return (m, v) => (r(), s("div", Un, [
2170
+ e.showButton ? (r(), s("button", {
1546
2171
  key: 0,
1547
- onClick: u,
2172
+ onClick: i,
1548
2173
  class: "w-8 h-8 flex items-center justify-center rounded-corner transition-all duration-200 hover:bg-ui-surface/80 dark:hover:bg-ui-surface-dark/80 hover:scale-110 active:scale-95"
1549
2174
  }, [
1550
- C("img", {
2175
+ B("img", {
1551
2176
  src: e.icon,
1552
2177
  alt: e.alt,
1553
2178
  title: e.tooltip,
1554
- class: p(["w-6 h-6 transition-all duration-200", e.iconClass])
1555
- }, null, 10, ja)
1556
- ])) : (l(), i("div", Pa, [
1557
- C("img", {
2179
+ class: k(["w-6 h-6 transition-all duration-200", e.iconClass])
2180
+ }, null, 10, Wn)
2181
+ ])) : (r(), s("div", Kn, [
2182
+ B("img", {
1558
2183
  src: e.icon,
1559
2184
  alt: e.alt,
1560
2185
  class: "w-6 h-6 transition-all duration-200"
1561
- }, null, 8, Na)
2186
+ }, null, 8, Gn)
1562
2187
  ])),
1563
- C("input", {
2188
+ B("input", {
1564
2189
  type: "range",
1565
2190
  min: e.min,
1566
2191
  max: e.max,
1567
2192
  value: e.modelValue,
1568
- onInput: c,
2193
+ onInput: u,
1569
2194
  class: "flex-1 transition-all duration-200 hover:scale-105"
1570
- }, null, 40, Fa),
1571
- C("span", {
1572
- class: p(["w-12 text-right transition-all duration-200 font-medium", s.value])
1573
- }, T(o.value) + "% ", 3)
2195
+ }, null, 40, Qn),
2196
+ B("span", {
2197
+ class: k(["w-12 text-right transition-all duration-200 font-medium", o.value])
2198
+ }, V(l.value) + "% ", 3)
1574
2199
  ]));
1575
2200
  }
1576
- }), Ha = ["disabled"], Wa = /* @__PURE__ */ E({
2201
+ }), Xn = ["disabled"], _n = /* @__PURE__ */ E({
1577
2202
  __name: "SwitchToggle",
1578
2203
  props: {
1579
2204
  isOn: { type: Boolean },
@@ -1585,14 +2210,14 @@ const Ma = E({
1585
2210
  },
1586
2211
  emits: ["toggle"],
1587
2212
  setup(e, { emit: n }) {
1588
- const t = e, a = n, o = () => {
2213
+ const t = e, a = n, l = () => {
1589
2214
  a("toggle", !t.isOn);
1590
2215
  };
1591
- return (s, c) => (l(), i("button", {
2216
+ return (o, u) => (r(), s("button", {
1592
2217
  type: "button",
1593
- onClick: o,
2218
+ onClick: l,
1594
2219
  disabled: e.disabled,
1595
- class: p([
2220
+ class: k([
1596
2221
  "relative inline-flex items-center rounded-full transition-colors",
1597
2222
  e.size === "small" ? "h-6 w-11" : "h-7 w-12",
1598
2223
  e.isOn ? e.activeClass : e.inactiveClass,
@@ -1600,16 +2225,16 @@ const Ma = E({
1600
2225
  e.customClass
1601
2226
  ])
1602
2227
  }, [
1603
- C("span", {
1604
- class: p([
2228
+ B("span", {
2229
+ class: k([
1605
2230
  "inline-block transform rounded-full bg-white shadow transition-transform",
1606
2231
  e.size === "small" ? "h-4 w-4" : "h-6 w-6",
1607
2232
  e.isOn ? e.size === "small" ? "translate-x-6" : "translate-x-5" : "translate-x-1"
1608
2233
  ])
1609
2234
  }, null, 2)
1610
- ], 10, Ha));
2235
+ ], 10, Xn));
1611
2236
  }
1612
- }), qa = ["disabled"], Ua = ["src", "alt", "title"], Ka = /* @__PURE__ */ E({
2237
+ }), Jn = ["disabled"], Zn = ["src", "alt", "title"], el = /* @__PURE__ */ E({
1613
2238
  __name: "ToggleControl",
1614
2239
  props: {
1615
2240
  icon: {},
@@ -1625,9 +2250,9 @@ const Ma = E({
1625
2250
  const t = n, a = () => {
1626
2251
  t("click");
1627
2252
  };
1628
- return (o, s) => (l(), i("button", {
2253
+ return (l, o) => (r(), s("button", {
1629
2254
  onClick: a,
1630
- class: p(["p-2 rounded-corner background hover:opacity-50 transition-all duration-300 h-17.5 w-17.5 group relative overflow-hidden hover:scale-105 hover:shadow-lg active:scale-95", {
2255
+ class: k(["p-2 rounded-corner background hover:opacity-50 transition-all duration-300 h-17.5 w-17.5 group relative overflow-hidden hover:scale-105 hover:shadow-lg active:scale-95", {
1631
2256
  "animate-pulse": e.isLoading,
1632
2257
  "ring-2 ring-primary dark:ring-primary-dark": e.isActive,
1633
2258
  "opacity-60": !e.isActive,
@@ -1635,23 +2260,153 @@ const Ma = E({
1635
2260
  }]),
1636
2261
  disabled: e.isLoading
1637
2262
  }, [
1638
- C("img", {
2263
+ B("img", {
1639
2264
  src: e.icon,
1640
2265
  alt: e.alt,
1641
2266
  title: e.tooltip,
1642
- class: p(["m-auto w-12.5 h-12.5 transition-all duration-300 group-hover:scale-110 relative z-10", {
2267
+ class: k(["m-auto w-12.5 h-12.5 transition-all duration-300 group-hover:scale-110 relative z-10", {
1643
2268
  "animate-spin": e.isLoading,
1644
2269
  "filter brightness-75": !e.isActive,
1645
2270
  "drop-shadow-lg": e.isActive,
1646
2271
  ...e.iconClass
1647
2272
  }])
1648
- }, null, 10, Ua)
1649
- ], 10, qa));
2273
+ }, null, 10, Zn)
2274
+ ], 10, Jn));
2275
+ }
2276
+ }), tt = /* @__PURE__ */ Symbol("tooltip de vasak");
2277
+ function at() {
2278
+ const e = be(tt, null);
2279
+ if (e) return e;
2280
+ const n = x(!1);
2281
+ return {
2282
+ abierto: p(() => n.value),
2283
+ disparador: x(null),
2284
+ ponerElDisparador: () => {
2285
+ },
2286
+ abrir: () => {
2287
+ n.value = !0;
2288
+ },
2289
+ cerrar: () => {
2290
+ n.value = !1;
2291
+ }
2292
+ };
2293
+ }
2294
+ const tl = { class: "inline-block" }, al = /* @__PURE__ */ E({
2295
+ __name: "Tooltip",
2296
+ props: {
2297
+ disabled: { type: Boolean, default: !1 },
2298
+ delayDuration: { default: 200 }
2299
+ },
2300
+ setup(e) {
2301
+ const n = e, t = x(!1), a = x(null);
2302
+ let l = null;
2303
+ function o() {
2304
+ n.disabled || (l = setTimeout(() => {
2305
+ t.value = !0;
2306
+ }, n.delayDuration));
2307
+ }
2308
+ function u() {
2309
+ l && clearTimeout(l), t.value = !1;
2310
+ }
2311
+ return ue(tt, {
2312
+ abierto: p(() => t.value && !n.disabled),
2313
+ disparador: a,
2314
+ ponerElDisparador: (i) => {
2315
+ a.value = i;
2316
+ },
2317
+ abrir: o,
2318
+ cerrar: u
2319
+ }), (i, m) => (r(), s("div", tl, [
2320
+ A(i.$slots, "default")
2321
+ ]));
2322
+ }
2323
+ }), nl = /* @__PURE__ */ E({
2324
+ inheritAttrs: !1,
2325
+ __name: "TooltipContent",
2326
+ props: {
2327
+ side: { default: "bottom" },
2328
+ align: { default: "center" },
2329
+ sideOffset: { default: 4 }
2330
+ },
2331
+ setup(e) {
2332
+ const n = $e(), t = p(() => n.class ?? ""), a = e, l = at(), o = p(() => l.abierto.value), u = x(null), i = x({ top: 0, left: 0 });
2333
+ function m() {
2334
+ const v = l.disparador.value;
2335
+ if (!v || !u.value) return;
2336
+ const f = v.getBoundingClientRect(), T = u.value.getBoundingClientRect();
2337
+ let D = 0, z = 0;
2338
+ switch (a.side) {
2339
+ case "bottom":
2340
+ D = f.bottom + a.sideOffset, z = f.left + f.width / 2 - T.width / 2;
2341
+ break;
2342
+ case "top":
2343
+ D = f.top - T.height - a.sideOffset, z = f.left + f.width / 2 - T.width / 2;
2344
+ break;
2345
+ case "left":
2346
+ z = f.left - T.width - a.sideOffset, D = f.top + f.height / 2 - T.height / 2;
2347
+ break;
2348
+ case "right":
2349
+ z = f.right + a.sideOffset, D = f.top + f.height / 2 - T.height / 2;
2350
+ break;
2351
+ }
2352
+ i.value = { top: D, left: z };
2353
+ }
2354
+ return K(o, async (v) => {
2355
+ v && (await Y(), requestAnimationFrame(m));
2356
+ }), (v, f) => (r(), Q(ce, { to: "body" }, [
2357
+ q(pe, {
2358
+ "enter-active-class": "transition-all duration-200 ease-in-out",
2359
+ "leave-active-class": "transition-all duration-200 ease-in-out",
2360
+ "enter-from-class": "opacity-0 scale-95",
2361
+ "leave-to-class": "opacity-0 scale-95"
2362
+ }, {
2363
+ default: W(() => [
2364
+ Ce(B("div", {
2365
+ ref_key: "globo",
2366
+ ref: u,
2367
+ style: se({ position: "fixed", top: `${i.value.top}px`, left: `${i.value.left}px`, zIndex: 50 }),
2368
+ class: k([
2369
+ t.value,
2370
+ "pointer-events-none rounded-corner border border-secondary bg-ui-bg/80 px-2 py-1 text-sm shadow-md"
2371
+ ])
2372
+ }, [
2373
+ A(v.$slots, "default")
2374
+ ], 6), [
2375
+ [qe, o.value]
2376
+ ])
2377
+ ]),
2378
+ _: 3
2379
+ })
2380
+ ]));
1650
2381
  }
1651
- }), Ga = ["title"], Ya = ["src", "alt"], Qa = {
2382
+ }), ll = /* @__PURE__ */ E({
2383
+ __name: "TooltipTrigger",
2384
+ setup(e) {
2385
+ const n = at(), t = x(null);
2386
+ function a() {
2387
+ return t.value ? t.value.firstElementChild ?? t.value : null;
2388
+ }
2389
+ function l() {
2390
+ n.ponerElDisparador(a()), n.abrir();
2391
+ }
2392
+ return _(() => {
2393
+ n.ponerElDisparador(a());
2394
+ }), (o, u) => (r(), s("div", {
2395
+ ref_key: "envoltorio",
2396
+ ref: t,
2397
+ class: "inline-block",
2398
+ onMouseenter: l,
2399
+ onMouseleave: u[0] || (u[0] = (i) => F(n).cerrar()),
2400
+ onFocus: l,
2401
+ onBlur: u[1] || (u[1] = (i) => F(n).cerrar())
2402
+ }, [
2403
+ A(o.$slots, "default")
2404
+ ], 544));
2405
+ }
2406
+ }), ol = ["title"], rl = ["src", "alt"], sl = {
1652
2407
  key: 0,
1653
2408
  class: "absolute bottom-1 right-1 bg-primary dark:bg-primary-dark text-white text-xs rounded-full w-4 h-4 flex items-center justify-center font-bold animate-bounce"
1654
- }, Xa = /* @__PURE__ */ E({
2409
+ }, il = /* @__PURE__ */ E({
1655
2410
  __name: "TrayIconButton",
1656
2411
  props: {
1657
2412
  icon: {},
@@ -1666,105 +2421,144 @@ const Ma = E({
1666
2421
  },
1667
2422
  emits: ["click"],
1668
2423
  setup(e, { emit: n }) {
1669
- const t = n, a = $(!1), o = () => {
2424
+ const t = n, a = x(!1), l = () => {
1670
2425
  t("click");
1671
2426
  };
1672
- return (s, c) => (l(), i("div", {
1673
- class: p(["p-1 rounded-corner relative hover:bg-primary dark:hover:bg-primary-dark group transition-all duration-300", e.customClass]),
2427
+ return (o, u) => (r(), s("div", {
2428
+ class: k(["p-1 rounded-corner relative hover:bg-primary dark:hover:bg-primary-dark group transition-all duration-300", e.customClass]),
1674
2429
  title: e.tooltip,
1675
- onClick: o,
1676
- onMouseenter: c[0] || (c[0] = (u) => a.value = !0),
1677
- onMouseleave: c[1] || (c[1] = (u) => a.value = !1)
2430
+ onClick: l,
2431
+ onMouseenter: u[0] || (u[0] = (i) => a.value = !0),
2432
+ onMouseleave: u[1] || (u[1] = (i) => a.value = !1)
1678
2433
  }, [
1679
- C("img", {
2434
+ B("img", {
1680
2435
  src: e.icon,
1681
2436
  alt: e.alt,
1682
- class: p(["m-auto h-5.5 w-auto transition-all duration-300", e.iconClass])
1683
- }, null, 10, Ya),
1684
- e.badge !== null && e.badge > 0 ? (l(), i("div", Qa, T(e.badge), 1)) : g("", !0),
1685
- e.showCustomTooltip && e.customTooltipText ? (l(), i("div", {
2437
+ class: k(["m-auto h-5.5 w-auto transition-all duration-300", e.iconClass])
2438
+ }, null, 10, rl),
2439
+ e.badge !== null && e.badge > 0 ? (r(), s("div", sl, V(e.badge), 1)) : C("", !0),
2440
+ e.showCustomTooltip && e.customTooltipText ? (r(), s("div", {
1686
2441
  key: 1,
1687
- class: p(["absolute top-1 left-1/2 transform -translate-x-1/2 text-xs font-semibold p-1 rounded-corner transition-all duration-300 pointer-events-none background", [
2442
+ class: k(["absolute top-1 left-1/2 transform -translate-x-1/2 text-xs font-semibold p-1 rounded-corner transition-all duration-300 pointer-events-none background", [
1688
2443
  e.tooltipClass,
1689
2444
  {
1690
2445
  "opacity-0 -translate-y-2": !a.value,
1691
2446
  "opacity-100 translate-y-0": a.value
1692
2447
  }
1693
2448
  ]])
1694
- }, T(e.customTooltipText), 3)) : g("", !0),
1695
- B(s.$slots, "default")
1696
- ], 42, Ga));
2449
+ }, V(e.customTooltipText), 3)) : C("", !0),
2450
+ A(o.$slots, "default")
2451
+ ], 42, ol));
1697
2452
  }
1698
- }), Ja = [
1699
- yt,
1700
- Ee,
1701
- Le,
1702
- Ct,
1703
- N,
1704
- jt,
1705
- Me,
1706
- Be,
2453
+ }), ul = [
2454
+ Ht,
2455
+ Ne,
2456
+ Re,
1707
2457
  Qt,
1708
- Ae,
1709
- _t,
1710
- ia,
1711
- ua,
2458
+ H,
2459
+ sa,
2460
+ We,
2461
+ Ue,
1712
2462
  ha,
1713
- xa,
1714
- $a,
1715
- za,
1716
- La,
1717
- Da,
2463
+ Ke,
2464
+ Ca,
2465
+ Aa,
1718
2466
  Ma,
1719
- Ta,
1720
- Oa,
2467
+ Ia,
1721
2468
  Ra,
1722
- Wa,
1723
- Ka,
1724
- Xa
1725
- ], an = {
2469
+ Le,
2470
+ tn,
2471
+ Ge,
2472
+ ja,
2473
+ ln,
2474
+ vn,
2475
+ pn,
2476
+ yn,
2477
+ xn,
2478
+ wn,
2479
+ Cn,
2480
+ Dn,
2481
+ Ln,
2482
+ An,
2483
+ Mn,
2484
+ Vn,
2485
+ In,
2486
+ jn,
2487
+ Rn,
2488
+ Hn,
2489
+ Yn,
2490
+ _n,
2491
+ el,
2492
+ al,
2493
+ nl,
2494
+ ll,
2495
+ il
2496
+ ], bl = {
1726
2497
  install(e) {
1727
- Ja.forEach((n) => {
2498
+ ul.forEach((n) => {
1728
2499
  e.component(n.name, n);
1729
2500
  });
1730
2501
  }
1731
2502
  };
1732
2503
  export {
1733
- ia as ActionButton,
1734
- Me as AppBar,
1735
- _t as BarSearch,
1736
- Se as CLAVE_DEL_MENU,
1737
- de as CLAVE_DE_LA_BARRA,
1738
- ua as ConfigSection,
1739
- ha as DeviceCard,
1740
- xa as DropdownMenu,
1741
- $a as DropdownMenuContent,
1742
- za as DropdownMenuItem,
1743
- La as DropdownMenuLabel,
1744
- Da as DropdownMenuSeparator,
1745
- Ma as DropdownMenuTrigger,
1746
- Ta as FormGroup,
1747
- fe as LOS_TRES_CONTROLES,
1748
- Oa as ListCard,
1749
- zt as POSICIONES,
1750
- Ct as SelectField,
1751
- yt as SideBar,
1752
- Ee as SideButton,
1753
- Le as SideGroup,
1754
- Ra as SliderControl,
1755
- Wa as SwitchToggle,
1756
- Qt as TabBar,
1757
- Ae as TabItem,
1758
- N as ThemeIcon,
1759
- Ka as ToggleControl,
1760
- Xa as TrayIconButton,
1761
- Be as WindowControls,
1762
- jt as WindowFrame,
1763
- an as default,
1764
- Lt as esPosicion,
1765
- re as orientacionDe,
1766
- Bt as posicionDe,
1767
- oe as usarElMenu,
1768
- Z as usarLaBarra,
1769
- Mt as usarLaPosicionDeLaBarra
2504
+ Aa as ActionButton,
2505
+ Ma as AlertMessage,
2506
+ We as AppBar,
2507
+ Ca as BarSearch,
2508
+ Qe as CLASES_POR_TONO,
2509
+ Xe as CLAVE_DEL_DIALOGO,
2510
+ Je as CLAVE_DEL_MENU,
2511
+ tt as CLAVE_DEL_TOOLTIP,
2512
+ De as CLAVE_DE_LA_BARRA,
2513
+ ln as ConfigSection,
2514
+ vn as DeviceCard,
2515
+ pn as Dialog,
2516
+ yn as DialogContent,
2517
+ xn as DialogDescription,
2518
+ wn as DialogFooter,
2519
+ Cn as DialogHeader,
2520
+ Dn as DialogTitle,
2521
+ Ln as DropdownMenu,
2522
+ An as DropdownMenuContent,
2523
+ Mn as DropdownMenuItem,
2524
+ Vn as DropdownMenuLabel,
2525
+ In as DropdownMenuSeparator,
2526
+ jn as DropdownMenuTrigger,
2527
+ Ia as EmptyState,
2528
+ Rn as FormGroup,
2529
+ ze as LOS_TRES_CONTROLES,
2530
+ Hn as ListCard,
2531
+ Yt as POSICIONES,
2532
+ Ra as ProgressBar,
2533
+ Le as SearchField,
2534
+ tn as SearchSelect,
2535
+ Qt as SelectField,
2536
+ Ht as SideBar,
2537
+ Ne as SideButton,
2538
+ Re as SideGroup,
2539
+ Yn as SliderControl,
2540
+ _n as SwitchToggle,
2541
+ ha as TabBar,
2542
+ Ke as TabItem,
2543
+ Ge as TextInput,
2544
+ H as ThemeIcon,
2545
+ ja as ToastArea,
2546
+ el as ToggleControl,
2547
+ al as Tooltip,
2548
+ nl as TooltipContent,
2549
+ ll as TooltipTrigger,
2550
+ il as TrayIconButton,
2551
+ Ue as WindowControls,
2552
+ sa as WindowFrame,
2553
+ Ha as buscarOpciones,
2554
+ bl as default,
2555
+ Xt as esPosicion,
2556
+ we as orientacionDe,
2557
+ Zt as posicionDe,
2558
+ Ye as rolDelTono,
2559
+ _e as usarElDialogo,
2560
+ ye as usarElMenu,
2561
+ at as usarElTooltip,
2562
+ de as usarLaBarra,
2563
+ ea as usarLaPosicionDeLaBarra
1770
2564
  };