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.
@@ -1,5 +1,5 @@
1
- import o from "./ColorIro.vue.js";
2
- /* empty css */
1
+ import o from "./ColorIro.vue2.js";
2
+ /* empty css */
3
3
  export {
4
4
  o as default
5
5
  };
@@ -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.vue.js";
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 a = /* @__PURE__ */ r(o, [["__scopeId", "data-v-d7b4ffda"]]);
4
+ const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-06b1158f"]]);
5
5
  export {
6
- a as default
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 z, watch as ee, openBlock as o, createElementBlock as d, withKeys as te, withModifiers as G, normalizeClass as f, createElementVNode as v, createVNode as k, mergeProps as B, toDisplayString as A, unref as a, renderSlot as ae, createCommentVNode as c, Fragment as ke, renderList as pe, createBlock as R } from "vue";
2
- import { useForm as Se } from "./composables/useForm.js";
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 p from "../Button.vue.js";
5
- import Ce from "../BackButton.vue.js";
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" }, Ne = { class: "flex items-center gap-2 flex-shrink-0" }, Te = {
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
- }, Ue = {
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
- }, Be = { class: "form-group-body p-4.5" }, De = {
16
+ }, Ue = {
20
17
  key: 2,
21
18
  class: "form-step"
22
- }, Le = { class: "text-lg font-semibold text-foreground" }, qe = {
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
- }, He = { class: "flex items-center gap-3" }, Qe = /* @__PURE__ */ ye({
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, m = 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(
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 || !!m), x = n(() => !!m), S = n(() => i.stickyFooter || x.value);
64
+ ), le = n(() => i.showCancel || !!f), x = n(() => !!f), p = n(() => i.stickyFooter || x.value);
66
65
  _(() => {
67
- i.footer && x.value && m?.registerFormFooter?.(!0);
66
+ i.footer && x.value && f?.registerFormFooter?.(!0);
68
67
  }), E(() => {
69
- x.value && m?.registerFormFooter?.(!1);
68
+ x.value && f?.registerFormFooter?.(!1);
70
69
  });
71
- const oe = z(null), I = z(null), J = z(!1);
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 N = n(() => !i.schema || i.schema.length === 0 ? !1 : Array.isArray(i.schema[0])), r = n(() => i.tabs && i.tabs.length > 0 && N.value), l = z(0), Q = n(() => i.tabs ? i.tabs.map((t, s) => ({
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
- })) : []), C = n(() => N.value ? i.schema : [i.schema]), W = n(() => r.value ? C.value[l.value] || [] : []), {
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: T,
98
- isFieldDisabled: U,
96
+ isFieldVisible: B,
97
+ isFieldDisabled: N,
99
98
  isFieldReadonly: $,
100
99
  handleSubmit: de
101
- } = Se({
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, m?.close || (() => {
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
- m?.setSubmitting && m.setSubmitting(t);
114
+ f?.setSubmitting && f.setSubmitting(t);
116
115
  },
117
116
  { immediate: !0 }
118
117
  ), E(() => {
119
- m?.setSubmitting && m.setSubmitting(!1);
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 (!T(u) || U(u)) continue;
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 < C.value.length - 1 : !1), X = n(() => r.value ? l.value > 0 : !1), V = n(() => r.value ? l.value === C.value.length - 1 : !0), Y = () => {
138
- me.value && ce() && (l.value++, g("onStepChange", l.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 (!V.value && !i.isUpdate) {
146
- Y();
144
+ if (!T.value && !i.isUpdate) {
145
+ await Y();
147
146
  return;
148
147
  }
149
- if (!ue()) {
150
- const s = C.value.findIndex(
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"), m && m?.close?.();
167
+ g("onCancel"), f && f?.close?.();
169
168
  };
170
169
  return (t, s) => (o(), d("form", {
171
- class: f(["form-container ", i.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: f([
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(Ce, B(e.backButtonProps, {
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: f(["text-foreground max-sm:text-lg text-fs-5 truncate", e.pageTitleClass])
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", Ne, [
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(p, B({
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: f(["form-timeline", e.timelineTextPosition == "right" ? "mb-6.5" : "mb-13"])
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: f(e.footer && S.value ? "pb-2" : "")
225
+ class: m(e.footer && p.value ? "pb-2" : "")
227
226
  }, [
228
- N.value ? N.value && !r.value ? (o(), d("div", Ue, [
229
- (o(!0), d(ke, null, pe(C.value, (u, b) => (o(), d("div", {
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: f(["form-group border rounded overflow-hidden bg-body", e.groupClass])
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: f(["form-group-header bg-muted/50 px-4 py-2.5 border-b", e.headerClass])
237
+ class: m(["form-group-header bg-muted/50 px-4 py-2.5 border-b", e.headerClass])
236
238
  }, [
237
- v("h3", Ve, A(e.groupsHeadings[b]), 1),
238
- e.groupHeadingsDescription?.[b] ? (o(), d("p", ze, A(e.groupHeadingsDescription[b]), 1)) : c("", !0)
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", Be, [
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(T),
253
- isFieldDisabled: a(U),
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", De, [
264
+ ], 2)) : r.value ? (o(), d("div", Ue, [
261
265
  e.tabs?.[l.value] ? (o(), d("div", {
262
266
  key: 0,
263
- class: f(["form-step-header mb-6", e.headerClass])
267
+ class: m(["form-step-header mb-6", e.headerClass])
264
268
  }, [
265
- v("h2", Le, A(e.tabs[l.value].title), 1),
266
- e.tabs[l.value].description ? (o(), d("p", qe, A(e.tabs[l.value].description), 1)) : c("", !0)
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(T),
280
- isFieldDisabled: a(U),
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", Te, [
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(T),
298
- isFieldDisabled: a(U),
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: f([
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
- S.value ? "sticky bottom-0 bg-body pt-3 pb-3 -mx-0.5 px-0.5 border-t border-border/75" : "mt-6",
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
- (S.value && J.value, ""),
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
- !S.value && x.value ? "border-t border-border/75 mt-5" : "",
337
- !S.value && !x.value ? "mt-6" : ""
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", He, [
341
- le.value ? (o(), R(p, {
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 && !V.value ? (o(), R(p, B({
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: f(["flex items-center gap-3", r.value && "ml-auto"])
364
+ class: m(["flex items-center gap-3", r.value && "ml-auto"])
361
365
  }, [
362
- r.value && X.value ? (o(), R(p, {
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 && !V.value ? (o(), R(p, {
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 || V.value ? (o(), R(p, B({
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
- Qe as default
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 m, shallowRef as Q, computed as W, watch as X } from "vue";
2
- import { initializeFormValues as M, deepClone as b, cleanSubmitValues as Y, getNestedValue as R, evaluateConditional as E, setNestedValue as A, collectFileFields as Z, filterNullCustomFields as _ } from "../utils/form.utils.js";
3
- import { useFileUpload as ee } from "./useFileUpload.js";
4
- import { $t as le } from "../../../utils/i18n.js";
5
- function ue(S) {
6
- const { schema: f, values: C, isUpdate: h = !1, folderId: $, onSubmit: I } = S, { handleUploadFile: N } = ee(), i = m(M(f, C)), d = m({}), w = m(!1), y = m(!1), j = m({}), z = Q(b(i.value)), V = W(() => f ? Array.isArray(f[0]) ? f.flat() : f : []);
7
- X(
8
- () => C,
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 && (i.value = M(f, e), z.value = b(i.value), y.value = !1);
19
+ e && O(e);
11
20
  },
12
21
  { deep: !0 }
13
22
  );
14
- const g = () => ({
15
- values: i.value,
16
- isUpdate: h
17
- }), O = (e) => R(i.value, e), G = (e) => d.value[e] || "", D = (e, l) => {
18
- l ? d.value[e] = l : delete d.value[e];
19
- }, U = () => {
20
- d.value = {};
21
- }, P = (e) => e.when ? E(e.when, g()) : !0, x = (e) => E(e.disabled, g()), k = (e) => E(e.readonly, g()), B = (e) => {
22
- const l = O(e.name);
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 r = e.labelI18n ? le(e.labelI18n) : typeof e.label == "string" ? e.label : e.name;
25
- if (e.required && (l == null || l === "" || Array.isArray(l) && l.length === 0) && (t = `${r} is required`), !t && e.maxFileSize) {
26
- const o = e.maxFileSize * 1024 * 1024;
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 n of s) {
30
- const a = n instanceof File ? n.size : n?.fileSize || n?.file?.size || n?.size;
31
- if (a !== void 0 && a > o) {
32
- t = `${r} size must be less than ${e.maxFileSize}MB`;
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 o = e.maxFiles || e.props?.maxFiles;
40
- o && Array.isArray(l) && l.length > o && (t = `Maximum ${o} files allowed`);
48
+ const i = e.maxFiles || e.props?.maxFiles;
49
+ i && Array.isArray(l) && l.length > i && (t = `Maximum ${i} files allowed`);
41
50
  }
42
- return !t && e.validation && (t = e.validation({
43
- value: l,
44
- values: i.value,
45
- isUpdate: h
46
- })), t ? d.value[e.name] = t : delete d.value[e.name], t;
47
- }, T = () => {
48
- U();
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 V.value) {
51
- if (!P(l) || x(l)) continue;
52
- B(l) && (e = !1);
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 r = V.value.find((o) => o.name === e);
57
- if (r && (x(r) || k(r))) {
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 (i.value = A(i.value, e, l), y.value = !0, delete d.value[e], r?.updateValues) {
62
- const o = r.updateValues({
63
- values: i.value,
64
- data: t,
65
- isUpdate: h,
66
- updateError: D
67
- });
68
- o && typeof o == "object" && (i.value = { ...i.value, ...o });
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 = b(i.value), l = Z(f, e), t = (s, n) => {
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 F = {
100
+ const h = {
75
101
  ...typeof s == "object" ? s : {},
76
- fileName: s?.fileName || a?.name || n.split("/").pop() || "unknown",
77
- fileUrl: n,
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 F.file, delete F.base64, F;
82
- }, r = l.map(async (s) => {
83
- const { name: n, value: a, field: F } = s, q = F.returnFileObject === !0, L = Array.isArray(a) ? a.some((p) => p instanceof File || p && typeof p == "object" && p.file instanceof File) : a instanceof File || a && typeof a == "object" && a.file instanceof File;
84
- L && (j.value[n] = !0);
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 p = a.map(async (u) => {
115
+ const v = a.map(async (u) => {
88
116
  if (u instanceof File || u && typeof u == "object" && u.file instanceof File) {
89
- const v = await N(u, $);
90
- return v ? q ? t(u, v) : v : null;
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 v = { ...u };
94
- return delete v.file, delete v.base64, v;
121
+ const y = { ...u };
122
+ return delete y.file, delete y.base64, y;
95
123
  }
96
124
  return u;
97
- }), c = await Promise.all(p);
98
- return { name: n, value: c };
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: n, value: q ? t(a, c) : c };
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: n, value: c };
134
+ return delete c.file, delete c.base64, { name: o, value: c };
107
135
  }
108
136
  return null;
109
137
  }
110
138
  } finally {
111
- L && (j.value[n] = !1);
139
+ M && (p.value[o] = !1);
112
140
  }
113
141
  });
114
- return (await Promise.all(r)).forEach((s) => {
115
- s && (Object.assign(e, A(e, s.name, s.value)), i.value = A(i.value, s.name, s.value));
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 V.value)
147
+ for (const t of A.value)
120
148
  if (t.type === "customFields" && t.props?.schema) {
121
- const r = R(l, t.name);
122
- if (Array.isArray(r)) {
123
- const o = _(r, t.props.schema);
124
- Object.assign(l, A(l, t.name, o));
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: i,
131
- errors: d,
132
- isSubmitting: w,
133
- isDirty: y,
134
- fieldLoading: j,
158
+ formValues: r,
159
+ errors: f,
160
+ isSubmitting: j,
161
+ isDirty: b,
162
+ fieldLoading: p,
135
163
  handleFieldChange: H,
136
- validateField: B,
137
- validateAll: T,
138
- isFieldVisible: P,
139
- isFieldDisabled: x,
140
- isFieldReadonly: k,
141
- getFieldValue: O,
164
+ validateField: T,
165
+ validateAll: q,
166
+ isFieldVisible: k,
167
+ isFieldDisabled: E,
168
+ isFieldReadonly: B,
169
+ getFieldValue: D,
142
170
  getFieldError: G,
143
- setFieldError: D,
144
- clearErrors: U,
171
+ setFieldError: P,
172
+ clearErrors: x,
145
173
  resetForm: () => {
146
- i.value = b(z.value), U(), y.value = !1;
174
+ r.value = m(g.value), x(), b.value = !1;
147
175
  },
148
176
  handleSubmit: async () => {
149
- if (T()) {
150
- w.value = !0;
177
+ if (await q()) {
178
+ j.value = !0;
151
179
  try {
152
180
  let l = await J();
153
- l = K(l), l = Y(
181
+ l = K(l), l = await Z(
154
182
  l,
155
- f,
183
+ d,
156
184
  S.emitFields,
157
185
  S.emitFields
158
186
  ), I && await I({
159
187
  values: l,
160
- isUpdate: h
161
- }), y.value = !1, z.value = b(l);
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
- w.value = !1;
193
+ j.value = !1;
166
194
  }
167
195
  }
168
196
  },
169
- flatSchema: V
197
+ flatSchema: A
170
198
  };
171
199
  }
172
200
  export {
173
- ue as useForm
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
- * 1. It has a non-empty value — always included (create & update).
58
- * 2. It is empty AND the field key already existed in the original `values`
59
- * object — meaning the user explicitly cleared a pre-existing value during
60
- * an update. In this case the canonical empty value (`[]` for multiSelect,
61
- * `null` for everything else) is sent so the backend overwrites the old data.
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 u = e;
7
+ let y = e;
8
8
  for (const n of f) {
9
- if (u == null) return;
10
- u = u[n];
9
+ if (y == null) return;
10
+ y = y[n];
11
11
  }
12
- return u;
12
+ return y;
13
13
  }
14
14
  function h(e, t, f) {
15
15
  if (!t) return e;
16
- const u = t.split("."), n = { ...e };
16
+ const y = t.split("."), n = { ...e };
17
17
  let o = n;
18
- for (let s = 0; s < u.length - 1; s++) {
19
- const c = u[s];
20
- Array.isArray(o[c]) ? o[c] = [...o[c]] : o[c] = o[c] ? { ...o[c] } : {}, o = o[c];
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[u[u.length - 1]] = f, n;
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 x(e, t) {
27
+ async function w(e, t) {
28
28
  let f = t ? d(t) : {};
29
- const u = Array.isArray(e[0]) ? e.flat() : e;
30
- for (const n of u) {
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 c = n.valueKey || n.key;
36
- c && (Array.isArray(s) ? s = s.map(
37
- (p) => p && typeof p == "object" ? A(p, c) : p
38
- ) : typeof s == "object" && (s = A(s, c))), n.format && (s = n.format(s, t || {}));
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 c = A(t, n.name);
43
- c !== void 0 && (s = c);
42
+ const a = A(t, n.name);
43
+ a !== void 0 && (s = a);
44
44
  }
45
45
  if (s === void 0) {
46
- const c = typeof n.value == "function" ? n.value() : n.value;
47
- c !== void 0 && Object.assign(f, h(f, n.name, c));
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 F(e, t) {
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 b(e, t) {
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 N(e, t) {
66
- const f = [], u = Array.isArray(e[0]) ? e.flat() : e;
67
- for (const n of u) {
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((a) => {
87
- const l = i?.[a.name];
86
+ p.forEach((c) => {
87
+ const l = i?.[c.name];
88
88
  l && f.push({
89
- name: `${n.name}.${r}.${a.name}`,
89
+ name: `${n.name}.${r}.${c.name}`,
90
90
  value: l,
91
- type: a.type,
92
- field: a
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 T(e) {
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, u) {
122
- const n = f === void 0 && u === void 0, o = n ? d(e) : {}, s = Array.isArray(t[0]) ? t.flat() : t, c = f || [], p = u || [];
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 a = i.name.split(".")[0], l = Object.prototype.hasOwnProperty.call(e, a);
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, u));
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 y = i.mapTo || i.name;
138
- y !== i.name && (m = !0, n && !i.name.includes(".") && delete o[i.name]), !n || m ? Object.assign(o, h(o, y, r)) : Object.assign(o, h(o, i.name, r));
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 (c.length > 0) {
141
- const i = (r, a) => {
142
- if (!(!r || typeof r != "object") && !(!a || typeof a != "object"))
143
- if (Array.isArray(r) && Array.isArray(a)) {
144
- for (const l of c) {
145
- const m = r.find((y) => y && typeof y == "object" && y[l] !== void 0)?.[l];
146
- m !== void 0 && a.forEach((y) => {
147
- y && typeof y == "object" && y[l] === void 0 && (y[l] = d(m));
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
- a[m] && i(l, a[m]);
151
+ c[m] && i(l, c[m]);
152
152
  });
153
153
  } else {
154
- for (const l of c)
155
- r[l] !== void 0 && a[l] === void 0 && (a[l] = d(r[l]));
156
- for (const l in a)
157
- typeof a[l] == "object" && typeof r[l] == "object" && i(r[l], a[l]);
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 c)
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 a of p)
171
- delete r[a];
172
- for (const a in r)
173
- i(r[a]);
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
- N as collectFileFields,
182
+ b as collectFileFields,
183
183
  d as deepClone,
184
- F as evaluateConditional,
185
- b as filterNullCustomFields,
184
+ x as evaluateConditional,
185
+ F as filterNullCustomFields,
186
186
  A as getNestedValue,
187
- x as initializeFormValues,
187
+ w as initializeFormValues,
188
188
  g as isAddonObject,
189
- T as isComponent,
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-0.5!",
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.5!",
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
@@ -3,7 +3,7 @@
3
3
  "private": false,
4
4
  "description": "A Vue 3 UI component library built with Tailwind CSS.",
5
5
  "license": "MIT",
6
- "version": "0.9.4",
6
+ "version": "0.9.6",
7
7
  "type": "module",
8
8
  "main": "index.js",
9
9
  "module": "index.js",
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