vlite3 1.2.4 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,12 @@
1
- # vlite3
1
+ # Vlite3: The Foundation for Enterprise SaaS
2
2
 
3
- A lightweight Vue 3 UI component library built with Tailwind CSS, created for personal projects and available for anyone to use.
3
+ A clean, modular, and highly customizable component library for Vue 3. Build large, complex applications with confidence. Vlite3 gives you the solid, Vlite3 delivers 80+ production-ready components designed for real-world enterprise applications. Each component has been thoroughly tested in demanding enterprise production environments, ensuring stability, scalability, and performance.
4
+
5
+ Created for personal projects and available for anyone to use.
6
+
7
+ ## Demo
8
+
9
+ [Live Demo](https://vlite3.vercel.app/)
4
10
 
5
11
  ## Installation
6
12
 
@@ -14,10 +20,6 @@ yarn add vlite3
14
20
 
15
21
  ```
16
22
 
17
- ## Demo
18
-
19
- [Live Demo](https://vlite3.vercel.app/)
20
-
21
23
  ## 2. Tailwind CSS Setup (Tailwind v4)
22
24
 
23
25
  `vite.config.ts`
@@ -407,6 +409,8 @@ Follow these rules strictly to ensure visual consistency and predictable styling
407
409
  - [x] **Screen**
408
410
  - [x] **ChatInterface**
409
411
  - [x] **CommentThread**
412
+ - [x] **Clipboard**
413
+ - [x] **AppShell**
410
414
 
411
415
  ### Inputs & Forms
412
416
 
@@ -437,6 +441,7 @@ Follow these rules strictly to ensure visual consistency and predictable styling
437
441
  ### Data Display
438
442
 
439
443
  - [x] **Avatar**
444
+ - [x] **Persona**
440
445
  - [x] **Accordion**
441
446
  - [x] **Carousel**
442
447
  - [x] **DataTable**
@@ -460,6 +465,7 @@ Follow these rules strictly to ensure visual consistency and predictable styling
460
465
  ### Feedback & Overlays
461
466
 
462
467
  - [x] **Alert**
468
+ - [x] **Beacon**
463
469
  - [x] **Modal**
464
470
  - [x] **Empty**
465
471
  - [x] **ConfirmationModal**
@@ -485,7 +491,11 @@ Follow these rules strictly to ensure visual consistency and predictable styling
485
491
  - [0-setup.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/0-vlite3-setup.md)
486
492
  - [1-theming.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/1-theming.md)
487
493
  - [2-components.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/2-all-components.md)
488
- - [3-forms.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/components/Forms.md)
494
+ - [3-forms.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/1-Components/Forms.md)
489
495
  - [3-utility.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/3-utility.md)
490
496
  - [4-i18n.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/4-i18n.md)
491
497
  - [5-search-util.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/5-search-util.md)
498
+
499
+ ## Author
500
+
501
+ [safdar-azeem](https://github.com/safdar-azeem)
@@ -1,7 +1,7 @@
1
- import { defineComponent as k, computed as u, openBlock as l, createElementBlock as s, normalizeClass as a, Fragment as z, renderList as b, createVNode as f, withCtx as x, createElementVNode as y, toDisplayString as r, createCommentVNode as o, normalizeStyle as C } from "vue";
2
- import p from "../Avatar.vue.js";
3
- import S from "../Tooltip.vue.js";
4
- const w = { class: "flex flex-col gap-0.5 text-left" }, N = {
1
+ import { defineComponent as k, computed as u, openBlock as l, createElementBlock as s, normalizeClass as a, Fragment as z, renderList as b, createVNode as f, withCtx as x, createElementVNode as p, toDisplayString as r, createCommentVNode as o, normalizeStyle as y } from "vue";
2
+ import C from "../Avatar.vue.js";
3
+ import w from "../Tooltip.vue.js";
4
+ const S = { class: "flex flex-col gap-0.5 text-left" }, N = {
5
5
  key: 0,
6
6
  class: "font-semibold text-sm text-tooltip-foreground"
7
7
  }, V = {
@@ -44,18 +44,19 @@ const w = { class: "flex flex-col gap-0.5 text-left" }, N = {
44
44
  key: c,
45
45
  class: a([c !== 0 ? m[e.overlap] : "", "relative shrink-0"])
46
46
  }, [
47
- f(S, {
47
+ f(w, {
48
48
  disabled: !t.heading && !t.text,
49
- placement: "top"
49
+ placement: "top",
50
+ contentClass: "min-w-[100px] px-10!"
50
51
  }, {
51
52
  content: x(() => [
52
- y("div", w, [
53
+ p("div", S, [
53
54
  t.heading ? (l(), s("span", N, r(t.heading), 1)) : o("", !0),
54
55
  t.text ? (l(), s("span", V, r(t.text), 1)) : o("", !0)
55
56
  ])
56
57
  ]),
57
58
  default: x(() => [
58
- f(p, {
59
+ f(C, {
59
60
  src: t.src,
60
61
  alt: t.alt,
61
62
  fallback: t.fallback,
@@ -76,7 +77,7 @@ const w = { class: "flex flex-col gap-0.5 text-left" }, N = {
76
77
  g,
77
78
  e.rounded === "full" ? "rounded-full" : e.rounded === "none" ? "rounded-none" : `rounded-${e.rounded}`
78
79
  ]),
79
- style: C({
80
+ style: y({
80
81
  // Match the same size as Avatar sizeClasses
81
82
  width: i[e.size],
82
83
  height: i[e.size],
@@ -0,0 +1,13 @@
1
+ export type BeaconVariant = 'primary' | 'danger' | 'warning' | 'success' | 'info';
2
+ export type BeaconSize = 'sm' | 'md' | 'lg';
3
+ interface Props {
4
+ variant?: BeaconVariant | string;
5
+ size?: BeaconSize | string;
6
+ class?: any;
7
+ }
8
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
9
+ class: any;
10
+ variant: BeaconVariant | string;
11
+ size: BeaconSize | string;
12
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLSpanElement>;
13
+ export default _default;
@@ -16,7 +16,7 @@ import "v-datepicker-lite";
16
16
  import "v-datepicker-lite/style.css";
17
17
  import "@jaames/iro";
18
18
  import "@vueuse/core";
19
- /* empty css */
19
+ /* empty css */
20
20
  import me from "../IconPicker.vue.js";
21
21
  /* empty css */
22
22
  /* empty css */
@@ -1,5 +1,5 @@
1
1
  import { ButtonVariant, ButtonSize, ButtonRounded } from '../types';
2
- export interface CopyButtonProps {
2
+ export interface ClipboardProps {
3
3
  /** The content to be copied to the clipboard */
4
4
  textToCopy: string;
5
5
  variant?: ButtonVariant;
@@ -26,15 +26,16 @@ declare function __VLS_template(): {
26
26
  rootEl: HTMLButtonElement;
27
27
  };
28
28
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
29
- declare const __VLS_component: import('vue').DefineComponent<CopyButtonProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
29
+ declare const __VLS_component: import('vue').DefineComponent<ClipboardProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
30
30
  copy: (text: string) => any;
31
31
  error: (err: Error) => any;
32
- }, string, import('vue').PublicProps, Readonly<CopyButtonProps> & Readonly<{
32
+ }, string, import('vue').PublicProps, Readonly<ClipboardProps> & Readonly<{
33
33
  onCopy?: (text: string) => any;
34
34
  onError?: (err: Error) => any;
35
35
  }>, {
36
36
  variant: ButtonVariant;
37
37
  size: ButtonSize;
38
+ rounded: ButtonRounded;
38
39
  asIcon: boolean;
39
40
  defaultIcon: string;
40
41
  copiedIcon: string;
@@ -1,61 +1,61 @@
1
- import { defineComponent as f, ref as p, computed as l, openBlock as m, createBlock as x, normalizeClass as T, withCtx as y, renderSlot as v, createCommentVNode as I } from "vue";
1
+ import { defineComponent as f, ref as p, computed as i, openBlock as m, createBlock as x, normalizeClass as T, withCtx as v, renderSlot as y, createCommentVNode as I } from "vue";
2
2
  import C from "./Button.vue.js";
3
- import { $t as r } from "../utils/i18n.js";
4
- const z = /* @__PURE__ */ f({
5
- __name: "CopyButton",
3
+ import { $t as d } from "../utils/i18n.js";
4
+ const w = /* @__PURE__ */ f({
5
+ __name: "Clipboard",
6
6
  props: {
7
7
  textToCopy: {},
8
8
  variant: { default: "outline" },
9
9
  size: { default: "md" },
10
- rounded: {},
10
+ rounded: { default: "full" },
11
11
  class: {},
12
12
  disabled: { type: Boolean },
13
13
  defaultIcon: { default: "lucide:copy" },
14
14
  copiedIcon: { default: "lucide:check" },
15
15
  defaultText: {},
16
16
  copiedText: {},
17
- defaultTextI18n: { default: "vlite.copyButton.copy" },
18
- copiedTextI18n: { default: "vlite.copyButton.copied" },
17
+ defaultTextI18n: { default: "vlite.clipboard.copy" },
18
+ copiedTextI18n: { default: "vlite.clipboard.copied" },
19
19
  asIcon: { type: Boolean, default: !1 }
20
20
  },
21
21
  emits: ["copy", "error"],
22
- setup(o, { emit: d }) {
23
- const e = o, c = d, a = p(!1);
22
+ setup(o, { emit: r }) {
23
+ const e = o, l = r, a = p(!1);
24
24
  let n = null;
25
- const u = l(() => a.value ? e.copiedIcon : e.defaultIcon), i = l(() => {
25
+ const u = i(() => a.value ? e.copiedIcon : e.defaultIcon), c = i(() => {
26
26
  if (!e.asIcon)
27
27
  if (a.value) {
28
28
  if (e.copiedText) return e.copiedText;
29
- const t = r(e.copiedTextI18n);
29
+ const t = d(e.copiedTextI18n);
30
30
  return t !== e.copiedTextI18n ? t : "Copied";
31
31
  } else {
32
32
  if (e.defaultText) return e.defaultText;
33
- const t = r(e.defaultTextI18n);
33
+ const t = d(e.defaultTextI18n);
34
34
  return t !== e.defaultTextI18n ? t : "Copy";
35
35
  }
36
36
  }), s = async () => {
37
37
  if (!e.disabled)
38
38
  try {
39
- await navigator.clipboard.writeText(e.textToCopy), a.value = !0, c("copy", e.textToCopy), n && clearTimeout(n), n = setTimeout(() => {
39
+ await navigator.clipboard.writeText(e.textToCopy), a.value = !0, l("copy", e.textToCopy), n && clearTimeout(n), n = setTimeout(() => {
40
40
  a.value = !1;
41
41
  }, 500);
42
42
  } catch (t) {
43
- c("error", t instanceof Error ? t : new Error("Copy failed"));
43
+ l("error", t instanceof Error ? t : new Error("Copy failed"));
44
44
  }
45
45
  };
46
- return (t, B) => (m(), x(C, {
46
+ return (t, b) => (m(), x(C, {
47
47
  variant: o.variant,
48
48
  size: o.size,
49
49
  rounded: o.rounded,
50
50
  class: T(e.class),
51
51
  disabled: o.disabled,
52
52
  icon: u.value,
53
- text: i.value,
53
+ text: c.value,
54
54
  "as-icon": o.asIcon,
55
55
  onClick: s
56
56
  }, {
57
- default: y(() => [
58
- !o.asIcon && !i.value ? v(t.$slots, "default", {
57
+ default: v(() => [
58
+ !o.asIcon && !c.value ? y(t.$slots, "default", {
59
59
  key: 0,
60
60
  copied: a.value
61
61
  }) : I("", !0)
@@ -65,5 +65,5 @@ const z = /* @__PURE__ */ f({
65
65
  }
66
66
  });
67
67
  export {
68
- z as default
68
+ w as default
69
69
  };
@@ -0,0 +1,4 @@
1
+ import f from "./Clipboard.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -1,5 +1,5 @@
1
- import o from "./ColorIro.vue.js";
2
- /* empty css */
1
+ import o from "./ColorIro.vue2.js";
2
+ /* empty css */
3
3
  export {
4
4
  o as default
5
5
  };
@@ -6,8 +6,8 @@ import O from "../Input.vue.js";
6
6
  import "../../core/config.js";
7
7
  /* empty css */
8
8
  import y from "../Button.vue.js";
9
- import E from "./ColorIro.vue.js";
10
- /* empty css */
9
+ import E from "./ColorIro.vue2.js";
10
+ /* empty css */
11
11
  import { useEyeDropper as P } from "@vueuse/core";
12
12
  const I = {
13
13
  key: 0,
@@ -18,7 +18,7 @@ export interface FilterConfig {
18
18
  }
19
19
  export interface TableFilter {
20
20
  pagination: PaginationConfig;
21
- sort: SortConfig;
21
+ sort?: SortConfig;
22
22
  filter: FilterConfig;
23
23
  }
24
24
  export interface TableHeader {
@@ -1,7 +1,7 @@
1
1
  import o from "./Modal.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../_virtual/_plugin-vue_export-helper.js";
4
- const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-350b61e5"]]);
4
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-b47509d4"]]);
5
5
  export {
6
6
  p as default
7
7
  };
@@ -1,14 +1,14 @@
1
- import { defineComponent as P, ref as f, inject as R, computed as h, markRaw as V, watch as T, provide as W, nextTick as K, onMounted as L, onUnmounted as A, openBlock as s, createElementBlock as d, Fragment as U, mergeProps as B, withModifiers as S, renderSlot as v, createCommentVNode as n, createBlock as I, Teleport as q, normalizeClass as i, createElementVNode as b, toDisplayString as z, createVNode as G, resolveDynamicComponent as H } from "vue";
2
- import J from "./Button.vue.js";
3
- import { useKeyStroke as Q } from "../composables/useKeyStroke.js";
4
- import { $t as F } from "../utils/i18n.js";
5
- const X = ["data-testid"], Y = ["data-testid"], Z = {
1
+ import { defineComponent as R, ref as f, inject as V, computed as p, markRaw as W, watch as T, provide as K, nextTick as L, onMounted as A, onUnmounted as U, openBlock as s, createElementBlock as a, Fragment as q, mergeProps as B, withModifiers as S, renderSlot as v, createCommentVNode as r, createBlock as I, Teleport as G, normalizeClass as i, createVNode as z, Transition as H, withCtx as J, createElementVNode as h, toDisplayString as F, resolveDynamicComponent as Q } from "vue";
2
+ import X from "./Button.vue.js";
3
+ import { useKeyStroke as Y } from "../composables/useKeyStroke.js";
4
+ import { $t as O } from "../utils/i18n.js";
5
+ const Z = ["data-testid"], _ = ["data-testid"], ee = {
6
6
  key: 0,
7
7
  class: "flex-none flex flex-col space-y-1.5 pb-0 border-b border-border/90"
8
- }, _ = { class: "text-lg font-semibold leading-none tracking-tight" }, ee = {
8
+ }, te = { class: "text-lg font-semibold leading-none tracking-tight" }, oe = {
9
9
  key: 0,
10
10
  class: "text-sm text-muted-foreground mb-3.5"
11
- }, ae = /* @__PURE__ */ P({
11
+ }, de = /* @__PURE__ */ R({
12
12
  inheritAttrs: !1,
13
13
  __name: "Modal",
14
14
  props: {
@@ -28,113 +28,119 @@ const X = ["data-testid"], Y = ["data-testid"], Z = {
28
28
  bodyProps: {}
29
29
  },
30
30
  emits: ["close", "update:show", "onOpen"],
31
- setup(t, { emit: O }) {
32
- const o = t, u = O, l = f(o.show), k = f(!1), g = f(!1), C = f(null);
31
+ setup(o, { emit: j }) {
32
+ const t = o, u = j, l = f(t.show), k = f(!1), b = f(!1), C = f(null);
33
33
  let c = null;
34
- const y = f(!1), a = R("dropdown-context", null), w = h(() => o.body ? V(o.body) : void 0);
34
+ const g = f(!1), d = V("dropdown-context", null), w = p(() => t.body ? W(t.body) : void 0);
35
35
  T(
36
- () => o.show,
36
+ () => t.show,
37
37
  (e) => {
38
- l.value = e, e && (u("onOpen"), a?.close());
38
+ l.value = e, e && (u("onOpen"), d?.close());
39
39
  }
40
40
  );
41
- const j = () => {
42
- l.value = !0, a?.close();
43
- }, D = (e) => {
44
- k.value = e;
41
+ const D = () => {
42
+ l.value = !0, d?.close();
45
43
  }, E = (e) => {
46
- y.value = e;
44
+ k.value = e;
45
+ }, M = (e) => {
46
+ g.value = e;
47
47
  }, m = () => {
48
48
  if (k.value) {
49
- g.value = !0, c && clearTimeout(c), c = setTimeout(() => {
50
- g.value = !1;
49
+ b.value = !0, c && clearTimeout(c), c = setTimeout(() => {
50
+ b.value = !1;
51
51
  }, 1e3);
52
52
  return;
53
53
  }
54
54
  l.value = !1, u("update:show", !1), u("close");
55
- }, p = () => {
55
+ }, y = () => {
56
56
  l.value = !1, u("update:show", !1), u("close");
57
57
  };
58
- W("modal-context", { close: m, setSubmitting: D, registerFormFooter: E });
59
- const M = () => {
60
- o.closeOutside && m();
61
- }, { onKeyStroke: N } = Q();
62
- N("Escape", m), T(l, async (e) => {
63
- e ? (a?.onChildToggle?.(!0), document.body.style.overflow = "hidden", await K(), C.value?.focus()) : (document.body.style.overflow = "", a?.onChildToggle?.(!1), y.value = !1);
64
- }), L(() => {
65
- l.value && a?.onChildToggle?.(!0);
58
+ K("modal-context", { close: m, setSubmitting: E, registerFormFooter: M });
59
+ const N = () => {
60
+ t.closeOutside && m();
61
+ }, { onKeyStroke: P } = Y();
62
+ P("Escape", m), T(l, async (e) => {
63
+ e ? (d?.onChildToggle?.(!0), document.body.style.overflow = "hidden", await L(), C.value?.focus()) : (document.body.style.overflow = "", d?.onChildToggle?.(!1), g.value = !1);
66
64
  }), A(() => {
67
- l.value && a?.onChildToggle?.(!1), document.body.style.overflow = "", c && clearTimeout(c);
65
+ l.value && d?.onChildToggle?.(!0);
66
+ }), U(() => {
67
+ l.value && d?.onChildToggle?.(!1), document.body.style.overflow = "", c && clearTimeout(c);
68
68
  });
69
- const r = h(() => o.titleI18n ? F(o.titleI18n) : o.title), x = h(
70
- () => o.descriptionI18n ? F(o.descriptionI18n) : o.description
69
+ const n = p(() => t.titleI18n ? O(t.titleI18n) : t.title), x = p(
70
+ () => t.descriptionI18n ? O(t.descriptionI18n) : t.description
71
71
  );
72
- return (e, $) => (s(), d(U, null, [
73
- e.$slots?.trigger || e.$slots?.default ? (s(), d("span", B({
72
+ return (e, $) => (s(), a(q, null, [
73
+ e.$slots?.trigger || e.$slots?.default ? (s(), a("span", B({
74
74
  key: 0,
75
- onClick: S(j, ["stop"]),
76
- class: `${t.triggerClass}`
75
+ onClick: S(D, ["stop"]),
76
+ class: `${o.triggerClass}`
77
77
  }, e.$attrs, {
78
- "data-testid": e.$attrs["data-testid"] ? `${e.$attrs["data-testid"]}-trigger` : r.value ? `modal-trigger-${r.value.toString().toLowerCase().replace(/[^a-z0-9]+/g, "-")}` : "modal-trigger"
78
+ "data-testid": e.$attrs["data-testid"] ? `${e.$attrs["data-testid"]}-trigger` : n.value ? `modal-trigger-${n.value.toString().toLowerCase().replace(/[^a-z0-9]+/g, "-")}` : "modal-trigger"
79
79
  }), [
80
80
  v(e.$slots, "trigger", {}, () => [
81
- t.body ? v(e.$slots, "default", { key: 0 }, void 0, !0) : n("", !0)
81
+ o.body ? v(e.$slots, "default", { key: 0 }, void 0, !0) : r("", !0)
82
82
  ], !0)
83
- ], 16, X)) : n("", !0),
84
- (s(), I(q, { to: "body" }, [
85
- l.value ? (s(), d("div", {
83
+ ], 16, Z)) : r("", !0),
84
+ (s(), I(G, { to: "body" }, [
85
+ l.value ? (s(), a("div", {
86
86
  key: 0,
87
- class: i(["fixed inset-0 z-50 flex items-center justify-center p-4 v-modal-overlay", t.backdrop ? "v-modal-backdrop" : ""]),
88
- onClick: M
87
+ class: i(["fixed inset-0 z-50 flex items-center justify-center p-4 v-modal-overlay", o.backdrop ? "v-modal-backdrop" : ""]),
88
+ onClick: N
89
89
  }, [
90
- b("div", {
91
- ref_key: "modalRef",
92
- ref: C,
93
- tabindex: "-1",
94
- role: "dialog",
95
- "aria-modal": "true",
96
- class: i(["modal-body relative w-full rounded border border-border/60 bg-body shadow-lg text-foreground flex flex-col max-h-[85vh] sm:max-h-[90vh] focus:outline-none", [t.maxWidth]]),
97
- "data-testid": e.$attrs["data-testid"] || (r.value ? `modal-${r.value.toString().toLowerCase().replace(/[^a-z0-9]+/g, "-")}` : "modal"),
98
- onClick: $[0] || ($[0] = S(() => {
99
- }, ["stop"]))
100
- }, [
101
- r.value ? (s(), d("div", Z, [
102
- b("div", {
103
- class: i(["flex items-center justify-between py-2 px-4 rounded-t-md", t.headerClass])
90
+ z(H, { name: "modal-dialog" }, {
91
+ default: J(() => [
92
+ l.value ? (s(), a("div", {
93
+ key: 0,
94
+ ref_key: "modalRef",
95
+ ref: C,
96
+ tabindex: "-1",
97
+ role: "dialog",
98
+ "aria-modal": "true",
99
+ class: i(["modal-body relative w-full rounded border border-border/60 bg-body shadow-lg text-foreground flex flex-col max-h-[85vh] sm:max-h-[90vh] focus:outline-none", [o.maxWidth]]),
100
+ "data-testid": e.$attrs["data-testid"] || (n.value ? `modal-${n.value.toString().toLowerCase().replace(/[^a-z0-9]+/g, "-")}` : "modal"),
101
+ onClick: $[0] || ($[0] = S(() => {
102
+ }, ["stop"]))
104
103
  }, [
105
- b("h3", _, z(r.value), 1),
106
- G(J, {
107
- rounded: "full",
108
- size: "sm",
109
- icon: "lucide:x",
110
- variant: "ghost",
111
- class: i(["hover:bg-gray-250/25!", { "blink-bg": g.value }]),
112
- "data-testid": "modal-close-btn",
113
- onClick: m
114
- }, null, 8, ["class"])
115
- ], 2)
116
- ])) : n("", !0),
117
- b("div", {
118
- class: i(["flex-1 overflow-y-auto px-4 pt-4 min-h-0 scrollbar-thin scrollbar-stable", [y.value ? "pb-0" : "pb-3.5", t.bodyClass]])
119
- }, [
120
- x.value ? (s(), d("p", ee, z(x.value), 1)) : n("", !0),
121
- w.value ? (s(), I(H(w.value), B({ key: 1 }, { ...t.bodyProps, ...e.$attrs }, { close: p }), null, 16)) : v(e.$slots, "default", {
122
- key: 2,
123
- close: p
124
- }, void 0, !0)
125
- ], 2),
126
- e.$slots.footer ? (s(), d("div", {
127
- key: 1,
128
- class: i([t.footerClass, "flex-none flex items-center px-4 py-3 border-t border-border/75 rounded-b-xl bg-body"])
129
- }, [
130
- v(e.$slots, "footer", { close: p }, void 0, !0)
131
- ], 2)) : n("", !0)
132
- ], 10, Y)
133
- ], 2)) : n("", !0)
104
+ n.value ? (s(), a("div", ee, [
105
+ h("div", {
106
+ class: i(["flex items-center justify-between py-2 px-4 rounded-t-md", o.headerClass])
107
+ }, [
108
+ h("h3", te, F(n.value), 1),
109
+ z(X, {
110
+ rounded: "full",
111
+ size: "sm",
112
+ icon: "lucide:x",
113
+ variant: "ghost",
114
+ class: i(["hover:bg-gray-250/25!", { "blink-bg": b.value }]),
115
+ "data-testid": "modal-close-btn",
116
+ onClick: m
117
+ }, null, 8, ["class"])
118
+ ], 2)
119
+ ])) : r("", !0),
120
+ h("div", {
121
+ class: i(["flex-1 overflow-y-auto px-4 pt-4 min-h-0 scrollbar-thin scrollbar-stable", [g.value ? "pb-0" : "pb-3.5", o.bodyClass]])
122
+ }, [
123
+ x.value ? (s(), a("p", oe, F(x.value), 1)) : r("", !0),
124
+ w.value ? (s(), I(Q(w.value), B({ key: 1 }, { ...o.bodyProps, ...e.$attrs }, { close: y }), null, 16)) : v(e.$slots, "default", {
125
+ key: 2,
126
+ close: y
127
+ }, void 0, !0)
128
+ ], 2),
129
+ e.$slots.footer ? (s(), a("div", {
130
+ key: 1,
131
+ class: i([o.footerClass, "flex-none flex items-center px-4 py-3 border-t border-border/75 rounded-b-xl bg-body"])
132
+ }, [
133
+ v(e.$slots, "footer", { close: y }, void 0, !0)
134
+ ], 2)) : r("", !0)
135
+ ], 10, _)) : r("", !0)
136
+ ]),
137
+ _: 3
138
+ })
139
+ ], 2)) : r("", !0)
134
140
  ]))
135
141
  ], 64));
136
142
  }
137
143
  });
138
144
  export {
139
- ae as default
145
+ de as default
140
146
  };
@@ -0,0 +1,25 @@
1
+ import { AvatarSize, AvatarRounded } from '../types';
2
+ export type PresenceType = 'online' | 'offline' | 'busy' | 'dnd' | 'away';
3
+ export type PersonaLabelTheme = 'default' | 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'info' | 'muted' | string;
4
+ interface Props {
5
+ src?: string;
6
+ link?: string;
7
+ alt?: string;
8
+ fallback?: string;
9
+ size?: AvatarSize;
10
+ rounded?: AvatarRounded;
11
+ presence?: PresenceType;
12
+ label?: string;
13
+ secondaryLabel?: string;
14
+ labelTheme?: PersonaLabelTheme;
15
+ hideDetails?: boolean;
16
+ class?: string;
17
+ }
18
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
19
+ class: string;
20
+ size: AvatarSize;
21
+ rounded: AvatarRounded;
22
+ labelTheme: PersonaLabelTheme;
23
+ hideDetails: boolean;
24
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
25
+ export default _default;
@@ -14,7 +14,7 @@ import "v-datepicker-lite";
14
14
  import "v-datepicker-lite/style.css";
15
15
  import "@jaames/iro";
16
16
  import "@vueuse/core";
17
- /* empty css */
17
+ /* empty css */
18
18
  import "iconify-icon-picker";
19
19
  import "iconify-icon-picker/style.css";
20
20
  /* empty css */
@@ -1,7 +1,7 @@
1
1
  import o from "./SidePanel.vue2.js";
2
2
  /* empty css */
3
- import t from "../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-3446a690"]]);
3
+ import a from "../_virtual/_plugin-vue_export-helper.js";
4
+ const f = /* @__PURE__ */ a(o, [["__scopeId", "data-v-d7a169fa"]]);
5
5
  export {
6
- m as default
6
+ f as default
7
7
  };