@file-viewer/core 3.2.2 → 3.3.0

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,5 +1,7 @@
1
1
  import { appendFileViewerStyle, cloneFileViewerViewState, applyFileViewerZoomAvailability, createViewer, isFileViewerShadowRoot, normalizeFileViewerUiDensity, normalizeFileViewerTheme, normalizeFileViewerStyleIsolation, syncFileViewerRenderSurfaceBackground, } from "../index.js";
2
- import { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, createFileViewerTranslator, getExtension, normalizeFileViewerSourceUrl, hasVisibleFileViewerToolbarActions, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, normalizeFilename, readFileViewerBuffer, resolveFileViewerSourceFilename, resolveFileViewerColorScheme, resolveFileViewerToolbarOrder, resolveFileViewerToolbarPosition, resolveVisibleFileViewerToolbar, toggleFileViewerColorScheme, wrapFileViewerFileRef, } from "../index.js";
2
+ import { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, createFileViewerTranslator, getExtension, normalizeFileViewerSourceUrl, hasVisibleFileViewerToolbarActions, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, normalizeFilename, readFileViewerBuffer, resolveFileViewerSourceFilename, resolveFileViewerRemoteSourcePlan, resolveFileViewerColorScheme, resolveFileViewerToolbarOrder, resolveFileViewerToolbarPosition, resolveVisibleFileViewerToolbar, toggleFileViewerColorScheme, wrapFileViewerFileRef, } from "../index.js";
3
+ import { resolveFileViewerToolbarZoomButtons } from "../lifecycle/operations.js";
4
+ import { createToolbarFocusRestorer } from "./toolbar-focus.js";
3
5
  const isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';
