@paraxe/vue 1.0.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 (107) hide show
  1. package/dist/.loba-build.json +5 -0
  2. package/dist/composites/Accordion.d.ts +22 -0
  3. package/dist/composites/AccordionItem.d.ts +21 -0
  4. package/dist/composites/ButtonGroup.d.ts +21 -0
  5. package/dist/composites/SectionHeader.d.ts +20 -0
  6. package/dist/data/EmptyState.d.ts +22 -0
  7. package/dist/data/List.d.ts +35 -0
  8. package/dist/data/ListItem.d.ts +19 -0
  9. package/dist/data/Pagination.d.ts +17 -0
  10. package/dist/data/Table.d.ts +51 -0
  11. package/dist/elements/Badge.d.ts +19 -0
  12. package/dist/elements/Button.d.ts +33 -0
  13. package/dist/elements/Card.d.ts +21 -0
  14. package/dist/elements/Image.d.ts +13 -0
  15. package/dist/elements/Tag.d.ts +13 -0
  16. package/dist/feedback/Alert.d.ts +27 -0
  17. package/dist/feedback/Progress.d.ts +29 -0
  18. package/dist/feedback/Skeleton.d.ts +13 -0
  19. package/dist/feedback/Toast.d.ts +33 -0
  20. package/dist/forms/Checkbox.d.ts +27 -0
  21. package/dist/forms/Choice.d.ts +19 -0
  22. package/dist/forms/ChoiceGroup.d.ts +32 -0
  23. package/dist/forms/FormField.d.ts +29 -0
  24. package/dist/forms/Input.d.ts +29 -0
  25. package/dist/forms/Radio.d.ts +26 -0
  26. package/dist/forms/Select.d.ts +28 -0
  27. package/dist/forms/Switch.d.ts +24 -0
  28. package/dist/forms/Textarea.d.ts +24 -0
  29. package/dist/index.d.ts +47 -0
  30. package/dist/index.js +1888 -0
  31. package/dist/navigation/Breadcrumb.d.ts +22 -0
  32. package/dist/navigation/Breadcrumbs.d.ts +18 -0
  33. package/dist/navigation/Sidebar.d.ts +22 -0
  34. package/dist/navigation/SidebarGroup.d.ts +18 -0
  35. package/dist/navigation/SidebarItem.d.ts +28 -0
  36. package/dist/navigation/Tab.d.ts +19 -0
  37. package/dist/navigation/Tabs.d.ts +22 -0
  38. package/dist/overlays/Dialog.d.ts +26 -0
  39. package/dist/overlays/Drawer.d.ts +28 -0
  40. package/dist/overlays/Popover.d.ts +20 -0
  41. package/dist/overlays/Tooltip.d.ts +21 -0
  42. package/dist/primitives/Container.d.ts +19 -0
  43. package/dist/primitives/Divider.d.ts +3 -0
  44. package/dist/primitives/Grid.d.ts +25 -0
  45. package/dist/primitives/Section.d.ts +13 -0
  46. package/dist/primitives/Stack.d.ts +21 -0
  47. package/dist/typography/Eyebrow.d.ts +13 -0
  48. package/dist/typography/Heading.d.ts +19 -0
  49. package/dist/typography/Label.d.ts +24 -0
  50. package/dist/typography/Text.d.ts +22 -0
  51. package/doc.md +527 -0
  52. package/package.json +29 -0
  53. package/src/composites/Accordion.vue +60 -0
  54. package/src/composites/AccordionItem.vue +66 -0
  55. package/src/composites/ButtonGroup.vue +27 -0
  56. package/src/composites/SectionHeader.vue +23 -0
  57. package/src/data/EmptyState.vue +40 -0
  58. package/src/data/List.vue +125 -0
  59. package/src/data/ListItem.vue +97 -0
  60. package/src/data/Pagination.vue +254 -0
  61. package/src/data/Table.vue +382 -0
  62. package/src/elements/Avatar.vue +0 -0
  63. package/src/elements/Badge.vue +30 -0
  64. package/src/elements/Button.vue +56 -0
  65. package/src/elements/Card.vue +34 -0
  66. package/src/elements/Icon.vue +0 -0
  67. package/src/elements/Image.vue +36 -0
  68. package/src/elements/Tag.vue +10 -0
  69. package/src/env.d.ts +8 -0
  70. package/src/feedback/Alert.vue +63 -0
  71. package/src/feedback/Progress.vue +95 -0
  72. package/src/feedback/Skeleton.vue +43 -0
  73. package/src/feedback/Toast.vue +141 -0
  74. package/src/forms/Checkbox.vue +54 -0
  75. package/src/forms/Choice.vue +82 -0
  76. package/src/forms/ChoiceGroup.vue +130 -0
  77. package/src/forms/FormField.vue +55 -0
  78. package/src/forms/Input.vue +54 -0
  79. package/src/forms/Radio.vue +64 -0
  80. package/src/forms/Select.vue +43 -0
  81. package/src/forms/Switch.vue +57 -0
  82. package/src/forms/Textarea.vue +54 -0
  83. package/src/index.ts +47 -0
  84. package/src/navigation/Breadcrumb.vue +59 -0
  85. package/src/navigation/Breadcrumbs.vue +30 -0
  86. package/src/navigation/Menu.vue +0 -0
  87. package/src/navigation/Sidebar.vue +35 -0
  88. package/src/navigation/SidebarGroup.vue +34 -0
  89. package/src/navigation/SidebarItem.vue +137 -0
  90. package/src/navigation/Tab.vue +78 -0
  91. package/src/navigation/Tabs.vue +68 -0
  92. package/src/overlays/Dialog.vue +193 -0
  93. package/src/overlays/Drawer.vue +200 -0
  94. package/src/overlays/Popover.vue +106 -0
  95. package/src/overlays/Tooltip.vue +69 -0
  96. package/src/primitives/Container.vue +24 -0
  97. package/src/primitives/Divider.vue +6 -0
  98. package/src/primitives/Grid.vue +36 -0
  99. package/src/primitives/Section.vue +8 -0
  100. package/src/primitives/Stack.vue +28 -0
  101. package/src/typography/Eyebrow.vue +9 -0
  102. package/src/typography/Heading.vue +27 -0
  103. package/src/typography/Label.vue +34 -0
  104. package/src/typography/Text.vue +38 -0
  105. package/tsconfig.json +17 -0
  106. package/tsconfig.tsbuildinfo +1 -0
  107. package/vite.config.ts +30 -0
