vlite3 0.9.4 → 0.9.6
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/ColorPicker/ColorIro.vue3.js +2 -2
- package/components/ColorPicker/ColorPicker.vue.js +2 -2
- package/components/Form/Form.vue.d.ts +4 -0
- package/components/Form/Form.vue.js +2 -2
- package/components/Form/Form.vue2.js +79 -75
- package/components/Form/composables/useForm.d.ts +3 -3
- package/components/Form/composables/useForm.js +125 -97
- package/components/Form/types.d.ts +4 -4
- package/components/Form/utils/form.utils.d.ts +8 -7
- package/components/Form/utils/form.utils.js +61 -61
- package/components/Screen/ScreenFilter.vue.js +1 -1
- package/components/Screen/components/ScreenEmptyState.vue.js +1 -1
- package/components/Screen/components/ScreenQuickFilters.vue.js +1 -1
- package/package.json +1 -1
- package/style.css +1 -1
- /package/components/ColorPicker/{ColorIro.vue.js → ColorIro.vue2.js} +0 -0
|
@@ -6,8 +6,8 @@ import O from "../Input.vue.js";
|
|
|
6
6
|
import "../../core/config.js";
|
|
7
7
|
/* empty css */
|
|
8
8
|
import y from "../Button.vue.js";
|
|
9
|
-
import E from "./ColorIro.
|
|
10
|
-
/* empty css
|
|
9
|
+
import E from "./ColorIro.vue2.js";
|
|
10
|
+
/* empty css */
|
|
11
11
|
import { useEyeDropper as P } from "@vueuse/core";
|
|
12
12
|
const I = {
|
|
13
13
|
key: 0,
|
|
@@ -20,6 +20,8 @@ interface Props {
|
|
|
20
20
|
class?: string;
|
|
21
21
|
className?: string;
|
|
22
22
|
groupClass?: string;
|
|
23
|
+
groupBodyClass?: string;
|
|
24
|
+
groupContainerClass?: string;
|
|
23
25
|
headerClass?: string;
|
|
24
26
|
footerClass?: string;
|
|
25
27
|
timelineTextPosition?: TimelineTextPosition;
|
|
@@ -85,6 +87,8 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
|
|
|
85
87
|
submitText: string;
|
|
86
88
|
showCancel: boolean;
|
|
87
89
|
groupClass: string;
|
|
90
|
+
groupBodyClass: string;
|
|
91
|
+
groupContainerClass: string;
|
|
88
92
|
timelineTextPosition: TimelineTextPosition;
|
|
89
93
|
emitFields: string[];
|
|
90
94
|
stickyFooter: boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import o from "./Form.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import r from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const
|
|
4
|
+
const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-06b1158f"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
p as default
|
|
7
7
|
};
|
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
import { defineComponent as ye, inject as xe, computed as n, onMounted as _, onUnmounted as E, ref as
|
|
2
|
-
import { useForm as
|
|
1
|
+
import { defineComponent as ye, inject as xe, computed as n, onMounted as _, onUnmounted as E, ref as U, watch as ee, openBlock as o, createElementBlock as d, withKeys as te, withModifiers as G, normalizeClass as m, createElementVNode as v, createVNode as k, mergeProps as z, toDisplayString as A, unref as a, renderSlot as ae, createCommentVNode as c, Fragment as ke, renderList as Ce, createBlock as R } from "vue";
|
|
2
|
+
import { useForm as pe } from "./composables/useForm.js";
|
|
3
3
|
import O from "./FormFields.vue.js";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
4
|
+
import C from "../Button.vue.js";
|
|
5
|
+
import Se from "../BackButton.vue.js";
|
|
6
6
|
import Fe from "../Timeline/Timeline.vue.js";
|
|
7
7
|
import "@iconify/vue";
|
|
8
8
|
import { $t as we } from "../../utils/i18n.js";
|
|
9
9
|
import { useVLiteConfig as Ae } from "../../core/config.js";
|
|
10
|
-
const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" },
|
|
10
|
+
const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ve = { class: "flex items-center gap-2 flex-shrink-0" }, Be = {
|
|
11
11
|
key: 0,
|
|
12
12
|
class: "form-fields-single"
|
|
13
|
-
},
|
|
14
|
-
key: 1,
|
|
15
|
-
class: "form-groups space-y-6"
|
|
16
|
-
}, Ve = { class: "text-base font-semibold text-foreground" }, ze = {
|
|
13
|
+
}, Ne = { class: "text-base font-semibold text-foreground" }, Te = {
|
|
17
14
|
key: 0,
|
|
18
15
|
class: "text-sm text-muted-foreground mt-1"
|
|
19
|
-
},
|
|
16
|
+
}, Ue = {
|
|
20
17
|
key: 2,
|
|
21
18
|
class: "form-step"
|
|
22
|
-
},
|
|
19
|
+
}, ze = { class: "text-lg font-semibold text-foreground" }, De = {
|
|
23
20
|
key: 0,
|
|
24
21
|
class: "text-sm text-muted-foreground mt-1"
|
|
25
|
-
},
|
|
22
|
+
}, Le = { class: "flex items-center gap-3" }, Oe = /* @__PURE__ */ ye({
|
|
26
23
|
__name: "Form",
|
|
27
24
|
props: {
|
|
28
25
|
schema: {},
|
|
@@ -44,6 +41,8 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
44
41
|
class: { default: "" },
|
|
45
42
|
className: { default: "" },
|
|
46
43
|
groupClass: { default: "" },
|
|
44
|
+
groupBodyClass: { default: "" },
|
|
45
|
+
groupContainerClass: { default: "" },
|
|
47
46
|
headerClass: { default: "" },
|
|
48
47
|
footerClass: { default: "" },
|
|
49
48
|
timelineTextPosition: { default: "right" },
|
|
@@ -60,15 +59,15 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
60
59
|
},
|
|
61
60
|
emits: ["onSubmit", "onCancel", "onStepChange", "onAddonAction", "onBack"],
|
|
62
61
|
setup(e, { emit: ie }) {
|
|
63
|
-
const i = e, g = ie,
|
|
62
|
+
const i = e, g = ie, f = xe("modal-context", null), se = Ae(), P = n(() => se?.components?.form || {}), D = n(() => i.variant ?? P.value.variant ?? "outline"), L = n(() => i.size ?? P.value.size ?? "md"), q = n(() => i.rounded ?? P.value.rounded ?? "md"), H = n(
|
|
64
63
|
() => i.showRequiredAsterisk ?? P.value.showRequiredAsterisk ?? !0
|
|
65
|
-
), le = n(() => i.showCancel || !!
|
|
64
|
+
), le = n(() => i.showCancel || !!f), x = n(() => !!f), p = n(() => i.stickyFooter || x.value);
|
|
66
65
|
_(() => {
|
|
67
|
-
i.footer && x.value &&
|
|
66
|
+
i.footer && x.value && f?.registerFormFooter?.(!0);
|
|
68
67
|
}), E(() => {
|
|
69
|
-
x.value &&
|
|
68
|
+
x.value && f?.registerFormFooter?.(!1);
|
|
70
69
|
});
|
|
71
|
-
const oe =
|
|
70
|
+
const oe = U(null), I = U(null), J = U(!1);
|
|
72
71
|
let K = null;
|
|
73
72
|
_(() => {
|
|
74
73
|
I.value && (K = new IntersectionObserver(
|
|
@@ -80,13 +79,13 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
80
79
|
}), E(() => {
|
|
81
80
|
K?.disconnect();
|
|
82
81
|
});
|
|
83
|
-
const
|
|
82
|
+
const V = n(() => !i.schema || i.schema.length === 0 ? !1 : Array.isArray(i.schema[0])), r = n(() => i.tabs && i.tabs.length > 0 && V.value), l = U(0), Q = n(() => i.tabs ? i.tabs.map((t, s) => ({
|
|
84
83
|
id: t.id?.toString() || s.toString(),
|
|
85
84
|
title: t.title,
|
|
86
85
|
icon: t.icon,
|
|
87
86
|
description: t.description,
|
|
88
87
|
status: s < l.value ? "completed" : s === l.value ? "current" : "upcoming"
|
|
89
|
-
})) : []),
|
|
88
|
+
})) : []), S = n(() => V.value ? i.schema : [i.schema]), W = n(() => r.value ? S.value[l.value] || [] : []), {
|
|
90
89
|
formValues: F,
|
|
91
90
|
errors: w,
|
|
92
91
|
isSubmitting: h,
|
|
@@ -94,29 +93,29 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
94
93
|
handleFieldChange: ne,
|
|
95
94
|
validateField: re,
|
|
96
95
|
validateAll: ue,
|
|
97
|
-
isFieldVisible:
|
|
98
|
-
isFieldDisabled:
|
|
96
|
+
isFieldVisible: B,
|
|
97
|
+
isFieldDisabled: N,
|
|
99
98
|
isFieldReadonly: $,
|
|
100
99
|
handleSubmit: de
|
|
101
|
-
} =
|
|
100
|
+
} = pe({
|
|
102
101
|
schema: i.schema,
|
|
103
102
|
values: i.values,
|
|
104
103
|
isUpdate: i.isUpdate,
|
|
105
104
|
folderId: i.folderId,
|
|
106
105
|
emitFields: i.emitFields,
|
|
107
106
|
onSubmit: (t) => {
|
|
108
|
-
g("onSubmit", t,
|
|
107
|
+
g("onSubmit", t, f?.close || (() => {
|
|
109
108
|
}));
|
|
110
109
|
}
|
|
111
110
|
});
|
|
112
111
|
ee(
|
|
113
112
|
() => i.loading || h.value,
|
|
114
113
|
(t) => {
|
|
115
|
-
|
|
114
|
+
f?.setSubmitting && f.setSubmitting(t);
|
|
116
115
|
},
|
|
117
116
|
{ immediate: !0 }
|
|
118
117
|
), E(() => {
|
|
119
|
-
|
|
118
|
+
f?.setSubmitting && f.setSubmitting(!1);
|
|
120
119
|
}), ee(
|
|
121
120
|
() => i.values,
|
|
122
121
|
(t) => {
|
|
@@ -125,29 +124,29 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
125
124
|
);
|
|
126
125
|
const j = (t, s) => {
|
|
127
126
|
ne(t, s.value, s.data);
|
|
128
|
-
}, ce = () => {
|
|
127
|
+
}, ce = async () => {
|
|
129
128
|
if (!r.value) return !0;
|
|
130
129
|
const t = W.value;
|
|
131
130
|
let s = !0;
|
|
132
131
|
for (const u of t) {
|
|
133
|
-
if (!
|
|
134
|
-
re(u) && (s = !1);
|
|
132
|
+
if (!B(u) || N(u)) continue;
|
|
133
|
+
await re(u) && (s = !1);
|
|
135
134
|
}
|
|
136
135
|
return s;
|
|
137
|
-
}, me = n(() => r.value ? l.value <
|
|
138
|
-
me.value
|
|
136
|
+
}, me = n(() => r.value ? l.value < S.value.length - 1 : !1), X = n(() => r.value ? l.value > 0 : !1), T = n(() => r.value ? l.value === S.value.length - 1 : !0), Y = async () => {
|
|
137
|
+
!me.value || !await ce() || (l.value++, g("onStepChange", l.value));
|
|
139
138
|
}, fe = () => {
|
|
140
139
|
X.value && (l.value--, g("onStepChange", l.value));
|
|
141
140
|
}, ve = (t, s) => {
|
|
142
141
|
s <= l.value && (l.value = s, g("onStepChange", l.value));
|
|
143
142
|
}, y = async () => {
|
|
144
143
|
if (r.value) {
|
|
145
|
-
if (!
|
|
146
|
-
Y();
|
|
144
|
+
if (!T.value && !i.isUpdate) {
|
|
145
|
+
await Y();
|
|
147
146
|
return;
|
|
148
147
|
}
|
|
149
|
-
if (!ue()) {
|
|
150
|
-
const s =
|
|
148
|
+
if (!await ue()) {
|
|
149
|
+
const s = S.value.findIndex(
|
|
151
150
|
(u) => u.some((b) => !!w.value[b.name])
|
|
152
151
|
);
|
|
153
152
|
s !== -1 && s !== l.value && (l.value = s, g("onStepChange", l.value));
|
|
@@ -165,10 +164,10 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
165
164
|
}, Z = (t) => {
|
|
166
165
|
(t.metaKey || t.ctrlKey) && t.key === "s" && (t.preventDefault(), y());
|
|
167
166
|
}, be = () => {
|
|
168
|
-
g("onCancel"),
|
|
167
|
+
g("onCancel"), f && f?.close?.();
|
|
169
168
|
};
|
|
170
169
|
return (t, s) => (o(), d("form", {
|
|
171
|
-
class:
|
|
170
|
+
class: m(["form-container ", i.class]),
|
|
172
171
|
onSubmit: G(y, ["prevent"]),
|
|
173
172
|
onKeydown: [
|
|
174
173
|
ge,
|
|
@@ -178,27 +177,27 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
178
177
|
}, [
|
|
179
178
|
e.isPage ? (o(), d("div", {
|
|
180
179
|
key: 0,
|
|
181
|
-
class:
|
|
180
|
+
class: m([
|
|
182
181
|
"form-page-header sticky top-0 z-30 bg-background flex items-center justify-between pb-2 pt-4 -mt-4 mb-6.5",
|
|
183
182
|
e.pageHeaderClass
|
|
184
183
|
])
|
|
185
184
|
}, [
|
|
186
185
|
v("div", Pe, [
|
|
187
|
-
k(
|
|
186
|
+
k(Se, z(e.backButtonProps, {
|
|
188
187
|
fallback: e.backButtonPath,
|
|
189
188
|
class: "max-sm:w-8 max-sm:h-8 max-sm:min-w-8 max-sm:min-h-8 max-sm:px-0 flex-shrink-0"
|
|
190
189
|
}), null, 16, ["fallback"]),
|
|
191
190
|
v("h1", {
|
|
192
|
-
class:
|
|
191
|
+
class: m(["text-foreground max-sm:text-lg text-fs-5 truncate", e.pageTitleClass])
|
|
193
192
|
}, A(e.pageTitleI18n ? a(we)(e.pageTitleI18n) : e.pageTitle), 3)
|
|
194
193
|
]),
|
|
195
|
-
v("div",
|
|
194
|
+
v("div", Ve, [
|
|
196
195
|
ae(t.$slots, "header-actions", {
|
|
197
196
|
values: a(F),
|
|
198
197
|
isSubmitting: a(h),
|
|
199
198
|
handleSubmit: y
|
|
200
199
|
}, void 0, !0),
|
|
201
|
-
k(
|
|
200
|
+
k(C, z({
|
|
202
201
|
type: "button",
|
|
203
202
|
variant: e.isUpdate ? "outline" : "primary",
|
|
204
203
|
text: e.submitText
|
|
@@ -211,7 +210,7 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
211
210
|
], 2)) : c("", !0),
|
|
212
211
|
r.value && Q.value.length > 0 ? (o(), d("div", {
|
|
213
212
|
key: 1,
|
|
214
|
-
class:
|
|
213
|
+
class: m(["form-timeline", e.timelineTextPosition == "right" ? "mb-6.5" : "mb-13"])
|
|
215
214
|
}, [
|
|
216
215
|
k(a(Fe), {
|
|
217
216
|
steps: Q.value,
|
|
@@ -223,21 +222,26 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
223
222
|
}, null, 8, ["steps", "activeStep", "textPosition"])
|
|
224
223
|
], 2)) : c("", !0),
|
|
225
224
|
v("div", {
|
|
226
|
-
class:
|
|
225
|
+
class: m(e.footer && p.value ? "pb-2" : "")
|
|
227
226
|
}, [
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
V.value ? V.value && !r.value ? (o(), d("div", {
|
|
228
|
+
key: 1,
|
|
229
|
+
class: m(["form-groups space-y-6", e.groupContainerClass])
|
|
230
|
+
}, [
|
|
231
|
+
(o(!0), d(ke, null, Ce(S.value, (u, b) => (o(), d("div", {
|
|
230
232
|
key: b,
|
|
231
|
-
class:
|
|
233
|
+
class: m(["form-group border rounded overflow-hidden bg-body", e.groupClass])
|
|
232
234
|
}, [
|
|
233
235
|
e.groupsHeadings?.[b] ? (o(), d("div", {
|
|
234
236
|
key: 0,
|
|
235
|
-
class:
|
|
237
|
+
class: m(["form-group-header bg-muted/50 px-4 py-2.5 border-b", e.headerClass])
|
|
236
238
|
}, [
|
|
237
|
-
v("h3",
|
|
238
|
-
e.groupHeadingsDescription?.[b] ? (o(), d("p",
|
|
239
|
+
v("h3", Ne, A(e.groupsHeadings[b]), 1),
|
|
240
|
+
e.groupHeadingsDescription?.[b] ? (o(), d("p", Te, A(e.groupHeadingsDescription[b]), 1)) : c("", !0)
|
|
239
241
|
], 2)) : c("", !0),
|
|
240
|
-
v("div",
|
|
242
|
+
v("div", {
|
|
243
|
+
class: m(["form-group-body p-4.5", e.groupBodyClass])
|
|
244
|
+
}, [
|
|
241
245
|
k(O, {
|
|
242
246
|
schema: u,
|
|
243
247
|
values: a(F),
|
|
@@ -249,21 +253,21 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
249
253
|
className: e.className,
|
|
250
254
|
isUpdate: e.isUpdate,
|
|
251
255
|
showRequiredAsterisk: H.value,
|
|
252
|
-
isFieldVisible: a(
|
|
253
|
-
isFieldDisabled: a(
|
|
256
|
+
isFieldVisible: a(B),
|
|
257
|
+
isFieldDisabled: a(N),
|
|
254
258
|
isFieldReadonly: a($),
|
|
255
259
|
onChange: j,
|
|
256
260
|
onAddonAction: s[1] || (s[1] = (he) => g("onAddonAction", he))
|
|
257
261
|
}, null, 8, ["schema", "values", "errors", "fieldLoading", "variant", "size", "rounded", "className", "isUpdate", "showRequiredAsterisk", "isFieldVisible", "isFieldDisabled", "isFieldReadonly"])
|
|
258
|
-
])
|
|
262
|
+
], 2)
|
|
259
263
|
], 2))), 128))
|
|
260
|
-
])) : r.value ? (o(), d("div",
|
|
264
|
+
], 2)) : r.value ? (o(), d("div", Ue, [
|
|
261
265
|
e.tabs?.[l.value] ? (o(), d("div", {
|
|
262
266
|
key: 0,
|
|
263
|
-
class:
|
|
267
|
+
class: m(["form-step-header mb-6", e.headerClass])
|
|
264
268
|
}, [
|
|
265
|
-
v("h2",
|
|
266
|
-
e.tabs[l.value].description ? (o(), d("p",
|
|
269
|
+
v("h2", ze, A(e.tabs[l.value].title), 1),
|
|
270
|
+
e.tabs[l.value].description ? (o(), d("p", De, A(e.tabs[l.value].description), 1)) : c("", !0)
|
|
267
271
|
], 2)) : c("", !0),
|
|
268
272
|
k(O, {
|
|
269
273
|
schema: W.value,
|
|
@@ -276,13 +280,13 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
276
280
|
className: e.className,
|
|
277
281
|
isUpdate: e.isUpdate,
|
|
278
282
|
showRequiredAsterisk: H.value,
|
|
279
|
-
isFieldVisible: a(
|
|
280
|
-
isFieldDisabled: a(
|
|
283
|
+
isFieldVisible: a(B),
|
|
284
|
+
isFieldDisabled: a(N),
|
|
281
285
|
isFieldReadonly: a($),
|
|
282
286
|
onChange: j,
|
|
283
287
|
onAddonAction: s[2] || (s[2] = (u) => g("onAddonAction", u))
|
|
284
288
|
}, null, 8, ["schema", "values", "errors", "fieldLoading", "variant", "size", "rounded", "className", "isUpdate", "showRequiredAsterisk", "isFieldVisible", "isFieldDisabled", "isFieldReadonly"])
|
|
285
|
-
])) : c("", !0) : (o(), d("div",
|
|
289
|
+
])) : c("", !0) : (o(), d("div", Be, [
|
|
286
290
|
k(O, {
|
|
287
291
|
schema: e.schema,
|
|
288
292
|
values: a(F),
|
|
@@ -294,8 +298,8 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
294
298
|
className: e.className,
|
|
295
299
|
isUpdate: e.isUpdate,
|
|
296
300
|
showRequiredAsterisk: H.value,
|
|
297
|
-
isFieldVisible: a(
|
|
298
|
-
isFieldDisabled: a(
|
|
301
|
+
isFieldVisible: a(B),
|
|
302
|
+
isFieldDisabled: a(N),
|
|
299
303
|
isFieldReadonly: a($),
|
|
300
304
|
onChange: j,
|
|
301
305
|
onAddonAction: s[0] || (s[0] = (u) => g("onAddonAction", u))
|
|
@@ -318,7 +322,7 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
318
322
|
key: 2,
|
|
319
323
|
ref_key: "footerRef",
|
|
320
324
|
ref: oe,
|
|
321
|
-
class:
|
|
325
|
+
class: m([
|
|
322
326
|
"form-footer items-center gap-3 z-20 rounded-b!",
|
|
323
327
|
e.isPage ? "flex sm:hidden" : "flex",
|
|
324
328
|
e.footerClass,
|
|
@@ -327,18 +331,18 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
327
331
|
// `sticky bottom-0` anchors the footer to the bottom of the nearest scrollable ancestor
|
|
328
332
|
// (the modal's overflow-y-auto body), keeping it visible at all times without leaving
|
|
329
333
|
// the normal document flow (unlike `fixed` which would escape the modal bounds).
|
|
330
|
-
|
|
334
|
+
p.value ? "sticky bottom-0 bg-body pt-3 pb-3 -mx-0.5 px-0.5 border-t border-border/75" : "mt-6",
|
|
331
335
|
// Show a subtle top shadow while content is scrolling beneath the sticky footer
|
|
332
|
-
(
|
|
336
|
+
(p.value && J.value, ""),
|
|
333
337
|
// Inside modal: extend footer flush to modal edge padding
|
|
334
338
|
x.value ? "-mx-4 px-4 pb-3! mt-4.5!" : "",
|
|
335
339
|
// Non-sticky inside modal keeps the original border styling
|
|
336
|
-
!
|
|
337
|
-
!
|
|
340
|
+
!p.value && x.value ? "border-t border-border/75 mt-5" : "",
|
|
341
|
+
!p.value && !x.value ? "mt-6" : ""
|
|
338
342
|
])
|
|
339
343
|
}, [
|
|
340
|
-
v("div",
|
|
341
|
-
le.value ? (o(), R(
|
|
344
|
+
v("div", Le, [
|
|
345
|
+
le.value ? (o(), R(C, {
|
|
342
346
|
key: 0,
|
|
343
347
|
type: "button",
|
|
344
348
|
variant: "outline",
|
|
@@ -346,7 +350,7 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
346
350
|
disabled: e.loading || a(h),
|
|
347
351
|
onClick: be
|
|
348
352
|
}, null, 8, ["text", "disabled"])) : c("", !0),
|
|
349
|
-
r.value && e.isUpdate && !
|
|
353
|
+
r.value && e.isUpdate && !T.value ? (o(), R(C, z({
|
|
350
354
|
key: 1,
|
|
351
355
|
type: "button",
|
|
352
356
|
variant: "primary",
|
|
@@ -357,9 +361,9 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
357
361
|
}), null, 16, ["text", "loading"])) : c("", !0)
|
|
358
362
|
]),
|
|
359
363
|
v("div", {
|
|
360
|
-
class:
|
|
364
|
+
class: m(["flex items-center gap-3", r.value && "ml-auto"])
|
|
361
365
|
}, [
|
|
362
|
-
r.value && X.value ? (o(), R(
|
|
366
|
+
r.value && X.value ? (o(), R(C, {
|
|
363
367
|
key: 0,
|
|
364
368
|
type: "button",
|
|
365
369
|
variant: "outline",
|
|
@@ -367,7 +371,7 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
367
371
|
text: "Previous",
|
|
368
372
|
onClick: fe
|
|
369
373
|
})) : c("", !0),
|
|
370
|
-
r.value && !
|
|
374
|
+
r.value && !T.value ? (o(), R(C, {
|
|
371
375
|
key: 1,
|
|
372
376
|
type: "button",
|
|
373
377
|
variant: e.isUpdate ? "outline" : "primary",
|
|
@@ -375,7 +379,7 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
375
379
|
iconRight: "lucide:arrow-right",
|
|
376
380
|
onClick: Y
|
|
377
381
|
}, null, 8, ["variant"])) : c("", !0),
|
|
378
|
-
!r.value ||
|
|
382
|
+
!r.value || T.value ? (o(), R(C, z({
|
|
379
383
|
key: 2,
|
|
380
384
|
type: "submit",
|
|
381
385
|
variant: "primary",
|
|
@@ -389,5 +393,5 @@ const Re = ["onKeydown"], Pe = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
389
393
|
}
|
|
390
394
|
});
|
|
391
395
|
export {
|
|
392
|
-
|
|
396
|
+
Oe as default
|
|
393
397
|
};
|
|
@@ -20,11 +20,11 @@ export interface UseFormReturn {
|
|
|
20
20
|
/** Loading state of individual fields (e.g. file uploads) */
|
|
21
21
|
fieldLoading: Ref<Record<string, boolean>>;
|
|
22
22
|
/** Handle field value change */
|
|
23
|
-
handleFieldChange: (name: string, value: any, data?: any) => void
|
|
23
|
+
handleFieldChange: (name: string, value: any, data?: any) => Promise<void>;
|
|
24
24
|
/** Validate a single field */
|
|
25
|
-
validateField: (field: IForm) => string
|
|
25
|
+
validateField: (field: IForm) => Promise<string>;
|
|
26
26
|
/** Validate all fields */
|
|
27
|
-
validateAll: () => boolean
|
|
27
|
+
validateAll: () => Promise<boolean>;
|
|
28
28
|
/** Check if field is visible */
|
|
29
29
|
isFieldVisible: (field: IForm) => boolean;
|
|
30
30
|
/** Check if field is disabled */
|
|
@@ -1,174 +1,202 @@
|
|
|
1
|
-
import { ref as
|
|
2
|
-
import {
|
|
3
|
-
import { useFileUpload as
|
|
4
|
-
import { $t as
|
|
5
|
-
function
|
|
6
|
-
const { schema:
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { ref as w, shallowRef as Q, computed as W, watch as X } from "vue";
|
|
2
|
+
import { deepClone as m, initializeFormValues as Y, cleanSubmitValues as Z, getNestedValue as R, evaluateConditional as $, setNestedValue as z, collectFileFields as _, filterNullCustomFields as ee } from "../utils/form.utils.js";
|
|
3
|
+
import { useFileUpload as le } from "./useFileUpload.js";
|
|
4
|
+
import { $t as ae } from "../../../utils/i18n.js";
|
|
5
|
+
function ce(S) {
|
|
6
|
+
const { schema: d, values: F, isUpdate: V = !1, folderId: C, onSubmit: I } = S, { handleUploadFile: N } = le(), r = w(F ? m(F) : {}), f = w({}), j = w(!1), b = w(!1), p = w({}), g = Q(
|
|
7
|
+
F ? m(F) : {}
|
|
8
|
+
), A = W(() => d ? Array.isArray(d[0]) ? d.flat() : d : []), O = async (e) => {
|
|
9
|
+
try {
|
|
10
|
+
const l = await Y(d, e);
|
|
11
|
+
r.value = l, g.value = m(l), b.value = !1;
|
|
12
|
+
} catch (l) {
|
|
13
|
+
console.error("[useForm] Initialization error:", l);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
O(F), X(
|
|
17
|
+
() => F,
|
|
9
18
|
(e) => {
|
|
10
|
-
e && (
|
|
19
|
+
e && O(e);
|
|
11
20
|
},
|
|
12
21
|
{ deep: !0 }
|
|
13
22
|
);
|
|
14
|
-
const
|
|
15
|
-
values:
|
|
16
|
-
isUpdate:
|
|
17
|
-
}),
|
|
18
|
-
l ?
|
|
19
|
-
},
|
|
20
|
-
|
|
21
|
-
},
|
|
22
|
-
const l =
|
|
23
|
+
const U = () => ({
|
|
24
|
+
values: r.value,
|
|
25
|
+
isUpdate: V
|
|
26
|
+
}), D = (e) => R(r.value, e), G = (e) => f.value[e] || "", P = (e, l) => {
|
|
27
|
+
l ? f.value[e] = l : delete f.value[e];
|
|
28
|
+
}, x = () => {
|
|
29
|
+
f.value = {};
|
|
30
|
+
}, k = (e) => e.when ? $(e.when, U()) : !0, E = (e) => $(e.disabled, U()), B = (e) => $(e.readonly, U()), T = async (e) => {
|
|
31
|
+
const l = D(e.name);
|
|
23
32
|
let t = "";
|
|
24
|
-
const
|
|
25
|
-
if (e.required && (l == null || l === "" || Array.isArray(l) && l.length === 0) && (t = `${
|
|
26
|
-
const
|
|
33
|
+
const n = e.labelI18n ? ae(e.labelI18n) : typeof e.label == "string" ? e.label : e.name;
|
|
34
|
+
if (e.required && (l == null || l === "" || Array.isArray(l) && l.length === 0) && (t = `${n} is required`), !t && e.maxFileSize) {
|
|
35
|
+
const i = e.maxFileSize * 1024 * 1024;
|
|
27
36
|
if (l != null && l !== "") {
|
|
28
37
|
const s = Array.isArray(l) ? l : [l];
|
|
29
|
-
for (const
|
|
30
|
-
const a =
|
|
31
|
-
if (a !== void 0 && a >
|
|
32
|
-
t = `${
|
|
38
|
+
for (const o of s) {
|
|
39
|
+
const a = o instanceof File ? o.size : o?.fileSize || o?.file?.size || o?.size;
|
|
40
|
+
if (a !== void 0 && a > i) {
|
|
41
|
+
t = `${n} size must be less than ${e.maxFileSize}MB`;
|
|
33
42
|
break;
|
|
34
43
|
}
|
|
35
44
|
}
|
|
36
45
|
}
|
|
37
46
|
}
|
|
38
47
|
if (!t && (e.type === "file" || e.type === "fileUploader") && (e.props?.multiple || e.maxFiles)) {
|
|
39
|
-
const
|
|
40
|
-
|
|
48
|
+
const i = e.maxFiles || e.props?.maxFiles;
|
|
49
|
+
i && Array.isArray(l) && l.length > i && (t = `Maximum ${i} files allowed`);
|
|
41
50
|
}
|
|
42
|
-
|
|
43
|
-
value
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
if (!t && e.validation) {
|
|
52
|
+
p.value[e.name] = !0;
|
|
53
|
+
try {
|
|
54
|
+
t = await e.validation({
|
|
55
|
+
value: l,
|
|
56
|
+
values: r.value,
|
|
57
|
+
isUpdate: V
|
|
58
|
+
});
|
|
59
|
+
} catch (i) {
|
|
60
|
+
console.error(`[useForm] Validation error in field ${e.name}:`, i), t = "Validation failed";
|
|
61
|
+
} finally {
|
|
62
|
+
p.value[e.name] = !1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return t ? f.value[e.name] = t : delete f.value[e.name], t;
|
|
66
|
+
}, q = async () => {
|
|
67
|
+
x();
|
|
49
68
|
let e = !0;
|
|
50
|
-
for (const l of
|
|
51
|
-
if (!
|
|
52
|
-
|
|
69
|
+
for (const l of A.value) {
|
|
70
|
+
if (!k(l) || E(l)) continue;
|
|
71
|
+
await T(l) && (e = !1);
|
|
53
72
|
}
|
|
54
73
|
return e;
|
|
55
|
-
}, H = (e, l, t) => {
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
74
|
+
}, H = async (e, l, t) => {
|
|
75
|
+
const n = A.value.find((i) => i.name === e);
|
|
76
|
+
if (n && (E(n) || B(n))) {
|
|
58
77
|
console.warn(`[vlite3/useForm] Blocked attempted update to disabled/readonly field: ${e}`);
|
|
59
78
|
return;
|
|
60
79
|
}
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
80
|
+
if (r.value = z(r.value, e, l), b.value = !0, delete f.value[e], n?.updateValues) {
|
|
81
|
+
p.value[e] = !0;
|
|
82
|
+
try {
|
|
83
|
+
const i = await n.updateValues({
|
|
84
|
+
values: r.value,
|
|
85
|
+
data: t,
|
|
86
|
+
isUpdate: V,
|
|
87
|
+
updateError: P
|
|
88
|
+
});
|
|
89
|
+
i && typeof i == "object" && (r.value = { ...r.value, ...i });
|
|
90
|
+
} catch (i) {
|
|
91
|
+
console.error(`[useForm] Error in updateValues for ${e}:`, i);
|
|
92
|
+
} finally {
|
|
93
|
+
p.value[e] = !1;
|
|
94
|
+
}
|
|
69
95
|
}
|
|
70
96
|
}, J = async () => {
|
|
71
|
-
const e =
|
|
97
|
+
const e = m(r.value), l = _(d, e), t = (s, o) => {
|
|
72
98
|
let a = null;
|
|
73
99
|
s instanceof File ? a = s : s && typeof s == "object" && s.file instanceof File && (a = s.file);
|
|
74
|
-
const
|
|
100
|
+
const h = {
|
|
75
101
|
...typeof s == "object" ? s : {},
|
|
76
|
-
fileName: s?.fileName || a?.name ||
|
|
77
|
-
fileUrl:
|
|
102
|
+
fileName: s?.fileName || a?.name || o.split("/").pop() || "unknown",
|
|
103
|
+
fileUrl: o,
|
|
78
104
|
fileType: s?.fileType || a?.type || "application/octet-stream",
|
|
79
105
|
fileSize: s?.fileSize || a?.size || 0
|
|
80
106
|
};
|
|
81
|
-
return delete
|
|
82
|
-
},
|
|
83
|
-
const { name:
|
|
84
|
-
|
|
107
|
+
return delete h.file, delete h.base64, h;
|
|
108
|
+
}, n = l.map(async (s) => {
|
|
109
|
+
const { name: o, value: a, field: h } = s, L = h.returnFileObject === !0, M = Array.isArray(a) ? a.some(
|
|
110
|
+
(v) => v instanceof File || v && typeof v == "object" && v.file instanceof File
|
|
111
|
+
) : a instanceof File || a && typeof a == "object" && a.file instanceof File;
|
|
112
|
+
M && (p.value[o] = !0);
|
|
85
113
|
try {
|
|
86
114
|
if (Array.isArray(a)) {
|
|
87
|
-
const
|
|
115
|
+
const v = a.map(async (u) => {
|
|
88
116
|
if (u instanceof File || u && typeof u == "object" && u.file instanceof File) {
|
|
89
|
-
const
|
|
90
|
-
return
|
|
117
|
+
const y = await N(u, C);
|
|
118
|
+
return y ? L ? t(u, y) : y : null;
|
|
91
119
|
}
|
|
92
120
|
if (u && typeof u == "object") {
|
|
93
|
-
const
|
|
94
|
-
return delete
|
|
121
|
+
const y = { ...u };
|
|
122
|
+
return delete y.file, delete y.base64, y;
|
|
95
123
|
}
|
|
96
124
|
return u;
|
|
97
|
-
}), c = await Promise.all(
|
|
98
|
-
return { name:
|
|
125
|
+
}), c = await Promise.all(v);
|
|
126
|
+
return { name: o, value: c };
|
|
99
127
|
} else {
|
|
100
128
|
if (a instanceof File || a && typeof a == "object" && a.file instanceof File) {
|
|
101
|
-
const c = await N(a,
|
|
129
|
+
const c = await N(a, C);
|
|
102
130
|
if (c)
|
|
103
|
-
return { name:
|
|
131
|
+
return { name: o, value: L ? t(a, c) : c };
|
|
104
132
|
} else if (a && typeof a == "object") {
|
|
105
133
|
const c = { ...a };
|
|
106
|
-
return delete c.file, delete c.base64, { name:
|
|
134
|
+
return delete c.file, delete c.base64, { name: o, value: c };
|
|
107
135
|
}
|
|
108
136
|
return null;
|
|
109
137
|
}
|
|
110
138
|
} finally {
|
|
111
|
-
|
|
139
|
+
M && (p.value[o] = !1);
|
|
112
140
|
}
|
|
113
141
|
});
|
|
114
|
-
return (await Promise.all(
|
|
115
|
-
s && (Object.assign(e,
|
|
142
|
+
return (await Promise.all(n)).forEach((s) => {
|
|
143
|
+
s && (Object.assign(e, z(e, s.name, s.value)), r.value = z(r.value, s.name, s.value));
|
|
116
144
|
}), e;
|
|
117
145
|
}, K = (e) => {
|
|
118
146
|
const l = { ...e };
|
|
119
|
-
for (const t of
|
|
147
|
+
for (const t of A.value)
|
|
120
148
|
if (t.type === "customFields" && t.props?.schema) {
|
|
121
|
-
const
|
|
122
|
-
if (Array.isArray(
|
|
123
|
-
const
|
|
124
|
-
Object.assign(l,
|
|
149
|
+
const n = R(l, t.name);
|
|
150
|
+
if (Array.isArray(n)) {
|
|
151
|
+
const i = ee(n, t.props.schema);
|
|
152
|
+
Object.assign(l, z(l, t.name, i));
|
|
125
153
|
}
|
|
126
154
|
}
|
|
127
155
|
return l;
|
|
128
156
|
};
|
|
129
157
|
return {
|
|
130
|
-
formValues:
|
|
131
|
-
errors:
|
|
132
|
-
isSubmitting:
|
|
133
|
-
isDirty:
|
|
134
|
-
fieldLoading:
|
|
158
|
+
formValues: r,
|
|
159
|
+
errors: f,
|
|
160
|
+
isSubmitting: j,
|
|
161
|
+
isDirty: b,
|
|
162
|
+
fieldLoading: p,
|
|
135
163
|
handleFieldChange: H,
|
|
136
|
-
validateField:
|
|
137
|
-
validateAll:
|
|
138
|
-
isFieldVisible:
|
|
139
|
-
isFieldDisabled:
|
|
140
|
-
isFieldReadonly:
|
|
141
|
-
getFieldValue:
|
|
164
|
+
validateField: T,
|
|
165
|
+
validateAll: q,
|
|
166
|
+
isFieldVisible: k,
|
|
167
|
+
isFieldDisabled: E,
|
|
168
|
+
isFieldReadonly: B,
|
|
169
|
+
getFieldValue: D,
|
|
142
170
|
getFieldError: G,
|
|
143
|
-
setFieldError:
|
|
144
|
-
clearErrors:
|
|
171
|
+
setFieldError: P,
|
|
172
|
+
clearErrors: x,
|
|
145
173
|
resetForm: () => {
|
|
146
|
-
|
|
174
|
+
r.value = m(g.value), x(), b.value = !1;
|
|
147
175
|
},
|
|
148
176
|
handleSubmit: async () => {
|
|
149
|
-
if (
|
|
150
|
-
|
|
177
|
+
if (await q()) {
|
|
178
|
+
j.value = !0;
|
|
151
179
|
try {
|
|
152
180
|
let l = await J();
|
|
153
|
-
l = K(l), l =
|
|
181
|
+
l = K(l), l = await Z(
|
|
154
182
|
l,
|
|
155
|
-
|
|
183
|
+
d,
|
|
156
184
|
S.emitFields,
|
|
157
185
|
S.emitFields
|
|
158
186
|
), I && await I({
|
|
159
187
|
values: l,
|
|
160
|
-
isUpdate:
|
|
161
|
-
}),
|
|
188
|
+
isUpdate: V
|
|
189
|
+
}), b.value = !1, g.value = m(l);
|
|
162
190
|
} catch (l) {
|
|
163
191
|
throw console.error("[useForm] Submit error:", l), l;
|
|
164
192
|
} finally {
|
|
165
|
-
|
|
193
|
+
j.value = !1;
|
|
166
194
|
}
|
|
167
195
|
}
|
|
168
196
|
},
|
|
169
|
-
flatSchema:
|
|
197
|
+
flatSchema: A
|
|
170
198
|
};
|
|
171
199
|
}
|
|
172
200
|
export {
|
|
173
|
-
|
|
201
|
+
ce as useForm
|
|
174
202
|
};
|
|
@@ -43,7 +43,7 @@ export interface IFormValidationContext {
|
|
|
43
43
|
values: Record<string, any>;
|
|
44
44
|
isUpdate?: boolean;
|
|
45
45
|
}
|
|
46
|
-
export type IFormValidation = (context: IFormValidationContext) => string
|
|
46
|
+
export type IFormValidation = (context: IFormValidationContext) => string | Promise<string>;
|
|
47
47
|
/**
|
|
48
48
|
* UpdateValues function signature - allows computed/derived fields
|
|
49
49
|
*/
|
|
@@ -53,7 +53,7 @@ export interface IFormUpdateContext {
|
|
|
53
53
|
isUpdate?: boolean;
|
|
54
54
|
updateError?: (name: string, error: string) => void;
|
|
55
55
|
}
|
|
56
|
-
export type IFormUpdateValues = (context: IFormUpdateContext) => Record<string, any>;
|
|
56
|
+
export type IFormUpdateValues = (context: IFormUpdateContext) => Record<string, any> | void | Promise<Record<string, any> | void>;
|
|
57
57
|
/**
|
|
58
58
|
* When condition - controls field visibility
|
|
59
59
|
*/
|
|
@@ -81,9 +81,9 @@ export interface IForm {
|
|
|
81
81
|
/** Alias for valueKey */
|
|
82
82
|
key?: string;
|
|
83
83
|
/** Format raw value before passing to form state */
|
|
84
|
-
format?: (value: any, rawValues: Record<string, any>) => any
|
|
84
|
+
format?: (value: any, rawValues: Record<string, any>) => any | Promise<any>;
|
|
85
85
|
/** Transform form value before submitting */
|
|
86
|
-
transform?: (value: any, formValues: Record<string, any>) => any
|
|
86
|
+
transform?: (value: any, formValues: Record<string, any>) => any | Promise<any>;
|
|
87
87
|
/** Field label - can be string or Vue component */
|
|
88
88
|
label?: string | Component;
|
|
89
89
|
/** I18n translation key for the label */
|
|
@@ -16,8 +16,9 @@ export declare function getNestedValue(obj: Record<string, any>, path: string):
|
|
|
16
16
|
export declare function setNestedValue(obj: Record<string, any>, path: string, value: any): Record<string, any>;
|
|
17
17
|
/**
|
|
18
18
|
* Initialize form values from schema and optional initial values
|
|
19
|
+
* Updated to support Async format handlers cleanly without race conditions.
|
|
19
20
|
*/
|
|
20
|
-
export declare function initializeFormValues(schema: IForm[] | IForm[][], initialValues?: Record<string, any>): Record<string, any
|
|
21
|
+
export declare function initializeFormValues(schema: IForm[] | IForm[][], initialValues?: Record<string, any>): Promise<Record<string, any>>;
|
|
21
22
|
/**
|
|
22
23
|
* Evaluate a conditional (disabled/readonly/when) function or boolean
|
|
23
24
|
*/
|
|
@@ -54,13 +55,13 @@ export declare function isComponent(value: any): boolean;
|
|
|
54
55
|
*
|
|
55
56
|
* KEY BEHAVIOUR (fix for Prisma / Postgres sync on updates):
|
|
56
57
|
* A field is included in the payload only when:
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
58
|
+
* 1. It has a non-empty value — always included (create & update).
|
|
59
|
+
* 2. It is empty AND the field key already existed in the original `values`
|
|
60
|
+
* object — meaning the user explicitly cleared a pre-existing value during
|
|
61
|
+
* an update. In this case the canonical empty value (`[]` for multiSelect,
|
|
62
|
+
* `null` for everything else) is sent so the backend overwrites the old data.
|
|
62
63
|
*
|
|
63
64
|
* Fields that were never filled in (key absent from `values`) are silently
|
|
64
65
|
* omitted to keep create payloads lean.
|
|
65
66
|
*/
|
|
66
|
-
export declare function cleanSubmitValues(values: Record<string, any>, schema: IForm[] | IForm[][], emitFields?: string[], ignoreFields?: string[]): Record<string, any
|
|
67
|
+
export declare function cleanSubmitValues(values: Record<string, any>, schema: IForm[] | IForm[][], emitFields?: string[], ignoreFields?: string[]): Promise<Record<string, any>>;
|
|
@@ -4,47 +4,47 @@ function g(e) {
|
|
|
4
4
|
function A(e, t) {
|
|
5
5
|
if (!t || !e) return;
|
|
6
6
|
const f = t.split(".");
|
|
7
|
-
let
|
|
7
|
+
let y = e;
|
|
8
8
|
for (const n of f) {
|
|
9
|
-
if (
|
|
10
|
-
|
|
9
|
+
if (y == null) return;
|
|
10
|
+
y = y[n];
|
|
11
11
|
}
|
|
12
|
-
return
|
|
12
|
+
return y;
|
|
13
13
|
}
|
|
14
14
|
function h(e, t, f) {
|
|
15
15
|
if (!t) return e;
|
|
16
|
-
const
|
|
16
|
+
const y = t.split("."), n = { ...e };
|
|
17
17
|
let o = n;
|
|
18
|
-
for (let s = 0; s <
|
|
19
|
-
const
|
|
20
|
-
Array.isArray(o[
|
|
18
|
+
for (let s = 0; s < y.length - 1; s++) {
|
|
19
|
+
const a = y[s];
|
|
20
|
+
Array.isArray(o[a]) ? o[a] = [...o[a]] : o[a] = o[a] ? { ...o[a] } : {}, o = o[a];
|
|
21
21
|
}
|
|
22
|
-
return o[
|
|
22
|
+
return o[y[y.length - 1]] = f, n;
|
|
23
23
|
}
|
|
24
24
|
function v(e, t) {
|
|
25
25
|
return !g(t) || !t.name ? e : A(e, t.name) === void 0 && t.value !== void 0 ? h(e, t.name, t.value) : e;
|
|
26
26
|
}
|
|
27
|
-
function
|
|
27
|
+
async function w(e, t) {
|
|
28
28
|
let f = t ? d(t) : {};
|
|
29
|
-
const
|
|
30
|
-
for (const n of
|
|
29
|
+
const y = Array.isArray(e[0]) ? e.flat() : e;
|
|
30
|
+
for (const n of y) {
|
|
31
31
|
if (!n.name) continue;
|
|
32
32
|
const o = n.mapFrom || n.name;
|
|
33
33
|
let s = t ? A(t, o) : void 0;
|
|
34
34
|
if (s != null) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
(p) => p && typeof p == "object" ? A(p,
|
|
38
|
-
) : typeof s == "object" && (s = A(s,
|
|
35
|
+
const a = n.valueKey || n.key;
|
|
36
|
+
a && (Array.isArray(s) ? s = s.map(
|
|
37
|
+
(p) => p && typeof p == "object" ? A(p, a) : p
|
|
38
|
+
) : typeof s == "object" && (s = A(s, a))), n.format && (s = await n.format(s, t || {}));
|
|
39
39
|
}
|
|
40
40
|
if (s === void 0) {
|
|
41
41
|
if (n.mapFrom && t) {
|
|
42
|
-
const
|
|
43
|
-
|
|
42
|
+
const a = A(t, n.name);
|
|
43
|
+
a !== void 0 && (s = a);
|
|
44
44
|
}
|
|
45
45
|
if (s === void 0) {
|
|
46
|
-
const
|
|
47
|
-
|
|
46
|
+
const a = typeof n.value == "function" ? n.value() : n.value;
|
|
47
|
+
a !== void 0 && Object.assign(f, h(f, n.name, a));
|
|
48
48
|
} else
|
|
49
49
|
Object.assign(f, h(f, n.name, s));
|
|
50
50
|
} else
|
|
@@ -53,18 +53,18 @@ function x(e, t) {
|
|
|
53
53
|
}
|
|
54
54
|
return f;
|
|
55
55
|
}
|
|
56
|
-
function
|
|
56
|
+
function x(e, t) {
|
|
57
57
|
return e === void 0 ? !1 : typeof e == "boolean" ? e : typeof e == "function" ? e(t) : !1;
|
|
58
58
|
}
|
|
59
|
-
function
|
|
59
|
+
function F(e, t) {
|
|
60
60
|
return Array.isArray(e) ? e.filter((f) => f ? !t.every((n) => {
|
|
61
61
|
const o = f[n.name];
|
|
62
62
|
return o == null || o === "";
|
|
63
63
|
}) : !1) : [];
|
|
64
64
|
}
|
|
65
|
-
function
|
|
66
|
-
const f = [],
|
|
67
|
-
for (const n of
|
|
65
|
+
function b(e, t) {
|
|
66
|
+
const f = [], y = Array.isArray(e[0]) ? e.flat() : e;
|
|
67
|
+
for (const n of y) {
|
|
68
68
|
if (!n.name) continue;
|
|
69
69
|
const o = n.type;
|
|
70
70
|
if (o === "file" || o === "avatarUpload" || o === "fileUploader") {
|
|
@@ -83,13 +83,13 @@ function N(e, t) {
|
|
|
83
83
|
(i) => i.type === "file" || i.type === "avatarUpload" || i.type === "fileUploader"
|
|
84
84
|
);
|
|
85
85
|
p.length > 0 && s.forEach((i, r) => {
|
|
86
|
-
p.forEach((
|
|
87
|
-
const l = i?.[
|
|
86
|
+
p.forEach((c) => {
|
|
87
|
+
const l = i?.[c.name];
|
|
88
88
|
l && f.push({
|
|
89
|
-
name: `${n.name}.${r}.${
|
|
89
|
+
name: `${n.name}.${r}.${c.name}`,
|
|
90
90
|
value: l,
|
|
91
|
-
type:
|
|
92
|
-
field:
|
|
91
|
+
type: c.type,
|
|
92
|
+
field: c
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
});
|
|
@@ -108,7 +108,7 @@ function d(e) {
|
|
|
108
108
|
Object.prototype.hasOwnProperty.call(e, f) && (t[f] = d(e[f]));
|
|
109
109
|
return t;
|
|
110
110
|
}
|
|
111
|
-
function
|
|
111
|
+
function N(e) {
|
|
112
112
|
return e ? typeof e == "object" && (typeof e.render == "function" || typeof e.setup == "function" || e.__name !== void 0 || e.name !== void 0) : !1;
|
|
113
113
|
}
|
|
114
114
|
function O(e) {
|
|
@@ -118,46 +118,46 @@ function O(e) {
|
|
|
118
118
|
function S(e) {
|
|
119
119
|
return !!(e == null || e === "" || Array.isArray(e) && e.length === 0);
|
|
120
120
|
}
|
|
121
|
-
function V(e, t, f,
|
|
122
|
-
const n = f === void 0 &&
|
|
121
|
+
async function V(e, t, f, y) {
|
|
122
|
+
const n = f === void 0 && y === void 0, o = n ? d(e) : {}, s = Array.isArray(t[0]) ? t.flat() : t, a = f || [], p = y || [];
|
|
123
123
|
for (const i of s) {
|
|
124
124
|
if (!i.name) continue;
|
|
125
125
|
let r = A(e, i.name);
|
|
126
|
-
const
|
|
126
|
+
const c = i.name.split(".")[0], l = Object.prototype.hasOwnProperty.call(e, c);
|
|
127
127
|
if (S(r)) {
|
|
128
128
|
if (!l) continue;
|
|
129
129
|
r = O(i);
|
|
130
130
|
}
|
|
131
131
|
if (r = d(r), i.type === "customFields" && i.props?.schema && Array.isArray(r)) {
|
|
132
132
|
const k = i.props.schema;
|
|
133
|
-
r = r.map((E) => V(E, k, f,
|
|
133
|
+
r = await Promise.all(r.map((E) => V(E, k, f, y)));
|
|
134
134
|
}
|
|
135
135
|
let m = !1;
|
|
136
|
-
i.transform && (r = i.transform(r, e), m = !0);
|
|
137
|
-
const
|
|
138
|
-
|
|
136
|
+
i.transform && (r = await i.transform(r, e), m = !0);
|
|
137
|
+
const u = i.mapTo || i.name;
|
|
138
|
+
u !== i.name && (m = !0, n && !i.name.includes(".") && delete o[i.name]), !n || m ? Object.assign(o, h(o, u, r)) : Object.assign(o, h(o, i.name, r));
|
|
139
139
|
}
|
|
140
|
-
if (
|
|
141
|
-
const i = (r,
|
|
142
|
-
if (!(!r || typeof r != "object") && !(!
|
|
143
|
-
if (Array.isArray(r) && Array.isArray(
|
|
144
|
-
for (const l of
|
|
145
|
-
const m = r.find((
|
|
146
|
-
m !== void 0 &&
|
|
147
|
-
|
|
140
|
+
if (a.length > 0) {
|
|
141
|
+
const i = (r, c) => {
|
|
142
|
+
if (!(!r || typeof r != "object") && !(!c || typeof c != "object"))
|
|
143
|
+
if (Array.isArray(r) && Array.isArray(c)) {
|
|
144
|
+
for (const l of a) {
|
|
145
|
+
const m = r.find((u) => u && typeof u == "object" && u[l] !== void 0)?.[l];
|
|
146
|
+
m !== void 0 && c.forEach((u) => {
|
|
147
|
+
u && typeof u == "object" && u[l] === void 0 && (u[l] = d(m));
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
150
|
r.forEach((l, m) => {
|
|
151
|
-
|
|
151
|
+
c[m] && i(l, c[m]);
|
|
152
152
|
});
|
|
153
153
|
} else {
|
|
154
|
-
for (const l of
|
|
155
|
-
r[l] !== void 0 &&
|
|
156
|
-
for (const l in
|
|
157
|
-
typeof
|
|
154
|
+
for (const l of a)
|
|
155
|
+
r[l] !== void 0 && c[l] === void 0 && (c[l] = d(r[l]));
|
|
156
|
+
for (const l in c)
|
|
157
|
+
typeof c[l] == "object" && typeof r[l] == "object" && i(r[l], c[l]);
|
|
158
158
|
}
|
|
159
159
|
};
|
|
160
|
-
for (const r of
|
|
160
|
+
for (const r of a)
|
|
161
161
|
e[r] !== void 0 && o[r] === void 0 && (o[r] = d(e[r]));
|
|
162
162
|
i(e, o);
|
|
163
163
|
}
|
|
@@ -167,10 +167,10 @@ function V(e, t, f, u) {
|
|
|
167
167
|
if (Array.isArray(r))
|
|
168
168
|
r.forEach(i);
|
|
169
169
|
else {
|
|
170
|
-
for (const
|
|
171
|
-
delete r[
|
|
172
|
-
for (const
|
|
173
|
-
i(r[
|
|
170
|
+
for (const c of p)
|
|
171
|
+
delete r[c];
|
|
172
|
+
for (const c in r)
|
|
173
|
+
i(r[c]);
|
|
174
174
|
}
|
|
175
175
|
};
|
|
176
176
|
i(o);
|
|
@@ -179,13 +179,13 @@ function V(e, t, f, u) {
|
|
|
179
179
|
}
|
|
180
180
|
export {
|
|
181
181
|
V as cleanSubmitValues,
|
|
182
|
-
|
|
182
|
+
b as collectFileFields,
|
|
183
183
|
d as deepClone,
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
x as evaluateConditional,
|
|
185
|
+
F as filterNullCustomFields,
|
|
186
186
|
A as getNestedValue,
|
|
187
|
-
|
|
187
|
+
w as initializeFormValues,
|
|
188
188
|
g as isAddonObject,
|
|
189
|
-
|
|
189
|
+
N as isComponent,
|
|
190
190
|
h as setNestedValue
|
|
191
191
|
};
|
|
@@ -12,7 +12,7 @@ import "v-datepicker-lite";
|
|
|
12
12
|
import "v-datepicker-lite/style.css";
|
|
13
13
|
import "@jaames/iro";
|
|
14
14
|
import "@vueuse/core";
|
|
15
|
-
/* empty css
|
|
15
|
+
/* empty css */
|
|
16
16
|
import "iconify-icon-picker";
|
|
17
17
|
import "iconify-icon-picker/style.css";
|
|
18
18
|
import "vue-draggable-plus";
|
|
@@ -30,7 +30,7 @@ const D = ["href", "target"], $ = /* @__PURE__ */ p({
|
|
|
30
30
|
return (r, N) => {
|
|
31
31
|
const g = C("router-link");
|
|
32
32
|
return n(), a(h(x), {
|
|
33
|
-
class: "py-
|
|
33
|
+
class: "py-3!",
|
|
34
34
|
title: e.emptyTitle,
|
|
35
35
|
titleI18n: e.emptyTitleI18n,
|
|
36
36
|
description: e.emptyDescription,
|
|
@@ -22,7 +22,7 @@ const p = { class: "w-max" }, g = /* @__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 gap-3
|
|
25
|
+
class: "border-b-0! border-0! pb-0 gap-3!",
|
|
26
26
|
"model-value": a.modelValue,
|
|
27
27
|
options: t.value,
|
|
28
28
|
variant: a.variant || "line",
|
package/package.json
CHANGED
package/style.css
CHANGED
|
@@ -968,5 +968,5 @@ textarea::-webkit-scrollbar-thumb:hover {
|
|
|
968
968
|
}
|
|
969
969
|
|
|
970
970
|
/* --- Vite Generated CSS --- */
|
|
971
|
-
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-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-90c3a6e8]{will-change:transform;contain:layout style}.custom-fields-table[data-v-90c3a6e8] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-90c3a6e8] input,.custom-fields-table[data-v-90c3a6e8] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-90c3a6e8] input,.custom-fields-table[data-v-90c3a6e8] textarea,.custom-fields-table[data-v-90c3a6e8] select,.custom-fields-table[data-v-90c3a6e8] .input-wrapper,.custom-fields-table[data-v-90c3a6e8] .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-90c3a6e8] .tooltip-trigger button{justify-content:space-between!important}.custom-fields-table[data-v-90c3a6e8] input:focus,.custom-fields-table[data-v-90c3a6e8] textarea:focus,.custom-fields-table[data-v-90c3a6e8] select:focus,.custom-fields-table[data-v-90c3a6e8] .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-90c3a6e8] .w-full{width:100%;height:100%}.list-enter-active[data-v-90c3a6e8]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-90c3a6e8]{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-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}
|
|
971
|
+
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-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-90c3a6e8]{will-change:transform;contain:layout style}.custom-fields-table[data-v-90c3a6e8] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-90c3a6e8] input,.custom-fields-table[data-v-90c3a6e8] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-90c3a6e8] input,.custom-fields-table[data-v-90c3a6e8] textarea,.custom-fields-table[data-v-90c3a6e8] select,.custom-fields-table[data-v-90c3a6e8] .input-wrapper,.custom-fields-table[data-v-90c3a6e8] .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-90c3a6e8] .tooltip-trigger button{justify-content:space-between!important}.custom-fields-table[data-v-90c3a6e8] input:focus,.custom-fields-table[data-v-90c3a6e8] textarea:focus,.custom-fields-table[data-v-90c3a6e8] select:focus,.custom-fields-table[data-v-90c3a6e8] .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-90c3a6e8] .w-full{width:100%;height:100%}.list-enter-active[data-v-90c3a6e8]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-90c3a6e8]{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-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}
|
|
972
972
|
|
|
File without changes
|