vlite3 1.0.3 → 1.0.4

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.
@@ -0,0 +1,147 @@
1
+ import { defineComponent as y, computed as b, ref as k, openBlock as t, createElementBlock as l, normalizeClass as o, createVNode as u, createCommentVNode as s, createElementVNode as n, toDisplayString as c, unref as B, createBlock as C, withModifiers as S } from "vue";
2
+ import D from "../Avatar.vue.js";
3
+ import f from "../Button.vue.js";
4
+ import p from "../AttachmentsList/AttachmentsList.vue.js";
5
+ const T = {
6
+ key: 0,
7
+ class: "flex-shrink-0 flex flex-col justify-end pb-1"
8
+ }, A = {
9
+ key: 0,
10
+ class: "mb-1 text-xs text-muted-foreground ml-1"
11
+ }, E = {
12
+ key: 0,
13
+ class: "text-sm whitespace-pre-wrap leading-relaxed"
14
+ }, N = { class: "opacity-0 group-hover/bubble:opacity-100 focus-within:opacity-100 transition-opacity flex gap-1 px-2 pointer-events-none group-hover/bubble:pointer-events-auto focus-within:pointer-events-auto" }, z = {
15
+ key: 1,
16
+ class: "relative flex items-center"
17
+ }, $ = {
18
+ key: 1,
19
+ class: "mt-1 text-[10px] text-muted-foreground mx-1"
20
+ }, M = /* @__PURE__ */ y({
21
+ __name: "ChatBubble",
22
+ props: {
23
+ message: {},
24
+ isSender: { type: Boolean },
25
+ showAvatar: { type: Boolean },
26
+ showUserInfo: { type: Boolean },
27
+ showTimestamp: { type: Boolean },
28
+ allowDeleteAll: { type: Boolean },
29
+ allowEditAll: { type: Boolean },
30
+ confirmDelete: { type: Boolean }
31
+ },
32
+ emits: ["delete", "edit"],
33
+ setup(e, { emit: g }) {
34
+ const r = e, m = g, x = b(() => r.message.timestamp ? new Date(r.message.timestamp).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : ""), a = k(!1);
35
+ let i = null;
36
+ const v = () => {
37
+ if (r.confirmDelete === !1) {
38
+ m("delete", r.message.id);
39
+ return;
40
+ }
41
+ a.value ? (a.value = !1, i && (clearTimeout(i), i = null), m("delete", r.message.id)) : (a.value = !0, i = setTimeout(() => {
42
+ a.value = !1, i = null;
43
+ }, 3e3));
44
+ }, h = () => {
45
+ a.value = !1, i && (clearTimeout(i), i = null);
46
+ };
47
+ return (w, d) => (t(), l("div", {
48
+ class: o(["flex w-full gap-3 group", e.isSender ? "flex-row-reverse" : "flex-row"])
49
+ }, [
50
+ e.showAvatar ? (t(), l("div", T, [
51
+ u(D, {
52
+ src: e.message.avatar,
53
+ alt: e.message.senderName,
54
+ size: "sm"
55
+ }, null, 8, ["src", "alt"])
56
+ ])) : s("", !0),
57
+ n("div", {
58
+ class: o(["flex flex-col max-w-[85%] md:max-w-[75%]", e.isSender ? "items-end" : "items-start"])
59
+ }, [
60
+ e.showUserInfo && e.message.senderName && !e.isSender ? (t(), l("div", A, c(e.message.senderName), 1)) : s("", !0),
61
+ n("div", {
62
+ class: o(["relative flex items-center group/bubble", e.isSender ? "flex-row-reverse" : "flex-row"])
63
+ }, [
64
+ n("div", {
65
+ class: o(["px-3.5 py-2.5 rounded-2xl break-words relative min-w-[60px]", [
66
+ e.isSender ? "bg-primary text-primary-foreground rounded-br-sm" : "bg-muted text-foreground rounded-bl-sm"
67
+ ]])
68
+ }, [
69
+ e.message.text ? (t(), l("p", E, c(e.message.text), 1)) : s("", !0),
70
+ e.message.attachments && e.message.attachments.length > 0 ? (t(), l("div", {
71
+ key: 1,
72
+ class: o({ "mt-2": e.message.text })
73
+ }, [
74
+ u(B(p), {
75
+ attachments: e.message.attachments,
76
+ variant: "inline",
77
+ "can-view": !0,
78
+ "can-download": !0
79
+ }, null, 8, ["attachments"])
80
+ ], 2)) : s("", !0),
81
+ e.message.isEdited ? (t(), l("div", {
82
+ key: 2,
83
+ class: o(["text-[10px] opacity-70 mt-0.5 text-right", e.isSender ? "text-primary-foreground" : "text-muted-foreground"])
84
+ }, " (edited) ", 2)) : s("", !0)
85
+ ], 2),
86
+ n("div", N, [
87
+ e.isSender || e.allowEditAll ? (t(), C(f, {
88
+ key: 0,
89
+ variant: "ghost",
90
+ size: "xs",
91
+ icon: "lucide:pencil",
92
+ rounded: "full",
93
+ class: "text-muted-foreground hover:text-foreground h-7 w-7",
94
+ onClick: d[0] || (d[0] = (j) => m("edit", e.message)),
95
+ "aria-label": "Edit message"
96
+ })) : s("", !0),
97
+ e.isSender || e.allowDeleteAll ? (t(), l("div", z, [
98
+ u(f, {
99
+ variant: "ghost",
100
+ size: "xs",
101
+ icon: a.value ? "lucide:check" : "lucide:trash-2",
102
+ rounded: "full",
103
+ class: "h-7 w-7 transition-colors",
104
+ onClick: v,
105
+ "aria-label": a.value ? "Confirm delete" : "Delete message"
106
+ }, null, 8, ["icon", "aria-label"]),
107
+ a.value ? (t(), l("button", {
108
+ key: 0,
109
+ class: "absolute -top-1.5 -right-1.5 w-3.5 h-3.5 rounded-full bg-muted border border-border flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors",
110
+ onClick: S(h, ["stop"]),
111
+ "aria-label": "Cancel delete"
112
+ }, [...d[1] || (d[1] = [
113
+ n("svg", {
114
+ xmlns: "http://www.w3.org/2000/svg",
115
+ viewBox: "0 0 24 24",
116
+ fill: "none",
117
+ stroke: "currentColor",
118
+ "stroke-width": "3",
119
+ "stroke-linecap": "round",
120
+ "stroke-linejoin": "round",
121
+ class: "w-2 h-2"
122
+ }, [
123
+ n("line", {
124
+ x1: "18",
125
+ y1: "6",
126
+ x2: "6",
127
+ y2: "18"
128
+ }),
129
+ n("line", {
130
+ x1: "6",
131
+ y1: "6",
132
+ x2: "18",
133
+ y2: "18"
134
+ })
135
+ ], -1)
136
+ ])])) : s("", !0)
137
+ ])) : s("", !0)
138
+ ])
139
+ ], 2),
140
+ e.showTimestamp && e.message.timestamp ? (t(), l("div", $, c(x.value), 1)) : s("", !0)
141
+ ], 2)
142
+ ], 2));
143
+ }
144
+ });
145
+ export {
146
+ M as default
147
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./ChatBubble.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,298 @@
1
+ import { defineComponent as P, ref as m, onMounted as O, onUnmounted as q, watch as G, nextTick as U, computed as J, openBlock as d, createElementBlock as v, createElementVNode as l, createTextVNode as Q, createCommentVNode as k, Fragment as M, renderList as F, createBlock as W, toDisplayString as H, createVNode as g, unref as x, withCtx as X, withDirectives as Y, vModelText as Z } from "vue";
2
+ import ee from "./ChatBubble.vue.js";
3
+ import N from "../Button.vue.js";
4
+ import V from "../Icon.vue.js";
5
+ import le from "../FilePicker/FilePicker.vue.js";
6
+ import { useFileUpload as te } from "../Form/composables/useFileUpload.js";
7
+ const ae = { class: "flex flex-col w-full h-full flex-1 min-h-0 bg-transparent" }, oe = {
8
+ key: 0,
9
+ class: "py-2 mb-2 text-center text-xs text-muted-foreground flex justify-center items-center gap-2"
10
+ }, se = {
11
+ key: 1,
12
+ class: "flex items-center justify-center h-full text-muted-foreground text-sm"
13
+ }, re = { class: "flex flex-col gap-2 pb-2" }, ie = { class: "p-3 shrink-0 bg-transparent flex flex-col gap-1" }, ne = {
14
+ key: 0,
15
+ class: "flex items-center justify-between px-3 py-1.5 bg-muted/50 rounded-lg text-xs text-muted-foreground border border-border animate-in fade-in slide-in-from-bottom-2"
16
+ }, de = { class: "flex items-center gap-2" }, ue = { class: "truncate max-w-[200px] sm:max-w-[300px] md:max-w-[400px]" }, ce = { class: "relative flex flex-col bg-card border border-border rounded-xl shadow-sm focus-within:border-primary transition-colors overflow-hidden" }, fe = {
17
+ key: 0,
18
+ class: "flex flex-wrap gap-2 p-3 bg-muted/10 border-b border-border"
19
+ }, me = ["title"], ve = ["onClick", "disabled"], he = { class: "flex items-end gap-2 p-1" }, pe = { class: "shrink-0 mb-1 ml-1" }, ge = ["placeholder", "disabled"], xe = { class: "shrink-0 mb-1 mr-1" }, Ae = /* @__PURE__ */ P({
20
+ __name: "ChatInterface",
21
+ props: {
22
+ data: {},
23
+ currentUserId: {},
24
+ showAvatar: { type: Boolean, default: !0 },
25
+ showUserInfo: { type: Boolean, default: !0 },
26
+ showTimestamp: { type: Boolean, default: !0 },
27
+ placeholder: { default: "Type a message..." },
28
+ isLoadingMore: { type: Boolean, default: !1 },
29
+ allowDeleteAll: { type: Boolean, default: !1 },
30
+ allowEditAll: { type: Boolean, default: !1 },
31
+ confirmDelete: { type: Boolean, default: !0 },
32
+ folderId: {},
33
+ maxFileSize: {}
34
+ },
35
+ emits: ["add", "delete", "edit", "refetch"],
36
+ setup(s, { emit: _ }) {
37
+ const w = s, C = _, u = m(null), T = m(null), r = m(null), c = m(""), E = m(0), y = m(!1), i = m(null), o = m([]), { handleUploadFiles: L, loading: f } = te();
38
+ let b = null;
39
+ O(() => {
40
+ T.value && u.value && (b = new IntersectionObserver(
41
+ ([e]) => {
42
+ e.isIntersecting && w.data.length > 0 && !w.isLoadingMore && (E.value = u.value.scrollHeight, y.value = !0, C("refetch"));
43
+ },
44
+ {
45
+ root: u.value,
46
+ threshold: 0
47
+ }
48
+ ), b.observe(T.value)), A();
49
+ }), q(() => {
50
+ b && b.disconnect();
51
+ }), G(
52
+ () => w.data.length,
53
+ async (e, t) => {
54
+ const a = u.value;
55
+ if (a)
56
+ if (await U(), y.value && e > (t || 0)) {
57
+ const h = a.scrollHeight - E.value;
58
+ h > 0 && (a.scrollTop = a.scrollTop + h), y.value = !1;
59
+ } else !y.value && e > (t || 0) && A();
60
+ }
61
+ );
62
+ const A = async () => {
63
+ await U(), u.value && u.value.scrollTo({
64
+ top: u.value.scrollHeight,
65
+ behavior: "smooth"
66
+ });
67
+ }, S = () => {
68
+ if (!r.value) return;
69
+ r.value.style.height = "auto";
70
+ const e = r.value.scrollHeight;
71
+ r.value.style.height = `${Math.min(e, 120)}px`;
72
+ }, $ = (e) => {
73
+ e.key === "Enter" && !e.shiftKey ? (e.preventDefault(), f.value || D()) : e.key === "Escape" && i.value && (e.preventDefault(), z());
74
+ }, R = (e) => {
75
+ i.value = e, c.value = e.text, r.value && (r.value.focus(), U(() => {
76
+ S();
77
+ }));
78
+ }, z = () => {
79
+ i.value = null, c.value = "", r.value && (r.value.style.height = "auto", r.value.focus());
80
+ }, I = J(() => {
81
+ const e = !!c.value.trim(), t = Array.isArray(o.value) && o.value.length > 0;
82
+ return (e || t) && !f.value;
83
+ }), j = (e) => {
84
+ f.value || Array.isArray(o.value) && (o.value.splice(e, 1), o.value.length === 0 && (o.value = []));
85
+ }, D = async () => {
86
+ if (!I.value) return;
87
+ const e = c.value.trim(), t = Array.isArray(o.value) && o.value.length > 0, a = !!i.value;
88
+ if (a && i.value)
89
+ e !== i.value.text && C("edit", { ...i.value, text: e, isEdited: !0 }), i.value = null, c.value = "";
90
+ else {
91
+ let n = [];
92
+ if (t) {
93
+ const h = o.value.map((B) => B.file).filter(Boolean);
94
+ if (h.length > 0) {
95
+ const B = await L(h, w.folderId);
96
+ n = o.value.map((p, K) => ({
97
+ fileUrl: B[K] || "",
98
+ fileName: p.fileName,
99
+ fileType: p.fileType,
100
+ fileSize: p.fileSize
101
+ })).filter((p) => p.fileUrl !== null && p.fileUrl !== "");
102
+ }
103
+ }
104
+ C("add", e, n.length > 0 ? n : void 0), o.value = [], c.value = "";
105
+ }
106
+ r.value && (r.value.style.height = "auto", r.value.focus()), a || A();
107
+ };
108
+ return (e, t) => (d(), v("div", ae, [
109
+ l("div", {
110
+ ref_key: "messageListRef",
111
+ ref: u,
112
+ class: "flex-1 overflow-y-auto px-4 py-4 scrollbar-thin scrollbar-stable",
113
+ role: "log",
114
+ "aria-live": "polite",
115
+ "aria-label": "Chat messages",
116
+ style: { "will-change": "transform", contain: "layout style" }
117
+ }, [
118
+ l("div", {
119
+ ref_key: "observerTargetRef",
120
+ ref: T,
121
+ class: "h-1 w-full shrink-0"
122
+ }, null, 512),
123
+ s.isLoadingMore ? (d(), v("div", oe, [...t[3] || (t[3] = [
124
+ l("svg", {
125
+ class: "animate-spin h-4 w-4 text-primary",
126
+ xmlns: "http://www.w3.org/2000/svg",
127
+ fill: "none",
128
+ viewBox: "0 0 24 24"
129
+ }, [
130
+ l("circle", {
131
+ class: "opacity-25",
132
+ cx: "12",
133
+ cy: "12",
134
+ r: "10",
135
+ stroke: "currentColor",
136
+ "stroke-width": "4"
137
+ }),
138
+ l("path", {
139
+ class: "opacity-75",
140
+ fill: "currentColor",
141
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
142
+ })
143
+ ], -1),
144
+ Q(" Loading older messages... ", -1)
145
+ ])])) : k("", !0),
146
+ !s.data.length && !s.isLoadingMore ? (d(), v("div", se, " No messages yet ")) : k("", !0),
147
+ l("div", re, [
148
+ (d(!0), v(M, null, F(s.data, (a) => (d(), W(ee, {
149
+ key: a.id,
150
+ message: a,
151
+ "is-sender": a.senderId === s.currentUserId,
152
+ "show-avatar": s.showAvatar,
153
+ "show-user-info": s.showUserInfo,
154
+ "show-timestamp": s.showTimestamp,
155
+ "allow-delete-all": s.allowDeleteAll,
156
+ "allow-edit-all": s.allowEditAll,
157
+ "confirm-delete": s.confirmDelete,
158
+ onDelete: t[0] || (t[0] = (n) => e.$emit("delete", n)),
159
+ onEdit: R
160
+ }, null, 8, ["message", "is-sender", "show-avatar", "show-user-info", "show-timestamp", "allow-delete-all", "allow-edit-all", "confirm-delete"]))), 128))
161
+ ])
162
+ ], 512),
163
+ l("div", ie, [
164
+ i.value ? (d(), v("div", ne, [
165
+ l("div", de, [
166
+ t[4] || (t[4] = l("svg", {
167
+ xmlns: "http://www.w3.org/2000/svg",
168
+ class: "h-3.5 w-3.5 text-primary shrink-0",
169
+ viewBox: "0 0 24 24",
170
+ fill: "none",
171
+ stroke: "currentColor",
172
+ "stroke-width": "2",
173
+ "stroke-linecap": "round",
174
+ "stroke-linejoin": "round"
175
+ }, [
176
+ l("path", { d: "M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z" })
177
+ ], -1)),
178
+ l("span", ue, "Editing: " + H(i.value.text), 1)
179
+ ]),
180
+ l("div", { class: "flex items-center gap-2 shrink-0" }, [
181
+ t[6] || (t[6] = l("span", { class: "text-[10px] hidden sm:inline-block opacity-60 mr-1" }, "Press Esc to cancel", -1)),
182
+ l("button", {
183
+ onClick: z,
184
+ class: "hover:text-foreground p-0.5 rounded-full hover:bg-muted transition-colors",
185
+ "aria-label": "Cancel editing"
186
+ }, [...t[5] || (t[5] = [
187
+ l("svg", {
188
+ xmlns: "http://www.w3.org/2000/svg",
189
+ class: "h-4 w-4",
190
+ viewBox: "0 0 24 24",
191
+ fill: "none",
192
+ stroke: "currentColor",
193
+ "stroke-width": "2",
194
+ "stroke-linecap": "round",
195
+ "stroke-linejoin": "round"
196
+ }, [
197
+ l("line", {
198
+ x1: "18",
199
+ y1: "6",
200
+ x2: "6",
201
+ y2: "18"
202
+ }),
203
+ l("line", {
204
+ x1: "6",
205
+ y1: "6",
206
+ x2: "18",
207
+ y2: "18"
208
+ })
209
+ ], -1)
210
+ ])])
211
+ ])
212
+ ])) : k("", !0),
213
+ l("div", ce, [
214
+ Array.isArray(o.value) && o.value.length > 0 ? (d(), v("div", fe, [
215
+ (d(!0), v(M, null, F(o.value, (a, n) => (d(), v("div", {
216
+ key: n,
217
+ class: "relative flex items-center gap-2 bg-background border border-border rounded-md p-1.5 pr-8 max-w-[200px] shadow-sm"
218
+ }, [
219
+ g(V, {
220
+ icon: "lucide:file-text",
221
+ class: "w-4 h-4 text-primary shrink-0"
222
+ }),
223
+ l("span", {
224
+ class: "text-xs truncate font-medium",
225
+ title: a.fileName
226
+ }, H(a.fileName), 9, me),
227
+ l("button", {
228
+ onClick: (h) => j(n),
229
+ disabled: x(f),
230
+ class: "absolute right-1 top-1/2 -translate-y-1/2 p-1 text-muted-foreground hover:text-destructive rounded-full hover:bg-muted/50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
231
+ }, [
232
+ g(V, {
233
+ icon: "lucide:x",
234
+ class: "w-3 h-3"
235
+ })
236
+ ], 8, ve)
237
+ ]))), 128))
238
+ ])) : k("", !0),
239
+ l("div", he, [
240
+ l("div", pe, [
241
+ g(le, {
242
+ modelValue: o.value,
243
+ "onUpdate:modelValue": t[1] || (t[1] = (a) => o.value = a),
244
+ "multi-select": !0,
245
+ "max-size": s.maxFileSize,
246
+ "return-format": "file"
247
+ }, {
248
+ trigger: X(({ trigger: a }) => [
249
+ g(N, {
250
+ variant: "ghost",
251
+ size: "sm",
252
+ icon: "lucide:paperclip",
253
+ rounded: "full",
254
+ class: "h-8 w-8 px-0 text-muted-foreground hover:text-foreground transition-colors",
255
+ onClick: a,
256
+ disabled: x(f),
257
+ "aria-label": "Attach files"
258
+ }, null, 8, ["onClick", "disabled"])
259
+ ]),
260
+ _: 1
261
+ }, 8, ["modelValue", "max-size"])
262
+ ]),
263
+ Y(l("textarea", {
264
+ ref_key: "textareaRef",
265
+ ref: r,
266
+ "onUpdate:modelValue": t[2] || (t[2] = (a) => c.value = a),
267
+ placeholder: s.placeholder,
268
+ disabled: x(f),
269
+ class: "flex-1 max-h-[120px] min-h-[20px] w-full resize-none bg-transparent px-2 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground scrollbar-thin disabled:opacity-50",
270
+ rows: "1",
271
+ "aria-label": "Message input",
272
+ onInput: S,
273
+ onKeydown: $
274
+ }, null, 40, ge), [
275
+ [Z, c.value]
276
+ ]),
277
+ l("div", xe, [
278
+ g(N, {
279
+ variant: "primary",
280
+ size: "sm",
281
+ icon: x(f) ? "lucide:loader-2" : i.value ? "lucide:check" : "lucide:send",
282
+ loading: x(f),
283
+ rounded: "full",
284
+ class: "h-8 w-8 px-0 transition-transform active:scale-95",
285
+ disabled: !I.value,
286
+ onClick: D,
287
+ "aria-label": i.value ? "Save changes" : "Send message"
288
+ }, null, 8, ["icon", "loading", "disabled", "aria-label"])
289
+ ])
290
+ ])
291
+ ])
292
+ ])
293
+ ]));
294
+ }
295
+ });
296
+ export {
297
+ Ae as default
298
+ };
@@ -0,0 +1,4 @@
1
+ import f from "./ChatInterface.vue.js";
2
+ export {
3
+ f as default
4
+ };
@@ -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.vue.js";
7
+ import ee from "./CommandPaletteItem.vue2.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",
@@ -1,5 +1,5 @@
1
1
  import t from "./CommandPaletteItem.vue3.js";
2
- /* empty css */
2
+ /* empty css */
3
3
  import o from "../../_virtual/_plugin-vue_export-helper.js";
4
4
  const r = /* @__PURE__ */ o(t, [["__scopeId", "data-v-66b1ae06"]]);
5
5
  export {
@@ -1,4 +1,4 @@
1
- import { KanbanColumn, KanbanLoadDataResult, KanbanChangeEvent } from './types';
1
+ import { KanbanColumn, KanbanLoadDataResult, KanbanChangeEvent, KanbanMoveEvent } from './types';
2
2
  type __VLS_Props = {
3
3
  columns: KanbanColumn[];
4
4
  group?: string;
@@ -42,9 +42,11 @@ declare function __VLS_template(): {
42
42
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
43
43
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
44
44
  change: (payload: KanbanChangeEvent) => any;
45
+ move: (payload: KanbanMoveEvent) => any;
45
46
  "update:data": (val: Record<string | number, any[]>) => any;
46
47
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
47
48
  onChange?: (payload: KanbanChangeEvent) => any;
49
+ onMove?: (payload: KanbanMoveEvent) => any;
48
50
  "onUpdate:data"?: (val: Record<string | number, any[]>) => any;
49
51
  }>, {
50
52
  class: string;
@@ -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-1285df4f"]]);
4
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-50c60912"]]);
5
5
  export {
6
- m as default
6
+ p as default
7
7
  };
@@ -1,6 +1,6 @@
1
- import { defineComponent as b, openBlock as n, createElementBlock as m, normalizeClass as C, Fragment as p, renderList as y, createBlock as k, withCtx as o, renderSlot as d, mergeProps as r } from "vue";
2
- import v from "./KanbanBoard.vue.js";
3
- const K = /* @__PURE__ */ b({
1
+ import { defineComponent as C, ref as h, openBlock as c, createElementBlock as i, normalizeClass as b, Fragment as x, renderList as k, createBlock as w, withCtx as r, renderSlot as m, mergeProps as u } from "vue";
2
+ import K from "./KanbanBoard.vue.js";
3
+ const $ = /* @__PURE__ */ C({
4
4
  __name: "Kanban",
5
5
  props: {
6
6
  columns: {},
@@ -15,42 +15,62 @@ const K = /* @__PURE__ */ b({
15
15
  ghostClass: {},
16
16
  class: { default: "h-full w-full" }
17
17
  },
18
- emits: ["change", "update:data"],
19
- setup(a, { emit: i }) {
20
- const s = a, u = i, g = (e) => {
21
- u("change", e);
22
- }, f = (e, c) => {
23
- s.data && u("update:data", { ...s.data, [e]: c });
24
- }, h = (e) => s.data ? s.data[e] || [] : [];
25
- return (e, c) => (n(), m("div", {
26
- class: C(["flex gap-4 overflow-x-auto p-1 custom-scrollbar-x scrollable-container", s.class])
18
+ emits: ["change", "move", "update:data"],
19
+ setup(t, { emit: v }) {
20
+ const d = t, s = v, o = h({}), f = (e) => {
21
+ if (s("change", e), e.type === "remove" ? o.value.remove = { columnId: e.columnId, event: e.event } : e.type === "add" ? o.value.add = { columnId: e.columnId, event: e.event } : e.type === "update" && s("move", {
22
+ itemId: e.event.data?.[d.itemKey] || e.event.item?._underlying_vm_?.[d.itemKey],
23
+ item: e.event.data,
24
+ fromColumnId: e.columnId,
25
+ toColumnId: e.columnId,
26
+ oldIndex: e.event.oldIndex,
27
+ newIndex: e.event.newIndex
28
+ }), o.value.remove && o.value.add) {
29
+ const { remove: l, add: a } = o.value;
30
+ s("move", {
31
+ itemId: a.event.data?.[d.itemKey],
32
+ item: a.event.data,
33
+ fromColumnId: l.columnId,
34
+ toColumnId: a.columnId,
35
+ oldIndex: l.event.oldIndex,
36
+ newIndex: a.event.newIndex
37
+ }), o.value = {};
38
+ }
39
+ setTimeout(() => {
40
+ o.value = {};
41
+ }, 100);
42
+ }, g = (e, l) => {
43
+ d.data && s("update:data", { ...d.data, [e]: l });
44
+ }, I = (e) => d.data ? d.data[e] || [] : [];
45
+ return (e, l) => (c(), i("div", {
46
+ class: b(["flex gap-4 overflow-x-auto p-1 custom-scrollbar-x scrollable-container", d.class])
27
47
  }, [
28
- (n(!0), m(p, null, y(a.columns, (l) => (n(), k(v, {
29
- key: l.id,
30
- column: l,
31
- group: a.group,
32
- "item-key": a.itemKey,
33
- "load-data": a.loadData,
34
- "column-data": h(l.id),
35
- "board-class": a.boardClass,
36
- "header-class": a.headerClass,
37
- "body-class": a.bodyClass,
38
- "draggable-class": a.draggableClass,
39
- "ghost-class": a.ghostClass,
40
- onChange: g,
41
- "onUpdate:columnData": (t) => f(l.id, t)
48
+ (c(!0), i(x, null, k(t.columns, (a) => (c(), w(K, {
49
+ key: a.id,
50
+ column: a,
51
+ group: t.group,
52
+ "item-key": t.itemKey,
53
+ "load-data": t.loadData,
54
+ "column-data": I(a.id),
55
+ "board-class": t.boardClass,
56
+ "header-class": t.headerClass,
57
+ "body-class": t.bodyClass,
58
+ "draggable-class": t.draggableClass,
59
+ "ghost-class": t.ghostClass,
60
+ onChange: f,
61
+ "onUpdate:columnData": (n) => g(a.id, n)
42
62
  }, {
43
- header: o((t) => [
44
- d(e.$slots, "column-header", r({ ref_for: !0 }, t), void 0, !0)
63
+ header: r((n) => [
64
+ m(e.$slots, "column-header", u({ ref_for: !0 }, n), void 0, !0)
45
65
  ]),
46
- "prepend-item": o((t) => [
47
- d(e.$slots, "prepend-item", r({ ref_for: !0 }, t), void 0, !0)
66
+ "prepend-item": r((n) => [
67
+ m(e.$slots, "prepend-item", u({ ref_for: !0 }, n), void 0, !0)
48
68
  ]),
49
- item: o((t) => [
50
- d(e.$slots, "item", r({ ref_for: !0 }, t), void 0, !0)
69
+ item: r((n) => [
70
+ m(e.$slots, "item", u({ ref_for: !0 }, n), void 0, !0)
51
71
  ]),
52
- "append-item": o((t) => [
53
- d(e.$slots, "append-item", r({ ref_for: !0 }, t), void 0, !0)
72
+ "append-item": r((n) => [
73
+ m(e.$slots, "append-item", u({ ref_for: !0 }, n), void 0, !0)
54
74
  ]),
55
75
  _: 3
56
76
  }, 8, ["column", "group", "item-key", "load-data", "column-data", "board-class", "header-class", "body-class", "draggable-class", "ghost-class", "onUpdate:columnData"]))), 128))
@@ -58,5 +78,5 @@ const K = /* @__PURE__ */ b({
58
78
  }
59
79
  });
60
80
  export {
61
- K as default
81
+ $ as default
62
82
  };
@@ -13,11 +13,26 @@ export interface KanbanColumn {
13
13
  titleI18n?: string;
14
14
  [key: string]: any;
15
15
  }
16
+ /**
17
+ * KanbanChangeEvent represents the low-level DnD events
18
+ */
16
19
  export interface KanbanChangeEvent {
17
20
  type: 'add' | 'remove' | 'update';
18
21
  event: any;
19
22
  columnId: string | number;
20
23
  }
24
+ /**
25
+ * KanbanMoveEvent represents a consolidated high-level move
26
+ * standard for production API updates.
27
+ */
28
+ export interface KanbanMoveEvent {
29
+ itemId: string | number;
30
+ item: any;
31
+ fromColumnId: string | number;
32
+ toColumnId: string | number;
33
+ oldIndex: number;
34
+ newIndex: number;
35
+ }
21
36
  export interface KanbanProps {
22
37
  columns: KanbanColumn[];
23
38
  group?: string;
@@ -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: {
package/index.d.ts CHANGED
@@ -77,4 +77,5 @@ export * from './components/StatusChip';
77
77
  export * from './components/Price';
78
78
  export * from './components/DateTime';
79
79
  export * from './components/Clock';
80
+ export * from './components/Chat';
80
81
  export * from './core/config.ts';
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { default as f } from "vue3-google-signin";
2
2
  import { deepMerge as l } from "./utils/object.js";
3
- import { camelCase as p, capitalize as d, copyToClipboard as u, debounce as x, delay as i, downloadFile as n, flattenArray as c, formatCurrency as T, getDefaultDateRange as S, getUniqueId as g, isAppleDevice as b, isEmpty as C, randomNumber as P, removeExtraProperties as I, slugify as D, throttle as F, truncate as v } from "./utils/functions.js";
4
- import { lazySearch as h, resetSearchIndex as A, search as B } from "./utils/search.util.js";
3
+ import { camelCase as p, capitalize as d, copyToClipboard as u, debounce as x, delay as i, downloadFile as n, flattenArray as c, formatCurrency as T, getDefaultDateRange as S, getUniqueId as g, isAppleDevice as b, isEmpty as C, randomNumber as P, removeExtraProperties as I, slugify as D, throttle as F, truncate as h } from "./utils/functions.js";
4
+ import { lazySearch as N, resetSearchIndex as A, search as B } from "./utils/search.util.js";
5
5
  import { env as w } from "./utils/env.js";
6
6
  import { $t as E } from "./utils/i18n.js";
7
7
  import { default as L } from "./components/Chip/Chip.vue.js";
@@ -27,8 +27,8 @@ import { default as Se } from "./components/Screen/ScreenFilter.vue.js";
27
27
  import { default as be } from "./components/Screen/components/ScreenQuickFilters.vue.js";
28
28
  import { default as Pe } from "./components/Heatmap/Heatmap.vue.js";
29
29
  import { default as De } from "./components/Masonry/Masonry.vue.js";
30
- import { MASONRY_BREAKPOINTS as ve } from "./components/Masonry/types.js";
31
- import { default as he } from "./components/Spinner/Spinner.vue.js";
30
+ import { MASONRY_BREAKPOINTS as he } from "./components/Masonry/types.js";
31
+ import { default as Ne } from "./components/Spinner/Spinner.vue.js";
32
32
  import { default as Be } from "./components/Barcode/Barcode.vue.js";
33
33
  import { barcodesConstants as we } from "./components/Barcode/types.js";
34
34
  import { default as Ee } from "./components/Carousel/Carousel.vue.js";
@@ -52,7 +52,7 @@ import { default as no } from "./components/List/ListFieldRow.vue.js";
52
52
  import { formatDate as To, formatNumber as So, formatPrice as go, getObjectValue as bo, getStatusColorClass as Co } from "./components/List/utils.js";
53
53
  import { default as Io } from "./components/Empty/Empty.vue.js";
54
54
  import { default as Fo } from "./components/Accordion/Accordion.vue.js";
55
- import { default as No } from "./components/Accordion/AccordionItem.vue.js";
55
+ import { default as vo } from "./components/Accordion/AccordionItem.vue.js";
56
56
  import { default as Ao } from "./components/Accordion/AccordionTrigger.vue.js";
57
57
  import { default as ko } from "./components/Accordion/AccordionContent.vue.js";
58
58
  import { default as yo } from "./components/ChoiceBox/ChoiceBox.vue.js";
@@ -78,7 +78,7 @@ import { default as cr } from "./components/PermissionMatrix/PermissionEditor.vu
78
78
  import { useAdvancedKeyStroke as Sr, useKeyStroke as gr } from "./composables/useKeyStroke.js";
79
79
  import { vScrollReveal as Cr } from "./directives/vScrollReveal.js";
80
80
  import { default as Ir } from "./components/AvatarUploader/AvatarUploader.vue.js";
81
- import { configure as Fr, pauseTimers as vr, removeToast as Nr, resumeTimers as hr, showToast as Ar, toast as Br, useNotifications as kr } from "./composables/useNotifications.js";
81
+ import { configure as Fr, pauseTimers as hr, removeToast as vr, resumeTimers as Nr, showToast as Ar, toast as Br, useNotifications as kr } from "./composables/useNotifications.js";
82
82
  import { default as yr } from "./components/Timeline/Timeline.vue.js";
83
83
  import { default as Mr } from "./components/Timeline/TimelineItem.vue.js";
84
84
  import { default as Rr } from "./components/Timeline/TimelineIndicator.vue.js";
@@ -104,7 +104,7 @@ import { default as gt } from "./components/SidePanel.vue.js";
104
104
  import { default as Ct } from "./components/DatePicker.vue.js";
105
105
  import { default as It } from "./components/IconPicker.vue.js";
106
106
  import { default as Ft } from "./components/ButtonGroup.vue.js";
107
- import { default as Nt } from "./components/NumberInput.vue.js";
107
+ import { default as vt } from "./components/NumberInput.vue.js";
108
108
  import { default as At } from "./components/ThemeToggle.vue.js";
109
109
  import { default as kt } from "./components/GoogleLogin.vue.js";
110
110
  import { default as yt } from "./components/ColorPicker/ColorPicker.vue.js";
@@ -119,12 +119,13 @@ import { STATUS_MAP as qt, normalizeStatus as Wt, resolveStatus as Xt } from "./
119
119
  import { default as Jt } from "./components/Price/Price.vue.js";
120
120
  import { default as ea } from "./components/DateTime/DateTime.vue.js";
121
121
  import { default as ra } from "./components/Clock/Clock.vue.js";
122
- import { VLITE_CONFIG_KEY as aa, configState as fa, updateConfig as ma, useVLiteConfig as la } from "./core/config.js";
122
+ import { default as aa } from "./components/Chat/ChatInterface.vue.js";
123
+ import { VLITE_CONFIG_KEY as ma, configState as la, updateConfig as sa, useVLiteConfig as pa } from "./core/config.js";
123
124
  export {
124
125
  E as $t,
125
126
  Fo as Accordion,
126
127
  ko as AccordionContent,
127
- No as AccordionItem,
128
+ vo as AccordionItem,
128
129
  Ao as AccordionTrigger,
129
130
  Qr as Alert,
130
131
  Gr as AttachmentsList,
@@ -138,6 +139,7 @@ export {
138
139
  at as Button,
139
140
  Ft as ButtonGroup,
140
141
  Ee as Carousel,
142
+ aa as ChatInterface,
141
143
  nt as CheckBox,
142
144
  L as Chip,
143
145
  yo as ChoiceBox,
@@ -179,7 +181,7 @@ export {
179
181
  xo as List,
180
182
  no as ListFieldRow,
181
183
  Hr as Logo,
182
- ve as MASONRY_BREAKPOINTS,
184
+ he as MASONRY_BREAKPOINTS,
183
185
  De as Masonry,
184
186
  et as Modal,
185
187
  Zo as MultiSelect,
@@ -188,7 +190,7 @@ export {
188
190
  pe as NavbarGroup,
189
191
  le as NavbarItem,
190
192
  ue as NavbarTabs,
191
- Nt as NumberInput,
193
+ vt as NumberInput,
192
194
  to as OTPInput,
193
195
  jo as Pagination,
194
196
  cr as PermissionEditor,
@@ -208,7 +210,7 @@ export {
208
210
  lr as SidebarMenu,
209
211
  pr as SidebarMenuItem,
210
212
  st as Slider,
211
- he as Spinner,
213
+ Ne as Spinner,
212
214
  $ as Stats,
213
215
  Qt as StatusChip,
214
216
  dt as Switch,
@@ -220,12 +222,12 @@ export {
220
222
  Mr as TimelineItem,
221
223
  Rt as ToastNotification,
222
224
  xt as Tooltip,
223
- aa as VLITE_CONFIG_KEY,
225
+ ma as VLITE_CONFIG_KEY,
224
226
  fo as Workbook,
225
227
  we as barcodesConstants,
226
228
  p as camelCase,
227
229
  d as capitalize,
228
- fa as configState,
230
+ la as configState,
229
231
  Fr as configure,
230
232
  u as copyToClipboard,
231
233
  Ht as createVLite,
@@ -246,22 +248,22 @@ export {
246
248
  Uo as initializeTheme,
247
249
  b as isAppleDevice,
248
250
  C as isEmpty,
249
- h as lazySearch,
251
+ N as lazySearch,
250
252
  Wt as normalizeStatus,
251
- vr as pauseTimers,
253
+ hr as pauseTimers,
252
254
  P as randomNumber,
253
255
  I as removeExtraProperties,
254
- Nr as removeToast,
256
+ vr as removeToast,
255
257
  A as resetSearchIndex,
256
258
  Xt as resolveStatus,
257
- hr as resumeTimers,
259
+ Nr as resumeTimers,
258
260
  B as search,
259
261
  Ar as showToast,
260
262
  D as slugify,
261
263
  F as throttle,
262
264
  Br as toast,
263
- v as truncate,
264
- ma as updateConfig,
265
+ h as truncate,
266
+ sa as updateConfig,
265
267
  Sr as useAdvancedKeyStroke,
266
268
  Ye as useDropdownIds,
267
269
  Ve as useDropdownSelection,
@@ -273,6 +275,6 @@ export {
273
275
  kr as useNotifications,
274
276
  Vo as useTheme,
275
277
  oo as useTreeSelection,
276
- la as useVLiteConfig,
278
+ pa as useVLiteConfig,
277
279
  Cr as vScrollReveal
278
280
  };
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": "1.0.3",
6
+ "version": "1.0.4",
7
7
  "type": "module",
8
8
  "main": "index.js",
9
9
  "module": "index.js",
package/style.css CHANGED
@@ -973,5 +973,5 @@ textarea::-webkit-scrollbar-thumb:hover {
973
973
  }
974
974
 
975
975
  /* --- Vite Generated CSS --- */
976
- input[data-v-9a771336]::-webkit-outer-spin-button,input[data-v-9a771336]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number][data-v-9a771336]{-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-c4c5d9e4]{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-3e1f26ae]{will-change:transform;contain:layout style}.custom-fields-table[data-v-3e1f26ae] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-3e1f26ae] input,.custom-fields-table[data-v-3e1f26ae] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-3e1f26ae] input,.custom-fields-table[data-v-3e1f26ae] textarea,.custom-fields-table[data-v-3e1f26ae] select,.custom-fields-table[data-v-3e1f26ae] .input-wrapper,.custom-fields-table[data-v-3e1f26ae] .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-3e1f26ae] .tooltip-trigger button{justify-content:space-between!important}.custom-fields-table[data-v-3e1f26ae] input:focus,.custom-fields-table[data-v-3e1f26ae] textarea:focus,.custom-fields-table[data-v-3e1f26ae] select:focus,.custom-fields-table[data-v-3e1f26ae] .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-3e1f26ae] .w-full{width:100%;height:100%}.list-enter-active[data-v-3e1f26ae]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-3e1f26ae]{opacity:0;transform:translateY(-5px)}.form-field-item[data-v-ed0b3aa6]{display:flex;flex-direction:column}.form-field-item[data-v-ed0b3aa6]:has([role=switch]),.form-field-item[data-v-ed0b3aa6]:has([role=checkbox]){flex-direction:row;align-items:center;justify-content:flex-start}.form-container[data-v-06b1158f]{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-e8fba320]{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}
976
+ input[data-v-9a771336]::-webkit-outer-spin-button,input[data-v-9a771336]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number][data-v-9a771336]{-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-c4c5d9e4]{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-3e1f26ae]{will-change:transform;contain:layout style}.custom-fields-table[data-v-3e1f26ae] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-3e1f26ae] input,.custom-fields-table[data-v-3e1f26ae] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-3e1f26ae] input,.custom-fields-table[data-v-3e1f26ae] textarea,.custom-fields-table[data-v-3e1f26ae] select,.custom-fields-table[data-v-3e1f26ae] .input-wrapper,.custom-fields-table[data-v-3e1f26ae] .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-3e1f26ae] .tooltip-trigger button{justify-content:space-between!important}.custom-fields-table[data-v-3e1f26ae] input:focus,.custom-fields-table[data-v-3e1f26ae] textarea:focus,.custom-fields-table[data-v-3e1f26ae] select:focus,.custom-fields-table[data-v-3e1f26ae] .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-3e1f26ae] .w-full{width:100%;height:100%}.list-enter-active[data-v-3e1f26ae]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-3e1f26ae]{opacity:0;transform:translateY(-5px)}.form-field-item[data-v-ed0b3aa6]{display:flex;flex-direction:column}.form-field-item[data-v-ed0b3aa6]:has([role=switch]),.form-field-item[data-v-ed0b3aa6]:has([role=checkbox]){flex-direction:row;align-items:center;justify-content:flex-start}.form-container[data-v-06b1158f]{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-50c60912]::-webkit-scrollbar{height:8px}.custom-scrollbar-x[data-v-50c60912]::-webkit-scrollbar-track{background:transparent}.custom-scrollbar-x[data-v-50c60912]::-webkit-scrollbar-thumb{background-color:var(--color-border);border-radius:10px}.scrollable-container[data-v-50c60912]{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-e8fba320]{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}
977
977