@file-viewer/renderer-spreadsheet 2.1.2 → 2.1.4

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.
Files changed (2) hide show
  1. package/dist/spreadsheet.js +45 -25
  2. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { createFileViewerWorkerController, createFileViewerZoomChangeEmitter as createZoomChangeEmitter, registerFileViewerZoomProvider, resolveFileViewerSpreadsheetWorkerUrl, unregisterFileViewerZoomProvider, } from '@file-viewer/core';
1
+ import { createFileViewerWorkerController, createFileViewerTranslator, createFileViewerZoomChangeEmitter as createZoomChangeEmitter, registerFileViewerZoomProvider, resolveFileViewerSpreadsheetWorkerUrl, unregisterFileViewerZoomProvider, } from '@file-viewer/core';
2
2
  import { buildRows, clampWindowStart, collectWindowStarts, createEmptyVirtualState, DEFAULT_SHEET_DEFAULTS, displayCellKey, getDataKey, INDEX_COLUMN_KEY, markWindowState, ROW_STATE_FIELD, RowState, WINDOW_SIZE, } from './spreadsheet/state.js';
3
3
  import { buildColumns, createTableConfig, detectIndexOffset, getDisplayColumns, getRowHeight, HEADER_HEIGHT, INDEX_COLUMN_WIDTH, normalizeCellStyle, normalizeRowHeight, RESIZABLE_COLUMN_MIN_WIDTH, } from './spreadsheet/view.js';
