@file-viewer/core 2.1.13 → 2.1.15

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.
@@ -7,8 +7,9 @@
7
7
  import { createEmptyFileViewerSearchState, } from '../features/document/model.js';
8
8
  import { createFileViewerDocumentFeatureControllerActionHandlers, } from '../features/document/events.js';
9
9
  import { createFileViewerZoomController } from '../features/document/zoom.js';
10
+ import { createFileViewerViewStateController } from '../features/document/viewState.js';
10
11
  import { DEFAULT_FILE_VIEWER_DOWNLOAD_FILENAME, DEFAULT_FILE_VIEWER_EXPORT_FILENAME, DEFAULT_FILE_VIEWER_PREVIEW_TITLE, createFileViewerOriginalSourceStateFromNormalizedSource, executeFileViewerDownloadOperation, executeFileViewerExportHtmlOperation, executeFileViewerPrintOperation, resolveFileViewerDisplayFilename, resolveFileViewerOperationFilename, } from './operations.js';
11
- import { getRendererAvailability, createUnsupportedAvailability } from '../registry/capabilities.js';
12
+ import { applyFileViewerZoomAvailability, createUnsupportedAvailability, getRendererAvailability, } from '../registry/capabilities.js';
12
13
  import { buildFileViewerLifecycleContextFromNormalizedSource, buildFileViewerOperationContext, runFileViewerBeforeOperation, runFileViewerLifecycleHook, } from '../lifecycle/operations.js';
13
14
  import { collectFileViewerRendererPlugins, createRendererRegistry, getFileViewerAutoRendererPresetVersion, hasFileViewerRendererPresetName, installFileViewerRendererPlugins, listFileViewerAutoRendererPresets, resolveFileViewerRendererPresetInputs, } from '../registry/registry.js';
14
15
  import { createFileRenderHandlerLoader, applyFileViewerRenderSurfaceState, createFileViewerRenderSurfaceState, } from '../rendering/handler.js';
@@ -149,6 +150,7 @@ export const createViewer = (container, createOptions = {}) => {
149
150
  ...definition,
150
151
  load: createFileRenderHandlerLoader({
151
152
  handler: registration.handler,
153
+ rendererId: definition.id,
152
154
  getTarget: context => context.surface.container,
153
155
  }),
154
156
  });
@@ -195,10 +197,11 @@ export const createViewer = (container, createOptions = {}) => {
195
197
  const getCapabilitiesForExtension = (extension) => {
196
198
  const targetExtension = extension || (currentSource === null || currentSource === void 0 ? void 0 : currentSource.extension) || '';
197
199
  const renderer = registry.getByExtension(targetExtension);
200
+ const zoomState = zoomController.getState();
198
201
  if (!renderer) {
199
- return createUnsupportedAvailability(targetExtension);
202
+ return applyFileViewerZoomAvailability(createUnsupportedAvailability(targetExtension), zoomState);
200
203
  }
201
- return getRendererAvailability(renderer, renderSurfaceState.session);
204
+ return applyFileViewerZoomAvailability(getRendererAvailability(renderer, renderSurfaceState.session), zoomState);
202
205
  };
203
206
  const emitOperationAvailabilityChange = () => {
204
207
  var _a;
@@ -214,9 +217,21 @@ export const createViewer = (container, createOptions = {}) => {
214
217
  payload: state,
215
218
  });
216
219
  };
220
+ const emitZoomAndOperationAvailabilityChange = (state = zoomController.getState()) => {
221
+ emitZoomChange(state);
222
+ emitOperationAvailabilityChange();
223
+ };
217
224
  const zoomController = createFileViewerZoomController({
218
225
  root: () => container,
219
226
  beforeZoom: runBeforeViewerOperation,
227
+ onChange: state => emitZoomAndOperationAvailabilityChange(state),
228
+ });
229
+ const viewStateController = createFileViewerViewStateController({
230
+ root: () => container,
231
+ onChange: change => {
232
+ var _a;
233
+ (_a = createOptions.onEvent) === null || _a === void 0 ? void 0 : _a.call(createOptions, { type: 'view-state-change', payload: change });
234
+ },
220
235
  });
