vlite3 1.4.28 → 1.4.30

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.
@@ -29,8 +29,8 @@ declare function __VLS_template(): {
29
29
  maxDomElements: number;
30
30
  }> & Omit<{
31
31
  readonly data: any[];
32
- readonly direction: "horizontal" | "vertical";
33
32
  readonly draggable: boolean;
33
+ readonly direction: "horizontal" | "vertical";
34
34
  readonly easing: string;
35
35
  readonly gap: number;
36
36
  readonly pagination: import('vue-carousel-lite').PaginationType | import('vue-carousel-lite').PaginationType[];
@@ -53,7 +53,7 @@ declare function __VLS_template(): {
53
53
  readonly paginationPosition?: import('vue-carousel-lite').PaginationPosition | import('vue-carousel-lite').PaginationPosition[];
54
54
  readonly updateKey?: string | number;
55
55
  readonly "onSlide-change"?: ((index: number) => any) | undefined;
56
- } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "direction" | "draggable" | "easing" | "gap" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements">;
56
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "draggable" | "direction" | "easing" | "gap" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements">;
57
57
  $attrs: {
58
58
  [x: string]: unknown;
59
59
  };
@@ -73,14 +73,14 @@ declare function __VLS_template(): {
73
73
  type: import('vue').PropType<any[]>;
74
74
  required: true;
75
75
  };
76
- direction: {
77
- type: import('vue').PropType<"horizontal" | "vertical">;
78
- default: string;
79
- };
80
76
  draggable: {
81
77
  type: import('vue').PropType<boolean>;
82
78
  default: boolean;
83
79
  };
80
+ direction: {
81
+ type: import('vue').PropType<"horizontal" | "vertical">;
82
+ default: string;
83
+ };
84
84
  easing: {
85
85
  type: import('vue').PropType<string>;
86
86
  default: string;
@@ -254,14 +254,14 @@ declare function __VLS_template(): {
254
254
  type: import('vue').PropType<any[]>;
255
255
  required: true;
256
256
  };
257
- direction: {
258
- type: import('vue').PropType<"horizontal" | "vertical">;
259
- default: string;
260
- };
261
257
  draggable: {
262
258
  type: import('vue').PropType<boolean>;
263
259
  default: boolean;
264
260
  };
261
+ direction: {
262
+ type: import('vue').PropType<"horizontal" | "vertical">;
263
+ default: string;
264
+ };
265
265
  easing: {
266
266
  type: import('vue').PropType<string>;
267
267
  default: string;
@@ -352,7 +352,7 @@ declare function __VLS_template(): {
352
352
  };
353
353
  }>> & Readonly<{
354
354
  "onSlide-change"?: ((index: number) => any) | undefined;
355
- }>, "state" | "focus" | "direction" | "draggable" | "easing" | "gap" | "goNext" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements" | "goToSlide" | "goPrev" | "canGoNext" | "canGoPrev"> & import('vue').ShallowUnwrapRef<{
355
+ }>, "state" | "focus" | "draggable" | "direction" | "easing" | "gap" | "goNext" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements" | "goToSlide" | "goPrev" | "canGoNext" | "canGoPrev"> & import('vue').ShallowUnwrapRef<{
356
356
  goToSlide: (index: number, smooth?: boolean) => void;
357
357
  goNext: (smooth?: boolean) => void;
358
358
  goPrev: (smooth?: boolean) => void;
@@ -392,8 +392,8 @@ declare const __VLS_component: import('vue').DefineComponent<CarouselProps, {
392
392
  "onSlide-change"?: (index: number) => any;
393
393
  }>, {
394
394
  data: any[];
395
- direction: "horizontal" | "vertical";
396
395
  draggable: boolean;
396
+ direction: "horizontal" | "vertical";
397
397
  easing: string;
398
398
  gap: number;
399
399
  pagination: import('./types').PaginationType | import('./types').PaginationType[];
@@ -442,8 +442,8 @@ declare const __VLS_component: import('vue').DefineComponent<CarouselProps, {
442
442
  maxDomElements: number;
443
443
  }> & Omit<{
444
444
  readonly data: any[];
445
- readonly direction: "horizontal" | "vertical";
446
445
  readonly draggable: boolean;
446
+ readonly direction: "horizontal" | "vertical";
447
447
  readonly easing: string;
448
448
  readonly gap: number;
449
449
  readonly pagination: import('vue-carousel-lite').PaginationType | import('vue-carousel-lite').PaginationType[];
@@ -466,7 +466,7 @@ declare const __VLS_component: import('vue').DefineComponent<CarouselProps, {
466
466
  readonly paginationPosition?: import('vue-carousel-lite').PaginationPosition | import('vue-carousel-lite').PaginationPosition[];
467
467
  readonly updateKey?: string | number;
468
468
  readonly "onSlide-change"?: ((index: number) => any) | undefined;
469
- } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "direction" | "draggable" | "easing" | "gap" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements">;
469
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "draggable" | "direction" | "easing" | "gap" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements">;
470
470
  $attrs: {
471
471
  [x: string]: unknown;
472
472
  };
@@ -486,14 +486,14 @@ declare const __VLS_component: import('vue').DefineComponent<CarouselProps, {
486
486
  type: import('vue').PropType<any[]>;
487
487
  required: true;
488
488
  };
489
- direction: {
490
- type: import('vue').PropType<"horizontal" | "vertical">;
491
- default: string;
492
- };
493
489
  draggable: {
494
490
  type: import('vue').PropType<boolean>;
495
491
  default: boolean;
496
492
  };
493
+ direction: {
494
+ type: import('vue').PropType<"horizontal" | "vertical">;
495
+ default: string;
496
+ };
497
497
  easing: {
498
498
  type: import('vue').PropType<string>;
499
499
  default: string;
@@ -667,14 +667,14 @@ declare const __VLS_component: import('vue').DefineComponent<CarouselProps, {
667
667
  type: import('vue').PropType<any[]>;
668
668
  required: true;
669
669
  };
670
- direction: {
671
- type: import('vue').PropType<"horizontal" | "vertical">;
672
- default: string;
673
- };
674
670
  draggable: {
675
671
  type: import('vue').PropType<boolean>;
676
672
  default: boolean;
677
673
  };
674
+ direction: {
675
+ type: import('vue').PropType<"horizontal" | "vertical">;
676
+ default: string;
677
+ };
678
678
  easing: {
679
679
  type: import('vue').PropType<string>;
680
680
  default: string;
@@ -765,7 +765,7 @@ declare const __VLS_component: import('vue').DefineComponent<CarouselProps, {
765
765
  };
766
766
  }>> & Readonly<{
767
767
  "onSlide-change"?: ((index: number) => any) | undefined;
768
- }>, "state" | "focus" | "direction" | "draggable" | "easing" | "gap" | "goNext" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements" | "goToSlide" | "goPrev" | "canGoNext" | "canGoPrev"> & import('vue').ShallowUnwrapRef<{
768
+ }>, "state" | "focus" | "draggable" | "direction" | "easing" | "gap" | "goNext" | "pagination" | "loop" | "speed" | "autoPlay" | "mousewheel" | "autoFocus" | "autoPlayInterval" | "currentItem" | "paginationSize" | "itemsToShow" | "paginationVisibility" | "paginationHoverEdgeThreshold" | "paginationHoverInitialTimeout" | "wheelOptions" | "bufferSize" | "maxDomElements" | "goToSlide" | "goPrev" | "canGoNext" | "canGoPrev"> & import('vue').ShallowUnwrapRef<{
769
769
  goToSlide: (index: number, smooth?: boolean) => void;
770
770
  goNext: (smooth?: boolean) => void;
771
771
  goPrev: (smooth?: boolean) => void;
@@ -4,7 +4,7 @@ import k from "../Icon.vue.js";
4
4
  import { $t as E } from "../../utils/i18n.js";
5
5
  import { useCommandPaletteItems as Y } from "./useCommandPaletteItems.js";
6
6
  import { useCommandPaletteNav as Z } from "./useCommandPaletteNav.js";
7
- import ee from "./CommandPaletteItem.vue2.js";
7
+ import ee from "./CommandPaletteItem.vue.js";
8
8
  const te = { class: "command-palette-content flex flex-col w-full h-full max-h-[70vh]" }, oe = { class: "flex items-center gap-3 px-4 py-3 border-b border-border/80 shrink-0" }, se = ["placeholder"], ne = ["aria-label"], re = {
9
9
  key: 0,
10
10
  class: "flex flex-col items-center justify-center py-14 px-6 text-center select-none",
@@ -1,5 +1,5 @@
1
1
  import t from "./CommandPaletteItem.vue3.js";
2
- /* empty css */
2
+ /* empty css */
3
3
  import o from "../../_virtual/_plugin-vue_export-helper.js";
4
4
  const r = /* @__PURE__ */ o(t, [["__scopeId", "data-v-66b1ae06"]]);
5
5
  export {
@@ -35,11 +35,11 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
35
35
  size: InputSize;
36
36
  rounded: InputRounded;
37
37
  readonly: boolean;
38
+ draggable: boolean;
38
39
  disabled: boolean;
39
40
  layout: "table" | "accordion";
40
41
  isUpdate: boolean;
41
42
  modelValue: Record<string, any>[];
42
- draggable: boolean;
43
43
  errors: Record<string, string>;
44
44
  showRowNumbers: boolean;
45
45
  accordionTitleKey: string;
@@ -0,0 +1,48 @@
1
+ import { GoogleMapClickEvent, GoogleMapCoordinate, GoogleMapError, GoogleMapMarker, GoogleMapMarkerClickEvent, GoogleMapProps, GoogleMapReadyEvent } from '../types/GoogleMap.type';
2
+ declare function __VLS_template(): {
3
+ attrs: Partial<{}>;
4
+ slots: {
5
+ loading?(_: {}): any;
6
+ error?(_: {
7
+ error: GoogleMapError;
8
+ }): any;
9
+ };
10
+ refs: {
11
+ mapElement: HTMLDivElement;
12
+ };
13
+ rootEl: HTMLDivElement;
14
+ };
15
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
16
+ declare const __VLS_component: import('vue').DefineComponent<GoogleMapProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
17
+ error: (error: GoogleMapError) => any;
18
+ click: (event: GoogleMapClickEvent) => any;
19
+ ready: (event: GoogleMapReadyEvent) => any;
20
+ "center-changed": (center: GoogleMapCoordinate) => any;
21
+ "zoom-changed": (zoom: number) => any;
22
+ "marker-click": (event: GoogleMapMarkerClickEvent) => any;
23
+ }, string, import('vue').PublicProps, Readonly<GoogleMapProps> & Readonly<{
24
+ onError?: (error: GoogleMapError) => any;
25
+ onClick?: (event: GoogleMapClickEvent) => any;
26
+ onReady?: (event: GoogleMapReadyEvent) => any;
27
+ "onCenter-changed"?: (center: GoogleMapCoordinate) => any;
28
+ "onZoom-changed"?: (zoom: number) => any;
29
+ "onMarker-click"?: (event: GoogleMapMarkerClickEvent) => any;
30
+ }>, {
31
+ width: string | number;
32
+ height: string | number;
33
+ options: import('..').GoogleMapOptions;
34
+ zoom: number;
35
+ markers: GoogleMapMarker[];
36
+ ariaLabel: string;
37
+ loadingText: string;
38
+ errorText: string;
39
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
40
+ mapElement: HTMLDivElement;
41
+ }, HTMLDivElement>;
42
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
43
+ export default _default;
44
+ type __VLS_WithTemplateSlots<T, S> = T & {
45
+ new (): {
46
+ $slots: S;
47
+ };
48
+ };
@@ -0,0 +1,7 @@
1
+ import o from "./GoogleMap.vue2.js";
2
+ /* empty css */
3
+ import t from "../_virtual/_plugin-vue_export-helper.js";
4
+ const c = /* @__PURE__ */ t(o, [["__scopeId", "data-v-0cfbb6c9"]]);
5
+ export {
6
+ c as default
7
+ };
@@ -0,0 +1,164 @@
1
+ import { defineComponent as P, shallowRef as i, computed as u, watch as f, onMounted as Z, onBeforeUnmount as j, openBlock as h, createElementBlock as k, normalizeStyle as q, createElementVNode as D, renderSlot as N, createTextVNode as S, toDisplayString as c, createCommentVNode as L, markRaw as M, nextTick as H } from "vue";
2
+ import { useVLiteConfig as U } from "../core/config.js";
3
+ import { onGoogleMapsAuthFailure as J, loadGoogleMaps as Q } from "../utils/GoogleMapLoader.js";
4
+ const W = ["aria-label", "aria-busy"], X = {
5
+ key: 0,
6
+ class: "vlite-google-map__state",
7
+ role: "status",
8
+ "aria-live": "polite"
9
+ }, Y = {
10
+ key: 1,
11
+ class: "vlite-google-map__state vlite-google-map__state--error",
12
+ role: "alert"
13
+ }, ee = {
14
+ key: 2,
15
+ class: "vlite-google-map__notice",
16
+ "aria-live": "polite"
17
+ }, oe = /* @__PURE__ */ P({
18
+ __name: "GoogleMap",
19
+ props: {
20
+ apiKey: {},
21
+ center: {},
22
+ markers: { default: () => [] },
23
+ zoom: { default: 12 },
24
+ height: { default: "400px" },
25
+ width: { default: "100%" },
26
+ options: { default: () => ({}) },
27
+ ariaLabel: { default: "Interactive Google map" },
28
+ loadingText: { default: "Loading map…" },
29
+ errorText: { default: "The map is unavailable." }
30
+ },
31
+ emits: ["ready", "click", "center-changed", "zoom-changed", "marker-click", "error"],
32
+ setup(d, { emit: F }) {
33
+ const l = d, n = F, K = U(), v = i(null), a = i(null), o = i(null), y = i([]), w = [], x = [], s = i(!0), r = i(null);
34
+ let b = null, _ = !1;
35
+ const O = J((e) => {
36
+ _ || g(e);
37
+ }), C = u(() => l.apiKey?.trim() || K.components?.googleMap?.apiKey?.trim()), R = u(() => ({
38
+ height: A(l.height),
39
+ width: A(l.width)
40
+ }));
41
+ function A(e) {
42
+ return typeof e == "number" ? `${e}px` : e;
43
+ }
44
+ function E(e) {
45
+ if (!e || typeof e != "object") return !1;
46
+ const t = e;
47
+ return Number.isFinite(t.lat) && Number.isFinite(t.lng) && t.lat >= -90 && t.lat <= 90 && t.lng >= -180 && t.lng <= 180;
48
+ }
49
+ const m = u(
50
+ () => l.markers.filter((e) => E(e))
51
+ ), z = u(() => l.markers.length - m.value.length), p = u(() => E(l.center) ? l.center : m.value[0] ?? null);
52
+ function g(e) {
53
+ r.value = e, s.value = !1, n("error", e);
54
+ }
55
+ function T() {
56
+ x.splice(0).forEach((e) => e.remove()), y.value.forEach((e) => {
57
+ o.value?.maps.event.clearInstanceListeners(e), e.setMap(null);
58
+ }), y.value = [];
59
+ }
60
+ function G() {
61
+ !a.value || !o.value || (T(), y.value = m.value.map((e, t) => {
62
+ const I = M(
63
+ new o.value.maps.Marker({
64
+ map: a.value,
65
+ position: { lat: e.lat, lng: e.lng },
66
+ title: e.title,
67
+ label: e.label
68
+ })
69
+ );
70
+ return x.push(
71
+ I.addListener(
72
+ "click",
73
+ ($) => n("marker-click", { marker: e, index: t, nativeEvent: $ })
74
+ )
75
+ ), I;
76
+ }));
77
+ }
78
+ function V() {
79
+ a.value && w.push(
80
+ a.value.addListener("click", (e) => {
81
+ const t = e?.latLng;
82
+ n("click", {
83
+ coordinate: t ? { lat: t.lat(), lng: t.lng() } : null,
84
+ nativeEvent: e
85
+ });
86
+ }),
87
+ a.value.addListener("center_changed", () => {
88
+ const e = a.value?.getCenter();
89
+ e && n("center-changed", { lat: e.lat(), lng: e.lng() });
90
+ }),
91
+ a.value.addListener("zoom_changed", () => {
92
+ const e = a.value?.getZoom();
93
+ typeof e == "number" && n("zoom-changed", e);
94
+ })
95
+ );
96
+ }
97
+ async function B() {
98
+ if (!C.value) {
99
+ g({ code: "invalid-api-key", message: "A Google Maps API key is required." });
100
+ return;
101
+ }
102
+ if (!p.value) {
103
+ g({
104
+ code: l.center == null ? "invalid-markers" : "invalid-center",
105
+ message: "Provide a valid center or at least one valid marker coordinate."
106
+ });
107
+ return;
108
+ }
109
+ s.value = !0, r.value = null;
110
+ try {
111
+ const e = await Q(C.value);
112
+ if (await H(), _ || !v.value || !p.value) return;
113
+ o.value = M(e), a.value = M(
114
+ new e.maps.Map(v.value, {
115
+ ...l.options,
116
+ center: p.value,
117
+ zoom: l.zoom
118
+ })
119
+ ), V(), G(), s.value = !1, n("ready", { map: a.value }), typeof ResizeObserver < "u" && (b = new ResizeObserver(() => {
120
+ a.value && o.value && o.value.maps.event.trigger(a.value, "resize");
121
+ }), b.observe(v.value));
122
+ } catch (e) {
123
+ const t = e;
124
+ g(
125
+ t?.code ? t : { code: "load-failed", message: "Google Maps could not be initialized.", cause: e }
126
+ );
127
+ }
128
+ }
129
+ return f(p, (e) => {
130
+ e && a.value && a.value.setCenter(e);
131
+ }), f(() => l.zoom, (e) => a.value?.setZoom(e)), f(() => l.options, (e) => a.value?.setOptions(e), {
132
+ deep: !0
133
+ }), f(m, G, { deep: !0 }), Z(B), j(() => {
134
+ _ = !0, O(), b?.disconnect(), T(), w.splice(0).forEach((e) => e.remove()), a.value && o.value?.maps.event.clearInstanceListeners(a.value), a.value = null, o.value = null;
135
+ }), (e, t) => (h(), k("div", {
136
+ class: "vlite-google-map",
137
+ style: q(R.value),
138
+ "aria-label": d.ariaLabel,
139
+ "aria-busy": s.value,
140
+ role: "region"
141
+ }, [
142
+ D("div", {
143
+ ref_key: "mapElement",
144
+ ref: v,
145
+ class: "vlite-google-map__canvas",
146
+ tabindex: "0"
147
+ }, null, 512),
148
+ s.value && !r.value ? (h(), k("div", X, [
149
+ N(e.$slots, "loading", {}, () => [
150
+ S(c(d.loadingText), 1)
151
+ ], !0)
152
+ ])) : L("", !0),
153
+ r.value ? (h(), k("div", Y, [
154
+ N(e.$slots, "error", { error: r.value }, () => [
155
+ S(c(d.errorText) + " " + c(r.value.message), 1)
156
+ ], !0)
157
+ ])) : L("", !0),
158
+ z.value ? (h(), k("p", ee, c(z.value) + " invalid marker" + c(z.value === 1 ? "" : "s") + " omitted. ", 1)) : L("", !0)
159
+ ], 12, W));
160
+ }
161
+ });
162
+ export {
163
+ oe as default
164
+ };
@@ -3,7 +3,7 @@ import L from "./Icon.vue.js";
3
3
  import v from "./Modal.vue.js";
4
4
  import N from "./CommandPalette/CommandPaletteContent.vue.js";
5
5
  import { $t as U } from "../utils/i18n.js";
6
- /* empty css */
6
+ /* empty css */
7
7
  const V = { class: "block truncate -text-fs-1.5" }, S = { class: "ml-auto inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-mono font-medium border border-border/80 bg-background text-muted-foreground ml-1" }, A = /* @__PURE__ */ x({
8
8
  __name: "NavbarCommandPalette",
9
9
  props: {
@@ -33,9 +33,9 @@ declare const __VLS_component: import('vue').DefineComponent<WorkbookProps, {},
33
33
  }>, {
34
34
  variant: "chrome" | "folder" | "simple" | "card";
35
35
  itemClass: string;
36
+ draggable: boolean;
36
37
  modelValue: string;
37
38
  editable: boolean;
38
- draggable: boolean;
39
39
  confirmDelete: boolean;
40
40
  allowIconChange: boolean;
41
41
  activeItemClass: string;
package/core/config.d.ts CHANGED
@@ -38,6 +38,9 @@ export declare const configState: {
38
38
  datetime?: {
39
39
  format?: string;
40
40
  };
41
+ googleMap?: {
42
+ apiKey?: string;
43
+ };
41
44
  empty?: {
42
45
  variant?: import('..').EmptyVariant;
43
46
  };
@@ -217,6 +220,9 @@ export declare function useVLiteConfig(): {
217
220
  datetime?: {
218
221
  format?: string;
219
222
  };
223
+ googleMap?: {
224
+ apiKey?: string;
225
+ };
220
226
  empty?: {
221
227
  variant?: import('..').EmptyVariant;
222
228
  };
package/core/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { configState as t, VLITE_CONFIG_KEY as s } from "./config.js";
2
- import { updateConfig as i, useVLiteConfig as r } from "./config.js";
3
- function n(e = {}) {
1
+ import { configState as t, VLITE_CONFIG_KEY as m } from "./config.js";
2
+ import { updateConfig as p, useVLiteConfig as i } from "./config.js";
3
+ function c(e = {}) {
4
4
  return {
5
- install(m) {
5
+ install(o) {
6
6
  e && (e.services && (t.services = { ...t.services, ...e.services }), e.importData && (t.importData = { ...t.importData, ...e.importData }), e.exportData && (t.exportData = { ...t.exportData, ...e.exportData }), e.components && (t.components = {
7
7
  ...t.components,
8
8
  ...e.components,
@@ -18,6 +18,10 @@ function n(e = {}) {
18
18
  ...t.components?.datetime || {},
19
19
  ...e.components.datetime || {}
20
20
  },
21
+ googleMap: {
22
+ ...t.components?.googleMap || {},
23
+ ...e.components.googleMap || {}
24
+ },
21
25
  empty: {
22
26
  ...t.components?.empty || {},
23
27
  ...e.components.empty || {}
@@ -42,14 +46,14 @@ function n(e = {}) {
42
46
  ...t.components?.invoice || {},
43
47
  ...e.components.invoice || {}
44
48
  }
45
- })), m.provide(s, t), m.config.globalProperties.$vlite = t;
49
+ })), o.provide(m, t), o.config.globalProperties.$vlite = t;
46
50
  }
47
51
  };
48
52
  }
49
53
  export {
50
- s as VLITE_CONFIG_KEY,
54
+ m as VLITE_CONFIG_KEY,
51
55
  t as configState,
52
- n as createVLite,
53
- i as updateConfig,
54
- r as useVLiteConfig
56
+ c as createVLite,
57
+ p as updateConfig,
58
+ i as useVLiteConfig
55
59
  };
package/index.d.ts CHANGED
@@ -94,6 +94,7 @@ export { default as ButtonGroup } from './components/ButtonGroup.vue';
94
94
  export { default as NumberInput } from './components/NumberInput.vue';
95
95
  export { default as ThemeToggle } from './components/ThemeToggle.vue';
96
96
  export { default as GoogleLogin } from './components/GoogleLogin.vue';
97
+ export { default as GoogleMap } from './components/GoogleMap.vue';
97
98
  export { default as ColorPicker } from './components/ColorPicker/ColorPicker.vue';
98
99
  export { default as ConfirmationModal } from './components/ConfirmationModal.vue';
99
100
  export { default as ToastNotification } from './components/ToastNotification.vue';
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { default as p } from "vue3-google-signin";
2
2
  import { deepMerge as u } from "./utils/object.js";
3
- import { camelCase as x, capitalize as i, copyToClipboard as n, debounce as c, delay as C, downloadFile as S, flattenArray as T, formatAmPm as g, formatCurrency as h, formatDate as I, formatNumber as b, formatSchedule as P, getDefaultDateRange as v, getNextMonth as y, getNextYear as D, getPrevMonth as E, getPrevYear as F, getToday as A, getTomorrow as B, getUniqueId as R, getUpcoming as k, getYear as N, getYesterday as L, isAppleDevice as M, isEmpty as O, isPureTimeString as w, isValidTimeRange as _, parseDateTime as G, randomNumber as K, removeExtraProperties as Y, slugify as H, throttle as z, toISO as U, toLocalISO as V, truncate as X } from "./utils/functions.js";
3
+ import { camelCase as x, capitalize as i, copyToClipboard as n, debounce as c, delay as C, downloadFile as S, flattenArray as T, formatAmPm as g, formatCurrency as h, formatDate as I, formatNumber as b, formatSchedule as P, getDefaultDateRange as v, getNextMonth as y, getNextYear as D, getPrevMonth as E, getPrevYear as F, getToday as A, getTomorrow as B, getUniqueId as R, getUpcoming as k, getYear as M, getYesterday as N, isAppleDevice as L, isEmpty as O, isPureTimeString as w, isValidTimeRange as G, parseDateTime as _, randomNumber as K, removeExtraProperties as Y, slugify as H, throttle as z, toISO as U, toLocalISO as V, truncate as X } from "./utils/functions.js";
4
4
  import { lazySearch as W, resetSearchIndex as j, search as q } from "./utils/search.util.js";
5
5
  import { env as J } from "./utils/env.js";
6
6
  import { $t as ee, resolveI18nText as oe } from "./utils/i18n.js";
@@ -19,10 +19,10 @@ import { default as Ee } from "./components/Stats/Stats.vue.js";
19
19
  /* empty css */
20
20
  import { default as Ae } from "./components/Kanban/Kanban.vue.js";
21
21
  import { default as Re } from "./components/Kanban/KanbanBoard.vue.js";
22
- import { useKanbanBoard as Ne } from "./components/Kanban/useKanbanBoard.js";
23
- import { default as Me } from "./components/Navbar/Navbar.vue.js";
22
+ import { useKanbanBoard as Me } from "./components/Kanban/useKanbanBoard.js";
23
+ import { default as Le } from "./components/Navbar/Navbar.vue.js";
24
24
  import { default as we } from "./components/Navbar/NavbarItem.vue.js";
25
- import { default as Ge } from "./components/Navbar/NavbarGroup.vue.js";
25
+ import { default as _e } from "./components/Navbar/NavbarGroup.vue.js";
26
26
  import { default as Ye } from "./components/Navbar/NavbarTabs.vue.js";
27
27
  /* empty css */
28
28
  import { default as ze } from "./components/QRCode/QRCode.vue.js";
@@ -43,10 +43,10 @@ import { default as To } from "./components/Cart/CartCouponInput.vue.js";
43
43
  import { default as ho } from "./components/Cart/CartEmptyState.vue.js";
44
44
  import { useCart as bo } from "./components/Cart/composables/useCart.js";
45
45
  import { calculateCartTotals as vo, computeCouponDiscount as yo, computeShipping as Do, computeTax as Eo, sumItemCount as Fo, sumLineTotals as Ao, sumSavings as Bo, useCartCalculation as Ro } from "./components/Cart/composables/useCartCalculation.js";
46
- import { default as No } from "./components/Dropdown/Dropdown.vue.js";
47
- import { default as Mo } from "./components/Dropdown/DropdownMenu.vue.js";
46
+ import { default as Mo } from "./components/Dropdown/Dropdown.vue.js";
47
+ import { default as Lo } from "./components/Dropdown/DropdownMenu.vue.js";
48
48
  import { default as wo } from "./components/Dropdown/DropdownTrigger.vue.js";
49
- import { default as Go } from "./components/Dropdown/DropdownItem.vue.js";
49
+ import { default as _o } from "./components/Dropdown/DropdownItem.vue.js";
50
50
  import { useDropdownSelection as Yo } from "./components/Dropdown/composables/useDropdownSelection.js";
51
51
  import { useDropdownIds as zo } from "./components/Dropdown/composables/useDropdownIds.js";
52
52
  import { default as Vo } from "./components/Breadcrumb/Breadcrumb.vue.js";
@@ -71,9 +71,9 @@ import { default as Dr } from "./components/Comment/CommentThread.vue.js";
71
71
  import { default as Fr } from "./components/Comment/CommentEditor.vue.js";
72
72
  import { default as Br } from "./components/Accordion/Accordion.vue.js";
73
73
  import { default as kr } from "./components/Accordion/AccordionItem.vue.js";
74
- import { default as Lr } from "./components/Accordion/AccordionTrigger.vue.js";
74
+ import { default as Nr } from "./components/Accordion/AccordionTrigger.vue.js";
75
75
  import { default as Or } from "./components/Accordion/AccordionContent.vue.js";
76
- import { default as _r } from "./components/ChoiceBox/ChoiceBox.vue.js";
76
+ import { default as Gr } from "./components/ChoiceBox/ChoiceBox.vue.js";
77
77
  import { default as Kr } from "./components/DataTable/DataTable.vue.js";
78
78
  import { default as Hr } from "./components/DataTable/DataTableHeader.vue.js";
79
79
  import { default as Ur } from "./components/DataTable/DataTableRow.vue.js";
@@ -99,8 +99,8 @@ import { default as yt } from "./components/PermissionMatrix/PermissionEditor.vu
99
99
  import { useAdvancedKeyStroke as Et, useKeyStroke as Ft } from "./composables/useKeyStroke.js";
100
100
  import { vScrollReveal as Bt } from "./directives/vScrollReveal.js";
101
101
  import { default as kt } from "./components/AvatarUploader/AvatarUploader.vue.js";
102
- import { default as Lt } from "./components/AvatarGroup/AvatarGroup.vue.js";
103
- import { configure as Ot, pauseTimers as wt, removeToast as _t, resumeTimers as Gt, showToast as Kt, toast as Yt, useNotifications as Ht } from "./composables/useNotifications.js";
102
+ import { default as Nt } from "./components/AvatarGroup/AvatarGroup.vue.js";
103
+ import { configure as Ot, pauseTimers as wt, removeToast as Gt, resumeTimers as _t, showToast as Kt, toast as Yt, useNotifications as Ht } from "./composables/useNotifications.js";
104
104
  import { default as Ut } from "./components/Timeline/Timeline.vue.js";
105
105
  import { default as Xt } from "./components/Timeline/TimelineItem.vue.js";
106
106
  import { default as Wt } from "./components/Timeline/TimelineIndicator.vue.js";
@@ -122,9 +122,9 @@ import { snapshotBones as va } from "./components/Skeleton/extract.js";
122
122
  import { configureSkeleton as Da, getGlobalConfig as Ea, registerBones as Fa } from "./components/Skeleton/shared.js";
123
123
  import { default as Ba } from "./components/Chart/LineChart.vue.js";
124
124
  import { default as ka } from "./components/Chart/BarChart.vue.js";
125
- import { default as La } from "./components/Chart/PieChart.vue.js";
125
+ import { default as Na } from "./components/Chart/PieChart.vue.js";
126
126
  import { default as Oa } from "./components/Chart/CircleChart.vue.js";
127
- import { default as _a } from "./components/Chart/GaugeChart.vue.js";
127
+ import { default as Ga } from "./components/Chart/GaugeChart.vue.js";
128
128
  import { default as Ka } from "./components/Chart/SpeedometerChart.vue.js";
129
129
  import { default as Ha } from "./components/Chart/TimelineChart.vue.js";
130
130
  import { default as Ua } from "./components/Chart/SegmentBarChart.vue.js";
@@ -145,10 +145,10 @@ import { noopSeoAdapter as If, normalizeSeo as bf, replaceSeoTokens as Pf } from
145
145
  import { createDomSeoAdapter as yf } from "./components/SeoProvider/domAdapter.js";
146
146
  import { default as Ef } from "./components/ScaleGenerator/ScaleGenerator.vue.js";
147
147
  import { THEME_STYLES_KEY as Af, useThemeStyles as Bf } from "./composables/useThemeStyles.js";
148
- import { SEO_CONTEXT_KEY as kf, useSeo as Nf } from "./composables/useSeo.js";
149
- import { default as Mf } from "./components/Icon.vue.js";
148
+ import { SEO_CONTEXT_KEY as kf, useSeo as Mf } from "./composables/useSeo.js";
149
+ import { default as Lf } from "./components/Icon.vue.js";
150
150
  import { default as wf } from "./components/Logo.vue.js";
151
- import { default as Gf } from "./components/Alert.vue.js";
151
+ import { default as _f } from "./components/Alert.vue.js";
152
152
  import { default as Yf } from "./components/Badge.vue.js";
153
153
  import { default as zf } from "./components/Input.vue.js";
154
154
  /* empty css */
@@ -173,33 +173,34 @@ import { default as ym } from "./components/IconPicker.vue.js";
173
173
  import { default as Em } from "./components/ButtonGroup.vue.js";
174
174
  import { default as Am } from "./components/NumberInput.vue.js";
175
175
  import { default as Rm } from "./components/ThemeToggle.vue.js";
176
- import { default as Nm } from "./components/GoogleLogin.vue.js";
177
- import { default as Mm } from "./components/ColorPicker/ColorPicker.vue.js";
178
- import { default as wm } from "./components/ConfirmationModal.vue.js";
179
- import { default as Gm } from "./components/ToastNotification.vue.js";
180
- import { default as Ym } from "./components/CommandPalette/CommandPaletteContent.vue.js";
181
- import { default as zm } from "./components/NavbarCommandPalette.vue.js";
182
- import { default as Vm } from "./components/DateRangePicker.vue.js";
183
- import { createVLite as Qm } from "./core/index.js";
184
- import { default as jm } from "./components/StatusChip/StatusChip.vue.js";
185
- import { STATUS_MAP as $m, normalizeStatus as Jm, resolveStatus as Zm } from "./components/StatusChip/status-map.js";
186
- import { default as ol } from "./components/Price/Price.vue.js";
187
- import { default as tl } from "./components/DateTime/DateTime.vue.js";
188
- import { default as fl } from "./components/Clock/Clock.vue.js";
189
- import { default as ll } from "./components/Chat/ChatInterface.vue.js";
190
- import { VLITE_CONFIG_KEY as sl, configState as ul, updateConfig as dl, useVLiteConfig as xl } from "./core/config.js";
191
- import { getStatusColorClass as nl } from "./utils/status.js";
176
+ import { default as Mm } from "./components/GoogleLogin.vue.js";
177
+ import { default as Lm } from "./components/GoogleMap.vue.js";
178
+ import { default as wm } from "./components/ColorPicker/ColorPicker.vue.js";
179
+ import { default as _m } from "./components/ConfirmationModal.vue.js";
180
+ import { default as Ym } from "./components/ToastNotification.vue.js";
181
+ import { default as zm } from "./components/CommandPalette/CommandPaletteContent.vue.js";
182
+ import { default as Vm } from "./components/NavbarCommandPalette.vue.js";
183
+ import { default as Qm } from "./components/DateRangePicker.vue.js";
184
+ import { createVLite as jm } from "./core/index.js";
185
+ import { default as $m } from "./components/StatusChip/StatusChip.vue.js";
186
+ import { STATUS_MAP as Zm, normalizeStatus as el, resolveStatus as ol } from "./components/StatusChip/status-map.js";
187
+ import { default as tl } from "./components/Price/Price.vue.js";
188
+ import { default as fl } from "./components/DateTime/DateTime.vue.js";
189
+ import { default as ll } from "./components/Clock/Clock.vue.js";
190
+ import { default as sl } from "./components/Chat/ChatInterface.vue.js";
191
+ import { VLITE_CONFIG_KEY as dl, configState as xl, updateConfig as il, useVLiteConfig as nl } from "./core/config.js";
192
+ import { getStatusColorClass as Cl } from "./utils/status.js";
192
193
  export {
193
194
  ee as $t,
194
195
  Br as Accordion,
195
196
  Or as AccordionContent,
196
197
  kr as AccordionItem,
197
- Lr as AccordionTrigger,
198
- Gf as Alert,
198
+ Nr as AccordionTrigger,
199
+ _f as Alert,
199
200
  ef as AppShell,
200
201
  Jt as AttachmentsList,
201
202
  jf as Avatar,
202
- Lt as AvatarGroup,
203
+ Nt as AvatarGroup,
203
204
  kt as AvatarUploader,
204
205
  om as BackButton,
205
206
  Yf as Badge,
@@ -220,19 +221,19 @@ export {
220
221
  pa as CategoryManager,
221
222
  ua as CategoryMenu,
222
223
  Ja as ChartLegend,
223
- ll as ChatInterface,
224
+ sl as ChatInterface,
224
225
  dm as CheckBox,
225
226
  se as Chip,
226
- _r as ChoiceBox,
227
+ Gr as ChoiceBox,
227
228
  Oa as CircleChart,
228
229
  tm as Clipboard,
229
- fl as Clock,
230
- Mm as ColorPicker,
231
- Ym as CommandPaletteContent,
230
+ ll as Clock,
231
+ wm as ColorPicker,
232
+ zm as CommandPaletteContent,
232
233
  Fr as CommentEditor,
233
234
  vr as CommentItem,
234
235
  Dr as CommentThread,
235
- wm as ConfirmationModal,
236
+ _m as ConfirmationModal,
236
237
  Se as CustomFields,
237
238
  ra as CustomFieldsDisplay,
238
239
  nr as DataList,
@@ -240,11 +241,11 @@ export {
240
241
  Hr as DataTableHeader,
241
242
  Ur as DataTableRow,
242
243
  Pm as DatePicker,
243
- Vm as DateRangePicker,
244
- tl as DateTime,
245
- No as Dropdown,
246
- Go as DropdownItem,
247
- Mo as DropdownMenu,
244
+ Qm as DateRangePicker,
245
+ fl as DateTime,
246
+ Mo as Dropdown,
247
+ _o as DropdownItem,
248
+ Lo as DropdownMenu,
248
249
  wo as DropdownTrigger,
249
250
  br as Empty,
250
251
  ft as ExportData,
@@ -259,11 +260,12 @@ export {
259
260
  ce as FormFields,
260
261
  ge as FormSkeleton,
261
262
  qa as GanttChart,
262
- _a as GaugeChart,
263
- Nm as GoogleLogin,
263
+ Ga as GaugeChart,
264
+ Mm as GoogleLogin,
265
+ Lm as GoogleMap,
264
266
  p as GoogleSignInPlugin,
265
267
  $e as Heatmap,
266
- Mf as Icon,
268
+ Lf as Icon,
267
269
  ym as IconPicker,
268
270
  pf as ImageComparison,
269
271
  uf as ImageMagnifier,
@@ -282,9 +284,9 @@ export {
282
284
  Ze as Masonry,
283
285
  Qf as Modal,
284
286
  st as MultiSelect,
285
- Me as Navbar,
286
- zm as NavbarCommandPalette,
287
- Ge as NavbarGroup,
287
+ Le as Navbar,
288
+ Vm as NavbarCommandPalette,
289
+ _e as NavbarGroup,
288
290
  we as NavbarItem,
289
291
  Ye as NavbarTabs,
290
292
  Am as NumberInput,
@@ -293,8 +295,8 @@ export {
293
295
  yt as PermissionEditor,
294
296
  Pt as PermissionMatrix,
295
297
  $f as Persona,
296
- La as PieChart,
297
- ol as Price,
298
+ Na as PieChart,
299
+ tl as Price,
298
300
  it as PricingPlan,
299
301
  ct as PricingPlanItem,
300
302
  It as ProgressBar,
@@ -308,7 +310,7 @@ export {
308
310
  tr as RichTextReader,
309
311
  Xr as SCREEN_CONTEXT_KEY,
310
312
  kf as SEO_CONTEXT_KEY,
311
- $m as STATUS_MAP,
313
+ Zm as STATUS_MAP,
312
314
  Ef as ScaleGenerator,
313
315
  Ve as Screen,
314
316
  Qe as ScreenFilter,
@@ -326,7 +328,7 @@ export {
326
328
  Wr as Splitter,
327
329
  Xa as StatCardChart,
328
330
  Ee as Stats,
329
- jm as StatusChip,
331
+ $m as StatusChip,
330
332
  lm as Switch,
331
333
  Af as THEME_STYLES_KEY,
332
334
  ye as Tabes,
@@ -339,9 +341,9 @@ export {
339
341
  Ha as TimelineChart,
340
342
  Wt as TimelineIndicator,
341
343
  Xt as TimelineItem,
342
- Gm as ToastNotification,
344
+ Ym as ToastNotification,
343
345
  sm as Tooltip,
344
- sl as VLITE_CONFIG_KEY,
346
+ dl as VLITE_CONFIG_KEY,
345
347
  Wa as WaffleChart,
346
348
  ur as Workbook,
347
349
  lo as barcodesConstants,
@@ -354,13 +356,13 @@ export {
354
356
  yo as computeCouponDiscount,
355
357
  Do as computeShipping,
356
358
  Eo as computeTax,
357
- ul as configState,
359
+ xl as configState,
358
360
  Ot as configure,
359
361
  Da as configureSkeleton,
360
362
  n as copyToClipboard,
361
363
  mf as createAsyncSelect,
362
364
  yf as createDomSeoAdapter,
363
- Qm as createVLite,
365
+ jm as createVLite,
364
366
  c as debounce,
365
367
  u as deepMerge,
366
368
  C as delay,
@@ -381,38 +383,38 @@ export {
381
383
  hr as getObjectValue,
382
384
  E as getPrevMonth,
383
385
  F as getPrevYear,
384
- nl as getStatusColorClass,
386
+ Cl as getStatusColorClass,
385
387
  A as getToday,
386
388
  B as getTomorrow,
387
389
  R as getUniqueId,
388
390
  k as getUpcoming,
389
- N as getYear,
390
- L as getYesterday,
391
+ M as getYear,
392
+ N as getYesterday,
391
393
  fe as hexToHSL,
392
394
  Jr as initializeTheme,
393
- M as isAppleDevice,
395
+ L as isAppleDevice,
394
396
  me as isDarkColor,
395
397
  O as isEmpty,
396
398
  w as isPureTimeString,
397
- _ as isValidTimeRange,
399
+ G as isValidTimeRange,
398
400
  W as lazySearch,
399
401
  le as mixColorHex,
400
402
  If as noopSeoAdapter,
401
403
  ba as normalizeBone,
402
404
  bf as normalizeSeo,
403
- Jm as normalizeStatus,
404
- G as parseDateTime,
405
+ el as normalizeStatus,
406
+ _ as parseDateTime,
405
407
  wt as pauseTimers,
406
408
  K as randomNumber,
407
409
  Fa as registerBones,
408
410
  Y as removeExtraProperties,
409
- _t as removeToast,
411
+ Gt as removeToast,
410
412
  Pf as replaceSeoTokens,
411
413
  j as resetSearchIndex,
412
414
  oe as resolveI18nText,
413
415
  mr as resolveRichTextTools,
414
- Zm as resolveStatus,
415
- Gt as resumeTimers,
416
+ ol as resolveStatus,
417
+ _t as resumeTimers,
416
418
  q as search,
417
419
  Kt as showToast,
418
420
  H as slugify,
@@ -425,7 +427,7 @@ export {
425
427
  V as toLocalISO,
426
428
  Yt as toast,
427
429
  X as truncate,
428
- dl as updateConfig,
430
+ il as updateConfig,
429
431
  Et as useAdvancedKeyStroke,
430
432
  bo as useCart,
431
433
  Ro as useCartCalculation,
@@ -433,14 +435,14 @@ export {
433
435
  Yo as useDropdownSelection,
434
436
  Pe as useFileUpload,
435
437
  Ie as useForm,
436
- Ne as useKanbanBoard,
438
+ Me as useKanbanBoard,
437
439
  Ft as useKeyStroke,
438
440
  dt as useMultiSelectHydration,
439
441
  Ht as useNotifications,
440
- Nf as useSeo,
442
+ Mf as useSeo,
441
443
  Zr as useTheme,
442
444
  Bf as useThemeStyles,
443
445
  Zo as useTreeSelection,
444
- xl as useVLiteConfig,
446
+ nl as useVLiteConfig,
445
447
  Bt as vScrollReveal
446
448
  };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "private": false,
4
4
  "description": "A Vue 3 UI component library built with Tailwind CSS.",
5
5
  "license": "MIT",
6
- "version": "1.4.28",
6
+ "version": "1.4.30",
7
7
  "type": "module",
8
8
  "main": "index.js",
9
9
  "module": "index.js",
package/style.css CHANGED
@@ -1797,5 +1797,5 @@ html {
1797
1797
  }
1798
1798
 
1799
1799
  /* --- Vite Generated CSS --- */
1800
- input[data-v-ea76c92c]::-webkit-outer-spin-button,input[data-v-ea76c92c]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number][data-v-ea76c92c]{-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}.vl-thumbnail-selector__filepicker-inline[data-v-470fec5b]{display:contents}.vl-thumbnail-selector__card:hover .vl-thumbnail-selector__delete[data-v-470fec5b],.vl-thumbnail-selector__card:hover .vl-thumbnail-selector__drag-handle[data-v-470fec5b]{opacity:1}.vl-thumbnail-selector__card[data-v-470fec5b]:not(.border-primary):hover{border-color:color-mix(in sRGB,var(--color-primary, currentColor) 40%,transparent)}.mega-menu-grid[data-v-512aa158]{display:grid;grid-template-columns:repeat(var(--mega-cols, 3),minmax(0,1fr))}@media(max-width:768px){.mega-menu-grid[data-v-512aa158]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:480px){.mega-menu-grid[data-v-512aa158]{grid-template-columns:1fr}}.dropdown-menu[data-v-173c7a02]{will-change:transform;contain:layout style}.v-modal-overlay[data-v-208854bc]{background-color:#00000085}.v-modal-backdrop[data-v-208854bc]{transform:translateZ(0)}.modal-dialog-enter-active[data-v-208854bc]{transition:opacity 80ms ease-out}.modal-dialog-leave-active[data-v-208854bc]{transition:opacity .12s ease-in}.modal-dialog-enter-from[data-v-208854bc],.modal-dialog-leave-to[data-v-208854bc]{opacity:0}.modal-body[data-v-208854bc]{will-change:opacity;contain:layout style}.blink-bg[data-v-208854bc]{animation:blink-animation-208854bc 1s infinite}@keyframes blink-animation-208854bc{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}}[data-v-a8f85730] .date-picker-content.dates{min-height:245px}.IroBox{border-radius:8px!important}.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}.custom-fields-table[data-v-0138ffcc]{will-change:transform;contain:layout style}.custom-fields-table[data-v-0138ffcc] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-0138ffcc] input,.custom-fields-table[data-v-0138ffcc] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-0138ffcc] input,.custom-fields-table[data-v-0138ffcc] textarea,.custom-fields-table[data-v-0138ffcc] select,.custom-fields-table[data-v-0138ffcc] .input-wrapper,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger button,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger>div{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-0138ffcc] input:focus,.custom-fields-table[data-v-0138ffcc] textarea:focus,.custom-fields-table[data-v-0138ffcc] select:focus,.custom-fields-table[data-v-0138ffcc] .input-wrapper:focus-within,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger button:focus,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger>div:focus,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger>div: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-0138ffcc] .w-full{width:100%;height:100%}.custom-fields-table[data-v-0138ffcc] .vl-file-picker{height:100%!important;min-height:40px;padding:0;min-width:0!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input>.relative{height:100%;min-width:0}.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input [role=button]{height:100%!important;min-height:40px!important;border:none!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;padding-left:.75rem!important;padding-right:2.5rem!important;min-width:0!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input [role=button]:focus,.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input [role=button]:focus-visible{background-color:hsla(var(--primary) / .03)!important;box-shadow:inset 0 0 0 2px hsla(var(--primary) / .1)!important;outline:none!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__dropzone{min-height:96px;padding:1rem;border-radius:.5rem!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file{min-height:72px;border-radius:.5rem!important;background:hsl(var(--background))!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file input{height:auto!important;min-height:0;padding:.125rem .25rem!important;border-bottom:1px solid transparent!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file input:hover{border-bottom-color:hsl(var(--border))!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file input:focus{background-color:transparent!important;border-bottom-color:hsl(var(--primary))!important;box-shadow:none!important}.list-enter-active[data-v-0138ffcc]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-0138ffcc]{opacity:0;transform:translateY(-5px)}:where(.rte-editor,.rte-reader) h1{display:block;font-size:1.5rem!important;font-weight:700!important;margin:.5em 0 .2em!important;line-height:1.3}:where(.rte-editor,.rte-reader) h2{display:block;font-size:1.2rem!important;font-weight:600!important;margin:.45em 0 .2em!important;line-height:1.35}:where(.rte-editor,.rte-reader) p{display:block;margin:.2em 0!important}:where(.rte-editor,.rte-reader) div{margin:.1em 0}:where(.rte-editor,.rte-reader) blockquote{display:block;border-left:3px solid var(--color-primary);margin:.6em 0!important;padding:.35em 1em!important;color:var(--color-muted-foreground);font-style:italic;background:color-mix(in oklab,var(--color-primary) 6%,transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0}:where(.rte-editor,.rte-reader) ul{display:block!important;list-style-type:disc!important;list-style-position:inside!important;padding-left:1.6em!important;margin:.35em 0!important}:where(.rte-editor,.rte-reader) ol{display:block!important;list-style-type:decimal!important;list-style-position:inside!important;padding-left:1.6em!important;margin:.35em 0!important}:where(.rte-editor,.rte-reader) li{display:list-item!important;margin:.15em 0!important;padding-left:.15em}:where(.rte-editor,.rte-reader) ul ul,:where(.rte-editor,.rte-reader) ol ul{list-style-type:circle!important}:where(.rte-editor,.rte-reader) ul ul ul,:where(.rte-editor,.rte-reader) ol ol ul{list-style-type:square!important}:where(.rte-editor,.rte-reader) ol ol{list-style-type:lower-alpha!important}:where(.rte-editor,.rte-reader) ol ol ol{list-style-type:lower-roman!important}:where(.rte-editor,.rte-reader) hr{display:block!important;border:0!important;border-top:1px solid var(--color-border)!important;margin:1.5em 0!important}:where(.rte-editor,.rte-reader) a{color:var(--color-info);text-decoration:underline;text-underline-offset:2px;cursor:pointer;transition:color .12s ease}:where(.rte-editor,.rte-reader) a:hover{color:var(--color-info-dark, var(--color-info));text-decoration-thickness:2px}:where(.rte-editor,.rte-reader) code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85em;background:var(--color-muted);color:var(--color-foreground);padding:.2em .4em;border-radius:var(--radius-sm);border:none}:where(.rte-editor,.rte-reader) img{max-width:100%;height:auto;border-radius:var(--radius-sm);margin:1em 0;display:block;box-shadow:0 0 0 1px var(--color-border);transition:filter .2s,opacity .2s}.rte-editor img.rte-image-uploading{opacity:.6;filter:grayscale(100%) blur(2px);cursor:wait}:where(.rte-editor,.rte-reader) strong,:where(.rte-editor,.rte-reader) b{font-weight:700!important}:where(.rte-editor,.rte-reader) em,:where(.rte-editor,.rte-reader) i{font-style:italic!important}:where(.rte-editor,.rte-reader) u{text-decoration:underline!important;text-decoration-thickness:1.5px;text-underline-offset:2px}:where(.rte-editor,.rte-reader) s,:where(.rte-editor,.rte-reader) strike{text-decoration:line-through!important}.rte-editor ::selection{background:color-mix(in oklab,var(--color-primary) 22%,transparent)}.rte-toolbar{display:flex;flex-wrap:wrap;padding:6px 8px;gap:2px;border-bottom:1px solid var(--color-border);background:var(--color-background);border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0;align-items:center}.rte-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--color-muted-foreground);cursor:pointer;transition:all .1s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.rte-btn:hover:not(:disabled){background:var(--color-accent);color:var(--color-foreground)}.rte-btn--active{background:var(--color-accent);color:var(--color-foreground)}.rte-btn--text{font-size:.75rem;font-weight:700;width:auto;min-width:28px;padding:0 6px}.rte-icon{width:1.1rem;height:1.1rem;stroke-width:2.5}.rte-btn:disabled{opacity:.38;cursor:not-allowed;pointer-events:none}.rte-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.rte-sep{width:1px;height:18px;background:var(--color-border);margin:0 3px;flex-shrink:0}.rte-link-popover{position:absolute;top:0;left:0;z-index:60;width:300px;max-width:min(300px,calc(100vw - 24px));background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:0 2px 4px #0000000f,0 8px 24px #0000001a;padding:8px;display:flex;flex-direction:column;gap:6px;will-change:transform,opacity}.rte-link-input-row{display:flex;align-items:center;gap:6px;background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:0 8px;transition:border-color .15s ease,box-shadow .15s ease}.rte-link-input-row:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in oklab,var(--color-primary) 12%,transparent)}.rte-link-icon-prefix{width:.875rem;height:.875rem;color:var(--color-muted-foreground);flex-shrink:0}.rte-link-input{flex:1;background:transparent;border:none;outline:none;font-size:.8rem;color:var(--color-foreground);padding:7px 0;min-width:0;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace}.rte-link-input::placeholder{color:var(--color-muted-foreground);font-family:inherit}.rte-link-actions-row{display:flex;align-items:center;gap:3px}.rte-link-action-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:none;border-radius:var(--radius-sm);background:transparent;font-size:.75rem;font-weight:500;cursor:pointer;color:var(--color-muted-foreground);transition:background .12s ease,color .12s ease}.rte-link-action-btn:hover{background:var(--color-accent);color:var(--color-foreground)}.rte-link-action-btn--danger{color:var(--color-destructive)}.rte-link-action-btn--danger:hover{background:color-mix(in oklab,var(--color-destructive) 10%,transparent);color:var(--color-destructive)}.rte-link-apply-btn{background:var(--color-primary);color:var(--color-primary-foreground);width:24px;height:24px;padding:4px;cursor:pointer}.rte-link-apply-btn:disabled{opacity:.5;cursor:not-allowed}.rte-link-apply-btn:hover:not(:disabled){background:color-mix(in oklab,var(--color-primary) 88%,var(--color-primary-foreground));color:var(--color-primary-foreground)}.rte-root{display:flex;flex-direction:column;gap:6px;width:100%}.rte-label{font-size:.825rem;font-weight:500;color:var(--color-foreground);margin-bottom:2px}.rte-wrapper{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--radius);position:relative;transition:border-color .15s ease,box-shadow .15s ease;display:flex;flex-direction:column}.rte-root.rte-focused .rte-wrapper{border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in oklab,var(--color-primary) 12%,transparent)}.rte-root.rte-disabled .rte-wrapper{background:var(--color-muted);opacity:.6}.rte-root.rte-error .rte-wrapper{border-color:var(--color-destructive)}.rte-root.rte-error.rte-focused .rte-wrapper{box-shadow:0 0 0 2px color-mix(in oklab,var(--color-destructive) 15%,transparent)}.rte-body-wrap{position:relative;overflow:visible}.rte-editor{outline:none;padding:14px 16px;color:var(--color-foreground);font-size:.9rem;line-height:1.7;width:100%;box-sizing:border-box;overflow-y:auto;border-radius:0 0 var(--radius) var(--radius);word-break:break-word;overflow-wrap:break-word;will-change:transform;contain:layout style}.rte-editor[contenteditable=true]{caret-color:var(--color-primary)}.rte-placeholder{position:absolute;top:14px;left:16px;color:var(--color-muted-foreground);font-size:.9rem;pointer-events:none;-webkit-user-select:none;user-select:none;line-height:1.7}.rte-error-msg{font-size:.78rem;color:var(--color-destructive);margin:0;line-height:1.4}.form-field-item[data-v-d4db8f9b]{display:flex;flex-direction:column;min-width:0}.form-field-item[data-v-d4db8f9b]:has([role=checkbox]){flex-direction:row;align-items:center;justify-content:flex-start}.form-container[data-v-b84399b6]{width:100%}[data-tabes][data-v-2e086e79]:not(.inline-flex):not([class*=gap-6])>:where(button,a,[role=tab]){flex:1 0 0%;min-width:max-content}.scrollbar-hide[data-v-2e086e79]{-ms-overflow-style:none;scrollbar-width:none;-webkit-overflow-scrolling:touch}.scrollbar-hide[data-v-2e086e79]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.vlite-line-chart[data-v-044e962d]{position:relative}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none;-webkit-overflow-scrolling:touch}.scrollbar-hide::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.scrollable-container[data-v-38015ba3]{will-change:transform;contain:layout style}.kanban-board--disabled[data-v-38015ba3]{opacity:.75;background-color:color-mix(in srgb,var(--color-card) 85%,var(--color-muted) 15%)}.kanban-lock-badge[data-v-38015ba3]{font-size:.75rem;line-height:1;-webkit-user-select:none;user-select:none}.scrollable-container[data-v-52c07c6d]{will-change:transform;contain:layout style}.v-sidepanel-overlay[data-v-69e4da90]{background-color:#00000069}.slide-right-enter-active[data-v-69e4da90],.slide-left-enter-active[data-v-69e4da90]{transition:opacity 80ms ease-out}.slide-right-leave-active[data-v-69e4da90],.slide-left-leave-active[data-v-69e4da90]{transition:opacity .12s ease-in}.slide-right-enter-from[data-v-69e4da90],.slide-right-leave-to[data-v-69e4da90],.slide-left-enter-from[data-v-69e4da90],.slide-left-leave-to[data-v-69e4da90]{opacity:0}.sidepanel-body[data-v-69e4da90]{will-change:transform,opacity;contain:layout style}.fade-x-enter-active,.fade-x-leave-active{transition:opacity .15s ease}.fade-x-enter-from,.fade-x-leave-to{opacity:0}.navbar-tabs-no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.navbar-tabs-no-scrollbar::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.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-4d544a95]{width:100%;position:relative;will-change:transform;contain:layout style}.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}.file-tree-container[data-v-62b1cddc]{will-change:transform;contain:layout style}.rte-reader[data-v-55b9fd8b]{font-family:inherit;color:var(--color-foreground);font-size:.9rem;line-height:1.7;word-break:break-word;overflow-wrap:break-word;padding:0;margin:0}.sheet-container[data-v-e674bcbc]{will-change:transform;contain:layout style}.vl-comment-actions[data-v-446c60ad]{opacity:0;transition:opacity .15s ease}.vl-comment:hover:not(:has(.vl-comment:hover))>div>.vl-comment-header>.vl-comment-actions[data-v-446c60ad]{opacity:1}.vl-comment-actions[data-v-446c60ad]:focus-within{opacity:1}.vl-comment:has(.vl-comment-actions button[aria-label="Confirm delete"]) .vl-comment-actions[data-v-446c60ad]{opacity:1}.sidebar-manu-item .tooltip-trigger{width:100%!important}.sidebar-menu-tooltip{margin-left:4px!important}[dir=rtl] .sidebar-menu-tooltip{margin-right:4px!important}.drill-forward-enter-active,.drill-forward-leave-active{transition:all .28s cubic-bezier(.4,0,.2,1)}.drill-forward-enter-from{opacity:0;transform:translate(40%)}.drill-forward-enter-to,.drill-forward-leave-from{opacity:1;transform:translate(0)}.drill-forward-leave-to{opacity:0;transform:translate(-40%)}.drill-forward-leave-active{position:absolute;top:0;left:0;right:0}.drill-backward-enter-active,.drill-backward-leave-active{transition:all .28s cubic-bezier(.4,0,.2,1)}.drill-backward-enter-from{opacity:0;transform:translate(-40%)}.drill-backward-enter-to,.drill-backward-leave-from{opacity:1;transform:translate(0)}.drill-backward-leave-to{opacity:0;transform:translate(40%)}.drill-backward-leave-active{position:absolute;top:0;left:0;right:0}.sidebar-drilldown-container{min-height:0}.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-f4695eed]{max-height:70vh;will-change:transform;contain:layout style}.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-e8bfdc18]{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}.custom-table[data-v-e8bfdc18]{width:100%;border-collapse:collapse}.custom-sticky-header th[data-v-e8bfdc18]{position:sticky;top:0;z-index:20;box-shadow:0 1px 0 var(--color-border)}.custom-th[data-v-e8bfdc18]{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-e8bfdc18]{border-bottom:1px solid var(--color-border)}.custom-th.text-center[data-v-e8bfdc18]{text-align:center;min-width:100px}.custom-th[data-v-e8bfdc18]:first-child{border-left:none}.custom-td[data-v-e8bfdc18]{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-e8bfdc18]{text-align:center}.custom-td[data-v-e8bfdc18]:first-child{border-left:none}.custom-group-row td[data-v-e8bfdc18]{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-e8bfdc18]{background-color:var(--color-background);transition:background-color .1s ease}.custom-entity-row[data-v-e8bfdc18]:hover{background-color:var(--color-gray-50)}.custom-entity-row:last-child td[data-v-e8bfdc18]{border-bottom:none}.custom-active-cell[data-v-e8bfdc18]{cursor:pointer}.custom-active-cell[data-v-e8bfdc18]:hover{background-color:var(--color-accent)}.category-manager--loading[data-v-0e426dc4]{pointer-events:none;-webkit-user-select:none;user-select:none}.cm-fade-enter-active[data-v-0e426dc4],.cm-fade-leave-active[data-v-0e426dc4]{transition:opacity .2s ease}.cm-fade-enter-from[data-v-0e426dc4],.cm-fade-leave-to[data-v-0e426dc4]{opacity:0}.category-tabs-no-scrollbar[data-v-4d803b88]{-ms-overflow-style:none;scrollbar-width:none}.category-tabs-no-scrollbar[data-v-4d803b88]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.fade-x-enter-active[data-v-4d803b88],.fade-x-leave-active[data-v-4d803b88]{transition:opacity .15s ease}.fade-x-enter-from[data-v-4d803b88],.fade-x-leave-to[data-v-4d803b88]{opacity:0}.category-mega-no-scrollbar[data-v-5a117002]{-ms-overflow-style:none;scrollbar-width:none}.category-mega-no-scrollbar[data-v-5a117002]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.fade-x-enter-active[data-v-5a117002],.fade-x-leave-active[data-v-5a117002]{transition:opacity .15s ease}.fade-x-enter-from[data-v-5a117002],.fade-x-leave-to[data-v-5a117002]{opacity:0}.attached-group[data-v-298c3d8a] button{position:relative}.attached-group[data-v-298c3d8a] button:focus-visible,.attached-group[data-v-298c3d8a] button:hover{z-index:10}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:not(:first-child){margin-inline-start:-1px}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:first-child{border-start-end-radius:0!important;border-end-end-radius:0!important}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:not(:first-child):not(:last-child){border-radius:0!important}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:last-child{border-start-start-radius:0!important;border-end-start-radius:0!important}.vertical-group[data-v-298c3d8a] button:not(:first-child){margin-block-start:-1px}.vertical-group[data-v-298c3d8a] button:first-child{border-end-start-radius:0!important;border-end-end-radius:0!important}.vertical-group[data-v-298c3d8a] button:not(:first-child):not(:last-child){border-radius:0!important}.vertical-group[data-v-298c3d8a] button:last-child{border-start-start-radius:0!important;border-start-end-radius:0!important}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:not(:first-child):not(.border):before{content:"";position:absolute;inset-inline-start:0;top:0;bottom:0;width:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none;height:100%}.vertical-group[data-v-298c3d8a] 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}[data-v-63e46f6b] .calendar-view{--calendar-primary-color: var(--color-primary);--calendar-bg-color: transparent !important;--calendar-border-color: var(--color-border);--calendar-text-color: var(--color-foreground);--calendar-hover-color: var(--color-accent)}[data-v-63e46f6b] .v-event-calendar .add-event-icon,[data-v-63e46f6b] .v-event-calendar .add-event-icon svg{color:var(--color-primary-fg)!important}.vlite-scc-grid[data-v-e6172e07]{display:flex;width:100%}.vlite-scc-card[data-v-e6172e07]{flex:1;position:relative;display:flex;align-items:stretch}.vlite-scc-separator[data-v-e6172e07]{width:1px;align-self:stretch;background:var(--color-border, #e4e4e7);opacity:.3;margin:8px 0;flex-shrink:0;background-image:repeating-linear-gradient(to bottom,var(--color-border, #e4e4e7) 0px,var(--color-border, #e4e4e7) 4px,transparent 4px,transparent 8px);background-color:transparent}.vlite-scc-content[data-v-e6172e07]{display:flex;flex-direction:column;align-items:flex-start;padding:16px 20px;flex:1;min-height:200px}.vlite-scc-label[data-v-e6172e07]{font-size:13px;font-weight:500;color:var(--color-muted-foreground, #71717a);margin:0 0 6px}.vlite-scc-pct[data-v-e6172e07]{font-size:36px;font-weight:800;color:var(--color-foreground, #09090b);margin:0;line-height:1.1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.vlite-scc-spacer[data-v-e6172e07]{flex:1}.vlite-scc-indicator[data-v-e6172e07]{border-radius:10px;margin-bottom:14px;transition:width .6s ease,height .6s ease}.vlite-scc-footer[data-v-e6172e07]{display:flex;align-items:center;gap:8px}.vlite-scc-value[data-v-e6172e07]{font-size:14px;font-weight:600;color:var(--color-foreground, #09090b);font-variant-numeric:tabular-nums}.vlite-scc-trend-icon[data-v-e6172e07]{width:14px;height:14px}.vlite-scc-trend-up[data-v-e6172e07]{color:var(--color-success, #22c55e);transform:rotate(25deg)}.vlite-scc-trend-down[data-v-e6172e07]{color:var(--color-danger, #ef4444);transform:rotate(-25deg)}.vlite-gantt-chart[data-v-ebb84e3d]{font-family:inherit}.vlite-gantt-toolbar[data-v-ebb84e3d]{display:flex;justify-content:flex-end;margin-bottom:8px;gap:6px}.vlite-gantt-btn[data-v-ebb84e3d]{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;font-size:11px;font-weight:600;color:var(--color-muted-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius);cursor:pointer;transition:all .15s}.vlite-gantt-btn[data-v-ebb84e3d]:hover:not(:disabled){background:var(--color-accent);color:var(--color-foreground)}.vlite-gantt-btn[data-v-ebb84e3d]:disabled{opacity:.5;cursor:not-allowed}.vlite-gantt-zoom-controls[data-v-ebb84e3d]{display:flex;gap:6px}.vlite-gantt-wrapper[data-v-ebb84e3d]{display:flex;border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--color-background)}.vlite-gantt-sidebar[data-v-ebb84e3d]{flex-shrink:0;border-right:1px solid var(--color-border);background:var(--color-background);z-index:2}.vlite-gantt-sidebar-header[data-v-ebb84e3d]{display:flex;align-items:center;padding:0 16px;border-bottom:1px solid var(--color-border);background:color-mix(in oklab,var(--color-background) 97%,var(--color-foreground))}.vlite-gantt-sidebar-body[data-v-ebb84e3d]{overflow-y:hidden;overflow-x:hidden}.vlite-gantt-sidebar-row[data-v-ebb84e3d]{display:flex;align-items:center;padding:0 12px;border-bottom:1px solid color-mix(in oklab,var(--color-border) 50%,transparent)}.vlite-gantt-group-toggle[data-v-ebb84e3d]{display:flex;align-items:center;gap:6px;width:100%;padding:0 4px;background:none;border:none;cursor:pointer;color:inherit;text-align:left}.vlite-gantt-group-toggle[data-v-ebb84e3d]:hover{opacity:.8}.vlite-gantt-chevron[data-v-ebb84e3d]{transition:transform .2s ease;color:var(--color-muted-foreground);flex-shrink:0}.vlite-gantt-chevron-collapsed[data-v-ebb84e3d]{transform:rotate(-90deg)}.vlite-gantt-group-count[data-v-ebb84e3d]{font-size:10px;font-weight:600;color:var(--color-muted-foreground);background:var(--color-muted);padding:1px 6px;border-radius:99px;margin-left:auto}.vlite-gantt-task-name[data-v-ebb84e3d]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:0 4px;width:100%;transition:all .15s}.vlite-gantt-task-name[data-v-ebb84e3d]:hover{opacity:.75}.vlite-gantt-task-name-grouped[data-v-ebb84e3d]{padding-left:20px}.vlite-gantt-task-name-dragging[data-v-ebb84e3d]{background:color-mix(in oklab,var(--color-primary) 8%,transparent);border-radius:4px}.vlite-gantt-task-dot[data-v-ebb84e3d]{width:7px;height:7px;border-radius:2px;flex-shrink:0}.vlite-gantt-progress-badge[data-v-ebb84e3d]{font-size:10px;font-weight:700;color:var(--color-muted-foreground);margin-left:auto;flex-shrink:0}.vlite-gantt-timeline[data-v-ebb84e3d]{flex:1;overflow-x:auto;overflow-y:auto;position:relative}.vlite-gantt-timeline-header[data-v-ebb84e3d]{position:sticky;top:0;z-index:1;border-bottom:1px solid var(--color-border);background:color-mix(in oklab,var(--color-background) 97%,var(--color-foreground))}.vlite-gantt-timeline-body[data-v-ebb84e3d]{position:relative}.vlite-gantt-bar-dragging[data-v-ebb84e3d]{filter:drop-shadow(0 2px 8px rgba(0,0,0,.15));z-index:10}.vlite-gantt-dep-group[data-v-ebb84e3d]{transition:opacity .2s}.vlite-gantt-dep-group[data-v-ebb84e3d]:hover{opacity:1!important}.vlite-gantt-tooltip-progress-track[data-v-ebb84e3d]{width:60px;height:4px;border-radius:2px;background:var(--color-muted);overflow:hidden}.vlite-gantt-tooltip-progress-fill[data-v-ebb84e3d]{height:100%;border-radius:2px;transition:width .3s ease}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar{height:6px;width:6px}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar-track{background:transparent}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar-thumb{background:var(--color-scrollbar);border-radius:3px}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar-thumb:hover{background:var(--color-scrollbar-hover)}.vlite-gantt-sidebar-body[data-v-ebb84e3d]::-webkit-scrollbar{width:0;display:none}.is-solid[data-v-33afc5cb] path,.is-solid[data-v-33afc5cb] polygon,.is-solid[data-v-33afc5cb] circle,.is-solid[data-v-33afc5cb] rect{fill:currentColor!important}.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-aa0dbb48] ::-webkit-scrollbar{width:4px}.command-palette-content[data-v-aa0dbb48] ::-webkit-scrollbar-track{background:transparent}.command-palette-content[data-v-aa0dbb48] ::-webkit-scrollbar-thumb{background:var(--border);border-radius:9999px}.cp-scroll-container[data-v-aa0dbb48]{transform:translateZ(0);will-change:transform;touch-action:pan-y;backface-visibility:hidden}
1800
+ input[data-v-ea76c92c]::-webkit-outer-spin-button,input[data-v-ea76c92c]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}input[type=number][data-v-ea76c92c]{-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}.vl-thumbnail-selector__filepicker-inline[data-v-470fec5b]{display:contents}.vl-thumbnail-selector__card:hover .vl-thumbnail-selector__delete[data-v-470fec5b],.vl-thumbnail-selector__card:hover .vl-thumbnail-selector__drag-handle[data-v-470fec5b]{opacity:1}.vl-thumbnail-selector__card[data-v-470fec5b]:not(.border-primary):hover{border-color:color-mix(in sRGB,var(--color-primary, currentColor) 40%,transparent)}.mega-menu-grid[data-v-512aa158]{display:grid;grid-template-columns:repeat(var(--mega-cols, 3),minmax(0,1fr))}@media(max-width:768px){.mega-menu-grid[data-v-512aa158]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:480px){.mega-menu-grid[data-v-512aa158]{grid-template-columns:1fr}}.dropdown-menu[data-v-173c7a02]{will-change:transform;contain:layout style}.v-modal-overlay[data-v-208854bc]{background-color:#00000085}.v-modal-backdrop[data-v-208854bc]{transform:translateZ(0)}.modal-dialog-enter-active[data-v-208854bc]{transition:opacity 80ms ease-out}.modal-dialog-leave-active[data-v-208854bc]{transition:opacity .12s ease-in}.modal-dialog-enter-from[data-v-208854bc],.modal-dialog-leave-to[data-v-208854bc]{opacity:0}.modal-body[data-v-208854bc]{will-change:opacity;contain:layout style}.blink-bg[data-v-208854bc]{animation:blink-animation-208854bc 1s infinite}@keyframes blink-animation-208854bc{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}}[data-v-a8f85730] .date-picker-content.dates{min-height:245px}.IroBox{border-radius:8px!important}.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}.custom-fields-table[data-v-0138ffcc]{will-change:transform;contain:layout style}.custom-fields-table[data-v-0138ffcc] .form-field-item{margin-bottom:0!important;height:100%}.custom-fields-table[data-v-0138ffcc] input,.custom-fields-table[data-v-0138ffcc] textarea{padding-left:1em;padding-right:.5em}.custom-fields-table[data-v-0138ffcc] input,.custom-fields-table[data-v-0138ffcc] textarea,.custom-fields-table[data-v-0138ffcc] select,.custom-fields-table[data-v-0138ffcc] .input-wrapper,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger button,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger>div{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-0138ffcc] input:focus,.custom-fields-table[data-v-0138ffcc] textarea:focus,.custom-fields-table[data-v-0138ffcc] select:focus,.custom-fields-table[data-v-0138ffcc] .input-wrapper:focus-within,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger button:focus,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger>div:focus,.custom-fields-table[data-v-0138ffcc] .tooltip-trigger>div: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-0138ffcc] .w-full{width:100%;height:100%}.custom-fields-table[data-v-0138ffcc] .vl-file-picker{height:100%!important;min-height:40px;padding:0;min-width:0!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input>.relative{height:100%;min-width:0}.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input [role=button]{height:100%!important;min-height:40px!important;border:none!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;padding-left:.75rem!important;padding-right:2.5rem!important;min-width:0!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input [role=button]:focus,.custom-fields-table[data-v-0138ffcc] .vl-file-picker--input [role=button]:focus-visible{background-color:hsla(var(--primary) / .03)!important;box-shadow:inset 0 0 0 2px hsla(var(--primary) / .1)!important;outline:none!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__dropzone{min-height:96px;padding:1rem;border-radius:.5rem!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file{min-height:72px;border-radius:.5rem!important;background:hsl(var(--background))!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file input{height:auto!important;min-height:0;padding:.125rem .25rem!important;border-bottom:1px solid transparent!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file input:hover{border-bottom-color:hsl(var(--border))!important}.custom-fields-table[data-v-0138ffcc] .vl-file-picker__file input:focus{background-color:transparent!important;border-bottom-color:hsl(var(--primary))!important;box-shadow:none!important}.list-enter-active[data-v-0138ffcc]{transition:all .15s cubic-bezier(.16,1,.3,1)}.list-enter-from[data-v-0138ffcc]{opacity:0;transform:translateY(-5px)}:where(.rte-editor,.rte-reader) h1{display:block;font-size:1.5rem!important;font-weight:700!important;margin:.5em 0 .2em!important;line-height:1.3}:where(.rte-editor,.rte-reader) h2{display:block;font-size:1.2rem!important;font-weight:600!important;margin:.45em 0 .2em!important;line-height:1.35}:where(.rte-editor,.rte-reader) p{display:block;margin:.2em 0!important}:where(.rte-editor,.rte-reader) div{margin:.1em 0}:where(.rte-editor,.rte-reader) blockquote{display:block;border-left:3px solid var(--color-primary);margin:.6em 0!important;padding:.35em 1em!important;color:var(--color-muted-foreground);font-style:italic;background:color-mix(in oklab,var(--color-primary) 6%,transparent);border-radius:0 var(--radius-sm) var(--radius-sm) 0}:where(.rte-editor,.rte-reader) ul{display:block!important;list-style-type:disc!important;list-style-position:inside!important;padding-left:1.6em!important;margin:.35em 0!important}:where(.rte-editor,.rte-reader) ol{display:block!important;list-style-type:decimal!important;list-style-position:inside!important;padding-left:1.6em!important;margin:.35em 0!important}:where(.rte-editor,.rte-reader) li{display:list-item!important;margin:.15em 0!important;padding-left:.15em}:where(.rte-editor,.rte-reader) ul ul,:where(.rte-editor,.rte-reader) ol ul{list-style-type:circle!important}:where(.rte-editor,.rte-reader) ul ul ul,:where(.rte-editor,.rte-reader) ol ol ul{list-style-type:square!important}:where(.rte-editor,.rte-reader) ol ol{list-style-type:lower-alpha!important}:where(.rte-editor,.rte-reader) ol ol ol{list-style-type:lower-roman!important}:where(.rte-editor,.rte-reader) hr{display:block!important;border:0!important;border-top:1px solid var(--color-border)!important;margin:1.5em 0!important}:where(.rte-editor,.rte-reader) a{color:var(--color-info);text-decoration:underline;text-underline-offset:2px;cursor:pointer;transition:color .12s ease}:where(.rte-editor,.rte-reader) a:hover{color:var(--color-info-dark, var(--color-info));text-decoration-thickness:2px}:where(.rte-editor,.rte-reader) code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85em;background:var(--color-muted);color:var(--color-foreground);padding:.2em .4em;border-radius:var(--radius-sm);border:none}:where(.rte-editor,.rte-reader) img{max-width:100%;height:auto;border-radius:var(--radius-sm);margin:1em 0;display:block;box-shadow:0 0 0 1px var(--color-border);transition:filter .2s,opacity .2s}.rte-editor img.rte-image-uploading{opacity:.6;filter:grayscale(100%) blur(2px);cursor:wait}:where(.rte-editor,.rte-reader) strong,:where(.rte-editor,.rte-reader) b{font-weight:700!important}:where(.rte-editor,.rte-reader) em,:where(.rte-editor,.rte-reader) i{font-style:italic!important}:where(.rte-editor,.rte-reader) u{text-decoration:underline!important;text-decoration-thickness:1.5px;text-underline-offset:2px}:where(.rte-editor,.rte-reader) s,:where(.rte-editor,.rte-reader) strike{text-decoration:line-through!important}.rte-editor ::selection{background:color-mix(in oklab,var(--color-primary) 22%,transparent)}.rte-toolbar{display:flex;flex-wrap:wrap;padding:6px 8px;gap:2px;border-bottom:1px solid var(--color-border);background:var(--color-background);border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0;align-items:center}.rte-btn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--color-muted-foreground);cursor:pointer;transition:all .1s ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.rte-btn:hover:not(:disabled){background:var(--color-accent);color:var(--color-foreground)}.rte-btn--active{background:var(--color-accent);color:var(--color-foreground)}.rte-btn--text{font-size:.75rem;font-weight:700;width:auto;min-width:28px;padding:0 6px}.rte-icon{width:1.1rem;height:1.1rem;stroke-width:2.5}.rte-btn:disabled{opacity:.38;cursor:not-allowed;pointer-events:none}.rte-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.rte-sep{width:1px;height:18px;background:var(--color-border);margin:0 3px;flex-shrink:0}.rte-link-popover{position:absolute;top:0;left:0;z-index:60;width:300px;max-width:min(300px,calc(100vw - 24px));background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:0 2px 4px #0000000f,0 8px 24px #0000001a;padding:8px;display:flex;flex-direction:column;gap:6px;will-change:transform,opacity}.rte-link-input-row{display:flex;align-items:center;gap:6px;background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:0 8px;transition:border-color .15s ease,box-shadow .15s ease}.rte-link-input-row:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in oklab,var(--color-primary) 12%,transparent)}.rte-link-icon-prefix{width:.875rem;height:.875rem;color:var(--color-muted-foreground);flex-shrink:0}.rte-link-input{flex:1;background:transparent;border:none;outline:none;font-size:.8rem;color:var(--color-foreground);padding:7px 0;min-width:0;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace}.rte-link-input::placeholder{color:var(--color-muted-foreground);font-family:inherit}.rte-link-actions-row{display:flex;align-items:center;gap:3px}.rte-link-action-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:none;border-radius:var(--radius-sm);background:transparent;font-size:.75rem;font-weight:500;cursor:pointer;color:var(--color-muted-foreground);transition:background .12s ease,color .12s ease}.rte-link-action-btn:hover{background:var(--color-accent);color:var(--color-foreground)}.rte-link-action-btn--danger{color:var(--color-destructive)}.rte-link-action-btn--danger:hover{background:color-mix(in oklab,var(--color-destructive) 10%,transparent);color:var(--color-destructive)}.rte-link-apply-btn{background:var(--color-primary);color:var(--color-primary-foreground);width:24px;height:24px;padding:4px;cursor:pointer}.rte-link-apply-btn:disabled{opacity:.5;cursor:not-allowed}.rte-link-apply-btn:hover:not(:disabled){background:color-mix(in oklab,var(--color-primary) 88%,var(--color-primary-foreground));color:var(--color-primary-foreground)}.rte-root{display:flex;flex-direction:column;gap:6px;width:100%}.rte-label{font-size:.825rem;font-weight:500;color:var(--color-foreground);margin-bottom:2px}.rte-wrapper{background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--radius);position:relative;transition:border-color .15s ease,box-shadow .15s ease;display:flex;flex-direction:column}.rte-root.rte-focused .rte-wrapper{border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in oklab,var(--color-primary) 12%,transparent)}.rte-root.rte-disabled .rte-wrapper{background:var(--color-muted);opacity:.6}.rte-root.rte-error .rte-wrapper{border-color:var(--color-destructive)}.rte-root.rte-error.rte-focused .rte-wrapper{box-shadow:0 0 0 2px color-mix(in oklab,var(--color-destructive) 15%,transparent)}.rte-body-wrap{position:relative;overflow:visible}.rte-editor{outline:none;padding:14px 16px;color:var(--color-foreground);font-size:.9rem;line-height:1.7;width:100%;box-sizing:border-box;overflow-y:auto;border-radius:0 0 var(--radius) var(--radius);word-break:break-word;overflow-wrap:break-word;will-change:transform;contain:layout style}.rte-editor[contenteditable=true]{caret-color:var(--color-primary)}.rte-placeholder{position:absolute;top:14px;left:16px;color:var(--color-muted-foreground);font-size:.9rem;pointer-events:none;-webkit-user-select:none;user-select:none;line-height:1.7}.rte-error-msg{font-size:.78rem;color:var(--color-destructive);margin:0;line-height:1.4}.form-field-item[data-v-d4db8f9b]{display:flex;flex-direction:column;min-width:0}.form-field-item[data-v-d4db8f9b]:has([role=checkbox]){flex-direction:row;align-items:center;justify-content:flex-start}.form-container[data-v-b84399b6]{width:100%}[data-tabes][data-v-2e086e79]:not(.inline-flex):not([class*=gap-6])>:where(button,a,[role=tab]){flex:1 0 0%;min-width:max-content}.scrollbar-hide[data-v-2e086e79]{-ms-overflow-style:none;scrollbar-width:none;-webkit-overflow-scrolling:touch}.scrollbar-hide[data-v-2e086e79]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.vlite-line-chart[data-v-044e962d]{position:relative}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none;-webkit-overflow-scrolling:touch}.scrollbar-hide::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.scrollable-container[data-v-38015ba3]{will-change:transform;contain:layout style}.kanban-board--disabled[data-v-38015ba3]{opacity:.75;background-color:color-mix(in srgb,var(--color-card) 85%,var(--color-muted) 15%)}.kanban-lock-badge[data-v-38015ba3]{font-size:.75rem;line-height:1;-webkit-user-select:none;user-select:none}.scrollable-container[data-v-52c07c6d]{will-change:transform;contain:layout style}.v-sidepanel-overlay[data-v-69e4da90]{background-color:#00000069}.slide-right-enter-active[data-v-69e4da90],.slide-left-enter-active[data-v-69e4da90]{transition:opacity 80ms ease-out}.slide-right-leave-active[data-v-69e4da90],.slide-left-leave-active[data-v-69e4da90]{transition:opacity .12s ease-in}.slide-right-enter-from[data-v-69e4da90],.slide-right-leave-to[data-v-69e4da90],.slide-left-enter-from[data-v-69e4da90],.slide-left-leave-to[data-v-69e4da90]{opacity:0}.sidepanel-body[data-v-69e4da90]{will-change:transform,opacity;contain:layout style}.fade-x-enter-active,.fade-x-leave-active{transition:opacity .15s ease}.fade-x-enter-from,.fade-x-leave-to{opacity:0}.navbar-tabs-no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.navbar-tabs-no-scrollbar::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.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-4d544a95]{width:100%;position:relative;will-change:transform;contain:layout style}.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}.file-tree-container[data-v-62b1cddc]{will-change:transform;contain:layout style}.rte-reader[data-v-55b9fd8b]{font-family:inherit;color:var(--color-foreground);font-size:.9rem;line-height:1.7;word-break:break-word;overflow-wrap:break-word;padding:0;margin:0}.sheet-container[data-v-e674bcbc]{will-change:transform;contain:layout style}.vl-comment-actions[data-v-446c60ad]{opacity:0;transition:opacity .15s ease}.vl-comment:hover:not(:has(.vl-comment:hover))>div>.vl-comment-header>.vl-comment-actions[data-v-446c60ad]{opacity:1}.vl-comment-actions[data-v-446c60ad]:focus-within{opacity:1}.vl-comment:has(.vl-comment-actions button[aria-label="Confirm delete"]) .vl-comment-actions[data-v-446c60ad]{opacity:1}.sidebar-manu-item .tooltip-trigger{width:100%!important}.sidebar-menu-tooltip{margin-left:4px!important}[dir=rtl] .sidebar-menu-tooltip{margin-right:4px!important}.drill-forward-enter-active,.drill-forward-leave-active{transition:all .28s cubic-bezier(.4,0,.2,1)}.drill-forward-enter-from{opacity:0;transform:translate(40%)}.drill-forward-enter-to,.drill-forward-leave-from{opacity:1;transform:translate(0)}.drill-forward-leave-to{opacity:0;transform:translate(-40%)}.drill-forward-leave-active{position:absolute;top:0;left:0;right:0}.drill-backward-enter-active,.drill-backward-leave-active{transition:all .28s cubic-bezier(.4,0,.2,1)}.drill-backward-enter-from{opacity:0;transform:translate(-40%)}.drill-backward-enter-to,.drill-backward-leave-from{opacity:1;transform:translate(0)}.drill-backward-leave-to{opacity:0;transform:translate(40%)}.drill-backward-leave-active{position:absolute;top:0;left:0;right:0}.sidebar-drilldown-container{min-height:0}.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-f4695eed]{max-height:70vh;will-change:transform;contain:layout style}.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-e8bfdc18]{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}.custom-table[data-v-e8bfdc18]{width:100%;border-collapse:collapse}.custom-sticky-header th[data-v-e8bfdc18]{position:sticky;top:0;z-index:20;box-shadow:0 1px 0 var(--color-border)}.custom-th[data-v-e8bfdc18]{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-e8bfdc18]{border-bottom:1px solid var(--color-border)}.custom-th.text-center[data-v-e8bfdc18]{text-align:center;min-width:100px}.custom-th[data-v-e8bfdc18]:first-child{border-left:none}.custom-td[data-v-e8bfdc18]{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-e8bfdc18]{text-align:center}.custom-td[data-v-e8bfdc18]:first-child{border-left:none}.custom-group-row td[data-v-e8bfdc18]{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-e8bfdc18]{background-color:var(--color-background);transition:background-color .1s ease}.custom-entity-row[data-v-e8bfdc18]:hover{background-color:var(--color-gray-50)}.custom-entity-row:last-child td[data-v-e8bfdc18]{border-bottom:none}.custom-active-cell[data-v-e8bfdc18]{cursor:pointer}.custom-active-cell[data-v-e8bfdc18]:hover{background-color:var(--color-accent)}.category-manager--loading[data-v-0e426dc4]{pointer-events:none;-webkit-user-select:none;user-select:none}.cm-fade-enter-active[data-v-0e426dc4],.cm-fade-leave-active[data-v-0e426dc4]{transition:opacity .2s ease}.cm-fade-enter-from[data-v-0e426dc4],.cm-fade-leave-to[data-v-0e426dc4]{opacity:0}.category-tabs-no-scrollbar[data-v-4d803b88]{-ms-overflow-style:none;scrollbar-width:none}.category-tabs-no-scrollbar[data-v-4d803b88]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.fade-x-enter-active[data-v-4d803b88],.fade-x-leave-active[data-v-4d803b88]{transition:opacity .15s ease}.fade-x-enter-from[data-v-4d803b88],.fade-x-leave-to[data-v-4d803b88]{opacity:0}.category-mega-no-scrollbar[data-v-5a117002]{-ms-overflow-style:none;scrollbar-width:none}.category-mega-no-scrollbar[data-v-5a117002]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.fade-x-enter-active[data-v-5a117002],.fade-x-leave-active[data-v-5a117002]{transition:opacity .15s ease}.fade-x-enter-from[data-v-5a117002],.fade-x-leave-to[data-v-5a117002]{opacity:0}.attached-group[data-v-298c3d8a] button{position:relative}.attached-group[data-v-298c3d8a] button:focus-visible,.attached-group[data-v-298c3d8a] button:hover{z-index:10}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:not(:first-child){margin-inline-start:-1px}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:first-child{border-start-end-radius:0!important;border-end-end-radius:0!important}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:not(:first-child):not(:last-child){border-radius:0!important}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:last-child{border-start-start-radius:0!important;border-end-start-radius:0!important}.vertical-group[data-v-298c3d8a] button:not(:first-child){margin-block-start:-1px}.vertical-group[data-v-298c3d8a] button:first-child{border-end-start-radius:0!important;border-end-end-radius:0!important}.vertical-group[data-v-298c3d8a] button:not(:first-child):not(:last-child){border-radius:0!important}.vertical-group[data-v-298c3d8a] button:last-child{border-start-start-radius:0!important;border-start-end-radius:0!important}.attached-group[data-v-298c3d8a]:not(.vertical-group) button:not(:first-child):not(.border):before{content:"";position:absolute;inset-inline-start:0;top:0;bottom:0;width:1px;background-color:currentColor;opacity:.15;z-index:5;pointer-events:none;height:100%}.vertical-group[data-v-298c3d8a] 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}[data-v-63e46f6b] .calendar-view{--calendar-primary-color: var(--color-primary);--calendar-bg-color: transparent !important;--calendar-border-color: var(--color-border);--calendar-text-color: var(--color-foreground);--calendar-hover-color: var(--color-accent)}[data-v-63e46f6b] .v-event-calendar .add-event-icon,[data-v-63e46f6b] .v-event-calendar .add-event-icon svg{color:var(--color-primary-fg)!important}.vlite-scc-grid[data-v-e6172e07]{display:flex;width:100%}.vlite-scc-card[data-v-e6172e07]{flex:1;position:relative;display:flex;align-items:stretch}.vlite-scc-separator[data-v-e6172e07]{width:1px;align-self:stretch;background:var(--color-border, #e4e4e7);opacity:.3;margin:8px 0;flex-shrink:0;background-image:repeating-linear-gradient(to bottom,var(--color-border, #e4e4e7) 0px,var(--color-border, #e4e4e7) 4px,transparent 4px,transparent 8px);background-color:transparent}.vlite-scc-content[data-v-e6172e07]{display:flex;flex-direction:column;align-items:flex-start;padding:16px 20px;flex:1;min-height:200px}.vlite-scc-label[data-v-e6172e07]{font-size:13px;font-weight:500;color:var(--color-muted-foreground, #71717a);margin:0 0 6px}.vlite-scc-pct[data-v-e6172e07]{font-size:36px;font-weight:800;color:var(--color-foreground, #09090b);margin:0;line-height:1.1;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.vlite-scc-spacer[data-v-e6172e07]{flex:1}.vlite-scc-indicator[data-v-e6172e07]{border-radius:10px;margin-bottom:14px;transition:width .6s ease,height .6s ease}.vlite-scc-footer[data-v-e6172e07]{display:flex;align-items:center;gap:8px}.vlite-scc-value[data-v-e6172e07]{font-size:14px;font-weight:600;color:var(--color-foreground, #09090b);font-variant-numeric:tabular-nums}.vlite-scc-trend-icon[data-v-e6172e07]{width:14px;height:14px}.vlite-scc-trend-up[data-v-e6172e07]{color:var(--color-success, #22c55e);transform:rotate(25deg)}.vlite-scc-trend-down[data-v-e6172e07]{color:var(--color-danger, #ef4444);transform:rotate(-25deg)}.vlite-gantt-chart[data-v-ebb84e3d]{font-family:inherit}.vlite-gantt-toolbar[data-v-ebb84e3d]{display:flex;justify-content:flex-end;margin-bottom:8px;gap:6px}.vlite-gantt-btn[data-v-ebb84e3d]{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;font-size:11px;font-weight:600;color:var(--color-muted-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius);cursor:pointer;transition:all .15s}.vlite-gantt-btn[data-v-ebb84e3d]:hover:not(:disabled){background:var(--color-accent);color:var(--color-foreground)}.vlite-gantt-btn[data-v-ebb84e3d]:disabled{opacity:.5;cursor:not-allowed}.vlite-gantt-zoom-controls[data-v-ebb84e3d]{display:flex;gap:6px}.vlite-gantt-wrapper[data-v-ebb84e3d]{display:flex;border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--color-background)}.vlite-gantt-sidebar[data-v-ebb84e3d]{flex-shrink:0;border-right:1px solid var(--color-border);background:var(--color-background);z-index:2}.vlite-gantt-sidebar-header[data-v-ebb84e3d]{display:flex;align-items:center;padding:0 16px;border-bottom:1px solid var(--color-border);background:color-mix(in oklab,var(--color-background) 97%,var(--color-foreground))}.vlite-gantt-sidebar-body[data-v-ebb84e3d]{overflow-y:hidden;overflow-x:hidden}.vlite-gantt-sidebar-row[data-v-ebb84e3d]{display:flex;align-items:center;padding:0 12px;border-bottom:1px solid color-mix(in oklab,var(--color-border) 50%,transparent)}.vlite-gantt-group-toggle[data-v-ebb84e3d]{display:flex;align-items:center;gap:6px;width:100%;padding:0 4px;background:none;border:none;cursor:pointer;color:inherit;text-align:left}.vlite-gantt-group-toggle[data-v-ebb84e3d]:hover{opacity:.8}.vlite-gantt-chevron[data-v-ebb84e3d]{transition:transform .2s ease;color:var(--color-muted-foreground);flex-shrink:0}.vlite-gantt-chevron-collapsed[data-v-ebb84e3d]{transform:rotate(-90deg)}.vlite-gantt-group-count[data-v-ebb84e3d]{font-size:10px;font-weight:600;color:var(--color-muted-foreground);background:var(--color-muted);padding:1px 6px;border-radius:99px;margin-left:auto}.vlite-gantt-task-name[data-v-ebb84e3d]{display:flex;align-items:center;gap:8px;cursor:pointer;padding:0 4px;width:100%;transition:all .15s}.vlite-gantt-task-name[data-v-ebb84e3d]:hover{opacity:.75}.vlite-gantt-task-name-grouped[data-v-ebb84e3d]{padding-left:20px}.vlite-gantt-task-name-dragging[data-v-ebb84e3d]{background:color-mix(in oklab,var(--color-primary) 8%,transparent);border-radius:4px}.vlite-gantt-task-dot[data-v-ebb84e3d]{width:7px;height:7px;border-radius:2px;flex-shrink:0}.vlite-gantt-progress-badge[data-v-ebb84e3d]{font-size:10px;font-weight:700;color:var(--color-muted-foreground);margin-left:auto;flex-shrink:0}.vlite-gantt-timeline[data-v-ebb84e3d]{flex:1;overflow-x:auto;overflow-y:auto;position:relative}.vlite-gantt-timeline-header[data-v-ebb84e3d]{position:sticky;top:0;z-index:1;border-bottom:1px solid var(--color-border);background:color-mix(in oklab,var(--color-background) 97%,var(--color-foreground))}.vlite-gantt-timeline-body[data-v-ebb84e3d]{position:relative}.vlite-gantt-bar-dragging[data-v-ebb84e3d]{filter:drop-shadow(0 2px 8px rgba(0,0,0,.15));z-index:10}.vlite-gantt-dep-group[data-v-ebb84e3d]{transition:opacity .2s}.vlite-gantt-dep-group[data-v-ebb84e3d]:hover{opacity:1!important}.vlite-gantt-tooltip-progress-track[data-v-ebb84e3d]{width:60px;height:4px;border-radius:2px;background:var(--color-muted);overflow:hidden}.vlite-gantt-tooltip-progress-fill[data-v-ebb84e3d]{height:100%;border-radius:2px;transition:width .3s ease}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar{height:6px;width:6px}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar-track{background:transparent}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar-thumb{background:var(--color-scrollbar);border-radius:3px}.vlite-gantt-timeline[data-v-ebb84e3d]::-webkit-scrollbar-thumb:hover{background:var(--color-scrollbar-hover)}.vlite-gantt-sidebar-body[data-v-ebb84e3d]::-webkit-scrollbar{width:0;display:none}.is-solid[data-v-33afc5cb] path,.is-solid[data-v-33afc5cb] polygon,.is-solid[data-v-33afc5cb] circle,.is-solid[data-v-33afc5cb] rect{fill:currentColor!important}.vlite-google-map[data-v-0cfbb6c9]{position:relative;min-height:1px;overflow:hidden;border-radius:var(--radius, .5rem);background:var(--color-muted, #f3f4f6);contain:layout style}.vlite-google-map__canvas[data-v-0cfbb6c9]{width:100%;height:100%;outline:none}.vlite-google-map__canvas[data-v-0cfbb6c9]:focus-visible{box-shadow:inset 0 0 0 3px var(--color-primary, #2563eb)}.vlite-google-map__state[data-v-0cfbb6c9]{position:absolute;inset:0;display:grid;place-items:center;padding:1rem;color:var(--color-muted-foreground, #4b5563);background:var(--color-muted, #f3f4f6);text-align:center}.vlite-google-map__state--error[data-v-0cfbb6c9]{color:var(--color-danger, #b91c1c)}.vlite-google-map__notice[data-v-0cfbb6c9]{position:absolute;right:.5rem;bottom:.5rem;margin:0;padding:.35rem .5rem;border-radius:var(--radius-sm, .25rem);color:var(--color-foreground, #111827);background:var(--color-background, #fff);font-size:.75rem}.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-aa0dbb48] ::-webkit-scrollbar{width:4px}.command-palette-content[data-v-aa0dbb48] ::-webkit-scrollbar-track{background:transparent}.command-palette-content[data-v-aa0dbb48] ::-webkit-scrollbar-thumb{background:var(--border);border-radius:9999px}.cp-scroll-container[data-v-aa0dbb48]{transform:translateZ(0);will-change:transform;touch-action:pan-y;backface-visibility:hidden}
1801
1801
 
@@ -0,0 +1,50 @@
1
+ export interface GoogleMapCoordinate {
2
+ lat: number;
3
+ lng: number;
4
+ }
5
+ export interface GoogleMapMarker extends GoogleMapCoordinate {
6
+ id?: string | number;
7
+ title?: string;
8
+ label?: string;
9
+ }
10
+ export interface GoogleMapOptions {
11
+ disableDefaultUI?: boolean;
12
+ draggable?: boolean;
13
+ fullscreenControl?: boolean;
14
+ mapId?: string;
15
+ mapTypeControl?: boolean;
16
+ scrollwheel?: boolean;
17
+ streetViewControl?: boolean;
18
+ zoomControl?: boolean;
19
+ [key: string]: unknown;
20
+ }
21
+ export interface GoogleMapProps {
22
+ apiKey?: string;
23
+ center?: GoogleMapCoordinate | null;
24
+ markers?: GoogleMapMarker[];
25
+ zoom?: number;
26
+ height?: string | number;
27
+ width?: string | number;
28
+ options?: GoogleMapOptions;
29
+ ariaLabel?: string;
30
+ loadingText?: string;
31
+ errorText?: string;
32
+ }
33
+ export type GoogleMapErrorCode = 'invalid-api-key' | 'invalid-center' | 'invalid-markers' | 'loader-conflict' | 'load-failed' | 'ssr-unavailable';
34
+ export interface GoogleMapError {
35
+ code: GoogleMapErrorCode;
36
+ message: string;
37
+ cause?: unknown;
38
+ }
39
+ export interface GoogleMapReadyEvent {
40
+ map: unknown;
41
+ }
42
+ export interface GoogleMapClickEvent {
43
+ coordinate: GoogleMapCoordinate | null;
44
+ nativeEvent: unknown;
45
+ }
46
+ export interface GoogleMapMarkerClickEvent {
47
+ marker: GoogleMapMarker;
48
+ index: number;
49
+ nativeEvent: unknown;
50
+ }
@@ -89,6 +89,9 @@ export interface VLiteConfig {
89
89
  datetime?: {
90
90
  format?: string;
91
91
  };
92
+ googleMap?: {
93
+ apiKey?: string;
94
+ };
92
95
  /**
93
96
  * Global Empty component configuration.
94
97
  * Sets the default variant used when no `variant` prop is passed locally.
package/types/index.d.ts CHANGED
@@ -9,3 +9,4 @@ export * from './styles.ts';
9
9
  export * from './config.type';
10
10
  export * from './list.type';
11
11
  export * from './progressbar.ts';
12
+ export * from './GoogleMap.type';
@@ -0,0 +1,41 @@
1
+ import { GoogleMapError } from '../types/GoogleMap.type';
2
+ interface GoogleMapsApi {
3
+ maps: {
4
+ Map: new (element: HTMLElement, options: Record<string, unknown>) => GoogleMapInstance;
5
+ Marker: new (options: Record<string, unknown>) => GoogleMapMarkerInstance;
6
+ event: {
7
+ clearInstanceListeners(instance: unknown): void;
8
+ trigger(instance: unknown, eventName: string): void;
9
+ };
10
+ };
11
+ }
12
+ export interface GoogleMapListener {
13
+ remove(): void;
14
+ }
15
+ export interface GoogleMapInstance {
16
+ addListener(eventName: string, handler: (event?: any) => void): GoogleMapListener;
17
+ getCenter(): {
18
+ lat(): number;
19
+ lng(): number;
20
+ } | undefined;
21
+ getZoom(): number | undefined;
22
+ setCenter(center: {
23
+ lat: number;
24
+ lng: number;
25
+ }): void;
26
+ setOptions(options: Record<string, unknown>): void;
27
+ setZoom(zoom: number): void;
28
+ }
29
+ export interface GoogleMapMarkerInstance {
30
+ addListener(eventName: string, handler: (event?: any) => void): GoogleMapListener;
31
+ setLabel(label: string | null): void;
32
+ setMap(map: GoogleMapInstance | null): void;
33
+ setPosition(position: {
34
+ lat: number;
35
+ lng: number;
36
+ }): void;
37
+ setTitle(title: string | null): void;
38
+ }
39
+ export declare function onGoogleMapsAuthFailure(handler: (error: GoogleMapError) => void): () => void;
40
+ export declare function loadGoogleMaps(apiKey: string): Promise<GoogleMapsApi>;
41
+ export {};
@@ -0,0 +1,47 @@
1
+ let t = null, d = null;
2
+ const s = /* @__PURE__ */ new Set();
3
+ let p = !1;
4
+ function l(e, n, a) {
5
+ return { code: e, message: n, cause: a };
6
+ }
7
+ function f() {
8
+ if (p || typeof window > "u") return;
9
+ p = !0;
10
+ const e = window.gm_authFailure;
11
+ window.gm_authFailure = () => {
12
+ const n = l(
13
+ "invalid-api-key",
14
+ "Google Maps rejected the API key. Check its validity and Maps JavaScript API restrictions."
15
+ );
16
+ s.forEach((a) => a(n)), typeof e == "function" && e();
17
+ };
18
+ }
19
+ function g(e) {
20
+ return f(), s.add(e), () => s.delete(e);
21
+ }
22
+ function w(e) {
23
+ if (typeof window > "u" || typeof document > "u")
24
+ return Promise.reject(
25
+ l("ssr-unavailable", "Google Maps can only be initialized in a browser.")
26
+ );
27
+ const n = window.google;
28
+ return n?.maps?.Map ? Promise.resolve(n) : t ? d !== e ? Promise.reject(
29
+ l(
30
+ "loader-conflict",
31
+ "Google Maps is already loading with a different API key on this page."
32
+ )
33
+ ) : t : (d = e, f(), t = new Promise((a, u) => {
34
+ const r = `__vliteGoogleMapsReady_${Date.now()}`, o = document.createElement("script"), c = () => delete window[r];
35
+ window[r] = () => {
36
+ c();
37
+ const i = window.google;
38
+ i?.maps?.Map ? a(i) : u(l("load-failed", "Google Maps loaded without the Maps API."));
39
+ }, o.id = "vlite3-google-maps-script", o.async = !0, o.defer = !0, o.src = `https://maps.googleapis.com/maps/api/js?key=${encodeURIComponent(e)}&callback=${r}&loading=async`, o.onerror = (i) => {
40
+ c(), t = null, d = null, o.remove(), u(l("load-failed", "Google Maps could not be loaded.", i));
41
+ }, document.head.appendChild(o);
42
+ }), t);
43
+ }
44
+ export {
45
+ w as loadGoogleMaps,
46
+ g as onGoogleMapsAuthFailure
47
+ };