4
6
  const hasSource = (options = {}) => {
5
7
  return !!(options.url || options.file || options.buffer);
@@ -25,6 +27,7 @@ const RENDER_AFFECTING_VIEWER_OPTION_KEYS = [
25
27
  'archive',
26
28
  'chm',
27
29
  'pdf',
30
+ 'epub',
28
31
  'docx',
29
32
  'presentation',
30
33
  'spreadsheet',
@@ -137,6 +140,13 @@ const resolveViewerLoadSource = async (source, options = {}) => {
137
140
  };
138
141
  }
139
142
  if (source.url) {
143
+ const plan = resolveFileViewerRemoteSourcePlan({
144
+ url: source.url, filename, type,
145
+ pageHref: options.pageHref, streaming: options.streaming,
146
+ });
147
+ if (!options.fetchFile && options.acceptsPdfUrl && plan.streamPdf) {
148
+ return { url: plan.url, filename: plan.filename, type: plan.extension, size: source.size };
149
+ }
140
150
  const fileRef = await (options.fetchFile || defaultFetchFile)({
141
151
  url: source.url,
142
152
  signal: options.signal,
@@ -280,9 +290,6 @@ const callApi = async (api, action, fallback) => {
280
290
  }
281
291
  return action(api);
282
292
  };
283
- const isAbortError = (error) => {
284
- return Boolean(error && typeof error === 'object' && error.name === 'AbortError');
285
- };
286
293
  const DEFAULT_TOOLBAR_AVAILABILITY = {
287
294
  download: false,
288
295
  print: false,
@@ -494,6 +501,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
494
501
  shell.dataset.viewerDensity = normalizeFileViewerUiDensity((_c = (_b = currentOptions.options) === null || _b === void 0 ? void 0 : _b.ui) === null || _c === void 0 ? void 0 : _c.density);
495
502
  syncFileViewerRenderSurfaceBackground(shell, currentOptions.options);
496
503
  };
504
+ const captureToolbarFocus = createToolbarFocusRestorer(toolbarEl, contentEl);
497
505
  let controller = null;
498
506
  let searchDraft = '';
499
507
  const isSearchToolbarVisible = (toolbar, options) => {
@@ -511,21 +519,30 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
511
519
  if (disposed) {
512
520
  return;
513
521
  }
522
+ const restoreToolbarFocus = captureToolbarFocus();
514
523
  syncShellTheme();
515
524
  const options = currentOptions.options || {};
516
525
  const toolbar = normalizeFileViewerToolbar(options);
517
526
  const availability = getToolbarAvailability();
518
527
  const showSearchToolbar = isSearchToolbarVisible(toolbar, options);
528
+ const zoomState = getToolbarZoomState();
529
+ const zoomButtons = resolveFileViewerToolbarZoomButtons({
530
+ toolbar,
531
+ zoomState,
532
+ renderedReady: state.ready,
533
+ hasError: !!state.error,
534
+ });
519
535
  const visibleToolbar = resolveVisibleFileViewerToolbar(toolbar, availability, showSearchToolbar);
536
+ visibleToolbar.zoom = zoomButtons.zoomIn || zoomButtons.zoomOut || zoomButtons.zoomReset;
520
537
  const showToolbar = hasVisibleFileViewerToolbarActions(visibleToolbar);
521
538
  const toolbarPosition = resolveFileViewerToolbarPosition(options, getCurrentExtension());
522
539
  const toolbarDisabled = state.loading || !!state.error;
523
- const zoomState = getToolbarZoomState();
524
540
  const t = createFileViewerTranslator(options);
525
541
  toolbarEl.hidden = !showToolbar;
526
542
  toolbarEl.dataset.toolbarPosition = toolbarPosition;
527
543
  toolbarEl.replaceChildren();
528
544
  if (!showToolbar) {
545
+ restoreToolbarFocus();
529
546
  return;
530
547
  }
531
548
  const appendSearchToolbar = () => {
@@ -543,6 +560,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
543
560
  group.setAttribute('aria-label', t('toolbar.search'));
544
561
  const input = documentRef.createElement('input');
545
562
  input.type = 'search';
563
+ input.dataset.viewerToolbarKey = 'search-input';
546
564
  addPart(input, 'input');
547
565
  input.value = searchDraft;
548
566
  input.placeholder = t('toolbar.searchPlaceholder');
@@ -554,16 +572,19 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
554
572
  });
555
573
  const searchButton = documentRef.createElement('button');
556
574
  searchButton.type = 'submit';
575
+ searchButton.dataset.viewerToolbarKey = 'search-submit';
557
576
  addPart(searchButton, 'button');
558
577
  searchButton.textContent = t('toolbar.search');
559
578
  searchButton.title = t('toolbar.search');
560
579
  searchButton.setAttribute('aria-label', t('toolbar.search'));
561
580
  searchButton.disabled = toolbarDisabled;
562
581
  const previousButton = createButton(documentRef, '<', 'file-viewer-web-icon-button', () => controller === null || controller === void 0 ? void 0 : controller.previousSearchResult());
582
+ previousButton.dataset.viewerToolbarKey = 'search-previous';
563
583
  previousButton.title = t('toolbar.searchPrevious');
564
584
  previousButton.setAttribute('aria-label', t('toolbar.searchPrevious'));
565
585
  previousButton.disabled = toolbarDisabled || searchTotal < 1;
566
586
  const nextButton = createButton(documentRef, '>', 'file-viewer-web-icon-button', () => controller === null || controller === void 0 ? void 0 : controller.nextSearchResult());
587
+ nextButton.dataset.viewerToolbarKey = 'search-next';
567
588
  nextButton.title = t('toolbar.searchNext');
568
589
  nextButton.setAttribute('aria-label', t('toolbar.searchNext'));
569
590
  nextButton.disabled = toolbarDisabled || searchTotal < 1;
@@ -571,6 +592,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
571
592
  searchDraft = '';
572
593
  await (controller === null || controller === void 0 ? void 0 : controller.clearDocumentSearch());
573
594
  });
595
+ clearButton.dataset.viewerToolbarKey = 'search-clear';
574
596
  clearButton.title = t('toolbar.searchClear');
575
597
  clearButton.setAttribute('aria-label', t('toolbar.searchClear'));
576
598
  clearButton.disabled = toolbarDisabled || (!searchDraft && !(searchState === null || searchState === void 0 ? void 0 : searchState.query));
@@ -596,9 +618,10 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
596
618
  group.className = 'file-viewer-web-toolbar-group';
597
619
  addPart(group, 'toolbar-group');
598
620
  group.setAttribute('aria-label', t('toolbar.zoomGroup'));
599
- if (availability.zoomOut) {
621
+ if (zoomButtons.zoomOut) {
600
622
  const button = createButton(documentRef, '-', 'file-viewer-web-icon-button', () => controller === null || controller === void 0 ? void 0 : controller.zoomOut());
601
623
  button.title = t('toolbar.zoomOut');
624
+ button.dataset.viewerToolbarKey = 'zoom-out';
602
625
  button.setAttribute('aria-label', t('toolbar.zoomOut'));
603
626
  button.disabled = isFileViewerZoomButtonDisabled({
604
627
  action: 'canZoomOut',
@@ -608,9 +631,10 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
608
631
  });
609
632
  group.appendChild(button);
610
633
  }
611
- if (availability.zoomReset) {
634
+ if (zoomButtons.zoomReset) {
612
635
  const meter = createButton(documentRef, zoomState.label, 'file-viewer-web-zoom-meter', () => controller === null || controller === void 0 ? void 0 : controller.resetZoom());
613
636
  meter.title = t('toolbar.zoomReset');
637
+ meter.dataset.viewerToolbarKey = 'zoom-meter';
614
638
  meter.disabled = isFileViewerZoomButtonDisabled({
615
639
  action: 'canReset',
616
640
  availability,
@@ -622,9 +646,10 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
622
646
  else {
623
647
  group.appendChild(createReadonlyMeter(documentRef, zoomState.label, 'file-viewer-web-zoom-meter'));
624
648
  }
625
- if (availability.zoomReset) {
649
+ if (zoomButtons.zoomReset) {
626
650
  const button = createButton(documentRef, '1:1', 'file-viewer-web-icon-button', () => controller === null || controller === void 0 ? void 0 : controller.resetZoom());
627
651
  button.title = t('toolbar.zoomReset');
652
+ button.dataset.viewerToolbarKey = 'zoom-reset';
628
653
  button.setAttribute('aria-label', t('toolbar.zoomReset'));
629
654
  button.disabled = isFileViewerZoomButtonDisabled({
630
655
  action: 'canReset',
@@ -634,9 +659,10 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
634
659
  });
635
660
  group.appendChild(button);
636
661
  }
637
- if (availability.zoomIn) {
662
+ if (zoomButtons.zoomIn) {
638
663
  const button = createButton(documentRef, '+', 'file-viewer-web-icon-button', () => controller === null || controller === void 0 ? void 0 : controller.zoomIn());
639
664
  button.title = t('toolbar.zoomIn');
665
+ button.dataset.viewerToolbarKey = 'zoom-in';
640
666
  button.setAttribute('aria-label', t('toolbar.zoomIn'));
641
667
  button.disabled = isFileViewerZoomButtonDisabled({
642
668
  action: 'canZoomIn',
@@ -650,11 +676,12 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
650
676
  toolbarEl.appendChild(group);
651
677
  }
652
678
  };
653
- const appendToolbarButton = (visible, label, title, onClick) => {
679
+ const appendToolbarButton = (visible, key, label, title, onClick) => {
654
680
  if (!visible) {
655
681
  return;
656
682
  }
657
683
  const button = createButton(documentRef, label, '', onClick);
684
+ button.dataset.viewerToolbarKey = key;
658
685
  button.title = title;
659
686
  button.disabled = toolbarDisabled;
660
687
  toolbarEl.appendChild(button);
@@ -691,6 +718,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
691
718
  }
692
719
  });
693
720
  addPart(button, 'theme-toggle');
721
+ button.dataset.viewerToolbarKey = 'theme';
694
722
  setThemeButtonIcon(button, currentTheme);
695
723
  button.title = title;
696
724
  button.setAttribute('aria-label', title);
@@ -706,7 +734,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
706
734
  appendZoomToolbar();
707
735
  }
708
736
  else if (item === 'download') {
709
- appendToolbarButton(visibleToolbar.download, t('toolbar.download'), t('toolbar.downloadTitle'), () => controller === null || controller === void 0 ? void 0 : controller.downloadOriginalFile());
737
+ appendToolbarButton(visibleToolbar.download, 'download', t('toolbar.download'), t('toolbar.downloadTitle'), () => controller === null || controller === void 0 ? void 0 : controller.downloadOriginalFile());
710
738
  }
711
739
  else if (item === 'print') {
712
740
  if (!visibleToolbar.print) {
@@ -719,6 +747,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
719
747
  menu.dataset.open = menu.dataset.open === 'true' ? 'false' : 'true';
720
748
  });
721
749
  trigger.title = t('toolbar.printTitle');
750
+ trigger.dataset.viewerToolbarKey = 'print';
722
751
  trigger.setAttribute('aria-label', t('toolbar.printTitle'));
723
752
  trigger.setAttribute('aria-haspopup', 'menu');
724
753
  trigger.disabled = toolbarDisabled;
@@ -733,6 +762,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
733
762
  await (controller === null || controller === void 0 ? void 0 : controller.printRenderedHtml());
734
763
  });
735
764
  directButton.title = t('toolbar.printTitle');
765
+ directButton.dataset.viewerToolbarKey = 'print-direct';
736
766
  directButton.setAttribute('role', 'menuitem');
737
767
  directButton.disabled = toolbarDisabled;
738
768
  const maskButton = createButton(documentRef, t('toolbar.printMask'), '', async () => {
@@ -740,6 +770,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
740
770
  await (controller === null || controller === void 0 ? void 0 : controller.printWithMask());
741
771
  });
742
772
  maskButton.title = t('toolbar.printMaskTitle');
773
+ maskButton.dataset.viewerToolbarKey = 'print-mask';
743
774
  maskButton.setAttribute('role', 'menuitem');
744
775
  maskButton.disabled = toolbarDisabled;
745
776
  panel.append(directButton, maskButton);
@@ -753,12 +784,13 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
753
784
  toolbarEl.appendChild(menu);
754
785
  }
755
786
  else if (item === 'exportHtml') {
756
- appendToolbarButton(visibleToolbar.exportHtml, t('toolbar.exportHtml'), t('toolbar.exportHtmlTitle'), () => controller === null || controller === void 0 ? void 0 : controller.exportRenderedHtml());
787
+ appendToolbarButton(visibleToolbar.exportHtml, 'export-html', t('toolbar.exportHtml'), t('toolbar.exportHtmlTitle'), () => controller === null || controller === void 0 ? void 0 : controller.exportRenderedHtml());
757
788
  }
758
789
  else if (item === 'theme') {
759
790
  appendThemeToolbar();
760
791
  }
761
792
  });
793
+ restoreToolbarFocus(state.loading || (!state.ready && !state.error));
762
794
  };
763
795
  let refreshSystemThemeDocument = null;
764
796
  const handleViewerColorSchemeChange = () => {
@@ -832,7 +864,7 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
832
864
  abortController = null;
833
865
  };
834
866
  const loadSource = async (nextSource) => {
835
- var _a;
867
+ var _a, _b, _c, _d, _e, _f;
836
868
  cancel();
837
869
  currentSource = nextSource;
838
870
  abortController = typeof AbortController !== 'undefined' ? new AbortController() : null;
@@ -841,9 +873,18 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
841
873
  state.loading = true;
842
874
  state.error = null;
843
875
  notifyState();
876
+ await ((_a = instance.prepare) === null || _a === void 0 ? void 0 : _a.call(instance));
877
+ if (disposed || (controller === null || controller === void 0 ? void 0 : controller.signal.aborted) || abortController !== controller) {
878
+ return null;
879
+ }
880
+ const extension = nextSource.type || getExtension(resolveViewerSourceFilename(nextSource));
881
+ const renderer = instance.getRenderer(extension);
844
882
  const resolvedSource = await resolveViewerLoadSource(nextSource, {
883
+ acceptsPdfUrl: (renderer === null || renderer === void 0 ? void 0 : renderer.sourceAccess) === 'stream-preferred' && Boolean(renderer.load),
845
884
  fetchFile: coreOptions.fetchFile,
846
885
  signal: controller === null || controller === void 0 ? void 0 : controller.signal,
886
+ streaming: (_c = (_b = currentOptions.options) === null || _b === void 0 ? void 0 : _b.pdf) === null || _c === void 0 ? void 0 : _c.streaming,
887
+ pageHref: (_e = (_d = documentRef.defaultView) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.href,
847
888
  });
848
889
  if (disposed || (controller === null || controller === void 0 ? void 0 : controller.signal.aborted) || abortController !== controller) {
849
890
  return null;
@@ -851,14 +892,14 @@ export const mountViewer = (container, initialOptions = {}, coreOptions = {}) =>
851
892
  return await instance.load(resolvedSource);
852
893
  }
853
894
  catch (error) {
854
- if (isAbortError(error) && (controller === null || controller === void 0 ? void 0 : controller.signal.aborted)) {
895
+ if (disposed || (controller === null || controller === void 0 ? void 0 : controller.signal.aborted) || abortController !== controller) {
855
896
  return null;
856
897
  }
857
898
  state.loading = false;
858
899
  state.ready = false;
859
900
  state.error = error;
860
901
  notifyState();
861
- (_a = coreOptions.onError) === null || _a === void 0 ? void 0 : _a.call(coreOptions, error, nextSource);
902
+ (_f = coreOptions.onError) === null || _f === void 0 ? void 0 : _f.call(coreOptions, error, nextSource);
862
903
  throw error;
863
904
  }
864
905
  finally {
@@ -0,0 +1 @@
1
+ export declare function createToolbarFocusRestorer(toolbar: HTMLElement, content: HTMLElement): () => (temporarilyUnavailable?: boolean) => void;
@@ -0,0 +1,43 @@
1
+ export function createToolbarFocusRestorer(toolbar, content) {
2
+ let pendingKey = null;
3
+ const controls = () => Array.from(toolbar.querySelectorAll('[data-viewer-toolbar-key]'));
4
+ return () => {
5
+ const root = toolbar.getRootNode();
6
+ const active = root.activeElement;
7
+ const key = active === toolbar ? pendingKey : active && toolbar.contains(active)
8
+ ? active.dataset.viewerToolbarKey : null;
9
+ pendingKey = null;
10
+ if (!key)
11
+ return (_temporarilyUnavailable = false) => undefined;
12
+ const oldIndex = controls().indexOf(active);
13
+ const input = (active === null || active === void 0 ? void 0 : active.tagName) === 'INPUT' ? active : null;
14
+ const selection = input && input.selectionStart !== null
15
+ ? [input.selectionStart, input.selectionEnd, input.selectionDirection] : null;
16
+ return (temporarilyUnavailable = false) => {
17
+ if (!toolbar.isConnected)
18
+ return;
19
+ if (toolbar.hidden) {
20
+ content.tabIndex = -1;
21
+ content.focus({ preventScroll: true });
22
+ return;
23
+ }
24
+ const all = controls();
25
+ const original = all.find(element => element.dataset.viewerToolbarKey === key);
26
+ const available = (element) => !element.disabled && element.getClientRects().length > 0;
27
+ const index = original ? all.indexOf(original) : Math.max(0, oldIndex);
28
+ const target = original && available(original) ? original
29
+ : temporarilyUnavailable ? undefined
30
+ : all.slice(index).find(available) || all.slice(0, index).reverse().find(available);
31
+ if (target) {
32
+ target.focus({ preventScroll: true });
33
+ if (target === original && target.tagName === 'INPUT' && selection)
34
+ target.setSelectionRange(selection[0], selection[1], selection[2] || undefined);
35
+ }
36
+ else {
37
+ pendingKey = key;
38
+ toolbar.tabIndex = -1;
39
+ toolbar.focus({ preventScroll: true });
40
+ }
41
+ };
42
+ };
43
+ }
@@ -106,8 +106,10 @@ export interface FileViewerArchivePasswordRequestContext {
106
106
  error?: unknown;
107
107
  }
108
108
  export interface FileViewerPdfOptions {
109
+ darkMode?: boolean;
109
110
  handTool?: boolean;
110
111
  toolbar?: boolean;
112
+ zoomToolbar?: boolean;
111
113
  navigation?: boolean;
112
114
  defaultNavigationVisible?: boolean;
113
115
  thumbnails?: boolean;
@@ -115,6 +117,8 @@ export interface FileViewerPdfOptions {
115
117
  bbox?: FileViewerPdfBoundingBox | readonly FileViewerPdfBoundingBox[];
116
118
  initialViewState?: FileViewerViewState;
117
119
  streaming?: boolean | 'same-origin';
120
+ disableStream?: boolean;
121
+ disableAutoFetch?: boolean;
118
122
  rangeChunkSize?: number;
119
123
  withCredentials?: boolean;
120
124
  assetBaseUrl?: string | URL;
@@ -166,6 +170,9 @@ export interface FileViewerDocxOptions {
166
170
  externalResourcePolicy?: 'allow' | 'block';
167
171
  darkMode?: boolean;
168
172
  }
173
+ export interface FileViewerEpubOptions {
174
+ darkMode?: boolean;
175
+ }
169
176
  export interface FileViewerSpreadsheetOptions {
170
177
  worker?: boolean | 'auto';
171
178
  workerUrl?: string;
@@ -605,10 +612,12 @@ export interface FileViewerOptions {
605
612
  archive?: FileViewerArchiveOptions;
606
613
  chm?: FileViewerChmOptions;
607
614
  pdf?: FileViewerPdfOptions;
615
+ epub?: FileViewerEpubOptions;
608
616
  docx?: FileViewerDocxOptions;
609
617
  presentation?: FileViewerPresentationOptions;
610
618
  spreadsheet?: FileViewerSpreadsheetOptions;
611
619
  image?: {
620
+ handTool?: boolean;
612
621
  rotation?: boolean;
613
622
  };
614
623
  iwork?: FileViewerIworkOptions;
@@ -0,0 +1 @@
1
+ export declare function installFileViewerImageHandTool(container: HTMLElement, signal?: AbortSignal): () => void;
@@ -0,0 +1,137 @@
1
+ export function installFileViewerImageHandTool(container, signal) {
2
+ const view = container.ownerDocument.defaultView;
3
+ if (!view || (signal === null || signal === void 0 ? void 0 : signal.aborted))
4
+ return () => { };
5
+ const cursor = container.style.getPropertyValue('cursor');
6
+ const cursorPriority = container.style.getPropertyPriority('cursor');
7
+ const selection = container.style.getPropertyValue('user-select');
8
+ const selectionPriority = container.style.getPropertyPriority('user-select');
9
+ const previousMode = container.getAttribute('data-viewer-image-hand-tool');
10
+ const previousPanning = container.getAttribute('data-viewer-image-panning');
11
+ const style = container.ownerDocument.createElement('style');
12
+ style.textContent = '[data-viewer-image-hand-tool="true"] img{cursor:grab!important}[data-viewer-image-panning="true"] img{cursor:grabbing!important}';
13
+ container.append(style);
14
+ const interactive = 'a,button,input,textarea,select,option,[contenteditable]:not([contenteditable="false"]),[role="button"]:not(img),[role="link"],[role="textbox"]';
15
+ let drag = null;
16
+ let disposed = false;
17
+ let suppressClick = false;
18
+ let clickTimer = 0;
19
+ const canPan = () => container.scrollWidth > container.clientWidth || container.scrollHeight > container.clientHeight;
20
+ const syncCursor = () => {
21
+ if (disposed || (drag === null || drag === void 0 ? void 0 : drag.moved))
22
+ return;
23
+ const enabled = canPan();
24
+ container.setAttribute('data-viewer-image-hand-tool', String(enabled));
25
+ container.style.setProperty('cursor', enabled ? 'grab' : cursor, enabled ? '' : cursorPriority);
26
+ };
27
+ const finish = () => {
28
+ var _a;
29
+ const state = drag;
30
+ if (!state)
31
+ return;
32
+ drag = null;
33
+ container.style.setProperty('user-select', selection, selectionPriority);
34
+ container.removeAttribute('data-viewer-image-panning');
35
+ view.removeEventListener('pointermove', move, true);
36
+ view.removeEventListener('pointerup', up, true);
37
+ view.removeEventListener('pointercancel', up, true);
38
+ view.removeEventListener('blur', finish);
39
+ if ((_a = container.hasPointerCapture) === null || _a === void 0 ? void 0 : _a.call(container, state.id))
40
+ container.releasePointerCapture(state.id);
41
+ suppressClick = state.moved;
42
+ view.clearTimeout(clickTimer);
43
+ clickTimer = view.setTimeout(() => { suppressClick = false; }, 250);
44
+ syncCursor();
45
+ };
46
+ const move = (event) => {
47
+ var _a;
48
+ if (!drag || event.pointerId !== drag.id)
49
+ return;
50
+ if (!(event.buttons & 1)) {
51
+ finish();
52
+ return;
53
+ }
54
+ const dx = (event.clientX - drag.x) / drag.ratioX;
55
+ const dy = (event.clientY - drag.y) / drag.ratioY;
56
+ if (!drag.moved && Math.hypot(dx, dy) < 3)
57
+ return;
58
+ if (!drag.moved) {
59
+ drag.moved = true;
60
+ container.setAttribute('data-viewer-image-panning', 'true');
61
+ container.style.cursor = 'grabbing';
62
+ container.style.setProperty('user-select', 'none');
63
+ try {
64
+ (_a = container.setPointerCapture) === null || _a === void 0 ? void 0 : _a.call(container, event.pointerId);
65
+ }
66
+ catch { }
67
+ }
68
+ container.scrollLeft = drag.left - dx;
69
+ container.scrollTop = drag.top - dy;
70
+ event.preventDefault();
71
+ };
72
+ const up = (event) => { if (event.pointerId === (drag === null || drag === void 0 ? void 0 : drag.id))
73
+ finish(); };
74
+ const down = (event) => {
75
+ if (disposed || event.defaultPrevented || event.pointerType !== 'mouse' || event.button !== 0 || event.isPrimary === false || event.ctrlKey || event.metaKey || event.altKey || event.shiftKey)
76
+ return;
77
+ if (event.composedPath().some(node => { var _a, _b; return node !== container && ((_b = (_a = node).matches) === null || _b === void 0 ? void 0 : _b.call(_a, interactive)); }))
78
+ return;
79
+ finish();
80
+ suppressClick = false;
81
+ syncCursor();
82
+ if (!canPan())
83
+ return;
84
+ const rect = container.getBoundingClientRect();
85
+ const ratioX = container.offsetWidth ? rect.width / container.offsetWidth : 1;
86
+ const ratioY = container.offsetHeight ? rect.height / container.offsetHeight : 1;
87
+ if (![ratioX, ratioY].every(value => Number.isFinite(value) && value > 0))
88
+ return;
89
+ const x = (event.clientX - rect.left) / ratioX - container.clientLeft;
90
+ const y = (event.clientY - rect.top) / ratioY - container.clientTop;
91
+ if (x < 0 || y < 0 || x >= container.clientWidth || y >= container.clientHeight)
92
+ return;
93
+ drag = { id: event.pointerId, x: event.clientX, y: event.clientY, left: container.scrollLeft, top: container.scrollTop, ratioX, ratioY, moved: false };
94
+ view.addEventListener('pointermove', move, { capture: true, passive: false });
95
+ view.addEventListener('pointerup', up, true);
96
+ view.addEventListener('pointercancel', up, true);
97
+ view.addEventListener('blur', finish);
98
+ };
99
+ const click = (event) => {
100
+ if (suppressClick && event.detail > 0) {
101
+ event.preventDefault();
102
+ event.stopImmediatePropagation();
103
+ }
104
+ };
105
+ const nativeDrag = (event) => { if (drag)
106
+ event.preventDefault(); };
107
+ const restoreAttribute = (name, value) => value === null ? container.removeAttribute(name) : container.setAttribute(name, value);
108
+ const dispose = () => {
109
+ if (disposed)
110
+ return;
111
+ finish();
112
+ disposed = true;
113
+ view.clearTimeout(clickTimer);
114
+ suppressClick = false;
115
+ container.style.setProperty('cursor', cursor, cursorPriority);
116
+ container.style.setProperty('user-select', selection, selectionPriority);
117
+ restoreAttribute('data-viewer-image-hand-tool', previousMode);
118
+ restoreAttribute('data-viewer-image-panning', previousPanning);
119
+ container.removeEventListener('pointerdown', down);
120
+ container.removeEventListener('pointermove', syncCursor);
121
+ container.removeEventListener('pointerover', syncCursor);
122
+ container.removeEventListener('lostpointercapture', up);
123
+ container.removeEventListener('click', click, true);
124
+ container.removeEventListener('dragstart', nativeDrag);
125
+ signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', dispose);
126
+ style.remove();
127
+ };
128
+ container.addEventListener('pointerdown', down);
129
+ container.addEventListener('pointermove', syncCursor);
130
+ container.addEventListener('pointerover', syncCursor);
131
+ container.addEventListener('lostpointercapture', up);
132
+ container.addEventListener('click', click, true);
133
+ container.addEventListener('dragstart', nativeDrag);
134
+ signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', dispose, { once: true });
135
+ syncCursor();
136
+ return dispose;
137
+ }
@@ -5,7 +5,7 @@ export { DEFAULT_FILE_VIEWER_TEXT_CHUNK_OVERLAP, DEFAULT_FILE_VIEWER_TEXT_CHUNK_
5
5
  export { ARCHIVE_EXTENSIONS, DEFAULT_REGISTERED_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_STABLE_SUPPORTED_EXTENSIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from "./registry/formats.js";
6
6
  export { precheckFileViewerSource } from "./source/precheck.js";
7
7
  export type { FileViewerPrecheckOptions, FileViewerPrecheckReason, FileViewerPrecheckResult, FileViewerPrecheckStatus, } from "./source/precheck.js";
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.js";
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, resolveFileViewerToolbarZoomButtons, resolveFileViewerToolbarPosition, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from "./lifecycle/operations.js";
9
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.js";
10
10
  export type { FileViewerI18nInput, FileViewerResolvedLocale, ResolveFileViewerI18nInput, } from "./i18n/messages.js";
11
11
  export type { BuildFileViewerLifecycleContextFromNormalizedSourceInput, BuildFileViewerOperationContextFromLifecycleStateInput, BuildFileViewerLifecycleContextInput, BuiltFileViewerLifecycleContext, BuiltFileViewerOperationContext, CreateFileViewerLifecycleActionsInput, CreateFileViewerPublicApiInput, CreateFileViewerToolbarActionsInput, CreateFileViewerToolbarControllerActionHandlersInput, DispatchFileViewerLifecycleEventInput, DispatchFileViewerOperationAvailabilityChangeInput, DispatchFileViewerOperationContextEventInput, DispatchFileViewerZoomChangeInput, FileViewerActiveUnloadState, FileViewerLifecycleActions, FileViewerLifecycleComponentEmit, FileViewerLifecycleHookErrorLogger, FileViewerLifecycleStateController, FileViewerOperationErrorLogger, FileViewerToolbarActions, FileViewerToolbarControllerActionHandlers, FileViewerToolbarState, FileViewerToolbarZoomSyncSnapshot, FileViewerZoomButtonAction, ReportFileViewerLifecycleHookErrorInput, ReportFileViewerOperationErrorInput, ResolveFileViewerBeforeOperationErrorMessageInput, ResolveFileViewerLifecycleHookErrorMessageInput, ResolveFileViewerOperationAvailabilityInput, ResolveFileViewerToolbarStateInput, RunFileViewerActiveUnloadCompleteInput, RunFileViewerActiveUnloadStartInput, RunFileViewerBeforeOperationInput, RunFileViewerToolbarAvailabilitySyncInput, RunFileViewerToolbarZoomSyncInput, SerializedFileViewerContext, } from "./lifecycle/operations.js";
@@ -26,4 +26,4 @@ export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRI
26
26
  export type { FileViewerErrorMessageCarrier, FileViewerErrorMessageFormatter, } from "./viewer/state.js";
27
27
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from "./features/watermark.js";
28
28
  export type { FileViewerWatermarkPresentationState, FileViewerWatermarkStyle, } from "./features/watermark.js";
29
- export type { FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchiveOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerDownloadOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoOptions, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, 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, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RenderSurface, RendererCapability, RendererSourceTypeProbe, RendererSourceTypeProbeInput, RendererDefinition, RendererLoadContext, RendererLoader, RendererPlugin, RendererRegistry, RendererSession, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from "./contracts/types.js";
29
+ export type { FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchiveOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerDownloadOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoOptions, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerEpubOptions, 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, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RenderSurface, RendererCapability, RendererSourceTypeProbe, RendererSourceTypeProbeInput, RendererDefinition, RendererLoadContext, RendererLoader, RendererPlugin, RendererRegistry, RendererSession, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from "./contracts/types.js";
package/dist/headless.js CHANGED
@@ -3,7 +3,7 @@ export { ADAPTER_PRINT_REQUIRED_EXTENSIONS, applyFileViewerZoomAvailability, cre
3
3
  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
4
  export { ARCHIVE_EXTENSIONS, DEFAULT_REGISTERED_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_STABLE_SUPPORTED_EXTENSIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from "./registry/formats.js";
5
5
  export { precheckFileViewerSource } from "./source/precheck.js";
6
- 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";
6
+ 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, resolveFileViewerToolbarZoomButtons, resolveFileViewerToolbarPosition, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from "./lifecycle/operations.js";
7
7
  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";
8
8
  export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerColorScheme, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, toggleFileViewerColorScheme, } from "./config/options.js";
9
9
  export { resolveFileViewerPresentationState, } from "./presentation/state.js";
package/dist/index.d.ts CHANGED
@@ -55,7 +55,7 @@ export declare const renderFileViewerWordDocx: (buffer: ArrayBuffer, target: HTM
55
55
  export declare const renderFileViewerSpreadsheet: (buffer: ArrayBuffer, target: HTMLDivElement, type?: string, context?: FileRenderContext) => Promise<FileViewerRenderedInstance>;
56
56
  export declare const parseEdaFile: (buffer: ArrayBuffer, type?: string) => Promise<never>;
57
57
  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";
58
- export { FILE_VIEWER_LIFECYCLE_HOOKS, FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_ORDER, FILE_VIEWER_LIFECYCLE_HOOK_ERROR_MESSAGE_PREFIX, 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, dispatchFileViewerOperationContextEvent, dispatchFileViewerOperationAvailabilityChange, dispatchFileViewerZoomChange, emitFileViewerComponentLifecycleEvent, getFileViewerBeforeOperationHooks, getFileViewerLifecycleHookName, hasVisibleFileViewerToolbarActions, isFileViewerToolbarOperationPermitted, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, reportFileViewerLifecycleHookError, reportFileViewerOperationError, resolveFileViewerLifecycleFallbackSource, resolveFileViewerLifecycleHookErrorMessage, resolveFileViewerBeforeOperationErrorMessage, resolveFileViewerOperationAvailability, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveFileViewerToolbarPosition, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from "./lifecycle/operations.js";
58
+ export { FILE_VIEWER_LIFECYCLE_HOOKS, FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_ORDER, FILE_VIEWER_LIFECYCLE_HOOK_ERROR_MESSAGE_PREFIX, 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, dispatchFileViewerOperationContextEvent, dispatchFileViewerOperationAvailabilityChange, dispatchFileViewerZoomChange, emitFileViewerComponentLifecycleEvent, getFileViewerBeforeOperationHooks, getFileViewerLifecycleHookName, hasVisibleFileViewerToolbarActions, isFileViewerToolbarOperationPermitted, isFileViewerZoomButtonDisabled, normalizeFileViewerToolbar, reportFileViewerLifecycleHookError, reportFileViewerOperationError, resolveFileViewerLifecycleFallbackSource, resolveFileViewerLifecycleHookErrorMessage, resolveFileViewerBeforeOperationErrorMessage, resolveFileViewerOperationAvailability, resolveFileViewerToolbarZoomButtons, resolveFileViewerToolbarOrder, resolveFileViewerToolbarState, resolveFileViewerToolbarPosition, resolveVisibleFileViewerToolbar, runFileViewerActiveUnloadComplete, runFileViewerActiveUnloadStart, runFileViewerBeforeOperation, runFileViewerLifecycleHook, runFileViewerToolbarAvailabilitySync, runFileViewerToolbarZoomSync, serializeFileViewerContext, } from "./lifecycle/operations.js";
59
59
  export type { BuildFileViewerOperationContextFromLifecycleStateInput, CreateFileViewerLifecycleActionsInput, DispatchFileViewerLifecycleEventInput, DispatchFileViewerOperationContextEventInput, DispatchFileViewerOperationAvailabilityChangeInput, DispatchFileViewerZoomChangeInput, FileViewerActiveUnloadState, FileViewerLifecycleActions, FileViewerLifecycleComponentEmit, FileViewerToolbarActions, FileViewerToolbarControllerActionHandlers, FileViewerToolbarZoomSyncSnapshot, FileViewerZoomButtonAction, FileViewerToolbarState, CreateFileViewerPublicApiInput, CreateFileViewerToolbarActionsInput, CreateFileViewerToolbarControllerActionHandlersInput, BuildFileViewerLifecycleContextFromNormalizedSourceInput, ResolveFileViewerBeforeOperationErrorMessageInput, ResolveFileViewerToolbarStateInput, RunFileViewerActiveUnloadCompleteInput, RunFileViewerActiveUnloadStartInput, RunFileViewerToolbarAvailabilitySyncInput, RunFileViewerToolbarZoomSyncInput, } from "./lifecycle/operations.js";
60
60
  export { FALLBACK_FILE_VIEWER_LOADING_THEME, FILE_VIEWER_LOADING_THEME_MAP, applyFileViewerLoadingState, cloneFileViewerLoadingState, createFileViewerLoadingController, createFileViewerLoadingControllerActionHandlers, createFileViewerLoadingState, createFileViewerLoadingStyleVars, runFileViewerLoadingControllerAction, runFileViewerLoadingExtensionSync, resolveFileViewerLoadingTheme, syncFileViewerLoadingControllerState, } from "./viewer/loading.js";
61
61
  export type { FileViewerLoadingController, FileViewerLoadingControllerActionHandlers, RunFileViewerLoadingExtensionSyncInput, } from "./viewer/loading.js";
@@ -63,6 +63,7 @@ export { createFileViewerLifecycleFacade, } from "./lifecycle/facade.js";
63
63
  export type { BuildFileViewerLifecycleFacadeLoadStartStateInput, BuildFileViewerLifecycleFacadeRenderCompleteStateInput, CreateFileViewerLifecycleFacadeInput, FileViewerLifecycleFacade, } from "./lifecycle/facade.js";
64
64
  export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerColorScheme, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, toggleFileViewerColorScheme, } from "./config/options.js";
65
65
  export { resolveFileViewerPresentationState, } from "./presentation/state.js";
66
+ export { observeFileViewerColorScheme } from "./presentation/colorScheme.js";
66
67
  export type { FileViewerPresentationState, ResolveFileViewerPresentationStateInput, } from "./presentation/state.js";
67
68
  export { createFileViewerRendererDispatcher, } from "./rendering/dispatcher.js";
68
69
  export { appendFileViewerStyle, buildFileRenderContextFromLoadContext, applyFileViewerRenderSurfaceState, clearFileViewerRenderSurface, createFileRenderHandlerRendererSession, createFileRenderHandlerRegistry, createFileRenderHandlerLoader, createFileViewerRenderSurfaceActionHandlers, createFileViewerRenderReadinessTarget, createFileViewerRenderSurface, createFileViewerRenderSurfaceState, createFileViewerRenderSurfaceStateTarget, createFileViewerRenderTarget, DEFAULT_FILE_VIEWER_RENDER_TARGET_CLASS, FILE_VIEWER_RENDER_SURFACE_BACKGROUND_PROPERTY, DEFAULT_FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_LOGGER, FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_MESSAGE, disposeActiveFileViewerRendererSession, disposeFileViewerRendered, disposeFileViewerRendererSession, getFileViewerShadowRootForNode, isFileViewerShadowRoot, normalizeFileViewerStyleIsolation, normalizeFileViewerRenderSurfaceBackground, removeFileViewerRenderTarget, reportFileViewerRenderSessionDisposeError, resetFileViewerRenderSurface, resolveFileViewerStyleIsolation, resolveFileViewerRenderSessionDisposeErrorMessage, runFileViewerRenderSurfaceClear, runFileViewerRenderSurfaceMount, syncFileViewerRenderSurfaceBackground, renderFileViewerHandler, } from "./rendering/handler.js";
@@ -94,6 +95,7 @@ export type { CreateFileViewerZoomControllerOptions, FileViewerZoomOperation, }
94
95
  export type { CreateViewerOptions } from "./viewer/createViewer.js";
95
96
  export type { BuildExportHtmlDocumentOptions, BuildFileViewerRenderedHtmlDocumentOptions, } from "./exportDocument.js";
96
97
  export type { CreateFileViewerWorkerControllerOptions, FileViewerWorkerContext, FileViewerWorkerController, FileViewerWorkerErrorHook, FileViewerWorkerEventHandler, FileViewerWorkerFactory, FileViewerWorkerMessageHook, WorkerProvider, WorkerRef, } from "./platform/worker.js";
97
- export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerBinaryInspectorOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerModelLinearUnit, FileViewerModelOptions, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileViewerTiandituMapStyle, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, FileViewerDesignOptions, 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, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererSourceTypeProbe, RendererSourceTypeProbeInput, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from "./contracts/types.js";
98
+ export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerBinaryInspectorOptions, FileViewerChmOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadColorMode, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerModelLinearUnit, FileViewerModelOptions, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerFormatStatus, FileViewerFormatSupportLevel, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileViewerTiandituMapStyle, FileRenderContext, FileRenderExportAdapter, FileRenderThumbnailAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLoadOptions, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerIworkEmbeddedPreviewMode, FileViewerIworkOptions, FileViewerHangulOptions, FileViewerDiagnostic, FileViewerDesignOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfBoundingBox, FileViewerPdfBoundingBoxOrigin, FileViewerPdfBoundingBoxUnit, FileViewerPdfOptions, FileViewerEpubOptions, 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, FileViewerWordPerfectOptions, FileViewerZoomProvider, FileViewerZoomState, NormalizedFileViewerSource, RendererCapability, RendererSourceTypeProbe, RendererSourceTypeProbeInput, RendererDefinition, RendererPlugin, RendererLoadContext, RendererLoader, RendererRegistry, RendererSession, RenderSurface, ViewerCapabilityState, ViewerLifecycleContext, ViewerOperationContext, } from "./contracts/types.js";
98
99
  export { resolveFileViewerCopiedAssetUrl } from "./platform/copiedAssets.js";
99
100
  export type { FileViewerSpreadsheetRange, FileViewerSpreadsheetNavigationStatus } from "./contracts/types.js";
101
+ export { installFileViewerImageHandTool } from "./features/document/imageHandTool.js";