@file-viewer/renderer-spreadsheet 2.1.3 → 2.1.5

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,6 +1,7 @@
1
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
+ const EXCEL_IMAGE_SCROLLBAR_GUARD = 18;
4
5
  const spreadsheetStyle = `
5
6
  .excel-wrapper{position:relative;width:100%;height:100%;display:flex;flex-direction:column;background:#fff;color:#172033;font-family:Aptos,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif}
6
7
  .excel-wrapper *{box-sizing:border-box}
@@ -13,7 +14,7 @@ const spreadsheetStyle = `
13
14
  .excel-wrapper .sheet-loading{position:absolute;right:18px;bottom:18px;z-index:20;display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:14px;background:rgba(33,163,102,.1);border:1px solid rgba(33,163,102,.2);box-shadow:0 8px 20px rgba(33,163,102,.12);color:#1a7f50;font-size:12px;font-weight:700;pointer-events:none}
14
15
  .excel-wrapper .sheet-loading-dot{width:8px;height:8px;flex-shrink:0;border-radius:999px;background:#21a366;box-shadow:0 0 0 6px rgba(33,163,102,.12);animation:sheet-loading-pulse 1.2s ease-in-out infinite}
15
16
  .excel-wrapper .sheet-loading-summary{color:#5f6368}
16
- .excel-wrapper .excel-image-viewport{position:absolute;right:0;bottom:0;z-index:35;overflow:hidden;pointer-events:none}
17
+ .excel-wrapper .excel-image-viewport{position:absolute;z-index:35;overflow:hidden;pointer-events:none}
17
18
  .excel-wrapper .excel-image-layer{position:absolute;inset:0 auto auto 0;width:0;height:0;transform-origin:0 0;will-change:transform}
18
19
  .excel-wrapper .excel-image{position:absolute;display:block;max-width:none;height:auto;object-fit:contain;user-select:none}
19
20
  .excel-wrapper .loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.96);z-index:999;backdrop-filter:blur(6px)}
@@ -346,10 +347,26 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
346
347
  minScale: 0.5,
347
348
  maxScale: 2.5,
348
349
  });
350
+ const getImageViewportScrollbarGuard = () => {
351
+ const tableContainer = tableHost.querySelector('.e-virt-table-container');
352
+ const vertical = tableContainer
353
+ ? Math.max(tableContainer.offsetWidth - tableContainer.clientWidth, 0)
354
+ : 0;
355
+ const horizontal = tableContainer
356
+ ? Math.max(tableContainer.offsetHeight - tableContainer.clientHeight, 0)
357
+ : 0;
358
+ // e-virt-table may draw overlay scrollbars, so keep a small reserved lane
359
+ // even when native scrollbar metrics report zero.
360
+ return {
361
+ vertical: vertical || EXCEL_IMAGE_SCROLLBAR_GUARD,
362
+ horizontal: horizontal || EXCEL_IMAGE_SCROLLBAR_GUARD,
363
+ };
364
+ };
349
365
  const renderImages = () => {
350
366
  const margin = 240;
351
- const width = Math.max(imageViewportState.width - scalePx(INDEX_COLUMN_WIDTH), 0);
352
- const height = Math.max(imageViewportState.height - scalePx(HEADER_HEIGHT), 0);
367
+ const guard = getImageViewportScrollbarGuard();
368
+ const width = Math.max(imageViewportState.width - scalePx(INDEX_COLUMN_WIDTH) - guard.vertical, 0);
369
+ const height = Math.max(imageViewportState.height - scalePx(HEADER_HEIGHT) - guard.horizontal, 0);
353
370
  const visibleImages = sheetImages.filter((image) => {
354
371
  const x = scalePx(image.left) - imageViewportState.scrollX;
355
372
  const y = scalePx(image.top) - imageViewportState.scrollY;
@@ -362,6 +379,10 @@ const renderFileViewerSpreadsheet = async (buffer, target, _type, context) => {
362
379
  Object.assign(imageViewport.style, {
363
380
  left: `${scalePx(INDEX_COLUMN_WIDTH)}px`,
364
381
  top: `${scalePx(HEADER_HEIGHT)}px`,
382
+ right: 'auto',
383
+ bottom: 'auto',
384
+ width: `${width}px`,
385
+ height: `${height}px`,
365
386
  });
366
387
  imageLayer.style.transform =
367
388
  `translate(${-imageViewportState.scrollX}px, ${-imageViewportState.scrollY}px)`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@file-viewer/renderer-spreadsheet",
3
- "version": "2.1.3",
3
+ "version": "2.1.5",
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.3",
71
+ "@file-viewer/core": "^2.1.5",
72
72
  "e-virt-table": "^1.3.26",
73
73
  "styled-exceljs": "0.21.1",
74
74
  "tinycolor2": "^1.6.0"