vlite3 1.1.2 → 1.1.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.
Files changed (149) hide show
  1. package/README.md +5 -0
  2. package/components/AttachmentsList/AttachmentsList.vue.d.ts +1 -1
  3. package/components/AttachmentsList/AttachmentsList.vue.js +237 -163
  4. package/components/Avatar.vue.js +1 -1
  5. package/components/AvatarUploader/AvatarUploader.vue.js +40 -37
  6. package/components/Button.vue.js +30 -28
  7. package/components/Carousel/Carousel.vue.d.ts +2 -2
  8. package/components/CategoryManager/CategoryManager.vue.d.ts +10 -2
  9. package/components/CategoryManager/CategoryManager.vue.js +138 -119
  10. package/components/CategoryManager/CategoryNode.vue.d.ts +2 -0
  11. package/components/CategoryManager/CategoryNode.vue.js +93 -88
  12. package/components/Chart/BarChart.vue.d.ts +48 -0
  13. package/components/Chart/CircleChart.vue.d.ts +47 -0
  14. package/components/Chart/LineChart.vue.d.ts +55 -0
  15. package/components/Chart/PieChart.vue.d.ts +49 -0
  16. package/components/Chart/index.d.ts +5 -0
  17. package/components/Chart/types.d.ts +135 -0
  18. package/components/Chart/utils.d.ts +40 -0
  19. package/components/Chat/ChatBubble.vue.js +22 -22
  20. package/components/CheckBox.vue.js +29 -28
  21. package/components/ColorPicker/ColorIro.vue3.js +2 -2
  22. package/components/ColorPicker/ColorPicker.vue.js +2 -2
  23. package/components/Comment/CommentEditor.vue.d.ts +41 -0
  24. package/components/Comment/CommentEditor.vue.js +221 -0
  25. package/components/Comment/CommentEditor.vue2.js +4 -0
  26. package/components/Comment/CommentItem.vue.d.ts +70 -0
  27. package/components/Comment/CommentItem.vue.js +7 -0
  28. package/components/Comment/CommentItem.vue2.js +322 -0
  29. package/components/Comment/CommentThread.vue.d.ts +64 -0
  30. package/components/Comment/CommentThread.vue.js +185 -0
  31. package/components/Comment/CommentThread.vue2.js +4 -0
  32. package/components/Comment/index.d.ts +4 -0
  33. package/components/Comment/types.d.ts +34 -0
  34. package/components/ConfirmationModal.vue.js +30 -28
  35. package/components/CopyButton.vue.d.ts +50 -0
  36. package/components/CopyButton.vue.js +69 -0
  37. package/components/CopyButton.vue2.js +4 -0
  38. package/components/DataTable/DataTable.vue.d.ts +2 -4
  39. package/components/DataTable/DataTable.vue.js +184 -235
  40. package/components/DataTable/DataTableHeader.vue.d.ts +2 -0
  41. package/components/DataTable/DataTableHeader.vue.js +24 -23
  42. package/components/DataTable/DataTableRow.vue.d.ts +2 -0
  43. package/components/DataTable/DataTableRow.vue.js +32 -31
  44. package/components/DataTable/types.d.ts +2 -9
  45. package/components/DatePicker.vue.js +41 -35
  46. package/components/DateRangePicker.vue.js +18 -17
  47. package/components/Dropdown/Dropdown.vue.d.ts +5 -0
  48. package/components/Dropdown/Dropdown.vue.js +141 -137
  49. package/components/Dropdown/DropdownBooleanItem.vue.js +16 -15
  50. package/components/Dropdown/DropdownItem.vue.js +21 -20
  51. package/components/Dropdown/DropdownMenu.vue.js +1 -1
  52. package/components/Dropdown/DropdownMenu.vue2.js +13 -12
  53. package/components/Dropdown/DropdownTrigger.vue.d.ts +4 -0
  54. package/components/Dropdown/DropdownTrigger.vue.js +12 -7
  55. package/components/Dropdown/composables/useDropdownHydration.d.ts +2 -0
  56. package/components/Dropdown/composables/useDropdownSelection.d.ts +1 -0
  57. package/components/Dropdown/composables/useDropdownSelection.js +46 -31
  58. package/components/Empty/Empty.vue.js +7 -5
  59. package/components/Empty/index.d.ts +1 -1
  60. package/components/Empty/variants/Variant12.vue.d.ts +22 -0
  61. package/components/Empty/variants/Variant12.vue.js +35 -0
  62. package/components/Empty/variants/Variant12.vue2.js +4 -0
  63. package/components/FilePicker/FilePicker.vue.js +93 -90
  64. package/components/Footer/Footer.vue.d.ts +3 -0
  65. package/components/Footer/Variant1.vue.d.ts +20 -0
  66. package/components/Footer/Variant2.vue.d.ts +20 -0
  67. package/components/Footer/Variant3.vue.d.ts +12 -0
  68. package/components/Footer/index.d.ts +2 -0
  69. package/components/Footer/types.d.ts +73 -0
  70. package/components/Form/CustomFields.vue.d.ts +2 -0
  71. package/components/Form/CustomFields.vue.js +1 -1
  72. package/components/Form/CustomFields.vue2.js +125 -122
  73. package/components/Form/Form.vue.js +2 -2
  74. package/components/Form/Form.vue2.js +68 -64
  75. package/components/Form/FormField.vue.js +205 -149
  76. package/components/Form/FormFields.vue.js +2 -2
  77. package/components/Form/FormFields.vue2.js +28 -27
  78. package/components/Form/types.d.ts +2 -2
  79. package/components/Form/utils/form.utils.d.ts +3 -3
  80. package/components/Form/utils/form.utils.js +37 -37
  81. package/components/Input.vue.js +64 -62
  82. package/components/Invoice/Invoice.vue.js +9 -7
  83. package/components/Invoice/InvoiceTotals.vue.d.ts +14 -0
  84. package/components/Invoice/InvoiceTotals.vue.js +86 -0
  85. package/components/Invoice/InvoiceTotals.vue2.js +4 -0
  86. package/components/Invoice/InvoiceVariant1.vue.d.ts +3 -1
  87. package/components/Invoice/InvoiceVariant1.vue.js +194 -207
  88. package/components/Invoice/InvoiceVariant2.vue.d.ts +3 -1
  89. package/components/Invoice/InvoiceVariant2.vue.js +109 -118
  90. package/components/Invoice/InvoiceVariant3.vue.d.ts +3 -1
  91. package/components/Invoice/InvoiceVariant3.vue.js +157 -167
  92. package/components/Invoice/InvoiceVariant4.vue.d.ts +3 -1
  93. package/components/Invoice/InvoiceVariant4.vue.js +192 -202
  94. package/components/Invoice/index.d.ts +1 -0
  95. package/components/Invoice/types.d.ts +22 -0
  96. package/components/Masonry/Masonry.vue.d.ts +1 -1
  97. package/components/Modal.vue.js +1 -1
  98. package/components/Modal.vue2.js +60 -54
  99. package/components/MultiSelect/MultiSelect.vue.d.ts +2 -0
  100. package/components/MultiSelect/MultiSelect.vue.js +92 -90
  101. package/components/MultiSelect/composables/useMultiSelectHydration.d.ts +2 -0
  102. package/components/NumberInput.vue.js +2 -2
  103. package/components/NumberInput.vue2.js +127 -121
  104. package/components/PricingPlan/PricingPlan.vue.d.ts +1 -1
  105. package/components/RichTextEditor/RichTextLinkPopover.vue.d.ts +26 -0
  106. package/components/RichTextEditor/RichTextReader.vue.d.ts +7 -0
  107. package/components/RichTextEditor/RichTextToolbar.vue.d.ts +24 -0
  108. package/components/RichTextEditor/composables/useRichTextImageUpload.d.ts +14 -0
  109. package/components/RichTextEditor/composables/useRichTextLinks.d.ts +32 -0
  110. package/components/RichTextEditor/index.d.ts +2 -0
  111. package/components/Screen/Screen.vue.js +45 -46
  112. package/components/Screen/ScreenFilter.vue.js +1 -1
  113. package/components/SidePanel.vue.js +2 -2
  114. package/components/SidePanel.vue2.js +58 -52
  115. package/components/SidebarMenu/SidebarMenu.vue.d.ts +1 -1
  116. package/components/SidebarMenu/SidebarMenu.vue.js +192 -91
  117. package/components/SidebarMenu/SidebarMenu.vue3.js +5 -0
  118. package/components/SidebarMenu/SidebarMenuItem.vue.js +170 -157
  119. package/components/SidebarMenu/types.d.ts +12 -3
  120. package/components/{DataTable/DataTableToolbar.vue.d.ts → Splitter/Splitter.vue.d.ts} +18 -15
  121. package/components/Splitter/Splitter.vue.js +64 -0
  122. package/components/Splitter/Splitter.vue2.js +4 -0
  123. package/components/Splitter/index.d.ts +1 -0
  124. package/components/Stats/StatItem.vue.js +96 -91
  125. package/components/Stats/types.d.ts +1 -0
  126. package/components/StatusChip/status-map.js +34 -2
  127. package/components/Switch.vue.d.ts +6 -1
  128. package/components/Switch.vue.js +61 -24
  129. package/components/TagInput/TagInput.vue.d.ts +187 -0
  130. package/components/TagInput/TagInput.vue.js +113 -0
  131. package/components/TagInput/TagInput.vue2.js +4 -0
  132. package/components/TagInput/index.d.ts +1 -0
  133. package/components/Textarea.vue.js +19 -18
  134. package/components/ThumbnailSelector/ThumbnailSelector.vue.js +2 -2
  135. package/components/ThumbnailSelector/ThumbnailSelector.vue2.js +19 -16
  136. package/components/index.d.ts +4 -0
  137. package/core/config.d.ts +54 -0
  138. package/index.d.ts +4 -0
  139. package/index.js +300 -285
  140. package/package.json +1 -1
  141. package/style.css +657 -6
  142. package/types/button.d.ts +1 -1
  143. package/types/config.type.d.ts +2 -0
  144. package/types/styles.d.ts +1 -0
  145. package/utils/functions.js +9 -9
  146. package/components/DataTable/DataTableToolbar.vue.js +0 -60
  147. package/components/DataTable/DataTableToolbar.vue2.js +0 -4
  148. package/components/SidebarMenu/SidebarMenu.vue2.js +0 -4
  149. /package/components/ColorPicker/{ColorIro.vue2.js → ColorIro.vue.js} +0 -0
