vlite3 0.7.15 → 0.8.2
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/components/Accordion/Accordion.vue.js +35 -22
- package/components/Accordion/AccordionContent.vue.js +2 -2
- package/components/Accordion/AccordionContent.vue2.js +1 -1
- package/components/Breadcrumb/Breadcrumb.vue.js +2 -2
- package/components/Breadcrumb/Breadcrumb.vue2.js +44 -44
- package/components/Carousel/Carousel.vue.js +1 -1
- package/components/Carousel/Carousel.vue2.js +3 -3
- package/components/ColorPicker/ColorIro.vue3.js +2 -2
- package/components/ColorPicker/ColorPicker.vue.js +2 -2
- package/components/CommandPalette/CommandPaletteContent.vue.js +1 -1
- package/components/CommandPalette/CommandPaletteContent.vue2.js +2 -2
- package/components/Dropdown/DropdownTrigger.vue.js +1 -1
- package/components/FilePicker/FilePicker.vue.js +16 -16
- package/components/FileTree/FileTree.vue.js +5 -147
- package/components/FileTree/FileTree.vue2.js +164 -2
- package/components/FileTree/FileTreeNode.vue.js +89 -84
- package/components/Form/CustomFields.vue.js +2 -2
- package/components/Form/CustomFields.vue2.js +1 -1
- package/components/Form/Form.vue.js +1 -1
- package/components/Form/Form.vue2.js +133 -129
- package/components/Form/FormField.vue.d.ts +3 -0
- package/components/Form/FormField.vue.js +85 -82
- package/components/Form/FormFields.vue.d.ts +2 -0
- package/components/Form/FormFields.vue.js +2 -2
- package/components/Form/FormFields.vue2.js +55 -52
- package/components/Form/composables/useForm.d.ts +2 -0
- package/components/Form/composables/useForm.js +113 -107
- package/components/ImportData/ImportData.vue.js +157 -142
- package/components/ImportData/ImportStep1.vue.d.ts +6 -0
- package/components/ImportData/ImportStep1.vue.js +69 -61
- package/components/ImportData/ImportStep2.vue.js +5 -98
- package/components/ImportData/ImportStep2.vue2.js +105 -2
- package/components/Kanban/Kanban.vue.js +1 -1
- package/components/Kanban/Kanban.vue2.js +1 -1
- package/components/Kanban/KanbanBoard.vue.js +1 -1
- package/components/Kanban/KanbanBoard.vue2.js +92 -83
- package/components/Kanban/useKanbanBoard.d.ts +1 -1
- package/components/Kanban/useKanbanBoard.js +17 -17
- package/components/List/ListFieldRow.vue.js +4 -6
- package/components/MultiSelect/MultiSelect.vue.js +10 -4
- package/components/NavbarCommandPalette.vue.js +2 -2
- package/components/NumberInput.vue.js +2 -2
- package/components/NumberInput.vue2.js +1 -1
- package/components/PermissionMatrix/PermissionEditor.vue.d.ts +2 -0
- package/components/PermissionMatrix/PermissionEditor.vue.js +25 -23
- package/components/PermissionMatrix/PermissionEditorMatrix.vue.d.ts +4 -1
- package/components/PermissionMatrix/PermissionEditorMatrix.vue.js +2 -2
- package/components/PermissionMatrix/PermissionEditorMatrix.vue2.js +48 -45
- package/components/Screen/ScreenFilter.vue.js +1 -1
- package/components/Timeline/Timeline.vue.js +62 -57
- package/components/ToastNotification.vue.js +2 -2
- package/components/ToastNotification.vue2.js +103 -88
- package/components/Workbook/Workbook.vue.js +5 -152
- package/components/Workbook/Workbook.vue2.js +166 -2
- package/package.json +1 -1
- package/style.css +3 -3
- /package/components/ColorPicker/{ColorIro.vue2.js → ColorIro.vue.js} +0 -0
|
@@ -1,100 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import "
|
|
4
|
-
|
|
5
|
-
/* empty css */
|
|
6
|
-
/* empty css */
|
|
7
|
-
import I from "../CheckBox.vue.js";
|
|
8
|
-
const O = { class: "space-y-6" }, j = { class: "font-medium text-lg mb-1" }, E = { class: "text-sm text-muted-foreground" }, P = { class: "border border-border rounded-xl overflow-hidden" }, R = { class: "overflow-x-auto max-h-[400px]" }, U = { class: "w-full text-sm text-left" }, q = { class: "text-xs text-muted-foreground uppercase bg-muted sticky top-0 z-10" }, L = { class: "px-4 py-3 font-medium" }, W = { class: "px-4 py-3 font-medium" }, G = { class: "px-4 py-3 font-medium" }, J = { class: "divide-y divide-border" }, K = { class: "px-4 py-3 font-medium text-foreground whitespace-nowrap" }, Q = { class: "px-4 py-2 min-w-[200px]" }, T = {
|
|
9
|
-
key: 1,
|
|
10
|
-
class: "text-xs italic text-muted-foreground"
|
|
11
|
-
}, X = { class: "px-4 py-3 text-muted-foreground min-w-[200px] max-w-[300px]" }, Y = {
|
|
12
|
-
key: 0,
|
|
13
|
-
class: "space-y-1"
|
|
14
|
-
}, Z = { class: "px-4 py-3 text-center align-middle" }, ee = { class: "flex justify-center items-center h-full" }, te = {
|
|
15
|
-
key: 0,
|
|
16
|
-
class: "text-center text-sm text-warning font-medium p-4 bg-warning/10 rounded-lg border border-warning/20"
|
|
17
|
-
}, ce = /* @__PURE__ */ H({
|
|
18
|
-
__name: "ImportStep2",
|
|
19
|
-
props: {
|
|
20
|
-
headers: {},
|
|
21
|
-
preview: {},
|
|
22
|
-
mappings: {},
|
|
23
|
-
availableFields: {}
|
|
24
|
-
},
|
|
25
|
-
emits: ["next", "prev", "update:mappings"],
|
|
26
|
-
setup(p, { emit: g }) {
|
|
27
|
-
const u = p, _ = g, n = M([]), c = (t, i) => {
|
|
28
|
-
const s = B(t);
|
|
29
|
-
return s !== t ? s : i;
|
|
30
|
-
}, f = r(() => u.headers.filter((t) => u.mappings[t] !== "")), h = (t) => {
|
|
31
|
-
const i = { ...u.mappings };
|
|
32
|
-
n.value.includes(t) ? n.value = n.value.filter((d) => d !== t) : n.value.push(t), i[t] !== "" && (i[t] = ""), _("update:mappings", i);
|
|
33
|
-
}, y = () => u.availableFields.map((t) => ({
|
|
34
|
-
label: t.required ? `${t.label} *` : t.label,
|
|
35
|
-
value: t.value
|
|
36
|
-
})), w = r(() => c("vlite.importData.assignFields", "Assign Fields")), b = r(() => c("vlite.importData.assignDesc", "Match your CSV columns to the correct system fields.")), k = r(() => c("vlite.importData.csvHeader", "CSV Header")), D = r(() => c("vlite.importData.fieldMapping", "System Field")), S = r(() => c("vlite.importData.preview", "Data Preview")), F = r(() => c("vlite.importData.noHeaders", "No headers mapped. Data will not be imported properly."));
|
|
37
|
-
return (t, i) => (o(), l("div", O, [
|
|
38
|
-
e("div", null, [
|
|
39
|
-
e("h4", j, a(w.value), 1),
|
|
40
|
-
e("p", E, a(b.value), 1)
|
|
41
|
-
]),
|
|
42
|
-
e("div", P, [
|
|
43
|
-
e("div", R, [
|
|
44
|
-
e("table", U, [
|
|
45
|
-
e("thead", q, [
|
|
46
|
-
e("tr", null, [
|
|
47
|
-
e("th", L, a(k.value), 1),
|
|
48
|
-
e("th", W, a(D.value), 1),
|
|
49
|
-
e("th", G, a(S.value), 1),
|
|
50
|
-
i[0] || (i[0] = e("th", { class: "px-4 py-3 font-medium text-center w-16" }, "Ignore", -1))
|
|
51
|
-
])
|
|
52
|
-
]),
|
|
53
|
-
e("tbody", J, [
|
|
54
|
-
(o(!0), l(m, null, v(p.headers, (s) => (o(), l("tr", {
|
|
55
|
-
key: s,
|
|
56
|
-
class: N(n.value.includes(s) ? "bg-muted/30 opacity-60" : "hover:bg-muted/10")
|
|
57
|
-
}, [
|
|
58
|
-
e("td", K, a(s), 1),
|
|
59
|
-
e("td", Q, [
|
|
60
|
-
n.value.includes(s) ? (o(), l("span", T, "Ignored")) : (o(), V($(A), {
|
|
61
|
-
key: 0,
|
|
62
|
-
class: "w-full",
|
|
63
|
-
options: y(),
|
|
64
|
-
selected: p.mappings[s],
|
|
65
|
-
placeholder: "Select Field",
|
|
66
|
-
variant: "outline",
|
|
67
|
-
showCaret: "",
|
|
68
|
-
"btn-props": { class: "w-full justify-between" },
|
|
69
|
-
onOnSelect: (d) => p.mappings[s] = d.value
|
|
70
|
-
}, null, 8, ["options", "selected", "onOnSelect"]))
|
|
71
|
-
]),
|
|
72
|
-
e("td", X, [
|
|
73
|
-
n.value.includes(s) ? x("", !0) : (o(), l("div", Y, [
|
|
74
|
-
(o(!0), l(m, null, v(p.preview, (d, C) => (o(), l("div", {
|
|
75
|
-
key: C,
|
|
76
|
-
class: "truncate text-xs"
|
|
77
|
-
}, a(String(d[s] || "").slice(0, 50)), 1))), 128))
|
|
78
|
-
]))
|
|
79
|
-
]),
|
|
80
|
-
e("td", Z, [
|
|
81
|
-
e("div", ee, [
|
|
82
|
-
z(I, {
|
|
83
|
-
checked: n.value.includes(s),
|
|
84
|
-
"onUpdate:checked": (d) => h(s),
|
|
85
|
-
size: "sm"
|
|
86
|
-
}, null, 8, ["checked", "onUpdate:checked"])
|
|
87
|
-
])
|
|
88
|
-
])
|
|
89
|
-
], 2))), 128))
|
|
90
|
-
])
|
|
91
|
-
])
|
|
92
|
-
])
|
|
93
|
-
]),
|
|
94
|
-
f.value.length === 0 ? (o(), l("div", te, a(F.value), 1)) : x("", !0)
|
|
95
|
-
]));
|
|
96
|
-
}
|
|
97
|
-
});
|
|
1
|
+
import o from "./ImportStep2.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-cfd99cc9"]]);
|
|
98
5
|
export {
|
|
99
|
-
|
|
6
|
+
m as default
|
|
100
7
|
};
|
|
@@ -1,4 +1,107 @@
|
|
|
1
|
-
import f from "
|
|
1
|
+
import { defineComponent as $, ref as A, computed as c, openBlock as n, createElementBlock as a, createElementVNode as e, toDisplayString as r, Fragment as f, renderList as x, isMemoSame as B, normalizeClass as I, createBlock as O, unref as j, createCommentVNode as b, createVNode as z } from "vue";
|
|
2
|
+
import E from "../Dropdown/Dropdown.vue.js";
|
|
3
|
+
import "@iconify/vue";
|
|
4
|
+
import { $t as P } from "../../utils/i18n.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
/* empty css */
|
|
7
|
+
import R from "../CheckBox.vue.js";
|
|
8
|
+
const U = { class: "space-y-6" }, q = { class: "font-medium text-lg mb-1" }, L = { class: "text-sm text-muted-foreground" }, W = { class: "border border-border rounded-xl overflow-hidden" }, G = { class: "overflow-x-auto max-h-[400px]" }, J = { class: "import-table" }, K = { class: "import-thead" }, Q = { class: "import-th" }, T = { class: "import-th" }, X = { class: "import-th" }, Y = { class: "import-tbody" }, Z = { class: "import-td-header" }, tt = { class: "import-td-dropdown" }, et = {
|
|
9
|
+
key: 1,
|
|
10
|
+
class: "text-xs italic text-muted-foreground"
|
|
11
|
+
}, st = { class: "import-td-preview" }, ot = {
|
|
12
|
+
key: 0,
|
|
13
|
+
class: "space-y-1"
|
|
14
|
+
}, it = { class: "import-td-action" }, nt = { class: "flex justify-center items-center h-full" }, lt = {
|
|
15
|
+
key: 0,
|
|
16
|
+
class: "text-center text-sm text-warning font-medium p-4 bg-warning/10 rounded-lg border border-warning/20"
|
|
17
|
+
}, gt = /* @__PURE__ */ $({
|
|
18
|
+
__name: "ImportStep2",
|
|
19
|
+
props: {
|
|
20
|
+
headers: {},
|
|
21
|
+
preview: {},
|
|
22
|
+
mappings: {},
|
|
23
|
+
availableFields: {}
|
|
24
|
+
},
|
|
25
|
+
emits: ["next", "prev", "update:mappings"],
|
|
26
|
+
setup(l, { emit: w }) {
|
|
27
|
+
const m = l, v = w, o = A([]), d = (s, i) => {
|
|
28
|
+
const t = P(s);
|
|
29
|
+
return t !== s ? t : i;
|
|
30
|
+
}, y = c(() => m.headers.filter((s) => m.mappings[s] !== "")), k = (s) => {
|
|
31
|
+
const i = { ...m.mappings };
|
|
32
|
+
o.value.includes(s) ? o.value = o.value.filter((g) => g !== s) : o.value.push(s), i[s] !== "" && (i[s] = ""), v("update:mappings", i);
|
|
33
|
+
}, D = () => m.availableFields.map((s) => ({
|
|
34
|
+
label: s.required ? `${s.label} *` : s.label,
|
|
35
|
+
value: s.value
|
|
36
|
+
})), S = c(() => d("vlite.importData.assignFields", "Assign Fields")), F = c(() => d("vlite.importData.assignDesc", "Match your CSV columns to the correct system fields.")), C = c(() => d("vlite.importData.csvHeader", "CSV Header")), H = c(() => d("vlite.importData.fieldMapping", "System Field")), M = c(() => d("vlite.importData.preview", "Data Preview")), N = c(() => d("vlite.importData.noHeaders", "No headers mapped. Data will not be imported properly."));
|
|
37
|
+
return (s, i) => (n(), a("div", U, [
|
|
38
|
+
e("div", null, [
|
|
39
|
+
e("h4", q, r(S.value), 1),
|
|
40
|
+
e("p", L, r(F.value), 1)
|
|
41
|
+
]),
|
|
42
|
+
e("div", W, [
|
|
43
|
+
e("div", G, [
|
|
44
|
+
e("table", J, [
|
|
45
|
+
e("thead", K, [
|
|
46
|
+
e("tr", null, [
|
|
47
|
+
e("th", Q, r(C.value), 1),
|
|
48
|
+
e("th", T, r(H.value), 1),
|
|
49
|
+
e("th", X, r(M.value), 1),
|
|
50
|
+
i[2] || (i[2] = e("th", { class: "import-th import-th-center" }, "Ignore", -1))
|
|
51
|
+
])
|
|
52
|
+
]),
|
|
53
|
+
e("tbody", Y, [
|
|
54
|
+
(n(!0), a(f, null, x(l.headers, (t, g, at, u) => {
|
|
55
|
+
const _ = [t, o.value.includes(t), l.mappings[t], l.preview.map((p) => p[t])];
|
|
56
|
+
if (u && u.key === t && B(u, _)) return u;
|
|
57
|
+
const h = (n(), a("tr", {
|
|
58
|
+
key: t,
|
|
59
|
+
class: I(["import-tr", o.value.includes(t) ? "import-tr-ignored" : "import-tr-active"])
|
|
60
|
+
}, [
|
|
61
|
+
e("td", Z, r(t), 1),
|
|
62
|
+
e("td", tt, [
|
|
63
|
+
o.value.includes(t) ? (n(), a("span", et, "Ignored")) : (n(), O(j(E), {
|
|
64
|
+
key: 0,
|
|
65
|
+
class: "w-full",
|
|
66
|
+
options: D(),
|
|
67
|
+
selected: l.mappings[t],
|
|
68
|
+
placeholder: "Select Field",
|
|
69
|
+
variant: "outline",
|
|
70
|
+
showCaret: "",
|
|
71
|
+
"btn-props": { class: "w-full justify-between" },
|
|
72
|
+
onOnSelect: (p) => {
|
|
73
|
+
l.mappings[t] = p.value, v("update:mappings", { ...l.mappings });
|
|
74
|
+
}
|
|
75
|
+
}, null, 8, ["options", "selected", "onOnSelect"]))
|
|
76
|
+
]),
|
|
77
|
+
e("td", st, [
|
|
78
|
+
o.value.includes(t) ? b("", !0) : (n(), a("div", ot, [
|
|
79
|
+
(n(!0), a(f, null, x(l.preview, (p, V) => (n(), a("div", {
|
|
80
|
+
key: V,
|
|
81
|
+
class: "truncate text-xs"
|
|
82
|
+
}, r(String(p[t] || "").slice(0, 50)), 1))), 128))
|
|
83
|
+
]))
|
|
84
|
+
]),
|
|
85
|
+
e("td", it, [
|
|
86
|
+
e("div", nt, [
|
|
87
|
+
z(R, {
|
|
88
|
+
checked: o.value.includes(t),
|
|
89
|
+
"onUpdate:checked": (p) => k(t),
|
|
90
|
+
size: "sm"
|
|
91
|
+
}, null, 8, ["checked", "onUpdate:checked"])
|
|
92
|
+
])
|
|
93
|
+
])
|
|
94
|
+
], 2));
|
|
95
|
+
return h.memo = _, h;
|
|
96
|
+
}, i, 0), 128))
|
|
97
|
+
])
|
|
98
|
+
])
|
|
99
|
+
])
|
|
100
|
+
]),
|
|
101
|
+
y.value.length === 0 ? (n(), a("div", lt, r(N.value), 1)) : b("", !0)
|
|
102
|
+
]));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
2
105
|
export {
|
|
3
|
-
|
|
106
|
+
gt as default
|
|
4
107
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import o from "./Kanban.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import t from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-
|
|
4
|
+
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-1285df4f"]]);
|
|
5
5
|
export {
|
|
6
6
|
m as default
|
|
7
7
|
};
|
|
@@ -23,7 +23,7 @@ const K = /* @__PURE__ */ b({
|
|
|
23
23
|
s.data && u("update:data", { ...s.data, [e]: c });
|
|
24
24
|
}, h = (e) => s.data ? s.data[e] || [] : [];
|
|
25
25
|
return (e, c) => (n(), m("div", {
|
|
26
|
-
class: C(["flex gap-4 overflow-x-auto p-1 custom-scrollbar-x", s.class])
|
|
26
|
+
class: C(["flex gap-4 overflow-x-auto p-1 custom-scrollbar-x scrollable-container", s.class])
|
|
27
27
|
}, [
|
|
28
28
|
(n(!0), m(p, null, y(a.columns, (l) => (n(), k(v, {
|
|
29
29
|
key: l.id,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import o from "./KanbanBoard.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import a from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const p = /* @__PURE__ */ a(o, [["__scopeId", "data-v-
|
|
4
|
+
const p = /* @__PURE__ */ a(o, [["__scopeId", "data-v-3a733454"]]);
|
|
5
5
|
export {
|
|
6
6
|
p as default
|
|
7
7
|
};
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { VueDraggable as
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const O = { class: "flex items-center justify-between font-semibold text-foreground" }, T = {
|
|
1
|
+
import { defineComponent as T, defineAsyncComponent as V, ref as j, watch as z, onMounted as A, computed as F, openBlock as d, createElementBlock as i, normalizeClass as m, createElementVNode as r, renderSlot as g, unref as n, toDisplayString as y, setBlockTracking as v, Fragment as f, renderList as h, createVNode as x, withCtx as H, isMemoSame as J, createCommentVNode as O } from "vue";
|
|
2
|
+
import { VueDraggable as R } from "vue-draggable-plus";
|
|
3
|
+
import { useKanbanBoard as q } from "./useKanbanBoard.js";
|
|
4
|
+
import { $t as G } from "../../utils/i18n.js";
|
|
5
|
+
const P = { class: "flex items-center justify-between font-semibold text-foreground" }, Q = {
|
|
7
6
|
key: 0,
|
|
8
7
|
class: "flex-1 flex flex-col gap-3 min-h-[50px] py-1"
|
|
9
|
-
},
|
|
8
|
+
}, W = { class: "bg-body p-3 rounded-md shadow-sm border border-border text-sm" }, X = {
|
|
10
9
|
key: 0,
|
|
11
10
|
class: "py-4 flex justify-center shrink-0"
|
|
12
|
-
},
|
|
11
|
+
}, te = /* @__PURE__ */ T({
|
|
13
12
|
__name: "KanbanBoard",
|
|
14
13
|
props: {
|
|
15
14
|
column: {},
|
|
@@ -24,112 +23,122 @@ const O = { class: "flex items-center justify-between font-semibold text-foregro
|
|
|
24
23
|
ghostClass: {}
|
|
25
24
|
},
|
|
26
25
|
emits: ["change", "update:columnData"],
|
|
27
|
-
setup(
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
),
|
|
33
|
-
|
|
26
|
+
setup(o, { emit: C }) {
|
|
27
|
+
const k = V(() => import("../Spinner/Spinner.vue2.js")), l = o, u = C, D = j(null), { items: s, isInitialLoading: I, isLoadingMore: S, pageInfo: w, loadInitial: B, loadMore: K } = q(
|
|
28
|
+
l.column.id,
|
|
29
|
+
l.loadData,
|
|
30
|
+
l.columnData
|
|
31
|
+
), N = (e) => {
|
|
32
|
+
s.value = e, u("update:columnData", e);
|
|
34
33
|
};
|
|
35
|
-
|
|
36
|
-
() =>
|
|
34
|
+
z(
|
|
35
|
+
() => l.columnData,
|
|
37
36
|
(e) => {
|
|
38
|
-
e && JSON.stringify(e) !== JSON.stringify(
|
|
37
|
+
e && JSON.stringify(e) !== JSON.stringify(s.value) && (s.value = [...e]);
|
|
39
38
|
},
|
|
40
39
|
{ deep: !0 }
|
|
41
|
-
),
|
|
42
|
-
|
|
40
|
+
), A(() => {
|
|
41
|
+
l.loadData && (!l.columnData || l.columnData.length === 0) && B();
|
|
43
42
|
});
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
|
|
43
|
+
const $ = (e) => {
|
|
44
|
+
const t = e.target;
|
|
45
|
+
t.scrollTop + t.clientHeight >= t.scrollHeight - 50 && K();
|
|
46
|
+
}, M = (e) => {
|
|
47
|
+
u("change", { type: "add", event: e, columnId: l.column.id });
|
|
48
|
+
}, U = (e) => {
|
|
49
|
+
u("change", { type: "remove", event: e, columnId: l.column.id });
|
|
50
|
+
}, E = (e) => {
|
|
51
|
+
u("change", { type: "update", event: e, columnId: l.column.id });
|
|
52
|
+
}, L = F(
|
|
53
|
+
() => l.column.titleI18n ? G(l.column.titleI18n) : l.column.title
|
|
54
|
+
);
|
|
55
|
+
return (e, t) => (d(), i("div", {
|
|
56
|
+
class: m([
|
|
56
57
|
"flex flex-col bg-card rounded-lg overflow-hidden shrink-0 border border-border/60",
|
|
57
|
-
|
|
58
|
+
o.boardClass || "w-80"
|
|
58
59
|
])
|
|
59
60
|
}, [
|
|
60
|
-
|
|
61
|
-
class:
|
|
61
|
+
r("div", {
|
|
62
|
+
class: m(["p-3 border-b border-border/80 ", o.headerClass])
|
|
62
63
|
}, [
|
|
63
|
-
|
|
64
|
-
column:
|
|
65
|
-
pageInfo:
|
|
64
|
+
g(e.$slots, "header", {
|
|
65
|
+
column: o.column,
|
|
66
|
+
pageInfo: n(w)
|
|
66
67
|
}, () => [
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
r("div", P, [
|
|
69
|
+
r("span", null, y(L.value), 1)
|
|
69
70
|
])
|
|
70
71
|
], !0)
|
|
71
72
|
], 2),
|
|
72
|
-
|
|
73
|
+
r("div", {
|
|
73
74
|
ref_key: "scrollContainer",
|
|
74
|
-
ref:
|
|
75
|
-
class:
|
|
76
|
-
|
|
75
|
+
ref: D,
|
|
76
|
+
class: m([
|
|
77
|
+
"flex-1 flex flex-col overflow-y-auto p-3 custom-scrollbar scrollable-container",
|
|
78
|
+
o.bodyClass
|
|
79
|
+
]),
|
|
80
|
+
onScroll: $
|
|
77
81
|
}, [
|
|
78
|
-
|
|
79
|
-
(
|
|
80
|
-
key: "skeleton-" +
|
|
82
|
+
n(I) && n(s).length === 0 ? (d(), i("div", Q, [
|
|
83
|
+
t[0] || (v(-1, !0), (t[0] = (d(), i(f, null, h(3, (a) => r("div", {
|
|
84
|
+
key: "skeleton-" + a,
|
|
81
85
|
class: "bg-body p-3 rounded-md shadow-sm border border-border animate-pulse flex flex-col gap-3"
|
|
82
|
-
}, [...
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
])])), 64))
|
|
86
|
-
])) : (
|
|
87
|
-
|
|
88
|
-
column:
|
|
89
|
-
items:
|
|
86
|
+
}, [...t[3] || (t[3] = [
|
|
87
|
+
r("div", { class: "h-4 bg-muted/60 rounded w-2/3" }, null, -1),
|
|
88
|
+
r("div", { class: "h-3 bg-muted/60 rounded w-1/3" }, null, -1)
|
|
89
|
+
])])), 64))).cacheIndex = 0, v(1), t[0])
|
|
90
|
+
])) : (d(), i(f, { key: 1 }, [
|
|
91
|
+
g(e.$slots, "prepend-item", {
|
|
92
|
+
column: o.column,
|
|
93
|
+
items: n(s)
|
|
90
94
|
}, void 0, !0),
|
|
91
|
-
|
|
92
|
-
"model-value":
|
|
93
|
-
"onUpdate:modelValue":
|
|
94
|
-
group:
|
|
95
|
+
x(n(R), {
|
|
96
|
+
"model-value": n(s),
|
|
97
|
+
"onUpdate:modelValue": N,
|
|
98
|
+
group: o.group,
|
|
95
99
|
animation: 150,
|
|
96
|
-
ghostClass:
|
|
97
|
-
class:
|
|
98
|
-
onAdd:
|
|
99
|
-
onRemove:
|
|
100
|
-
onUpdate:
|
|
100
|
+
ghostClass: o.ghostClass || "kanban-ghost",
|
|
101
|
+
class: m(["flex-1 flex flex-col gap-2 min-h-[50px] py-1", o.draggableClass]),
|
|
102
|
+
onAdd: M,
|
|
103
|
+
onRemove: U,
|
|
104
|
+
onUpdate: E
|
|
101
105
|
}, {
|
|
102
|
-
default:
|
|
103
|
-
(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
106
|
+
default: H(() => [
|
|
107
|
+
(d(!0), i(f, null, h(n(s), (a, Y, Z, c) => {
|
|
108
|
+
const b = [a];
|
|
109
|
+
if (c && c.key === a[o.itemKey || "id"] && J(c, b)) return c;
|
|
110
|
+
const p = (d(), i("div", {
|
|
111
|
+
key: a[o.itemKey || "id"],
|
|
112
|
+
class: "cursor-grab active:cursor-grabbing"
|
|
113
|
+
}, [
|
|
114
|
+
g(e.$slots, "item", {
|
|
115
|
+
item: a,
|
|
116
|
+
column: o.column
|
|
117
|
+
}, () => [
|
|
118
|
+
r("div", W, y(a.title || a.name || a.id), 1)
|
|
119
|
+
], !0)
|
|
120
|
+
]));
|
|
121
|
+
return p.memo = b, p;
|
|
122
|
+
}, t, 1), 128))
|
|
114
123
|
]),
|
|
115
124
|
_: 3
|
|
116
125
|
}, 8, ["model-value", "group", "ghostClass", "class"]),
|
|
117
|
-
|
|
118
|
-
column:
|
|
119
|
-
items:
|
|
126
|
+
g(e.$slots, "append-item", {
|
|
127
|
+
column: o.column,
|
|
128
|
+
items: n(s)
|
|
120
129
|
}, void 0, !0),
|
|
121
|
-
|
|
122
|
-
|
|
130
|
+
n(S) ? (d(), i("div", X, [
|
|
131
|
+
x(n(k), {
|
|
123
132
|
size: "sm",
|
|
124
133
|
variant: "dots",
|
|
125
134
|
color: "primary"
|
|
126
135
|
})
|
|
127
|
-
])) :
|
|
136
|
+
])) : O("", !0)
|
|
128
137
|
], 64))
|
|
129
138
|
], 34)
|
|
130
139
|
], 2));
|
|
131
140
|
}
|
|
132
141
|
});
|
|
133
142
|
export {
|
|
134
|
-
|
|
143
|
+
te as default
|
|
135
144
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { KanbanLoadDataResult } from './types';
|
|
2
2
|
export declare function useKanbanBoard(columnId: string | number, loadDataFn?: (columnId: string | number, page: number) => Promise<KanbanLoadDataResult>, initialData?: any[]): {
|
|
3
|
-
items: import('vue').
|
|
3
|
+
items: import('vue').ShallowRef<any[], any[]>;
|
|
4
4
|
isInitialLoading: import('vue').Ref<boolean, boolean>;
|
|
5
5
|
isLoadingMore: import('vue').Ref<boolean, boolean>;
|
|
6
6
|
pageInfo: {
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { ref as
|
|
2
|
-
function
|
|
3
|
-
const
|
|
1
|
+
import { shallowRef as g, ref as c, reactive as u } from "vue";
|
|
2
|
+
function P(l, a, o) {
|
|
3
|
+
const r = g(o ? [...o] : []), s = c(!1), n = c(!1), t = u({
|
|
4
4
|
currentPage: 1,
|
|
5
5
|
totalPages: 1,
|
|
6
|
-
totalItems:
|
|
6
|
+
totalItems: o ? o.length : 0
|
|
7
7
|
});
|
|
8
8
|
return {
|
|
9
|
-
items:
|
|
10
|
-
isInitialLoading:
|
|
11
|
-
isLoadingMore:
|
|
9
|
+
items: r,
|
|
10
|
+
isInitialLoading: s,
|
|
11
|
+
isLoadingMore: n,
|
|
12
12
|
pageInfo: t,
|
|
13
13
|
loadInitial: async () => {
|
|
14
14
|
if (a) {
|
|
15
|
-
|
|
15
|
+
s.value = !0;
|
|
16
16
|
try {
|
|
17
|
-
const e = await a(
|
|
18
|
-
|
|
17
|
+
const e = await a(l, 1);
|
|
18
|
+
r.value = e.items, t.currentPage = e.pageInfo.currentPage, t.totalPages = e.pageInfo.totalPages, t.totalItems = e.pageInfo.totalItems;
|
|
19
19
|
} catch (e) {
|
|
20
20
|
console.error(e);
|
|
21
21
|
} finally {
|
|
22
|
-
|
|
22
|
+
s.value = !1;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
loadMore: async () => {
|
|
27
|
-
if (!(!a ||
|
|
28
|
-
|
|
27
|
+
if (!(!a || s.value || n.value) && !(t.currentPage >= t.totalPages)) {
|
|
28
|
+
n.value = !0;
|
|
29
29
|
try {
|
|
30
|
-
const e = await a(
|
|
31
|
-
|
|
30
|
+
const e = await a(l, t.currentPage + 1);
|
|
31
|
+
r.value = [...r.value, ...e.items], t.currentPage = e.pageInfo.currentPage, t.totalPages = e.pageInfo.totalPages, t.totalItems = e.pageInfo.totalItems;
|
|
32
32
|
} catch (e) {
|
|
33
33
|
console.error(e);
|
|
34
34
|
} finally {
|
|
35
|
-
|
|
35
|
+
n.value = !1;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
export {
|
|
42
|
-
|
|
42
|
+
P as useKanbanBoard
|
|
43
43
|
};
|
|
@@ -4,21 +4,21 @@ import b from "../Price/Price.vue.js";
|
|
|
4
4
|
import h from "../Date/Date.vue.js";
|
|
5
5
|
import { $t as I } from "../../utils/i18n.js";
|
|
6
6
|
import { getObjectValue as N, formatNumber as Y, getStatusColorClass as F } from "./utils.js";
|
|
7
|
-
const A = { class: "flex items-center gap-
|
|
7
|
+
const A = { class: "flex items-center gap-2 min-w-0" }, E = { class: "text-xs font-normal text-muted-foreground leading-snug truncate" }, O = { class: "min-w-0" }, z = {
|
|
8
8
|
key: 2,
|
|
9
9
|
class: "flex items-center gap-1.5"
|
|
10
10
|
}, R = ["innerHTML"], q = {
|
|
11
11
|
key: 1,
|
|
12
12
|
class: "text-sm font-semibold text-foreground tracking-widest select-none",
|
|
13
13
|
"aria-hidden": "true"
|
|
14
|
-
}, G = ["aria-label"], J = ["src", "alt"], K = ["innerHTML"], P = { class: "flex items-center gap-
|
|
14
|
+
}, G = ["aria-label"], J = ["src", "alt"], K = ["innerHTML"], P = { class: "flex items-center gap-2 min-w-0" }, Q = { class: "text-sm font-medium text-gray-800 leading-snug" }, U = { class: "w-full min-w-0 text-left" }, W = {
|
|
15
15
|
key: 2,
|
|
16
16
|
class: "flex items-center gap-1.5"
|
|
17
17
|
}, X = ["innerHTML"], Z = {
|
|
18
18
|
key: 1,
|
|
19
19
|
class: "text-sm text-gray-600 tracking-widest select-none",
|
|
20
20
|
"aria-hidden": "true"
|
|
21
|
-
}, _ = ["aria-label"], ee = ["src", "alt"], le = ["innerHTML"], te = { class: "flex items-center gap-
|
|
21
|
+
}, _ = ["aria-label"], ee = ["src", "alt"], le = ["innerHTML"], te = { class: "flex items-center gap-2 shrink-0 min-w-0 max-w-[48%]" }, ae = { class: "text-sm font-medium text-gray-800 truncate leading-snug" }, se = { class: "flex items-center justify-end gap-2 min-w-0 flex-1" }, ne = ["innerHTML"], ie = {
|
|
22
22
|
key: 1,
|
|
23
23
|
class: "text-sm text-gray-600 tracking-widest select-none",
|
|
24
24
|
"aria-hidden": "true"
|
|
@@ -65,9 +65,7 @@ const A = { class: "flex items-center gap-1.5 min-w-0" }, E = { class: "text-xs
|
|
|
65
65
|
} else
|
|
66
66
|
i.push(t.field.class);
|
|
67
67
|
return i.join(" ");
|
|
68
|
-
}), L = f(() => t.field.type === "image"), H = f(() => t.variant === "striped" && t.index % 2 !== 0), $ = f(() => t.variant === "stacked"), g = f(
|
|
69
|
-
() => ["date", "dateTime", "time"].includes(t.field.type || "")
|
|
70
|
-
), k = f(() => {
|
|
68
|
+
}), L = f(() => t.field.type === "image"), H = f(() => t.variant === "striped" && t.index % 2 !== 0), $ = f(() => t.variant === "stacked"), g = f(() => ["date", "dateTime", "time"].includes(t.field.type || "")), k = f(() => {
|
|
71
69
|
if (t.field.type === "dateTime") return "MM/DD/YYYY hh:mm A";
|
|
72
70
|
if (t.field.type === "time") return "hh:mm A";
|
|
73
71
|
}), p = f(() => !!t.field.lineByLine), j = f(() => t.stackedBorderStyle === "divider" && t.stackedColIndex !== 0 ? "border-l border-border pl-4 pr-3.5 py-2" : "px-3.5 py-2");
|
|
@@ -7,7 +7,7 @@ import L from "../Badge.vue.js";
|
|
|
7
7
|
import { useMultiSelectHydration as J } from "./composables/useMultiSelectHydration.js";
|
|
8
8
|
const K = {
|
|
9
9
|
key: 0,
|
|
10
|
-
class: "text-muted-foreground pl-
|
|
10
|
+
class: "text-muted-foreground pl-0.5 truncate"
|
|
11
11
|
}, Q = { class: "truncate min-w-0" }, W = ["onClick"], X = {
|
|
12
12
|
key: 0,
|
|
13
13
|
class: "flex items-center gap-2 pl-2 shrink-0 text-muted-foreground"
|
|
@@ -22,7 +22,7 @@ const K = {
|
|
|
22
22
|
searchable: { type: Boolean, default: !0 },
|
|
23
23
|
variant: { default: "outline" },
|
|
24
24
|
size: { default: "md" },
|
|
25
|
-
maxVisible: { default:
|
|
25
|
+
maxVisible: { default: 3 },
|
|
26
26
|
loading: { type: Boolean, default: !1 },
|
|
27
27
|
hasMore: { type: Boolean, default: !1 },
|
|
28
28
|
remote: { type: Boolean, default: !1 },
|
|
@@ -121,7 +121,10 @@ const K = {
|
|
|
121
121
|
key: 0,
|
|
122
122
|
type: "button",
|
|
123
123
|
onClick: T((Y) => H(r.value), ["stop"]),
|
|
124
|
-
class: u([
|
|
124
|
+
class: u([
|
|
125
|
+
"rounded transition-colors shrink-0 flex items-center justify-center p-px",
|
|
126
|
+
l.variant === "transparent" ? "text-muted-foreground hover:bg-black/10 hover:text-foreground" : "hover:bg-destructive/10 hover:text-destructive p-0.5 rounded-full"
|
|
127
|
+
])
|
|
125
128
|
}, [
|
|
126
129
|
k(C, {
|
|
127
130
|
icon: "lucide:x",
|
|
@@ -136,7 +139,10 @@ const K = {
|
|
|
136
139
|
variant: l.variant === "transparent" ? "outline" : "secondary",
|
|
137
140
|
size: z.value,
|
|
138
141
|
rounded: l.rounded === "none" ? "sm" : "full",
|
|
139
|
-
class: u([
|
|
142
|
+
class: u([
|
|
143
|
+
"shrink-0",
|
|
144
|
+
l.variant === "transparent" ? "border-transparent bg-muted/50 text-muted-foreground font-medium shadow-none" : ""
|
|
145
|
+
])
|
|
140
146
|
}, {
|
|
141
147
|
default: p(() => [
|
|
142
148
|
U(" +" + S($.value), 1)
|
|
@@ -65,8 +65,8 @@ const U = { class: "block truncate -text-fs-1.5" }, V = { class: "ml-auto inline
|
|
|
65
65
|
c(v, {
|
|
66
66
|
show: n.value,
|
|
67
67
|
"onUpdate:show": l[0] || (l[0] = (i) => n.value = i),
|
|
68
|
-
maxWidth: "max-w-
|
|
69
|
-
bodyClass: "
|
|
68
|
+
maxWidth: "max-w-xl",
|
|
69
|
+
bodyClass: "p-0! flex flex-col h-full",
|
|
70
70
|
body: O(N),
|
|
71
71
|
bodyProps: {
|
|
72
72
|
items: o.items,
|