221
236
  const documentActions = createFileViewerDocumentFeatureControllerActionHandlers({
222
237
  root: () => container,
@@ -233,6 +248,7 @@ export const createViewer = (container, createOptions = {}) => {
233
248
  },
234
249
  });
235
250
  zoomController.observe();
251
+ viewStateController.observe();
236
252
  const destroyCurrent = async (reason = 'replace') => {
237
253
  var _a, _b;
238
254
  if (!currentSource) {
@@ -250,8 +266,8 @@ export const createViewer = (container, createOptions = {}) => {
250
266
  });
251
267
  await documentActions.clearDocumentState();
252
268
  zoomController.clearProvider();
253
- emitOperationAvailabilityChange();
254
- emitZoomChange();
269
+ viewStateController.clearProvider();
270
+ emitZoomAndOperationAvailabilityChange();
255
271
  await emitLifecycle(options, createOptions.onEvent, 'unload-complete', source, version, startedAt, reason);
256
272
  };
257
273
  return {
@@ -268,8 +284,7 @@ export const createViewer = (container, createOptions = {}) => {
268
284
  if (!(renderer === null || renderer === void 0 ? void 0 : renderer.load)) {
269
285
  renderMissingRendererState(container, normalized.extension, options);
270
286
  applyFileViewerRenderSurfaceState(renderSurfaceState, { session: null });
271
- emitOperationAvailabilityChange();
272
- emitZoomChange();
287
+ emitZoomAndOperationAvailabilityChange();
273
288
  await emitLifecycle(options, createOptions.onEvent, 'load-complete', normalized, version, startedAt);
274
289
  return null;
275
290
  }
@@ -284,9 +299,9 @@ export const createViewer = (container, createOptions = {}) => {
284
299
  });
285
300
  applyFileViewerRenderSurfaceState(renderSurfaceState, { session });
286
301
  zoomController.refreshProvider();
302
+ viewStateController.refreshProvider();
287
303
  await documentActions.refreshDocumentIndex({ notify: false });
288
- emitOperationAvailabilityChange();
289
- emitZoomChange();
304
+ emitZoomAndOperationAvailabilityChange();
290
305
  await emitLifecycle(options, createOptions.onEvent, 'load-complete', normalized, version, startedAt);
291
306
  return session;
292
307
  },
@@ -294,6 +309,7 @@ export const createViewer = (container, createOptions = {}) => {
294
309
  await destroyCurrent(reason);
295
310
  documentActions.destroyDocumentFeatures();
296
311
  zoomController.destroy();
312
+ viewStateController.destroy();
297
313
  },
298
314
  updateOptions(nextOptions) {
299
315
  options = {
@@ -362,22 +378,28 @@ export const createViewer = (container, createOptions = {}) => {
362
378
  },
363
379
  async zoomIn() {
364
380
  const state = await zoomController.zoomIn();
365
- emitZoomChange(state);
381
+ emitZoomAndOperationAvailabilityChange(state);
366
382
  return state;
367
383
  },
368
384
  async zoomOut() {
369
385
  const state = await zoomController.zoomOut();
370
- emitZoomChange(state);
386
+ emitZoomAndOperationAvailabilityChange(state);
371
387
  return state;
372
388
  },
373
389
  async resetZoom() {
374
390
  const state = await zoomController.resetZoom();
375
- emitZoomChange(state);
391
+ emitZoomAndOperationAvailabilityChange(state);
376
392
  return state;
377
393
  },
378
394
  getZoomState() {
379
395
  return zoomController.getState();
380
396
  },
397
+ getViewState() {
398
+ return viewStateController.getState();
399
+ },
400
+ applyViewState(state, applyOptions) {
401
+ return viewStateController.applyState(state, applyOptions);
402
+ },
381
403
  search(query) {
382
404
  return documentActions.searchDocument(query);
383
405
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@file-viewer/core",
3
- "version": "2.1.13",
3
+ "version": "2.1.15",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Framework-neutral modular TypeScript core for Flyfish File Viewer renderer orchestration, lifecycle APIs, search, zoom, print, and export",