vs-datatable 1.1.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import type { DataTableProps } from '@/types/datatable';
2
- declare var __VLS_9: {}, __VLS_12: {}, __VLS_25: number, __VLS_26: {
2
+ declare var __VLS_9: {}, __VLS_12: {}, __VLS_27: number, __VLS_28: {
3
3
  filter: {
4
4
  type: "text";
5
5
  value?: string | undefined;
@@ -30,11 +30,11 @@ declare var __VLS_9: {}, __VLS_12: {}, __VLS_25: number, __VLS_26: {
30
30
  };
31
31
  apply: () => void;
32
32
  clear: () => void;
33
- }, __VLS_37: number, __VLS_38: any;
33
+ }, __VLS_41: number, __VLS_42: any;
34
34
  type __VLS_Slots = {} & {
35
- [K in NonNullable<typeof __VLS_25>]?: (props: typeof __VLS_26) => any;
35
+ [K in NonNullable<typeof __VLS_27>]?: (props: typeof __VLS_28) => any;
36
36
  } & {
37
- [K in NonNullable<typeof __VLS_37>]?: (props: typeof __VLS_38) => any;
37
+ [K in NonNullable<typeof __VLS_41>]?: (props: typeof __VLS_42) => any;
38
38
  } & {
39
39
  filterAreaLeft?: (props: typeof __VLS_9) => any;
40
40
  } & {
@@ -43,6 +43,7 @@ type __VLS_Slots = {} & {
43
43
  declare const __VLS_component: import("vue").DefineComponent<DataTableProps, {
44
44
  toggleRowExpansion: (row: any, index: number) => void;
45
45
  setRowLoading: (rowId: string | number, loading: boolean) => void;
46
+ refreshSticky: () => Promise<void>;
46
47
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
47
48
  [x: string]: any;
48
49
  } & {
@@ -67,6 +68,9 @@ declare const __VLS_component: import("vue").DefineComponent<DataTableProps, {
67
68
  showFooter: boolean;
68
69
  entriesText: string;
69
70
  maxVisiblePages: number;
71
+ stickyHeader: boolean;
72
+ stickyFooter: boolean;
73
+ showPagination: boolean;
70
74
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
71
75
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
72
76
  export default _default;
@@ -10,7 +10,10 @@ type __VLS_Props = {
10
10
  isItemSelectedControlled: boolean;
11
11
  selectedItems: Record<string, unknown>[];
12
12
  tablename: string;
13
- columns: Column[];
13
+ columns: (Column | {
14
+ title: string;
15
+ children: Column[];
16
+ })[];
14
17
  rowKey?: string | ((item: unknown, index: number) => string | number);
15
18
  rowClass?: string | string[] | Record<string, unknown>;
16
19
  cellClass?: string | string[] | Record<string, unknown>;
@@ -11,7 +11,7 @@ interface Props {
11
11
  }
12
12
  declare function applyFilter(): void;
13
13
  declare function clearFilter(): void;
14
- declare var __VLS_35: {
14
+ declare var __VLS_39: {
15
15
  filter: {
16
16
  type: "text";
17
17
  value?: string | undefined;
@@ -44,7 +44,7 @@ declare var __VLS_35: {
44
44
  clear: typeof clearFilter;
45
45
  };
46
46
  type __VLS_Slots = {} & {
47
- custom?: (props: typeof __VLS_35) => any;
47
+ custom?: (props: typeof __VLS_39) => any;
48
48
  };
49
49
  declare const __VLS_component: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
50
50
  "update:modelValue": (val: ColumnFilter) => any;
@@ -0,0 +1,48 @@
1
+ import type { Column, Row } from '@/types';
2
+ type __VLS_Props = {
3
+ columns: Column[];
4
+ rows: Row[];
5
+ expandable?: boolean;
6
+ isItemSelectedControlled?: boolean;
7
+ };
8
+ declare var __VLS_2: `footer-${string}`, __VLS_3: {
9
+ column: {
10
+ hasFooter: boolean;
11
+ footerValue: any;
12
+ formattedValue: string;
13
+ label: string;
14
+ field?: string | undefined;
15
+ width?: string;
16
+ sortable?: boolean;
17
+ isKey?: boolean;
18
+ filter?: {
19
+ type: import("@/types").FilterType;
20
+ operators?: string[];
21
+ asyncOptions?: () => Promise<string[]>;
22
+ filterFn?: (cellValue: any, filterValue: any, row: Record<string, any>) => boolean;
23
+ filterKey?: string;
24
+ custom?: string;
25
+ };
26
+ colHeaderClass?: string | string[] | Record<string, any>;
27
+ sticky?: "left" | "right";
28
+ title?: string;
29
+ children?: Column[];
30
+ hidden?: boolean;
31
+ footerClass?: string | string[] | Record<string, any>;
32
+ footerStyle?: string | string[] | Record<string, any>;
33
+ footerFormatter?: ((value: any, column: Column<any>) => string) | undefined;
34
+ };
35
+ value: any;
36
+ rows: Row[];
37
+ };
38
+ type __VLS_Slots = {} & {
39
+ [K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
40
+ };
41
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
42
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
43
+ export default _default;
44
+ type __VLS_WithSlots<T, S> = T & {
45
+ new (): {
46
+ $slots: S;
47
+ };
48
+ };
@@ -12,9 +12,7 @@ type __VLS_Props = {
12
12
  rows: Row[];
13
13
  headerClass?: string | string[] | Record<string, any>;
14
14
  };
15
- declare var __VLS_2: `header-${string}`, __VLS_3: {
16
- column: Column<any>;
17
- }, __VLS_17: string, __VLS_18: {
15
+ declare var __VLS_14: string | number, __VLS_15: {
18
16
  filter: {
19
17
  type: "text";
20
18
  value?: string | undefined;
@@ -39,7 +37,38 @@ declare var __VLS_2: `header-${string}`, __VLS_3: {
39
37
  type: "custom";
40
38
  operator?: string | undefined;
41
39
  value?: any;
42
- filterKey?: keyof typeof import("../utils/filterFns.js").filterFns | undefined;
40
+ filterKey?: keyof typeof import("../utils/filterFns").filterFns | undefined;
41
+ filterFn?: ((cellValue: any, filterValue: any, row?: any) => boolean) | undefined;
42
+ custom: string;
43
+ };
44
+ apply: () => void;
45
+ clear: () => void;
46
+ }, __VLS_30: string | number, __VLS_31: {
47
+ filter: {
48
+ type: "text";
49
+ value?: string | undefined;
50
+ operator?: "contains" | "doesNotContains" | "equals" | "doesNotEqual" | "startsWith" | "endsWith" | "empty" | "notEmpty" | undefined;
51
+ } | {
52
+ type: "multi-select";
53
+ operator?: "in" | "notIn" | undefined;
54
+ value?: string[] | undefined;
55
+ } | {
56
+ type: "number-range";
57
+ operator?: "equals" | "notEqual" | "greaterThan" | "lessThan" | "between" | "empty" | "notEmpty" | undefined;
58
+ value?: number | null | undefined;
59
+ min?: number | null | undefined;
60
+ max?: number | null | undefined;
61
+ } | {
62
+ type: "date-range";
63
+ operator?: "between" | "equals" | "notEqual" | "before" | "after" | "empty" | "notEmpty" | undefined;
64
+ value?: string | null | undefined;
65
+ start?: string | null | undefined;
66
+ end?: string | null | undefined;
67
+ } | {
68
+ type: "custom";
69
+ operator?: string | undefined;
70
+ value?: any;
71
+ filterKey?: keyof typeof import("../utils/filterFns").filterFns | undefined;
43
72
  filterFn?: ((cellValue: any, filterValue: any, row?: any) => boolean) | undefined;
44
73
  custom: string;
45
74
  };
@@ -47,20 +76,20 @@ declare var __VLS_2: `header-${string}`, __VLS_3: {
47
76
  clear: () => void;
48
77
  };
49
78
  type __VLS_Slots = {} & {
50
- [K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
79
+ [K in NonNullable<typeof __VLS_14>]?: (props: typeof __VLS_15) => any;
51
80
  } & {
52
- [K in NonNullable<typeof __VLS_17>]?: (props: typeof __VLS_18) => any;
81
+ [K in NonNullable<typeof __VLS_30>]?: (props: typeof __VLS_31) => any;
53
82
  };
54
83
  declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
55
84
  applyFilter: (field: string, value: any) => any;
56
85
  clearFilter: (field: string) => any;
57
- toggleAll: (event: Event) => any;
58
86
  "update:filters": (filters: Record<string, any>) => any;
87
+ toggleAll: (event: Event) => any;
59
88
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
60
89
  onApplyFilter?: ((field: string, value: any) => any) | undefined;
61
90
  onClearFilter?: ((field: string) => any) | undefined;
62
- onToggleAll?: ((event: Event) => any) | undefined;
63
91
  "onUpdate:filters"?: ((filters: Record<string, any>) => any) | undefined;
92
+ onToggleAll?: ((event: Event) => any) | undefined;
64
93
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
65
94
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
66
95
  export default _default;
@@ -0,0 +1,70 @@
1
+ import type { Column, Row, SortHelpers } from '@/types';
2
+ type __VLS_Props = {
3
+ column: Column;
4
+ rows: Row[];
5
+ rowspan?: number;
6
+ sortHelpers: SortHelpers;
7
+ filters: Record<string, any>;
8
+ openFilter: string | null;
9
+ headerClass?: string | string[] | Record<string, any>;
10
+ tablename: string;
11
+ };
12
+ declare var __VLS_2: `header-${string}`, __VLS_3: {
13
+ column: Column<any>;
14
+ }, __VLS_17: string, __VLS_18: {
15
+ filter: {
16
+ type: "text";
17
+ value?: string | undefined;
18
+ operator?: "contains" | "doesNotContains" | "equals" | "doesNotEqual" | "startsWith" | "endsWith" | "empty" | "notEmpty" | undefined;
19
+ } | {
20
+ type: "multi-select";
21
+ operator?: "in" | "notIn" | undefined;
22
+ value?: string[] | undefined;
23
+ } | {
24
+ type: "number-range";
25
+ operator?: "equals" | "notEqual" | "greaterThan" | "lessThan" | "between" | "empty" | "notEmpty" | undefined;
26
+ value?: number | null | undefined;
27
+ min?: number | null | undefined;
28
+ max?: number | null | undefined;
29
+ } | {
30
+ type: "date-range";
31
+ operator?: "between" | "equals" | "notEqual" | "before" | "after" | "empty" | "notEmpty" | undefined;
32
+ value?: string | null | undefined;
33
+ start?: string | null | undefined;
34
+ end?: string | null | undefined;
35
+ } | {
36
+ type: "custom";
37
+ operator?: string | undefined;
38
+ value?: any;
39
+ filterKey?: keyof typeof import("../../utils/filterFns.js").filterFns | undefined;
40
+ filterFn?: ((cellValue: any, filterValue: any, row?: any) => boolean) | undefined;
41
+ custom: string;
42
+ };
43
+ apply: () => void;
44
+ clear: () => void;
45
+ };
46
+ type __VLS_Slots = {} & {
47
+ [K in NonNullable<typeof __VLS_2>]?: (props: typeof __VLS_3) => any;
48
+ } & {
49
+ [K in NonNullable<typeof __VLS_17>]?: (props: typeof __VLS_18) => any;
50
+ };
51
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
52
+ applyFilter: (field: string, value: any) => any;
53
+ clearFilter: (field: string) => any;
54
+ openFilter: (field: string) => any;
55
+ closeFilter: (field: string) => any;
56
+ "update:filters": (filters: Record<string, any>) => any;
57
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
58
+ onApplyFilter?: ((field: string, value: any) => any) | undefined;
59
+ onClearFilter?: ((field: string) => any) | undefined;
60
+ onOpenFilter?: ((field: string) => any) | undefined;
61
+ onCloseFilter?: ((field: string) => any) | undefined;
62
+ "onUpdate:filters"?: ((filters: Record<string, any>) => any) | undefined;
63
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
64
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
65
+ export default _default;
66
+ type __VLS_WithSlots<T, S> = T & {
67
+ new (): {
68
+ $slots: S;
69
+ };
70
+ };
@@ -1,12 +1,17 @@
1
- export declare function useDataTable(props: any, emit: any): {
1
+ interface UseStickyTableOptions {
2
+ header?: boolean;
3
+ footer?: boolean;
4
+ maxHeight?: string | number;
5
+ }
6
+ export declare function useDataTable(props: any, emit: any, options?: UseStickyTableOptions): {
2
7
  page: import("vue").Ref<number, number>;
3
8
  totalRecords: import("vue").WritableComputedRef<number, number>;
4
9
  recordRange: import("vue").ComputedRef<import("..").RecordRange>;
5
10
  handlePageChange: (newPage: number) => void;
6
11
  rowsPerPage: import("vue").Ref<any, any>;
7
12
  handleRowsPerPage: (newValue: number) => void;
8
- processedRows: import("vue").ComputedRef<Record<string, unknown>[]>;
9
- paginatedRows: import("vue").ComputedRef<Record<string, unknown>[]>;
13
+ processedRows: import("vue").ComputedRef<any[]>;
14
+ paginatedRows: import("vue").ComputedRef<any[]>;
10
15
  sortHelpers: import("..").SortHelpers;
11
16
  searchQuery: import("vue").Ref<string, string>;
12
17
  onInputTyped: (value: string) => void;
@@ -16,7 +21,13 @@ export declare function useDataTable(props: any, emit: any): {
16
21
  setRowLoading: (rowId: string | number, loading: boolean) => void;
17
22
  isRowLoading: (row: any, index: number) => boolean;
18
23
  filters: import("vue").Ref<Record<string, import("..").ColumnFilter>, Record<string, import("..").ColumnFilter>>;
19
- filteredData: import("vue").ComputedRef<Record<string, unknown>[]>;
24
+ filteredData: import("vue").ComputedRef<any[]>;
20
25
  setFilter: (columnKey: string, filter?: import("..").ColumnFilter, type?: import("..").ColumnFilter["type"]) => void;
21
26
  clearFilter: (columnKey: string, type?: import("..").ColumnFilter["type"]) => void;
27
+ tableContainer: import("vue").Ref<any, any>;
28
+ tableResponsiveRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
29
+ tableRef: import("vue").Ref<any, any>;
30
+ refresh(): void;
31
+ cleanup(): void;
22
32
  };
33
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { Ref } from 'vue';
2
+ import type { Column } from '@/types';
3
+ export declare function useStickyColumns(tableRef: Ref<HTMLElement | null>, columns: Ref<Column[]>, hasGroups?: Ref<boolean>): {
4
+ hasLeftShadow: Ref<boolean, boolean>;
5
+ hasRightShadow: Ref<boolean, boolean>;
6
+ refreshSticky: () => Promise<void>;
7
+ };
@@ -0,0 +1,11 @@
1
+ import { type Ref } from 'vue';
2
+ interface UseStickyFooterOptions {
3
+ enabled?: boolean;
4
+ maxHeight?: string | number;
5
+ debounceMs?: number;
6
+ }
7
+ export declare function useStickyFooter(tableRef: Ref<HTMLElement | null>, options?: UseStickyFooterOptions): {
8
+ refresh: (...args: any[]) => void;
9
+ cleanup: () => void;
10
+ };
11
+ export {};
@@ -0,0 +1,13 @@
1
+ import { type Ref } from 'vue';
2
+ interface UseStickyHeaderOptions {
3
+ enabled?: boolean;
4
+ maxHeight?: string | number;
5
+ }
6
+ /**
7
+ * Enables sticky table header so only the tbody scrolls.
8
+ */
9
+ export declare function useStickyHeader(tableRef: Ref<HTMLElement | null>, options?: UseStickyHeaderOptions): {
10
+ refresh: () => void;
11
+ cleanup: () => void;
12
+ };
13
+ export {};
@@ -0,0 +1,5 @@
1
+ import { type Ref } from 'vue';
2
+ export declare function useStickyResizeSync(tableRef: Ref<HTMLElement | null>, refreshSticky: () => void): {
3
+ refreshSticky: () => void;
4
+ cleanup: () => void;
5
+ };
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .vs-pagination[data-v-b327b254]{display:flex;align-items:center;justify-content:center;gap:var(--vs-spacing-sm);flex-wrap:wrap}.vs-pagination-button[data-v-b327b254]{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--vs-spacing-sm);border:1px solid var(--vs-table-border);background-color:var(--vs-table-bg);color:var(--vs-dark);text-decoration:none;border-radius:var(--vs-border-radius);font-size:var(--vs-font-size-sm);transition:var(--vs-transition-fast);cursor:pointer}.vs-pagination-button[data-v-b327b254]:hover:not(:disabled){background-color:var(--vs-table-hover-bg);border-color:var(--vs-primary)}.vs-pagination-button.vs-active[data-v-b327b254]{background-color:var(--vs-primary);border-color:var(--vs-primary);color:#fff}.vs-pagination-button[data-v-b327b254]:disabled{opacity:.5;cursor:not-allowed}.vs-pagination-nav[data-v-b327b254]{font-weight:var(--vs-font-weight-bold)}.vs-pagination-ellipsis[data-v-b327b254]{color:var(--vs-secondary);padding:0 var(--vs-spacing-sm);font-size:var(--vs-font-size-sm)}@media (max-width: 768px){.vs-pagination-button[data-v-b327b254]{min-width:28px;height:28px;font-size:12px}}.vs-rows-per-page[data-v-0c2bdd9c]{display:flex;align-items:center;gap:8px;font-size:14px}.vs-rows-label[data-v-0c2bdd9c]{white-space:nowrap}.vs-row,.vs-d-flex{display:flex;width:100%}.vs-row-row,.vs-d-flex.vs-row-row{flex-direction:row}.vs-row-column,.vs-d-flex.vs-row-column{flex-direction:column}.vs-row-row-reverse,.vs-d-flex.vs-row-row-reverse{flex-direction:row-reverse}.vs-row-column-reverse,.vs-d-flex.vs-row-column-reverse{flex-direction:column-reverse}.vs-justify-start{justify-content:flex-start}.vs-justify-end{justify-content:flex-end}.vs-justify-center{justify-content:center}.vs-justify-between{justify-content:space-between}.vs-justify-around{justify-content:space-around}.vs-justify-evenly{justify-content:space-evenly}.vs-align-start{align-items:flex-start}.vs-align-end{align-items:flex-end}.vs-align-center{align-items:center}.vs-align-baseline{align-items:baseline}.vs-align-stretch{align-items:stretch}.vs-wrap{flex-wrap:wrap}.vs-nowrap{flex-wrap:nowrap}.vs-gap-0{gap:0}.vs-gap-1{gap:.25rem}.vs-gap-2{gap:.5rem}.vs-gap-3{gap:.75rem}.vs-gap-4{gap:1rem}.vs-gap-5{gap:1.25rem}.vs-gap-6{gap:1.5rem}.vs-col{flex:0 0 auto}.vs-col-span-1{width:8.333333%}.vs-col-span-2{width:16.666667%}.vs-col-span-3{width:25%}.vs-col-span-4{width:33.333333%}.vs-col-span-5{width:41.666667%}.vs-col-span-6{width:50%}.vs-col-span-7{width:58.333333%}.vs-col-span-8{width:66.666667%}.vs-col-span-9{width:75%}.vs-col-span-10{width:83.333333%}.vs-col-span-11{width:91.666667%}.vs-col-span-12{width:100%}.vs-col-offset-1{margin-left:8.333333%}.vs-col-offset-2{margin-left:16.666667%}.vs-col-offset-3{margin-left:25%}.vs-col-offset-4{margin-left:33.333333%}.vs-col-offset-5{margin-left:41.666667%}.vs-col-offset-6{margin-left:50%}.vs-col-offset-7{margin-left:58.333333%}.vs-col-offset-8{margin-left:66.666667%}.vs-col-offset-9{margin-left:75%}.vs-col-offset-10{margin-left:83.333333%}.vs-col-offset-11{margin-left:91.666667%}@media (min-width: 640px){.sm\:vs-row-row{flex-direction:row}.sm\:vs-row-column{flex-direction:column}.sm\:vs-row-row-reverse{flex-direction:row-reverse}.sm\:vs-row-column-reverse{flex-direction:column-reverse}.sm\:vs-justify-start{justify-content:flex-start}.sm\:vs-justify-end{justify-content:flex-end}.sm\:vs-justify-center{justify-content:center}.sm\:vs-justify-between{justify-content:space-between}.sm\:vs-justify-around{justify-content:space-around}.sm\:vs-justify-evenly{justify-content:space-evenly}.sm\:vs-align-start{align-items:flex-start}.sm\:vs-align-end{align-items:flex-end}.sm\:vs-align-center{align-items:center}.sm\:vs-align-baseline{align-items:baseline}.sm\:vs-align-stretch{align-items:stretch}.sm\:vs-wrap{flex-wrap:wrap}.sm\:vs-nowrap{flex-wrap:nowrap}.sm\:vs-gap-0{gap:0}.sm\:vs-gap-1{gap:.25rem}.sm\:vs-gap-2{gap:.5rem}.sm\:vs-gap-3{gap:.75rem}.sm\:vs-gap-4{gap:1rem}.sm\:vs-gap-5{gap:1.25rem}.sm\:vs-gap-6{gap:1.5rem}.sm\:vs-col-span-1{width:8.333333%}.sm\:vs-col-span-2{width:16.666667%}.sm\:vs-col-span-3{width:25%}.sm\:vs-col-span-4{width:33.333333%}.sm\:vs-col-span-5{width:41.666667%}.sm\:vs-col-span-6{width:50%}.sm\:vs-col-span-7{width:58.333333%}.sm\:vs-col-span-8{width:66.666667%}.sm\:vs-col-span-9{width:75%}.sm\:vs-col-span-10{width:83.333333%}.sm\:vs-col-span-11{width:91.666667%}.sm\:vs-col-span-12{width:100%}}@media (min-width: 768px){.md\:vs-row-row{flex-direction:row}.md\:vs-row-column{flex-direction:column}.md\:vs-row-row-reverse{flex-direction:row-reverse}.md\:vs-row-column-reverse{flex-direction:column-reverse}.md\:vs-justify-start{justify-content:flex-start}.md\:vs-justify-end{justify-content:flex-end}.md\:vs-justify-center{justify-content:center}.md\:vs-justify-between{justify-content:space-between}.md\:vs-justify-around{justify-content:space-around}.md\:vs-justify-evenly{justify-content:space-evenly}.md\:vs-align-start{align-items:flex-start}.md\:vs-align-end{align-items:flex-end}.md\:vs-align-center{align-items:center}.md\:vs-align-baseline{align-items:baseline}.md\:vs-align-stretch{align-items:stretch}.md\:vs-wrap{flex-wrap:wrap}.md\:vs-nowrap{flex-wrap:nowrap}.md\:vs-gap-0{gap:0}.md\:vs-gap-1{gap:.25rem}.md\:vs-gap-2{gap:.5rem}.md\:vs-gap-3{gap:.75rem}.md\:vs-gap-4{gap:1rem}.md\:vs-gap-5{gap:1.25rem}.md\:vs-gap-6{gap:1.5rem}.md\:vs-col-span-1{width:8.333333%}.md\:vs-col-span-2{width:16.666667%}.md\:vs-col-span-3{width:25%}.md\:vs-col-span-4{width:33.333333%}.md\:vs-col-span-5{width:41.666667%}.md\:vs-col-span-6{width:50%}.md\:vs-col-span-7{width:58.333333%}.md\:vs-col-span-8{width:66.666667%}.md\:vs-col-span-9{width:75%}.md\:vs-col-span-10{width:83.333333%}.md\:vs-col-span-11{width:91.666667%}.md\:vs-col-span-12{width:100%}}@media (min-width: 1024px){.lg\:vs-row-row{flex-direction:row}.lg\:vs-row-column{flex-direction:column}.lg\:vs-row-row-reverse{flex-direction:row-reverse}.lg\:vs-row-column-reverse{flex-direction:column-reverse}.lg\:vs-justify-start{justify-content:flex-start}.lg\:vs-justify-end{justify-content:flex-end}.lg\:vs-justify-center{justify-content:center}.lg\:vs-justify-between{justify-content:space-between}.lg\:vs-justify-around{justify-content:space-around}.lg\:vs-justify-evenly{justify-content:space-evenly}.lg\:vs-align-start{align-items:flex-start}.lg\:vs-align-end{align-items:flex-end}.lg\:vs-align-center{align-items:center}.lg\:vs-align-baseline{align-items:baseline}.lg\:vs-align-stretch{align-items:stretch}.lg\:vs-wrap{flex-wrap:wrap}.lg\:vs-nowrap{flex-wrap:nowrap}.lg\:vs-gap-0{gap:0}.lg\:vs-gap-1{gap:.25rem}.lg\:vs-gap-2{gap:.5rem}.lg\:vs-gap-3{gap:.75rem}.lg\:vs-gap-4{gap:1rem}.lg\:vs-gap-5{gap:1.25rem}.lg\:vs-gap-6{gap:1.5rem}.lg\:vs-col-span-1{width:8.333333%}.lg\:vs-col-span-2{width:16.666667%}.lg\:vs-col-span-3{width:25%}.lg\:vs-col-span-4{width:33.333333%}.lg\:vs-col-span-5{width:41.666667%}.lg\:vs-col-span-6{width:50%}.lg\:vs-col-span-7{width:58.333333%}.lg\:vs-col-span-8{width:66.666667%}.lg\:vs-col-span-9{width:75%}.lg\:vs-col-span-10{width:83.333333%}.lg\:vs-col-span-11{width:91.666667%}.lg\:vs-col-span-12{width:100%}}@media (min-width: 1280px){.xl\:vs-row-row{flex-direction:row}.xl\:vs-row-column{flex-direction:column}.xl\:vs-row-row-reverse{flex-direction:row-reverse}.xl\:vs-row-column-reverse{flex-direction:column-reverse}.xl\:vs-justify-start{justify-content:flex-start}.xl\:vs-justify-end{justify-content:flex-end}.xl\:vs-justify-center{justify-content:center}.xl\:vs-justify-between{justify-content:space-between}.xl\:vs-justify-around{justify-content:space-around}.xl\:vs-justify-evenly{justify-content:space-evenly}.xl\:vs-align-start{align-items:flex-start}.xl\:vs-align-end{align-items:flex-end}.xl\:vs-align-center{align-items:center}.xl\:vs-align-baseline{align-items:baseline}.xl\:vs-align-stretch{align-items:stretch}.xl\:vs-wrap{flex-wrap:wrap}.xl\:vs-nowrap{flex-wrap:nowrap}.xl\:vs-gap-0{gap:0}.xl\:vs-gap-1{gap:.25rem}.xl\:vs-gap-2{gap:.5rem}.xl\:vs-gap-3{gap:.75rem}.xl\:vs-gap-4{gap:1rem}.xl\:vs-gap-5{gap:1.25rem}.xl\:vs-gap-6{gap:1.5rem}.xl\:vs-col-span-1{width:8.333333%}.xl\:vs-col-span-2{width:16.666667%}.xl\:vs-col-span-3{width:25%}.xl\:vs-col-span-4{width:33.333333%}.xl\:vs-col-span-5{width:41.666667%}.xl\:vs-col-span-6{width:50%}.xl\:vs-col-span-7{width:58.333333%}.xl\:vs-col-span-8{width:66.666667%}.xl\:vs-col-span-9{width:75%}.xl\:vs-col-span-10{width:83.333333%}.xl\:vs-col-span-11{width:91.666667%}.xl\:vs-col-span-12{width:100%}}.vs-header-content[data-v-1776a5d5]{display:flex;align-items:center;gap:var(--vs-spacing-sm)}.vs-header-label[data-v-1776a5d5]{flex:1}.vs-checkbox-column[data-v-149f0fb5]{width:50px;text-align:center}.vs-row-clickable[data-v-149f0fb5]{cursor:pointer}.vs-row-selected[data-v-149f0fb5]{background-color:rgba(var(--vs-primary),.1)}.vs-search .vs-search-input[data-v-60b73b45]{font-size:15px!important}.vs-datatable-toolbar[data-v-8524b8f7]{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--vs-spacing-md, 1rem)}.vs-layout-start[data-v-8524b8f7],.vs-layout-end[data-v-8524b8f7]{display:flex;align-items:center;gap:var(--vs-spacing-sm, .75rem)}.vs-datatable[data-v-4da895c0]{--vs-table-wrapper-overflow: auto}.vs-table-wrapper[data-v-4da895c0]{overflow:var(--vs-table-wrapper-overflow)}.vs-table-footer[data-v-4da895c0]{display:flex;align-items:center;justify-content:space-between;padding:var(--vs-spacing-sm) 0}.vs-table-info[data-v-4da895c0]{color:var(--vs-secondary);font-size:var(--vs-font-size-md)}.vs-search-container[data-v-4da895c0]{margin-bottom:var(--vs-spacing-sm)}:root{--vs-primary: #007bff;--vs-secondary: #6c757d;--vs-success: #28a745;--vs-danger: #dc3545;--vs-warning: #ffc107;--vs-info: #17a2b8;--vs-light: #f8f9fa;--vs-dark: #343a40;--vs-gray-800: #495057;--vs-inactive: #cdcdcd;--vs-table-bg: #ffffff;--vs-table-border: #dee2e6;--vs-table-header-bg: #f8f9fa;--vs-table-header-color: #495057;--vs-table-hover-bg: #f5f5f5;--vs-table-stripe-bg: #fafafa;--vs-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--vs-font-size: 14px;--vs-font-size-sm: 12px;--vs-font-size-lg: 16px;--vs-font-weight-normal: 400;--vs-font-weight-bold: 600;--vs-spacing-xs: 4px;--vs-spacing-sm: 8px;--vs-spacing-md: 16px;--vs-spacing-lg: 24px;--vs-spacing-xl: 32px;--vs-border-radius: 4px;--vs-border-radius-sm: 2px;--vs-border-radius-lg: 8px;--vs-shadow-sm: 0 1px 3px rgba(0, 0, 0, .1);--vs-shadow: 0 2px 4px rgba(0, 0, 0, .1);--vs-shadow-lg: 0 4px 8px rgba(0, 0, 0, .15);--vs-transition: all .2s ease-in-out;--vs-transition-fast: all .15s ease-in-out;--vs-z-dropdown: 1000;--vs-z-sticky: 1020;--vs-z-fixed: 1030;--vs-z-modal: 1040;--vs-z-popover: 1050;--vs-z-tooltip: 1060}.vs-m-xs{margin:var(--vs-spacing-xs)!important}.vs-m-sm{margin:var(--vs-spacing-sm)!important}.vs-m-md{margin:var(--vs-spacing-md)!important}.vs-m-lg{margin:var(--vs-spacing-lg)!important}.vs-m-xl{margin:var(--vs-spacing-xl)!important}.vs-mt-xs{margin-top:var(--vs-spacing-xs)!important}.vs-mt-sm{margin-top:var(--vs-spacing-sm)!important}.vs-mt-md{margin-top:var(--vs-spacing-md)!important}.vs-mt-lg{margin-top:var(--vs-spacing-lg)!important}.vs-mt-xl{margin-top:var(--vs-spacing-xl)!important}.vs-mb-xs{margin-bottom:var(--vs-spacing-xs)!important}.vs-mb-sm{margin-bottom:var(--vs-spacing-sm)!important}.vs-mb-md{margin-bottom:var(--vs-spacing-md)!important}.vs-mb-lg{margin-bottom:var(--vs-spacing-lg)!important}.vs-mb-xl{margin-bottom:var(--vs-spacing-xl)!important}.vs-ml-xs{margin-left:var(--vs-spacing-xs)!important}.vs-ml-sm{margin-left:var(--vs-spacing-sm)!important}.vs-ml-md{margin-left:var(--vs-spacing-md)!important}.vs-ml-lg{margin-left:var(--vs-spacing-lg)!important}.vs-ml-xl{margin-left:var(--vs-spacing-xl)!important}.vs-mr-xs{margin-right:var(--vs-spacing-xs)!important}.vs-mr-sm{margin-right:var(--vs-spacing-sm)!important}.vs-mr-md{margin-right:var(--vs-spacing-md)!important}.vs-mr-lg{margin-right:var(--vs-spacing-lg)!important}.vs-mr-xl{margin-right:var(--vs-spacing-xl)!important}.vs-mx-xs{margin-left:var(--vs-spacing-xs)!important;margin-right:var(--vs-spacing-xs)!important}.vs-mx-sm{margin-left:var(--vs-spacing-sm)!important;margin-right:var(--vs-spacing-sm)!important}.vs-mx-md{margin-left:var(--vs-spacing-md)!important;margin-right:var(--vs-spacing-md)!important}.vs-mx-lg{margin-left:var(--vs-spacing-lg)!important;margin-right:var(--vs-spacing-lg)!important}.vs-mx-xl{margin-left:var(--vs-spacing-xl)!important;margin-right:var(--vs-spacing-xl)!important}.vs-my-xs{margin-top:var(--vs-spacing-xs)!important;margin-bottom:var(--vs-spacing-xs)!important}.vs-my-sm{margin-top:var(--vs-spacing-sm)!important;margin-bottom:var(--vs-spacing-sm)!important}.vs-my-md{margin-top:var(--vs-spacing-md)!important;margin-bottom:var(--vs-spacing-md)!important}.vs-my-lg{margin-top:var(--vs-spacing-lg)!important;margin-bottom:var(--vs-spacing-lg)!important}.vs-my-xl{margin-top:var(--vs-spacing-xl)!important;margin-bottom:var(--vs-spacing-xl)!important}.vs-mx-auto{margin-left:auto!important;margin-right:auto!important}.vs-my-auto{margin-top:auto!important;margin-bottom:auto!important}.vs-ml-auto{margin-left:auto!important}.vs-mr-auto{margin-right:auto!important}.vs-mt-auto{margin-top:auto!important}.vs-mb-auto{margin-bottom:auto!important}.vs-p-xs{padding:var(--vs-spacing-xs)!important}.vs-p-sm{padding:var(--vs-spacing-sm)!important}.vs-p-md{padding:var(--vs-spacing-md)!important}.vs-p-lg{padding:var(--vs-spacing-lg)!important}.vs-p-xl{padding:var(--vs-spacing-xl)!important}.vs-pt-xs{padding-top:var(--vs-spacing-xs)!important}.vs-pt-sm{padding-top:var(--vs-spacing-sm)!important}.vs-pt-md{padding-top:var(--vs-spacing-md)!important}.vs-pt-lg{padding-top:var(--vs-spacing-lg)!important}.vs-pt-xl{padding-top:var(--vs-spacing-xl)!important}.vs-pb-xs{padding-bottom:var(--vs-spacing-xs)!important}.vs-pb-sm{padding-bottom:var(--vs-spacing-sm)!important}.vs-pb-md{padding-bottom:var(--vs-spacing-md)!important}.vs-pb-lg{padding-bottom:var(--vs-spacing-lg)!important}.vs-pb-xl{padding-bottom:var(--vs-spacing-xl)!important}.vs-pl-xs{padding-left:var(--vs-spacing-xs)!important}.vs-pl-sm{padding-left:var(--vs-spacing-sm)!important}.vs-pl-md{padding-left:var(--vs-spacing-md)!important}.vs-pl-lg{padding-left:var(--vs-spacing-lg)!important}.vs-pl-xl{padding-left:var(--vs-spacing-xl)!important}.vs-pr-xs{padding-right:var(--vs-spacing-xs)!important}.vs-pr-sm{padding-right:var(--vs-spacing-sm)!important}.vs-pr-md{padding-right:var(--vs-spacing-md)!important}.vs-pr-lg{padding-right:var(--vs-spacing-lg)!important}.vs-pr-xl{padding-right:var(--vs-spacing-xl)!important}.vs-px-xs{padding-left:var(--vs-spacing-xs)!important;padding-right:var(--vs-spacing-xs)!important}.vs-px-sm{padding-left:var(--vs-spacing-sm)!important;padding-right:var(--vs-spacing-sm)!important}.vs-px-md{padding-left:var(--vs-spacing-md)!important;padding-right:var(--vs-spacing-md)!important}.vs-px-lg{padding-left:var(--vs-spacing-lg)!important;padding-right:var(--vs-spacing-lg)!important}.vs-px-xl{padding-left:var(--vs-spacing-xl)!important;padding-right:var(--vs-spacing-xl)!important}.vs-py-xs{padding-top:var(--vs-spacing-xs)!important;padding-bottom:var(--vs-spacing-xs)!important}.vs-py-sm{padding-top:var(--vs-spacing-sm)!important;padding-bottom:var(--vs-spacing-sm)!important}.vs-py-md{padding-top:var(--vs-spacing-md)!important;padding-bottom:var(--vs-spacing-md)!important}.vs-py-lg{padding-top:var(--vs-spacing-lg)!important;padding-bottom:var(--vs-spacing-lg)!important}.vs-py-xl{padding-top:var(--vs-spacing-xl)!important;padding-bottom:var(--vs-spacing-xl)!important}.vs-m-2{margin:var(--vs-spacing-sm)!important}.vs-p-2{padding:var(--vs-spacing-sm)!important}.vs-ml-2{margin-left:var(--vs-spacing-sm)!important}.vs-mx-2{margin-left:var(--vs-spacing-sm)!important;margin-right:var(--vs-spacing-sm)!important}.vs-mb-5{margin-bottom:var(--vs-spacing-lg)!important}.vs-text-xs,.vs-text-sm{font-size:var(--vs-font-size-sm)!important}.vs-text-base{font-size:var(--vs-font-size)!important}.vs-text-lg,.vs-text-xl{font-size:var(--vs-font-size-lg)!important}.vs-font-normal{font-weight:var(--vs-font-weight-normal)!important}.vs-font-bold{font-weight:var(--vs-font-weight-bold)!important}.vs-text-left{text-align:left!important}.vs-text-center{text-align:center!important}.vs-text-right{text-align:right!important}.vs-uppercase{text-transform:uppercase!important}.vs-lowercase{text-transform:lowercase!important}.vs-capitalize{text-transform:capitalize!important}.vs-text-primary{color:var(--vs-primary)!important}.vs-text-secondary{color:var(--vs-secondary)!important}.vs-text-success{color:var(--vs-success)!important}.vs-text-danger{color:var(--vs-danger)!important}.vs-text-warning{color:var(--vs-warning)!important}.vs-text-info{color:var(--vs-info)!important}.vs-text-light{color:var(--vs-light)!important}.vs-text-dark{color:var(--vs-dark)!important}.vs-bg-primary{background-color:var(--vs-primary)!important}.vs-bg-secondary{background-color:var(--vs-secondary)!important}.vs-bg-success{background-color:var(--vs-success)!important}.vs-bg-danger{background-color:var(--vs-danger)!important}.vs-bg-warning{background-color:var(--vs-warning)!important}.vs-bg-info{background-color:var(--vs-info)!important}.vs-bg-light{background-color:var(--vs-light)!important}.vs-bg-dark{background-color:var(--vs-dark)!important}.vs-d-none{display:none!important}.vs-d-inline{display:inline!important}.vs-d-inline-block{display:inline-block!important}.vs-d-block{display:block!important}.vs-d-flex{display:flex!important}.vs-d-inline-flex{display:inline-flex!important}.vs-d-grid{display:grid!important}.vs-d-table{display:table!important}.vs-flex-row{flex-direction:row!important}.vs-flex-row-reverse{flex-direction:row-reverse!important}.vs-flex-column{flex-direction:column!important}.vs-flex-column-reverse{flex-direction:column-reverse!important}.vs-justify-start{justify-content:flex-start!important}.vs-justify-end{justify-content:flex-end!important}.vs-justify-center{justify-content:center!important}.vs-justify-between{justify-content:space-between!important}.vs-justify-around{justify-content:space-around!important}.vs-align-start{align-items:flex-start!important}.vs-align-end{align-items:flex-end!important}.vs-align-center{align-items:center!important}.vs-align-baseline{align-items:baseline!important}.vs-align-stretch{align-items:stretch!important}.vs-flex-wrap{flex-wrap:wrap!important}.vs-flex-nowrap{flex-wrap:nowrap!important}.vs-flex-wrap-reverse{flex-wrap:wrap-reverse!important}.vs-flex-1{flex:1 1 0%!important}.vs-flex-auto{flex:1 1 auto!important}.vs-flex-none{flex:none!important}.vs-rounded{border-radius:var(--vs-border-radius)!important}.vs-rounded-sm{border-radius:var(--vs-border-radius-sm)!important}.vs-rounded-lg{border-radius:var(--vs-border-radius-lg)!important}.vs-rounded-full{border-radius:50%!important}.vs-rounded-top{border-top-left-radius:var(--vs-border-radius)!important;border-top-right-radius:var(--vs-border-radius)!important}.vs-rounded-bottom{border-bottom-left-radius:var(--vs-border-radius)!important;border-bottom-right-radius:var(--vs-border-radius)!important}.vs-rounded-left{border-top-left-radius:var(--vs-border-radius)!important;border-bottom-left-radius:var(--vs-border-radius)!important}.vs-rounded-right{border-top-right-radius:var(--vs-border-radius)!important;border-bottom-right-radius:var(--vs-border-radius)!important}.vs-shadow-none{box-shadow:none!important}.vs-shadow-sm{box-shadow:var(--vs-shadow-sm)!important}.vs-shadow{box-shadow:var(--vs-shadow)!important}.vs-shadow-lg{box-shadow:var(--vs-shadow-lg)!important}.vs-position-static{position:static!important}.vs-position-relative{position:relative!important}.vs-position-absolute{position:absolute!important}.vs-position-fixed{position:fixed!important}.vs-position-sticky{position:sticky!important}.vs-overflow-auto{overflow:auto!important}.vs-overflow-hidden{overflow:hidden!important}.vs-overflow-visible{overflow:visible!important}.vs-overflow-scroll{overflow:scroll!important}.vs-w-auto{width:auto!important}.vs-w-full{width:100%!important}.vs-w-screen{width:100vw!important}.vs-w-50{width:50%!important}.vs-w-100{width:100%!important}.vs-h-auto{height:auto!important}.vs-h-full{height:100%!important}.vs-h-screen{height:100vh!important}.vs-h-50{height:50%!important}.vs-h-100{height:100%!important}.vs-visible{visibility:visible!important}.vs-invisible{visibility:hidden!important}.vs-cursor-auto{cursor:auto!important}.vs-cursor-pointer{cursor:pointer!important}.vs-cursor-default{cursor:default!important}.vs-cursor-not-allowed{cursor:not-allowed!important}.vs-border{border:1px solid var(--vs-table-border)!important}.vs-border-top{border-top:1px solid var(--vs-table-border)!important}.vs-border-bottom{border-bottom:1px solid var(--vs-table-border)!important}.vs-border-left{border-left:1px solid var(--vs-table-border)!important}.vs-border-right{border-right:1px solid var(--vs-table-border)!important}.vs-z-dropdown{z-index:var(--vs-z-dropdown)!important}.vs-z-sticky{z-index:var(--vs-z-sticky)!important}.vs-z-fixed{z-index:var(--vs-z-fixed)!important}.vs-z-modal{z-index:var(--vs-z-modal)!important}.vs-z-popover{z-index:var(--vs-z-popover)!important}.vs-z-tooltip{z-index:var(--vs-z-tooltip)!important}.vs-transition{transition:var(--vs-transition)!important}.vs-transition-fast{transition:var(--vs-transition-fast)!important}.vs-transition-none{transition:none!important}.vs-datatable{font-family:var(--vs-font-family);font-size:var(--vs-font-size);line-height:1.5;color:var(--vs-dark);background-color:var(--vs-table-bg);box-sizing:border-box}.vs-datatable *,.vs-datatable *:before,.vs-datatable *:after{box-sizing:border-box}.vs-table-container{position:relative;background-color:var(--vs-table-bg);border:1px solid var(--vs-table-border);border-radius:var(--vs-border-radius);overflow:hidden;box-shadow:var(--vs-shadow-sm)}.vs-table{width:100%;margin:0;border-collapse:separate;border-spacing:0;background-color:var(--vs-table-bg)}.vs-table thead{background-color:var(--vs-table-header-bg)}.vs-table thead th{padding:var(--vs-spacing-md);font-weight:var(--vs-font-weight-bold);color:var(--vs-table-header-color);text-align:left;vertical-align:middle;border-bottom:2px solid var(--vs-table-border);position:relative;-webkit-user-select:none;user-select:none}.vs-table thead th:first-child{border-top-left-radius:var(--vs-border-radius)}.vs-table thead th:last-child{border-top-right-radius:var(--vs-border-radius)}.vs-table tbody tr{transition:var(--vs-transition-fast);border-bottom:1px solid var(--vs-table-border)}.vs-table tbody tr:hover{background-color:var(--vs-table-hover-bg)}.vs-table tbody tr:nth-child(2n){background-color:var(--vs-table-stripe-bg)}.vs-table tbody tr:last-child{border-bottom:none}.vs-table tbody tr td{padding:var(--vs-spacing-md);vertical-align:middle;border-right:1px solid var(--vs-table-border)}.vs-table tbody tr td:last-child{border-right:none}.vs-sortable{cursor:pointer;position:relative}.vs-sortable:hover{background-color:rgba(var(--vs-primary),.1)}.vs-sortable .vs-sort-icons{display:inline-flex;flex-direction:column;margin-left:var(--vs-spacing-sm);vertical-align:middle}.vs-sortable .vs-sort-icons .vs-sort-icon{font-size:10px;line-height:1;color:var(--vs-secondary);transition:var(--vs-transition-fast);margin:-8px 0}.vs-sortable .vs-sort-icons .vs-sort-icon.vs-sort-asc,.vs-sortable .vs-sort-icons .vs-sort-icon.vs-sort-desc{color:var(--vs-primary)}.vs-sortable .vs-sort-icons .vs-sort-icon svg{fill:var(--vs-inactive)}.vs-sortable .vs-sort-icons .vs-sort-icon.vs-active svg{fill:currentColor}.vs-sortable .vs-sort-priority{display:inline-block;background-color:var(--vs-primary);color:#fff;font-size:10px;padding:2px 6px;border-radius:var(--vs-border-radius-sm);margin-left:var(--vs-spacing-sm);font-weight:var(--vs-font-weight-bold)}.vs-loading{display:flex;align-items:center;justify-content:center;padding:var(--vs-spacing-xl);color:var(--vs-secondary)}.vs-loading .vs-spinner{width:20px;height:20px;border:2px solid var(--vs-table-border);border-top:2px solid var(--vs-primary);border-radius:50%;animation:vs-spin 1s linear infinite;margin-right:var(--vs-spacing-sm)}@keyframes vs-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.vs-no-data{text-align:center;padding:var(--vs-spacing-xl);color:var(--vs-secondary)}.vs-no-data .vs-no-data-icon{width:60px;height:60px;margin:0 auto var(--vs-spacing-md);opacity:.5}.vs-no-data .vs-no-data-message{font-size:var(--vs-font-size-lg);font-weight:var(--vs-font-weight-bold);margin-bottom:var(--vs-spacing-sm)}.vs-no-data .vs-no-data-description{font-size:var(--vs-font-size-sm);color:var(--vs-secondary)}.vs-search{position:relative;margin-bottom:var(--vs-spacing-md)}.vs-search .vs-search-input{width:100%;padding:var(--vs-spacing-sm) var(--vs-spacing-md);padding-left:50px;border:1px solid var(--vs-table-border);border-radius:var(--vs-border-radius);font-size:var(--vs-font-size);transition:var(--vs-transition-fast)}.vs-search .vs-search-input:focus{outline:none;border-color:var(--vs-primary);box-shadow:0 0 0 2px rgba(var(--vs-primary),.25)}.vs-search .vs-search-icon{position:absolute;left:var(--vs-spacing-md);top:50%;transform:translateY(-50%);color:var(--vs-secondary);pointer-events:none}.vs-pagination{display:flex;align-items:center;justify-content:center;gap:var(--vs-spacing-sm);margin-top:var(--vs-spacing-md)}.vs-pagination .vs-pagination-button{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--vs-spacing-sm);border:1px solid var(--vs-table-border);background-color:var(--vs-table-bg);color:var(--vs-dark);text-decoration:none;border-radius:var(--vs-border-radius);font-size:var(--vs-font-size-sm);transition:var(--vs-transition-fast);cursor:pointer}.vs-pagination .vs-pagination-button:hover:not(:disabled){background-color:var(--vs-table-hover-bg);border-color:var(--vs-primary)}.vs-pagination .vs-pagination-button.vs-active{background-color:var(--vs-primary);border-color:var(--vs-primary);color:#fff}.vs-pagination .vs-pagination-button:disabled{opacity:.5;cursor:not-allowed}.vs-pagination .vs-pagination-ellipsis{color:var(--vs-secondary);padding:0 var(--vs-spacing-sm)}.vs-layout-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;width:100%;gap:1rem}.vs-layout-row .vs-layout-start,.vs-layout-row .vs-layout-end{display:flex;align-items:center;gap:.5rem}@media (max-width: 768px){.vs-layout-row{flex-direction:column;align-items:stretch}.vs-layout-row .vs-layout-start,.vs-layout-row .vs-layout-end{justify-content:flex-start;width:100%}}.export-dropdown{position:relative;display:inline-block}.export-btn{background:#2d6cdf;color:#fff;border:none;padding:.5rem 1rem;border-radius:6px;cursor:pointer;font-size:14px}.export-menu{display:none;position:absolute;right:0;margin-top:.25rem;background:#fff;border:1px solid #ddd;border-radius:6px;list-style:none;padding:0;min-width:160px;box-shadow:0 4px 8px #0000001a;z-index:1;flex-direction:column}.export-menu li{width:100%}.export-menu button{background:none;border:none;width:100%;padding:.75rem 1rem;text-align:left;cursor:pointer;font-size:14px}.export-menu button:hover{background:#f5f5f5}.export-menu.active{display:flex}.vs-checkbox{display:inline-flex;align-items:center;cursor:pointer}.vs-checkbox input[type=checkbox]{width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--vs-primary)}.vs-checkbox label{margin:0;cursor:pointer;font-size:var(--vs-font-size-sm)}.vs-footer-left{display:flex;align-items:center;gap:12px}.vs-divider{width:1px;height:20px;background-color:#ccc}.vs-rows-per-page{display:flex;align-items:center;gap:8px;font-size:14px;color:#495057}.vs-items-dropdown{padding:6px 8px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px}.vs-expand-column{width:40px;text-align:center}.vs-expand-btn{background:transparent;border:none;cursor:pointer;font-size:1.1rem}.vs-row-expanded{background:#f9f9f9}.vs-table tbody tr.vs-row-expanded td.vs-expanded-cell{padding:0!important;vertical-align:top!important;border-right:none}.vs-expanded-content{padding:var(--vs-spacing-md);background-color:#ededed}.vs-loader-bar{width:100%;height:4px;background:#e5e7eb;overflow:hidden;position:relative;border-radius:2px;top:0;left:0;margin:0}.vs-loader-bar-inner{width:40%;height:100%;background:var(--vs-primary);position:absolute;left:-40%;animation:loader-slide 1.2s infinite linear;border-radius:2px}@keyframes loader-slide{0%{left:-40%}50%{left:60%}to{left:100%}}.vs-filter-dropdown{background:#fff;border:1px solid #ddd;padding:.75rem;border-radius:6px;box-shadow:0 2px 12px #0000001f;min-width:200px}.vs-filter-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.vs-input,.vs-multiselect-search{padding:.35rem .5rem;border:1px solid #ccc;border-radius:4px}.vs-operator-select{padding:.35rem .5rem;border:1px solid #ccc;border-radius:4px;gap:.55rem}.vs-multiselect{width:100%}.vs-multiselect-actions{display:flex;justify-content:space-between;padding:.5rem;border-bottom:1px solid #eee;background:#fafafa}.vs-multiselect-actions button{font-size:.85rem;background:transparent;border:none;color:#2d6cdf;cursor:pointer}.vs-multiselect-search{width:var(vs-w-full);padding:var(--vs-spacing-sm);border-bottom:1px solid #eee;outline:none}.vs-multiselect-options{list-style:none;padding:0;margin:0;max-height:220px;overflow-y:auto}.vs-multiselect-options li{display:flex;align-items:center;justify-content:space-between;padding:.5rem;cursor:pointer;transition:background .15s}.vs-multiselect-options li:hover{background:#f9f9f9}.vs-multiselect-options li.selected{background:#f0f6ff;color:#2d6cdf}.option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.check-icon{width:18px;height:18px;stroke-width:2.5}.vs-btn{padding:.35rem .75rem;border-radius:4px;cursor:pointer}.vs-btn-primary{background:#2d6cdf;color:#fff;border:none}.vs-btn-secondary{background:#f5f5f5;border:1px solid #ccc}.vs-column-filter{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer}.vs-column-filter.is-active{background-color:#2980b90f;color:var(--vs-text-primary, #2d6cdf)}.vs-column-filter.in-active{color:var(--vs-inactive)}.vs-header-content{display:flex;align-items:center;gap:8px}@media (max-width: 768px){.vs-table-container{overflow-x:auto}.vs-table{min-width:600px}.vs-pagination{flex-wrap:wrap;gap:var(--vs-spacing-xs)}.vs-pagination .vs-pagination-button{min-width:28px;height:28px;font-size:12px}}.vs-text-center{text-align:center}.vs-text-left{text-align:left}.vs-text-right{text-align:right}.vs-text-muted{color:var(--vs-secondary)}.vs-text-primary{color:var(--vs-primary)}.vs-text-success{color:var(--vs-success)}.vs-text-danger{color:var(--vs-danger)}.vs-text-warning{color:var(--vs-warning)}.vs-bg-primary{background-color:var(--vs-primary)}.vs-bg-success{background-color:var(--vs-success)}.vs-bg-danger{background-color:var(--vs-danger)}.vs-bg-warning{background-color:var(--vs-warning)}.vs-bg-light{background-color:var(--vs-light)}.vs-border{border:1px solid var(--vs-table-border)}.vs-border-top{border-top:1px solid var(--vs-table-border)}.vs-border-bottom{border-bottom:1px solid var(--vs-table-border)}.vs-border-left{border-left:1px solid var(--vs-table-border)}.vs-border-right{border-right:1px solid var(--vs-table-border)}.vs-rounded{border-radius:var(--vs-border-radius)}.vs-rounded-sm{border-radius:var(--vs-border-radius-sm)}.vs-rounded-lg{border-radius:var(--vs-border-radius-lg)}.vs-shadow{box-shadow:var(--vs-shadow)}.vs-shadow-sm{box-shadow:var(--vs-shadow-sm)}.vs-shadow-lg{box-shadow:var(--vs-shadow-lg)}.vs-fade-in{animation:vs-fade-in .3s ease-in-out}@keyframes vs-fade-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.vs-slide-in{animation:vs-slide-in .3s ease-in-out}@keyframes vs-slide-in{0%{transform:translate(-20px);opacity:0}to{transform:translate(0);opacity:1}}.vs-datatable.vs-theme-dark{--vs-primary: #0d6efd;--vs-secondary: #6c757d;--vs-success: #198754;--vs-danger: #dc3545;--vs-warning: #ffc107;--vs-info: #0dcaf0;--vs-light: #f8f9fa;--vs-dark: #212529;--vs-table-bg: #1a1a1a;--vs-table-border: #333333;--vs-table-header-bg: #2d2d2d;--vs-table-header-color: #ffffff;--vs-table-hover-bg: #333333;--vs-table-stripe-bg: #222222;color:#fff;background-color:var(--vs-table-bg)}.vs-datatable.vs-theme-minimal{--vs-primary: #000000;--vs-secondary: #666666;--vs-success: #000000;--vs-danger: #000000;--vs-warning: #000000;--vs-info: #000000;--vs-light: #f9f9f9;--vs-dark: #000000;--vs-table-bg: #ffffff;--vs-table-border: #e0e0e0;--vs-table-header-bg: #ffffff;--vs-table-header-color: #000000;--vs-table-hover-bg: #f5f5f5;--vs-table-stripe-bg: #ffffff}.vs-datatable.vs-theme-minimal .vs-table{border:none;box-shadow:none}.vs-datatable.vs-theme-minimal .vs-table thead th{border-bottom:2px solid var(--vs-table-border);font-weight:500}.vs-datatable.vs-theme-minimal .vs-table tbody tr{border-bottom:1px solid var(--vs-table-border)}.vs-datatable.vs-theme-colorful{--vs-primary: #e91e63;--vs-secondary: #9c27b0;--vs-success: #4caf50;--vs-danger: #f44336;--vs-warning: #ff9800;--vs-info: #2196f3;--vs-light: #f3e5f5;--vs-dark: #2e2e2e;--vs-table-bg: #ffffff;--vs-table-border: #e1bee7;--vs-table-header-bg: linear-gradient(135deg, #e91e63, #9c27b0);--vs-table-header-color: #ffffff;--vs-table-hover-bg: #f3e5f5;--vs-table-stripe-bg: #fafafa}.vs-datatable.vs-theme-colorful .vs-table thead th{background:var(--vs-table-header-bg);color:var(--vs-table-header-color);font-weight:600}.vs-datatable.vs-theme-colorful .vs-pagination-button.vs-active{background:linear-gradient(135deg,var(--vs-primary),var(--vs-secondary))}.vs-datatable.vs-theme-corporate{--vs-primary: #1e3a8a;--vs-secondary: #64748b;--vs-success: #059669;--vs-danger: #dc2626;--vs-warning: #d97706;--vs-info: #0891b2;--vs-light: #f8fafc;--vs-dark: #1e293b;--vs-table-bg: #ffffff;--vs-table-border: #e2e8f0;--vs-table-header-bg: #f1f5f9;--vs-table-header-color: #334155;--vs-table-hover-bg: #f8fafc;--vs-table-stripe-bg: #ffffff;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.vs-datatable.vs-theme-corporate .vs-table{border-radius:8px;overflow:hidden;box-shadow:0 1px 3px #0000001a}.vs-datatable.vs-theme-corporate .vs-table thead th{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:16px 20px}.vs-datatable.vs-theme-corporate .vs-table tbody td{padding:16px 20px;font-size:14px}.vs-datatable.vs-theme-compact{--vs-spacing-xs: 2px;--vs-spacing-sm: 4px;--vs-spacing-md: 8px;--vs-spacing-lg: 12px;--vs-spacing-xl: 16px;--vs-font-size: 12px;--vs-font-size-sm: 10px;--vs-font-size-lg: 14px}.vs-datatable.vs-theme-compact .vs-table thead th{padding:var(--vs-spacing-sm) var(--vs-spacing-md);font-size:var(--vs-font-size-sm)}.vs-datatable.vs-theme-compact .vs-table tbody td{padding:var(--vs-spacing-sm) var(--vs-spacing-md);font-size:var(--vs-font-size)}.vs-datatable.vs-theme-compact .vs-pagination-button{min-width:24px;height:24px;font-size:var(--vs-font-size-sm)}.vs-datatable.vs-theme-rounded{--vs-border-radius: 12px;--vs-border-radius-sm: 6px;--vs-border-radius-lg: 16px}.vs-datatable.vs-theme-rounded .vs-table-container{border-radius:var(--vs-border-radius);overflow:hidden}.vs-datatable.vs-theme-rounded .vs-table thead th:first-child{border-top-left-radius:var(--vs-border-radius)}.vs-datatable.vs-theme-rounded .vs-table thead th:last-child{border-top-right-radius:var(--vs-border-radius)}.vs-datatable.vs-theme-rounded .vs-pagination-button{border-radius:var(--vs-border-radius-sm)}.vs-datatable.vs-theme-brand{--vs-primary: #ff6b35;--vs-secondary: #004e89;--vs-success: #00a896;--vs-danger: #e63946;--vs-warning: #f77f00;--vs-info: #06a77d}.vs-datatable.vs-theme-brand .vs-table-container{border:2px solid var(--vs-primary);border-radius:16px;box-shadow:0 8px 32px #ff6b3533}.vs-datatable.vs-theme-brand .vs-table thead th{background:linear-gradient(135deg,var(--vs-primary),var(--vs-secondary));color:#fff;font-weight:700;text-shadow:0 1px 2px rgba(0,0,0,.1)}.vs-datatable.vs-theme-brand .vs-pagination-button.vs-active{background:var(--vs-primary);transform:scale(1.05)}.vs-datatable.vs-theme-brand .vs-pagination-button:hover:not(:disabled){border-color:var(--vs-primary);transform:translateY(-1px)}
1
+ .vs-pagination[data-v-b327b254]{display:flex;align-items:center;justify-content:center;gap:var(--vs-spacing-sm);flex-wrap:wrap}.vs-pagination-button[data-v-b327b254]{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--vs-spacing-sm);border:1px solid var(--vs-table-border);background-color:var(--vs-table-bg);color:var(--vs-dark);text-decoration:none;border-radius:var(--vs-border-radius);font-size:var(--vs-font-size-sm);transition:var(--vs-transition-fast);cursor:pointer}.vs-pagination-button[data-v-b327b254]:hover:not(:disabled){background-color:var(--vs-table-hover-bg);border-color:var(--vs-primary)}.vs-pagination-button.vs-active[data-v-b327b254]{background-color:var(--vs-primary);border-color:var(--vs-primary);color:#fff}.vs-pagination-button[data-v-b327b254]:disabled{opacity:.5;cursor:not-allowed}.vs-pagination-nav[data-v-b327b254]{font-weight:var(--vs-font-weight-bold)}.vs-pagination-ellipsis[data-v-b327b254]{color:var(--vs-secondary);padding:0 var(--vs-spacing-sm);font-size:var(--vs-font-size-sm)}@media (max-width: 768px){.vs-pagination-button[data-v-b327b254]{min-width:28px;height:28px;font-size:12px}}.vs-rows-per-page[data-v-0c2bdd9c]{display:flex;align-items:center;gap:8px;font-size:14px}.vs-rows-label[data-v-0c2bdd9c]{white-space:nowrap}.vs-row,.vs-d-flex{display:flex;width:100%}.vs-row-row,.vs-d-flex.vs-row-row{flex-direction:row}.vs-row-column,.vs-d-flex.vs-row-column{flex-direction:column}.vs-row-row-reverse,.vs-d-flex.vs-row-row-reverse{flex-direction:row-reverse}.vs-row-column-reverse,.vs-d-flex.vs-row-column-reverse{flex-direction:column-reverse}.vs-justify-start{justify-content:flex-start}.vs-justify-end{justify-content:flex-end}.vs-justify-center{justify-content:center}.vs-justify-between{justify-content:space-between}.vs-justify-around{justify-content:space-around}.vs-justify-evenly{justify-content:space-evenly}.vs-align-start{align-items:flex-start}.vs-align-end{align-items:flex-end}.vs-align-center{align-items:center}.vs-align-baseline{align-items:baseline}.vs-align-stretch{align-items:stretch}.vs-wrap{flex-wrap:wrap}.vs-nowrap{flex-wrap:nowrap}.vs-gap-0{gap:0}.vs-gap-1{gap:.25rem}.vs-gap-2{gap:.5rem}.vs-gap-3{gap:.75rem}.vs-gap-4{gap:1rem}.vs-gap-5{gap:1.25rem}.vs-gap-6{gap:1.5rem}.vs-col{flex:0 0 auto}.vs-col-span-1{width:8.333333%}.vs-col-span-2{width:16.666667%}.vs-col-span-3{width:25%}.vs-col-span-4{width:33.333333%}.vs-col-span-5{width:41.666667%}.vs-col-span-6{width:50%}.vs-col-span-7{width:58.333333%}.vs-col-span-8{width:66.666667%}.vs-col-span-9{width:75%}.vs-col-span-10{width:83.333333%}.vs-col-span-11{width:91.666667%}.vs-col-span-12{width:100%}.vs-col-offset-1{margin-left:8.333333%}.vs-col-offset-2{margin-left:16.666667%}.vs-col-offset-3{margin-left:25%}.vs-col-offset-4{margin-left:33.333333%}.vs-col-offset-5{margin-left:41.666667%}.vs-col-offset-6{margin-left:50%}.vs-col-offset-7{margin-left:58.333333%}.vs-col-offset-8{margin-left:66.666667%}.vs-col-offset-9{margin-left:75%}.vs-col-offset-10{margin-left:83.333333%}.vs-col-offset-11{margin-left:91.666667%}@media (min-width: 640px){.sm\:vs-row-row{flex-direction:row}.sm\:vs-row-column{flex-direction:column}.sm\:vs-row-row-reverse{flex-direction:row-reverse}.sm\:vs-row-column-reverse{flex-direction:column-reverse}.sm\:vs-justify-start{justify-content:flex-start}.sm\:vs-justify-end{justify-content:flex-end}.sm\:vs-justify-center{justify-content:center}.sm\:vs-justify-between{justify-content:space-between}.sm\:vs-justify-around{justify-content:space-around}.sm\:vs-justify-evenly{justify-content:space-evenly}.sm\:vs-align-start{align-items:flex-start}.sm\:vs-align-end{align-items:flex-end}.sm\:vs-align-center{align-items:center}.sm\:vs-align-baseline{align-items:baseline}.sm\:vs-align-stretch{align-items:stretch}.sm\:vs-wrap{flex-wrap:wrap}.sm\:vs-nowrap{flex-wrap:nowrap}.sm\:vs-gap-0{gap:0}.sm\:vs-gap-1{gap:.25rem}.sm\:vs-gap-2{gap:.5rem}.sm\:vs-gap-3{gap:.75rem}.sm\:vs-gap-4{gap:1rem}.sm\:vs-gap-5{gap:1.25rem}.sm\:vs-gap-6{gap:1.5rem}.sm\:vs-col-span-1{width:8.333333%}.sm\:vs-col-span-2{width:16.666667%}.sm\:vs-col-span-3{width:25%}.sm\:vs-col-span-4{width:33.333333%}.sm\:vs-col-span-5{width:41.666667%}.sm\:vs-col-span-6{width:50%}.sm\:vs-col-span-7{width:58.333333%}.sm\:vs-col-span-8{width:66.666667%}.sm\:vs-col-span-9{width:75%}.sm\:vs-col-span-10{width:83.333333%}.sm\:vs-col-span-11{width:91.666667%}.sm\:vs-col-span-12{width:100%}}@media (min-width: 768px){.md\:vs-row-row{flex-direction:row}.md\:vs-row-column{flex-direction:column}.md\:vs-row-row-reverse{flex-direction:row-reverse}.md\:vs-row-column-reverse{flex-direction:column-reverse}.md\:vs-justify-start{justify-content:flex-start}.md\:vs-justify-end{justify-content:flex-end}.md\:vs-justify-center{justify-content:center}.md\:vs-justify-between{justify-content:space-between}.md\:vs-justify-around{justify-content:space-around}.md\:vs-justify-evenly{justify-content:space-evenly}.md\:vs-align-start{align-items:flex-start}.md\:vs-align-end{align-items:flex-end}.md\:vs-align-center{align-items:center}.md\:vs-align-baseline{align-items:baseline}.md\:vs-align-stretch{align-items:stretch}.md\:vs-wrap{flex-wrap:wrap}.md\:vs-nowrap{flex-wrap:nowrap}.md\:vs-gap-0{gap:0}.md\:vs-gap-1{gap:.25rem}.md\:vs-gap-2{gap:.5rem}.md\:vs-gap-3{gap:.75rem}.md\:vs-gap-4{gap:1rem}.md\:vs-gap-5{gap:1.25rem}.md\:vs-gap-6{gap:1.5rem}.md\:vs-col-span-1{width:8.333333%}.md\:vs-col-span-2{width:16.666667%}.md\:vs-col-span-3{width:25%}.md\:vs-col-span-4{width:33.333333%}.md\:vs-col-span-5{width:41.666667%}.md\:vs-col-span-6{width:50%}.md\:vs-col-span-7{width:58.333333%}.md\:vs-col-span-8{width:66.666667%}.md\:vs-col-span-9{width:75%}.md\:vs-col-span-10{width:83.333333%}.md\:vs-col-span-11{width:91.666667%}.md\:vs-col-span-12{width:100%}}@media (min-width: 1024px){.lg\:vs-row-row{flex-direction:row}.lg\:vs-row-column{flex-direction:column}.lg\:vs-row-row-reverse{flex-direction:row-reverse}.lg\:vs-row-column-reverse{flex-direction:column-reverse}.lg\:vs-justify-start{justify-content:flex-start}.lg\:vs-justify-end{justify-content:flex-end}.lg\:vs-justify-center{justify-content:center}.lg\:vs-justify-between{justify-content:space-between}.lg\:vs-justify-around{justify-content:space-around}.lg\:vs-justify-evenly{justify-content:space-evenly}.lg\:vs-align-start{align-items:flex-start}.lg\:vs-align-end{align-items:flex-end}.lg\:vs-align-center{align-items:center}.lg\:vs-align-baseline{align-items:baseline}.lg\:vs-align-stretch{align-items:stretch}.lg\:vs-wrap{flex-wrap:wrap}.lg\:vs-nowrap{flex-wrap:nowrap}.lg\:vs-gap-0{gap:0}.lg\:vs-gap-1{gap:.25rem}.lg\:vs-gap-2{gap:.5rem}.lg\:vs-gap-3{gap:.75rem}.lg\:vs-gap-4{gap:1rem}.lg\:vs-gap-5{gap:1.25rem}.lg\:vs-gap-6{gap:1.5rem}.lg\:vs-col-span-1{width:8.333333%}.lg\:vs-col-span-2{width:16.666667%}.lg\:vs-col-span-3{width:25%}.lg\:vs-col-span-4{width:33.333333%}.lg\:vs-col-span-5{width:41.666667%}.lg\:vs-col-span-6{width:50%}.lg\:vs-col-span-7{width:58.333333%}.lg\:vs-col-span-8{width:66.666667%}.lg\:vs-col-span-9{width:75%}.lg\:vs-col-span-10{width:83.333333%}.lg\:vs-col-span-11{width:91.666667%}.lg\:vs-col-span-12{width:100%}}@media (min-width: 1280px){.xl\:vs-row-row{flex-direction:row}.xl\:vs-row-column{flex-direction:column}.xl\:vs-row-row-reverse{flex-direction:row-reverse}.xl\:vs-row-column-reverse{flex-direction:column-reverse}.xl\:vs-justify-start{justify-content:flex-start}.xl\:vs-justify-end{justify-content:flex-end}.xl\:vs-justify-center{justify-content:center}.xl\:vs-justify-between{justify-content:space-between}.xl\:vs-justify-around{justify-content:space-around}.xl\:vs-justify-evenly{justify-content:space-evenly}.xl\:vs-align-start{align-items:flex-start}.xl\:vs-align-end{align-items:flex-end}.xl\:vs-align-center{align-items:center}.xl\:vs-align-baseline{align-items:baseline}.xl\:vs-align-stretch{align-items:stretch}.xl\:vs-wrap{flex-wrap:wrap}.xl\:vs-nowrap{flex-wrap:nowrap}.xl\:vs-gap-0{gap:0}.xl\:vs-gap-1{gap:.25rem}.xl\:vs-gap-2{gap:.5rem}.xl\:vs-gap-3{gap:.75rem}.xl\:vs-gap-4{gap:1rem}.xl\:vs-gap-5{gap:1.25rem}.xl\:vs-gap-6{gap:1.5rem}.xl\:vs-col-span-1{width:8.333333%}.xl\:vs-col-span-2{width:16.666667%}.xl\:vs-col-span-3{width:25%}.xl\:vs-col-span-4{width:33.333333%}.xl\:vs-col-span-5{width:41.666667%}.xl\:vs-col-span-6{width:50%}.xl\:vs-col-span-7{width:58.333333%}.xl\:vs-col-span-8{width:66.666667%}.xl\:vs-col-span-9{width:75%}.xl\:vs-col-span-10{width:83.333333%}.xl\:vs-col-span-11{width:91.666667%}.xl\:vs-col-span-12{width:100%}}.vs-header-content[data-v-69e5e343]{display:flex;align-items:center;gap:.25rem}.vs-sort-icon[data-v-69e5e343]{font-size:.8rem;opacity:.3;cursor:pointer}.vs-sort-icon.vs-active[data-v-69e5e343]{opacity:1;color:var(--vs-primary)}.vs-header-content[data-v-f82c670c]{display:flex;align-items:center;gap:var(--vs-spacing-sm)}.vs-header-label[data-v-f82c670c]{flex:1}.vs-checkbox-column[data-v-d11afcd0]{width:50px;text-align:center}.vs-row-clickable[data-v-d11afcd0]{cursor:pointer}.vs-row-selected[data-v-d11afcd0]{background-color:rgba(var(--vs-primary),.1)}.vs-search .vs-search-input[data-v-60b73b45]{font-size:15px!important}.vs-datatable-toolbar[data-v-8a8215b9]{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--vs-spacing-md, 1rem)}.vs-layout-start[data-v-8a8215b9],.vs-layout-end[data-v-8a8215b9]{display:flex;align-items:center;gap:var(--vs-spacing-sm, .75rem)}.vs-search-container[data-v-8a8215b9]{margin-bottom:var(--vs-spacing-sm)}.vs-footer-row[data-v-f3b614d3]{background:var(--vs-table-footer-bg, #fafafa);font-weight:600;border-top:1px solid var(--vs-border-color, #ddd)}.vs-footer-cell[data-v-f3b614d3]{padding:.75rem;color:var(--vs-table-footer-text, #333);white-space:nowrap;background:var(--vs-table-footer-bg, #fff)}.vs-datatable[data-v-6e690e26]{--vs-table-wrapper-overflow: auto}.vs-table-wrapper[data-v-6e690e26]{overflow:var(--vs-table-wrapper-overflow)}.vs-table tfoot[data-v-6e690e26]{border-top:1px solid var(--vs-border-color, #ddd);background-color:var(--vs-table-footer-bg, var(--vs-table-header-bg, #fff))}.vs-table-info[data-v-6e690e26]{color:var(--vs-secondary);font-size:var(--vs-font-size-md)}:root{--vs-primary: #007bff;--vs-secondary: #6c757d;--vs-success: #28a745;--vs-danger: #dc3545;--vs-warning: #ffc107;--vs-info: #17a2b8;--vs-light: #f8f9fa;--vs-dark: #343a40;--vs-gray-800: #495057;--vs-inactive: #cdcdcd;--vs-table-bg: #ffffff;--vs-table-border: #dee2e6;--vs-table-header-bg: #f8f9fa;--vs-table-header-color: #495057;--vs-table-footer-bg: #f8f9fa;--vs-table-footer-color: #495057;--vs-table-hover-bg: #f5f5f5;--vs-table-stripe-bg: #fafafa;--vs-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--vs-font-size: 14px;--vs-font-size-sm: 12px;--vs-font-size-lg: 16px;--vs-font-weight-normal: 400;--vs-font-weight-bold: 600;--vs-spacing-xs: 4px;--vs-spacing-sm: 8px;--vs-spacing-md: 16px;--vs-spacing-lg: 24px;--vs-spacing-xl: 32px;--vs-border-radius: 4px;--vs-border-radius-sm: 2px;--vs-border-radius-lg: 8px;--vs-shadow-sm: 0 1px 3px rgba(0, 0, 0, .1);--vs-shadow: 0 2px 4px rgba(0, 0, 0, .1);--vs-shadow-lg: 0 4px 8px rgba(0, 0, 0, .15);--vs-transition: all .2s ease-in-out;--vs-transition-fast: all .15s ease-in-out;--vs-z-dropdown: 1000;--vs-z-sticky: 1020;--vs-z-fixed: 1030;--vs-z-modal: 1040;--vs-z-popover: 1050;--vs-z-tooltip: 1060}.vs-m-xs{margin:var(--vs-spacing-xs)!important}.vs-m-sm{margin:var(--vs-spacing-sm)!important}.vs-m-md{margin:var(--vs-spacing-md)!important}.vs-m-lg{margin:var(--vs-spacing-lg)!important}.vs-m-xl{margin:var(--vs-spacing-xl)!important}.vs-mt-xs{margin-top:var(--vs-spacing-xs)!important}.vs-mt-sm{margin-top:var(--vs-spacing-sm)!important}.vs-mt-md{margin-top:var(--vs-spacing-md)!important}.vs-mt-lg{margin-top:var(--vs-spacing-lg)!important}.vs-mt-xl{margin-top:var(--vs-spacing-xl)!important}.vs-mb-xs{margin-bottom:var(--vs-spacing-xs)!important}.vs-mb-sm{margin-bottom:var(--vs-spacing-sm)!important}.vs-mb-md{margin-bottom:var(--vs-spacing-md)!important}.vs-mb-lg{margin-bottom:var(--vs-spacing-lg)!important}.vs-mb-xl{margin-bottom:var(--vs-spacing-xl)!important}.vs-ml-xs{margin-left:var(--vs-spacing-xs)!important}.vs-ml-sm{margin-left:var(--vs-spacing-sm)!important}.vs-ml-md{margin-left:var(--vs-spacing-md)!important}.vs-ml-lg{margin-left:var(--vs-spacing-lg)!important}.vs-ml-xl{margin-left:var(--vs-spacing-xl)!important}.vs-mr-xs{margin-right:var(--vs-spacing-xs)!important}.vs-mr-sm{margin-right:var(--vs-spacing-sm)!important}.vs-mr-md{margin-right:var(--vs-spacing-md)!important}.vs-mr-lg{margin-right:var(--vs-spacing-lg)!important}.vs-mr-xl{margin-right:var(--vs-spacing-xl)!important}.vs-mx-xs{margin-left:var(--vs-spacing-xs)!important;margin-right:var(--vs-spacing-xs)!important}.vs-mx-sm{margin-left:var(--vs-spacing-sm)!important;margin-right:var(--vs-spacing-sm)!important}.vs-mx-md{margin-left:var(--vs-spacing-md)!important;margin-right:var(--vs-spacing-md)!important}.vs-mx-lg{margin-left:var(--vs-spacing-lg)!important;margin-right:var(--vs-spacing-lg)!important}.vs-mx-xl{margin-left:var(--vs-spacing-xl)!important;margin-right:var(--vs-spacing-xl)!important}.vs-my-xs{margin-top:var(--vs-spacing-xs)!important;margin-bottom:var(--vs-spacing-xs)!important}.vs-my-sm{margin-top:var(--vs-spacing-sm)!important;margin-bottom:var(--vs-spacing-sm)!important}.vs-my-md{margin-top:var(--vs-spacing-md)!important;margin-bottom:var(--vs-spacing-md)!important}.vs-my-lg{margin-top:var(--vs-spacing-lg)!important;margin-bottom:var(--vs-spacing-lg)!important}.vs-my-xl{margin-top:var(--vs-spacing-xl)!important;margin-bottom:var(--vs-spacing-xl)!important}.vs-mx-auto{margin-left:auto!important;margin-right:auto!important}.vs-my-auto{margin-top:auto!important;margin-bottom:auto!important}.vs-ml-auto{margin-left:auto!important}.vs-mr-auto{margin-right:auto!important}.vs-mt-auto{margin-top:auto!important}.vs-mb-auto{margin-bottom:auto!important}.vs-p-xs{padding:var(--vs-spacing-xs)!important}.vs-p-sm{padding:var(--vs-spacing-sm)!important}.vs-p-md{padding:var(--vs-spacing-md)!important}.vs-p-lg{padding:var(--vs-spacing-lg)!important}.vs-p-xl{padding:var(--vs-spacing-xl)!important}.vs-pt-xs{padding-top:var(--vs-spacing-xs)!important}.vs-pt-sm{padding-top:var(--vs-spacing-sm)!important}.vs-pt-md{padding-top:var(--vs-spacing-md)!important}.vs-pt-lg{padding-top:var(--vs-spacing-lg)!important}.vs-pt-xl{padding-top:var(--vs-spacing-xl)!important}.vs-pb-xs{padding-bottom:var(--vs-spacing-xs)!important}.vs-pb-sm{padding-bottom:var(--vs-spacing-sm)!important}.vs-pb-md{padding-bottom:var(--vs-spacing-md)!important}.vs-pb-lg{padding-bottom:var(--vs-spacing-lg)!important}.vs-pb-xl{padding-bottom:var(--vs-spacing-xl)!important}.vs-pl-xs{padding-left:var(--vs-spacing-xs)!important}.vs-pl-sm{padding-left:var(--vs-spacing-sm)!important}.vs-pl-md{padding-left:var(--vs-spacing-md)!important}.vs-pl-lg{padding-left:var(--vs-spacing-lg)!important}.vs-pl-xl{padding-left:var(--vs-spacing-xl)!important}.vs-pr-xs{padding-right:var(--vs-spacing-xs)!important}.vs-pr-sm{padding-right:var(--vs-spacing-sm)!important}.vs-pr-md{padding-right:var(--vs-spacing-md)!important}.vs-pr-lg{padding-right:var(--vs-spacing-lg)!important}.vs-pr-xl{padding-right:var(--vs-spacing-xl)!important}.vs-px-xs{padding-left:var(--vs-spacing-xs)!important;padding-right:var(--vs-spacing-xs)!important}.vs-px-sm{padding-left:var(--vs-spacing-sm)!important;padding-right:var(--vs-spacing-sm)!important}.vs-px-md{padding-left:var(--vs-spacing-md)!important;padding-right:var(--vs-spacing-md)!important}.vs-px-lg{padding-left:var(--vs-spacing-lg)!important;padding-right:var(--vs-spacing-lg)!important}.vs-px-xl{padding-left:var(--vs-spacing-xl)!important;padding-right:var(--vs-spacing-xl)!important}.vs-py-xs{padding-top:var(--vs-spacing-xs)!important;padding-bottom:var(--vs-spacing-xs)!important}.vs-py-sm{padding-top:var(--vs-spacing-sm)!important;padding-bottom:var(--vs-spacing-sm)!important}.vs-py-md{padding-top:var(--vs-spacing-md)!important;padding-bottom:var(--vs-spacing-md)!important}.vs-py-lg{padding-top:var(--vs-spacing-lg)!important;padding-bottom:var(--vs-spacing-lg)!important}.vs-py-xl{padding-top:var(--vs-spacing-xl)!important;padding-bottom:var(--vs-spacing-xl)!important}.vs-m-2{margin:var(--vs-spacing-sm)!important}.vs-p-2{padding:var(--vs-spacing-sm)!important}.vs-ml-2{margin-left:var(--vs-spacing-sm)!important}.vs-mx-2{margin-left:var(--vs-spacing-sm)!important;margin-right:var(--vs-spacing-sm)!important}.vs-mb-5{margin-bottom:var(--vs-spacing-lg)!important}.vs-text-xs,.vs-text-sm{font-size:var(--vs-font-size-sm)!important}.vs-text-base{font-size:var(--vs-font-size)!important}.vs-text-lg,.vs-text-xl{font-size:var(--vs-font-size-lg)!important}.vs-font-normal{font-weight:var(--vs-font-weight-normal)!important}.vs-font-bold{font-weight:var(--vs-font-weight-bold)!important}.vs-text-left{text-align:left!important}.vs-text-center{text-align:center!important}.vs-text-right{text-align:right!important}.vs-uppercase{text-transform:uppercase!important}.vs-lowercase{text-transform:lowercase!important}.vs-capitalize{text-transform:capitalize!important}.vs-text-primary{color:var(--vs-primary)!important}.vs-text-secondary{color:var(--vs-secondary)!important}.vs-text-success{color:var(--vs-success)!important}.vs-text-danger{color:var(--vs-danger)!important}.vs-text-warning{color:var(--vs-warning)!important}.vs-text-info{color:var(--vs-info)!important}.vs-text-light{color:var(--vs-light)!important}.vs-text-dark{color:var(--vs-dark)!important}.vs-bg-primary{background-color:var(--vs-primary)!important}.vs-bg-secondary{background-color:var(--vs-secondary)!important}.vs-bg-success{background-color:var(--vs-success)!important}.vs-bg-danger{background-color:var(--vs-danger)!important}.vs-bg-warning{background-color:var(--vs-warning)!important}.vs-bg-info{background-color:var(--vs-info)!important}.vs-bg-light{background-color:var(--vs-light)!important}.vs-bg-dark{background-color:var(--vs-dark)!important}.vs-d-none{display:none!important}.vs-d-inline{display:inline!important}.vs-d-inline-block{display:inline-block!important}.vs-d-block{display:block!important}.vs-d-flex{display:flex!important}.vs-d-inline-flex{display:inline-flex!important}.vs-d-grid{display:grid!important}.vs-d-table{display:table!important}.vs-flex-row{flex-direction:row!important}.vs-flex-row-reverse{flex-direction:row-reverse!important}.vs-flex-column{flex-direction:column!important}.vs-flex-column-reverse{flex-direction:column-reverse!important}.vs-justify-start{justify-content:flex-start!important}.vs-justify-end{justify-content:flex-end!important}.vs-justify-center{justify-content:center!important}.vs-justify-between{justify-content:space-between!important}.vs-justify-around{justify-content:space-around!important}.vs-align-start{align-items:flex-start!important}.vs-align-end{align-items:flex-end!important}.vs-align-center{align-items:center!important}.vs-align-baseline{align-items:baseline!important}.vs-align-stretch{align-items:stretch!important}.vs-flex-wrap{flex-wrap:wrap!important}.vs-flex-nowrap{flex-wrap:nowrap!important}.vs-flex-wrap-reverse{flex-wrap:wrap-reverse!important}.vs-flex-1{flex:1 1 0%!important}.vs-flex-auto{flex:1 1 auto!important}.vs-flex-none{flex:none!important}.vs-rounded{border-radius:var(--vs-border-radius)!important}.vs-rounded-sm{border-radius:var(--vs-border-radius-sm)!important}.vs-rounded-lg{border-radius:var(--vs-border-radius-lg)!important}.vs-rounded-full{border-radius:50%!important}.vs-rounded-top{border-top-left-radius:var(--vs-border-radius)!important;border-top-right-radius:var(--vs-border-radius)!important}.vs-rounded-bottom{border-bottom-left-radius:var(--vs-border-radius)!important;border-bottom-right-radius:var(--vs-border-radius)!important}.vs-rounded-left{border-top-left-radius:var(--vs-border-radius)!important;border-bottom-left-radius:var(--vs-border-radius)!important}.vs-rounded-right{border-top-right-radius:var(--vs-border-radius)!important;border-bottom-right-radius:var(--vs-border-radius)!important}.vs-shadow-none{box-shadow:none!important}.vs-shadow-sm{box-shadow:var(--vs-shadow-sm)!important}.vs-shadow{box-shadow:var(--vs-shadow)!important}.vs-shadow-lg{box-shadow:var(--vs-shadow-lg)!important}.vs-position-static{position:static!important}.vs-position-relative{position:relative!important}.vs-position-absolute{position:absolute!important}.vs-position-fixed{position:fixed!important}.vs-position-sticky{position:sticky!important}.vs-overflow-auto{overflow:auto!important}.vs-overflow-hidden{overflow:hidden!important}.vs-overflow-visible{overflow:visible!important}.vs-overflow-scroll{overflow:scroll!important}.vs-w-auto{width:auto!important}.vs-w-full{width:100%!important}.vs-w-screen{width:100vw!important}.vs-w-50{width:50%!important}.vs-w-100{width:100%!important}.vs-h-auto{height:auto!important}.vs-h-full{height:100%!important}.vs-h-screen{height:100vh!important}.vs-h-50{height:50%!important}.vs-h-100{height:100%!important}.vs-visible{visibility:visible!important}.vs-invisible{visibility:hidden!important}.vs-cursor-auto{cursor:auto!important}.vs-cursor-pointer{cursor:pointer!important}.vs-cursor-default{cursor:default!important}.vs-cursor-not-allowed{cursor:not-allowed!important}.vs-border{border:1px solid var(--vs-table-border)!important}.vs-border-top{border-top:1px solid var(--vs-table-border)!important}.vs-border-bottom{border-bottom:1px solid var(--vs-table-border)!important}.vs-border-left{border-left:1px solid var(--vs-table-border)!important}.vs-border-right{border-right:1px solid var(--vs-table-border)!important}.vs-z-dropdown{z-index:var(--vs-z-dropdown)!important}.vs-z-sticky{z-index:var(--vs-z-sticky)!important}.vs-z-fixed{z-index:var(--vs-z-fixed)!important}.vs-z-modal{z-index:var(--vs-z-modal)!important}.vs-z-popover{z-index:var(--vs-z-popover)!important}.vs-z-tooltip{z-index:var(--vs-z-tooltip)!important}.vs-transition{transition:var(--vs-transition)!important}.vs-transition-fast{transition:var(--vs-transition-fast)!important}.vs-transition-none{transition:none!important}.vs-text-center{text-align:center}.vs-text-left{text-align:left}.vs-text-right{text-align:right}.vs-text-muted{color:var(--vs-secondary)}.vs-text-primary{color:var(--vs-primary)}.vs-text-success{color:var(--vs-success)}.vs-text-danger{color:var(--vs-danger)}.vs-text-warning{color:var(--vs-warning)}.vs-bg-primary{background-color:var(--vs-primary)}.vs-bg-success{background-color:var(--vs-success)}.vs-bg-danger{background-color:var(--vs-danger)}.vs-bg-warning{background-color:var(--vs-warning)}.vs-bg-light{background-color:var(--vs-light)}.vs-border{border:1px solid var(--vs-table-border)}.vs-border-top{border-top:1px solid var(--vs-table-border)}.vs-border-bottom{border-bottom:1px solid var(--vs-table-border)}.vs-border-left{border-left:1px solid var(--vs-table-border)}.vs-border-right{border-right:1px solid var(--vs-table-border)}.vs-rounded{border-radius:var(--vs-border-radius)}.vs-rounded-sm{border-radius:var(--vs-border-radius-sm)}.vs-rounded-lg{border-radius:var(--vs-border-radius-lg)}.vs-shadow{box-shadow:var(--vs-shadow)}.vs-shadow-sm{box-shadow:var(--vs-shadow-sm)}.vs-shadow-lg{box-shadow:var(--vs-shadow-lg)}.vs-fade-in{animation:vs-fade-in .3s ease-in-out}@keyframes vs-fade-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.vs-slide-in{animation:vs-slide-in .3s ease-in-out}@keyframes vs-slide-in{0%{transform:translate(-20px);opacity:0}to{transform:translate(0);opacity:1}}.vs-btn{padding:.35rem .75rem;border-radius:4px;cursor:pointer}.vs-btn-primary{background:#2d6cdf;color:#fff;border:none}.vs-btn-secondary{background:#f5f5f5;border:1px solid #ccc}.vs-datatable{font-family:var(--vs-font-family);font-size:var(--vs-font-size);line-height:1.5;color:var(--vs-dark);background-color:var(--vs-table-bg);box-sizing:border-box}.vs-datatable *,.vs-datatable *:before,.vs-datatable *:after{box-sizing:border-box}.vs-table-container{position:relative;background-color:var(--vs-table-bg);border:1px solid var(--vs-table-border);border-radius:var(--vs-border-radius);overflow:hidden;box-shadow:var(--vs-shadow-sm)}.vs-table{width:100%;margin:0;border-collapse:separate;border-spacing:0;background-color:var(--vs-table-bg)}.vs-table thead{background-color:var(--vs-table-bg)}.vs-table thead th{padding:var(--vs-spacing-md);font-weight:var(--vs-font-weight-bold);color:var(--vs-table-header-color);text-align:left;vertical-align:middle;border-bottom:2px solid var(--vs-table-border);position:relative;-webkit-user-select:none;user-select:none}.vs-table thead th:first-child{border-top-left-radius:var(--vs-border-radius)}.vs-table thead th:last-child{border-top-right-radius:var(--vs-border-radius)}.vs-table thead th:after{content:"";position:absolute;right:0;top:25%;bottom:25%;width:1px;opacity:.6;pointer-events:none}.vs-table tbody tr{transition:var(--vs-transition-fast);border-bottom:1px solid var(--vs-table-border)}.vs-table tbody tr:hover{background-color:var(--vs-table-hover-bg)}.vs-table tbody tr:nth-child(2n){background-color:var(--vs-table-stripe-bg)}.vs-table tbody tr:last-child{border-bottom:none}.vs-table tbody tr td{padding:var(--vs-spacing-md);vertical-align:middle;border-right:1px solid var(--vs-table-border)}.vs-table tbody tr td:last-child{border-right:none}.vs-table tfoot{background-color:var(--vs-table-bg)}.vs-table .vs-expand-column{width:2px;border-right:1px solid var(--vs-border-color, #e5e7eb)}.vs-table .vs-group-header{font-weight:600;letter-spacing:.3px;position:relative;z-index:2}.vs-table .vs-group-header:after{content:"";position:absolute;right:0;top:30%;bottom:30%;width:2px;background-color:var(--vs-border-color, #d1d5db);opacity:.6;pointer-events:none}.vs-table .vs-header-cell{background:var(--vs-table-header-bg, #fff);font-weight:500;white-space:nowrap;text-align:left;padding:.5rem 1rem;border-bottom:1px solid var(--vs-border-color, #e5e7eb)}.vs-table th:last-child,.vs-table .vs-group-header:last-child{border-right:none}.vs-table-pagination{display:flex;align-items:center;justify-content:space-between;padding:var(--vs-spacing-sm) 0}.vs-sortable{cursor:pointer;position:relative}.vs-sortable:hover{background-color:rgba(var(--vs-primary),.1)}.vs-sortable .vs-sort-icons{display:inline-flex;flex-direction:column;margin-left:var(--vs-spacing-sm);vertical-align:middle}.vs-sortable .vs-sort-icons .vs-sort-icon{font-size:10px;line-height:1;color:var(--vs-secondary);transition:var(--vs-transition-fast);margin:-8px 0}.vs-sortable .vs-sort-icons .vs-sort-icon.vs-sort-asc,.vs-sortable .vs-sort-icons .vs-sort-icon.vs-sort-desc{color:var(--vs-primary)}.vs-sortable .vs-sort-icons .vs-sort-icon svg{fill:var(--vs-inactive)}.vs-sortable .vs-sort-icons .vs-sort-icon.vs-active svg{fill:currentColor}.vs-sortable .vs-sort-priority{display:inline-block;background-color:var(--vs-primary);color:#fff;font-size:10px;padding:2px 6px;border-radius:var(--vs-border-radius-sm);margin-left:var(--vs-spacing-sm);font-weight:var(--vs-font-weight-bold)}.vs-loading{display:flex;align-items:center;justify-content:center;padding:var(--vs-spacing-xl);color:var(--vs-secondary)}.vs-loading .vs-spinner{width:20px;height:20px;border:2px solid var(--vs-table-border);border-top:2px solid var(--vs-primary);border-radius:50%;animation:vs-spin 1s linear infinite;margin-right:var(--vs-spacing-sm)}@keyframes vs-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.vs-no-data{text-align:center;padding:var(--vs-spacing-xl);color:var(--vs-secondary)}.vs-no-data .vs-no-data-icon{width:60px;height:60px;margin:0 auto var(--vs-spacing-md);opacity:.5}.vs-no-data .vs-no-data-message{font-size:var(--vs-font-size-lg);font-weight:var(--vs-font-weight-bold);margin-bottom:var(--vs-spacing-sm)}.vs-no-data .vs-no-data-description{font-size:var(--vs-font-size-sm);color:var(--vs-secondary)}.vs-search{position:relative}.vs-search .vs-search-input{width:100%;padding:var(--vs-spacing-sm) var(--vs-spacing-md);padding-left:50px;border:1px solid var(--vs-table-border);border-radius:var(--vs-border-radius);font-size:var(--vs-font-size);transition:var(--vs-transition-fast)}.vs-search .vs-search-input:focus{outline:none;border-color:var(--vs-primary);box-shadow:0 0 0 2px rgba(var(--vs-primary),.25)}.vs-search .vs-search-icon{position:absolute;left:var(--vs-spacing-md);top:50%;transform:translateY(-50%);color:var(--vs-secondary);pointer-events:none}.vs-pagination{display:flex;align-items:center;justify-content:center;gap:var(--vs-spacing-sm);margin-top:var(--vs-spacing-md)}.vs-pagination .vs-pagination-button{display:inline-flex;align-items:center;justify-content:center;min-width:32px;height:32px;padding:0 var(--vs-spacing-sm);border:1px solid var(--vs-table-border);background-color:var(--vs-table-bg);color:var(--vs-dark);text-decoration:none;border-radius:var(--vs-border-radius);font-size:var(--vs-font-size-sm);transition:var(--vs-transition-fast);cursor:pointer}.vs-pagination .vs-pagination-button:hover:not(:disabled){background-color:var(--vs-table-hover-bg);border-color:var(--vs-primary)}.vs-pagination .vs-pagination-button.vs-active{background-color:var(--vs-primary);border-color:var(--vs-primary);color:#fff}.vs-pagination .vs-pagination-button:disabled{opacity:.5;cursor:not-allowed}.vs-pagination .vs-pagination-ellipsis{color:var(--vs-secondary);padding:0 var(--vs-spacing-sm)}.vs-layout-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;width:100%;gap:1rem}.vs-layout-row .vs-layout-start,.vs-layout-row .vs-layout-end{display:flex;align-items:center;gap:.5rem}@media (max-width: 768px){.vs-layout-row{flex-direction:column;align-items:stretch}.vs-layout-row .vs-layout-start,.vs-layout-row .vs-layout-end{justify-content:flex-start;width:100%}}.export-dropdown{position:relative;display:inline-block}.export-btn{background:#2d6cdf;color:#fff;border:none;padding:.5rem 1rem;border-radius:6px;cursor:pointer;font-size:14px}.export-menu{display:none;position:absolute;right:0;margin-top:.25rem;background:#fff;border:1px solid #ddd;border-radius:6px;list-style:none;padding:0;min-width:160px;box-shadow:0 4px 8px #0000001a;z-index:1;flex-direction:column}.export-menu li{width:100%}.export-menu button{background:none;border:none;width:100%;padding:.75rem 1rem;text-align:left;cursor:pointer;font-size:14px}.export-menu button:hover{background:#f5f5f5}.export-menu.active{display:flex}.vs-checkbox{display:inline-flex;align-items:center;cursor:pointer}.vs-checkbox input[type=checkbox]{width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--vs-primary)}.vs-checkbox label{margin:0;cursor:pointer;font-size:var(--vs-font-size-sm)}.vs-pagination-left{display:flex;align-items:center;gap:12px}.vs-divider{width:1px;height:20px;background-color:#ccc}.vs-rows-per-page{display:flex;align-items:center;gap:8px;font-size:14px;color:#495057}.vs-items-dropdown{padding:6px 8px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px}.vs-expand-column{width:40px;text-align:center}.vs-expand-btn{background:transparent;border:none;cursor:pointer;font-size:1.1rem}.vs-row-expanded{background:#f9f9f9}.vs-table tbody tr.vs-row-expanded td.vs-expanded-cell{padding:0!important;vertical-align:top!important;border-right:none}.vs-expanded-content{padding:var(--vs-spacing-md);background-color:#ededed}.vs-loader-bar{width:100%;height:4px;background:#e5e7eb;overflow:hidden;position:relative;border-radius:2px;top:0;left:0;margin:0}.vs-loader-bar-inner{width:40%;height:100%;background:var(--vs-primary);position:absolute;left:-40%;animation:loader-slide 1.2s infinite linear;border-radius:2px}@keyframes loader-slide{0%{left:-40%}50%{left:60%}to{left:100%}}.vs-filter-dropdown{background:#fff;border:1px solid #ddd;padding:.75rem;border-radius:6px;box-shadow:0 2px 12px #0000001f;min-width:200px}.vs-filter-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.vs-input,.vs-multiselect-search{padding:.35rem .5rem;border:1px solid #ccc;border-radius:4px}.vs-operator-select{padding:.35rem .5rem;border:1px solid #ccc;border-radius:4px;gap:.55rem}.vs-multiselect{width:100%}.vs-multiselect-actions{display:flex;justify-content:space-between;padding:.5rem;border-bottom:1px solid #eee;background:#fafafa}.vs-multiselect-actions button{font-size:.85rem;background:transparent;border:none;color:#2d6cdf;cursor:pointer}.vs-multiselect-search{width:var(vs-w-full);padding:var(--vs-spacing-sm);border-bottom:1px solid #eee;outline:none}.vs-multiselect-options{list-style:none;padding:0;margin:0;max-height:220px;overflow-y:auto}.vs-multiselect-options li{display:flex;align-items:center;justify-content:space-between;padding:.5rem;cursor:pointer;transition:background .15s}.vs-multiselect-options li:hover{background:#f9f9f9}.vs-multiselect-options li.selected{background:#f0f6ff;color:#2d6cdf}.option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.check-icon{width:18px;height:18px;stroke-width:2.5}.vs-column-filter{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;cursor:pointer}.vs-column-filter.is-active{background-color:#2980b90f;color:var(--vs-text-primary, #2d6cdf)}.vs-column-filter.in-active{color:var(--vs-inactive)}.vs-header-content{display:flex;align-items:center;gap:8px}@media (max-width: 768px){.vs-table-container{overflow-x:auto}.vs-table{min-width:600px}.vs-pagination{flex-wrap:wrap;gap:var(--vs-spacing-xs)}.vs-pagination .vs-pagination-button{min-width:28px;height:28px;font-size:12px}}.vs-sticky-left{position:sticky;background:#fff;z-index:3;box-shadow:2px 0 4px #0000000d}.vs-sticky-right{position:sticky;background:#fff;z-index:3;box-shadow:-2px 0 4px #0000000d}.vs-table-container.has-left-shadow:before,.vs-table-container.has-right-shadow:after{content:"";position:absolute;top:0;bottom:0;width:12px;pointer-events:none;z-index:3}.vs-table-container.has-left-shadow:before{left:0;box-shadow:inset 6px 0 6px -6px #0000001a}.vs-table-container.has-right-shadow:after{right:0;box-shadow:inset -6px 0 6px -6px #0000001a}.vs-sticky-header-wrapper{overflow-y:auto;overflow-x:auto;position:relative;max-height:calc(100vh - 250px);scrollbar-gutter:stable;background-color:#fff}.vs-sticky-header-wrapper thead{background:var(--vs-table-bg, #fff);position:sticky;top:0;z-index:5;transition:transform .1s ease-out}.vs-sticky-header-wrapper thead th{background:var(--vs-table-header-bg, #fff);position:sticky;top:0}.vs-group-header.vs-sticky-left,.vs-group-header.vs-sticky-right{background:var(--vs-table-bg, #fff)}.vs-datatable.vs-theme-dark{--vs-primary: #0d6efd;--vs-secondary: #6c757d;--vs-success: #198754;--vs-danger: #dc3545;--vs-warning: #ffc107;--vs-info: #0dcaf0;--vs-light: #f8f9fa;--vs-dark: #212529;--vs-table-bg: #1a1a1a;--vs-table-border: #333333;--vs-table-header-bg: #2d2d2d;--vs-table-header-color: #ffffff;--vs-table-hover-bg: #333333;--vs-table-stripe-bg: #222222;color:#fff;background-color:var(--vs-table-bg)}.vs-datatable.vs-theme-minimal{--vs-primary: #000000;--vs-secondary: #666666;--vs-success: #000000;--vs-danger: #000000;--vs-warning: #000000;--vs-info: #000000;--vs-light: #f9f9f9;--vs-dark: #000000;--vs-table-bg: #ffffff;--vs-table-border: #e0e0e0;--vs-table-header-bg: #ffffff;--vs-table-header-color: #000000;--vs-table-hover-bg: #f5f5f5;--vs-table-stripe-bg: #ffffff}.vs-datatable.vs-theme-minimal .vs-table{border:none;box-shadow:none}.vs-datatable.vs-theme-minimal .vs-table thead th{border-bottom:2px solid var(--vs-table-border);font-weight:500}.vs-datatable.vs-theme-minimal .vs-table tbody tr{border-bottom:1px solid var(--vs-table-border)}.vs-datatable.vs-theme-colorful{--vs-primary: #e91e63;--vs-secondary: #9c27b0;--vs-success: #4caf50;--vs-danger: #f44336;--vs-warning: #ff9800;--vs-info: #2196f3;--vs-light: #f3e5f5;--vs-dark: #2e2e2e;--vs-table-bg: #ffffff;--vs-table-border: #e1bee7;--vs-table-header-bg: linear-gradient(135deg, #e91e63, #9c27b0);--vs-table-header-color: #ffffff;--vs-table-hover-bg: #f3e5f5;--vs-table-stripe-bg: #fafafa}.vs-datatable.vs-theme-colorful .vs-table thead th{background:var(--vs-table-header-bg);color:var(--vs-table-header-color);font-weight:600}.vs-datatable.vs-theme-colorful .vs-pagination-button.vs-active{background:linear-gradient(135deg,var(--vs-primary),var(--vs-secondary))}.vs-datatable.vs-theme-corporate{--vs-primary: #1e3a8a;--vs-secondary: #64748b;--vs-success: #059669;--vs-danger: #dc2626;--vs-warning: #d97706;--vs-info: #0891b2;--vs-light: #f8fafc;--vs-dark: #1e293b;--vs-table-bg: #ffffff;--vs-table-border: #e2e8f0;--vs-table-header-bg: #f1f5f9;--vs-table-header-color: #334155;--vs-table-hover-bg: #f8fafc;--vs-table-stripe-bg: #ffffff;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.vs-datatable.vs-theme-corporate .vs-table{border-radius:8px;overflow:hidden;box-shadow:0 1px 3px #0000001a}.vs-datatable.vs-theme-corporate .vs-table thead th{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:16px 20px}.vs-datatable.vs-theme-corporate .vs-table tbody td{padding:16px 20px;font-size:14px}.vs-datatable.vs-theme-compact{--vs-spacing-xs: 2px;--vs-spacing-sm: 4px;--vs-spacing-md: 8px;--vs-spacing-lg: 12px;--vs-spacing-xl: 16px;--vs-font-size: 12px;--vs-font-size-sm: 10px;--vs-font-size-lg: 14px}.vs-datatable.vs-theme-compact .vs-table thead th{padding:var(--vs-spacing-sm) var(--vs-spacing-md);font-size:var(--vs-font-size-sm)}.vs-datatable.vs-theme-compact .vs-table tbody td{padding:var(--vs-spacing-sm) var(--vs-spacing-md);font-size:var(--vs-font-size)}.vs-datatable.vs-theme-compact .vs-pagination-button{min-width:24px;height:24px;font-size:var(--vs-font-size-sm)}.vs-datatable.vs-theme-rounded{--vs-border-radius: 12px;--vs-border-radius-sm: 6px;--vs-border-radius-lg: 16px}.vs-datatable.vs-theme-rounded .vs-table-container{border-radius:var(--vs-border-radius);overflow:hidden}.vs-datatable.vs-theme-rounded .vs-table thead th:first-child{border-top-left-radius:var(--vs-border-radius)}.vs-datatable.vs-theme-rounded .vs-table thead th:last-child{border-top-right-radius:var(--vs-border-radius)}.vs-datatable.vs-theme-rounded .vs-pagination-button{border-radius:var(--vs-border-radius-sm)}.vs-datatable.vs-theme-brand{--vs-primary: #ff6b35;--vs-secondary: #004e89;--vs-success: #00a896;--vs-danger: #e63946;--vs-warning: #f77f00;--vs-info: #06a77d}.vs-datatable.vs-theme-brand .vs-table-container{border:2px solid var(--vs-primary);border-radius:16px;box-shadow:0 8px 32px #ff6b3533}.vs-datatable.vs-theme-brand .vs-table thead th{background:linear-gradient(135deg,var(--vs-primary),var(--vs-secondary));color:#fff;font-weight:700;text-shadow:0 1px 2px rgba(0,0,0,.1)}.vs-datatable.vs-theme-brand .vs-pagination-button.vs-active{background:var(--vs-primary);transform:scale(1.05)}.vs-datatable.vs-theme-brand .vs-pagination-button:hover:not(:disabled){border-color:var(--vs-primary);transform:translateY(-1px)}
@@ -5,7 +5,7 @@ import { type Ref, type ComputedRef } from 'vue';
5
5
  */
6
6
  export interface Column<T = any> {
7
7
  label: string;
8
- field: keyof T & string;
8
+ field?: keyof T & string;
9
9
  width?: string;
10
10
  sortable?: boolean;
11
11
  isKey?: boolean;
@@ -17,6 +17,15 @@ export interface Column<T = any> {
17
17
  filterKey?: string;
18
18
  custom?: string;
19
19
  };
20
+ colHeaderClass?: string | string[] | Record<string, any>;
21
+ sticky?: 'left' | 'right';
22
+ title?: string;
23
+ children?: Column[];
24
+ hidden?: boolean;
25
+ footerClass?: string | string[] | Record<string, any>;
26
+ footerStyle?: string | string[] | Record<string, any>;
27
+ footerValue?: string | ((rows: Record<string, any>[]) => any);
28
+ footerFormatter?: (value: any, column: Column<T>) => string;
20
29
  }
21
30
  export interface Sort {
22
31
  field: string;
@@ -116,6 +125,9 @@ export interface DataTableProps {
116
125
  expanded?: (string | number)[];
117
126
  expandable?: boolean;
118
127
  accordion?: boolean;
128
+ stickyHeader?: boolean;
129
+ stickyFooter?: boolean;
130
+ showPagination?: boolean;
119
131
  }
120
132
  export interface DataTableEmits {
121
133
  (event: 'update:serverItemsLength', value: number | undefined): void;
@@ -9,7 +9,7 @@ import type { ColumnFilter } from '@/types/datatable';
9
9
  * @param path - The path to the value (e.g., 'user.profile.name')
10
10
  * @returns The value at the path or empty string
11
11
  */
12
- export declare function getValue(obj: any, path: string): any;
12
+ export declare const getValue: (row: any, field?: string) => any;
13
13
  /**
14
14
  * Get row key for identification
15
15
  * @param item - The row item
@@ -103,3 +103,8 @@ export declare function filterRowsByQuery<T extends Record<string, any>>(resultR
103
103
  * { status_type: 'select', status_val: 'Pending' }
104
104
  */
105
105
  export declare function serializeFilters(filters: Record<string, ColumnFilter>): Record<string, any>;
106
+ /**
107
+ * Flattens grouped columns into a single-level array.
108
+ * Handles nested `children` columns gracefully.
109
+ */
110
+ export declare function getFlatColumns(columns?: Column[]): Column[];