@tinisoftin/tsdatagrid 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1272 -0
- package/dist/components/TSDataGrid.vue.d.ts +1285 -0
- package/dist/components/TSDataGrid.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridActiveFilters.vue.d.ts +24 -0
- package/dist/components/TSDataGridActiveFilters.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridBody.vue.d.ts +259 -0
- package/dist/components/TSDataGridBody.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridCell.vue.d.ts +83 -0
- package/dist/components/TSDataGridCell.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridColumnChooser.vue.d.ts +56 -0
- package/dist/components/TSDataGridColumnChooser.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridContextMenu.vue.d.ts +46 -0
- package/dist/components/TSDataGridContextMenu.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridFilter.vue.d.ts +92 -0
- package/dist/components/TSDataGridFilter.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridFooter.vue.d.ts +95 -0
- package/dist/components/TSDataGridFooter.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridGroupPanel.vue.d.ts +47 -0
- package/dist/components/TSDataGridGroupPanel.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridHeader.vue.d.ts +221 -0
- package/dist/components/TSDataGridHeader.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridRow.vue.d.ts +83 -0
- package/dist/components/TSDataGridRow.vue.d.ts.map +1 -0
- package/dist/components/TSDataGridToolbar.vue.d.ts +139 -0
- package/dist/components/TSDataGridToolbar.vue.d.ts.map +1 -0
- package/dist/composables/index.d.ts +28 -0
- package/dist/composables/index.d.ts.map +1 -0
- package/dist/composables/useClipboard.d.ts +863 -0
- package/dist/composables/useClipboard.d.ts.map +1 -0
- package/dist/composables/useColumnChooser.d.ts +36 -0
- package/dist/composables/useColumnChooser.d.ts.map +1 -0
- package/dist/composables/useColumnReorder.d.ts +40 -0
- package/dist/composables/useColumnReorder.d.ts.map +1 -0
- package/dist/composables/useColumnResize.d.ts +36 -0
- package/dist/composables/useColumnResize.d.ts.map +1 -0
- package/dist/composables/useContextMenu.d.ts +55 -0
- package/dist/composables/useContextMenu.d.ts.map +1 -0
- package/dist/composables/useDataSource.d.ts +1770 -0
- package/dist/composables/useDataSource.d.ts.map +1 -0
- package/dist/composables/useEditing.d.ts +54 -0
- package/dist/composables/useEditing.d.ts.map +1 -0
- package/dist/composables/useExport.d.ts +72 -0
- package/dist/composables/useExport.d.ts.map +1 -0
- package/dist/composables/useFiltering.d.ts +42 -0
- package/dist/composables/useFiltering.d.ts.map +1 -0
- package/dist/composables/useGridApi.d.ts +85 -0
- package/dist/composables/useGridApi.d.ts.map +1 -0
- package/dist/composables/useGrouping.d.ts +879 -0
- package/dist/composables/useGrouping.d.ts.map +1 -0
- package/dist/composables/useInfiniteScroll.d.ts +49 -0
- package/dist/composables/useInfiniteScroll.d.ts.map +1 -0
- package/dist/composables/useKeyboardNavigation.d.ts +47 -0
- package/dist/composables/useKeyboardNavigation.d.ts.map +1 -0
- package/dist/composables/useLoadingState.d.ts +36 -0
- package/dist/composables/useLoadingState.d.ts.map +1 -0
- package/dist/composables/usePagination.d.ts +45 -0
- package/dist/composables/usePagination.d.ts.map +1 -0
- package/dist/composables/useRowExpansion.d.ts +47 -0
- package/dist/composables/useRowExpansion.d.ts.map +1 -0
- package/dist/composables/useSearch.d.ts +97 -0
- package/dist/composables/useSearch.d.ts.map +1 -0
- package/dist/composables/useSelection.d.ts +32 -0
- package/dist/composables/useSelection.d.ts.map +1 -0
- package/dist/composables/useSorting.d.ts +859 -0
- package/dist/composables/useSorting.d.ts.map +1 -0
- package/dist/composables/useStatePersistence.d.ts +26 -0
- package/dist/composables/useStatePersistence.d.ts.map +1 -0
- package/dist/composables/useSummary.d.ts +49 -0
- package/dist/composables/useSummary.d.ts.map +1 -0
- package/dist/composables/useUndo.d.ts +27 -0
- package/dist/composables/useUndo.d.ts.map +1 -0
- package/dist/composables/useVirtualization.d.ts +40 -0
- package/dist/composables/useVirtualization.d.ts.map +1 -0
- package/dist/html2canvas.esm-1a1724a1.js +4886 -0
- package/dist/index-541cb5f8.js +38398 -0
- package/dist/index.d.ts +108 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es-713282db.js +5771 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/purify.es-35a15df8.js +480 -0
- package/dist/style.css +1 -0
- package/dist/tsdatagrid.es.js +358 -0
- package/dist/tsdatagrid.umd.js +450 -0
- package/dist/types/core/base.d.ts +143 -0
- package/dist/types/core/base.d.ts.map +1 -0
- package/dist/types/core/column.d.ts +354 -0
- package/dist/types/core/column.d.ts.map +1 -0
- package/dist/types/core/datasource.d.ts +247 -0
- package/dist/types/core/datasource.d.ts.map +1 -0
- package/dist/types/core/events.d.ts +297 -0
- package/dist/types/core/events.d.ts.map +1 -0
- package/dist/types/core/models.d.ts +74 -0
- package/dist/types/core/models.d.ts.map +1 -0
- package/dist/types/features/accessibility.d.ts +75 -0
- package/dist/types/features/accessibility.d.ts.map +1 -0
- package/dist/types/features/editing.d.ts +185 -0
- package/dist/types/features/editing.d.ts.map +1 -0
- package/dist/types/features/export.d.ts +145 -0
- package/dist/types/features/export.d.ts.map +1 -0
- package/dist/types/features/filtering.d.ts +193 -0
- package/dist/types/features/filtering.d.ts.map +1 -0
- package/dist/types/features/grouping.d.ts +148 -0
- package/dist/types/features/grouping.d.ts.map +1 -0
- package/dist/types/features/keyboard.d.ts +126 -0
- package/dist/types/features/keyboard.d.ts.map +1 -0
- package/dist/types/features/pagination.d.ts +85 -0
- package/dist/types/features/pagination.d.ts.map +1 -0
- package/dist/types/features/searching.d.ts +90 -0
- package/dist/types/features/searching.d.ts.map +1 -0
- package/dist/types/features/selection.d.ts +99 -0
- package/dist/types/features/selection.d.ts.map +1 -0
- package/dist/types/features/sorting.d.ts +81 -0
- package/dist/types/features/sorting.d.ts.map +1 -0
- package/dist/types/features/summary.d.ts +99 -0
- package/dist/types/features/summary.d.ts.map +1 -0
- package/dist/types/features/virtualization.d.ts +88 -0
- package/dist/types/features/virtualization.d.ts.map +1 -0
- package/dist/types/index.d.ts +60 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/state/grid-state.d.ts +70 -0
- package/dist/types/state/grid-state.d.ts.map +1 -0
- package/dist/types/state/persistence.d.ts +65 -0
- package/dist/types/state/persistence.d.ts.map +1 -0
- package/dist/types/ui/styling.d.ts +72 -0
- package/dist/types/ui/styling.d.ts.map +1 -0
- package/dist/types/ui/templates.d.ts +80 -0
- package/dist/types/ui/templates.d.ts.map +1 -0
- package/dist/types/ui/toolbar.d.ts +63 -0
- package/dist/types/ui/toolbar.d.ts.map +1 -0
- package/dist/types/validation/validators.d.ts +134 -0
- package/dist/types/validation/validators.d.ts.map +1 -0
- package/dist/utils/accessibility.d.ts +35 -0
- package/dist/utils/accessibility.d.ts.map +1 -0
- package/dist/utils/array.d.ts +88 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/cache.d.ts +92 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/clipboard.d.ts +25 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/column-searcher.d.ts +44 -0
- package/dist/utils/column-searcher.d.ts.map +1 -0
- package/dist/utils/constants.d.ts +76 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/date.d.ts +101 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/dom.d.ts +128 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/error-handling.d.ts +190 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/export.d.ts +37 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/formatters.d.ts +60 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/index.d.ts +25 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/keyboard.d.ts +58 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/number.d.ts +77 -0
- package/dist/utils/number.d.ts.map +1 -0
- package/dist/utils/object.d.ts +101 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/dist/utils/odata.d.ts +87 -0
- package/dist/utils/odata.d.ts.map +1 -0
- package/dist/utils/performance.d.ts +75 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/storage.d.ts +83 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/string.d.ts +105 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/validators.d.ts +60 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGrouping.d.ts","sourceRoot":"","sources":["../../src/composables/useGrouping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGtE,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mGA4Wiw8D,CAAC;;;;;;;;;;;;;;;;;;4CAAnw+B,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mGAA8v+B,CAAC;;;;;;;;;;;;;;;;;;4CAAnw+B,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mGAA8v+B,CAAC;;;;;;;;;;;;;;;;;;4CAAnw+B,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mGAA8v+B,CAAC;;;;;;;;;;;;;;;;;;4CAAnw+B,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAnWnh+B,MAAM,aAAY,OAAO,UAAiB,MAAM;yBA6B7C,MAAM;;0BAyCL,MAAM,YAAY,MAAM;qCAoBb,MAAM;gCAyBX,MAAM,KAAG,OAAO;4BAUpB,MAAM;8BAWJ,MAAM;mCAWD,UAAU,EAAE;qCAyBV,UAAU,EAAE;sBAyB3B,GAAG,EAAE,KAAG,UAAU,EAAE;kCAwFR,GAAG,EAAE,eAAe,GAAG,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;oCAiC7C,UAAU,EAAE,KAAG,GAAG,EAAE;EAqC5D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { GridEmit } from '../types';
|
|
2
|
+
|
|
3
|
+
export interface InfiniteScrollConfig {
|
|
4
|
+
/** Items per page */
|
|
5
|
+
pageSize?: number;
|
|
6
|
+
/** Distance from bottom to trigger load (px) */
|
|
7
|
+
threshold?: number;
|
|
8
|
+
/** Enable infinite scroll */
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
/** Load first page automatically */
|
|
11
|
+
initialLoad?: boolean;
|
|
12
|
+
/** Use Intersection Observer instead of scroll event */
|
|
13
|
+
useIntersectionObserver?: boolean;
|
|
14
|
+
/** Debounce scroll events (ms) */
|
|
15
|
+
scrollDebounce?: number;
|
|
16
|
+
/** Auto-load more if content doesn't fill container */
|
|
17
|
+
autoLoadMore?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface InfiniteScrollResult {
|
|
20
|
+
/** Loaded data */
|
|
21
|
+
data: any[];
|
|
22
|
+
/** Has more data to load */
|
|
23
|
+
hasMore: boolean;
|
|
24
|
+
/** Total count (optional) */
|
|
25
|
+
totalCount?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function useInfiniteScroll(loadMore: (page: number, pageSize: number) => Promise<InfiniteScrollResult>, config?: InfiniteScrollConfig, emit?: GridEmit): {
|
|
28
|
+
data: import('vue').Ref<any[], any[]>;
|
|
29
|
+
currentPage: import('vue').Ref<number, number>;
|
|
30
|
+
isLoading: import('vue').Ref<boolean, boolean>;
|
|
31
|
+
hasMore: import('vue').Ref<boolean, boolean>;
|
|
32
|
+
error: import('vue').Ref<Error | null, Error | null>;
|
|
33
|
+
canLoadMore: import('vue').ComputedRef<boolean>;
|
|
34
|
+
scrollContainer: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
|
|
35
|
+
sentinelElement: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
|
|
36
|
+
totalCount: import('vue').Ref<number, number>;
|
|
37
|
+
progress: import('vue').ComputedRef<number>;
|
|
38
|
+
isComplete: import('vue').ComputedRef<boolean>;
|
|
39
|
+
loadNextPage: () => Promise<void>;
|
|
40
|
+
reset: () => void;
|
|
41
|
+
reload: () => Promise<void>;
|
|
42
|
+
retry: () => Promise<void>;
|
|
43
|
+
attachScrollContainer: (element: HTMLElement | null) => void;
|
|
44
|
+
attachSentinel: (element: HTMLElement | null) => void;
|
|
45
|
+
checkAndLoadMore: () => void;
|
|
46
|
+
setupIntersectionObserver: () => void;
|
|
47
|
+
cleanupIntersectionObserver: () => void;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=useInfiniteScroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInfiniteScroll.d.ts","sourceRoot":"","sources":["../../src/composables/useInfiniteScroll.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAEjC,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB;IAClB,IAAI,EAAE,GAAG,EAAE,CAAA;IAEX,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAA;IAEhB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,EAC3E,MAAM,GAAE,oBAAyB,EACjC,IAAI,CAAC,EAAE,QAAQ;;;;;;;;;;;;;;;;qCAwNyB,WAAW,GAAG,IAAI;8BA+BzB,WAAW,GAAG,IAAI;;;;EAsGpD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { KeyboardNavigationConfig, FocusPosition, KeyboardShortcut, KeyboardAction, ColumnDefinition, ColumnField, RowKey, GridEmit } from '../types';
|
|
2
|
+
|
|
3
|
+
export declare function useKeyboardNavigation(columns: () => ColumnDefinition[], data: () => any[], keyField?: string, config?: KeyboardNavigationConfig, emit?: GridEmit): {
|
|
4
|
+
focusedPosition: import('vue').Ref<{
|
|
5
|
+
rowKey: RowKey;
|
|
6
|
+
columnField: ColumnField;
|
|
7
|
+
rowIndex: number;
|
|
8
|
+
columnIndex: number;
|
|
9
|
+
} | null, FocusPosition | {
|
|
10
|
+
rowKey: RowKey;
|
|
11
|
+
columnField: ColumnField;
|
|
12
|
+
rowIndex: number;
|
|
13
|
+
columnIndex: number;
|
|
14
|
+
} | null>;
|
|
15
|
+
focusVisible: import('vue').Ref<boolean, boolean>;
|
|
16
|
+
gridElement: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
|
|
17
|
+
activeShortcuts: import('vue').ComputedRef<KeyboardShortcut[]>;
|
|
18
|
+
setFocus: (rowKey: any, columnField: string | ColumnField) => void;
|
|
19
|
+
clearFocus: () => void;
|
|
20
|
+
moveFocus: (direction: "up" | "down" | "left" | "right") => void;
|
|
21
|
+
moveToFirstCell: () => void;
|
|
22
|
+
moveToLastCell: () => void;
|
|
23
|
+
moveToFirstColumn: () => void;
|
|
24
|
+
moveToLastColumn: () => void;
|
|
25
|
+
moveToFirstRow: () => void;
|
|
26
|
+
moveToLastRow: () => void;
|
|
27
|
+
movePage: (direction: "up" | "down", pageSize?: number) => void;
|
|
28
|
+
attachGridElement: (element: HTMLElement | null) => void;
|
|
29
|
+
registerShortcut: (shortcut: KeyboardShortcut) => void;
|
|
30
|
+
unregisterShortcut: (action: KeyboardAction) => void;
|
|
31
|
+
getShortcutDescription: (action: KeyboardAction) => string | undefined;
|
|
32
|
+
getShortcutKeys: (action: KeyboardAction) => string | undefined;
|
|
33
|
+
getFocusedCellValue: () => any;
|
|
34
|
+
config: import('vue').ComputedRef<{
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
cellNavigation: boolean;
|
|
37
|
+
rowNavigation: boolean;
|
|
38
|
+
editingShortcuts: boolean;
|
|
39
|
+
selectionShortcuts: boolean;
|
|
40
|
+
clipboardShortcuts: boolean;
|
|
41
|
+
customShortcuts: KeyboardShortcut[];
|
|
42
|
+
enterKeyAction: "startEdit" | "moveFocus" | "none";
|
|
43
|
+
enterKeyDirection: "down" | "right" | "none";
|
|
44
|
+
editOnKeyPress: boolean;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=useKeyboardNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboardNavigation.d.ts","sourceRoot":"","sources":["../../src/composables/useKeyboardNavigation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAEhB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,MAAM,EACN,QAAQ,EACT,MAAM,UAAU,CAAA;AAEjB,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,gBAAgB,EAAE,EACjC,IAAI,EAAE,MAAM,GAAG,EAAE,EACjB,QAAQ,GAAE,MAAa,EACvB,MAAM,GAAE,wBAA6B,EACrC,IAAI,CAAC,EAAE,QAAQ;;;;;;;;;;;;;;;uBA8DW,GAAG,eAAe,MAAM,GAAG,WAAW;;2BA6BlC,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;;;;;;0BAkGjC,IAAI,GAAG,MAAM,aAAY,MAAM;iCAqLxB,WAAW,GAAG,IAAI;iCAmClB,gBAAgB;iCAOhB,cAAc;qCAQV,cAAc,KAAG,MAAM,GAAG,SAAS;8BAK1C,cAAc,KAAG,MAAM,GAAG,SAAS;+BAepC,GAAG;;;;;;;;;;;;;EAqCpC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Loading state composable
|
|
3
|
+
* @module composables/useLoadingState
|
|
4
|
+
*/
|
|
5
|
+
export interface LoadingOptions {
|
|
6
|
+
text?: string;
|
|
7
|
+
overlay?: boolean;
|
|
8
|
+
spinner?: boolean;
|
|
9
|
+
progress?: number;
|
|
10
|
+
cancellable?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function useLoadingState(): {
|
|
13
|
+
isLoading: import('vue').Ref<boolean, boolean>;
|
|
14
|
+
loadingText: import('vue').Ref<string, string>;
|
|
15
|
+
loadingProgress: import('vue').Ref<number, number>;
|
|
16
|
+
loadingOptions: import('vue').Ref<{
|
|
17
|
+
text?: string | undefined;
|
|
18
|
+
overlay?: boolean | undefined;
|
|
19
|
+
spinner?: boolean | undefined;
|
|
20
|
+
progress?: number | undefined;
|
|
21
|
+
cancellable?: boolean | undefined;
|
|
22
|
+
}, LoadingOptions | {
|
|
23
|
+
text?: string | undefined;
|
|
24
|
+
overlay?: boolean | undefined;
|
|
25
|
+
spinner?: boolean | undefined;
|
|
26
|
+
progress?: number | undefined;
|
|
27
|
+
cancellable?: boolean | undefined;
|
|
28
|
+
}>;
|
|
29
|
+
hasProgress: import('vue').ComputedRef<boolean>;
|
|
30
|
+
startLoading: (options?: LoadingOptions) => void;
|
|
31
|
+
stopLoading: () => void;
|
|
32
|
+
updateProgress: (progress: number, text?: string) => void;
|
|
33
|
+
updateText: (text: string) => void;
|
|
34
|
+
withLoading: <T>(operation: () => Promise<T>, options?: LoadingOptions) => Promise<T>;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=useLoadingState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoadingState.d.ts","sourceRoot":"","sources":["../../src/composables/useLoadingState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,eAAe;;;;;eAPtB,MAAM;kBACH,OAAO;kBACP,OAAO;mBACN,MAAM;sBACH,OAAO;;eAJd,MAAM;kBACH,OAAO;kBACP,OAAO;mBACN,MAAM;sBACH,OAAO;;;6BAcW,cAAc;;+BA2BZ,MAAM,SAAS,MAAM;uBAS7B,MAAM;kBAKL,CAAC,aACf,MAAM,OAAO,CAAC,CAAC,CAAC,YACjB,cAAc,KACvB,OAAO,CAAC,CAAC,CAAC;EAwBd"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PaginationConfig, PaginationState, GridEmit } from '../types';
|
|
2
|
+
|
|
3
|
+
export declare function usePagination(config?: PaginationConfig, emit?: GridEmit): {
|
|
4
|
+
currentPage: import('vue').Ref<number, number>;
|
|
5
|
+
pageSize: import('vue').Ref<number, number>;
|
|
6
|
+
totalItems: import('vue').Ref<number, number>;
|
|
7
|
+
totalPages: import('vue').ComputedRef<number>;
|
|
8
|
+
skip: import('vue').ComputedRef<number>;
|
|
9
|
+
take: import('vue').ComputedRef<number>;
|
|
10
|
+
startRecord: import('vue').ComputedRef<number>;
|
|
11
|
+
endRecord: import('vue').ComputedRef<number>;
|
|
12
|
+
canGoNext: import('vue').ComputedRef<boolean>;
|
|
13
|
+
canGoPrevious: import('vue').ComputedRef<boolean>;
|
|
14
|
+
canGoFirst: import('vue').ComputedRef<boolean>;
|
|
15
|
+
canGoLast: import('vue').ComputedRef<boolean>;
|
|
16
|
+
availablePageSizes: import('vue').ComputedRef<number[]>;
|
|
17
|
+
paginationState: import('vue').ComputedRef<PaginationState>;
|
|
18
|
+
paginationInfo: import('vue').ComputedRef<string>;
|
|
19
|
+
isFirstPage: import('vue').ComputedRef<boolean>;
|
|
20
|
+
isLastPage: import('vue').ComputedRef<boolean>;
|
|
21
|
+
hasPages: import('vue').ComputedRef<boolean>;
|
|
22
|
+
goToPage: (page: number) => boolean;
|
|
23
|
+
nextPage: () => boolean;
|
|
24
|
+
previousPage: () => boolean;
|
|
25
|
+
firstPage: () => boolean;
|
|
26
|
+
lastPage: () => boolean;
|
|
27
|
+
changePageSize: (size: number) => boolean;
|
|
28
|
+
reset: () => void;
|
|
29
|
+
getPageNumbers: (maxVisible?: number) => number[];
|
|
30
|
+
getPageNumbersWithEllipsis: (maxVisible?: number) => Array<number | "ellipsis">;
|
|
31
|
+
updateConfig: (newConfig: Partial<PaginationConfig>) => void;
|
|
32
|
+
setPage: (page: number) => void;
|
|
33
|
+
setPageSize: (size: number) => void;
|
|
34
|
+
setTotalItems: (total: number) => void;
|
|
35
|
+
getRangeInfo: () => {
|
|
36
|
+
start: number;
|
|
37
|
+
end: number;
|
|
38
|
+
total: number;
|
|
39
|
+
};
|
|
40
|
+
getPageInfo: () => string;
|
|
41
|
+
isPage: (page: number) => boolean;
|
|
42
|
+
canGoToPage: (page: number) => boolean;
|
|
43
|
+
getPaginatedData: <T>(data: T[]) => T[];
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=usePagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePagination.d.ts","sourceRoot":"","sources":["../../src/composables/usePagination.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE3E,wBAAgB,aAAa,CAC3B,MAAM,GAAE,gBAKP,EACD,IAAI,CAAC,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;qBA+FS,MAAM,KAAG,OAAO;oBAenB,OAAO;wBAQH,OAAO;qBAQV,OAAO;oBAKR,OAAO;2BAKE,MAAM,KAAG,OAAO;;kCAsCV,MAAM,KAAO,MAAM,EAAE;8CA6BT,MAAM,KAAO,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;8BA0EtD,OAAO,CAAC,gBAAgB,CAAC;oBAlBnC,MAAM;wBAMF,MAAM;2BAOH,MAAM;wBAkBX;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;uBAS9C,MAAM;mBAcR,MAAM,KAAG,OAAO;wBAKX,MAAM,KAAG,OAAO;uBAKjB,CAAC,QAAQ,CAAC,EAAE,KAAG,CAAC,EAAE;EA+C7C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { GridEmit } from '../types';
|
|
2
|
+
|
|
3
|
+
export interface RowExpansionConfig {
|
|
4
|
+
/** Allow multiple rows to be expanded simultaneously */
|
|
5
|
+
allowMultiple?: boolean;
|
|
6
|
+
/** Expand row when clicking anywhere on the row */
|
|
7
|
+
expandOnRowClick?: boolean;
|
|
8
|
+
/** Auto-collapse other rows when expanding a new one */
|
|
9
|
+
autoCollapse?: boolean;
|
|
10
|
+
/** Default expanded state for all rows */
|
|
11
|
+
defaultExpanded?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface RowExpansionState {
|
|
14
|
+
/** Set of expanded row keys */
|
|
15
|
+
expandedRows: Set<any>;
|
|
16
|
+
/** Count of expanded rows */
|
|
17
|
+
expandedCount: number;
|
|
18
|
+
/** Has any expanded rows */
|
|
19
|
+
hasExpandedRows: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function useRowExpansion(keyField?: string, config?: RowExpansionConfig, emit?: GridEmit): {
|
|
22
|
+
expandedRows: import('vue').Ref<Set<any> & Omit<Set<any>, keyof Set<any>>, Set<any> | (Set<any> & Omit<Set<any>, keyof Set<any>>)>;
|
|
23
|
+
expandedCount: import('vue').ComputedRef<number>;
|
|
24
|
+
hasExpandedRows: import('vue').ComputedRef<boolean>;
|
|
25
|
+
config: import('vue').ComputedRef<{
|
|
26
|
+
allowMultiple: boolean;
|
|
27
|
+
expandOnRowClick: boolean;
|
|
28
|
+
autoCollapse: boolean;
|
|
29
|
+
defaultExpanded: boolean;
|
|
30
|
+
}>;
|
|
31
|
+
isExpanded: (row: any) => boolean;
|
|
32
|
+
isExpandedByKey: (key: any) => boolean;
|
|
33
|
+
toggleExpansion: (row: any, rowIndex?: number) => void;
|
|
34
|
+
expand: (row: any, rowIndex?: number) => void;
|
|
35
|
+
collapse: (row: any, rowIndex?: number) => void;
|
|
36
|
+
expandAll: (rows: any[]) => void;
|
|
37
|
+
collapseAll: () => void;
|
|
38
|
+
setExpandedRows: (keys: any[]) => void;
|
|
39
|
+
getExpandedRows: () => any[];
|
|
40
|
+
expandByKey: (key: any) => void;
|
|
41
|
+
collapseByKey: (key: any) => void;
|
|
42
|
+
toggleByKey: (key: any) => void;
|
|
43
|
+
getExpansionState: () => RowExpansionState;
|
|
44
|
+
restoreExpansionState: (state: RowExpansionState) => void;
|
|
45
|
+
reset: () => void;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=useRowExpansion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRowExpansion.d.ts","sourceRoot":"","sources":["../../src/composables/useRowExpansion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,UAAU,CAAA;AAEhD,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;IAEtB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAA;IAErB,4BAA4B;IAC5B,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,MAAa,EACvB,MAAM,GAAE,kBAAuB,EAC/B,IAAI,CAAC,EAAE,QAAQ;;;;;uBA1BC,OAAO;0BAGJ,OAAO;sBAGX,OAAO;yBAGJ,OAAO;;sBAkCA,GAAG,KAAG,OAAO;2BAOR,GAAG,KAAG,OAAO;2BAKb,GAAG,aAAY,MAAM;kBAW9B,GAAG,aAAY,MAAM;oBAkCnB,GAAG,aAAY,MAAM;sBA6BnB,GAAG,EAAE;;4BAwCC,GAAG,EAAE;2BAYR,GAAG,EAAE;uBAKP,GAAG;yBAkBD,GAAG;uBAcL,GAAG;6BASC,iBAAiB;mCAST,iBAAiB;;EAkCxD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { ColumnDefinition, RowKey, SearchConfig, SearchResult, SearchState, GridEmit } from '../types';
|
|
2
|
+
|
|
3
|
+
export declare function useSearch<T = any>(data: () => T[], columns: () => ColumnDefinition[], config?: SearchConfig, emit?: GridEmit<T>, getRowKey?: (row: T) => RowKey | string | number): {
|
|
4
|
+
searchTerm: import('vue').Ref<string, string>;
|
|
5
|
+
results: import('vue').Ref<{
|
|
6
|
+
row: import('vue').UnwrapRef<T>;
|
|
7
|
+
rowKey: any;
|
|
8
|
+
score: number;
|
|
9
|
+
matches: {
|
|
10
|
+
field: string;
|
|
11
|
+
value: any;
|
|
12
|
+
match: string;
|
|
13
|
+
startIndex: number;
|
|
14
|
+
endIndex: number;
|
|
15
|
+
score?: number | undefined;
|
|
16
|
+
}[];
|
|
17
|
+
highlightedRow?: import('vue').UnwrapRef<T> | undefined;
|
|
18
|
+
}[], SearchResult<T>[] | {
|
|
19
|
+
row: import('vue').UnwrapRef<T>;
|
|
20
|
+
rowKey: any;
|
|
21
|
+
score: number;
|
|
22
|
+
matches: {
|
|
23
|
+
field: string;
|
|
24
|
+
value: any;
|
|
25
|
+
match: string;
|
|
26
|
+
startIndex: number;
|
|
27
|
+
endIndex: number;
|
|
28
|
+
score?: number | undefined;
|
|
29
|
+
}[];
|
|
30
|
+
highlightedRow?: import('vue').UnwrapRef<T> | undefined;
|
|
31
|
+
}[]>;
|
|
32
|
+
loading: import('vue').Ref<boolean, boolean>;
|
|
33
|
+
highlightedRows: import('vue').Ref<Set<any> & Omit<Set<any>, keyof Set<any>>, Set<any> | (Set<any> & Omit<Set<any>, keyof Set<any>>)>;
|
|
34
|
+
searchState: import('vue').ComputedRef<SearchState>;
|
|
35
|
+
hasResults: import('vue').ComputedRef<boolean>;
|
|
36
|
+
hasSearchTerm: import('vue').ComputedRef<boolean>;
|
|
37
|
+
isSearching: import('vue').ComputedRef<boolean>;
|
|
38
|
+
activeMatchIndex: import('vue').Ref<number | undefined, number | undefined>;
|
|
39
|
+
search: (term: string) => void;
|
|
40
|
+
executeSearch: () => void;
|
|
41
|
+
clearSearch: () => void;
|
|
42
|
+
getHighlightedValue: (row: T, field: string) => string;
|
|
43
|
+
isRowHighlighted: (row: T) => boolean;
|
|
44
|
+
getMatchCount: (row: T) => number;
|
|
45
|
+
getMatchesForRow: (row: T) => {
|
|
46
|
+
field: string;
|
|
47
|
+
value: any;
|
|
48
|
+
match: string;
|
|
49
|
+
startIndex: number;
|
|
50
|
+
endIndex: number;
|
|
51
|
+
score?: number | undefined;
|
|
52
|
+
}[];
|
|
53
|
+
searchWithFilters: (term: string, filters: Record<string, any>) => void;
|
|
54
|
+
navigateToNextMatch: () => void;
|
|
55
|
+
navigateToPreviousMatch: () => void;
|
|
56
|
+
getActiveMatch: () => {
|
|
57
|
+
result: {
|
|
58
|
+
row: import('vue').UnwrapRef<T>;
|
|
59
|
+
rowKey: any;
|
|
60
|
+
score: number;
|
|
61
|
+
matches: {
|
|
62
|
+
field: string;
|
|
63
|
+
value: any;
|
|
64
|
+
match: string;
|
|
65
|
+
startIndex: number;
|
|
66
|
+
endIndex: number;
|
|
67
|
+
score?: number | undefined;
|
|
68
|
+
}[];
|
|
69
|
+
highlightedRow?: import('vue').UnwrapRef<T> | undefined;
|
|
70
|
+
};
|
|
71
|
+
match: {
|
|
72
|
+
field: string;
|
|
73
|
+
value: any;
|
|
74
|
+
match: string;
|
|
75
|
+
startIndex: number;
|
|
76
|
+
endIndex: number;
|
|
77
|
+
score?: number | undefined;
|
|
78
|
+
};
|
|
79
|
+
} | null;
|
|
80
|
+
getSearchableFields: () => string[];
|
|
81
|
+
updateConfig: (newConfig: Partial<SearchConfig>) => void;
|
|
82
|
+
updateHighlightConfig: (highlightClass?: string) => void;
|
|
83
|
+
getStats: () => {
|
|
84
|
+
resultCount: number;
|
|
85
|
+
totalMatches: number;
|
|
86
|
+
hasResults: boolean;
|
|
87
|
+
term: string;
|
|
88
|
+
activeMatchIndex: number | undefined;
|
|
89
|
+
cacheSize: number;
|
|
90
|
+
searchableFields: number;
|
|
91
|
+
indexSize: number;
|
|
92
|
+
};
|
|
93
|
+
clearCache: () => void;
|
|
94
|
+
enabled: import('vue').ComputedRef<boolean>;
|
|
95
|
+
totalMatches: import('vue').ComputedRef<number>;
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=useSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSearch.d.ts","sourceRoot":"","sources":["../../src/composables/useSearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGxC,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAC/B,IAAI,EAAE,MAAM,CAAC,EAAE,EACf,OAAO,EAAE,MAAM,gBAAgB,EAAE,EACjC,MAAM,GAAE,YAA6D,EACrE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA+F1B,MAAM;;;+BAgBM,CAAC,SAAS,MAAM,KAAG,MAAM;4BAiB5B,CAAC,KAAG,OAAO;yBAMd,CAAC,KAAG,MAAM;4BAMP,CAAC;;;;;;;;8BAKC,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAsErC,MAAM,EAAE;8BAKP,OAAO,CAAC,YAAY,CAAC;6CA2BN,MAAM;;;;;;;;;;;;;;EA2EvD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SelectionMode, SelectionState, GridEmit } from '../types';
|
|
2
|
+
|
|
3
|
+
export declare function useSelection<T>(mode?: SelectionMode, keyField?: string, emit?: GridEmit<T>): {
|
|
4
|
+
selectedKeys: import('vue').Ref<Set<any> & Omit<Set<any>, keyof Set<any>>, Set<any> | (Set<any> & Omit<Set<any>, keyof Set<any>>)>;
|
|
5
|
+
selectedCount: import('vue').ComputedRef<number>;
|
|
6
|
+
hasSelection: import('vue').ComputedRef<boolean>;
|
|
7
|
+
selectionState: import('vue').ComputedRef<SelectionState>;
|
|
8
|
+
isSelected: (item: T) => boolean;
|
|
9
|
+
toggleSelection: (item: T, index?: number, shiftKey?: boolean) => void;
|
|
10
|
+
selectRange: (startIndex: number, endIndex: number, items: T[]) => void;
|
|
11
|
+
selectAll: (items: T[], allData?: boolean) => void;
|
|
12
|
+
deselectAll: () => void;
|
|
13
|
+
select: (item: T) => void;
|
|
14
|
+
deselect: (item: T) => void;
|
|
15
|
+
selectByKey: (key: any) => void;
|
|
16
|
+
deselectByKey: (key: any) => void;
|
|
17
|
+
selectByKeys: (keys: any[]) => void;
|
|
18
|
+
deselectByKeys: (keys: any[]) => void;
|
|
19
|
+
isAllSelected: (items: T[]) => boolean;
|
|
20
|
+
isSomeSelected: (items: T[]) => boolean;
|
|
21
|
+
toggleSelectAll: (items: T[]) => void;
|
|
22
|
+
getSelectedItems: (allItems: T[]) => T[];
|
|
23
|
+
getSelectedKeys: () => any[];
|
|
24
|
+
setSelectedKeys: (keys: any[]) => void;
|
|
25
|
+
clearSelection: () => void;
|
|
26
|
+
invertSelection: (allItems: T[]) => void;
|
|
27
|
+
selectFiltered: (filteredItems: T[]) => void;
|
|
28
|
+
saveSelectionToStorage: () => void;
|
|
29
|
+
loadSelectionFromStorage: () => void;
|
|
30
|
+
clearSelectionFromStorage: () => void;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=useSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSelection.d.ts","sourceRoot":"","sources":["../../src/composables/useSelection.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,cAAc,EAIf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,GAAE,aAAsE,EAC5E,QAAQ,GAAE,MAAa,EACvB,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;;;;;uBAgBQ,CAAC,KAAG,OAAO;4BAMN,CAAC,UAAU,MAAM,aAAY,OAAO;8BA8ClC,MAAM,YAAY,MAAM,SAAS,CAAC,EAAE;uBAmB3C,CAAC,EAAE,YAAW,OAAO;;mBA8BzB,CAAC;qBAkBC,CAAC;uBAWC,GAAG;yBAeD,GAAG;yBAQH,GAAG,EAAE;2BAwBH,GAAG,EAAE;2BAgBL,CAAC,EAAE,KAAG,OAAO;4BAMZ,CAAC,EAAE,KAAG,OAAO;6BAKZ,CAAC,EAAE;iCAWC,CAAC,EAAE,KAAG,CAAC,EAAE;2BAKjB,GAAG,EAAE;4BAKF,GAAG,EAAE;;gCAgBD,CAAC,EAAE;oCAeC,CAAC,EAAE;;;;EA+G3C"}
|