4
4
  const spreadsheetStyle = `
@@ -193,34 +193,46 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
193
193
  var _a, _b, _c, _d;
194
194
  const documentRef = target.ownerDocument;
195
195
  const EVirtTable = await loadEVirtTable();
196
+ const t = createFileViewerTranslator(context === null || context === void 0 ? void 0 : context.options);
196
197
  const zoomEmitter = createZoomChangeEmitter();
197
198
  const root = documentRef.createElement('div');
198
199
  root.className = 'excel-wrapper';
199
200
  root.dataset.viewerZoomProvider = 'xlsx';
200
201
  const loading = documentRef.createElement('div');
201
202
  loading.className = 'loading';
202
- loading.innerHTML = `
203
- <div class="loading-card">
204
- <div class="loading-brand">XLSX</div>
205
- <div class="loading-copy">
206
- <span class="loading-kicker">Excel 表格</span>
207
- <strong data-loading-title>正在解析 Excel 工作簿</strong>
208
- <p>正在准备工作表、样式和大数据视口,请稍候。</p>
209
- </div>
210
- <span class="loading-spinner"></span>
211
- </div>
212
- `;
203
+ const loadingCard = documentRef.createElement('div');
204
+ loadingCard.className = 'loading-card';
205
+ const loadingBrand = documentRef.createElement('div');
206
+ loadingBrand.className = 'loading-brand';
207
+ loadingBrand.textContent = 'XLSX';
208
+ const loadingCopy = documentRef.createElement('div');
209
+ loadingCopy.className = 'loading-copy';
210
+ const loadingKicker = documentRef.createElement('span');
211
+ loadingKicker.className = 'loading-kicker';
212
+ loadingKicker.textContent = t('spreadsheet.loading.kicker');
213
+ const loadingTitle = documentRef.createElement('strong');
214
+ loadingTitle.dataset.loadingTitle = 'true';
215
+ loadingTitle.textContent = t('spreadsheet.loading.title');
216
+ const loadingHint = documentRef.createElement('p');
217
+ loadingHint.textContent = t('spreadsheet.loading.hint');
218
+ loadingCopy.append(loadingKicker, loadingTitle, loadingHint);
219
+ const loadingSpinner = documentRef.createElement('span');
220
+ loadingSpinner.className = 'loading-spinner';
221
+ loadingCard.append(loadingBrand, loadingCopy, loadingSpinner);
222
+ loading.appendChild(loadingCard);
213
223
  const error = documentRef.createElement('div');
214
224
  error.className = 'error hidden';
215
225
  const tableWrapper = documentRef.createElement('div');
216
226
  tableWrapper.className = 'table-wrapper';
217
227
  const sheetLoading = documentRef.createElement('div');
218
228
  sheetLoading.className = 'sheet-loading hidden';
219
- sheetLoading.innerHTML = `
220
- <span class="sheet-loading-dot"></span>
221
- <span>正在平滑补充可视区数据</span>
222
- <span class="sheet-loading-summary"></span>
223
- `;
229
+ const sheetLoadingDot = documentRef.createElement('span');
230
+ sheetLoadingDot.className = 'sheet-loading-dot';
231
+ const sheetLoadingText = documentRef.createElement('span');
232
+ sheetLoadingText.textContent = t('spreadsheet.loading.streaming');
233
+ const sheetLoadingSummary = documentRef.createElement('span');
234
+ sheetLoadingSummary.className = 'sheet-loading-summary';
235
+ sheetLoading.append(sheetLoadingDot, sheetLoadingText, sheetLoadingSummary);
224
236
  const tableHostShell = documentRef.createElement('div');
225
237
  tableHostShell.className = 'table-host';
226
238
  const tableHost = documentRef.createElement('div');
@@ -236,7 +248,7 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
236
248
  toolbar.className = 'toolbar';
237
249
  const sheetTabsBar = documentRef.createElement('div');
238
250
  sheetTabsBar.className = 'btn-group';
239
- sheetTabsBar.setAttribute('aria-label', '工作表列表');
251
+ sheetTabsBar.setAttribute('aria-label', t('spreadsheet.tabs.ariaLabel'));
240
252
  const summary = documentRef.createElement('div');
241
253
  summary.className = 'summary';
242
254
  toolbar.append(sheetTabsBar, summary);
@@ -293,17 +305,22 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
293
305
  const getSheetLoadingText = () => {
294
306
  var _a;
295
307
  if (!sheets.length) {
296
- return '正在解析 Excel 工作簿,请耐心等待...';
308
+ return t('spreadsheet.state.parsingWorkbook');
297
309
  }
298
310
  const activeName = (_a = getActiveSheet()) === null || _a === void 0 ? void 0 : _a.name;
299
- return activeName ? `正在准备「${activeName}」...` : '正在准备工作表内容...';
311
+ return activeName
312
+ ? t('spreadsheet.state.preparingSheetNamed', { name: activeName })
313
+ : t('spreadsheet.state.preparingSheet');
300
314
  };
301
315
  const getCachedSummary = () => {
302
316
  if (!totalRows) {
303
317
  return '';
304
318
  }
305
319
  const cachedRows = Math.min(loadedWindowCount * WINDOW_SIZE, totalRows);
306
- return `已缓存 ${cachedRows.toLocaleString()} / ${totalRows.toLocaleString()} 行`;
320
+ return t('spreadsheet.state.cachedRows', {
321
+ cached: cachedRows.toLocaleString(),
322
+ total: totalRows.toLocaleString(),
323
+ });
307
324
  };
308
325
  const getStatusSummary = () => {
309
326
  var _a, _b;
@@ -313,9 +330,12 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
313
330
  return '';
314
331
  }
315
332
  if (!cols) {
316
- return `共 ${rows} 行,按视口预取平滑加载`;
333
+ return t('spreadsheet.state.rows', { rows: rows.toLocaleString() });
317
334
  }
318
- return `共 ${rows} 行,${cols} 列,按视口预取平滑加载`;
335
+ return t('spreadsheet.state.rowsAndColumns', {
336
+ rows: rows.toLocaleString(),
337
+ cols: cols.toLocaleString(),
338
+ });
319
339
  };
320
340
  const getZoomState = () => ({
321
341
  scale: zoom,
@@ -919,13 +939,13 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
919
939
  virtualState.loadingWindows.clear();
920
940
  syncWindowStats();
921
941
  }
922
- errorMessage = message || 'Excel 解析失败';
942
+ errorMessage = message || t('spreadsheet.error.parseFailed');
923
943
  renderChrome();
924
944
  });
925
945
  controller.onWorkerError((event) => {
926
946
  sheetInitializing = false;
927
947
  loadingState = false;
928
- errorMessage = event.message || 'Excel Worker 运行失败';
948
+ errorMessage = event.message || t('spreadsheet.error.workerFailed');
929
949
  renderChrome();
930
950
  });
931
951
  (_c = context === null || context === void 0 ? void 0 : context.registerExportAdapter) === null || _c === void 0 ? void 0 : _c.call(context, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@file-viewer/renderer-spreadsheet",
3
- "version": "2.1.2",
3
+ "version": "2.1.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Standalone spreadsheet renderer plugin for Flyfish File Viewer powered by styled-exceljs and e-virt-table.",
@@ -68,7 +68,7 @@
68
68
  "LICENSE"
69
69
  ],
70
70
  "dependencies": {
71
- "@file-viewer/core": "^2.1.2",
71
+ "@file-viewer/core": "^2.1.4",
72
72
  "e-virt-table": "^1.3.26",
73
73
  "styled-exceljs": "0.21.1",
74
74
  "tinycolor2": "^1.6.0"