@sl-material/sl-table-sheet 1.0.0-beta6 → 1.0.0-beta7
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/core/SlTableSheet.d.ts +27 -3
- package/core/TableSheet.d.ts +0 -5
- package/core/Toolbar.d.ts +2 -24
- package/core/styles/dialog.d.ts +5 -0
- package/core/styles/index.d.ts +2 -0
- package/core/styles/toolbar.d.ts +5 -0
- package/core/utils/DomUtils.d.ts +23 -0
- package/core/utils/index.d.ts +1 -0
- package/package.json +1 -1
- package/sl-table-sheet.cjs.js +455 -490
- package/sl-table-sheet.es.js +8363 -8394
- package/sl-table-sheet.umd.umd.js +455 -490
package/core/SlTableSheet.d.ts
CHANGED
|
@@ -4,6 +4,13 @@ import { Toolbar, ToolbarConfig } from './Toolbar';
|
|
|
4
4
|
import { SheetTabs } from './SheetTabs';
|
|
5
5
|
import { ExcelParseOptions, ExcelParseResult, MultiSheetParseResult, SheetData } from './excel';
|
|
6
6
|
|
|
7
|
+
/** Loading 配置 */
|
|
8
|
+
export interface LoadingConfig {
|
|
9
|
+
/** 是否显示 loading,默认 true */
|
|
10
|
+
show?: boolean;
|
|
11
|
+
/** loading 文本,默认 "加载中..." */
|
|
12
|
+
text?: string;
|
|
13
|
+
}
|
|
7
14
|
export interface SlTableSheetConfig extends Omit<TableSheetConfig, "container"> {
|
|
8
15
|
container: HTMLElement | string;
|
|
9
16
|
showToolbar?: boolean;
|
|
@@ -11,6 +18,8 @@ export interface SlTableSheetConfig extends Omit<TableSheetConfig, "container">
|
|
|
11
18
|
showTabs?: boolean;
|
|
12
19
|
/** 是否启用自动监听容器尺寸变化,默认 false */
|
|
13
20
|
autoResize?: boolean;
|
|
21
|
+
/** Loading 配置 */
|
|
22
|
+
loading?: LoadingConfig;
|
|
14
23
|
toolbar?: Partial<ToolbarConfig>;
|
|
15
24
|
onExport?: (format: "csv" | "excel") => void;
|
|
16
25
|
onRefresh?: () => void;
|
|
@@ -99,8 +108,9 @@ export declare class SlTableSheet {
|
|
|
99
108
|
private injectStyles;
|
|
100
109
|
/**
|
|
101
110
|
* 更新标题统计
|
|
111
|
+
* @deprecated 此方法已废弃,请使用 leftSlot 自定义标题内容
|
|
102
112
|
*/
|
|
103
|
-
updateTitleStats(
|
|
113
|
+
updateTitleStats(_count: number, _total: number): void;
|
|
104
114
|
/**
|
|
105
115
|
* 获取 TableSheet 实例
|
|
106
116
|
*/
|
|
@@ -144,20 +154,29 @@ export declare class SlTableSheet {
|
|
|
144
154
|
downloadExcel(filename?: string): void;
|
|
145
155
|
/**
|
|
146
156
|
* 显示 loading 状态
|
|
157
|
+
* @param text loading 文本,不传则使用配置中的默认文本
|
|
147
158
|
*/
|
|
148
159
|
showLoading(text?: string): void;
|
|
149
160
|
/**
|
|
150
161
|
* 隐藏 loading 状态
|
|
151
162
|
*/
|
|
152
163
|
hideLoading(): void;
|
|
164
|
+
/**
|
|
165
|
+
* 设置 loading 状态
|
|
166
|
+
* @param visible 是否显示
|
|
167
|
+
* @param text loading 文本
|
|
168
|
+
*/
|
|
169
|
+
setLoading(visible: boolean, text?: string): void;
|
|
153
170
|
/**
|
|
154
171
|
* 解析在线 Excel 文件并显示到表格
|
|
155
172
|
* @param url Excel 文件的 URL 地址
|
|
156
|
-
* @param options
|
|
173
|
+
* @param options 解析选项,支持 showLoading 和 loadingText 覆盖全局配置
|
|
157
174
|
* @returns 解析后的列配置和数据
|
|
158
175
|
*/
|
|
159
176
|
loadExcelFromUrl(url: string, options?: ExcelParseOptions & {
|
|
160
177
|
autoDisplay?: boolean;
|
|
178
|
+
showLoading?: boolean;
|
|
179
|
+
loadingText?: string;
|
|
161
180
|
}): Promise<ExcelParseResult>;
|
|
162
181
|
/**
|
|
163
182
|
* 解析 Excel ArrayBuffer 并显示到表格
|
|
@@ -219,8 +238,13 @@ export declare class SlTableSheet {
|
|
|
219
238
|
destroy(): void;
|
|
220
239
|
/**
|
|
221
240
|
* 从 URL 加载 Excel 所有 Sheet
|
|
241
|
+
* @param url Excel 文件的 URL 地址
|
|
242
|
+
* @param options 解析选项,支持 showLoading 和 loadingText 覆盖全局配置
|
|
222
243
|
*/
|
|
223
|
-
loadAllSheetsFromUrl(url: string, options?: Omit<ExcelParseOptions, "sheetIndex">
|
|
244
|
+
loadAllSheetsFromUrl(url: string, options?: Omit<ExcelParseOptions, "sheetIndex"> & {
|
|
245
|
+
showLoading?: boolean;
|
|
246
|
+
loadingText?: string;
|
|
247
|
+
}): Promise<MultiSheetParseResult>;
|
|
224
248
|
/**
|
|
225
249
|
* 解析 Excel ArrayBuffer 的所有 Sheet
|
|
226
250
|
*/
|
package/core/TableSheet.d.ts
CHANGED
|
@@ -92,7 +92,6 @@ export declare class TableSheet {
|
|
|
92
92
|
private customComponentManager;
|
|
93
93
|
private cellMarkManager;
|
|
94
94
|
private eventManager;
|
|
95
|
-
private editorManager;
|
|
96
95
|
private lastWidth;
|
|
97
96
|
private lastHeight;
|
|
98
97
|
private resizeTimeout;
|
|
@@ -174,10 +173,6 @@ export declare class TableSheet {
|
|
|
174
173
|
* 防抖的 resize 方法(用于频繁触发的场景)
|
|
175
174
|
*/
|
|
176
175
|
resizeDebounced(): void;
|
|
177
|
-
/**
|
|
178
|
-
* 强制重新渲染表格
|
|
179
|
-
*/
|
|
180
|
-
private forceRerender;
|
|
181
176
|
/**
|
|
182
177
|
* 获取原始实例
|
|
183
178
|
*/
|
package/core/Toolbar.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
|
|
2
2
|
export interface ToolbarConfig {
|
|
3
3
|
container?: HTMLElement | string;
|
|
4
|
-
|
|
5
|
-
count?: number;
|
|
6
|
-
total?: number;
|
|
7
|
-
hint?: string;
|
|
4
|
+
/** 冻结列数 */
|
|
8
5
|
freezeCount?: number;
|
|
6
|
+
/** 是否显示错误列表 */
|
|
9
7
|
showErrorList?: boolean;
|
|
10
8
|
/** 左侧自定义内容,可以是 HTMLElement 或返回 HTMLElement 的函数 */
|
|
11
9
|
leftSlot?: HTMLElement | (() => HTMLElement) | null;
|
|
@@ -26,10 +24,6 @@ export declare class Toolbar {
|
|
|
26
24
|
private config;
|
|
27
25
|
private elements;
|
|
28
26
|
constructor(config: ToolbarConfig);
|
|
29
|
-
/**
|
|
30
|
-
* 初始化
|
|
31
|
-
*/
|
|
32
|
-
private init;
|
|
33
27
|
/**
|
|
34
28
|
* 获取容器
|
|
35
29
|
*/
|
|
@@ -54,26 +48,10 @@ export declare class Toolbar {
|
|
|
54
48
|
* 创建冻结列选择器(标题 + 数字输入框 + 上下箭头)
|
|
55
49
|
*/
|
|
56
50
|
private createFreezeButton;
|
|
57
|
-
/**
|
|
58
|
-
* 格式化数字(添加千分位)
|
|
59
|
-
*/
|
|
60
|
-
private formatNumber;
|
|
61
51
|
/**
|
|
62
52
|
* 注入样式
|
|
63
53
|
*/
|
|
64
54
|
private injectStyles;
|
|
65
|
-
/**
|
|
66
|
-
* 更新标题
|
|
67
|
-
*/
|
|
68
|
-
updateTitle(title: string): void;
|
|
69
|
-
/**
|
|
70
|
-
* 更新统计数据
|
|
71
|
-
*/
|
|
72
|
-
updateStats(count: number, total: number): void;
|
|
73
|
-
/**
|
|
74
|
-
* 更新提示信息
|
|
75
|
-
*/
|
|
76
|
-
updateHint(hint: string): void;
|
|
77
55
|
/**
|
|
78
56
|
* 更新冻结列数
|
|
79
57
|
*/
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dialog 样式
|
|
3
|
+
*/
|
|
4
|
+
export declare const DIALOG_STYLES = "\n .find-replace-dialog {\n position: fixed;\n top: 80px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 9999;\n font-size: 14px;\n color: #1D2129;\n pointer-events: auto;\n }\n\n .find-replace-container {\n background: white;\n border-radius: 8px;\n width: 500px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n animation: slideIn 0.2s ease-out;\n }\n\n @keyframes slideIn {\n from { opacity: 0; transform: translateX(20px); }\n to { opacity: 1; transform: translateX(0); }\n }\n\n .find-replace-title {\n font-size: 16px;\n font-weight: 500;\n color: #303133;\n }\n\n .find-replace-body {\n padding: 16px;\n }\n\n .find-replace-group {\n margin-bottom: 16px;\n display: flex;\n align-items: center;\n }\n\n .find-replace-label {\n display: block;\n min-width: 56px;\n margin-right: 8px;\n }\n\n .find-replace-checkbox {\n display: none;\n align-items: center;\n font-weight: normal;\n min-width: auto;\n margin-right: 0;\n }\n\n .find-replace-checkbox input {\n margin-right: 6px;\n }\n\n .find-replace-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n flex: 1;\n height: 32px;\n }\n\n .find-replace-input {\n width: 100%;\n padding: 0px 12px;\n border: 1px solid #dcdfe6;\n border-radius: 4px;\n height: 32px;\n }\n\n .find-replace-input:focus {\n outline: none;\n border-color: #409eff;\n }\n\n .current-position {\n margin-left: 10px;\n color: #409eff;\n font-weight: 500;\n }\n\n .find-replace-footer {\n padding: 0px 16px 16px 16px;\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n flex-wrap: wrap;\n }\n\n .find-replace-btn {\n padding: 6px 16px;\n border-radius: 4px;\n height: 32px;\n cursor: pointer;\n background: var(--sl-color-white);\n border: 1px solid var(--sl-border-color);\n }\n\n .find-replace-btn-primary {\n background-color: var(--sl-color-primary);\n color: white;\n }\n\n .find-replace-btn-primary:hover {\n border-color: var(--sl-button-hover-border-color);\n background-color: var(--sl-button-hover-bg-color);\n }\n\n .message-toast {\n height: 40px;\n position: fixed;\n top: 20px;\n left: 50%;\n transform: translateX(-50%) translateY(-100px);\n padding: 11px 15px;\n color: white;\n border-radius: 4px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n z-index: 9999;\n opacity: 0;\n transition: all 0.3s ease-out;\n display: flex;\n align-items: center;\n }\n\n .message-toast--info {\n background-color: var(--sl-color-info-light-9);\n border: 1px solid var(--sl-color-info-light-8);\n color: var(--sl-color-info);\n }\n\n .message-toast--success {\n background-color: var(--sl-color-success-light-9);\n border: 1px solid var(--sl-color-success-light-8);\n color: var(--sl-color-success);\n }\n\n .message-toast--warning {\n background-color: var(--sl-color-warning-light-9);\n border: 1px solid var(--sl-color-warning-light-8);\n color: var(--sl-color-warning);\n }\n\n .message-toast--error {\n background-color: var(--sl-color-error-light-9);\n border: 1px solid var(--sl-color-error-light-8);\n color: var(--sl-color-error);\n }\n\n .message-toast.show {\n transform: translateX(-50%) translateY(0);\n opacity: 1;\n }\n";
|
|
5
|
+
export declare const DIALOG_STYLE_ID = "find-replace-styles";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Toolbar 样式
|
|
3
|
+
*/
|
|
4
|
+
export declare const TOOLBAR_STYLES = "\n .sl-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n background: var(--sl-vtable-card-bg-color);\n font-size: 14px;\n color: var(--sl-vtable-content-color);\n flex-shrink: 0;\n height: 60px;\n border-radius: 4px;\n }\n \n .sl-toolbar-right {\n display: flex;\n align-items: center;\n gap: 24px;\n }\n\n .sl-toolbar-btn {\n padding: 6px 14px;\n height: 32px;\n background: var(--sl-vtable-bg-color1);\n border: 1px solid var(--sl-vtable-bg-color1);\n border-radius: 8px;\n font-size: 14px;\n color: var(--sl-vtable-content-color);\n cursor: pointer;\n transition: all 0.2s;\n white-space: nowrap;\n }\n\n .sl-toolbar-btn:hover {\n background: #E8E9EB;\n }\n\n .sl-toolbar-btn-icon {\n padding: 6px 10px;\n font-size: 16px;\n min-width: 32px;\n }\n\n .sl-toolbar-btn-complex {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .sl-btn-icon {\n font-size: 14px;\n }\n\n .sl-btn-text {\n font-size: 14px;\n }\n\n .sl-btn-count {\n font-size: 14px;\n font-weight: 600;\n color: var(--sl-vtable-primary-color);\n }\n\n .sl-btn-suffix {\n font-size: 14px;\n }\n\n .sl-freeze-selector {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .sl-freeze-label {\n font-size: 14px;\n color: var(--sl-vtable-content-color);\n white-space: nowrap;\n }\n\n .sl-freeze-input-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n background: var(--sl-vtable-bg-color1);\n border: 1px solid var(--sl-vtable-bg-color1);\n border-radius: 8px;\n transition: all 0.2s;\n height: 32px;\n box-sizing: border-box;\n }\n\n .sl-freeze-input-wrapper:hover {\n background: #E8E9EB;\n border-color: var(--sl-vtable-primary-color);\n }\n\n .sl-freeze-input-wrapper:focus-within {\n border-color: var(--sl-vtable-primary-color);\n box-shadow: 0 0 0 2px rgba(40, 120, 255, 0.1);\n }\n\n .sl-freeze-input {\n width: 30px;\n height: 30px;\n padding: 0px 2px;\n border-radius: 8px 0px 0px 8px;\n background: #fff;\n border: none;\n font-size: 14px;\n color: var(--sl-vtable-content-color);\n text-align: center;\n outline: none;\n -moz-appearance: textfield;\n }\n\n .sl-freeze-input::-webkit-outer-spin-button,\n .sl-freeze-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .sl-freeze-arrows {\n display: flex;\n flex-direction: column;\n border-left: 1px solid #E5E6EB;\n }\n\n .sl-freeze-arrow {\n width: 20px;\n height: 16px;\n padding: 0;\n background: transparent;\n border: none;\n font-size: 8px;\n color: var(--sl-vtable-content-color);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n opacity: 0.6;\n }\n\n .sl-freeze-arrow:hover {\n background: rgba(40, 120, 255, 0.1);\n opacity: 1;\n color: var(--sl-vtable-primary-color);\n }\n\n .sl-freeze-arrow:active {\n background: rgba(40, 120, 255, 0.2);\n }\n\n .sl-freeze-arrow-up {\n border-radius: 0 8px 0 0;\n }\n\n .sl-freeze-arrow-down {\n border-radius: 0 0 8px 0;\n border-top: 1px solid #E5E6EB;\n }\n\n .sl-freeze-suffix {\n font-size: 14px;\n color: var(--sl-vtable-content-color);\n }\n\n .sl-error-list-checkbox {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n user-select: none;\n }\n\n .sl-checkbox-input {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n }\n\n .sl-checkbox-custom {\n position: relative;\n width: 16px;\n height: 16px;\n border: 2px solid #C9CDD4;\n border-radius: 4px;\n background: #fff;\n transition: all 0.2s;\n flex-shrink: 0;\n }\n\n .sl-checkbox-input:checked + .sl-checkbox-custom {\n background: var(--sl-vtable-primary-color);\n border-color: var(--sl-vtable-primary-color);\n }\n\n .sl-checkbox-input:checked + .sl-checkbox-custom::after {\n content: \"\";\n position: absolute;\n left: 4px;\n top: 1px;\n width: 4px;\n height: 8px;\n border: solid white;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n .sl-error-list-checkbox:hover .sl-checkbox-custom {\n border-color: var(--sl-vtable-primary-color);\n }\n\n .sl-checkbox-label {\n font-size: 14px;\n color: var(--sl-vtable-content-color);\n }\n\n /* \u54CD\u5E94\u5F0F\u8BBE\u8BA1 */\n @media (max-width: 768px) {\n .sl-toolbar {\n flex-direction: column;\n align-items: flex-start;\n gap: 12px;\n }\n\n .sl-toolbar-left {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n\n .sl-toolbar-right {\n width: 100%;\n justify-content: flex-start;\n flex-wrap: wrap;\n }\n }\n";
|
|
5
|
+
export declare const TOOLBAR_STYLE_ID = "sl-toolbar-styles";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM 工具类 - 提取公共的 DOM 操作方法
|
|
3
|
+
*/
|
|
4
|
+
export declare class DomUtils {
|
|
5
|
+
/**
|
|
6
|
+
* 获取容器元素
|
|
7
|
+
* @param container 容器元素或选择器
|
|
8
|
+
*/
|
|
9
|
+
static getContainer(container: HTMLElement | string): HTMLElement | null;
|
|
10
|
+
/**
|
|
11
|
+
* 注入样式到页面
|
|
12
|
+
* @param id 样式标签的 ID
|
|
13
|
+
* @param css CSS 内容
|
|
14
|
+
*/
|
|
15
|
+
static injectStyles(id: string, css: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* 创建元素并设置属性
|
|
18
|
+
* @param tag 标签名
|
|
19
|
+
* @param className 类名
|
|
20
|
+
* @param innerHTML 内部 HTML
|
|
21
|
+
*/
|
|
22
|
+
static createElement<K extends keyof HTMLElementTagNameMap>(tag: K, className?: string, innerHTML?: string): HTMLElementTagNameMap[K];
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DomUtils } from './DomUtils';
|