package/dist/index.js ADDED
@@ -0,0 +1,1888 @@
1
+ import { defineComponent as m, computed as b, openBlock as n, createElementBlock as d, normalizeClass as f, renderSlot as u, createBlock as T, resolveDynamicComponent as A, withCtx as I, createCommentVNode as $, createElementVNode as p, createTextVNode as R, toDisplayString as S, ref as V, provide as M, inject as z, withDirectives as te, vShow as ae, useModel as se, watch as K, mergeModels as Q, withKeys as j, withModifiers as Y, unref as N, Fragment as q, renderList as G, normalizeStyle as W, useSlots as le, onMounted as J, onBeforeUnmount as O, Teleport as U, nextTick as Z } from "vue";
2
+ const oe = ["disabled"], Lt = /* @__PURE__ */ m({
3
+ __name: "Button",
4
+ props: {
5
+ variant: { default: "primary" },
6
+ size: { default: "medium" },
7
+ width: { default: "auto" },
8
+ iconPosition: { default: "leading" },
9
+ disabled: { type: Boolean, default: !1 },
10
+ loading: { type: Boolean, default: !1 }
11
+ },
12
+ emits: ["activate"],
13
+ setup(a, { emit: e }) {
14
+ const t = a, s = e, l = {
15
+ small: "btn-sm",
16
+ medium: "btn-md",
17
+ large: "btn-lg"
18
+ }, o = b(() => [
19
+ `btn-${t.variant}`,
20
+ l[t.size],
21
+ t.width === "full" ? "btn-full" : ""
22
+ ]);
23
+ return (r, i) => (n(), d("button", {
24
+ class: f(["btn", o.value]),
25
+ disabled: t.disabled || t.loading,
26
+ onClick: i[0] || (i[0] = (c) => s("activate"))
27
+ }, [
28
+ u(r.$slots, "default")
29
+ ], 10, oe));
30
+ }
31
+ }), It = /* @__PURE__ */ m({
32
+ __name: "Card",
33
+ props: {
34
+ variant: { default: "default" },
35
+ as: { default: "div" }
36
+ },
37
+ setup(a) {
38
+ const e = a, t = b(() => [
39
+ "card",
40
+ `card-${e.variant}`
41
+ ]);
42
+ return (s, l) => (n(), T(A(e.as), {
43
+ class: f(t.value)
44
+ }, {
45
+ default: I(() => [
46
+ u(s.$slots, "default")
47
+ ]),
48
+ _: 3
49
+ }, 8, ["class"]));
50
+ }
51
+ }), ne = ["type", "placeholder", "value", "required", "disabled", "readonly"], qt = /* @__PURE__ */ m({
52
+ __name: "Input",
53
+ props: {
54
+ type: { default: "text" },
55
+ placeholder: { default: "" },
56
+ value: { default: "" },
57
+ required: { type: Boolean, default: !1 },
58
+ disabled: { type: Boolean, default: !1 },
59
+ readonly: { type: Boolean, default: !1 },
60
+ error: { type: Boolean, default: !1 },
61
+ success: { type: Boolean, default: !1 }
62
+ },
63
+ emits: ["input", "change"],
64
+ setup(a, { emit: e }) {
65
+ const t = a, s = e, l = b(() => ({
66
+ "input-error": t.error,
67
+ "input-success": t.success
68
+ }));
69
+ return (o, r) => (n(), d("input", {
70
+ class: f(["input", l.value]),
71
+ type: t.type,
72
+ placeholder: t.placeholder,
73
+ value: t.value,
74
+ required: t.required,
75
+ disabled: t.disabled,
76
+ readonly: t.readonly,
77
+ onInput: r[0] || (r[0] = (i) => s("input", i.target.value)),
78
+ onChange: r[1] || (r[1] = (i) => s("change", i.target.value))
79
+ }, null, 42, ne));
80
+ }
81
+ }), H = (a, e) => {
82
+ const t = a.__vccOpts || a;
83
+ for (const [s, l] of e)
84
+ t[s] = l;
85
+ return t;
86
+ }, ie = {}, re = { class: "section" };
87
+ function de(a, e) {
88
+ return n(), d("section", re, [
89
+ u(a.$slots, "default")
90
+ ]);
91
+ }
92
+ const At = /* @__PURE__ */ H(ie, [["render", de]]), Mt = /* @__PURE__ */ m({
93
+ __name: "Stack",
94
+ props: {
95
+ size: { default: "medium" },
96
+ fullWidth: { type: Boolean, default: !1 }
97
+ },
98
+ setup(a) {
99
+ const e = a, t = b(() => ({
100
+ stack: e.size === "medium",
101
+ "stack-sm": e.size === "small",
102
+ "stack-lg": e.size === "large",
103
+ "stack-full": e.fullWidth
104
+ }));
105
+ return (s, l) => (n(), d("div", {
106
+ class: f(t.value)
107
+ }, [
108
+ u(s.$slots, "default")
109
+ ], 2));
110
+ }
111
+ }), zt = /* @__PURE__ */ m({
112
+ __name: "Container",
113
+ props: {
114
+ size: { default: "default" }
115
+ },
116
+ setup(a) {
117
+ const e = a, t = b(() => ({
118
+ container: e.size === "default",
119
+ "container-narrow": e.size === "narrow"
120
+ }));
121
+ return (s, l) => (n(), d("div", {
122
+ class: f(t.value)
123
+ }, [
124
+ u(s.$slots, "default")
125
+ ], 2));
126
+ }
127
+ }), Kt = /* @__PURE__ */ m({
128
+ __name: "Grid",
129
+ props: {
130
+ columns: { default: 1 },
131
+ rows: { default: 1 },
132
+ size: { default: "medium" }
133
+ },
134
+ setup(a) {
135
+ const e = a, t = b(() => [
136
+ e.size === "small" ? "grid-sm" : e.size === "large" ? "grid-lg" : "grid",
137
+ `grid-cols-${e.columns}`,
138
+ `grid-rows-${e.rows}`
139
+ ]);
140
+ return (s, l) => (n(), d("div", {
141
+ class: f(t.value)
142
+ }, [
143
+ u(s.$slots, "default")
144
+ ], 2));
145
+ }
146
+ }), Ot = /* @__PURE__ */ m({
147
+ __name: "Heading",
148
+ props: {
149
+ level: { default: "h2" }
150
+ },
151
+ setup(a) {
152
+ const e = a, t = b(() => ({
153
+ "heading-xl": e.level === "h1",
154
+ "heading-lg": e.level === "h2",
155
+ "heading-md": e.level === "h3",
156
+ "heading-sm": e.level === "h4",
157
+ "heading-xs": e.level === "h5" || e.level === "h6"
158
+ }));
159
+ return (s, l) => (n(), T(A(a.level), {
160
+ class: f(t.value)
161
+ }, {
162
+ default: I(() => [
163
+ u(s.$slots, "default")
164
+ ]),
165
+ _: 3
166
+ }, 8, ["class"]));
167
+ }
168
+ }), X = /* @__PURE__ */ m({
169
+ __name: "Text",
170
+ props: {
171
+ as: { default: "p" },
172
+ tone: { default: "primary" }
173
+ },
174
+ setup(a) {
175
+ const e = a, t = b(() => ({
176
+ "text-primary": e.tone === "primary",
177
+ "text-secondary": e.tone === "secondary",
178
+ "text-muted": e.tone === "muted",
179
+ "text-accent": e.tone === "accent",
180
+ "text-inverse": e.tone === "inverse",
181
+ "text-brand": e.tone === "brand"
182
+ }));
183
+ return (s, l) => (n(), T(A(e.as), {
184
+ class: f(t.value)
185
+ }, {
186
+ default: I(() => [
187
+ u(s.$slots, "default")
188
+ ]),
189
+ _: 3
190
+ }, 8, ["class"]));
191
+ }
192
+ }), ce = {}, ue = { class: "eyebrow" };
193
+ function pe(a, e) {
194
+ return n(), d("span", ue, [
195
+ u(a.$slots, "default")
196
+ ]);
197
+ }
198
+ const Pt = /* @__PURE__ */ H(ce, [["render", pe]]), Ft = /* @__PURE__ */ m({
199
+ __name: "SectionHeader",
200
+ props: {
201
+ width: { default: "default" },
202
+ align: { default: "left" }
203
+ },
204
+ setup(a) {
205
+ const e = a;
206
+ return (t, s) => (n(), d("header", {
207
+ class: f(["section-header", {
208
+ "section-header--wide": e.width === "wide",
209
+ "section-header--center": e.align === "center"
210
+ }])
211
+ }, [
212
+ u(t.$slots, "default")
213
+ ], 2));
214
+ }
215
+ }), Rt = /* @__PURE__ */ m({
216
+ __name: "ButtonGroup",
217
+ props: {
218
+ align: { default: "start" },
219
+ stack: { type: Boolean, default: !1 }
220
+ },
221
+ setup(a) {
222
+ const e = a, t = b(() => ({
223
+ "button-group--center": e.align === "center",
224
+ "button-group--end": e.align === "end",
225
+ "button-group--stack": e.stack
226
+ }));
227
+ return (s, l) => (n(), d("div", {
228
+ class: f(["button-group", t.value])
229
+ }, [
230
+ u(s.$slots, "default")
231
+ ], 2));
232
+ }
233
+ }), fe = {}, me = {
234
+ class: "divider",
235
+ "aria-hidden": "true"
236
+ };
237
+ function be(a, e) {
238
+ return n(), d("div", me);
239
+ }
240
+ const Gt = /* @__PURE__ */ H(fe, [["render", be]]), ve = ["for"], he = {
241
+ key: 0,
242
+ "aria-hidden": "true"
243
+ }, _e = { key: 1 }, ge = /* @__PURE__ */ m({
244
+ __name: "Label",
245
+ props: {
246
+ for: { default: void 0 },
247
+ required: { type: Boolean, default: !1 },
248
+ optional: { type: Boolean, default: !1 },
249
+ disabled: { type: Boolean, default: !1 }
250
+ },
251
+ setup(a) {
252
+ const e = a, t = b(() => ({
253
+ "label-disabled": e.disabled
254
+ }));
255
+ return (s, l) => (n(), d("label", {
256
+ for: e.for,
257
+ class: f(["label", t.value])
258
+ }, [
259
+ u(s.$slots, "default"),
260
+ e.required ? (n(), d("span", he, "*")) : e.optional ? (n(), d("span", _e, "(optional)")) : $("", !0)
261
+ ], 10, ve));
262
+ }
263
+ }), ye = ["src", "alt"], jt = /* @__PURE__ */ m({
264
+ __name: "Image",
265
+ props: {
266
+ src: {},
267
+ alt: {},
268
+ fit: { default: "cover" },
269
+ aspectRatio: { default: "auto" }
270
+ },
271
+ setup(a) {
272
+ const e = a;
273
+ return (t, s) => (n(), d("div", {
274
+ class: f(["media", {
275
+ "media-square": e.aspectRatio === "square",
276
+ "media-video": e.aspectRatio === "video",
277
+ "media-portrait": e.aspectRatio === "portrait",
278
+ "media-wide": e.aspectRatio === "wide",
279
+ "media-contain": e.fit === "contain"
280
+ }])
281
+ }, [
282
+ p("img", {
283
+ src: e.src,
284
+ alt: e.alt
285
+ }, null, 8, ye)
286
+ ], 2));
287
+ }
288
+ }), $e = { class: "form-field" }, Ht = /* @__PURE__ */ m({
289
+ __name: "FormField",
290
+ props: {
291
+ id: {},
292
+ label: { default: void 0 },
293
+ description: { default: void 0 },
294
+ error: { default: void 0 },
295
+ required: { type: Boolean, default: !1 },
296
+ optional: { type: Boolean, default: !1 },
297
+ disabled: { type: Boolean, default: !1 }
298
+ },
299
+ setup(a) {
300
+ const e = a;
301
+ return (t, s) => (n(), d("div", $e, [
302
+ e.label ? (n(), T(ge, {
303
+ key: 0,
304
+ for: e.id,
305
+ required: e.required,
306
+ optional: e.optional,
307
+ disabled: e.disabled
308
+ }, {
309
+ default: I(() => [
310
+ R(S(e.label), 1)
311
+ ]),
312
+ _: 1
313
+ }, 8, ["for", "required", "optional", "disabled"])) : $("", !0),
314
+ u(t.$slots, "default"),
315
+ e.description && !e.error ? (n(), T(X, {
316
+ key: 1,
317
+ tone: "muted"
318
+ }, {
319
+ default: I(() => [
320
+ R(S(e.description), 1)
321
+ ]),
322
+ _: 1
323
+ })) : $("", !0),
324
+ e.error ? (n(), T(X, {
325
+ key: 2,
326
+ tone: "accent"
327
+ }, {
328
+ default: I(() => [
329
+ R(S(e.error), 1)
330
+ ]),
331
+ _: 1
332
+ })) : $("", !0)
333
+ ]));
334
+ }
335
+ }), ke = ["value", "disabled", "readonly", "maxlength"], Nt = /* @__PURE__ */ m({
336
+ __name: "Textarea",
337
+ props: {
338
+ value: { default: "" },
339
+ disabled: { type: Boolean, default: !1 },
340
+ readonly: { type: Boolean, default: !1 },
341
+ error: { type: Boolean, default: !1 },
342
+ success: { type: Boolean, default: !1 },
343
+ maxlength: { default: void 0 }
344
+ },
345
+ emits: ["input", "change"],
346
+ setup(a, { emit: e }) {
347
+ const t = a, s = e, l = b(() => ({
348
+ "input-error": t.error,
349
+ "input-success": t.success
350
+ }));
351
+ function o(i) {
352
+ const c = i.target;
353
+ s("input", c.value);
354
+ }
355
+ function r(i) {
356
+ const c = i.target;
357
+ s("change", c.value);
358
+ }
359
+ return (i, c) => (n(), d("textarea", {
360
+ class: f(["textarea", l.value]),
361
+ value: t.value,
362
+ disabled: t.disabled,
363
+ readonly: t.readonly,
364
+ maxlength: t.maxlength,
365
+ onInput: o,
366
+ onChange: r
367
+ }, null, 42, ke));
368
+ }
369
+ }), we = ["value", "disabled"], Wt = /* @__PURE__ */ m({
370
+ __name: "Select",
371
+ props: {
372
+ value: { default: "" },
373
+ disabled: { type: Boolean, default: !1 },
374
+ error: { type: Boolean, default: !1 },
375
+ success: { type: Boolean, default: !1 }
376
+ },
377
+ emits: ["change"],
378
+ setup(a, { emit: e }) {
379
+ const t = a, s = e, l = b(() => ({
380
+ "input-error": t.error,
381
+ "input-success": t.success
382
+ }));
383
+ function o(r) {
384
+ const i = r.target;
385
+ s("change", i.value);
386
+ }
387
+ return (r, i) => (n(), d("select", {
388
+ class: f(["select", l.value]),
389
+ value: t.value,
390
+ disabled: t.disabled,
391
+ onChange: o
392
+ }, [
393
+ u(r.$slots, "default")
394
+ ], 42, we));
395
+ }
396
+ }), Ce = { class: "accordion" }, Jt = /* @__PURE__ */ m({
397
+ __name: "Accordion",
398
+ props: {
399
+ multiple: { type: Boolean, default: !1 },
400
+ collapsible: { type: Boolean, default: !0 },
401
+ defaultOpen: { default: () => [] }
402
+ },
403
+ setup(a) {
404
+ const e = a, t = V([...e.defaultOpen]);
405
+ function s(o) {
406
+ return t.value.includes(o);
407
+ }
408
+ function l(o) {
409
+ if (s(o)) {
410
+ if (!e.collapsible)
411
+ return;
412
+ t.value = t.value.filter((i) => i !== o);
413
+ return;
414
+ }
415
+ if (e.multiple) {
416
+ t.value = [...t.value, o];
417
+ return;
418
+ }
419
+ t.value = [o];
420
+ }
421
+ return M("loba-accordion", {
422
+ openItems: t,
423
+ isOpen: s,
424
+ toggleItem: l
425
+ }), (o, r) => (n(), d("div", Ce, [
426
+ u(o.$slots, "default")
427
+ ]));
428
+ }
429
+ }), Be = ["disabled", "aria-expanded", "aria-controls"], xe = ["id"], Ut = /* @__PURE__ */ m({
430
+ __name: "AccordionItem",
431
+ props: {
432
+ id: {},
433
+ disabled: { type: Boolean, default: !1 }
434
+ },
435
+ setup(a) {
436
+ const e = a, t = z("loba-accordion");
437
+ if (!t)
438
+ throw new Error(
439
+ "AccordionItem must be used inside an Accordion."
440
+ );
441
+ const s = t;
442
+ if (!s)
443
+ throw new Error(
444
+ "AccordionItem must be used inside an Accordion."
445
+ );
446
+ const l = b(() => s.isOpen(e.id));
447
+ function o() {
448
+ e.disabled || s.toggleItem(e.id);
449
+ }
450
+ return (r, i) => (n(), d("div", {
451
+ class: f(["accordion-item", { "accordion-item--open": l.value }])
452
+ }, [
453
+ p("button", {
454
+ type: "button",
455
+ class: "accordion-trigger",
456
+ disabled: e.disabled,
457
+ "aria-expanded": l.value,
458
+ "aria-controls": `accordion-${e.id}`,
459
+ onClick: o
460
+ }, [
461
+ u(r.$slots, "trigger")
462
+ ], 8, Be),
463
+ te(p("div", {
464
+ id: `accordion-${e.id}`,
465
+ class: "accordion-content"
466
+ }, [
467
+ u(r.$slots, "default")
468
+ ], 8, xe), [
469
+ [ae, l.value]
470
+ ])
471
+ ], 2));
472
+ }
473
+ }), Ve = {}, Se = { class: "tag" };
474
+ function Ee(a, e) {
475
+ return n(), d("span", Se, [
476
+ u(a.$slots, "default")
477
+ ]);
478
+ }
479
+ const Qt = /* @__PURE__ */ H(Ve, [["render", Ee]]), Xt = /* @__PURE__ */ m({
480
+ __name: "Badge",
481
+ props: {
482
+ variant: { default: "default" }
483
+ },
484
+ setup(a) {
485
+ const e = a, t = b(() => ({
486
+ badge: !0,
487
+ [`badge-${e.variant}`]: !0
488
+ }));
489
+ return (s, l) => (n(), d("span", {
490
+ class: f(t.value)
491
+ }, [
492
+ u(s.$slots, "default")
493
+ ], 2));
494
+ }
495
+ }), Te = {
496
+ key: 0,
497
+ class: "empty-state-icon"
498
+ }, De = { class: "empty-state-content" }, Le = {
499
+ key: 1,
500
+ class: "empty-state-actions"
501
+ }, Yt = /* @__PURE__ */ m({
502
+ __name: "EmptyState",
503
+ props: {
504
+ as: { default: "div" }
505
+ },
506
+ setup(a) {
507
+ const e = a, t = b(() => [
508
+ "empty-state"
509
+ ]);
510
+ return (s, l) => (n(), T(A(e.as), {
511
+ class: f(t.value)
512
+ }, {
513
+ default: I(() => [
514
+ s.$slots.icon ? (n(), d("div", Te, [
515
+ u(s.$slots, "icon")
516
+ ])) : $("", !0),
517
+ p("div", De, [
518
+ u(s.$slots, "default")
519
+ ]),
520
+ s.$slots.actions ? (n(), d("div", Le, [
521
+ u(s.$slots, "actions")
522
+ ])) : $("", !0)
523
+ ]),
524
+ _: 3
525
+ }, 8, ["class"]));
526
+ }
527
+ }), Ie = { class: "list" }, Zt = /* @__PURE__ */ m({
528
+ __name: "List",
529
+ props: /* @__PURE__ */ Q({
530
+ selectable: { type: Boolean, default: !1 },
531
+ multiple: { type: Boolean, default: !1 }
532
+ }, {
533
+ modelValue: {
534
+ default: null
535
+ },
536
+ modelModifiers: {}
537
+ }),
538
+ emits: /* @__PURE__ */ Q(["update:modelValue"], ["update:modelValue"]),
539
+ setup(a, { emit: e }) {
540
+ const t = a, s = V(/* @__PURE__ */ new Set()), l = se(a, "modelValue");
541
+ K(
542
+ l,
543
+ (i) => {
544
+ if (i == null) {
545
+ s.value = /* @__PURE__ */ new Set();
546
+ return;
547
+ }
548
+ s.value = new Set(
549
+ Array.isArray(i) ? i : [i]
550
+ );
551
+ },
552
+ { immediate: !0 }
553
+ );
554
+ function o(i) {
555
+ return s.value.has(i);
556
+ }
557
+ function r(i) {
558
+ if (!t.selectable)
559
+ return;
560
+ const c = new Set(
561
+ s.value
562
+ );
563
+ t.multiple ? c.has(i) ? c.delete(i) : c.add(i) : c.has(i) ? c.clear() : (c.clear(), c.add(i)), s.value = c;
564
+ const g = [...c];
565
+ l.value = t.multiple ? g : g[0] ?? null;
566
+ }
567
+ return M("loba-list", {
568
+ selectable: t.selectable,
569
+ multiple: t.multiple,
570
+ isSelected: o,
571
+ toggleSelection: r
572
+ }), (i, c) => (n(), d("div", Ie, [
573
+ u(i.$slots, "default")
574
+ ]));
575
+ }
576
+ }), qe = ["tabindex", "aria-selected", "aria-disabled", "onKeydown"], ea = /* @__PURE__ */ m({
577
+ __name: "ListItem",
578
+ props: {
579
+ value: {},
580
+ disabled: { type: Boolean, default: !1 }
581
+ },
582
+ setup(a) {
583
+ const e = a, t = z("loba-list");
584
+ if (!t)
585
+ throw new Error(
586
+ "ListItem must be used inside a List."
587
+ );
588
+ const s = t;
589
+ if (!s)
590
+ throw new Error(
591
+ "ListItem must be used inside a List."
592
+ );
593
+ const l = b(
594
+ () => s.isSelected(e.value)
595
+ ), o = b(() => ({
596
+ "list-item": !0,
597
+ "list-item--selectable": s.selectable && !e.disabled,
598
+ "list-item--selected": l.value,
599
+ "list-item--disabled": e.disabled
600
+ }));
601
+ function r() {
602
+ e.disabled || !s.selectable || s.toggleSelection(e.value);
603
+ }
604
+ return (i, c) => (n(), d("div", {
605
+ class: f(o.value),
606
+ tabindex: N(s).selectable && !e.disabled ? 0 : void 0,
607
+ "aria-selected": N(s).selectable ? l.value : void 0,
608
+ "aria-disabled": e.disabled || void 0,
609
+ role: "listitem",
610
+ onClick: r,
611
+ onKeydown: [
612
+ j(r, ["enter"]),
613
+ j(Y(r, ["prevent"]), ["space"])
614
+ ]
615
+ }, [
616
+ u(i.$slots, "default")
617
+ ], 42, qe));
618
+ }
619
+ }), Ae = { class: "pagination-controls" }, Me = ["disabled"], ze = ["disabled"], Ke = { class: "pagination-pages" }, Oe = {
620
+ key: 0,
621
+ class: "pagination-ellipsis"
622
+ }, Pe = ["aria-current", "onClick"], Fe = { class: "pagination-controls" }, Re = ["disabled"], Ge = ["disabled"], ta = /* @__PURE__ */ m({
623
+ __name: "Pagination",
624
+ props: {
625
+ currentPage: {},
626
+ totalItems: {},
627
+ pageSize: {},
628
+ siblingCount: { default: 1 },
629
+ compact: { type: Boolean, default: !1 }
630
+ },
631
+ emits: ["update:currentPage"],
632
+ setup(a, { emit: e }) {
633
+ const t = a, s = e, l = b(
634
+ () => Math.max(
635
+ 1,
636
+ Math.ceil(
637
+ t.totalItems / t.pageSize
638
+ )
639
+ )
640
+ ), o = b(
641
+ () => Math.min(
642
+ Math.max(t.currentPage, 1),
643
+ l.value
644
+ )
645
+ ), r = b(() => {
646
+ const y = l.value, B = o.value, k = Math.max(
647
+ 0,
648
+ t.siblingCount
649
+ );
650
+ if (y <= 7)
651
+ return Array.from(
652
+ { length: y },
653
+ (F, ee) => ee + 1
654
+ );
655
+ const _ = Math.max(
656
+ B - k,
657
+ 1
658
+ ), w = Math.min(
659
+ B + k,
660
+ y
661
+ ), v = _ > 2, C = w < y - 1, x = [1];
662
+ v && x.push("...");
663
+ const L = v ? _ : 2, P = C ? w : y - 1;
664
+ for (let F = L; F <= P; F++)
665
+ x.push(F);
666
+ return C && x.push("..."), x.push(y), x;
667
+ }), i = b(() => ({
668
+ pagination: !0,
669
+ "pagination-compact": t.compact
670
+ }));
671
+ function c(y) {
672
+ const B = Math.min(
673
+ Math.max(y, 1),
674
+ l.value
675
+ );
676
+ B !== o.value && s(
677
+ "update:currentPage",
678
+ B
679
+ );
680
+ }
681
+ function g() {
682
+ c(o.value - 1);
683
+ }
684
+ function D() {
685
+ c(o.value + 1);
686
+ }
687
+ function E() {
688
+ c(1);
689
+ }
690
+ function h() {
691
+ c(l.value);
692
+ }
693
+ return (y, B) => (n(), d("nav", {
694
+ class: f(i.value),
695
+ "aria-label": "Pagination"
696
+ }, [
697
+ p("div", Ae, [
698
+ p("button", {
699
+ class: f(["pagination-item", {
700
+ "pagination-item--disabled": o.value === 1
701
+ }]),
702
+ type: "button",
703
+ disabled: o.value === 1,
704
+ "aria-label": "First page",
705
+ onClick: E
706
+ }, " « ", 10, Me),
707
+ p("button", {
708
+ class: f(["pagination-item", {
709
+ "pagination-item--disabled": o.value === 1
710
+ }]),
711
+ type: "button",
712
+ disabled: o.value === 1,
713
+ "aria-label": "Previous page",
714
+ onClick: g
715
+ }, " ‹ ", 10, ze)
716
+ ]),
717
+ p("div", Ke, [
718
+ (n(!0), d(q, null, G(r.value, (k, _) => (n(), d(q, {
719
+ key: `${k}-${_}`
720
+ }, [
721
+ k === "..." ? (n(), d("span", Oe, " … ")) : (n(), d("button", {
722
+ key: 1,
723
+ class: f(["pagination-item", {
724
+ "pagination-item--current": k === o.value
725
+ }]),
726
+ type: "button",
727
+ "aria-current": k === o.value ? "page" : void 0,
728
+ onClick: (w) => c(k)
729
+ }, S(k), 11, Pe))
730
+ ], 64))), 128))
731
+ ]),
732
+ p("div", Fe, [
733
+ p("button", {
734
+ class: f(["pagination-item", {
735
+ "pagination-item--disabled": o.value === l.value
736
+ }]),
737
+ type: "button",
738
+ disabled: o.value === l.value,
739
+ "aria-label": "Next page",
740
+ onClick: D
741
+ }, " › ", 10, Re),
742
+ p("button", {
743
+ class: f(["pagination-item", {
744
+ "pagination-item--disabled": o.value === l.value
745
+ }]),
746
+ type: "button",
747
+ disabled: o.value === l.value,
748
+ "aria-label": "Last page",
749
+ onClick: h
750
+ }, " » ", 10, Ge)
751
+ ])
752
+ ], 2));
753
+ }
754
+ }), je = { class: "table" }, He = ["tabindex", "aria-sort", "onClick", "onKeydown"], Ne = {
755
+ key: 0,
756
+ "aria-hidden": "true"
757
+ }, We = ["onClick"], Je = {
758
+ key: 0,
759
+ class: "table-loading",
760
+ "aria-hidden": "true"
761
+ }, aa = /* @__PURE__ */ m({
762
+ __name: "Table",
763
+ props: {
764
+ columns: {},
765
+ rows: {},
766
+ rowKey: { default: "id" },
767
+ sortable: { type: Boolean, default: !1 },
768
+ selectable: { type: Boolean, default: !1 },
769
+ multiple: { type: Boolean, default: !1 },
770
+ loading: { type: Boolean, default: !1 }
771
+ },
772
+ emits: ["update:selectedRows", "sort"],
773
+ setup(a, { emit: e }) {
774
+ const t = a, s = e, l = V(
775
+ null
776
+ ), o = V("asc"), r = V(/* @__PURE__ */ new Set());
777
+ function i(_, w) {
778
+ if (!(typeof _ != "object" || _ === null))
779
+ return _[w];
780
+ }
781
+ function c(_) {
782
+ const w = i(
783
+ _,
784
+ t.rowKey
785
+ );
786
+ return typeof w == "string" || typeof w == "number" ? w : t.rows.indexOf(_);
787
+ }
788
+ function g(_) {
789
+ return r.value.has(
790
+ c(_)
791
+ );
792
+ }
793
+ const D = b(() => {
794
+ if (!t.sortable || !l.value)
795
+ return t.rows;
796
+ const _ = l.value, w = o.value;
797
+ return [...t.rows].sort(
798
+ (v, C) => {
799
+ const x = i(v, _), L = i(C, _);
800
+ if (x === L)
801
+ return 0;
802
+ if (x == null)
803
+ return 1;
804
+ if (L == null)
805
+ return -1;
806
+ if (typeof x == "number" && typeof L == "number")
807
+ return w === "asc" ? x - L : L - x;
808
+ const P = String(x).localeCompare(
809
+ String(L),
810
+ void 0,
811
+ {
812
+ numeric: !0,
813
+ sensitivity: "base"
814
+ }
815
+ );
816
+ return w === "asc" ? P : -P;
817
+ }
818
+ );
819
+ });
820
+ function E(_) {
821
+ !t.sortable || !_.sortable || (l.value !== _.key ? (l.value = _.key, o.value = "asc") : o.value = o.value === "asc" ? "desc" : "asc", s("sort", {
822
+ key: _.key,
823
+ direction: o.value
824
+ }));
825
+ }
826
+ function h(_) {
827
+ if (!t.selectable)
828
+ return;
829
+ const w = c(_), v = new Set(
830
+ r.value
831
+ );
832
+ t.multiple ? v.has(w) ? v.delete(w) : v.add(w) : (v.clear(), v.add(w)), r.value = v, s(
833
+ "update:selectedRows",
834
+ t.rows.filter(
835
+ (C) => v.has(c(C))
836
+ )
837
+ );
838
+ }
839
+ function y(_) {
840
+ return l.value !== _.key ? "" : o.value === "asc" ? "↑" : "↓";
841
+ }
842
+ function B(_) {
843
+ return {
844
+ [`table-cell--${_.align ?? "start"}`]: !0
845
+ };
846
+ }
847
+ function k(_) {
848
+ return l.value === _.key;
849
+ }
850
+ return (_, w) => (n(), d("div", je, [
851
+ p("table", null, [
852
+ p("thead", null, [
853
+ p("tr", null, [
854
+ (n(!0), d(q, null, G(a.columns, (v) => (n(), d("th", {
855
+ key: v.key,
856
+ style: W({
857
+ width: v.width
858
+ }),
859
+ class: f([
860
+ B(v),
861
+ {
862
+ "table-header--sortable": a.sortable && v.sortable,
863
+ "table-header--sorted": k(v)
864
+ }
865
+ ]),
866
+ tabindex: a.sortable && v.sortable ? 0 : void 0,
867
+ "aria-sort": k(v) ? o.value === "asc" ? "ascending" : "descending" : void 0,
868
+ onClick: (C) => E(v),
869
+ onKeydown: [
870
+ j((C) => E(v), ["enter"]),
871
+ j(Y((C) => E(v), ["prevent"]), ["space"])
872
+ ]
873
+ }, [
874
+ p("span", null, S(v.label), 1),
875
+ a.sortable && v.sortable ? (n(), d("span", Ne, S(y(v)), 1)) : $("", !0)
876
+ ], 46, He))), 128))
877
+ ])
878
+ ]),
879
+ p("tbody", null, [
880
+ (n(!0), d(q, null, G(D.value, (v) => (n(), d("tr", {
881
+ key: c(v),
882
+ class: f({
883
+ "table-row--selected": g(v)
884
+ }),
885
+ onClick: (C) => a.selectable && h(v)
886
+ }, [
887
+ (n(!0), d(q, null, G(a.columns, (C) => (n(), d("td", {
888
+ key: C.key,
889
+ class: f(
890
+ B(C)
891
+ )
892
+ }, [
893
+ u(_.$slots, `cell-${C.key}`, {
894
+ row: v,
895
+ value: i(
896
+ v,
897
+ C.key
898
+ )
899
+ }, () => [
900
+ R(S(i(
901
+ v,
902
+ C.key
903
+ )), 1)
904
+ ])
905
+ ], 2))), 128))
906
+ ], 10, We))), 128))
907
+ ])
908
+ ]),
909
+ a.loading ? (n(), d("div", Je)) : $("", !0)
910
+ ]));
911
+ }
912
+ }), Ue = ["name", "checked", "disabled", "required"], Qe = { class: "checkbox-label" }, sa = /* @__PURE__ */ m({
913
+ __name: "Checkbox",
914
+ props: {
915
+ value: { type: Boolean, default: !1 },
916
+ disabled: { type: Boolean, default: !1 },
917
+ name: {},
918
+ required: { type: Boolean, default: !1 }
919
+ },
920
+ emits: ["change"],
921
+ setup(a, { emit: e }) {
922
+ const t = a, s = e, l = b(() => ({
923
+ checkbox: !0,
924
+ "checkbox--checked": t.value,
925
+ "checkbox--disabled": t.disabled
926
+ }));
927
+ return (o, r) => (n(), d("label", {
928
+ class: f(l.value)
929
+ }, [
930
+ p("input", {
931
+ class: "checkbox-input",
932
+ type: "checkbox",
933
+ name: t.name,
934
+ checked: t.value,
935
+ disabled: t.disabled,
936
+ required: t.required,
937
+ onChange: r[0] || (r[0] = (i) => s(
938
+ "change",
939
+ i.target.checked
940
+ ))
941
+ }, null, 40, Ue),
942
+ r[1] || (r[1] = p("span", {
943
+ class: "checkbox-control",
944
+ "aria-hidden": "true"
945
+ }, null, -1)),
946
+ p("span", Qe, [
947
+ u(o.$slots, "default")
948
+ ])
949
+ ], 2));
950
+ }
951
+ }), Xe = ["name", "value", "checked", "disabled"], la = /* @__PURE__ */ m({
952
+ __name: "Radio",
953
+ props: {
954
+ modelValue: { default: null },
955
+ value: {},
956
+ name: {},
957
+ disabled: { type: Boolean, default: !1 }
958
+ },
959
+ emits: ["update:modelValue"],
960
+ setup(a, { emit: e }) {
961
+ const t = a, s = e, l = b(
962
+ () => t.modelValue === t.value
963
+ ), o = b(() => ({
964
+ radio: !0,
965
+ "radio--checked": l.value,
966
+ "radio--disabled": t.disabled
967
+ }));
968
+ function r() {
969
+ s(
970
+ "update:modelValue",
971
+ t.value
972
+ );
973
+ }
974
+ return (i, c) => (n(), d("label", {
975
+ class: f(o.value)
976
+ }, [
977
+ p("input", {
978
+ type: "radio",
979
+ name: a.name,
980
+ value: a.value,
981
+ checked: l.value,
982
+ disabled: a.disabled,
983
+ class: "sr-only",
984
+ onChange: r
985
+ }, null, 40, Xe),
986
+ c[0] || (c[0] = p("span", {
987
+ class: "radio-control",
988
+ "aria-hidden": "true"
989
+ }, null, -1)),
990
+ p("span", null, [
991
+ u(i.$slots, "default")
992
+ ])
993
+ ], 2));
994
+ }
995
+ }), Ye = ["checked", "disabled"], oa = /* @__PURE__ */ m({
996
+ __name: "Switch",
997
+ props: {
998
+ modelValue: { type: Boolean, default: !1 },
999
+ disabled: { type: Boolean, default: !1 }
1000
+ },
1001
+ emits: ["update:modelValue"],
1002
+ setup(a, { emit: e }) {
1003
+ const t = a, s = e, l = b(() => ({
1004
+ switch: !0,
1005
+ "switch--checked": t.modelValue,
1006
+ "switch--disabled": t.disabled
1007
+ }));
1008
+ function o(r) {
1009
+ const i = r.target;
1010
+ s(
1011
+ "update:modelValue",
1012
+ i.checked
1013
+ );
1014
+ }
1015
+ return (r, i) => (n(), d("label", {
1016
+ class: f(l.value)
1017
+ }, [
1018
+ p("input", {
1019
+ type: "checkbox",
1020
+ role: "switch",
1021
+ checked: a.modelValue,
1022
+ disabled: a.disabled,
1023
+ class: "sr-only",
1024
+ onChange: o
1025
+ }, null, 40, Ye),
1026
+ i[0] || (i[0] = p("span", {
1027
+ class: "switch-control",
1028
+ "aria-hidden": "true"
1029
+ }, null, -1)),
1030
+ p("span", null, [
1031
+ u(r.$slots, "default")
1032
+ ])
1033
+ ], 2));
1034
+ }
1035
+ }), na = /* @__PURE__ */ m({
1036
+ __name: "ChoiceGroup",
1037
+ props: {
1038
+ modelValue: { default: null },
1039
+ multiple: { type: Boolean, default: !1 },
1040
+ disabled: { type: Boolean, default: !1 }
1041
+ },
1042
+ emits: ["update:modelValue"],
1043
+ setup(a, { emit: e }) {
1044
+ const t = a, s = e, l = b(() => ({
1045
+ "choice-group": !0,
1046
+ "choice-group--multiple": t.multiple
1047
+ })), o = b(() => Array.isArray(t.modelValue) ? t.modelValue : t.modelValue === null || t.modelValue === void 0 ? [] : [t.modelValue]);
1048
+ function r(c) {
1049
+ return o.value.includes(
1050
+ c
1051
+ );
1052
+ }
1053
+ function i(c) {
1054
+ if (!t.disabled) {
1055
+ if (t.multiple) {
1056
+ const g = new Set(
1057
+ o.value
1058
+ );
1059
+ g.has(c) ? g.delete(c) : g.add(c), s(
1060
+ "update:modelValue",
1061
+ [...g]
1062
+ );
1063
+ return;
1064
+ }
1065
+ s(
1066
+ "update:modelValue",
1067
+ c
1068
+ );
1069
+ }
1070
+ }
1071
+ return M(
1072
+ "loba-choice-group",
1073
+ {
1074
+ multiple: t.multiple,
1075
+ disabled: t.disabled,
1076
+ isSelected: r,
1077
+ toggleChoice: i
1078
+ }
1079
+ ), (c, g) => (n(), d("div", {
1080
+ class: f(l.value),
1081
+ role: "group"
1082
+ }, [
1083
+ u(c.$slots, "default")
1084
+ ], 2));
1085
+ }
1086
+ }), Ze = ["disabled", "aria-pressed"], ia = /* @__PURE__ */ m({
1087
+ __name: "Choice",
1088
+ props: {
1089
+ value: {},
1090
+ disabled: { type: Boolean, default: !1 }
1091
+ },
1092
+ setup(a) {
1093
+ const e = a, t = z(
1094
+ "loba-choice-group"
1095
+ );
1096
+ if (!t)
1097
+ throw new Error(
1098
+ "Choice must be used inside a ChoiceGroup."
1099
+ );
1100
+ const s = t, l = b(
1101
+ () => s.isSelected(e.value)
1102
+ ), o = b(
1103
+ () => e.disabled || s.disabled
1104
+ ), r = b(() => ({
1105
+ choice: !0,
1106
+ "choice--selected": l.value,
1107
+ "choice--disabled": o.value
1108
+ }));
1109
+ function i() {
1110
+ o.value || s.toggleChoice(e.value);
1111
+ }
1112
+ return (c, g) => (n(), d("button", {
1113
+ type: "button",
1114
+ class: f(r.value),
1115
+ disabled: o.value,
1116
+ "aria-pressed": l.value,
1117
+ onClick: i
1118
+ }, [
1119
+ u(c.$slots, "default")
1120
+ ], 10, Ze));
1121
+ }
1122
+ }), et = { class: "sidebar-header" }, tt = { class: "sidebar-navigation" }, at = { class: "sidebar-footer" }, ra = /* @__PURE__ */ m({
1123
+ __name: "Sidebar",
1124
+ props: {
1125
+ collapsed: { type: Boolean, default: !1 }
1126
+ },
1127
+ setup(a) {
1128
+ const e = a, t = b(() => ({
1129
+ sidebar: !0,
1130
+ "sidebar--collapsed": e.collapsed
1131
+ }));
1132
+ return (s, l) => (n(), d("aside", {
1133
+ class: f(t.value)
1134
+ }, [
1135
+ p("div", et, [
1136
+ u(s.$slots, "header")
1137
+ ]),
1138
+ p("nav", tt, [
1139
+ u(s.$slots, "default")
1140
+ ]),
1141
+ p("div", at, [
1142
+ u(s.$slots, "footer")
1143
+ ])
1144
+ ], 2));
1145
+ }
1146
+ }), st = {
1147
+ key: 0,
1148
+ class: "sidebar-group-label"
1149
+ }, lt = { class: "sidebar-group-items" }, da = /* @__PURE__ */ m({
1150
+ __name: "SidebarGroup",
1151
+ props: {
1152
+ label: { default: "" }
1153
+ },
1154
+ setup(a) {
1155
+ const e = a, t = b(() => ({
1156
+ "sidebar-group": !0,
1157
+ "sidebar-group--labeled": !!e.label
1158
+ }));
1159
+ return (s, l) => (n(), d("div", {
1160
+ class: f(t.value)
1161
+ }, [
1162
+ e.label ? (n(), d("div", st, S(e.label), 1)) : $("", !0),
1163
+ p("div", lt, [
1164
+ u(s.$slots, "default")
1165
+ ])
1166
+ ], 2));
1167
+ }
1168
+ }), ot = { class: "sidebar-item-wrapper" }, nt = {
1169
+ key: 0,
1170
+ class: "sidebar-item-icon",
1171
+ "aria-hidden": "true"
1172
+ }, it = { class: "sidebar-item-label" }, rt = {
1173
+ key: 1,
1174
+ class: "sidebar-item-chevron",
1175
+ "aria-hidden": "true"
1176
+ }, dt = {
1177
+ key: 0,
1178
+ class: "sidebar-item-children"
1179
+ }, ca = /* @__PURE__ */ m({
1180
+ __name: "SidebarItem",
1181
+ props: {
1182
+ active: { type: Boolean, default: !1 },
1183
+ disabled: { type: Boolean, default: !1 },
1184
+ href: { default: void 0 },
1185
+ expanded: { type: Boolean, default: !1 }
1186
+ },
1187
+ setup(a) {
1188
+ const e = a, t = le(), s = V(
1189
+ e.expanded
1190
+ ), l = b(
1191
+ () => !!t.children
1192
+ ), o = b(() => ({
1193
+ "sidebar-item": !0,
1194
+ "sidebar-item--active": e.active,
1195
+ "sidebar-item--disabled": e.disabled,
1196
+ "sidebar-item--expandable": l.value,
1197
+ "sidebar-item--expanded": l.value && s.value
1198
+ }));
1199
+ function r(i) {
1200
+ if (e.disabled) {
1201
+ i.preventDefault();
1202
+ return;
1203
+ }
1204
+ l.value && (i.preventDefault(), s.value = !s.value);
1205
+ }
1206
+ return (i, c) => (n(), d("div", ot, [
1207
+ (n(), T(A(l.value ? "button" : "a"), {
1208
+ href: l.value || !e.href ? void 0 : e.href,
1209
+ type: l.value ? "button" : void 0,
1210
+ class: f(o.value),
1211
+ disabled: l.value ? e.disabled : void 0,
1212
+ "aria-current": e.active ? "page" : void 0,
1213
+ "aria-expanded": l.value ? s.value : void 0,
1214
+ "aria-disabled": e.disabled ? "true" : void 0,
1215
+ onClick: r
1216
+ }, {
1217
+ default: I(() => [
1218
+ i.$slots.icon ? (n(), d("span", nt, [
1219
+ u(i.$slots, "icon")
1220
+ ])) : $("", !0),
1221
+ p("span", it, [
1222
+ u(i.$slots, "default")
1223
+ ]),
1224
+ l.value ? (n(), d("span", rt, [
1225
+ p("span", {
1226
+ class: f({
1227
+ "sidebar-item-chevron--expanded": s.value
1228
+ })
1229
+ }, " › ", 2)
1230
+ ])) : $("", !0)
1231
+ ]),
1232
+ _: 3
1233
+ }, 8, ["href", "type", "class", "disabled", "aria-current", "aria-expanded", "aria-disabled"])),
1234
+ l.value && s.value ? (n(), d("div", dt, [
1235
+ u(i.$slots, "children")
1236
+ ])) : $("", !0)
1237
+ ]));
1238
+ }
1239
+ }), ct = { class: "tabs" }, ut = {
1240
+ class: "tabs-list",
1241
+ role: "tablist"
1242
+ }, ua = /* @__PURE__ */ m({
1243
+ __name: "Tabs",
1244
+ props: {
1245
+ modelValue: { default: null }
1246
+ },
1247
+ emits: ["update:modelValue"],
1248
+ setup(a, { emit: e }) {
1249
+ const t = a, s = e, l = V(t.modelValue);
1250
+ K(
1251
+ () => t.modelValue,
1252
+ (r) => {
1253
+ l.value = r;
1254
+ }
1255
+ );
1256
+ function o(r) {
1257
+ l.value = r, s(
1258
+ "update:modelValue",
1259
+ r
1260
+ );
1261
+ }
1262
+ return M(
1263
+ "loba-tabs",
1264
+ {
1265
+ activeValue: () => l.value,
1266
+ selectTab: o
1267
+ }
1268
+ ), (r, i) => (n(), d("div", ct, [
1269
+ p("div", ut, [
1270
+ u(r.$slots, "default")
1271
+ ])
1272
+ ]));
1273
+ }
1274
+ }), pt = ["aria-selected", "aria-disabled", "tabindex"], pa = /* @__PURE__ */ m({
1275
+ __name: "Tab",
1276
+ props: {
1277
+ value: {},
1278
+ disabled: { type: Boolean, default: !1 }
1279
+ },
1280
+ setup(a) {
1281
+ const e = a, t = z("loba-tabs");
1282
+ if (!t)
1283
+ throw new Error(
1284
+ "Tab must be used inside Tabs."
1285
+ );
1286
+ const s = t, l = b(
1287
+ () => s.activeValue() === e.value
1288
+ ), o = b(() => ({
1289
+ tab: !0,
1290
+ "tab--active": l.value,
1291
+ "tab--disabled": e.disabled
1292
+ }));
1293
+ function r() {
1294
+ e.disabled || s.selectTab(e.value);
1295
+ }
1296
+ return (i, c) => (n(), d("button", {
1297
+ type: "button",
1298
+ class: f(o.value),
1299
+ role: "tab",
1300
+ "aria-selected": l.value,
1301
+ "aria-disabled": e.disabled || void 0,
1302
+ tabindex: l.value ? 0 : -1,
1303
+ onClick: r
1304
+ }, [
1305
+ u(i.$slots, "default")
1306
+ ], 10, pt));
1307
+ }
1308
+ }), ft = ["href"], mt = ["aria-current"], bt = {
1309
+ class: "breadcrumbs-separator",
1310
+ "aria-hidden": "true"
1311
+ }, fa = /* @__PURE__ */ m({
1312
+ __name: "Breadcrumb",
1313
+ props: {
1314
+ href: { default: void 0 },
1315
+ current: { type: Boolean, default: !1 }
1316
+ },
1317
+ setup(a) {
1318
+ const e = a, t = z(
1319
+ "loba-breadcrumbs-separator",
1320
+ "/"
1321
+ ), s = b(() => ({
1322
+ "breadcrumbs-item": !0
1323
+ }));
1324
+ return (l, o) => (n(), d("li", {
1325
+ class: f(s.value)
1326
+ }, [
1327
+ e.href && !e.current ? (n(), d("a", {
1328
+ key: 0,
1329
+ class: "breadcrumbs-link",
1330
+ href: e.href
1331
+ }, [
1332
+ u(l.$slots, "default")
1333
+ ], 8, ft)) : (n(), d("span", {
1334
+ key: 1,
1335
+ class: "breadcrumbs-current",
1336
+ "aria-current": e.current ? "page" : void 0
1337
+ }, [
1338
+ u(l.$slots, "default")
1339
+ ], 8, mt)),
1340
+ p("span", bt, S(N(t)), 1)
1341
+ ], 2));
1342
+ }
1343
+ }), vt = {
1344
+ class: "breadcrumbs",
1345
+ "aria-label": "Breadcrumb"
1346
+ }, ht = { class: "breadcrumbs-list" }, ma = /* @__PURE__ */ m({
1347
+ __name: "Breadcrumbs",
1348
+ props: {
1349
+ separator: { default: "/" }
1350
+ },
1351
+ setup(a) {
1352
+ return M(
1353
+ "loba-breadcrumbs-separator",
1354
+ a.separator
1355
+ ), (t, s) => (n(), d("nav", vt, [
1356
+ p("ol", ht, [
1357
+ u(t.$slots, "default")
1358
+ ])
1359
+ ]));
1360
+ }
1361
+ }), _t = {
1362
+ key: 0,
1363
+ class: "dialog dialog--open",
1364
+ role: "presentation"
1365
+ }, ba = /* @__PURE__ */ m({
1366
+ __name: "Dialog",
1367
+ props: {
1368
+ modelValue: { type: Boolean, default: !1 },
1369
+ closeOnBackdrop: { type: Boolean, default: !0 },
1370
+ closeOnEscape: { type: Boolean, default: !0 }
1371
+ },
1372
+ emits: ["update:modelValue"],
1373
+ setup(a, { emit: e }) {
1374
+ const t = a, s = e, l = V(null);
1375
+ let o = null;
1376
+ const r = [
1377
+ "button:not([disabled])",
1378
+ "[href]",
1379
+ "input:not([disabled])",
1380
+ "select:not([disabled])",
1381
+ "textarea:not([disabled])",
1382
+ "[tabindex]:not([tabindex='-1'])"
1383
+ ].join(", ");
1384
+ function i() {
1385
+ s("update:modelValue", !1);
1386
+ }
1387
+ function c() {
1388
+ t.closeOnBackdrop && i();
1389
+ }
1390
+ function g(h) {
1391
+ if (!t.modelValue || !l.value)
1392
+ return;
1393
+ if (h.key === "Escape" && t.closeOnEscape) {
1394
+ h.preventDefault(), i();
1395
+ return;
1396
+ }
1397
+ if (h.key !== "Tab")
1398
+ return;
1399
+ const y = Array.from(
1400
+ l.value.querySelectorAll(
1401
+ r
1402
+ )
1403
+ );
1404
+ if (y.length === 0) {
1405
+ h.preventDefault();
1406
+ return;
1407
+ }
1408
+ const B = y[0], k = y[y.length - 1];
1409
+ if (h.shiftKey && document.activeElement === B) {
1410
+ h.preventDefault(), k.focus();
1411
+ return;
1412
+ }
1413
+ !h.shiftKey && document.activeElement === k && (h.preventDefault(), B.focus());
1414
+ }
1415
+ async function D() {
1416
+ o = document.activeElement instanceof HTMLElement ? document.activeElement : null, await Z(), l.value?.querySelector(
1417
+ r
1418
+ )?.focus();
1419
+ }
1420
+ function E() {
1421
+ o?.focus(), o = null;
1422
+ }
1423
+ return K(
1424
+ () => t.modelValue,
1425
+ async (h) => {
1426
+ h ? await D() : E();
1427
+ }
1428
+ ), J(() => {
1429
+ t.modelValue && D(), document.addEventListener(
1430
+ "keydown",
1431
+ g
1432
+ );
1433
+ }), O(() => {
1434
+ document.removeEventListener(
1435
+ "keydown",
1436
+ g
1437
+ ), E();
1438
+ }), (h, y) => (n(), T(U, { to: "body" }, [
1439
+ a.modelValue ? (n(), d("div", _t, [
1440
+ p("button", {
1441
+ class: "dialog-backdrop",
1442
+ type: "button",
1443
+ "aria-label": "Close dialog",
1444
+ tabindex: "-1",
1445
+ onClick: c
1446
+ }),
1447
+ p("div", {
1448
+ ref_key: "dialogElement",
1449
+ ref: l,
1450
+ class: "dialog-content",
1451
+ role: "dialog",
1452
+ "aria-modal": "true"
1453
+ }, [
1454
+ u(h.$slots, "default")
1455
+ ], 512)
1456
+ ])) : $("", !0)
1457
+ ]));
1458
+ }
1459
+ }), gt = { class: "drawer-content" }, va = /* @__PURE__ */ m({
1460
+ __name: "Drawer",
1461
+ props: {
1462
+ modelValue: { type: Boolean, default: !1 },
1463
+ side: { default: "right" },
1464
+ closeOnBackdrop: { type: Boolean, default: !0 },
1465
+ closeOnEscape: { type: Boolean, default: !0 }
1466
+ },
1467
+ emits: ["update:modelValue"],
1468
+ setup(a, { emit: e }) {
1469
+ const t = a, s = e, l = V(null);
1470
+ let o = null;
1471
+ const r = [
1472
+ "button:not([disabled])",
1473
+ "[href]",
1474
+ "input:not([disabled])",
1475
+ "select:not([disabled])",
1476
+ "textarea:not([disabled])",
1477
+ "[tabindex]:not([tabindex='-1'])"
1478
+ ].join(", ");
1479
+ function i() {
1480
+ s("update:modelValue", !1);
1481
+ }
1482
+ function c() {
1483
+ t.closeOnBackdrop && i();
1484
+ }
1485
+ function g(h) {
1486
+ if (!t.modelValue || !l.value)
1487
+ return;
1488
+ if (h.key === "Escape" && t.closeOnEscape) {
1489
+ h.preventDefault(), i();
1490
+ return;
1491
+ }
1492
+ if (h.key !== "Tab")
1493
+ return;
1494
+ const y = Array.from(
1495
+ l.value.querySelectorAll(
1496
+ r
1497
+ )
1498
+ );
1499
+ if (y.length === 0) {
1500
+ h.preventDefault();
1501
+ return;
1502
+ }
1503
+ const B = y[0], k = y[y.length - 1];
1504
+ if (h.shiftKey && document.activeElement === B) {
1505
+ h.preventDefault(), k.focus();
1506
+ return;
1507
+ }
1508
+ !h.shiftKey && document.activeElement === k && (h.preventDefault(), B.focus());
1509
+ }
1510
+ async function D() {
1511
+ o = document.activeElement instanceof HTMLElement ? document.activeElement : null, await Z(), l.value?.querySelector(
1512
+ r
1513
+ )?.focus();
1514
+ }
1515
+ function E() {
1516
+ o?.focus(), o = null;
1517
+ }
1518
+ return K(
1519
+ () => t.modelValue,
1520
+ async (h) => {
1521
+ h ? await D() : E();
1522
+ }
1523
+ ), J(() => {
1524
+ document.addEventListener(
1525
+ "keydown",
1526
+ g
1527
+ ), t.modelValue && D();
1528
+ }), O(() => {
1529
+ document.removeEventListener(
1530
+ "keydown",
1531
+ g
1532
+ ), E();
1533
+ }), (h, y) => (n(), T(U, { to: "body" }, [
1534
+ a.modelValue ? (n(), d("div", {
1535
+ key: 0,
1536
+ class: f(["drawer", {
1537
+ "drawer--open": a.modelValue,
1538
+ "drawer--left": a.side === "left",
1539
+ "drawer--right": a.side === "right"
1540
+ }]),
1541
+ role: "presentation"
1542
+ }, [
1543
+ p("button", {
1544
+ class: "drawer-backdrop",
1545
+ type: "button",
1546
+ "aria-label": "Close drawer",
1547
+ tabindex: "-1",
1548
+ onClick: c
1549
+ }),
1550
+ p("aside", {
1551
+ ref_key: "panel",
1552
+ ref: l,
1553
+ class: "drawer-panel",
1554
+ role: "dialog",
1555
+ "aria-modal": "true"
1556
+ }, [
1557
+ p("div", gt, [
1558
+ u(h.$slots, "default")
1559
+ ])
1560
+ ], 512)
1561
+ ], 2)) : $("", !0)
1562
+ ]));
1563
+ }
1564
+ }), yt = {
1565
+ key: 0,
1566
+ class: "popover-content",
1567
+ role: "dialog"
1568
+ }, ha = /* @__PURE__ */ m({
1569
+ __name: "Popover",
1570
+ props: {
1571
+ placement: { default: "bottom" }
1572
+ },
1573
+ setup(a) {
1574
+ const e = a, t = V(!1), s = V(null);
1575
+ function l() {
1576
+ t.value = !t.value;
1577
+ }
1578
+ function o() {
1579
+ t.value = !1;
1580
+ }
1581
+ function r(c) {
1582
+ if (!s.value)
1583
+ return;
1584
+ const g = c.target;
1585
+ g instanceof Node && !s.value.contains(g) && o();
1586
+ }
1587
+ function i(c) {
1588
+ c.key === "Escape" && o();
1589
+ }
1590
+ return J(() => {
1591
+ document.addEventListener(
1592
+ "click",
1593
+ r
1594
+ ), document.addEventListener(
1595
+ "keydown",
1596
+ i
1597
+ );
1598
+ }), O(() => {
1599
+ document.removeEventListener(
1600
+ "click",
1601
+ r
1602
+ ), document.removeEventListener(
1603
+ "keydown",
1604
+ i
1605
+ );
1606
+ }), (c, g) => (n(), d("div", {
1607
+ ref_key: "popover",
1608
+ ref: s,
1609
+ class: f(["popover", {
1610
+ "popover--open": t.value,
1611
+ [`popover--${e.placement}`]: !0
1612
+ }])
1613
+ }, [
1614
+ p("div", {
1615
+ class: "popover-trigger",
1616
+ onClick: l
1617
+ }, [
1618
+ u(c.$slots, "trigger")
1619
+ ]),
1620
+ t.value ? (n(), d("div", yt, [
1621
+ u(c.$slots, "default")
1622
+ ])) : $("", !0)
1623
+ ], 2));
1624
+ }
1625
+ }), $t = { class: "tooltip-trigger" }, kt = {
1626
+ class: "tooltip-content",
1627
+ role: "tooltip"
1628
+ }, _a = /* @__PURE__ */ m({
1629
+ __name: "Tooltip",
1630
+ props: {
1631
+ placement: { default: "top" },
1632
+ text: {},
1633
+ delay: { default: 300 }
1634
+ },
1635
+ setup(a) {
1636
+ const e = a, t = V(!1);
1637
+ let s;
1638
+ function l() {
1639
+ clearTimeout(s), s = setTimeout(() => {
1640
+ t.value = !0;
1641
+ }, e.delay);
1642
+ }
1643
+ function o() {
1644
+ clearTimeout(s), t.value = !1;
1645
+ }
1646
+ return O(() => {
1647
+ clearTimeout(s);
1648
+ }), (r, i) => (n(), d("span", {
1649
+ class: f(["tooltip", {
1650
+ "tooltip--visible": t.value,
1651
+ [`tooltip--${e.placement}`]: !0
1652
+ }]),
1653
+ onMouseenter: l,
1654
+ onMouseleave: o,
1655
+ onFocusin: l,
1656
+ onFocusout: o
1657
+ }, [
1658
+ p("span", $t, [
1659
+ u(r.$slots, "default")
1660
+ ]),
1661
+ p("span", kt, S(e.text), 1)
1662
+ ], 34));
1663
+ }
1664
+ }), wt = { class: "alert-content" }, Ct = {
1665
+ key: 0,
1666
+ class: "alert-actions"
1667
+ }, ga = /* @__PURE__ */ m({
1668
+ __name: "Alert",
1669
+ props: {
1670
+ variant: { default: "info" },
1671
+ dismissible: { type: Boolean, default: !1 }
1672
+ },
1673
+ emits: ["close"],
1674
+ setup(a, { emit: e }) {
1675
+ const t = a, s = e, l = b(() => ({
1676
+ alert: !0,
1677
+ [`alert-${t.variant}`]: !0
1678
+ }));
1679
+ function o() {
1680
+ s("close");
1681
+ }
1682
+ return (r, i) => (n(), d("div", {
1683
+ class: f(l.value),
1684
+ role: "alert"
1685
+ }, [
1686
+ p("div", wt, [
1687
+ u(r.$slots, "default"),
1688
+ r.$slots.actions ? (n(), d("div", Ct, [
1689
+ u(r.$slots, "actions")
1690
+ ])) : $("", !0)
1691
+ ]),
1692
+ a.dismissible ? (n(), d("button", {
1693
+ key: 0,
1694
+ class: "alert-close",
1695
+ type: "button",
1696
+ "aria-label": "Dismiss alert",
1697
+ onClick: o
1698
+ }, " × ")) : $("", !0)
1699
+ ], 2));
1700
+ }
1701
+ }), Bt = ["aria-valuemin", "aria-valuemax", "aria-valuenow"], xt = { class: "progress-track" }, Vt = {
1702
+ key: 0,
1703
+ class: "progress-label"
1704
+ }, ya = /* @__PURE__ */ m({
1705
+ __name: "Progress",
1706
+ props: {
1707
+ value: { default: 0 },
1708
+ max: { default: 100 },
1709
+ indeterminate: { type: Boolean, default: !1 },
1710
+ variant: { default: "default" },
1711
+ showValue: { type: Boolean, default: !1 }
1712
+ },
1713
+ setup(a) {
1714
+ const e = a, t = b(() => e.max <= 0 ? 0 : Math.min(
1715
+ 100,
1716
+ Math.max(
1717
+ 0,
1718
+ e.value / e.max * 100
1719
+ )
1720
+ )), s = b(() => ({
1721
+ progress: !0,
1722
+ [`progress--${e.variant}`]: !0,
1723
+ "progress--indeterminate": e.indeterminate
1724
+ }));
1725
+ return (l, o) => (n(), d("div", {
1726
+ class: f(s.value),
1727
+ role: "progressbar",
1728
+ "aria-valuemin": a.indeterminate ? void 0 : 0,
1729
+ "aria-valuemax": a.indeterminate ? void 0 : a.max,
1730
+ "aria-valuenow": a.indeterminate ? void 0 : a.value
1731
+ }, [
1732
+ p("div", xt, [
1733
+ p("div", {
1734
+ class: "progress-value",
1735
+ style: W(
1736
+ a.indeterminate ? void 0 : {
1737
+ width: `${t.value}%`
1738
+ }
1739
+ )
1740
+ }, null, 4)
1741
+ ]),
1742
+ a.showValue ? (n(), d("div", Vt, [
1743
+ p("span", null, [
1744
+ u(l.$slots, "default")
1745
+ ]),
1746
+ p("span", null, S(Math.round(t.value)) + "% ", 1)
1747
+ ])) : u(l.$slots, "label", {}, void 0, void 0, 1)
1748
+ ], 10, Bt));
1749
+ }
1750
+ }), $a = /* @__PURE__ */ m({
1751
+ __name: "Skeleton",
1752
+ props: {
1753
+ variant: { default: "default" },
1754
+ width: { default: void 0 },
1755
+ height: { default: void 0 }
1756
+ },
1757
+ setup(a) {
1758
+ const e = a, t = b(() => ({
1759
+ skeleton: !0,
1760
+ [`skeleton--${e.variant}`]: e.variant !== "default"
1761
+ }));
1762
+ return (s, l) => (n(), d("div", {
1763
+ class: f(t.value),
1764
+ style: W({
1765
+ width: e.width,
1766
+ height: e.height
1767
+ }),
1768
+ "aria-hidden": "true"
1769
+ }, null, 6));
1770
+ }
1771
+ }), St = { class: "toast-content" }, Et = {
1772
+ key: 0,
1773
+ class: "toast-title"
1774
+ }, Tt = { class: "toast-message" }, ka = /* @__PURE__ */ m({
1775
+ __name: "Toast",
1776
+ props: {
1777
+ modelValue: { type: Boolean, default: !1 },
1778
+ title: { default: void 0 },
1779
+ variant: { default: "info" },
1780
+ duration: { default: 4e3 },
1781
+ dismissible: { type: Boolean, default: !0 }
1782
+ },
1783
+ emits: ["update:modelValue", "close"],
1784
+ setup(a, { emit: e }) {
1785
+ const t = a, s = e, l = V(
1786
+ t.modelValue
1787
+ );
1788
+ let o;
1789
+ function r() {
1790
+ o && (clearTimeout(o), o = void 0);
1791
+ }
1792
+ function i() {
1793
+ r(), l.value = !1, s(
1794
+ "update:modelValue",
1795
+ !1
1796
+ ), s("close");
1797
+ }
1798
+ function c() {
1799
+ r(), !(t.duration <= 0 || !t.modelValue) && (o = setTimeout(() => {
1800
+ i();
1801
+ }, t.duration));
1802
+ }
1803
+ return K(
1804
+ () => t.modelValue,
1805
+ (g) => {
1806
+ l.value = g, g ? c() : r();
1807
+ },
1808
+ {
1809
+ immediate: !0
1810
+ }
1811
+ ), O(() => {
1812
+ r();
1813
+ }), (g, D) => (n(), T(U, { to: "body" }, [
1814
+ l.value ? (n(), d("div", {
1815
+ key: 0,
1816
+ class: f(["toast", {
1817
+ "toast--visible": l.value,
1818
+ [`toast-${a.variant}`]: !0
1819
+ }]),
1820
+ role: "status",
1821
+ "aria-live": "polite"
1822
+ }, [
1823
+ p("div", St, [
1824
+ a.title ? (n(), d("div", Et, S(a.title), 1)) : $("", !0),
1825
+ p("div", Tt, [
1826
+ u(g.$slots, "default")
1827
+ ])
1828
+ ]),
1829
+ a.dismissible ? (n(), d("button", {
1830
+ key: 0,
1831
+ class: "toast-close",
1832
+ type: "button",
1833
+ "aria-label": "Dismiss notification",
1834
+ onClick: i
1835
+ }, " × ")) : $("", !0)
1836
+ ], 2)) : $("", !0)
1837
+ ]));
1838
+ }
1839
+ });
1840
+ export {
1841
+ Jt as Accordion,
1842
+ Ut as AccordionItem,
1843
+ ga as Alert,
1844
+ Xt as Badge,
1845
+ fa as Breadcrumb,
1846
+ ma as Breadcrumbs,
1847
+ Lt as Button,
1848
+ Rt as ButtonGroup,
1849
+ It as Card,
1850
+ sa as Checkbox,
1851
+ ia as Choice,
1852
+ na as ChoiceGroup,
1853
+ zt as Container,
1854
+ ba as Dialog,
1855
+ Gt as Divider,
1856
+ va as Drawer,
1857
+ Yt as EmptyState,
1858
+ Pt as Eyebrow,
1859
+ Ht as FormField,
1860
+ Kt as Grid,
1861
+ Ot as Heading,
1862
+ jt as Image,
1863
+ qt as Input,
1864
+ ge as Label,
1865
+ Zt as List,
1866
+ ea as ListItem,
1867
+ ta as Pagination,
1868
+ ha as Popover,
1869
+ ya as Progress,
1870
+ la as Radio,
1871
+ At as Section,
1872
+ Ft as SectionHeader,
1873
+ Wt as Select,
1874
+ ra as Sidebar,
1875
+ da as SidebarGroup,
1876
+ ca as SidebarItem,
1877
+ $a as Skeleton,
1878
+ Mt as Stack,
1879
+ oa as Switch,
1880
+ pa as Tab,
1881
+ aa as Table,
1882
+ ua as Tabs,
1883
+ Qt as Tag,
1884
+ X as Text,
1885
+ Nt as Textarea,
1886
+ ka as Toast,
1887
+ _a as Tooltip
1888
+ };