vlite3 0.9.1 → 0.9.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/Chat/ChatBubble.vue.d.ts +18 -0
- package/components/Chat/ChatInterface.vue.d.ts +45 -0
- package/components/Chat/index.d.ts +2 -0
- package/components/CommandPalette/CommandPaletteContent.vue2.js +1 -1
- package/components/CommandPalette/{CommandPaletteItem.vue2.js → CommandPaletteItem.vue.js} +1 -1
- package/components/FilePicker/FilePicker.vue.d.ts +4 -1
- package/components/FilePicker/FilePicker.vue.js +189 -139
- package/components/Form/FormField.vue.js +2 -1
- package/components/NavbarCommandPalette.vue.js +1 -1
- package/components/Screen/Screen.vue.d.ts +1 -0
- package/components/Screen/Screen.vue.js +70 -65
- package/components/Screen/components/ScreenHeaderTitle.vue.d.ts +2 -0
- package/components/Screen/components/ScreenHeaderTitle.vue.js +28 -24
- package/components/Screen/components/ScreenQuickFilters.vue.js +1 -1
- package/components/Screen/types.d.ts +3 -0
- package/package.json +2 -2
- package/style.css +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ChatMessage } from './ChatInterface.vue';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
message: ChatMessage;
|
|
4
|
+
isSender: boolean;
|
|
5
|
+
showAvatar: boolean;
|
|
6
|
+
showUserInfo: boolean;
|
|
7
|
+
showTimestamp: boolean;
|
|
8
|
+
allowDeleteAll?: boolean;
|
|
9
|
+
allowEditAll?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
12
|
+
delete: (id: string | number) => any;
|
|
13
|
+
edit: (message: ChatMessage) => any;
|
|
14
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
15
|
+
onDelete?: (id: string | number) => any;
|
|
16
|
+
onEdit?: (message: ChatMessage) => any;
|
|
17
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
18
|
+
export default _default;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface ChatMessage {
|
|
2
|
+
id: string | number;
|
|
3
|
+
text: string;
|
|
4
|
+
senderId: string | number;
|
|
5
|
+
senderName?: string;
|
|
6
|
+
avatar?: string;
|
|
7
|
+
timestamp?: string | Date;
|
|
8
|
+
isEdited?: boolean;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
type __VLS_Props = {
|
|
12
|
+
data: ChatMessage[];
|
|
13
|
+
currentUserId: string | number;
|
|
14
|
+
showAvatar?: boolean;
|
|
15
|
+
showUserInfo?: boolean;
|
|
16
|
+
showTimestamp?: boolean;
|
|
17
|
+
placeholder?: string;
|
|
18
|
+
isLoadingMore?: boolean;
|
|
19
|
+
allowDeleteAll?: boolean;
|
|
20
|
+
allowEditAll?: boolean;
|
|
21
|
+
};
|
|
22
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
23
|
+
delete: (id: string | number) => any;
|
|
24
|
+
add: (text: string) => any;
|
|
25
|
+
refetch: () => any;
|
|
26
|
+
edit: (message: ChatMessage) => any;
|
|
27
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
28
|
+
onDelete?: (id: string | number) => any;
|
|
29
|
+
onAdd?: (text: string) => any;
|
|
30
|
+
onRefetch?: () => any;
|
|
31
|
+
onEdit?: (message: ChatMessage) => any;
|
|
32
|
+
}>, {
|
|
33
|
+
placeholder: string;
|
|
34
|
+
isLoadingMore: boolean;
|
|
35
|
+
showAvatar: boolean;
|
|
36
|
+
showUserInfo: boolean;
|
|
37
|
+
showTimestamp: boolean;
|
|
38
|
+
allowDeleteAll: boolean;
|
|
39
|
+
allowEditAll: boolean;
|
|
40
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
41
|
+
messageListRef: HTMLDivElement;
|
|
42
|
+
observerTargetRef: HTMLDivElement;
|
|
43
|
+
textareaRef: HTMLTextAreaElement;
|
|
44
|
+
}, HTMLDivElement>;
|
|
45
|
+
export default _default;
|
|
@@ -4,7 +4,7 @@ import k from "../Icon.vue.js";
|
|
|
4
4
|
import { $t as E } from "../../utils/i18n.js";
|
|
5
5
|
import { useCommandPaletteItems as Y } from "./useCommandPaletteItems.js";
|
|
6
6
|
import { useCommandPaletteNav as Z } from "./useCommandPaletteNav.js";
|
|
7
|
-
import ee from "./CommandPaletteItem.
|
|
7
|
+
import ee from "./CommandPaletteItem.vue.js";
|
|
8
8
|
const te = { class: "command-palette-content flex flex-col w-full h-full max-h-[70vh]" }, oe = { class: "flex items-center gap-3 px-4 py-3 border-b border-border/60 shrink-0" }, se = ["placeholder"], ne = ["aria-label"], re = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "flex flex-col items-center justify-center py-14 px-6 text-center select-none",
|
|
@@ -3,8 +3,9 @@ export interface FilePickerValue {
|
|
|
3
3
|
fileName: string;
|
|
4
4
|
fileType: string;
|
|
5
5
|
fileSize: number;
|
|
6
|
-
file: File;
|
|
6
|
+
file: File | null;
|
|
7
7
|
base64: string;
|
|
8
|
+
isUrl?: boolean;
|
|
8
9
|
}
|
|
9
10
|
interface Props {
|
|
10
11
|
modelValue?: FilePickerValue | FilePickerValue[] | null;
|
|
@@ -21,6 +22,7 @@ interface Props {
|
|
|
21
22
|
textI18n?: string;
|
|
22
23
|
size?: InputSize;
|
|
23
24
|
rounded?: InputRounded;
|
|
25
|
+
allowRename?: boolean;
|
|
24
26
|
}
|
|
25
27
|
declare function __VLS_template(): {
|
|
26
28
|
attrs: Partial<{}>;
|
|
@@ -56,6 +58,7 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
56
58
|
modelValue: FilePickerValue | FilePickerValue[] | null;
|
|
57
59
|
fileTypes: string[];
|
|
58
60
|
returnFormat: "file" | "base64";
|
|
61
|
+
allowRename: boolean;
|
|
59
62
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
|
|
60
63
|
fileInput: HTMLInputElement;
|
|
61
64
|
}, HTMLDivElement>;
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as Z, computed as m, ref as C, useSlots as _, openBlock as a, createElementBlock as u, createElementVNode as s, renderSlot as ee, normalizeClass as T, createBlock as b, withModifiers as F, createVNode as k, toDisplayString as h, createTextVNode as le, createCommentVNode as S, Fragment as te, renderList as ie } from "vue";
|
|
2
2
|
import p from "../Icon.vue.js";
|
|
3
|
-
import
|
|
4
|
-
import { $t as
|
|
5
|
-
const
|
|
3
|
+
import N from "../Button.vue.js";
|
|
4
|
+
import { $t as w } from "../../utils/i18n.js";
|
|
5
|
+
const oe = { class: "w-full" }, re = ["multiple", "accept"], ae = ["value", "placeholder", "disabled"], se = { class: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center justify-center gap-2 bg-background" }, ne = { class: "p-3 bg-muted rounded-full text-muted-foreground" }, de = { class: "space-y-1" }, ue = { class: "text-sm font-medium text-foreground" }, ce = { class: "text-primary hover:underline" }, fe = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "text-xs text-muted-foreground"
|
|
8
|
-
},
|
|
8
|
+
}, me = {
|
|
9
9
|
key: 1,
|
|
10
10
|
class: "space-y-2"
|
|
11
|
-
},
|
|
11
|
+
}, ge = { class: "shrink-0 mr-3" }, pe = { class: "p-2 bg-primary-light rounded text-primary-fg-light" }, he = { class: "flex-1 min-w-0 flex flex-col items-start overflow-hidden" }, ve = {
|
|
12
|
+
key: 0,
|
|
13
|
+
class: "inline-flex items-center group/rename w-fit max-w-full mb-0.5"
|
|
14
|
+
}, ye = { class: "grid relative w-fit max-w-full items-center -ml-1" }, xe = { 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" }, be = ["value", "onInput"], ke = {
|
|
15
|
+
key: 1,
|
|
16
|
+
class: "text-sm font-medium text-foreground truncate w-full"
|
|
17
|
+
}, we = { class: "text-xs text-muted-foreground" }, Ve = { class: "flex-shrink-0 ml-3 flex gap-2" }, Fe = {
|
|
12
18
|
key: 0,
|
|
13
19
|
class: "flex gap-2"
|
|
14
|
-
},
|
|
20
|
+
}, Se = {
|
|
15
21
|
key: 2,
|
|
16
22
|
class: "absolute inset-0 bg-white/80 flex items-center justify-center rounded-lg z-10"
|
|
17
|
-
},
|
|
23
|
+
}, Ae = { class: "bg-white p-2 rounded-full" }, Be = /* @__PURE__ */ Z({
|
|
18
24
|
name: "FilePicker",
|
|
19
25
|
__name: "FilePicker",
|
|
20
26
|
props: {
|
|
@@ -31,31 +37,32 @@ const ie = { class: "w-full" }, oe = ["multiple", "accept"], ae = ["value", "pla
|
|
|
31
37
|
placeholderI18n: {},
|
|
32
38
|
textI18n: {},
|
|
33
39
|
size: { default: "md" },
|
|
34
|
-
rounded: { default: "md" }
|
|
40
|
+
rounded: { default: "md" },
|
|
41
|
+
allowRename: { type: Boolean, default: !1 }
|
|
35
42
|
},
|
|
36
43
|
emits: ["update:modelValue", "change", "error"],
|
|
37
|
-
setup(
|
|
38
|
-
const e =
|
|
39
|
-
() => e.placeholderI18n ?
|
|
40
|
-
),
|
|
41
|
-
if (e.textI18n) return
|
|
42
|
-
const l =
|
|
44
|
+
setup(o, { emit: M }) {
|
|
45
|
+
const e = o, d = M, P = m(
|
|
46
|
+
() => e.placeholderI18n ? w(e.placeholderI18n) : e.placeholder !== void 0 ? e.placeholder : "Select file..."
|
|
47
|
+
), $ = m(() => {
|
|
48
|
+
if (e.textI18n) return w(e.textI18n);
|
|
49
|
+
const l = w("vlite.filePicker.clickToUpload");
|
|
43
50
|
return l !== "vlite.filePicker.clickToUpload" ? l : "Click to upload";
|
|
44
|
-
}), j =
|
|
45
|
-
const l =
|
|
51
|
+
}), j = m(() => {
|
|
52
|
+
const l = w("vlite.filePicker.dragAndDrop");
|
|
46
53
|
return l !== "vlite.filePicker.dragAndDrop" ? l : "or drag and drop";
|
|
47
|
-
}),
|
|
48
|
-
const l =
|
|
54
|
+
}), U = m(() => {
|
|
55
|
+
const l = w("vlite.filePicker.addMore");
|
|
49
56
|
return l !== "vlite.filePicker.addMore" ? l : "Add more";
|
|
50
|
-
}), z =
|
|
51
|
-
|
|
52
|
-
const
|
|
57
|
+
}), z = C(null), v = C(!1), c = C(!1);
|
|
58
|
+
_();
|
|
59
|
+
const E = m(() => e.fileTypes.join(",")), A = m(() => Array.isArray(e.modelValue) ? e.modelValue.length > 0 : e.modelValue !== null), V = m(() => {
|
|
53
60
|
let l = [];
|
|
54
61
|
return Array.isArray(e.modelValue) ? l = e.modelValue : e.modelValue && (l = [e.modelValue]), l.map((t) => {
|
|
55
62
|
if (typeof t == "string") {
|
|
56
|
-
const
|
|
63
|
+
const i = t.split("/").pop() || "Unknown File";
|
|
57
64
|
return {
|
|
58
|
-
fileName: decodeURIComponent(
|
|
65
|
+
fileName: decodeURIComponent(i),
|
|
59
66
|
fileType: "unknown",
|
|
60
67
|
fileSize: 0,
|
|
61
68
|
file: null,
|
|
@@ -65,86 +72,86 @@ const ie = { class: "w-full" }, oe = ["multiple", "accept"], ae = ["value", "pla
|
|
|
65
72
|
}
|
|
66
73
|
return t;
|
|
67
74
|
});
|
|
68
|
-
}),
|
|
69
|
-
if (!(e.disabled || e.loading ||
|
|
75
|
+
}), y = () => {
|
|
76
|
+
if (!(e.disabled || e.loading || c.value)) {
|
|
70
77
|
if (e.multiSelect && e.maxFiles && (Array.isArray(e.modelValue) ? e.modelValue.length : e.modelValue ? 1 : 0) >= e.maxFiles) {
|
|
71
78
|
d("error", `Maximum ${e.maxFiles} files allowed`);
|
|
72
79
|
return;
|
|
73
80
|
}
|
|
74
81
|
z.value?.click();
|
|
75
82
|
}
|
|
76
|
-
},
|
|
77
|
-
l.preventDefault(), !(e.disabled || e.loading) && (
|
|
78
|
-
}, W = (l) => {
|
|
79
|
-
l.preventDefault(), h.value = !1;
|
|
83
|
+
}, L = (l) => {
|
|
84
|
+
l.preventDefault(), !(e.disabled || e.loading) && (v.value = !0);
|
|
80
85
|
}, R = (l) => {
|
|
81
|
-
l.preventDefault(),
|
|
86
|
+
l.preventDefault(), v.value = !1;
|
|
87
|
+
}, W = (l) => {
|
|
88
|
+
l.preventDefault(), v.value = !1, !(e.disabled || e.loading || c.value) && l.dataTransfer?.files && D(l.dataTransfer.files);
|
|
82
89
|
}, O = (l) => {
|
|
83
90
|
const t = l.target;
|
|
84
91
|
t.files && D(t.files), t.value = "";
|
|
85
|
-
},
|
|
92
|
+
}, q = (l) => {
|
|
86
93
|
if (l === 0 || !l) return "";
|
|
87
|
-
const t = 1024,
|
|
88
|
-
return parseFloat((l / Math.pow(t,
|
|
89
|
-
},
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
typeof
|
|
93
|
-
},
|
|
94
|
+
const t = 1024, i = ["Bytes", "KB", "MB", "GB", "TB"], n = Math.floor(Math.log(l) / Math.log(t));
|
|
95
|
+
return parseFloat((l / Math.pow(t, n)).toFixed(2)) + " " + i[n];
|
|
96
|
+
}, G = (l) => new Promise((t, i) => {
|
|
97
|
+
const n = new FileReader();
|
|
98
|
+
n.readAsDataURL(l), n.onload = () => {
|
|
99
|
+
typeof n.result == "string" ? t(n.result) : i(new Error("Failed to read file as base64"));
|
|
100
|
+
}, n.onerror = (f) => i(f);
|
|
94
101
|
}), D = async (l) => {
|
|
95
102
|
if (l.length === 0) return;
|
|
96
|
-
|
|
97
|
-
const t = [],
|
|
98
|
-
let
|
|
103
|
+
c.value = !0;
|
|
104
|
+
const t = [], i = [], n = Array.from(l);
|
|
105
|
+
let f = e.multiSelect ? n : [n[0]];
|
|
99
106
|
if (e.multiSelect && e.maxFiles) {
|
|
100
|
-
const
|
|
107
|
+
const r = Array.isArray(e.modelValue) ? e.modelValue.length : e.modelValue ? 1 : 0, g = e.maxFiles - r;
|
|
101
108
|
if (g <= 0) {
|
|
102
|
-
d("error", `Maximum ${e.maxFiles} files allowed`),
|
|
109
|
+
d("error", `Maximum ${e.maxFiles} files allowed`), c.value = !1;
|
|
103
110
|
return;
|
|
104
111
|
}
|
|
105
|
-
|
|
112
|
+
f.length > g && (i.push(`Only ${g} more file(s) allowed. Maximum ${e.maxFiles} files.`), f = f.slice(0, g));
|
|
106
113
|
}
|
|
107
114
|
try {
|
|
108
|
-
for (const
|
|
109
|
-
if (e.fileTypes.length > 0 && !e.fileTypes.some((
|
|
110
|
-
if (
|
|
111
|
-
return
|
|
112
|
-
if (
|
|
113
|
-
const
|
|
114
|
-
return
|
|
115
|
+
for (const r of f) {
|
|
116
|
+
if (e.fileTypes.length > 0 && !e.fileTypes.some((x) => {
|
|
117
|
+
if (x.startsWith("."))
|
|
118
|
+
return r.name.toLowerCase().endsWith(x.toLowerCase());
|
|
119
|
+
if (x.endsWith("/*")) {
|
|
120
|
+
const Y = x.split("/")[0];
|
|
121
|
+
return r.type.startsWith(Y);
|
|
115
122
|
}
|
|
116
|
-
return
|
|
123
|
+
return r.type === x;
|
|
117
124
|
})) {
|
|
118
|
-
|
|
125
|
+
i.push(`File type not allowed: ${r.name}`);
|
|
119
126
|
continue;
|
|
120
127
|
}
|
|
121
128
|
let g = !1;
|
|
122
|
-
e.maxSize &&
|
|
123
|
-
let
|
|
129
|
+
e.maxSize && r.size > e.maxSize && (i.push(`File too large: ${r.name}`), g = !0);
|
|
130
|
+
let B = "";
|
|
124
131
|
if (e.returnFormat === "base64" && !g)
|
|
125
132
|
try {
|
|
126
|
-
|
|
127
|
-
} catch (
|
|
128
|
-
console.error("Base64 read failed",
|
|
133
|
+
B = await G(r);
|
|
134
|
+
} catch (I) {
|
|
135
|
+
console.error("Base64 read failed", I);
|
|
129
136
|
}
|
|
130
137
|
t.push({
|
|
131
|
-
fileName:
|
|
132
|
-
fileType:
|
|
133
|
-
fileSize:
|
|
134
|
-
file:
|
|
135
|
-
base64:
|
|
138
|
+
fileName: r.name,
|
|
139
|
+
fileType: r.type,
|
|
140
|
+
fileSize: r.size,
|
|
141
|
+
file: r,
|
|
142
|
+
base64: B
|
|
136
143
|
});
|
|
137
144
|
}
|
|
138
|
-
if (
|
|
139
|
-
let
|
|
140
|
-
e.multiSelect ?
|
|
145
|
+
if (i.length > 0 && d("error", i.join("; ")), t.length > 0) {
|
|
146
|
+
let r;
|
|
147
|
+
e.multiSelect ? r = [...Array.isArray(e.modelValue) ? e.modelValue : e.modelValue ? [e.modelValue] : [], ...t] : r = t[0], d("update:modelValue", r), d("change", r);
|
|
141
148
|
}
|
|
142
|
-
} catch (
|
|
143
|
-
console.error("Error processing files:",
|
|
149
|
+
} catch (r) {
|
|
150
|
+
console.error("Error processing files:", r), d("error", "Failed to process files");
|
|
144
151
|
} finally {
|
|
145
|
-
|
|
152
|
+
c.value = !1;
|
|
146
153
|
}
|
|
147
|
-
},
|
|
154
|
+
}, K = (l) => {
|
|
148
155
|
if (!(e.disabled || e.loading))
|
|
149
156
|
if (e.multiSelect && Array.isArray(e.modelValue)) {
|
|
150
157
|
const t = [...e.modelValue];
|
|
@@ -153,12 +160,30 @@ const ie = { class: "w-full" }, oe = ["multiple", "accept"], ae = ["value", "pla
|
|
|
153
160
|
d("update:modelValue", null), d("change", null);
|
|
154
161
|
}, H = () => {
|
|
155
162
|
e.disabled || e.loading || (d("update:modelValue", null), d("change", null));
|
|
156
|
-
}, J =
|
|
163
|
+
}, J = (l, t) => {
|
|
164
|
+
if (e.disabled || e.loading) return;
|
|
165
|
+
let i;
|
|
166
|
+
e.multiSelect && Array.isArray(e.modelValue) ? (i = [...e.modelValue], typeof i[l] == "object" && i[l] !== null ? i[l] = { ...i[l], fileName: t } : typeof i[l] == "string" && (i[l] = {
|
|
167
|
+
fileName: t,
|
|
168
|
+
fileType: "unknown",
|
|
169
|
+
fileSize: 0,
|
|
170
|
+
file: null,
|
|
171
|
+
base64: i[l],
|
|
172
|
+
isUrl: !0
|
|
173
|
+
})) : e.modelValue && typeof e.modelValue == "object" && !Array.isArray(e.modelValue) ? i = { ...e.modelValue, fileName: t } : typeof e.modelValue == "string" && (i = {
|
|
174
|
+
fileName: t,
|
|
175
|
+
fileType: "unknown",
|
|
176
|
+
fileSize: 0,
|
|
177
|
+
file: null,
|
|
178
|
+
base64: e.modelValue,
|
|
179
|
+
isUrl: !0
|
|
180
|
+
}), i !== void 0 && (d("update:modelValue", i), d("change", i));
|
|
181
|
+
}, Q = m(() => A.value ? V.value.map((t) => t.fileName).join(", ") : ""), X = m(() => {
|
|
157
182
|
const l = "block w-full bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 transition-all focus-visible:outline-none cursor-pointer", t = {
|
|
158
183
|
sm: "h-8 text-xs",
|
|
159
184
|
md: "h-10 text-sm",
|
|
160
185
|
lg: "h-12 text-base"
|
|
161
|
-
},
|
|
186
|
+
}, i = {
|
|
162
187
|
none: "rounded-none",
|
|
163
188
|
sm: "rounded-sm",
|
|
164
189
|
md: "rounded-md",
|
|
@@ -172,149 +197,174 @@ const ie = { class: "w-full" }, oe = ["multiple", "accept"], ae = ["value", "pla
|
|
|
172
197
|
"border border-input focus-visible:border-primary",
|
|
173
198
|
// Default outline style
|
|
174
199
|
t[e.size],
|
|
175
|
-
|
|
200
|
+
i[e.rounded],
|
|
176
201
|
"pr-10",
|
|
177
202
|
// Space for icon
|
|
178
203
|
e.disabled ? "cursor-not-allowed opacity-50" : ""
|
|
179
204
|
].join(" ");
|
|
180
205
|
});
|
|
181
|
-
return (l, t) => (
|
|
182
|
-
|
|
206
|
+
return (l, t) => (a(), u("div", oe, [
|
|
207
|
+
s("input", {
|
|
183
208
|
ref_key: "fileInput",
|
|
184
209
|
ref: z,
|
|
185
210
|
type: "file",
|
|
186
|
-
multiple:
|
|
187
|
-
accept:
|
|
211
|
+
multiple: o.multiSelect,
|
|
212
|
+
accept: E.value,
|
|
188
213
|
class: "hidden",
|
|
189
214
|
onChange: O
|
|
190
|
-
}, null, 40,
|
|
191
|
-
|
|
192
|
-
trigger:
|
|
193
|
-
isDragging:
|
|
194
|
-
isLoading:
|
|
215
|
+
}, null, 40, re),
|
|
216
|
+
ee(l.$slots, "trigger", {
|
|
217
|
+
trigger: y,
|
|
218
|
+
isDragging: v.value,
|
|
219
|
+
isLoading: o.loading || c.value,
|
|
195
220
|
files: V.value
|
|
196
221
|
}, () => [
|
|
197
|
-
|
|
222
|
+
o.variant === "input" ? (a(), u("div", {
|
|
198
223
|
key: 0,
|
|
199
224
|
class: "relative",
|
|
200
|
-
onClick:
|
|
225
|
+
onClick: y
|
|
201
226
|
}, [
|
|
202
|
-
|
|
227
|
+
s("input", {
|
|
203
228
|
type: "text",
|
|
204
|
-
value:
|
|
205
|
-
placeholder:
|
|
229
|
+
value: Q.value,
|
|
230
|
+
placeholder: P.value,
|
|
206
231
|
readonly: "",
|
|
207
|
-
class:
|
|
208
|
-
disabled:
|
|
232
|
+
class: T(X.value),
|
|
233
|
+
disabled: o.disabled || o.loading || c.value
|
|
209
234
|
}, null, 10, ae),
|
|
210
|
-
|
|
211
|
-
|
|
235
|
+
s("div", se, [
|
|
236
|
+
o.loading || c.value ? (a(), b(p, {
|
|
212
237
|
key: 0,
|
|
213
238
|
icon: "lucide:loader-2",
|
|
214
239
|
class: "h-4 w-4 animate-spin text-muted-foreground"
|
|
215
|
-
})) : A.value && !
|
|
240
|
+
})) : A.value && !o.disabled ? (a(), u("button", {
|
|
216
241
|
key: 1,
|
|
217
242
|
type: "button",
|
|
218
243
|
class: "text-muted-foreground hover:text-foreground focus:outline-none",
|
|
219
|
-
onClick:
|
|
244
|
+
onClick: F(H, ["stop"])
|
|
220
245
|
}, [
|
|
221
|
-
|
|
246
|
+
k(p, {
|
|
222
247
|
icon: "lucide:x-circle",
|
|
223
248
|
class: "h-4 w-4"
|
|
224
249
|
})
|
|
225
|
-
])) : (
|
|
250
|
+
])) : (a(), b(p, {
|
|
226
251
|
key: 2,
|
|
227
252
|
icon: "lucide:upload",
|
|
228
253
|
class: "h-4 w-4 text-muted-foreground"
|
|
229
254
|
}))
|
|
230
255
|
])
|
|
231
|
-
])) : (
|
|
256
|
+
])) : (a(), u("div", {
|
|
232
257
|
key: 1,
|
|
233
258
|
class: "relative",
|
|
234
|
-
onDragover:
|
|
235
|
-
onDragleave:
|
|
236
|
-
onDrop:
|
|
259
|
+
onDragover: L,
|
|
260
|
+
onDragleave: R,
|
|
261
|
+
onDrop: W
|
|
237
262
|
}, [
|
|
238
|
-
A.value ? (
|
|
239
|
-
(
|
|
240
|
-
key:
|
|
241
|
-
class:
|
|
242
|
-
onClick: t[
|
|
263
|
+
A.value ? (a(), u("div", me, [
|
|
264
|
+
(a(!0), u(te, null, ie(V.value, (i, n) => (a(), u("div", {
|
|
265
|
+
key: n,
|
|
266
|
+
class: T(["relative flex items-center p-3 border border-border rounded-lg bg-body transition-colors group", [!o.multiSelect && !o.disabled ? "cursor-pointer hover:border-primary/50" : ""]]),
|
|
267
|
+
onClick: t[2] || (t[2] = (f) => !o.multiSelect && !o.disabled ? y() : null)
|
|
243
268
|
}, [
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
269
|
+
s("div", ge, [
|
|
270
|
+
s("div", pe, [
|
|
271
|
+
k(p, {
|
|
247
272
|
icon: "lucide:file-text",
|
|
248
273
|
class: "w-5 h-5"
|
|
249
274
|
})
|
|
250
275
|
])
|
|
251
276
|
]),
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
277
|
+
s("div", he, [
|
|
278
|
+
o.allowRename && !o.disabled ? (a(), u("div", ve, [
|
|
279
|
+
s("div", ye, [
|
|
280
|
+
s("span", xe, h(i.fileName || "Enter file name"), 1),
|
|
281
|
+
s("input", {
|
|
282
|
+
value: i.fileName,
|
|
283
|
+
onClick: t[0] || (t[0] = F(() => {
|
|
284
|
+
}, ["stop"])),
|
|
285
|
+
onInput: (f) => J(n, f.target.value),
|
|
286
|
+
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",
|
|
287
|
+
placeholder: "Enter file name"
|
|
288
|
+
}, null, 40, be)
|
|
289
|
+
]),
|
|
290
|
+
s("div", {
|
|
291
|
+
class: "flex-shrink-0 ml-1 text-muted-foreground/50 group-hover/rename:text-foreground transition-colors cursor-text",
|
|
292
|
+
onClick: t[1] || (t[1] = F(
|
|
293
|
+
(f) => f.currentTarget.previousElementSibling?.querySelector("input")?.focus(),
|
|
294
|
+
["stop"]
|
|
295
|
+
)),
|
|
296
|
+
title: "Rename file"
|
|
297
|
+
}, [
|
|
298
|
+
k(p, {
|
|
299
|
+
icon: "lucide:pencil",
|
|
300
|
+
class: "w-3.5 h-3.5"
|
|
301
|
+
})
|
|
302
|
+
])
|
|
303
|
+
])) : (a(), u("p", ke, h(i.fileName), 1)),
|
|
304
|
+
s("p", we, h(q(i.fileSize)), 1)
|
|
255
305
|
]),
|
|
256
|
-
|
|
257
|
-
!
|
|
306
|
+
s("div", Ve, [
|
|
307
|
+
!o.disabled && !o.loading ? (a(), b(N, {
|
|
258
308
|
key: 0,
|
|
259
309
|
size: "xs",
|
|
260
310
|
variant: "ghost",
|
|
261
311
|
icon: "lucide:x",
|
|
262
312
|
rounded: "full",
|
|
263
313
|
class: "text-muted-foreground hover:text-destructive hover:bg-destructive/10",
|
|
264
|
-
onClick:
|
|
265
|
-
}, null, 8, ["onClick"])) :
|
|
314
|
+
onClick: F((f) => K(n), ["stop"])
|
|
315
|
+
}, null, 8, ["onClick"])) : S("", !0)
|
|
266
316
|
])
|
|
267
317
|
], 2))), 128)),
|
|
268
|
-
|
|
269
|
-
|
|
318
|
+
o.multiSelect && (!o.maxFiles || V.value.length < o.maxFiles) ? (a(), u("div", Fe, [
|
|
319
|
+
k(N, {
|
|
270
320
|
size: "sm",
|
|
271
321
|
variant: "outline",
|
|
272
322
|
icon: "lucide:plus",
|
|
273
|
-
text:
|
|
274
|
-
disabled:
|
|
275
|
-
onClick:
|
|
323
|
+
text: U.value,
|
|
324
|
+
disabled: o.disabled || o.loading || c.value,
|
|
325
|
+
onClick: y
|
|
276
326
|
}, null, 8, ["text", "disabled"])
|
|
277
|
-
])) :
|
|
278
|
-
])) : (
|
|
327
|
+
])) : S("", !0)
|
|
328
|
+
])) : (a(), u("div", {
|
|
279
329
|
key: 0,
|
|
280
|
-
class:
|
|
281
|
-
|
|
282
|
-
|
|
330
|
+
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", [
|
|
331
|
+
v.value ? "border-primary bg-primary/5" : "hover:border-primary/50 ",
|
|
332
|
+
o.disabled || o.loading || c.value ? "opacity-50 cursor-not-allowed" : ""
|
|
283
333
|
]]),
|
|
284
|
-
onClick:
|
|
334
|
+
onClick: y
|
|
285
335
|
}, [
|
|
286
|
-
|
|
287
|
-
|
|
336
|
+
s("div", ne, [
|
|
337
|
+
o.loading || c.value ? (a(), b(p, {
|
|
288
338
|
key: 0,
|
|
289
339
|
icon: "lucide:loader-2",
|
|
290
340
|
class: "w-6 h-6 animate-spin"
|
|
291
|
-
})) : (
|
|
341
|
+
})) : (a(), b(p, {
|
|
292
342
|
key: 1,
|
|
293
343
|
icon: "lucide:upload-cloud",
|
|
294
344
|
class: "w-6 h-6"
|
|
295
345
|
}))
|
|
296
346
|
]),
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
347
|
+
s("div", de, [
|
|
348
|
+
s("p", ue, [
|
|
349
|
+
s("span", ce, h($.value), 1),
|
|
350
|
+
le(" " + h(j.value), 1)
|
|
301
351
|
]),
|
|
302
|
-
|
|
352
|
+
o.fileTypes.length ? (a(), u("p", fe, h(o.fileTypes.join(", ")), 1)) : S("", !0)
|
|
303
353
|
])
|
|
304
354
|
], 2)),
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
355
|
+
o.loading || c.value ? (a(), u("div", Se, [
|
|
356
|
+
s("div", Ae, [
|
|
357
|
+
k(p, {
|
|
308
358
|
icon: "lucide:loader-2",
|
|
309
359
|
class: "w-6 h-6 animate-spin text-primary"
|
|
310
360
|
})
|
|
311
361
|
])
|
|
312
|
-
])) :
|
|
362
|
+
])) : S("", !0)
|
|
313
363
|
], 32))
|
|
314
364
|
])
|
|
315
365
|
]));
|
|
316
366
|
}
|
|
317
367
|
});
|
|
318
368
|
export {
|
|
319
|
-
|
|
369
|
+
Be as default
|
|
320
370
|
};
|
|
@@ -189,7 +189,8 @@ const pe = /* @__PURE__ */ I({
|
|
|
189
189
|
size: e.size,
|
|
190
190
|
rounded: e.rounded,
|
|
191
191
|
maxSize: e.field.maxFileSize ? e.field.maxFileSize * 1024 * 1024 : void 0,
|
|
192
|
-
loading: e.loading
|
|
192
|
+
loading: e.loading,
|
|
193
|
+
allowRename: e.field.props?.allowRename ?? !0
|
|
193
194
|
} : a === "avatarUpload" ? {
|
|
194
195
|
size: "2xl",
|
|
195
196
|
...l,
|
|
@@ -3,7 +3,7 @@ import L from "./Icon.vue.js";
|
|
|
3
3
|
import v from "./Modal.vue.js";
|
|
4
4
|
import N from "./CommandPalette/CommandPaletteContent.vue.js";
|
|
5
5
|
import { $t as R } from "../utils/i18n.js";
|
|
6
|
-
/* empty css
|
|
6
|
+
/* empty css */
|
|
7
7
|
const U = { class: "block truncate -text-fs-1.5" }, V = { class: "ml-auto inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-mono font-medium border border-border/80 bg-background text-muted-foreground ml-1" }, q = /* @__PURE__ */ x({
|
|
8
8
|
__name: "NavbarCommandPalette",
|
|
9
9
|
props: {
|
|
@@ -139,6 +139,7 @@ declare const __VLS_component: import('vue').DefineComponent<ScreenProps, {}, {}
|
|
|
139
139
|
showRefresh: boolean;
|
|
140
140
|
viewProps: Record<string, any>;
|
|
141
141
|
hideSelectable: boolean;
|
|
142
|
+
hideDeleteBtn: boolean;
|
|
142
143
|
quickFilters: import('./types').ScreenQuickFilter[];
|
|
143
144
|
quickFilterKey: string;
|
|
144
145
|
quickFilterVariant: import('../Tabes').TabesVariant;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as ge, useSlots as ye, computed as
|
|
1
|
+
import { defineComponent as ge, useSlots as ye, computed as n, ref as s, markRaw as we, provide as F, watch as R, openBlock as o, createElementBlock as m, normalizeClass as q, createVNode as w, createSlots as ke, withCtx as Q, renderSlot as d, createElementVNode as I, createBlock as p, createCommentVNode as c, isRef as be, unref as D, Fragment as M, resolveDynamicComponent as xe, mergeProps as A, toDisplayString as Ce } from "vue";
|
|
2
2
|
import De from "../Input.vue.js";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import O from "../Button.vue.js";
|
|
@@ -6,10 +6,10 @@ import Pe from "../ConfirmationModal.vue.js";
|
|
|
6
6
|
import Se from "../Pagination/Pagination.vue.js";
|
|
7
7
|
import $e from "./ScreenFilter.vue.js";
|
|
8
8
|
import Ie from "../ImportData/ImportData.vue.js";
|
|
9
|
-
import { usePersistentState as
|
|
10
|
-
import { useVLiteConfig as
|
|
9
|
+
import { usePersistentState as Be } from "../../utils/usePersistentState.js";
|
|
10
|
+
import { useVLiteConfig as Ve } from "../../core/config.js";
|
|
11
11
|
import { $t as f } from "../../utils/i18n.js";
|
|
12
|
-
import { SCREEN_CONTEXT_KEY as
|
|
12
|
+
import { SCREEN_CONTEXT_KEY as Te } from "../DataTable/types.js";
|
|
13
13
|
import Fe from "./components/ScreenHeaderTitle.vue.js";
|
|
14
14
|
import Re from "./components/ScreenViewToggle.vue.js";
|
|
15
15
|
import qe from "./components/ScreenOptionsDropdown.vue.js";
|
|
@@ -71,8 +71,11 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
71
71
|
showRefresh: { type: Boolean, default: !1 },
|
|
72
72
|
containerClass: {},
|
|
73
73
|
headerClass: {},
|
|
74
|
+
titleClass: {},
|
|
75
|
+
descriptionClass: {},
|
|
74
76
|
viewProps: { default: () => ({}) },
|
|
75
77
|
hideSelectable: { type: Boolean, default: !1 },
|
|
78
|
+
hideDeleteBtn: { type: Boolean, default: !1 },
|
|
76
79
|
quickFilters: { default: () => [] },
|
|
77
80
|
quickFilterKey: { default: "status" },
|
|
78
81
|
defaultQuickFilter: {},
|
|
@@ -80,17 +83,17 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
80
83
|
},
|
|
81
84
|
emits: ["add", "delete"],
|
|
82
85
|
setup(t, { emit: K }) {
|
|
83
|
-
const l = t, x =
|
|
86
|
+
const l = t, x = Ve(), E = K, P = ye(), L = n(() => l.name || l.title || "default-screen"), h = Be(
|
|
84
87
|
`view-mode-${L.value}`,
|
|
85
88
|
l.table || P.table ? "table" : "list"
|
|
86
|
-
), g = s(""), u = s({}), j = s({ field: "", order: "" }), k = s(l.pageInfo?.currentPage || 1),
|
|
89
|
+
), g = s(""), u = s({}), j = s({ field: "", order: "" }), k = s(l.pageInfo?.currentPage || 1), B = s(l.pageInfo?.itemsPerPage || l.paginationProps?.itemsPerPage || 10), r = s([]), S = s([]), C = s(!1), y = s(
|
|
87
90
|
l.defaultQuickFilter !== void 0 ? l.defaultQuickFilter : l.quickFilters && l.quickFilters.length > 0 ? l.quickFilters[0].value : ""
|
|
88
|
-
), z =
|
|
91
|
+
), z = n(() => l.quickFilters && l.quickFilters.length > 0), H = (e) => {
|
|
89
92
|
y.value = e, k.value = 1, v();
|
|
90
|
-
}, U =
|
|
93
|
+
}, U = n(() => {
|
|
91
94
|
let e;
|
|
92
95
|
return h.value === "table" ? e = l.table || !!P.table : e = l.list || !!P.list || !!P.grid, typeof e == "object" && e !== null ? we(e) : e;
|
|
93
|
-
}), X =
|
|
96
|
+
}), X = n(() => g.value && g.value.trim() !== "" ? !0 : u.value ? Object.keys(u.value).some(
|
|
94
97
|
(e) => u.value[e] !== "" && u.value[e] !== null && u.value[e] !== void 0
|
|
95
98
|
) : !1), Y = {
|
|
96
99
|
disableSearch: !0,
|
|
@@ -99,7 +102,7 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
99
102
|
j.value = { field: e.sort.field, order: e.sort.order }, v();
|
|
100
103
|
}
|
|
101
104
|
};
|
|
102
|
-
F(
|
|
105
|
+
F(Te, Y), F("screen-selected-rows", r), F("screen-request-delete", (e) => b(e));
|
|
103
106
|
const b = (e) => {
|
|
104
107
|
S.value = e, C.value = !0;
|
|
105
108
|
}, G = () => {
|
|
@@ -115,65 +118,65 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
115
118
|
), R(
|
|
116
119
|
() => l.pageInfo?.itemsPerPage,
|
|
117
120
|
(e) => {
|
|
118
|
-
e && (
|
|
121
|
+
e && (B.value = e);
|
|
119
122
|
}
|
|
120
123
|
);
|
|
121
|
-
let
|
|
124
|
+
let V = null;
|
|
122
125
|
R(g, () => {
|
|
123
|
-
|
|
126
|
+
V && clearTimeout(V), V = setTimeout(() => {
|
|
124
127
|
k.value = 1, v();
|
|
125
128
|
}, 300);
|
|
126
129
|
});
|
|
127
130
|
const W = (e) => {
|
|
128
131
|
k.value = e, v();
|
|
129
132
|
}, Z = (e) => {
|
|
130
|
-
|
|
133
|
+
B.value = e, k.value = 1, v();
|
|
131
134
|
}, v = () => {
|
|
132
135
|
if (!l.refetch) return;
|
|
133
136
|
const e = { ...u.value };
|
|
134
137
|
y.value !== "" && y.value !== null && y.value !== void 0 && (e[l.quickFilterKey] = y.value), l.refetch({
|
|
135
|
-
pagination: { page: k.value, limit:
|
|
138
|
+
pagination: { page: k.value, limit: B.value },
|
|
136
139
|
search: g.value,
|
|
137
140
|
sort: { ...j.value },
|
|
138
141
|
filter: e
|
|
139
142
|
});
|
|
140
|
-
}, _ =
|
|
143
|
+
}, _ = n(() => l.data && l.data.length > 0), ee = n(() => {
|
|
141
144
|
const e = f("vlite.screen.deleteSelected");
|
|
142
145
|
return e !== "vlite.screen.deleteSelected" ? e : "Delete Selected";
|
|
143
|
-
}), te =
|
|
146
|
+
}), te = n(() => {
|
|
144
147
|
const e = f("vlite.screen.refresh");
|
|
145
148
|
return e !== "vlite.screen.refresh" ? e : "Refresh";
|
|
146
|
-
}), le =
|
|
149
|
+
}), le = n(() => {
|
|
147
150
|
const e = f("vlite.screen.searchPlaceholder");
|
|
148
151
|
return e !== "vlite.screen.searchPlaceholder" ? e : "Search...";
|
|
149
|
-
}), ae =
|
|
152
|
+
}), ae = n(() => {
|
|
150
153
|
const e = f("vlite.screen.confirmDeleteTitle");
|
|
151
154
|
return e !== "vlite.screen.confirmDeleteTitle" ? e : "Confirm Deletion";
|
|
152
|
-
}),
|
|
155
|
+
}), ie = n(() => {
|
|
153
156
|
const e = f("vlite.screen.confirmDeleteDesc", { count: S.value.length });
|
|
154
157
|
return e !== "vlite.screen.confirmDeleteDesc" ? e : `Are you sure you want to delete the selected ${S.value.length > 1 ? "items" : "item"}?`;
|
|
155
|
-
}),
|
|
158
|
+
}), ne = n(() => {
|
|
156
159
|
const e = f("vlite.screen.confirmDeleteBtn");
|
|
157
160
|
return e !== "vlite.screen.confirmDeleteBtn" ? e : "Delete";
|
|
158
|
-
}),
|
|
161
|
+
}), oe = n(() => {
|
|
159
162
|
const e = f("vlite.screen.cancelBtn");
|
|
160
163
|
return e !== "vlite.screen.cancelBtn" ? e : "Cancel";
|
|
161
|
-
}), re =
|
|
164
|
+
}), re = n(() => {
|
|
162
165
|
const e = f("vlite.screen.missingView");
|
|
163
166
|
return e !== "vlite.screen.missingView" ? e : "Please provide a `:list` or `:table` component or slot.";
|
|
164
|
-
}), N =
|
|
167
|
+
}), N = n(
|
|
165
168
|
() => l.exportSchema && l.exportSchema.length > 0 && l.exportProps !== !1 || l.importSchema && l.importSchema.length > 0 && l.importProps !== !1
|
|
166
|
-
), se =
|
|
169
|
+
), se = n(() => {
|
|
167
170
|
const e = f("vlite.screen.importData");
|
|
168
171
|
return e !== "vlite.screen.importData" ? e : "Import Data";
|
|
169
|
-
}), de = s(null), $ = s(!1),
|
|
170
|
-
e.value === "export" ? $.value = !0 : e.value === "import" && (
|
|
171
|
-
}, ue =
|
|
172
|
+
}), de = s(null), $ = s(!1), T = s(!1), ce = (e) => {
|
|
173
|
+
e.value === "export" ? $.value = !0 : e.value === "import" && (T.value = !0);
|
|
174
|
+
}, ue = n(
|
|
172
175
|
() => (l.exportSchema || []).map((e) => ({
|
|
173
176
|
field: e.name || e.field,
|
|
174
177
|
title: e.label || e.title || e.name || e.field
|
|
175
178
|
}))
|
|
176
|
-
), me =
|
|
179
|
+
), me = n(
|
|
177
180
|
() => (l.importSchema || []).map((e) => ({
|
|
178
181
|
field: e.name || e.field,
|
|
179
182
|
title: e.label || e.title || e.name || e.field,
|
|
@@ -188,7 +191,7 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
188
191
|
skipped: 0,
|
|
189
192
|
failed: 0,
|
|
190
193
|
errors: []
|
|
191
|
-
}), ve = () => v(), pe =
|
|
194
|
+
}), ve = () => v(), pe = n(
|
|
192
195
|
() => l.exportMode || x?.exportData?.mode || "frontend"
|
|
193
196
|
), he = async (e) => {
|
|
194
197
|
x?.services?.exportApi && l.exportType ? await x.services.exportApi(l.exportType, {
|
|
@@ -199,16 +202,18 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
199
202
|
"VLite Screen: No exportApi configured or no exportType provided for generic backend export."
|
|
200
203
|
);
|
|
201
204
|
};
|
|
202
|
-
return (e,
|
|
203
|
-
t.customHeader ? d(e.$slots, "custom-header", { key: 1 }) : (
|
|
205
|
+
return (e, i) => (o(), m("div", Ne, [
|
|
206
|
+
t.customHeader ? d(e.$slots, "custom-header", { key: 1 }) : (o(), m("div", {
|
|
204
207
|
key: 0,
|
|
205
208
|
class: q([t.headerClass, "flex flex-col md:flex-row sm:items-start md:items-center justify-between gap-4"])
|
|
206
209
|
}, [
|
|
207
210
|
w(Fe, {
|
|
208
211
|
title: t.title,
|
|
209
212
|
"title-i18n": t.titleI18n,
|
|
213
|
+
"title-class": t.titleClass,
|
|
210
214
|
description: t.description,
|
|
211
215
|
"description-i18n": t.descriptionI18n,
|
|
216
|
+
"description-class": t.descriptionClass,
|
|
212
217
|
info: t.info,
|
|
213
218
|
"info-i18n": t.infoI18n
|
|
214
219
|
}, ke({ _: 2 }, [
|
|
@@ -226,24 +231,24 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
226
231
|
]),
|
|
227
232
|
key: "1"
|
|
228
233
|
} : void 0
|
|
229
|
-
]), 1032, ["title", "title-i18n", "description", "description-i18n", "info", "info-i18n"]),
|
|
234
|
+
]), 1032, ["title", "title-i18n", "title-class", "description", "description-i18n", "description-class", "info", "info-i18n"]),
|
|
230
235
|
I("div", Qe, [
|
|
231
236
|
I("div", Me, [
|
|
232
|
-
r.value.length > 0 && !t.hideSelectable ? (
|
|
237
|
+
r.value.length > 0 && !t.hideSelectable && !t.hideDeleteBtn ? (o(), p(O, {
|
|
233
238
|
key: 0,
|
|
234
239
|
variant: "outline",
|
|
235
240
|
class: "hover:bg-destructive/10 shrink-0 h-9! w-9!",
|
|
236
241
|
icon: "lucide:trash-2",
|
|
237
242
|
title: ee.value,
|
|
238
|
-
onClick:
|
|
243
|
+
onClick: i[0] || (i[0] = (a) => b(r.value))
|
|
239
244
|
}, null, 8, ["title"])) : c("", !0),
|
|
240
|
-
(t.table || e.$slots.table) && (t.list || e.$slots.list || e.$slots.grid) ? (
|
|
245
|
+
(t.table || e.$slots.table) && (t.list || e.$slots.list || e.$slots.grid) ? (o(), p(Re, {
|
|
241
246
|
key: 1,
|
|
242
247
|
modelValue: D(h),
|
|
243
|
-
"onUpdate:modelValue":
|
|
248
|
+
"onUpdate:modelValue": i[1] || (i[1] = (a) => be(h) ? h.value = a : null)
|
|
244
249
|
}, null, 8, ["modelValue"])) : c("", !0),
|
|
245
250
|
d(e.$slots, "before-search"),
|
|
246
|
-
t.showRefresh ? (
|
|
251
|
+
t.showRefresh ? (o(), p(O, {
|
|
247
252
|
key: 2,
|
|
248
253
|
variant: "outline",
|
|
249
254
|
icon: "lucide:refresh-cw",
|
|
@@ -253,19 +258,19 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
253
258
|
disabled: t.loading,
|
|
254
259
|
onClick: v
|
|
255
260
|
}, null, 8, ["title", "disabled"])) : c("", !0),
|
|
256
|
-
t.filterSchema && t.filterSchema.length > 0 ? (
|
|
261
|
+
t.filterSchema && t.filterSchema.length > 0 ? (o(), p($e, {
|
|
257
262
|
key: 3,
|
|
258
263
|
schema: t.filterSchema,
|
|
259
264
|
type: t.filterType,
|
|
260
265
|
modelValue: u.value,
|
|
261
|
-
"onUpdate:modelValue":
|
|
266
|
+
"onUpdate:modelValue": i[2] || (i[2] = (a) => u.value = a),
|
|
262
267
|
onChange: v
|
|
263
268
|
}, null, 8, ["schema", "type", "modelValue"])) : c("", !0),
|
|
264
|
-
t.canSearch ? (
|
|
269
|
+
t.canSearch ? (o(), m("div", Oe, [
|
|
265
270
|
w(De, {
|
|
266
271
|
lazy: "",
|
|
267
272
|
modelValue: g.value,
|
|
268
|
-
"onUpdate:modelValue":
|
|
273
|
+
"onUpdate:modelValue": i[3] || (i[3] = (a) => g.value = a),
|
|
269
274
|
icon: "lucide:search",
|
|
270
275
|
placeholder: le.value,
|
|
271
276
|
variant: "outline",
|
|
@@ -283,10 +288,10 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
283
288
|
loading: t.loading,
|
|
284
289
|
data: t.data,
|
|
285
290
|
refetch: t.refetch,
|
|
286
|
-
onAdd:
|
|
291
|
+
onAdd: i[4] || (i[4] = (a) => e.$emit("add"))
|
|
287
292
|
}, null, 8, ["can-add", "add-component", "add-btn", "loading", "data", "refetch"])
|
|
288
293
|
]),
|
|
289
|
-
N.value ? (
|
|
294
|
+
N.value ? (o(), p(qe, {
|
|
290
295
|
key: 0,
|
|
291
296
|
"export-props": t.exportProps,
|
|
292
297
|
"import-props": t.importProps,
|
|
@@ -296,24 +301,24 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
296
301
|
])
|
|
297
302
|
])
|
|
298
303
|
], 2)),
|
|
299
|
-
|
|
304
|
+
d(e.$slots, "sub-header"),
|
|
305
|
+
z.value ? (o(), m("div", {
|
|
300
306
|
key: 2,
|
|
301
|
-
class: q(["
|
|
307
|
+
class: q(["-mt-1", t.quickFilterVariant == "line" ? "mb-1.5 sm:mb-1" : "mb-2"])
|
|
302
308
|
}, [
|
|
303
309
|
w(Ue, {
|
|
304
310
|
modelValue: y.value,
|
|
305
|
-
"onUpdate:modelValue":
|
|
311
|
+
"onUpdate:modelValue": i[5] || (i[5] = (a) => y.value = a),
|
|
306
312
|
options: t.quickFilters,
|
|
307
313
|
variant: t.quickFilterVariant,
|
|
308
314
|
onChange: H
|
|
309
315
|
}, null, 8, ["modelValue", "options", "variant"])
|
|
310
316
|
], 2)) : c("", !0),
|
|
311
|
-
d(e.$slots, "sub-header"),
|
|
312
317
|
I("div", {
|
|
313
318
|
class: q(["flex-1 w-full relative", t.containerClass])
|
|
314
319
|
}, [
|
|
315
|
-
!_.value && !t.loading ? (
|
|
316
|
-
e.$slots.empty ? d(e.$slots, "empty", { key: 0 }) : (
|
|
320
|
+
!_.value && !t.loading ? (o(), m(M, { key: 0 }, [
|
|
321
|
+
e.$slots.empty ? d(e.$slots, "empty", { key: 0 }) : (o(), p(Ee, {
|
|
317
322
|
key: 1,
|
|
318
323
|
"empty-title": t.emptyTitle,
|
|
319
324
|
"empty-title-i18n": t.emptyTitleI18n,
|
|
@@ -325,7 +330,7 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
325
330
|
"add-component": t.addComponent,
|
|
326
331
|
"add-btn": t.addBtn
|
|
327
332
|
}, null, 8, ["empty-title", "empty-title-i18n", "empty-description", "empty-description-i18n", "empty-icon", "is-filtered", "can-add", "add-component", "add-btn"]))
|
|
328
|
-
], 64)) : (
|
|
333
|
+
], 64)) : (o(), m(M, { key: 1 }, [
|
|
329
334
|
D(h) === "table" && e.$slots.table ? d(e.$slots, "table", {
|
|
330
335
|
key: 0,
|
|
331
336
|
data: t.data,
|
|
@@ -347,19 +352,19 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
347
352
|
selectedRows: r.value,
|
|
348
353
|
delete: b,
|
|
349
354
|
updateSelectedRows: (a) => r.value = a
|
|
350
|
-
}) : U.value ? (
|
|
355
|
+
}) : U.value ? (o(), p(xe(U.value), A({
|
|
351
356
|
key: 3,
|
|
352
357
|
data: t.data,
|
|
353
358
|
loading: t.loading,
|
|
354
359
|
refetch: t.refetch,
|
|
355
360
|
selectedRows: r.value,
|
|
356
|
-
"onUpdate:selectedRows":
|
|
361
|
+
"onUpdate:selectedRows": i[6] || (i[6] = (a) => r.value = a),
|
|
357
362
|
delete: b,
|
|
358
363
|
onDelete: J
|
|
359
|
-
}, t.viewProps), null, 16, ["data", "loading", "refetch", "selectedRows"])) : (
|
|
364
|
+
}, t.viewProps), null, 16, ["data", "loading", "refetch", "selectedRows"])) : (o(), m("div", Le, Ce(re.value), 1))
|
|
360
365
|
], 64))
|
|
361
366
|
], 2),
|
|
362
|
-
t.pagination && t.pageInfo && t.pageInfo.totalPages > 1 ? (
|
|
367
|
+
t.pagination && t.pageInfo && t.pageInfo.totalPages > 1 ? (o(), m("div", ze, [
|
|
363
368
|
w(D(Se), A({
|
|
364
369
|
"current-page": t.pageInfo.currentPage,
|
|
365
370
|
"total-pages": t.pageInfo.totalPages,
|
|
@@ -371,29 +376,29 @@ const Ne = { class: "flex flex-col w-full space-y-8" }, Qe = { class: "flex flex
|
|
|
371
376
|
])) : c("", !0),
|
|
372
377
|
w(Pe, {
|
|
373
378
|
show: C.value,
|
|
374
|
-
"onUpdate:show":
|
|
379
|
+
"onUpdate:show": i[7] || (i[7] = (a) => C.value = a),
|
|
375
380
|
title: ae.value,
|
|
376
|
-
description:
|
|
377
|
-
"confirm-text":
|
|
378
|
-
"cancel-text":
|
|
381
|
+
description: ie.value,
|
|
382
|
+
"confirm-text": ne.value,
|
|
383
|
+
"cancel-text": oe.value,
|
|
379
384
|
variant: "danger",
|
|
380
385
|
onConfirm: G,
|
|
381
|
-
onCancel:
|
|
386
|
+
onCancel: i[8] || (i[8] = (a) => C.value = !1)
|
|
382
387
|
}, null, 8, ["show", "title", "description", "confirm-text", "cancel-text"]),
|
|
383
|
-
$.value ? (
|
|
388
|
+
$.value ? (o(), p(je, {
|
|
384
389
|
key: 4,
|
|
385
390
|
show: $.value,
|
|
386
|
-
"onUpdate:show":
|
|
391
|
+
"onUpdate:show": i[9] || (i[9] = (a) => $.value = a),
|
|
387
392
|
data: t.data || [],
|
|
388
393
|
fields: ue.value,
|
|
389
394
|
mode: pe.value,
|
|
390
395
|
"export-props": t.exportProps,
|
|
391
396
|
"on-export": he
|
|
392
397
|
}, null, 8, ["show", "data", "fields", "mode", "export-props"])) : c("", !0),
|
|
393
|
-
N.value ? (
|
|
398
|
+
N.value ? (o(), m("div", He, [
|
|
394
399
|
w(Ie, A({
|
|
395
|
-
show:
|
|
396
|
-
"onUpdate:show":
|
|
400
|
+
show: T.value,
|
|
401
|
+
"onUpdate:show": i[10] || (i[10] = (a) => T.value = a),
|
|
397
402
|
ref_key: "importDataRef",
|
|
398
403
|
ref: de,
|
|
399
404
|
fields: me.value,
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { $t as
|
|
5
|
-
const
|
|
1
|
+
import { defineComponent as p, computed as c, openBlock as n, createElementBlock as o, renderSlot as a, createElementVNode as u, normalizeClass as d, toDisplayString as m, createBlock as x, withCtx as h, createVNode as I, createCommentVNode as i } from "vue";
|
|
2
|
+
import C from "../../Icon.vue.js";
|
|
3
|
+
import g from "../../Tooltip.vue.js";
|
|
4
|
+
import { $t as f } from "../../../utils/i18n.js";
|
|
5
|
+
const k = { class: "flex flex-col shrink-0" }, v = {
|
|
6
6
|
key: 0,
|
|
7
7
|
class: "flex items-center! gap-2"
|
|
8
|
-
},
|
|
9
|
-
key: 0,
|
|
10
|
-
class: "text-sm text-gray-700 mt-1 md:max-w-[450px]"
|
|
11
|
-
}, S = /* @__PURE__ */ f({
|
|
8
|
+
}, S = /* @__PURE__ */ p({
|
|
12
9
|
__name: "ScreenHeaderTitle",
|
|
13
10
|
props: {
|
|
14
11
|
title: {},
|
|
@@ -16,24 +13,28 @@ const g = { class: "flex flex-col shrink-0" }, k = {
|
|
|
16
13
|
description: {},
|
|
17
14
|
descriptionI18n: {},
|
|
18
15
|
info: {},
|
|
19
|
-
infoI18n: {}
|
|
16
|
+
infoI18n: {},
|
|
17
|
+
titleClass: {},
|
|
18
|
+
descriptionClass: {}
|
|
20
19
|
},
|
|
21
|
-
setup(
|
|
22
|
-
const
|
|
23
|
-
() =>
|
|
20
|
+
setup(t) {
|
|
21
|
+
const e = t, s = c(() => e.titleI18n ? f(e.titleI18n) : e.title), r = c(
|
|
22
|
+
() => e.descriptionI18n ? f(e.descriptionI18n) : e.description
|
|
24
23
|
);
|
|
25
|
-
return (
|
|
26
|
-
a(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
return (l, y) => (n(), o("div", k, [
|
|
25
|
+
a(l.$slots, "title", {}, () => [
|
|
26
|
+
s.value ? (n(), o("div", v, [
|
|
27
|
+
u("h1", {
|
|
28
|
+
class: d(["text-fs-7.5 font-bold text-foreground", t.titleClass])
|
|
29
|
+
}, m(s.value), 3),
|
|
30
|
+
t.info || t.infoI18n ? (n(), x(g, {
|
|
30
31
|
key: 0,
|
|
31
|
-
content:
|
|
32
|
-
"content-i18n":
|
|
32
|
+
content: t.info,
|
|
33
|
+
"content-i18n": t.infoI18n,
|
|
33
34
|
placement: "right"
|
|
34
35
|
}, {
|
|
35
|
-
default:
|
|
36
|
-
|
|
36
|
+
default: h(() => [
|
|
37
|
+
I(C, {
|
|
37
38
|
icon: "lucide:info",
|
|
38
39
|
class: "w-[18px] h-[18px] mt-3! text-muted-foreground hover:text-foreground cursor-pointer transition-colors outline-none"
|
|
39
40
|
})
|
|
@@ -42,8 +43,11 @@ const g = { class: "flex flex-col shrink-0" }, k = {
|
|
|
42
43
|
}, 8, ["content", "content-i18n"])) : i("", !0)
|
|
43
44
|
])) : i("", !0)
|
|
44
45
|
]),
|
|
45
|
-
a(
|
|
46
|
-
|
|
46
|
+
a(l.$slots, "description", {}, () => [
|
|
47
|
+
r.value ? (n(), o("p", {
|
|
48
|
+
key: 0,
|
|
49
|
+
class: d(["text-sm text-gray-700 mt-1 md:max-w-[450px]", t.descriptionClass])
|
|
50
|
+
}, m(r.value), 3)) : i("", !0)
|
|
47
51
|
])
|
|
48
52
|
]));
|
|
49
53
|
}
|
|
@@ -22,7 +22,7 @@ const p = { class: "w-max" }, V = /* @__PURE__ */ i({
|
|
|
22
22
|
};
|
|
23
23
|
return (e, v) => (r(), u("div", p, [
|
|
24
24
|
m(d(b), {
|
|
25
|
-
class: "border-b-0! border-0! pb-0
|
|
25
|
+
class: "border-b-0! border-0! pb-0",
|
|
26
26
|
"model-value": a.modelValue,
|
|
27
27
|
options: t.value,
|
|
28
28
|
variant: a.variant || "line",
|
|
@@ -84,8 +84,11 @@ export interface ScreenProps {
|
|
|
84
84
|
showRefresh?: boolean;
|
|
85
85
|
containerClass?: string;
|
|
86
86
|
headerClass?: string;
|
|
87
|
+
titleClass?: string;
|
|
88
|
+
descriptionClass?: string;
|
|
87
89
|
viewProps?: Record<string, any>;
|
|
88
90
|
hideSelectable?: boolean;
|
|
91
|
+
hideDeleteBtn?: boolean;
|
|
89
92
|
/**
|
|
90
93
|
* Quick-filter tabs rendered below the header (above the content).
|
|
91
94
|
* Inspired by modern dashboards (Shopify, Linear, Vercel).
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"private": false,
|
|
4
4
|
"description": "A Vue 3 UI component library built with Tailwind CSS.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.9.
|
|
6
|
+
"version": "0.9.2",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "index.js",
|
|
9
9
|
"module": "index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"qrcode": "^1.5.4",
|
|
48
48
|
"scrollreveal": "^4.0.9",
|
|
49
49
|
"tailwindcss": "^4.1.18",
|
|
50
|
-
"v-datepicker-lite": "^0.1.
|
|
50
|
+
"v-datepicker-lite": "^0.1.8",
|
|
51
51
|
"v-file-preview": "^0.1.3",
|
|
52
52
|
"v-tooltip-lite": "^0.2.8",
|
|
53
53
|
"vue-carousel-lite": "^0.2.7",
|
package/style.css
CHANGED
|
@@ -967,7 +967,6 @@ textarea::-webkit-scrollbar-thumb:hover {
|
|
|
967
967
|
background-color: var(--color-scrollbar-hover) !important;
|
|
968
968
|
}
|
|
969
969
|
|
|
970
|
-
|
|
971
970
|
/* --- Vite Generated CSS --- */
|
|
972
971
|
input[data-v-a8237529]::-webkit-outer-spin-button,input[data-v-a8237529]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number][data-v-a8237529]{-moz-appearance:textfield;appearance:textfield}@keyframes onAutoFillStart{0%{opacity:1}to{opacity:1}}@keyframes onAutoFillCancel{0%{opacity:1}to{opacity:1}}input.autofill-detect:-webkit-autofill{animation-name:onAutoFillStart;animation-duration:1ms;animation-fill-mode:both}input.autofill-detect:not(:-webkit-autofill){animation-name:onAutoFillCancel;animation-duration:1ms;animation-fill-mode:both}.dropdown-menu[data-v-adc57063]{will-change:transform;contain:layout style}.v-modal-overlay[data-v-7c958115]{background-color:#00000052}.v-modal-backdrop[data-v-7c958115]{transform:translateZ(0);will-change:opacity}.modal-body[data-v-7c958115]{will-change:transform;contain:layout style}.blink-bg[data-v-7c958115]{animation:blink-animation-7c958115 1s infinite}@keyframes blink-animation-7c958115{0%{background-color:inherit}15%{background-color:var(--color-gray-250)}35%{background-color:inherit}75%{background-color:var(--color-gray-250)}to{background-color:inherit}}.IroBox{border-radius:8px!important}.custom-fields-table[data-v-0cced8cd]{will-change:transform;contain:layout style}.custom-fields-table[data-v-0cced8cd] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-0cced8cd] input,.custom-fields-table[data-v-0cced8cd] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-0cced8cd] input,.custom-fields-table[data-v-0cced8cd] textarea,.custom-fields-table[data-v-0cced8cd] select,.custom-fields-table[data-v-0cced8cd] .input-wrapper,.custom-fields-table[data-v-0cced8cd] .tooltip-trigger button{border:none!important;background:transparent!important;box-shadow:none!important;border-radius:0!important;height:100%!important;min-height:40px}.custom-fields-table[data-v-0cced8cd] .tooltip-trigger button{justify-content:space-between!important}.custom-fields-table[data-v-0cced8cd] input:focus,.custom-fields-table[data-v-0cced8cd] textarea:focus,.custom-fields-table[data-v-0cced8cd] select:focus,.custom-fields-table[data-v-0cced8cd] .input-wrapper:focus-within{background-color:hsla(var(--primary) / .03)!important;box-shadow:inset 0 0 0 2px hsla(var(--primary) / .1)!important}.custom-fields-table[data-v-0cced8cd] .w-full{width:100%;height:100%}.list-enter-active[data-v-0cced8cd]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-0cced8cd]{opacity:0;transform:translateY(-5px)}.form-field-item[data-v-1139135c]{display:flex;flex-direction:column}.form-field-item[data-v-1139135c]:has([role=switch]),.form-field-item[data-v-1139135c]:has([role=checkbox]){flex-direction:row;align-items:center;justify-content:flex-start}.form-container[data-v-d7b4ffda]{width:100%}[data-tabes][data-v-262d5698]:not(.inline-flex):not([class*=gap-6])>:where(button,a,[role=tab]){flex:1 1 0%;min-width:0}[data-tabes].inline-flex[data-v-262d5698]{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}[data-tabes].inline-flex[data-v-262d5698]::-webkit-scrollbar{display:none}@media(max-width:480px){[data-tabes][data-v-262d5698]:not([class*=flex-wrap]){overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}[data-tabes][data-v-262d5698]:not([class*=flex-wrap])::-webkit-scrollbar{display:none}}.custom-scrollbar[data-v-3a733454]::-webkit-scrollbar{width:0px}.custom-scrollbar[data-v-3a733454]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar[data-v-3a733454]::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:10px}.scrollable-container[data-v-3a733454]{will-change:transform;contain:layout style}.custom-scrollbar-x[data-v-1285df4f]::-webkit-scrollbar{height:8px}.custom-scrollbar-x[data-v-1285df4f]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar-x[data-v-1285df4f]::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:10px}.scrollable-container[data-v-1285df4f]{will-change:transform;contain:layout style}.v-sidepanel-overlay[data-v-ff2923de]{background-color:#0003}.sidepanel-body[data-v-ff2923de]{will-change:transform;contain:layout style}.navbar-tabs-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.navbar-tabs-no-scrollbar::-webkit-scrollbar{display:none}.fade-x-enter-active,.fade-x-leave-active{transition:opacity .15s ease}.fade-x-enter-from,.fade-x-leave-to{opacity:0}.breadcrumb-item[data-v-ecb5df7c]{display:inline-flex;align-items:center;cursor:pointer}.breadcrumb-link[data-v-ecb5df7c]{display:inline-flex;align-items:center;gap:.35em;color:var(--color-muted-foreground);text-decoration:none;transition:color .15s ease,background-color .15s ease;border-radius:var(--radius-sm)}.breadcrumb-link[data-v-ecb5df7c]:not(.current):not(.disabled):hover{color:var(--color-foreground)}.breadcrumb-link.current[data-v-ecb5df7c]{color:var(--color-foreground);font-weight:600;cursor:default}.breadcrumb-link.disabled[data-v-ecb5df7c]{opacity:.45;cursor:not-allowed;pointer-events:none}.breadcrumb-icon[data-v-ecb5df7c]{flex-shrink:0}.breadcrumb-list[data-v-d1e90135]{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:.38em}.breadcrumb--sm[data-v-d1e90135]{font-size:var(--text--fs-2)}.breadcrumb--md[data-v-d1e90135]{font-size:var(--text-fs-0.5, 1em)}.breadcrumb--lg[data-v-d1e90135]{font-size:var(--text-fs-2)}.breadcrumb-separator[data-v-d1e90135]{display:inline-flex;align-items:center;color:var(--color-gray-500);-webkit-user-select:none;user-select:none;font-size:.9em;line-height:1;padding:0 .1em}.breadcrumb-ellipsis[data-v-d1e90135]{display:inline-flex;align-items:center}.breadcrumb-ellipsis-btn[data-v-d1e90135]{display:inline-flex;align-items:center;justify-content:center;width:1.6em;height:1.6em;border-radius:var(--radius-sm);border:1px solid var(--color-border);background:transparent;color:var(--color-muted-foreground);cursor:pointer;font-size:.9em;line-height:1;letter-spacing:.05em;transition:all .15s ease}.breadcrumb-ellipsis-btn[data-v-d1e90135]:hover{background:var(--color-accent);color:var(--color-foreground);border-color:var(--color-gray-350)}.breadcrumb--contained[data-v-d1e90135]{background:var(--color-secondary);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:.45em 1em}.breadcrumb--pills[data-v-d1e90135] .breadcrumb-link{padding:.2em .7em;border-radius:9999px;background:var(--color-secondary);border:1px solid var(--color-border)}.breadcrumb--pills[data-v-d1e90135] .breadcrumb-link:not(.current):not(.disabled):hover{background:var(--color-accent);border-color:var(--color-gray-350)}.breadcrumb--pills[data-v-d1e90135] .breadcrumb-link.current{background:var(--color-primary);color:var(--color-primary-foreground);border-color:var(--color-primary)}.breadcrumb--arrow .breadcrumb-list[data-v-d1e90135]{gap:0}.breadcrumb--arrow[data-v-d1e90135] .breadcrumb-link{padding:.35em .9em .35em 1.4em;background:var(--color-secondary);clip-path:polygon(0 0,calc(100% - .6em) 0,100% 50%,calc(100% - .6em) 100%,0 100%,.6em 50%);border:none;margin-left:-.3em}.breadcrumb--arrow[data-v-d1e90135] .breadcrumb-item:first-child .breadcrumb-link{padding-left:.9em;clip-path:polygon(0 0,calc(100% - .6em) 0,100% 50%,calc(100% - .6em) 100%,0 100%);border-radius:var(--radius-sm) 0 0 var(--radius-sm);margin-left:0}.breadcrumb--arrow[data-v-d1e90135] .breadcrumb-link:not(.current):not(.disabled):hover{background:var(--color-accent)}.breadcrumb--arrow[data-v-d1e90135] .breadcrumb-link.current{background:var(--color-primary);color:var(--color-primary-foreground)}.breadcrumb--arrow .breadcrumb-separator[data-v-d1e90135]{display:none}.import-table[data-v-cfd99cc9]{width:100%;font-size:.875rem;text-align:left;border-collapse:collapse}.import-thead[data-v-cfd99cc9]{font-size:.75rem;color:var(--color-muted-foreground, #6b7280);text-transform:uppercase;background-color:var(--color-muted, #f3f4f6);position:sticky;top:0;z-index:10}.import-th[data-v-cfd99cc9]{padding:.75rem 1rem;font-weight:500}.import-th-center[data-v-cfd99cc9]{text-align:center;width:4rem}.import-tbody .import-tr[data-v-cfd99cc9]{border-bottom:1px solid var(--color-border, #e5e7eb)}.import-tbody .import-tr[data-v-cfd99cc9]:last-child{border-bottom:none}.import-tr-active[data-v-cfd99cc9]{transition:background-color .2s ease-in-out}.import-tr-active[data-v-cfd99cc9]:hover{background-color:var(--color-muted, #f3f4f6);opacity:.85}.import-tr-ignored[data-v-cfd99cc9]{background-color:var(--color-muted, #f3f4f6);opacity:.6}.import-td-header[data-v-cfd99cc9]{padding:.75rem 1rem;font-weight:500;color:var(--color-foreground, #111827);white-space:nowrap}.import-td-dropdown[data-v-cfd99cc9]{padding:.5rem 1rem;min-width:200px}.import-td-preview[data-v-cfd99cc9]{padding:.75rem 1rem;color:var(--color-muted-foreground, #6b7280);min-width:200px;max-width:300px}.import-td-action[data-v-cfd99cc9]{padding:.75rem 1rem;text-align:center;vertical-align:middle}.heatmap-container[data-v-00476f00]{width:100%;height:100%;display:flex;flex-direction:column;min-height:0}.heatmap-wrapper[data-v-00476f00]{width:100%;height:100%;overflow:auto;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:16px;box-sizing:border-box;position:relative}.heatmap-grid[data-v-00476f00]{width:fit-content;height:fit-content;transition:all .2s ease-in-out}.heatmap-cell[data-v-00476f00]{aspect-ratio:1 / 1;border-radius:2px;transition:all .15s ease-in-out;border:1px solid transparent;box-sizing:border-box}.heatmap-cell-interactive[data-v-00476f00]{cursor:pointer}.heatmap-cell-interactive[data-v-00476f00]:hover{transform:scale(1.1);border-color:var(--border);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;z-index:10;position:relative}.heatmap-cell-empty[data-v-00476f00]{opacity:.6}.heatmap-cell-hovered[data-v-00476f00]{outline:2px solid var(--primary);outline-offset:1px}.heatmap-cell-label[data-v-00476f00]{font-size:8px;font-weight:500;color:var(--foreground);opacity:.8;display:flex;align-items:center;justify-content:center;height:100%;width:100%;pointer-events:none}.heatmap-legend[data-v-00476f00]{display:flex;align-items:center;gap:.5rem;margin-top:1rem;font-size:.75rem;color:var(--muted-foreground);flex-shrink:0}.heatmap-legend-label[data-v-00476f00]{font-weight:500}.heatmap-legend-colors[data-v-00476f00]{display:flex;gap:.125rem}.heatmap-legend-item[data-v-00476f00]{width:.75rem;height:.75rem;border-radius:.375rem;border:1px solid var(--border)}@media(max-width:640px){.heatmap-wrapper[data-v-00476f00]{padding:12px}.heatmap-cell[data-v-00476f00]{border-radius:2px}.heatmap-cell-label[data-v-00476f00]{font-size:7px}}@media(min-width:641px)and (max-width:1023px){.heatmap-wrapper[data-v-00476f00]{padding:14px}.heatmap-cell[data-v-00476f00]{border-radius:2px}}@media(min-width:1024px){.heatmap-wrapper[data-v-00476f00]{padding:16px}.heatmap-cell[data-v-00476f00]{border-radius:3px}}.masonry-item[data-v-c29d0159]{content-visibility:auto;contain-intrinsic-size:1px 200px}.carousel-wrapper[data-v-4034dab4]{width:100%;position:relative;will-change:transform;contain:layout style}.file-tree-container[data-v-91337be9],.sheet-container[data-v-a5e9ca6f]{will-change:transform;contain:layout style}.accordion-enter-active[data-v-0075dffb],.accordion-leave-active[data-v-0075dffb]{transition:height .3s ease-in-out;will-change:height}.content-wrapper[data-v-0075dffb]{contain:paint}.sidebar-manu-item .tooltip-trigger{width:100%!important}.sidebar-menu-tooltip{margin-left:4px!important}[dir=rtl] .sidebar-menu-tooltip{margin-right:4px!important}.bg-stripe[data-v-454a1505]{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.animate-progress-stripe[data-v-454a1505]{animation:progress-stripe-454a1505 1s linear infinite}@keyframes progress-stripe-454a1505{0%{background-position:1rem 0}to{background-position:0 0}}.animate-progress-indeterminate[data-v-454a1505]{animation:progress-indeterminate-454a1505 1.5s infinite cubic-bezier(.65,.815,.735,.395)}@keyframes progress-indeterminate-454a1505{0%{transform:translate(-100%) scaleX(.2)}50%{transform:translate(0) scaleX(.5)}to{transform:translate(100%) scaleX(.2)}}.permission-matrix-wrapper[data-v-ba68e64a]{max-height:70vh;will-change:transform;contain:layout style}.permission-matrix-wrapper[data-v-ba68e64a]::-webkit-scrollbar{width:6px;height:6px}.permission-matrix-wrapper[data-v-ba68e64a]::-webkit-scrollbar-track{background:transparent}.permission-matrix-wrapper[data-v-ba68e64a]::-webkit-scrollbar-thumb{background:var(--color-gray-350);border-radius:3px}.permission-matrix-wrapper[data-v-ba68e64a]::-webkit-scrollbar-thumb:hover{background:var(--color-gray-400)}.permission-list-wrapper[data-v-a42b2fb0]{border:1px solid var(--color-border);border-radius:.5rem;overflow:hidden;background-color:var(--color-background);will-change:transform;contain:layout style}.custom-list-header[data-v-a42b2fb0]{background-color:var(--color-muted);border-bottom:1px solid var(--color-border);padding:var(--cell-py) var(--cell-px)}.custom-list-group-content .custom-list-item[data-v-a42b2fb0]{border-bottom:1px solid var(--color-border);padding:var(--cell-py) var(--cell-px);background-color:var(--color-background)}.custom-list-group-content .custom-list-item[data-v-a42b2fb0]:hover{background-color:var(--color-accent)}.custom-list-group-content .custom-list-item[data-v-a42b2fb0]:last-child{border-bottom:none}.custom-list-group-content+.custom-list-header[data-v-a42b2fb0],.custom-list-header+.custom-list-header[data-v-a42b2fb0]{border-top:1px solid var(--color-border)}.permission-list-wrapper>.custom-list-header[data-v-a42b2fb0]:last-child{border-bottom:none}.permission-matrix-wrapper[data-v-0b1ab970]{border:1px solid var(--color-border);background-color:var(--color-gray-100);border-radius:.5rem;overflow:auto;max-height:65vh;position:relative;will-change:transform;contain:layout style}.permission-matrix-wrapper[data-v-0b1ab970]::-webkit-scrollbar{width:6px;height:6px}.permission-matrix-wrapper[data-v-0b1ab970]::-webkit-scrollbar-track{background:transparent}.permission-matrix-wrapper[data-v-0b1ab970]::-webkit-scrollbar-thumb{background:var(--color-gray-350);border-radius:3px}.permission-matrix-wrapper[data-v-0b1ab970]::-webkit-scrollbar-thumb:hover{background:var(--color-gray-400)}.custom-table[data-v-0b1ab970]{width:100%;border-collapse:collapse}.custom-sticky-header th[data-v-0b1ab970]{position:sticky;top:0;z-index:20;box-shadow:0 1px 0 var(--color-border)}.custom-th[data-v-0b1ab970]{background-color:var(--color-gray-150);color:var(--color-foreground);background-clip:padding-box;border-bottom:none;border-left:1px solid var(--color-border);padding:var(--cell-py) var(--cell-px);text-align:left;font-weight:600;min-width:200px}thead:not(.custom-sticky-header) .custom-th[data-v-0b1ab970]{border-bottom:1px solid var(--color-border)}.custom-th.text-center[data-v-0b1ab970]{text-align:center;min-width:100px}.custom-th[data-v-0b1ab970]:first-child{border-left:none}.custom-td[data-v-0b1ab970]{border-bottom:1px solid var(--color-border);border-left:1px solid var(--color-border);padding:var(--cell-py) var(--cell-px)}.custom-td.text-center[data-v-0b1ab970]{text-align:center}.custom-td[data-v-0b1ab970]:first-child{border-left:none}.custom-group-row td[data-v-0b1ab970]{background-color:var(--color-gray-100);border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}.custom-entity-row[data-v-0b1ab970]{background-color:var(--color-background);transition:background-color .1s ease}.custom-entity-row[data-v-0b1ab970]:hover{background-color:var(--color-gray-50)}.custom-entity-row:last-child td[data-v-0b1ab970]{border-bottom:none}.custom-active-cell[data-v-0b1ab970]{cursor:pointer}.custom-active-cell[data-v-0b1ab970]:hover{background-color:var(--color-accent)}.button-group[data-v-ba735fac] button{align-self:stretch;height:auto!important;min-height:unset!important;min-width:unset!important;width:auto!important}.button-group[data-v-ba735fac]:not(.vertical-group) button{aspect-ratio:unset}.attached-group[data-v-ba735fac] button{position:relative;--radius: .375rem}.attached-group[data-v-ba735fac] button:focus-visible,.attached-group[data-v-ba735fac] button:hover{z-index:10}.attached-group[data-v-ba735fac]:not(.vertical-group) button:not(:first-child){margin-left:-1px}.attached-group[data-v-ba735fac]:not(.vertical-group) button:first-child{border-top-left-radius:var(--radius);border-bottom-left-radius:var(--radius);border-top-right-radius:0;border-bottom-right-radius:0}.attached-group[data-v-ba735fac]:not(.vertical-group) button:not(:first-child):not(:last-child){border-radius:0}.attached-group[data-v-ba735fac]:not(.vertical-group) button:last-child{border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius);border-top-left-radius:0;border-bottom-left-radius:0}.vertical-group[data-v-ba735fac] button:not(:first-child){margin-top:-1px}.vertical-group[data-v-ba735fac] button:first-child{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.vertical-group[data-v-ba735fac] button:not(:first-child):not(:last-child){border-radius:0}.vertical-group[data-v-ba735fac] button:last-child{border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);border-top-left-radius:0;border-top-right-radius:0}.attached-group[data-v-ba735fac]:not(.vertical-group) button:not(:first-child):not(.border):before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none;height:100%}.vertical-group[data-v-ba735fac] button:not(:first-child):not(.border):before{content:"";position:absolute;top:0;left:0;right:0;height:1px;width:100%;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none}.toast-item[data-v-9c775c23]{will-change:transform,opacity;contain:layout style}.first-toast-enter-active[data-v-9c775c23]{animation:first-toast-in-9c775c23 .45s cubic-bezier(.23,1,.32,1) forwards}.first-toast-leave-active[data-v-9c775c23]{transition:all .25s ease-in}.first-toast-leave-to[data-v-9c775c23]{opacity:0;transform:scale(.98)}@keyframes first-toast-in-9c775c23{0%{opacity:var(--entrance-opacity, .6);transform:translateY(var(--entrance-offset, 25px)) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.stack-toast-enter-active[data-v-9c775c23],.stack-toast-leave-active[data-v-9c775c23]{transition:all .3s cubic-bezier(.16,1,.3,1)}.stack-toast-enter-from[data-v-9c775c23]{opacity:0;transform:scale(.95) translateY(10px)}.stack-toast-leave-to[data-v-9c775c23]{opacity:0;transform:scale(.95)}.stack-toast-move[data-v-9c775c23]{transition:transform .4s cubic-bezier(.16,1,.3,1)}.cp-item-transition[data-v-66b1ae06]{transition:background-color 80ms ease,color 80ms ease}.command-palette-content[data-v-1bae4c0f] ::-webkit-scrollbar{width:4px}.command-palette-content[data-v-1bae4c0f] ::-webkit-scrollbar-track{background:transparent}.command-palette-content[data-v-1bae4c0f] ::-webkit-scrollbar-thumb{background:var(--border);border-radius:9999px}.cp-scroll-container[data-v-1bae4c0f]{transform:translateZ(0);will-change:transform;touch-action:pan-y;backface-visibility:hidden}
|
|
973
972
|
|