@@ -1,23 +1,23 @@
1
- import { defineComponent as te, computed as f, ref as C, useSlots as ie, openBlock as n, createElementBlock as m, createElementVNode as d, renderSlot as oe, normalizeClass as T, createBlock as h, withModifiers as V, createVNode as F, toDisplayString as y, createTextVNode as ae, createCommentVNode as z, Fragment as re, renderList as ne } from "vue";
1
+ import { defineComponent as te, computed as f, ref as $, useSlots as ie, openBlock as n, createElementBlock as m, createElementVNode as d, renderSlot as ae, normalizeClass as C, createBlock as h, withModifiers as V, createVNode as F, toDisplayString as y, createTextVNode as oe, createCommentVNode as T, Fragment as re, renderList as ne } from "vue";
2
2
  import p from "../Icon.vue.js";
3
- import $ from "../Button.vue.js";
3
+ import P from "../Button.vue.js";
4
4
  import { $t as S } from "../../utils/i18n.js";
5
- const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "placeholder", "disabled"], ce = { class: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center justify-center gap-2 bg-background" }, fe = { class: "p-3 bg-muted rounded-full text-muted-foreground" }, me = { class: "space-y-1" }, ge = { class: "text-sm font-medium text-foreground" }, pe = { class: "text-primary hover:underline" }, ve = {
5
+ const se = { class: "w-full" }, de = ["multiple", "accept", "data-testid"], ue = ["data-testid"], ce = ["value", "placeholder", "disabled"], fe = { class: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center justify-center gap-2 bg-background" }, me = ["data-testid"], ge = { class: "p-3 bg-muted rounded-full text-muted-foreground" }, pe = { class: "space-y-1" }, ve = { class: "text-sm font-medium text-foreground" }, he = { class: "text-primary hover:underline" }, ye = {
6
6
  key: 0,
7
7
  class: "text-xs text-muted-foreground"
8
- }, he = {
8
+ }, be = {
9
9
  key: 1,
10
10
  class: "space-y-2"
11
- }, ye = { class: "shrink-0 mr-3" }, xe = { class: "p-2 bg-primary-light rounded text-primary-fg-light" }, be = { class: "flex-1 min-w-0 flex flex-col items-start overflow-hidden" }, ke = {
11
+ }, xe = { class: "shrink-0 mr-3" }, ke = { class: "p-2 bg-primary-light rounded text-primary-fg-light" }, we = { class: "flex-1 min-w-0 flex flex-col items-start overflow-hidden" }, Ve = {
12
12
  key: 0,
13
13
  class: "inline-flex items-center group/rename w-fit max-w-full mb-0.5"
14
- }, we = { class: "grid relative w-fit max-w-full items-center -ml-1" }, Ve = { class: "invisible whitespace-pre col-start-1 row-start-1 text-sm font-medium px-1 py-0.5 max-w-full overflow-hidden text-ellipsis" }, Fe = ["value", "onInput", "placeholder"], Se = ["title"], Ae = {
14
+ }, Fe = { class: "grid relative w-fit max-w-full items-center -ml-1" }, Se = { class: "invisible whitespace-pre col-start-1 row-start-1 text-sm font-medium px-1 py-0.5 max-w-full overflow-hidden text-ellipsis" }, Ae = ["value", "onInput", "placeholder"], $e = ["title"], Ce = {
15
15
  key: 1,
16
16
  class: "text-sm font-medium text-foreground truncate w-full"
17
- }, Ce = { class: "text-xs text-muted-foreground -mt-1" }, Te = { class: "shrink-0 ml-3 flex gap-2 items-center" }, ze = {
17
+ }, Te = { class: "text-xs text-muted-foreground -mt-1" }, ze = { class: "shrink-0 ml-3 flex gap-2 items-center" }, De = {
18
18
  key: 0,
19
19
  class: "flex gap-2"
20
- }, Pe = /* @__PURE__ */ te({
20
+ }, Me = /* @__PURE__ */ te({
21
21
  name: "FilePicker",
22
22
  __name: "FilePicker",
23
23
  props: {
@@ -38,13 +38,13 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
38
38
  allowRename: { type: Boolean, default: !1 }
39
39
  },
40
40
  emits: ["update:modelValue", "change", "error"],
41
- setup(o, { emit: M }) {
42
- const e = o, u = M, v = (l, t, i) => {
41
+ setup(a, { emit: M }) {
42
+ const e = a, u = M, v = (l, t, i) => {
43
43
  const r = i ? S(l, i) : S(l);
44
44
  return r !== l ? r : t;
45
45
  }, j = f(
46
46
  () => e.placeholderI18n ? S(e.placeholderI18n) : e.placeholder !== void 0 ? e.placeholder : v("vlite.filePicker.selectFile", "Select file...")
47
- ), U = f(() => e.textI18n ? S(e.textI18n) : v("vlite.filePicker.clickToUpload", "Click to upload")), E = f(() => v("vlite.filePicker.dragAndDrop", "or drag and drop")), R = f(() => v("vlite.filePicker.addMore", "Add more")), L = f(() => v("vlite.filePicker.unknownFile", "Unknown File")), D = f(() => v("vlite.filePicker.enterFileName", "Enter file name")), W = f(() => v("vlite.filePicker.renameFile", "Rename file")), B = C(null), x = C(!1), s = C(!1);
47
+ ), U = f(() => e.textI18n ? S(e.textI18n) : v("vlite.filePicker.clickToUpload", "Click to upload")), E = f(() => v("vlite.filePicker.dragAndDrop", "or drag and drop")), R = f(() => v("vlite.filePicker.addMore", "Add more")), L = f(() => v("vlite.filePicker.unknownFile", "Unknown File")), z = f(() => v("vlite.filePicker.enterFileName", "Enter file name")), W = f(() => v("vlite.filePicker.renameFile", "Rename file")), D = $(null), b = $(!1), s = $(!1);
48
48
  ie();
49
49
  const O = f(() => e.fileTypes.join(",")), A = f(() => Array.isArray(e.modelValue) ? e.modelValue.length > 0 : e.modelValue !== null), w = f(() => {
50
50
  let l = [];
@@ -62,23 +62,23 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
62
62
  }
63
63
  return t;
64
64
  });
65
- }), b = () => {
65
+ }), x = () => {
66
66
  if (!(e.disabled || e.loading || s.value)) {
67
67
  if (e.multiSelect && e.maxFiles && (Array.isArray(e.modelValue) ? e.modelValue.length : e.modelValue ? 1 : 0) >= e.maxFiles) {
68
68
  u("error", `Maximum ${e.maxFiles} files allowed`);
69
69
  return;
70
70
  }
71
- B.value?.click();
71
+ D.value?.click();
72
72
  }
73
73
  }, q = (l) => {
74
- l.preventDefault(), !(e.disabled || e.loading) && (x.value = !0);
74
+ l.preventDefault(), !(e.disabled || e.loading) && (b.value = !0);
75
75
  }, G = (l) => {
76
- l.preventDefault(), x.value = !1;
76
+ l.preventDefault(), b.value = !1;
77
77
  }, K = (l) => {
78
- l.preventDefault(), x.value = !1, !(e.disabled || e.loading || s.value) && l.dataTransfer?.files && N(l.dataTransfer.files);
78
+ l.preventDefault(), b.value = !1, !(e.disabled || e.loading || s.value) && l.dataTransfer?.files && B(l.dataTransfer.files);
79
79
  }, H = (l) => {
80
80
  const t = l.target;
81
- t.files && N(t.files), t.value = "";
81
+ t.files && B(t.files), t.value = "";
82
82
  }, J = (l) => {
83
83
  if (l === 0 || !l) return "";
84
84
  const t = 1024, i = ["Bytes", "KB", "MB", "GB", "TB"], r = Math.floor(Math.log(l) / Math.log(t));
@@ -88,13 +88,13 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
88
88
  r.readAsDataURL(l), r.onload = () => {
89
89
  typeof r.result == "string" ? t(r.result) : i(new Error("Failed to read file as base64"));
90
90
  }, r.onerror = (c) => i(c);
91
- }), N = async (l) => {
91
+ }), B = async (l) => {
92
92
  if (l.length === 0) return;
93
93
  s.value = !0;
94
94
  const t = [], i = [], r = Array.from(l);
95
95
  let c = e.multiSelect ? r : [r[0]];
96
96
  if (e.multiSelect && e.maxFiles) {
97
- const a = Array.isArray(e.modelValue) ? e.modelValue.length : e.modelValue ? 1 : 0, g = e.maxFiles - a;
97
+ const o = Array.isArray(e.modelValue) ? e.modelValue.length : e.modelValue ? 1 : 0, g = e.maxFiles - o;
98
98
  if (g <= 0) {
99
99
  u("error", `Maximum ${e.maxFiles} files allowed`), s.value = !1;
100
100
  return;
@@ -102,42 +102,42 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
102
102
  c.length > g && (i.push(`Only ${g} more file(s) allowed. Maximum ${e.maxFiles} files.`), c = c.slice(0, g));
103
103
  }
104
104
  try {
105
- for (const a of c) {
105
+ for (const o of c) {
106
106
  if (e.fileTypes.length > 0 && !e.fileTypes.some((k) => {
107
107
  if (k.startsWith("."))
108
- return a.name.toLowerCase().endsWith(k.toLowerCase());
108
+ return o.name.toLowerCase().endsWith(k.toLowerCase());
109
109
  if (k.endsWith("/*")) {
110
110
  const le = k.split("/")[0];
111
- return a.type.startsWith(le);
111
+ return o.type.startsWith(le);
112
112
  }
113
- return a.type === k;
113
+ return o.type === k;
114
114
  })) {
115
- i.push(`File type not allowed: ${a.name}`);
115
+ i.push(`File type not allowed: ${o.name}`);
116
116
  continue;
117
117
  }
118
118
  let g = !1;
119
- e.maxSize && a.size > e.maxSize && (i.push(`File too large: ${a.name}`), g = !0);
120
- let I = "";
119
+ e.maxSize && o.size > e.maxSize && (i.push(`File too large: ${o.name}`), g = !0);
120
+ let N = "";
121
121
  if (e.returnFormat === "base64" && !g)
122
122
  try {
123
- I = await Q(a);
124
- } catch (P) {
125
- console.error("Base64 read failed", P);
123
+ N = await Q(o);
124
+ } catch (I) {
125
+ console.error("Base64 read failed", I);
126
126
  }
127
127
  t.push({
128
- fileName: a.name,
129
- fileType: a.type,
130
- fileSize: a.size,
131
- file: a,
132
- base64: I
128
+ fileName: o.name,
129
+ fileType: o.type,
130
+ fileSize: o.size,
131
+ file: o,
132
+ base64: N
133
133
  });
134
134
  }
135
135
  if (i.length > 0 && u("error", i.join("; ")), t.length > 0) {
136
- let a;
137
- e.multiSelect ? a = [...Array.isArray(e.modelValue) ? e.modelValue : e.modelValue ? [e.modelValue] : [], ...t] : a = t[0], u("update:modelValue", a), u("change", a);
136
+ let o;
137
+ e.multiSelect ? o = [...Array.isArray(e.modelValue) ? e.modelValue : e.modelValue ? [e.modelValue] : [], ...t] : o = t[0], u("update:modelValue", o), u("change", o);
138
138
  }
139
- } catch (a) {
140
- console.error("Error processing files:", a), u("error", "Failed to process files");
139
+ } catch (o) {
140
+ console.error("Error processing files:", o), u("error", "Failed to process files");
141
141
  } finally {
142
142
  s.value = !1;
143
143
  }
@@ -196,38 +196,40 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
196
196
  return (l, t) => (n(), m("div", se, [
197
197
  d("input", {
198
198
  ref_key: "fileInput",
199
- ref: B,
199
+ ref: D,
200
200
  type: "file",
201
- multiple: o.multiSelect,
201
+ multiple: a.multiSelect,
202
202
  accept: O.value,
203
203
  class: "hidden",
204
+ "data-testid": l.$attrs["data-testid"] ? `${l.$attrs["data-testid"]}-input` : l.$attrs.name ? `filepicker-input-${l.$attrs.name}` : "filepicker-input",
204
205
  onChange: H
205
206
  }, null, 40, de),
206
- oe(l.$slots, "trigger", {
207
- trigger: b,
208
- isDragging: x.value,
209
- isLoading: o.loading || s.value,
207
+ ae(l.$slots, "trigger", {
208
+ trigger: x,
209
+ isDragging: b.value,
210
+ isLoading: a.loading || s.value,
210
211
  files: w.value
211
212
  }, () => [
212
- o.variant === "input" ? (n(), m("div", {
213
+ a.variant === "input" ? (n(), m("div", {
213
214
  key: 0,
214
215
  class: "relative",
215
- onClick: b
216
+ onClick: x,
217
+ "data-testid": l.$attrs["data-testid"] || (l.$attrs.name ? `filepicker-${l.$attrs.name}` : "filepicker")
216
218
  }, [
217
219
  d("input", {
218
220
  type: "text",
219
221
  value: _.value,
220
222
  placeholder: j.value,
221
223
  readonly: "",
222
- class: T(ee.value),
223
- disabled: o.disabled || o.loading || s.value
224
- }, null, 10, ue),
225
- d("div", ce, [
226
- o.loading || s.value ? (n(), h(p, {
224
+ class: C(ee.value),
225
+ disabled: a.disabled || a.loading || s.value
226
+ }, null, 10, ce),
227
+ d("div", fe, [
228
+ a.loading || s.value ? (n(), h(p, {
227
229
  key: 0,
228
230
  icon: "lucide:loader-2",
229
231
  class: "h-4 w-4 animate-spin text-muted-foreground"
230
- })) : A.value && !o.disabled ? (n(), m("button", {
232
+ })) : A.value && !a.disabled ? (n(), m("button", {
231
233
  key: 1,
232
234
  type: "button",
233
235
  class: "text-muted-foreground hover:text-foreground focus:outline-none",
@@ -243,41 +245,42 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
243
245
  class: "h-4 w-4 text-muted-foreground"
244
246
  }))
245
247
  ])
246
- ])) : (n(), m("div", {
248
+ ], 8, ue)) : (n(), m("div", {
247
249
  key: 1,
248
250
  class: "relative",
249
251
  onDragover: q,
250
252
  onDragleave: G,
251
- onDrop: K
253
+ onDrop: K,
254
+ "data-testid": l.$attrs["data-testid"] || (l.$attrs.name ? `filepicker-${l.$attrs.name}` : "filepicker")
252
255
  }, [
253
- A.value ? (n(), m("div", he, [
256
+ A.value ? (n(), m("div", be, [
254
257
  (n(!0), m(re, null, ne(w.value, (i, r) => (n(), m("div", {
255
258
  key: r,
256
- class: T(["relative flex items-center p-3 border border-border rounded-lg bg-body transition-colors group", [
257
- !o.multiSelect && !o.disabled && !o.loading && !s.value ? "cursor-pointer hover:border-primary/50" : ""
259
+ class: C(["relative flex items-center p-3 border border-border rounded-lg bg-body transition-colors group", [
260
+ !a.multiSelect && !a.disabled && !a.loading && !s.value ? "cursor-pointer hover:border-primary/50" : ""
258
261
  ]]),
259
- onClick: t[2] || (t[2] = (c) => !o.multiSelect && !o.disabled && !o.loading && !s.value ? b() : null)
262
+ onClick: t[2] || (t[2] = (c) => !a.multiSelect && !a.disabled && !a.loading && !s.value ? x() : null)
260
263
  }, [
261
- d("div", ye, [
262
- d("div", xe, [
264
+ d("div", xe, [
265
+ d("div", ke, [
263
266
  F(p, {
264
267
  icon: "lucide:file-text",
265
268
  class: "w-5 h-5"
266
269
  })
267
270
  ])
268
271
  ]),
269
- d("div", be, [
270
- o.allowRename && !o.disabled && !o.loading && !s.value ? (n(), m("div", ke, [
271
- d("div", we, [
272
- d("span", Ve, y(i.fileName || D.value), 1),
272
+ d("div", we, [
273
+ a.allowRename && !a.disabled && !a.loading && !s.value ? (n(), m("div", Ve, [
274
+ d("div", Fe, [
275
+ d("span", Se, y(i.fileName || z.value), 1),
273
276
  d("input", {
274
277
  value: i.fileName,
275
278
  onClick: t[0] || (t[0] = V(() => {
276
279
  }, ["stop"])),
277
280
  onInput: (c) => Z(r, c.target.value),
278
281
  class: "col-start-1 row-start-1 w-auto min-w-[2ch] text-sm font-medium text-foreground bg-transparent border-b border-transparent hover:border-border focus:border-primary outline-none transition-colors py-0.5 px-1",
279
- placeholder: D.value
280
- }, null, 40, Fe)
282
+ placeholder: z.value
283
+ }, null, 40, Ae)
281
284
  ]),
282
285
  d("div", {
283
286
  class: "shrink-0 ml-1 text-muted-foreground/50 group-hover/rename:text-foreground transition-colors cursor-text",
@@ -291,16 +294,16 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
291
294
  icon: "lucide:pencil",
292
295
  class: "w-3 h-3"
293
296
  })
294
- ], 8, Se)
295
- ])) : (n(), m("p", Ae, y(i.fileName), 1)),
296
- d("p", Ce, y(J(i.fileSize)), 1)
297
+ ], 8, $e)
298
+ ])) : (n(), m("p", Ce, y(i.fileName), 1)),
299
+ d("p", Te, y(J(i.fileSize)), 1)
297
300
  ]),
298
- d("div", Te, [
299
- o.loading || s.value ? (n(), h(p, {
301
+ d("div", ze, [
302
+ a.loading || s.value ? (n(), h(p, {
300
303
  key: 0,
301
304
  icon: "lucide:loader-2",
302
305
  class: "w-4 h-4 animate-spin text-primary"
303
- })) : o.disabled ? z("", !0) : (n(), h($, {
306
+ })) : a.disabled ? T("", !0) : (n(), h(P, {
304
307
  key: 1,
305
308
  size: "xs",
306
309
  variant: "ghost",
@@ -311,26 +314,26 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
311
314
  }, null, 8, ["onClick"]))
312
315
  ])
313
316
  ], 2))), 128)),
314
- o.multiSelect && (!o.maxFiles || w.value.length < o.maxFiles) ? (n(), m("div", ze, [
315
- F($, {
317
+ a.multiSelect && (!a.maxFiles || w.value.length < a.maxFiles) ? (n(), m("div", De, [
318
+ F(P, {
316
319
  size: "sm",
317
320
  variant: "outline",
318
321
  icon: "lucide:plus",
319
322
  text: R.value,
320
- disabled: o.disabled || o.loading || s.value,
321
- onClick: b
323
+ disabled: a.disabled || a.loading || s.value,
324
+ onClick: x
322
325
  }, null, 8, ["text", "disabled"])
323
- ])) : z("", !0)
326
+ ])) : T("", !0)
324
327
  ])) : (n(), m("div", {
325
328
  key: 0,
326
- class: T(["border-2 bg-body border-dashed border-border rounded-lg p-6 transition-all duration-200 ease-in-out cursor-pointer flex flex-col items-center justify-center text-center gap-2", [
327
- x.value ? "border-primary bg-primary/5" : "hover:border-primary/50 ",
328
- o.disabled || o.loading || s.value ? "opacity-50 cursor-not-allowed" : ""
329
+ class: C(["border-2 bg-body border-dashed border-border rounded-lg p-6 transition-all duration-200 ease-in-out cursor-pointer flex flex-col items-center justify-center text-center gap-2", [
330
+ b.value ? "border-primary bg-primary/5" : "hover:border-primary/50 ",
331
+ a.disabled || a.loading || s.value ? "opacity-50 cursor-not-allowed" : ""
329
332
  ]]),
330
- onClick: b
333
+ onClick: x
331
334
  }, [
332
- d("div", fe, [
333
- o.loading || s.value ? (n(), h(p, {
335
+ d("div", ge, [
336
+ a.loading || s.value ? (n(), h(p, {
334
337
  key: 0,
335
338
  icon: "lucide:loader-2",
336
339
  class: "w-6 h-6 animate-spin"
@@ -340,19 +343,19 @@ const se = { class: "w-full" }, de = ["multiple", "accept"], ue = ["value", "pla
340
343
  class: "w-6 h-6"
341
344
  }))
342
345
  ]),
343
- d("div", me, [
344
- d("p", ge, [
345
- d("span", pe, y(U.value), 1),
346
- ae(" " + y(E.value), 1)
346
+ d("div", pe, [
347
+ d("p", ve, [
348
+ d("span", he, y(U.value), 1),
349
+ oe(" " + y(E.value), 1)
347
350
  ]),
348
- o.fileTypes.length ? (n(), m("p", ve, y(o.fileTypes.join(", ")), 1)) : z("", !0)
351
+ a.fileTypes.length ? (n(), m("p", ye, y(a.fileTypes.join(", ")), 1)) : T("", !0)
349
352
  ])
350
353
  ], 2))
351
- ], 32))
354
+ ], 40, me))
352
355
  ])
353
356
  ]));
354
357
  }
355
358
  });
356
359
  export {
357
- Pe as default
360
+ Me as default
358
361
  };
@@ -0,0 +1,3 @@
1
+ import { FooterProps } from './types';
2
+ declare const _default: import('vue').DefineComponent<FooterProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<FooterProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
3
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import { FooterData, FooterLabels } from './types';
2
+ type __VLS_Props = {
3
+ data: FooterData;
4
+ labels?: FooterLabels;
5
+ containerClass?: string | any[] | Record<string, boolean>;
6
+ };
7
+ type __VLS_PublicProps = {
8
+ 'newsletterEmail'?: string;
9
+ } & __VLS_Props;
10
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
11
+ "update:newsletterEmail": (value: string) => any;
12
+ } & {
13
+ subscribe: (email: string) => any;
14
+ "link-click": (url: string, event: MouseEvent) => any;
15
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
16
+ onSubscribe?: (email: string) => any;
17
+ "onLink-click"?: (url: string, event: MouseEvent) => any;
18
+ "onUpdate:newsletterEmail"?: (value: string) => any;
19
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
20
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import { FooterData, FooterLabels } from './types';
2
+ type __VLS_Props = {
3
+ data: FooterData;
4
+ labels?: FooterLabels;
5
+ containerClass?: string | any[] | Record<string, boolean>;
6
+ };
7
+ type __VLS_PublicProps = {
8
+ 'newsletterEmail'?: string;
9
+ } & __VLS_Props;
10
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
11
+ "update:newsletterEmail": (value: string) => any;
12
+ } & {
13
+ subscribe: (email: string) => any;
14
+ "link-click": (url: string, event: MouseEvent) => any;
15
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
16
+ onSubscribe?: (email: string) => any;
17
+ "onLink-click"?: (url: string, event: MouseEvent) => any;
18
+ "onUpdate:newsletterEmail"?: (value: string) => any;
19
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
20
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { FooterData, FooterLabels } from './types';
2
+ type __VLS_Props = {
3
+ data: FooterData;
4
+ labels?: FooterLabels;
5
+ containerClass?: string | any[] | Record<string, boolean>;
6
+ };
7
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
8
+ "link-click": (url: string, event: MouseEvent) => any;
9
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ "onLink-click"?: (url: string, event: MouseEvent) => any;
11
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
12
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export { default as Footer } from './Footer.vue';
2
+ export * from './types';
@@ -0,0 +1,73 @@
1
+ export type FooterVariant = 'Variant1' | 'Variant2' | 'Variant3';
2
+ export interface FooterSocialLink {
3
+ /** Iconify icon name (e.g., 'lucide:instagram') or image URL */
4
+ icon: string;
5
+ /** Full URL for the social link */
6
+ url: string;
7
+ /** Accessible label for screen readers (e.g., 'Instagram') */
8
+ label?: string;
9
+ }
10
+ export interface FooterLink {
11
+ /** Display text for the link */
12
+ label: string;
13
+ /** Full URL (href) */
14
+ url: string;
15
+ /** If true, link opens in a new tab with rel="noopener noreferrer" */
16
+ external?: boolean;
17
+ /** Optional leading icon (Iconify name or image URL) */
18
+ icon?: string;
19
+ }
20
+ export interface FooterLinkGroup {
21
+ /** Column heading (e.g., 'Product', 'Company', 'Resources') */
22
+ title: string;
23
+ /** Array of links in this group */
24
+ links: FooterLink[];
25
+ }
26
+ export interface FooterNewsletterConfig {
27
+ /** Title text (e.g., "Stay updated") */
28
+ title?: string;
29
+ /** Description text (e.g., "Subscribe to our newsletter for the latest updates.") */
30
+ description?: string;
31
+ /** Input placeholder text */
32
+ placeholder?: string;
33
+ /** Submit button text */
34
+ buttonText?: string;
35
+ }
36
+ export interface FooterData {
37
+ /** Company / brand name displayed in the footer */
38
+ brandName?: string;
39
+ /** URL to brand logo image, or an Iconify icon name */
40
+ brandLogo?: string;
41
+ /** Brand tagline or short description */
42
+ brandDescription?: string;
43
+ /** Column-based link groups (e.g., Product, Company, Resources) */
44
+ linkGroups?: FooterLinkGroup[];
45
+ /** Social media icon links (rendered as icon buttons) */
46
+ socialLinks?: FooterSocialLink[];
47
+ /** Copyright text (e.g., '© 2024 Acme Inc. All rights reserved.') */
48
+ copyright?: string;
49
+ /** Legal links displayed in the bottom bar (e.g., Terms, Privacy Policy) */
50
+ legalLinks?: FooterLink[];
51
+ /** Newsletter subscription section configuration */
52
+ newsletter?: FooterNewsletterConfig;
53
+ /** Small badge text near brand (e.g., version number, status) */
54
+ badge?: string;
55
+ }
56
+ export interface FooterLabels {
57
+ /** Replaces the default "Follow us" heading above social icons */
58
+ followUs?: string;
59
+ /** Replaces the default "Subscribe" button text */
60
+ subscribe?: string;
61
+ /** Replaces the default "Newsletter" heading */
62
+ newsletter?: string;
63
+ }
64
+ export interface FooterProps {
65
+ /** The complete footer data object (required) */
66
+ data: FooterData;
67
+ /** Visual style variant */
68
+ variant?: FooterVariant;
69
+ /** Custom text label overrides for static UI strings */
70
+ labels?: FooterLabels;
71
+ /** Custom CSS class for the root container */
72
+ containerClass?: string | any[] | Record<string, boolean>;
73
+ }
@@ -9,6 +9,7 @@ interface Props {
9
9
  size?: InputSize;
10
10
  rounded?: InputRounded;
11
11
  disabled?: boolean;
12
+ readonly?: boolean;
12
13
  draggable?: boolean;
13
14
  minRows?: number;
14
15
  maxRows?: number;
@@ -33,6 +34,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
33
34
  variant: InputVariant;
34
35
  size: InputSize;
35
36
  rounded: InputRounded;
37
+ readonly: boolean;
36
38
  disabled: boolean;
37
39
  isUpdate: boolean;
38
40
  modelValue: Record<string, any>[];
@@ -1,7 +1,7 @@
1
1
  import o from "./CustomFields.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../../_virtual/_plugin-vue_export-helper.js";
4
- const r = /* @__PURE__ */ t(o, [["__scopeId", "data-v-3e1f26ae"]]);
4
+ const r = /* @__PURE__ */ t(o, [["__scopeId", "data-v-6aede99c"]]);
5
5
  export {
6
6
  r as default
7
7
  };