@file-viewer/core 2.2.4 → 2.2.6

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,11 +1,15 @@
1
1
  import { createFileViewerTranslator } from '../i18n/messages.js';
2
- import { normalizeFileViewerPrintMaskRegion } from './printMask.js';
2
+ import { normalizeFileViewerPrintMaskRegion, normalizeFileViewerPrintStamp, } from './printMask.js';
3
3
  const DESIGNER_STYLE = `
4
4
  .fv-print-mask-layer{position:absolute;inset:0;z-index:2147483000;pointer-events:none;}
5
5
  .fv-print-mask-canvas{position:absolute;inset:0;z-index:2147483000;pointer-events:none;cursor:default;}
6
6
  .fv-print-mask-canvas.is-armed{pointer-events:auto;cursor:crosshair;touch-action:none;}
7
7
  .fv-print-mask-block{position:absolute;background:#000;box-sizing:border-box;pointer-events:auto;}
8
8
  .fv-print-mask-block-remove{position:absolute;right:-8px;top:-8px;width:18px;height:18px;border:0;border-radius:999px;background:#111;color:#fff;font:700 12px/18px system-ui,sans-serif;cursor:pointer;padding:0;}
9
+ .fv-print-stamp{position:absolute;box-sizing:border-box;border:1px dashed rgba(22,119,76,.7);border-radius:4px;pointer-events:auto;touch-action:none;cursor:move;transform-origin:center center;}
10
+ .fv-print-stamp img{display:block;width:100%;height:100%;object-fit:contain;pointer-events:none;user-select:none;}
11
+ .fv-print-stamp-resize{position:absolute;right:-7px;bottom:-7px;width:15px;height:15px;border:2px solid #fff;border-radius:4px;background:#16774c;box-shadow:0 1px 5px rgba(15,23,42,.22);cursor:nwse-resize;touch-action:none;}
12
+ .fv-print-stamp-input{display:none!important;}
9
13
  .fv-print-mask-toolbar{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);z-index:2147483001;display:inline-flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid rgba(20,35,53,.12);border-radius:999px;background:rgba(255,255,255,.94);box-shadow:0 12px 28px rgba(15,23,42,.16);pointer-events:auto;max-width:calc(100% - 24px);flex-wrap:wrap;justify-content:center;}
10
14
  .fv-print-mask-toolbar span{font:600 12px/1.2 system-ui,sans-serif;color:#40546a;white-space:nowrap;}
11
15
  .fv-print-mask-toolbar button{min-width:42px;height:30px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:#40546a;font:800 12px/1 system-ui,sans-serif;cursor:pointer;}
@@ -52,6 +56,24 @@ const visibleArea = (element, viewport) => {
52
56
  const height = Math.max(0, Math.min(rect.bottom, viewport.bottom) - Math.max(rect.top, viewport.top));
53
57
  return width * height;
54
58
  };
59
+ const MAX_PRINT_STAMP_BYTES = 10 * 1024 * 1024;
60
+ const readStampFileAsDataUrl = (file, windowRef) => new Promise((resolve, reject) => {
61
+ if (!/^image\/(?:png|jpe?g|webp|gif|svg\+xml)$/i.test(file.type) || file.size > MAX_PRINT_STAMP_BYTES) {
62
+ reject(new Error('Unsupported print stamp image'));
63
+ return;
64
+ }
65
+ const Reader = (windowRef === null || windowRef === void 0 ? void 0 : windowRef.FileReader) || globalThis.FileReader;
66
+ const reader = new Reader();
67
+ reader.addEventListener('load', () => {
68
+ if (typeof reader.result === 'string' && reader.result.startsWith('data:image/')) {
69
+ resolve(reader.result);
70
+ return;
71
+ }
72
+ reject(new Error('Invalid print stamp image'));
73
+ });
74
+ reader.addEventListener('error', () => reject(reader.error || new Error('Failed to read print stamp image')));
75
+ reader.readAsDataURL(file);
76
+ });
55
77
  /**
56
78
  * Opens a page-aware print-mask designer. Browsing remains the default mode;
57
79
  * drawing is armed for the currently visible page only and disarms after one block.
@@ -64,6 +86,9 @@ export const openFileViewerPrintMaskDesigner = (options) => {
64
86
  const regions = [...(options.initialRegions || [])]
65
87
  .map(region => normalizeFileViewerPrintMaskRegion(region))
66
88
  .filter((region) => !!region);
89
+ const stamps = [...(options.initialStamps || [])]
90
+ .map(stamp => normalizeFileViewerPrintStamp(stamp))
91
+ .filter((stamp) => !!stamp);
67
92
  const providedPages = Array.from(new Set(options.pages || []))
68
93
  .filter(page => page === root || root.contains(page));
69
94
  const pageScoped = providedPages.length > 0;
@@ -104,7 +129,8 @@ export const openFileViewerPrintMaskDesigner = (options) => {
104
129
  const surfaces = pageElements.map((element, index) => (createSurface(element, pageScoped ? index : undefined)));
105
130
  const legacySurface = pageScoped &&
106
131
  !surfaces.some(surface => surface.element === root) &&
107
- regions.some(region => region.pageIndex === undefined)
132
+ (regions.some(region => region.pageIndex === undefined) ||
133
+ stamps.some(stamp => stamp.pageIndex === undefined))
108
134
  ? createSurface(root)
109
135
  : null;
110
136
  const allSurfaces = legacySurface ? [...surfaces, legacySurface] : surfaces;
@@ -117,6 +143,14 @@ export const openFileViewerPrintMaskDesigner = (options) => {
117
143
  const addButton = documentRef.createElement('button');
118
144
  addButton.type = 'button';
119
145
  addButton.textContent = t('toolbar.printMaskAdd');
146
+ const stampInput = documentRef.createElement('input');
147
+ stampInput.type = 'file';
148
+ stampInput.accept = 'image/png,image/jpeg,image/webp,image/gif,image/svg+xml';
149
+ stampInput.className = 'fv-print-stamp-input';
150
+ stampInput.setAttribute('data-viewer-print-stamp-input', 'true');
151
+ const stampButton = documentRef.createElement('button');
152
+ stampButton.type = 'button';
153
+ stampButton.textContent = t('toolbar.printStampUpload');
120
154
  const clearButton = documentRef.createElement('button');
121
155
  clearButton.type = 'button';
122
156
  clearButton.textContent = t('toolbar.printMaskClear');
@@ -127,8 +161,8 @@ export const openFileViewerPrintMaskDesigner = (options) => {
127
161
  confirmButton.type = 'button';
128
162
  confirmButton.className = 'primary';
129
163
  confirmButton.textContent = t('toolbar.printMaskConfirm');
130
- toolbar.append(hint, addButton, clearButton, cancelButton, confirmButton);
131
- layer.append(toolbar);
164
+ toolbar.append(hint, addButton, stampButton, clearButton, cancelButton, confirmButton);
165
+ layer.append(stampInput, toolbar);
132
166
  root.appendChild(layer);
133
167
  const disarm = () => {
134
168
  surfaces.forEach(surface => surface.canvas.classList.remove('is-armed'));
@@ -157,16 +191,16 @@ export const openFileViewerPrintMaskDesigner = (options) => {
157
191
  }
158
192
  resolve(result);
159
193
  };
160
- const surfaceForRegion = (region) => {
161
- if (region.pageIndex === undefined) {
194
+ const surfaceForItem = (item) => {
195
+ if (item.pageIndex === undefined) {
162
196
  return legacySurface || surfaces[0];
163
197
  }
164
- return surfaces.find(surface => surface.pageIndex === region.pageIndex) || null;
198
+ return surfaces.find(surface => surface.pageIndex === item.pageIndex) || null;
165
199
  };
166
200
  const renderRegions = () => {
167
201
  allSurfaces.forEach(surface => surface.canvas.replaceChildren());
168
202
  regions.forEach((region, index) => {
169
- const surface = surfaceForRegion(region);
203
+ const surface = surfaceForItem(region);
170
204
  if (!surface) {
171
205
  return;
172
206
  }
@@ -192,6 +226,105 @@ export const openFileViewerPrintMaskDesigner = (options) => {
192
226
  block.appendChild(remove);
193
227
  surface.canvas.appendChild(block);
194
228
  });
229
+ stamps.forEach((stamp, index) => {
230
+ const surface = surfaceForItem(stamp);
231
+ if (!surface) {
232
+ return;
233
+ }
234
+ const stampElement = documentRef.createElement('div');
235
+ stampElement.className = 'fv-print-stamp';
236
+ stampElement.setAttribute('data-viewer-print-stamp', String(index));
237
+ const applyStampStyle = () => {
238
+ var _a, _b;
239
+ stampElement.style.left = `${stamp.left}%`;
240
+ stampElement.style.top = `${stamp.top}%`;
241
+ stampElement.style.width = `${stamp.width}%`;
242
+ stampElement.style.height = `${stamp.height}%`;
243
+ stampElement.style.opacity = String((_a = stamp.opacity) !== null && _a !== void 0 ? _a : 1);
244
+ stampElement.style.transform = `rotate(${(_b = stamp.rotate) !== null && _b !== void 0 ? _b : 0}deg)`;
245
+ };
246
+ applyStampStyle();
247
+ const image = documentRef.createElement('img');
248
+ image.src = stamp.src;
249
+ image.alt = stamp.alt || '';
250
+ image.draggable = false;
251
+ const remove = documentRef.createElement('button');
252
+ remove.type = 'button';
253
+ remove.className = 'fv-print-mask-block-remove';
254
+ remove.title = t('toolbar.printStampRemove');
255
+ remove.setAttribute('aria-label', t('toolbar.printStampRemove'));
256
+ remove.textContent = '−';
257
+ remove.addEventListener('pointerdown', event => event.stopPropagation());
258
+ remove.addEventListener('click', event => {
259
+ event.preventDefault();
260
+ event.stopPropagation();
261
+ stamps.splice(index, 1);
262
+ renderRegions();
263
+ });
264
+ const resize = documentRef.createElement('span');
265
+ resize.className = 'fv-print-stamp-resize';
266
+ resize.setAttribute('role', 'button');
267
+ resize.setAttribute('aria-label', t('toolbar.printStampResize'));
268
+ resize.title = t('toolbar.printStampResize');
269
+ let interaction = null;
270
+ stampElement.addEventListener('pointerdown', event => {
271
+ var _a;
272
+ if (event.button !== 0 || event.target.closest('button')) {
273
+ return;
274
+ }
275
+ event.preventDefault();
276
+ event.stopPropagation();
277
+ interaction = {
278
+ pointerId: event.pointerId,
279
+ mode: event.target === resize ? 'resize' : 'move',
280
+ startX: event.clientX,
281
+ startY: event.clientY,
282
+ left: stamp.left,
283
+ top: stamp.top,
284
+ width: stamp.width,
285
+ height: stamp.height,
286
+ };
287
+ (_a = stampElement.setPointerCapture) === null || _a === void 0 ? void 0 : _a.call(stampElement, event.pointerId);
288
+ });
289
+ stampElement.addEventListener('pointermove', event => {
290
+ if (!interaction || interaction.pointerId !== event.pointerId) {
291
+ return;
292
+ }
293
+ event.preventDefault();
294
+ const bounds = surface.canvas.getBoundingClientRect();
295
+ if (!bounds.width || !bounds.height) {
296
+ return;
297
+ }
298
+ const deltaX = ((event.clientX - interaction.startX) / bounds.width) * 100;
299
+ const deltaY = ((event.clientY - interaction.startY) / bounds.height) * 100;
300
+ if (interaction.mode === 'move') {
301
+ stamp.left = Math.max(0, Math.min(100 - stamp.width, interaction.left + deltaX));
302
+ stamp.top = Math.max(0, Math.min(100 - stamp.height, interaction.top + deltaY));
303
+ }
304
+ else {
305
+ stamp.width = Math.max(4, Math.min(100 - stamp.left, interaction.width + deltaX));
306
+ stamp.height = Math.max(4, Math.min(100 - stamp.top, interaction.height + deltaY));
307
+ }
308
+ applyStampStyle();
309
+ });
310
+ const endInteraction = (event) => {
311
+ var _a;
312
+ if (!interaction || interaction.pointerId !== event.pointerId) {
313
+ return;
314
+ }
315
+ try {
316
+ (_a = stampElement.releasePointerCapture) === null || _a === void 0 ? void 0 : _a.call(stampElement, interaction.pointerId);
317
+ }
318
+ catch {
319
+ // Pointer capture may already be released by the browser.
320
+ }
321
+ interaction = null;
322
+ };
323
+ stampElement.addEventListener('pointerup', endInteraction);
324
+ stampElement.addEventListener('pointercancel', endInteraction);
325
+ stampElement.append(image, remove, resize);
326
+ surface.canvas.appendChild(stampElement);
327
+ });
195
328
  };
196
329
  const pointFromEvent = (event, canvas) => {
197
330
  const bounds = canvas.getBoundingClientRect();
@@ -257,30 +390,70 @@ export const openFileViewerPrintMaskDesigner = (options) => {
257
390
  renderRegions();
258
391
  });
259
392
  });
260
- addButton.addEventListener('click', () => {
393
+ const getActiveSurface = () => {
261
394
  var _a;
262
- disarm();
263
395
  const viewport = root.getBoundingClientRect();
264
- const activeSurface = ((_a = surfaces
396
+ return ((_a = surfaces
265
397
  .map(surface => ({ surface, area: visibleArea(surface.element, viewport) }))
266
398
  .sort((left, right) => right.area - left.area)[0]) === null || _a === void 0 ? void 0 : _a.surface) || surfaces[0];
399
+ };
400
+ addButton.addEventListener('click', () => {
401
+ disarm();
402
+ const activeSurface = getActiveSurface();
267
403
  activeSurface === null || activeSurface === void 0 ? void 0 : activeSurface.canvas.classList.add('is-armed');
268
404
  addButton.classList.toggle('is-active', Boolean(activeSurface));
269
405
  });
406
+ stampButton.addEventListener('click', () => {
407
+ disarm();
408
+ stampInput.click();
409
+ });
410
+ stampInput.addEventListener('change', async () => {
411
+ var _a;
412
+ const file = (_a = stampInput.files) === null || _a === void 0 ? void 0 : _a[0];
413
+ stampInput.value = '';
414
+ if (!file) {
415
+ return;
416
+ }
417
+ try {
418
+ const src = await readStampFileAsDataUrl(file, documentRef.defaultView);
419
+ const activeSurface = getActiveSurface();
420
+ if (!activeSurface) {
421
+ return;
422
+ }
423
+ const stamp = normalizeFileViewerPrintStamp({
424
+ src,
425
+ alt: file.name,
426
+ left: 38,
427
+ top: 38,
428
+ width: 24,
429
+ height: 18,
430
+ pageIndex: activeSurface.pageIndex,
431
+ });
432
+ if (stamp) {
433
+ stamps.push(stamp);
434
+ renderRegions();
435
+ }
436
+ }
437
+ catch {
438
+ // Unsupported or unreadable images are ignored; the document stays untouched.
439
+ }
440
+ });
270
441
  clearButton.addEventListener('click', () => {
271
442
  regions.splice(0, regions.length);
443
+ stamps.splice(0, stamps.length);
272
444
  disarm();
273
445
  renderRegions();
274
446
  });
275
447
  cancelButton.addEventListener('click', () => finish(null));
276
448
  confirmButton.addEventListener('click', () => {
277
- if (!regions.length) {
449
+ if (!regions.length && !stamps.length) {
278
450
  finish(null);
279
451
  return;
280
452
  }
281
453
  finish({
282
454
  mask: {
283
- regions: regions.map(region => ({ ...region })),
455
+ ...(regions.length ? { regions: regions.map(region => ({ ...region })) } : {}),
456
+ ...(stamps.length ? { stamps: stamps.map(stamp => ({ ...stamp })) } : {}),
284
457
  color,
285
458
  },
286
459
  });
@@ -3,6 +3,8 @@ export type { FileViewerRendererAssetDefinition, FileViewerRendererAssetKind, Fi
3
3
  export { ADAPTER_PRINT_REQUIRED_EXTENSIONS, applyFileViewerZoomAvailability, createUnsupportedAvailability, DEFAULT_OPERATION_AVAILABILITY, DOM_PRINTABLE_EXTENSIONS, getRendererAvailability, isDomPrintableExtension, isKnownNonPrintableExtension, needsDedicatedPrintAdapter, NON_PRINTABLE_EXTENSIONS, resolvePrintAvailability, } from './registry/capabilities';
4
4
  export { DEFAULT_FILE_VIEWER_TEXT_CHUNK_OVERLAP, DEFAULT_FILE_VIEWER_TEXT_CHUNK_SIZE, DEFAULT_FILE_VIEWER_ZOOM_SCALE, buildFileViewerDocumentTextChunks, createEmptyFileViewerSearchState, createFileViewerZoomState, normalizeFileViewerAiOptions, normalizeFileViewerSearchOptions, } from './features/document/model';
5
5
  export { ARCHIVE_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from './registry/formats';
6
+ export { precheckFileViewerSource } from './source/precheck';
7
+ export type { FileViewerPrecheckOptions, FileViewerPrecheckReason, FileViewerPrecheckResult, FileViewerPrecheckStatus, } from './source/precheck';
6
8
  export { FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_ORDER, FILE_VIEWER_LIFECYCLE_HOOK_ERROR_MESSAGE_PREFIX, FILE_VIEWER_LIFECYCLE_HOOKS, FILE_VIEWER_OPERATION_LABELS, buildFileViewerLifecycleContext, buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, buildFileViewerOperationContextFromLifecycleState, cloneFileViewerOperationAvailability, createFileViewerLifecycleActions, createFileViewerLifecycleStateController, createFileViewerPublicApi, createFileViewerToolbarActions, createFileViewerToolbarControllerActionHandlers, createFileViewerToolbarZoomSyncSnapshot, DEFAULT_FILE_VIEWER_LIFECYCLE_HOOK_ERROR_LOGGER, DEFAULT_FILE_VIEWER_OPERATION_ERROR_LOGGER, dispatchFileViewerLifecycleEvent, dispatchFileViewerOperationAvailabilityChange, dispatchFileViewerOperationContextEvent, dispatchFileViewerZoomChange, emitFileViewerComponentLifecycleEvent, getFileViewerBeforeOperationHooks, getFileViewerLifecycleHookName, hasVisibleFileViewerToolbarActions, isFileViewerToolbarOperationPermitted, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, reportFileViewerLifecycleHookError, reportFileViewerOperationError, resolveFileViewerBeforeOperationErrorMessage, resolveFileViewerLifecycleFallbackSource, resolveFileViewerLifecycleHookErrorMessage, resolveFileViewerOperationAvailability, resolveFileViewerToolbarPosition, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from './lifecycle/operations';
7
9
  export { FILE_VIEWER_BUILTIN_MESSAGES, FILE_VIEWER_DEFAULT_LOCALE, FILE_VIEWER_FALLBACK_LOCALE, FILE_VIEWER_SUPPORTED_LOCALES, createFileViewerTranslator, formatFileViewerMessage, normalizeFileViewerLocale, resolveFileViewerLocale, translateFileViewerMessage, } from './i18n/messages';
8
10
  export type { FileViewerI18nInput, FileViewerResolvedLocale, ResolveFileViewerI18nInput, } from './i18n/messages';
@@ -24,4 +26,4 @@ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRI
24
26
  export type { FileViewerErrorMessageFormatter, } from './viewer/state';
25
27
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark';
26
28
  export type { FileViewerWatermarkPresentationState, FileViewerWatermarkStyle, } from './features/watermark';
27
- export type { FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerDownloadOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoOptions, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPublicApi, FileViewerRenderStateKind, FileViewerRenderedInstance, FileViewerRendererCategory, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RenderSurface, RendererCapability, RendererDefinition, RendererLoadContext, RendererLoader, RendererPlugin, RendererRegistry, RendererSession, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
29
+ export type { FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerDownloadOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoOptions, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintMaskOptions, FileViewerPrintMaskRegion, FileViewerPrintOptions, FileViewerPrintStamp, FileViewerPublicApi, FileViewerRenderStateKind, FileViewerRenderedInstance, FileViewerRendererCategory, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RenderSurface, RendererCapability, RendererDefinition, RendererLoadContext, RendererLoader, RendererPlugin, RendererRegistry, RendererSession, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
package/dist/headless.js CHANGED
@@ -7,6 +7,7 @@ export { DEFAULT_FILE_VIEWER_ARCHIVE_WORKER_PATH, DEFAULT_FILE_VIEWER_ARCHIVE_WA
7
7
  export { ADAPTER_PRINT_REQUIRED_EXTENSIONS, applyFileViewerZoomAvailability, createUnsupportedAvailability, DEFAULT_OPERATION_AVAILABILITY, DOM_PRINTABLE_EXTENSIONS, getRendererAvailability, isDomPrintableExtension, isKnownNonPrintableExtension, needsDedicatedPrintAdapter, NON_PRINTABLE_EXTENSIONS, resolvePrintAvailability, } from './registry/capabilities.js';
8
8
  export { DEFAULT_FILE_VIEWER_TEXT_CHUNK_OVERLAP, DEFAULT_FILE_VIEWER_TEXT_CHUNK_SIZE, DEFAULT_FILE_VIEWER_ZOOM_SCALE, buildFileViewerDocumentTextChunks, createEmptyFileViewerSearchState, createFileViewerZoomState, normalizeFileViewerAiOptions, normalizeFileViewerSearchOptions, } from './features/document/model.js';
9
9
  export { ARCHIVE_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from './registry/formats.js';
10
+ export { precheckFileViewerSource } from './source/precheck.js';
10
11
  export { FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_ORDER, FILE_VIEWER_LIFECYCLE_HOOK_ERROR_MESSAGE_PREFIX, FILE_VIEWER_LIFECYCLE_HOOKS, FILE_VIEWER_OPERATION_LABELS, buildFileViewerLifecycleContext, buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, buildFileViewerOperationContextFromLifecycleState, cloneFileViewerOperationAvailability, createFileViewerLifecycleActions, createFileViewerLifecycleStateController, createFileViewerPublicApi, createFileViewerToolbarActions, createFileViewerToolbarControllerActionHandlers, createFileViewerToolbarZoomSyncSnapshot, DEFAULT_FILE_VIEWER_LIFECYCLE_HOOK_ERROR_LOGGER, DEFAULT_FILE_VIEWER_OPERATION_ERROR_LOGGER, dispatchFileViewerLifecycleEvent, dispatchFileViewerOperationAvailabilityChange, dispatchFileViewerOperationContextEvent, dispatchFileViewerZoomChange, emitFileViewerComponentLifecycleEvent, getFileViewerBeforeOperationHooks, getFileViewerLifecycleHookName, hasVisibleFileViewerToolbarActions, isFileViewerToolbarOperationPermitted, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, reportFileViewerLifecycleHookError, reportFileViewerOperationError, resolveFileViewerBeforeOperationErrorMessage, resolveFileViewerLifecycleFallbackSource, resolveFileViewerLifecycleHookErrorMessage, resolveFileViewerOperationAvailability, resolveFileViewerToolbarPosition, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from './lifecycle/operations.js';
11
12
  export { FILE_VIEWER_BUILTIN_MESSAGES, FILE_VIEWER_DEFAULT_LOCALE, FILE_VIEWER_FALLBACK_LOCALE, FILE_VIEWER_SUPPORTED_LOCALES, createFileViewerTranslator, formatFileViewerMessage, normalizeFileViewerLocale, resolveFileViewerLocale, translateFileViewerMessage, } from './i18n/messages.js';
12
13
  export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerColorScheme, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, toggleFileViewerColorScheme, } from './config/options.js';
@@ -13,13 +13,16 @@ export const JA_JP_MESSAGES = {
13
13
  'toolbar.print': '印刷',
14
14
  'toolbar.printTitle': 'レンダリング済みの全内容を印刷',
15
15
  'toolbar.printDirect': '直接印刷',
16
- 'toolbar.printMask': 'マスクして印刷',
17
- 'toolbar.printMaskTitle': '機密領域を隠してから印刷',
16
+ 'toolbar.printMask': 'マスク・印章付き印刷',
17
+ 'toolbar.printMaskTitle': '機密領域を隠すか印章を追加してから印刷',
18
18
  'toolbar.printMaskAdd': 'マスクを追加',
19
19
  'toolbar.printMaskClear': 'クリア',
20
20
  'toolbar.printMaskCancel': 'キャンセル',
21
21
  'toolbar.printMaskConfirm': '印刷を確定',
22
- 'toolbar.printMaskHint': 'ドラッグして黒いマスクを描画します。削除して再調整できます。',
22
+ 'toolbar.printMaskHint': 'マスクを描画するか、印章をアップロードして移動・サイズ変更します。',
23
+ 'toolbar.printStampUpload': '印章をアップロード',
24
+ 'toolbar.printStampRemove': '印章を削除',
25
+ 'toolbar.printStampResize': '印章のサイズ変更',
23
26
  'toolbar.exportHtml': 'HTML',
24
27
  'toolbar.exportHtmlTitle': '現在のレンダリング結果を HTML として書き出す',
25
28
  'toolbar.search': '検索',
@@ -119,6 +122,12 @@ export const JA_JP_MESSAGES = {
119
122
  'word.page.empty': 'このページから抽出できるテキストはありません',
120
123
  'word.body': '本文',
121
124
  'word.body.empty': '読み取り可能なテキストを抽出できませんでした',
125
+ 'ofd.toolbar.pageNavigation': 'OFD ページナビゲーション',
126
+ 'ofd.toolbar.documentPages': 'OFD 文書ページ',
127
+ 'ofd.toolbar.previousPage': '前のページ',
128
+ 'ofd.toolbar.nextPage': '次のページ',
129
+ 'ofd.toolbar.pageStatus': '{total} ページ中 {current} ページ',
130
+ 'ofd.toolbar.noPages': '表示可能なページはありません',
122
131
  'ofd.state.loading': 'OFD を解析しています...',
123
132
  'ofd.error.empty': 'OFD ファイルにレンダリング可能な文書がありません',
124
133
  'ofd.error.parseFailed': 'OFD ファイルの解析に失敗しました',
@@ -332,6 +341,9 @@ export const JA_JP_MESSAGES = {
332
341
  'cad.state.parsing': 'CAD を解析しています...',
333
342
  'cad.error.parseFailed': 'CAD ファイルの解析に失敗しました',
334
343
  'image.alt': '画像',
344
+ 'image.toolbar.rotation': '画像の回転',
345
+ 'image.toolbar.rotateLeft': '画像を左に回転',
346
+ 'image.toolbar.rotateRight': '画像を右に回転',
335
347
  'image.lightbox.alt': '画像プレビュー',
336
348
  'image.lightbox.close': '画像プレビューを閉じる',
337
349
  'gitBundle.error.invalid': '有効な Git bundle ファイルではありません。',
@@ -12,13 +12,16 @@ const ZH_CN_MESSAGES = {
12
12
  'toolbar.print': '打印',
13
13
  'toolbar.printTitle': '打印完整渲染内容',
14
14
  'toolbar.printDirect': '直接打印',
15
- 'toolbar.printMask': '掩膜打印',
16
- 'toolbar.printMaskTitle': '遮盖敏感区域后再打印',
15
+ 'toolbar.printMask': '遮罩/盖章打印',
16
+ 'toolbar.printMaskTitle': '遮盖敏感区域或上传印章后再打印',
17
17
  'toolbar.printMaskAdd': '添加掩膜',
18
18
  'toolbar.printMaskClear': '清空',
19
19
  'toolbar.printMaskCancel': '取消',
20
20
  'toolbar.printMaskConfirm': '确认打印',
21
- 'toolbar.printMaskHint': '拖拽绘制黑色遮盖块,可删除后继续调整',
21
+ 'toolbar.printMaskHint': '绘制遮盖块,或上传印章后拖动和缩放',
22
+ 'toolbar.printStampUpload': '上传印章',
23
+ 'toolbar.printStampRemove': '删除印章',
24
+ 'toolbar.printStampResize': '缩放印章',
22
25
  'toolbar.exportHtml': 'HTML',
23
26
  'toolbar.exportHtmlTitle': '导出当前渲染后的 HTML',
24
27
  'toolbar.search': '搜索',
@@ -118,6 +121,12 @@ const ZH_CN_MESSAGES = {
118
121
  'word.page.empty': '该页没有可提取文本',
119
122
  'word.body': '正文',
120
123
  'word.body.empty': '没有提取到可读文本',
124
+ 'ofd.toolbar.pageNavigation': 'OFD 分页导航',
125
+ 'ofd.toolbar.documentPages': 'OFD 文档页面',
126
+ 'ofd.toolbar.previousPage': '上一页',
127
+ 'ofd.toolbar.nextPage': '下一页',
128
+ 'ofd.toolbar.pageStatus': '第 {current} 页,共 {total} 页',
129
+ 'ofd.toolbar.noPages': '暂无可用页面',
121
130
  'ofd.state.loading': '正在解析 OFD...',
122
131
  'ofd.error.empty': 'OFD 文件中没有可渲染的文档',
123
132
  'ofd.error.parseFailed': 'OFD 文件解析失败',
@@ -331,6 +340,9 @@ const ZH_CN_MESSAGES = {
331
340
  'cad.state.parsing': '正在解析 CAD...',
332
341
  'cad.error.parseFailed': 'CAD 文件解析失败',
333
342
  'image.alt': '图片',
343
+ 'image.toolbar.rotation': '图片旋转',
344
+ 'image.toolbar.rotateLeft': '向左旋转图片',
345
+ 'image.toolbar.rotateRight': '向右旋转图片',
334
346
  'image.lightbox.alt': '图片预览',
335
347
  'image.lightbox.close': '关闭图片预览',
336
348
  'gitBundle.error.invalid': '当前文件不是标准 Git bundle。',
@@ -436,13 +448,16 @@ const EN_US_MESSAGES = {
436
448
  'toolbar.print': 'Print',
437
449
  'toolbar.printTitle': 'Print the complete rendered document',
438
450
  'toolbar.printDirect': 'Print now',
439
- 'toolbar.printMask': 'Mask & print',
440
- 'toolbar.printMaskTitle': 'Cover sensitive areas before printing',
451
+ 'toolbar.printMask': 'Mask / stamp & print',
452
+ 'toolbar.printMaskTitle': 'Cover sensitive areas or add a stamp before printing',
441
453
  'toolbar.printMaskAdd': 'Add mask',
442
454
  'toolbar.printMaskClear': 'Clear',
443
455
  'toolbar.printMaskCancel': 'Cancel',
444
456
  'toolbar.printMaskConfirm': 'Print',
445
- 'toolbar.printMaskHint': 'Drag to draw black cover blocks. Delete and adjust as needed.',
457
+ 'toolbar.printMaskHint': 'Draw cover blocks, or upload a stamp and drag or resize it.',
458
+ 'toolbar.printStampUpload': 'Upload stamp',
459
+ 'toolbar.printStampRemove': 'Remove stamp',
460
+ 'toolbar.printStampResize': 'Resize stamp',
446
461
  'toolbar.exportHtml': 'HTML',
447
462
  'toolbar.exportHtmlTitle': 'Export the rendered HTML',
448
463
  'toolbar.search': 'Search',
@@ -542,6 +557,12 @@ const EN_US_MESSAGES = {
542
557
  'word.page.empty': 'No extractable text on this page',
543
558
  'word.body': 'Body',
544
559
  'word.body.empty': 'No readable text was extracted',
560
+ 'ofd.toolbar.pageNavigation': 'OFD page navigation',
561
+ 'ofd.toolbar.documentPages': 'OFD document pages',
562
+ 'ofd.toolbar.previousPage': 'Previous page',
563
+ 'ofd.toolbar.nextPage': 'Next page',
564
+ 'ofd.toolbar.pageStatus': 'Page {current} of {total}',
565
+ 'ofd.toolbar.noPages': 'No pages available',
545
566
  'ofd.state.loading': 'Parsing OFD...',
546
567
  'ofd.error.empty': 'The OFD file has no renderable document.',
547
568
  'ofd.error.parseFailed': 'Failed to parse OFD file',
@@ -755,6 +776,9 @@ const EN_US_MESSAGES = {
755
776
  'cad.state.parsing': 'Parsing CAD...',
756
777
  'cad.error.parseFailed': 'Failed to parse CAD file',
757
778
  'image.alt': 'Image',
779
+ 'image.toolbar.rotation': 'Image rotation',
780
+ 'image.toolbar.rotateLeft': 'Rotate image left',
781
+ 'image.toolbar.rotateRight': 'Rotate image right',
758
782
  'image.lightbox.alt': 'Image preview',
759
783
  'image.lightbox.close': 'Close image preview',
760
784
  'gitBundle.error.invalid': 'This file is not a valid Git bundle.',
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { FileRenderContext, FileViewerRenderedInstance } from './contracts/types';
2
2
  export { DEFAULT_FILE_VIEWER_ARCHIVE_WORKER_PATH, DEFAULT_FILE_VIEWER_ARCHIVE_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_DWF_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_LIBREDWG_SCRIPT_PATH, DEFAULT_FILE_VIEWER_CAD_LIBREDWG_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_RUNTIME_VERSION, DEFAULT_FILE_VIEWER_CAD_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_WORKER_PATH, DEFAULT_FILE_VIEWER_DATA_SQL_WASM_URL, DEFAULT_FILE_VIEWER_MODEL_RUNTIME_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_RUNTIME_URL, DEFAULT_FILE_VIEWER_MODEL_IMPORT_LICENSE_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_IMPORT_LICENSE_URL, DEFAULT_FILE_VIEWER_MODEL_OCCT_LICENSE_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_OCCT_LICENSE_URL, DEFAULT_FILE_VIEWER_MODEL_WASM_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_WASM_URL, DEFAULT_FILE_VIEWER_MODEL_WORKER_URL, DEFAULT_FILE_VIEWER_DOCX_WORKER_JSZIP_PATH, DEFAULT_FILE_VIEWER_DOCX_WORKER_PATH, DEFAULT_FILE_VIEWER_DOCX_RUNTIME_VERSION, DEFAULT_FILE_VIEWER_PDF_CMAP_PATH, DEFAULT_FILE_VIEWER_PDF_STANDARD_FONT_PATH, DEFAULT_FILE_VIEWER_PDF_WASM_PATH, DEFAULT_FILE_VIEWER_PDF_WORKER_PATH, DEFAULT_FILE_VIEWER_PPT_FONT_PATH, DEFAULT_FILE_VIEWER_PPT_FRAME_CACHE_PATH, DEFAULT_FILE_VIEWER_PPT_MODULE_PATH, DEFAULT_FILE_VIEWER_PPT_RUNTIME_PATH, DEFAULT_FILE_VIEWER_PPT_RUNTIME_VERSION, DEFAULT_FILE_VIEWER_PPT_WASM_PATH, DEFAULT_FILE_VIEWER_PPT_WORKER_PATH, DEFAULT_FILE_VIEWER_PRESENTATION_WORKER_PATH, DEFAULT_FILE_VIEWER_RENDERER_ASSET_MANIFESTS, DEFAULT_FILE_VIEWER_SPREADSHEET_WORKER_PATH, DEFAULT_FILE_VIEWER_TYPST_COMPILER_WASM_URL, DEFAULT_FILE_VIEWER_TYPST_RENDERER_WASM_URL, DEFAULT_FILE_VIEWER_TYPST_RENDERER_WASM_PACKAGE_PATH, getDefaultFileViewerAssetBaseUrl, getFileViewerRendererAssetManifest, listFileViewerRendererAssetManifests, normalizeFileViewerAssetBaseUrl, resetDefaultFileViewerAssetBaseUrl, resolveFileViewerArchiveWasmUrl, resolveFileViewerArchiveWorkerUrl, resolveFileViewerAssetUrl, resolveFileViewerCadAssetUrls, resolveFileViewerDataSqlWasmUrl, resolveFileViewerDocxWorkerJsZipUrl, resolveFileViewerDocxWorkerUrl, resolveFileViewerDrawioViewerScriptUrl, resolveFileViewerModelAssetUrls, resolveFileViewerPdfAssetUrls, resolveFileViewerPresentationWorkerUrl, resolveFileViewerRendererAssets, resolveFileViewerRuntimeAssetBaseUrl, resolveFileViewerSpreadsheetWorkerUrl, resolveFileViewerTypstCompilerWasmUrl, resolveFileViewerTypstRendererWasmUrl, setDefaultFileViewerAssetBaseUrl, } from './assets';
3
3
  export { ARCHIVE_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from './registry/formats';
4
+ export { precheckFileViewerSource } from './source/precheck';
5
+ export type { FileViewerPrecheckOptions, FileViewerPrecheckReason, FileViewerPrecheckResult, FileViewerPrecheckStatus, } from './source/precheck';
4
6
  export { DEFAULT_FILE_VIEWER_TEXT_CHUNK_OVERLAP, DEFAULT_FILE_VIEWER_TEXT_CHUNK_SIZE, DEFAULT_FILE_VIEWER_ZOOM_SCALE, buildFileViewerDocumentTextChunks, createEmptyFileViewerSearchState, createFileViewerZoomState, normalizeFileViewerAiOptions, normalizeFileViewerSearchOptions, } from './features/document/model';
5
7
  export { DEFAULT_FILE_VIEWER_SEARCH_ACTIVE_CLASS, DEFAULT_FILE_VIEWER_SEARCH_MATCH_CLASS, DEFAULT_FILE_VIEWER_SEARCH_MAX_MATCHES, applyFileViewerSearchState, cloneFileViewerSearchState, createFileViewerDomSearchController, createFileViewerDomSearchControllerActionHandlers, destroyFileViewerDomSearchController, observeFileViewerDomSearchController, runFileViewerDomSearchControllerAction, syncFileViewerDomSearchControllerState, } from './features/document/search';
6
8
  export type { FileViewerDocumentAnchorsTarget, FileViewerDomSearchController, FileViewerDomSearchControllerActionHandlers, FileViewerDomSearchControllerStateTarget, MutableFileViewerSearchState, } from './features/document/search';
@@ -67,7 +69,7 @@ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRI
67
69
  export type { FileViewerErrorMessageFormatter, FileViewerRendererInstallHint, } from './viewer/state';
68
70
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark';
69
71
  export type { FileViewerWatermarkPresentationState, FileViewerWatermarkStyle, } from './features/watermark';
70
- export { buildFileViewerPrintMaskOverlayHtml, applyFileViewerPagePrintMasksToHtml, normalizeFileViewerPrintMaskOptions, normalizeFileViewerPrintMaskRegion, FILE_VIEWER_PRINT_MASK_STYLE, } from './features/printMask';
72
+ export { buildFileViewerPrintMaskOverlayHtml, applyFileViewerPagePrintMasksToHtml, normalizeFileViewerPrintMaskOptions, normalizeFileViewerPrintMaskRegion, normalizeFileViewerPrintStamp, FILE_VIEWER_PRINT_MASK_STYLE, } from './features/printMask';
71
73
  export { openFileViewerPrintMaskDesignerAsync, } from './features/printMaskLoader';
72
74
  export type { FileViewerPrintMaskDesignerResult, OpenFileViewerPrintMaskDesignerOptions, } from './features/printMaskDesigner';
73
75
  export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_LOGGER, DEFAULT_PDF_RANGE_CHUNK_SIZE, FILE_VIEWER_PREVIEW_LOAD_ERROR_PREFIXES, FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE, applyFileViewerEmptyPreviewState, applyFileViewerPreviewFilenameState, applyFileViewerPreviewSourceUrlState, applyFileViewerReadPreviewState, applyFileViewerRenderReadinessState, applyFileViewerPreviewRequestResetState, commitFileViewerEmptyPreviewResetState, commitFileViewerLoadStartState, commitFileViewerPreviewRequestStartState, commitFileViewerRenderCompleteState, commitFileViewerRemoteDownloadState, createFileViewerEmptyPreviewState, createFileViewerLoadStartState, createFileViewerPreviewStateTarget, createFileViewerSourceLoadingActionHandlers, createFileViewerReadPreviewState, createFileViewerPreviewRequestResetState, createFileViewerRenderCompleteState, createFileViewerRequestController, createFileViewerRequestScope, createFileViewerStreamingPdfPlaceholderFile, finalizeFileViewerPreviewLoadState, hasFileViewerPreviewSource, isFileViewerAbortError, isSameOriginUrl, normalizeFileViewerSourceUrl, normalizePdfStreamingMode, resolveFileViewerFileRefSourcePlan, resolveFileViewerLoadStartMessage, resolveFileViewerMissingRemoteDataErrorMessage, resolveFileViewerPreviewLoadErrorMessage, resolveFileViewerPreviewRequestReason, resolveFileViewerRemoteSourcePlan, resolveFileViewerPageHref, reportFileViewerMissingRemoteData, reportFileViewerPreviewLoadError, runFileViewerLocalFilePreview, runFileViewerPreviewComponentUnmount, runFileViewerPreviewRequest, runFileViewerPreviewSourceChange, runFileViewerRemoteFilePreview, runFileViewerReadAndRenderFile, runFileViewerStreamingPdfPreview, shouldStreamPdfUrl, } from './source/loading';
@@ -88,4 +90,4 @@ export type { CreateFileViewerZoomControllerOptions, FileViewerZoomOperation, }
88
90
  export type { CreateViewerOptions } from './viewer/createViewer';
89
91
  export type { BuildExportHtmlDocumentOptions, BuildFileViewerRenderedHtmlDocumentOptions, } from './output/export';
90
92
  export type { CreateFileViewerWorkerControllerOptions, FileViewerWorkerContext, FileViewerWorkerController, FileViewerWorkerErrorHook, FileViewerWorkerEventHandler, FileViewerWorkerFactory, FileViewerWorkerMessageHook, WorkerProvider, WorkerRef, } from './platform/worker';
91
- export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerModelLinearUnit, FileViewerModelOptions, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRenderPurpose, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerThumbnailCaptureOptions, FileViewerThumbnailFit, FileViewerThumbnailFormat, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
93
+ export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerModelLinearUnit, FileViewerModelOptions, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileViewerTiandituMapStyle, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPrintMaskOptions, FileViewerPrintMaskRegion, FileViewerPrintStamp, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRenderPurpose, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerThumbnailCaptureOptions, FileViewerThumbnailFit, FileViewerThumbnailFormat, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, FileViewerTextOptions, FileViewerResolvedThemeMode, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, FileViewerUiDensity, FileViewerUiOptions, FileViewerTypstOptions, FileViewerViewScrollState, FileViewerViewState, FileViewerViewStateChange, FileViewerViewStateChangeAction, FileViewerViewStateChangeSource, FileViewerViewStateProvider, FileViewerWatermarkOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from './contracts/types';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { DEFAULT_FILE_VIEWER_ARCHIVE_WORKER_PATH, DEFAULT_FILE_VIEWER_ARCHIVE_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_DWF_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_LIBREDWG_SCRIPT_PATH, DEFAULT_FILE_VIEWER_CAD_LIBREDWG_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_RUNTIME_VERSION, DEFAULT_FILE_VIEWER_CAD_WASM_PATH, DEFAULT_FILE_VIEWER_CAD_WORKER_PATH, DEFAULT_FILE_VIEWER_DATA_SQL_WASM_URL, DEFAULT_FILE_VIEWER_MODEL_RUNTIME_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_RUNTIME_URL, DEFAULT_FILE_VIEWER_MODEL_IMPORT_LICENSE_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_IMPORT_LICENSE_URL, DEFAULT_FILE_VIEWER_MODEL_OCCT_LICENSE_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_OCCT_LICENSE_URL, DEFAULT_FILE_VIEWER_MODEL_WASM_PACKAGE_PATH, DEFAULT_FILE_VIEWER_MODEL_WASM_URL, DEFAULT_FILE_VIEWER_MODEL_WORKER_URL, DEFAULT_FILE_VIEWER_DOCX_WORKER_JSZIP_PATH, DEFAULT_FILE_VIEWER_DOCX_WORKER_PATH, DEFAULT_FILE_VIEWER_DOCX_RUNTIME_VERSION, DEFAULT_FILE_VIEWER_PDF_CMAP_PATH, DEFAULT_FILE_VIEWER_PDF_STANDARD_FONT_PATH, DEFAULT_FILE_VIEWER_PDF_WASM_PATH, DEFAULT_FILE_VIEWER_PDF_WORKER_PATH, DEFAULT_FILE_VIEWER_PPT_FONT_PATH, DEFAULT_FILE_VIEWER_PPT_FRAME_CACHE_PATH, DEFAULT_FILE_VIEWER_PPT_MODULE_PATH, DEFAULT_FILE_VIEWER_PPT_RUNTIME_PATH, DEFAULT_FILE_VIEWER_PPT_RUNTIME_VERSION, DEFAULT_FILE_VIEWER_PPT_WASM_PATH, DEFAULT_FILE_VIEWER_PPT_WORKER_PATH, DEFAULT_FILE_VIEWER_PRESENTATION_WORKER_PATH, DEFAULT_FILE_VIEWER_RENDERER_ASSET_MANIFESTS, DEFAULT_FILE_VIEWER_SPREADSHEET_WORKER_PATH, DEFAULT_FILE_VIEWER_TYPST_COMPILER_WASM_URL, DEFAULT_FILE_VIEWER_TYPST_RENDERER_WASM_URL, DEFAULT_FILE_VIEWER_TYPST_RENDERER_WASM_PACKAGE_PATH, getDefaultFileViewerAssetBaseUrl, getFileViewerRendererAssetManifest, listFileViewerRendererAssetManifests, normalizeFileViewerAssetBaseUrl, resetDefaultFileViewerAssetBaseUrl, resolveFileViewerArchiveWasmUrl, resolveFileViewerArchiveWorkerUrl, resolveFileViewerAssetUrl, resolveFileViewerCadAssetUrls, resolveFileViewerDataSqlWasmUrl, resolveFileViewerDocxWorkerJsZipUrl, resolveFileViewerDocxWorkerUrl, resolveFileViewerDrawioViewerScriptUrl, resolveFileViewerModelAssetUrls, resolveFileViewerPdfAssetUrls, resolveFileViewerPresentationWorkerUrl, resolveFileViewerRendererAssets, resolveFileViewerRuntimeAssetBaseUrl, resolveFileViewerSpreadsheetWorkerUrl, resolveFileViewerTypstCompilerWasmUrl, resolveFileViewerTypstRendererWasmUrl, setDefaultFileViewerAssetBaseUrl, } from './assets.js';
2
2
  export { ARCHIVE_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from './registry/formats.js';
3
+ export { precheckFileViewerSource } from './source/precheck.js';
3
4
  export { DEFAULT_FILE_VIEWER_TEXT_CHUNK_OVERLAP, DEFAULT_FILE_VIEWER_TEXT_CHUNK_SIZE, DEFAULT_FILE_VIEWER_ZOOM_SCALE, buildFileViewerDocumentTextChunks, createEmptyFileViewerSearchState, createFileViewerZoomState, normalizeFileViewerAiOptions, normalizeFileViewerSearchOptions, } from './features/document/model.js';
4
5
  export { DEFAULT_FILE_VIEWER_SEARCH_ACTIVE_CLASS, DEFAULT_FILE_VIEWER_SEARCH_MATCH_CLASS, DEFAULT_FILE_VIEWER_SEARCH_MAX_MATCHES, applyFileViewerSearchState, cloneFileViewerSearchState, createFileViewerDomSearchController, createFileViewerDomSearchControllerActionHandlers, destroyFileViewerDomSearchController, observeFileViewerDomSearchController, runFileViewerDomSearchControllerAction, syncFileViewerDomSearchControllerState, } from './features/document/search.js';
5
6
  export { createFileViewerDocumentFeatureActions, createFileViewerDocumentFeatureControllerActionHandlers, createFileViewerDocumentChangeSnapshot, createFileViewerSearchChangeState, dispatchFileViewerLocationChange, dispatchFileViewerSearchChange, resolveFileViewerLocationChangeAnchor, } from './features/document/events.js';
@@ -173,7 +174,7 @@ export { appendFileViewerStyle, buildFileRenderContextFromLoadContext, applyFile
173
174
  export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, resolveFileViewerSourceFilename, normalizeSource, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, wrapFileViewerFileRef, } from './source/index.js';
174
175
  export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, resolveFileViewerRendererInstallHint, } from './viewer/state.js';
175
176
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark.js';
176
- export { buildFileViewerPrintMaskOverlayHtml, applyFileViewerPagePrintMasksToHtml, normalizeFileViewerPrintMaskOptions, normalizeFileViewerPrintMaskRegion, FILE_VIEWER_PRINT_MASK_STYLE, } from './features/printMask.js';
177
+ export { buildFileViewerPrintMaskOverlayHtml, applyFileViewerPagePrintMasksToHtml, normalizeFileViewerPrintMaskOptions, normalizeFileViewerPrintMaskRegion, normalizeFileViewerPrintStamp, FILE_VIEWER_PRINT_MASK_STYLE, } from './features/printMask.js';
177
178
  export { openFileViewerPrintMaskDesignerAsync, } from './features/printMaskLoader.js';
178
179
  export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_LOGGER, DEFAULT_PDF_RANGE_CHUNK_SIZE, FILE_VIEWER_PREVIEW_LOAD_ERROR_PREFIXES, FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE, applyFileViewerEmptyPreviewState, applyFileViewerPreviewFilenameState, applyFileViewerPreviewSourceUrlState, applyFileViewerReadPreviewState, applyFileViewerRenderReadinessState, applyFileViewerPreviewRequestResetState, commitFileViewerEmptyPreviewResetState, commitFileViewerLoadStartState, commitFileViewerPreviewRequestStartState, commitFileViewerRenderCompleteState, commitFileViewerRemoteDownloadState, createFileViewerEmptyPreviewState, createFileViewerLoadStartState, createFileViewerPreviewStateTarget, createFileViewerSourceLoadingActionHandlers, createFileViewerReadPreviewState, createFileViewerPreviewRequestResetState, createFileViewerRenderCompleteState, createFileViewerRequestController, createFileViewerRequestScope, createFileViewerStreamingPdfPlaceholderFile, finalizeFileViewerPreviewLoadState, hasFileViewerPreviewSource, isFileViewerAbortError, isSameOriginUrl, normalizeFileViewerSourceUrl, normalizePdfStreamingMode, resolveFileViewerFileRefSourcePlan, resolveFileViewerLoadStartMessage, resolveFileViewerMissingRemoteDataErrorMessage, resolveFileViewerPreviewLoadErrorMessage, resolveFileViewerPreviewRequestReason, resolveFileViewerRemoteSourcePlan, resolveFileViewerPageHref, reportFileViewerMissingRemoteData, reportFileViewerPreviewLoadError, runFileViewerLocalFilePreview, runFileViewerPreviewComponentUnmount, runFileViewerPreviewRequest, runFileViewerPreviewSourceChange, runFileViewerRemoteFilePreview, runFileViewerReadAndRenderFile, runFileViewerStreamingPdfPreview, shouldStreamPdfUrl, } from './source/loading.js';
179
180
  export { createViewer } from './viewer/createViewer.js';
@@ -289,7 +289,7 @@ export const collectDocumentStyles = () => {
289
289
  .join('\n');
290
290
  };
291
291
  export const buildExportHtmlDocument = ({ contentHtml, includeDocumentStyles = true, printStyle = '', title, watermarkInlineStyle = '', mask = null, }) => {
292
- var _a;
292
+ var _a, _b;
293
293
  const watermark = watermarkInlineStyle
294
294
  ? `<div class="viewer-export-watermark" style="${watermarkInlineStyle}"></div>`
295
295
  : '';
@@ -298,6 +298,7 @@ export const buildExportHtmlDocument = ({ contentHtml, includeDocumentStyles = t
298
298
  ? {
299
299
  ...normalizedMask,
300
300
  regions: (_a = normalizedMask.regions) === null || _a === void 0 ? void 0 : _a.filter(region => region.pageIndex === undefined),
301
+ stamps: (_b = normalizedMask.stamps) === null || _b === void 0 ? void 0 : _b.filter(stamp => stamp.pageIndex === undefined),
301
302
  }
302
303
  : null;
303
304
  const maskHtml = buildFileViewerPrintMaskOverlayHtml(globalMask);