@file-viewer/core 2.1.19 → 2.1.21

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,4 +1,4 @@
1
- import type { FileViewerArchiveOptions, FileViewerCadOptions, FileViewerOptions, FileViewerThemeMode, FileViewerToolbarOptions } from '../contracts/types';
1
+ import type { FileViewerArchiveOptions, FileViewerCadOptions, FileViewerOptions, FileViewerThemeMode, FileViewerToolbarOptions, FileViewerUiDensity } from '../contracts/types';
2
2
  export type FileViewerSerializableToolbarOptions = Omit<FileViewerToolbarOptions, 'beforeOperation' | 'beforeDownload' | 'beforePrint' | 'beforeExportHtml'>;
3
3
  export type FileViewerSerializableCadOptions = Omit<FileViewerCadOptions, 'workerUrl'> & {
4
4
  workerUrl?: string;
@@ -9,6 +9,8 @@ export interface FileViewerSerializableOptions extends Omit<FileViewerOptions, '
9
9
  cad?: FileViewerSerializableCadOptions;
10
10
  }
11
11
  export declare const normalizeFileViewerTheme: (theme: FileViewerThemeMode | undefined) => FileViewerThemeMode;
12
+ export declare const normalizeFileViewerUiDensity: (density: FileViewerUiDensity | undefined) => FileViewerUiDensity;
13
+ export declare const resolveFileViewerUiDensity: (options?: Pick<FileViewerOptions, "ui"> | null) => FileViewerUiDensity;
12
14
  export declare const sanitizeFileViewerOptions: (options?: FileViewerOptions | FileViewerSerializableOptions | null) => FileViewerSerializableOptions | undefined;
13
15
  export declare const serializeFileViewerOptions: (options?: FileViewerOptions | FileViewerSerializableOptions | null) => string | undefined;
14
16
  export declare const parseFileViewerOptions: (value: unknown) => FileViewerSerializableOptions | undefined;
@@ -51,6 +51,10 @@ const stripExecutionOnlyOptions = (value) => {
51
51
  export const normalizeFileViewerTheme = (theme) => {
52
52
  return theme === 'light' || theme === 'dark' || theme === 'system' ? theme : 'system';
53
53
  };
54
+ export const normalizeFileViewerUiDensity = (density) => {
55
+ return density === 'compact' ? 'compact' : 'comfortable';
56
+ };
57
+ export const resolveFileViewerUiDensity = (options) => { var _a; return normalizeFileViewerUiDensity((_a = options === null || options === void 0 ? void 0 : options.ui) === null || _a === void 0 ? void 0 : _a.density); };
54
58
  export const sanitizeFileViewerOptions = (options) => {
55
59
  if (!isRecord(options)) {
56
60
  return undefined;
@@ -42,6 +42,35 @@ export interface FileViewerWatermarkOptions {
42
42
  color?: string;
43
43
  fontFamily?: string;
44
44
  }
45
+ export type FileViewerBrandingPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
46
+ export interface FileViewerBrandLicenseCertificate {
47
+ format?: string;
48
+ product?: string;
49
+ project?: string;
50
+ licenseKind?: string;
51
+ permissions?: string[];
52
+ expiresAt?: string | null;
53
+ [key: string]: unknown;
54
+ }
55
+ export interface FileViewerBrandLicenseBundle {
56
+ format?: string;
57
+ licenseNo?: string;
58
+ algorithm?: string;
59
+ publicKey?: string;
60
+ privateKey?: string;
61
+ certificate?: FileViewerBrandLicenseCertificate | string;
62
+ signature?: string;
63
+ [key: string]: unknown;
64
+ }
65
+ export type FileViewerBrandLicenseInput = string | FileViewerBrandLicenseCertificate | FileViewerBrandLicenseBundle;
66
+ export interface FileViewerBrandingOptions {
67
+ enabled?: boolean;
68
+ text?: string;
69
+ href?: string;
70
+ title?: string;
71
+ position?: FileViewerBrandingPosition;
72
+ license?: FileViewerBrandLicenseInput;
73
+ }
45
74
  export interface FileViewerToolbarOptions {
46
75
  download?: boolean;
47
76
  print?: boolean;
@@ -60,6 +89,23 @@ export interface FileViewerToolbarOptions {
60
89
  beforePrint?: FileViewerBeforeOperation;
61
90
  beforeExportHtml?: FileViewerBeforeOperation;
62
91
  }
92
+ export interface FileViewerArchiveEntryActionContext {
93
+ path: string;
94
+ name: string;
95
+ extension: string;
96
+ size: number;
97
+ lastModified?: number;
98
+ depth: number;
99
+ previewable: boolean;
100
+ }
101
+ export type FileViewerArchiveEntryActionPolicy = boolean | ((entry: FileViewerArchiveEntryActionContext) => boolean);
102
+ export interface FileViewerArchiveEntryActionsOptions {
103
+ /**
104
+ * Controls the download button for files opened from inside an archive.
105
+ * The viewer-level original-file download remains controlled by toolbar options.
106
+ */
107
+ download?: FileViewerArchiveEntryActionPolicy;
108
+ }
63
109
  export interface FileViewerArchiveOptions {
64
110
  workerUrl?: string;
65
111
  wasmUrl?: string;
@@ -67,6 +113,7 @@ export interface FileViewerArchiveOptions {
67
113
  cache?: boolean;
68
114
  maxArchiveSize?: number;
69
115
  maxEntryPreviewSize?: number;
116
+ entryActions?: FileViewerArchiveEntryActionsOptions;
70
117
  /**
71
118
  * Optional archive password. It is used for the first encrypted archive
72
119
  * attempt; if it is wrong, the built-in password dialog or requestPassword
@@ -360,6 +407,14 @@ export interface FileViewerAiOptions {
360
407
  chunkSize?: number;
361
408
  chunkOverlap?: number;
362
409
  }
410
+ export type FileViewerUiDensity = 'comfortable' | 'compact';
411
+ export interface FileViewerUiOptions {
412
+ /**
413
+ * Controls spacing density for viewer chrome such as toolbars, headers,
414
+ * archive lists, badges, search inputs, and compact action clusters.
415
+ */
416
+ density?: FileViewerUiDensity;
417
+ }
363
418
  export interface FileViewerOptions {
364
419
  theme?: FileViewerThemeMode;
365
420
  /**
@@ -427,7 +482,13 @@ export interface FileViewerOptions {
427
482
  */
428
483
  presets?: FileViewerRendererPresetInput;
429
484
  renderers?: FileViewerRendererPluginInput;
485
+ /**
486
+ * Built-in attribution badge. Pass `{ enabled:false, license }` with a
487
+ * Flyfish Viewer brand-removal authorization package to hide it legitimately.
488
+ */
489
+ branding?: boolean | FileViewerBrandingOptions;
430
490
  watermark?: boolean | FileViewerWatermarkOptions;
491
+ ui?: FileViewerUiOptions;
431
492
  toolbar?: boolean | FileViewerToolbarOptions;
432
493
  search?: boolean | FileViewerSearchOptions;
433
494
  ai?: boolean | FileViewerAiOptions;
@@ -0,0 +1,17 @@
1
+ import type { FileViewerBrandLicenseInput, FileViewerBrandingOptions } from '../contracts/types';
2
+ export declare const FILE_VIEWER_BRAND_LICENSE_FORMAT = "flyfish-viewer-brand-license-v1";
3
+ export declare const FILE_VIEWER_BRAND_LICENSE_PRODUCT = "flyfish-viewer";
4
+ export declare const FILE_VIEWER_BRAND_LICENSE_PROJECT = "file-viewer";
5
+ export declare const FILE_VIEWER_BRAND_LICENSE_KIND = "brand-removal";
6
+ export declare const FILE_VIEWER_BRAND_LICENSE_PERMISSION = "remove-branding";
7
+ export interface FileViewerBrandingPresentationState {
8
+ visible: boolean;
9
+ licenseValid: boolean;
10
+ text: string;
11
+ href: string;
12
+ title: string;
13
+ inlineStyle: string;
14
+ }
15
+ export declare const isFileViewerBrandRemovalLicense: (input: FileViewerBrandLicenseInput | undefined, now?: number) => boolean;
16
+ export declare const buildFileViewerBrandingInlineStyle: (branding?: boolean | FileViewerBrandingOptions) => string;
17
+ export declare const resolveFileViewerBrandingPresentationState: (branding?: boolean | FileViewerBrandingOptions, now?: number) => FileViewerBrandingPresentationState;
@@ -0,0 +1,128 @@
1
+ export const FILE_VIEWER_BRAND_LICENSE_FORMAT = 'flyfish-viewer-brand-license-v1';
2
+ export const FILE_VIEWER_BRAND_LICENSE_PRODUCT = 'flyfish-viewer';
3
+ export const FILE_VIEWER_BRAND_LICENSE_PROJECT = 'file-viewer';
4
+ export const FILE_VIEWER_BRAND_LICENSE_KIND = 'brand-removal';
5
+ export const FILE_VIEWER_BRAND_LICENSE_PERMISSION = 'remove-branding';
6
+ const DEFAULT_BRANDING_TEXT = 'Powered by Flyfish Viewer';
7
+ const DEFAULT_BRANDING_HREF = '';
8
+ const DEFAULT_BRANDING_TITLE = 'Flyfish Viewer';
9
+ const isRecord = (value) => {
10
+ return !!value && typeof value === 'object' && !Array.isArray(value);
11
+ };
12
+ const readJson = (value) => {
13
+ try {
14
+ return JSON.parse(value);
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ };
20
+ const normalizeLicenseInput = (input) => {
21
+ const value = typeof input === 'string' ? readJson(input) : input;
22
+ if (!isRecord(value)) {
23
+ return null;
24
+ }
25
+ const certificateValue = 'certificate' in value ? value.certificate : value;
26
+ const certificate = typeof certificateValue === 'string'
27
+ ? readJson(certificateValue)
28
+ : certificateValue;
29
+ if (!isRecord(certificate)) {
30
+ return null;
31
+ }
32
+ return {
33
+ certificate,
34
+ signature: typeof value.signature === 'string' ? value.signature.trim() : '',
35
+ };
36
+ };
37
+ const getString = (record, key) => {
38
+ const value = record[key];
39
+ return typeof value === 'string' ? value.trim() : '';
40
+ };
41
+ const hasPermission = (record, permission) => {
42
+ const permissions = record.permissions;
43
+ return Array.isArray(permissions) && permissions.some(item => item === permission);
44
+ };
45
+ const isWithinValidTime = (record, now) => {
46
+ const expiresAt = getString(record, 'expiresAt');
47
+ if (!expiresAt) {
48
+ return true;
49
+ }
50
+ const timestamp = Date.parse(expiresAt);
51
+ return Number.isFinite(timestamp) && timestamp >= now;
52
+ };
53
+ export const isFileViewerBrandRemovalLicense = (input, now = Date.now()) => {
54
+ const normalized = normalizeLicenseInput(input);
55
+ if (!normalized || !normalized.signature) {
56
+ return false;
57
+ }
58
+ const certificate = normalized.certificate;
59
+ return getString(certificate, 'format') === FILE_VIEWER_BRAND_LICENSE_FORMAT
60
+ && getString(certificate, 'product') === FILE_VIEWER_BRAND_LICENSE_PRODUCT
61
+ && getString(certificate, 'project') === FILE_VIEWER_BRAND_LICENSE_PROJECT
62
+ && getString(certificate, 'licenseKind') === FILE_VIEWER_BRAND_LICENSE_KIND
63
+ && hasPermission(certificate, FILE_VIEWER_BRAND_LICENSE_PERMISSION)
64
+ && isWithinValidTime(certificate, now);
65
+ };
66
+ const normalizeBrandingOptions = (branding) => {
67
+ if (branding === undefined || branding === false) {
68
+ return null;
69
+ }
70
+ if (branding === true) {
71
+ return { enabled: true };
72
+ }
73
+ return branding;
74
+ };
75
+ const resolvePositionStyle = (position) => {
76
+ switch (position) {
77
+ case 'bottom-left':
78
+ return 'left:10px;bottom:10px;';
79
+ case 'top-left':
80
+ return 'left:10px;top:10px;';
81
+ case 'top-right':
82
+ return 'right:10px;top:10px;';
83
+ case 'bottom-right':
84
+ default:
85
+ return 'right:10px;bottom:10px;';
86
+ }
87
+ };
88
+ export const buildFileViewerBrandingInlineStyle = (branding) => {
89
+ const normalized = normalizeBrandingOptions(branding);
90
+ if (!normalized) {
91
+ return '';
92
+ }
93
+ return [
94
+ 'position:absolute',
95
+ resolvePositionStyle(normalized.position),
96
+ 'z-index:30',
97
+ 'display:inline-flex',
98
+ 'align-items:center',
99
+ 'max-width:calc(100% - 20px)',
100
+ 'height:24px',
101
+ 'padding:0 9px',
102
+ 'border-radius:999px',
103
+ 'box-sizing:border-box',
104
+ 'background:rgba(15,23,42,0.68)',
105
+ 'color:#fff',
106
+ 'font:500 11px/1 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif',
107
+ 'text-decoration:none',
108
+ 'white-space:nowrap',
109
+ 'overflow:hidden',
110
+ 'text-overflow:ellipsis',
111
+ 'backdrop-filter:blur(8px)',
112
+ 'box-shadow:0 6px 18px rgba(15,23,42,0.18)',
113
+ ].join(';');
114
+ };
115
+ export const resolveFileViewerBrandingPresentationState = (branding, now = Date.now()) => {
116
+ var _a, _b, _c;
117
+ const normalized = normalizeBrandingOptions(branding);
118
+ const licenseValid = !!normalized && isFileViewerBrandRemovalLicense(normalized.license, now);
119
+ const visible = !!normalized && (normalized.enabled !== false || !licenseValid);
120
+ return {
121
+ visible,
122
+ licenseValid,
123
+ text: ((_a = normalized === null || normalized === void 0 ? void 0 : normalized.text) === null || _a === void 0 ? void 0 : _a.trim()) || DEFAULT_BRANDING_TEXT,
124
+ href: ((_b = normalized === null || normalized === void 0 ? void 0 : normalized.href) === null || _b === void 0 ? void 0 : _b.trim()) || DEFAULT_BRANDING_HREF,
125
+ title: ((_c = normalized === null || normalized === void 0 ? void 0 : normalized.title) === null || _c === void 0 ? void 0 : _c.trim()) || DEFAULT_BRANDING_TITLE,
126
+ inlineStyle: visible ? buildFileViewerBrandingInlineStyle(normalized || undefined) : '',
127
+ };
128
+ };
@@ -7,7 +7,7 @@ export { FILE_VIEWER_BEFORE_OPERATION_ERROR_PREFIX, DEFAULT_FILE_VIEWER_TOOLBAR_
7
7
  export { FILE_VIEWER_BUILTIN_MESSAGES, FILE_VIEWER_DEFAULT_LOCALE, FILE_VIEWER_FALLBACK_LOCALE, createFileViewerTranslator, formatFileViewerMessage, normalizeFileViewerLocale, resolveFileViewerLocale, translateFileViewerMessage, } from './i18n/messages';
8
8
  export type { FileViewerI18nInput, FileViewerResolvedLocale, ResolveFileViewerI18nInput, } from './i18n/messages';
9
9
  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';
10
- export { getFileViewerOptionsSearchParam, normalizeFileViewerTheme, parseFileViewerOptions, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options';
10
+ export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options';
11
11
  export type { FileViewerSerializableCadOptions, FileViewerSerializableOptions, FileViewerSerializableToolbarOptions, } from './config/options';
12
12
  export { resolveFileViewerPresentationState, } from './presentation/state';
13
13
  export type { FileViewerPresentationState, ResolveFileViewerPresentationStateInput, } from './presentation/state';
@@ -22,6 +22,8 @@ export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_
22
22
  export type { CancelFileViewerPreviewRequestInput, CommitFileViewerEmptyPreviewResetStateInput, CommitFileViewerLoadStartStateInput, CommitFileViewerPreviewRequestStartStateInput, CommitFileViewerRenderCompleteStateInput, CommitFileViewerRemoteDownloadStateInput, CreateFileViewerLoadStartStateInput, CreateFileViewerPreviewStateTargetInput, CreateFileViewerReadPreviewStateInput, CreateFileViewerRenderCompleteStateInput, CreateFileViewerSourceLoadingActionHandlersInput, FileViewerEmptyPreviewState, FileViewerFileRefSourcePlan, FileViewerLocalFilePreviewState, FileViewerLoadStartState, FileViewerLocationLike, FileViewerMutableAccessor, FileViewerPreviewComponentUnmountState, FileViewerPreviewLoadErrorKind, FileViewerPreviewLoadErrorLogger, FileViewerPreviewLoadErrorPrefixes, FileViewerPreviewRequestResetState, FileViewerPreviewRequestRunState, FileViewerReadAndRenderFileState, FileViewerReadPreviewState, FileViewerRemoteDownloadState, FileViewerRemoteFileDownloadInput, FileViewerRemoteFilePreviewErrorKind, FileViewerRemoteFilePreviewState, FileViewerRemoteSourcePlan, FileViewerRenderCompleteState, FileViewerRenderReadinessState, FileViewerRequestController, FileViewerRequestScope, FileViewerSourceLoadingActionHandlers, FileViewerStreamingPdfPreviewState, FinalizeFileViewerPreviewLoadStateInput, MutableFileViewerPreviewFilenameState, MutableFileViewerPreviewRequestState, MutableFileViewerPreviewSourceUrlState, MutableFileViewerPreviewState, MutableFileViewerReadPreviewState, MutableFileViewerRenderReadinessState, ReportFileViewerMissingRemoteDataInput, ReportFileViewerPreviewLoadErrorInput, ResolveFileViewerFileRefSourcePlanInput, ResolveFileViewerMissingRemoteDataErrorMessageInput, ResolveFileViewerPreviewLoadErrorMessageInput, ResolveFileViewerPreviewRequestReasonInput, RunFileViewerLocalFilePreviewInput, RunFileViewerPreviewComponentUnmountInput, RunFileViewerPreviewRequestInput, RunFileViewerPreviewSourceChangeInput, RunFileViewerReadAndRenderFileInput, RunFileViewerRemoteFilePreviewInput, RunFileViewerStreamingPdfPreviewInput, } from './source/loading';
23
23
  export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, } from './viewer/state';
24
24
  export type { FileViewerErrorMessageFormatter, } from './viewer/state';
25
+ export { FILE_VIEWER_BRAND_LICENSE_FORMAT, FILE_VIEWER_BRAND_LICENSE_KIND, FILE_VIEWER_BRAND_LICENSE_PERMISSION, FILE_VIEWER_BRAND_LICENSE_PRODUCT, FILE_VIEWER_BRAND_LICENSE_PROJECT, buildFileViewerBrandingInlineStyle, isFileViewerBrandRemovalLicense, resolveFileViewerBrandingPresentationState, } from './features/branding';
26
+ export type { FileViewerBrandingPresentationState, } from './features/branding';
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, 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, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, 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, FileViewerBrandingOptions, FileViewerBrandingPosition, FileViewerBrandLicenseBundle, FileViewerBrandLicenseCertificate, FileViewerBrandLicenseInput, 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, 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
@@ -9,7 +9,7 @@ export { DEFAULT_FILE_VIEWER_TEXT_CHUNK_OVERLAP, DEFAULT_FILE_VIEWER_TEXT_CHUNK_
9
9
  export { ARCHIVE_EXTENSIONS, DEFAULT_RENDERER_DEFINITIONS, DEFAULT_SUPPORTED_EXTENSIONS, IMAGE_EXTENSIONS, MODEL_EXTENSIONS, TEXT_EXTENSIONS, } from './registry/formats.js';
10
10
  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
11
  export { FILE_VIEWER_BUILTIN_MESSAGES, FILE_VIEWER_DEFAULT_LOCALE, FILE_VIEWER_FALLBACK_LOCALE, createFileViewerTranslator, formatFileViewerMessage, normalizeFileViewerLocale, resolveFileViewerLocale, translateFileViewerMessage, } from './i18n/messages.js';
12
- export { getFileViewerOptionsSearchParam, normalizeFileViewerTheme, parseFileViewerOptions, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options.js';
12
+ export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options.js';
13
13
  export { resolveFileViewerPresentationState, } from './presentation/state.js';
14
14
  export { createRendererRegistry, } from './registry/registry.js';
15
15
  export { createFileViewerRendererDispatcher, } from './rendering/dispatcher.js';
@@ -17,4 +17,5 @@ export { buildFileRenderContextFromLoadContext, createFileRenderHandlerRegistry,
17
17
  export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, normalizeSource, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, resolveFileViewerSourceFilename, wrapFileViewerFileRef, } from './source/index.js';
18
18
  export { cancelFileViewerPreviewRequest, DEFAULT_FILE_VIEWER_PREVIEW_LOAD_ERROR_LOGGER, DEFAULT_FILE_VIEWER_STREAMING_PDF_FILENAME, DEFAULT_PDF_RANGE_CHUNK_SIZE, FILE_VIEWER_PREVIEW_LOAD_ERROR_PREFIXES, FILE_VIEWER_REMOTE_MISSING_DATA_ERROR_MESSAGE, applyFileViewerEmptyPreviewState, applyFileViewerPreviewFilenameState, applyFileViewerPreviewRequestResetState, applyFileViewerPreviewSourceUrlState, applyFileViewerReadPreviewState, applyFileViewerRenderReadinessState, commitFileViewerEmptyPreviewResetState, commitFileViewerLoadStartState, commitFileViewerPreviewRequestStartState, commitFileViewerRemoteDownloadState, createFileViewerEmptyPreviewState, createFileViewerLoadStartState, createFileViewerPreviewRequestResetState, createFileViewerPreviewStateTarget, createFileViewerReadPreviewState, createFileViewerRenderCompleteState, createFileViewerRequestController, createFileViewerRequestScope, createFileViewerSourceLoadingActionHandlers, createFileViewerStreamingPdfPlaceholderFile, finalizeFileViewerPreviewLoadState, hasFileViewerPreviewSource, isFileViewerAbortError, isSameOriginUrl, normalizeFileViewerSourceUrl, normalizePdfStreamingMode, reportFileViewerMissingRemoteData, reportFileViewerPreviewLoadError, resolveFileViewerFileRefSourcePlan, resolveFileViewerLoadStartMessage, resolveFileViewerMissingRemoteDataErrorMessage, resolveFileViewerPageHref, resolveFileViewerPreviewLoadErrorMessage, resolveFileViewerPreviewRequestReason, resolveFileViewerRemoteSourcePlan, runFileViewerLocalFilePreview, runFileViewerPreviewComponentUnmount, runFileViewerPreviewRequest, runFileViewerPreviewSourceChange, runFileViewerRemoteFilePreview, runFileViewerReadAndRenderFile, runFileViewerStreamingPdfPreview, shouldStreamPdfUrl, } from './source/loading.js';
19
19
  export { DEFAULT_FILE_VIEWER_STATE_THEME, DEFAULT_FILE_VIEWER_UNSUPPORTED_DESCRIPTION, FILE_VIEWER_PREVIEW_MESSAGES, createFileViewerEmptyState, createFileViewerErrorState, createFileViewerPreviewLoadingState, createFileViewerReadyState, createFileViewerUnsupportedState, formatFileViewerErrorMessage, normalizeFileViewerErrorMessage, } from './viewer/state.js';
20
+ export { FILE_VIEWER_BRAND_LICENSE_FORMAT, FILE_VIEWER_BRAND_LICENSE_KIND, FILE_VIEWER_BRAND_LICENSE_PERMISSION, FILE_VIEWER_BRAND_LICENSE_PRODUCT, FILE_VIEWER_BRAND_LICENSE_PROJECT, buildFileViewerBrandingInlineStyle, isFileViewerBrandRemovalLicense, resolveFileViewerBrandingPresentationState, } from './features/branding.js';
20
21
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark.js';
package/dist/index.d.ts CHANGED
@@ -55,7 +55,7 @@ export { FALLBACK_FILE_VIEWER_LOADING_THEME, FILE_VIEWER_LOADING_THEME_MAP, appl
55
55
  export type { FileViewerLoadingController, FileViewerLoadingControllerActionHandlers, RunFileViewerLoadingExtensionSyncInput, } from './viewer/loading';
56
56
  export { createFileViewerLifecycleFacade, } from './lifecycle/facade';
57
57
  export type { BuildFileViewerLifecycleFacadeLoadStartStateInput, BuildFileViewerLifecycleFacadeRenderCompleteStateInput, CreateFileViewerLifecycleFacadeInput, FileViewerLifecycleFacade, } from './lifecycle/facade';
58
- export { getFileViewerOptionsSearchParam, normalizeFileViewerTheme, parseFileViewerOptions, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options';
58
+ export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options';
59
59
  export { resolveFileViewerPresentationState, } from './presentation/state';
60
60
  export type { FileViewerPresentationState, ResolveFileViewerPresentationStateInput, } from './presentation/state';
61
61
  export { createFileViewerRendererDispatcher, } from './rendering/dispatcher';
@@ -65,6 +65,8 @@ export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, decodeFilename, getExtension, norm
65
65
  export type { FileViewerReadResult } from './source';
66
66
  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';
67
67
  export type { FileViewerErrorMessageFormatter, FileViewerRendererInstallHint, } from './viewer/state';
68
+ export { FILE_VIEWER_BRAND_LICENSE_FORMAT, FILE_VIEWER_BRAND_LICENSE_KIND, FILE_VIEWER_BRAND_LICENSE_PERMISSION, FILE_VIEWER_BRAND_LICENSE_PRODUCT, FILE_VIEWER_BRAND_LICENSE_PROJECT, buildFileViewerBrandingInlineStyle, isFileViewerBrandRemovalLicense, resolveFileViewerBrandingPresentationState, } from './features/branding';
69
+ export type { FileViewerBrandingPresentationState, } from './features/branding';
68
70
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark';
69
71
  export type { FileViewerWatermarkPresentationState, FileViewerWatermarkStyle, } from './features/watermark';
70
72
  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';
@@ -85,4 +87,4 @@ export type { CreateFileViewerZoomControllerOptions, FileViewerZoomOperation, }
85
87
  export type { CreateViewerOptions } from './viewer/createViewer';
86
88
  export type { BuildExportHtmlDocumentOptions, BuildFileViewerRenderedHtmlDocumentOptions, } from './output/export';
87
89
  export type { CreateFileViewerWorkerControllerOptions, FileViewerWorkerContext, FileViewerWorkerController, FileViewerWorkerErrorHook, FileViewerWorkerEventHandler, FileViewerWorkerFactory, FileViewerWorkerMessageHook, WorkerProvider, WorkerRef, } from './platform/worker';
88
- export type { FileViewerAiOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, FileViewerThemeMode, FileViewerToolbarActionMap, FileViewerToolbarItem, FileViewerToolbarOptions, FileViewerToolbarPosition, FileViewerResolvedToolbarItem, 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';
90
+ export type { FileViewerAiOptions, FileViewerArchiveEntryActionContext, FileViewerArchiveEntryActionPolicy, FileViewerArchiveEntryActionsOptions, FileViewerArchivePasswordRequestContext, FileViewerArchivePasswordRequestReason, FileViewerArchiveOptions, FileViewerApplyViewStateOptions, FileViewerBeforeOperation, FileViewerBrandingOptions, FileViewerBrandingPosition, FileViewerBrandLicenseBundle, FileViewerBrandLicenseCertificate, FileViewerBrandLicenseInput, FileViewerCadDwfLineWeightMode, FileViewerCadOptions, FileViewerCadRenderer, FileViewerComponentEmits, FileViewerComponentEventMap, FileViewerComponentProps, FileViewerDocumentAnchor, FileViewerDocumentChunk, FileViewerDownloadOptions, FileViewerDocxOptions, FileViewerDrawingOptions, FileViewerEvent, FileViewerEventHandler, FileViewerEventType, FileViewerExportHtmlOptions, FileViewerFileRef, FileViewerFitMode, FileViewerFitOptions, FileViewerFitRequest, FileViewerFitResize, FileViewerFitResult, FileViewerGeoBasemapOptions, FileViewerGeoBasemapPreset, FileViewerGeoOptions, FileRenderContext, FileRenderExportAdapter, FileRenderExportMode, FileRenderExportOptions, FileRenderHandler, FileRenderHandlerComposite, FileViewerBuiltinRendererPreset, FileViewerInstance, FileViewerLifecycleContext, FileViewerLifecycleHooks, FileViewerLifecyclePhase, FileViewerI18nOptions, FileViewerLocale, FileViewerMessageKey, FileViewerMessageParams, FileViewerMessageResolver, FileViewerMessages, FileViewerNavigationState, FileViewerOperationAvailability, FileViewerOperationContext, FileViewerOperationType, FileViewerOptions, FileViewerPdfOptions, FileViewerPresentationOptions, FileViewerPrintOptions, FileViewerPublicApi, FileViewerRenderedInstance, FileViewerRendererMode, FileViewerRendererPluginAssetKind, FileViewerRendererPluginAssetManifest, FileViewerRendererPluginAssetEntry, FileViewerRenderStateKind, FileViewerRendererCategory, FileViewerRendererHandlerRegistration, FileViewerRendererInstallContext, FileViewerRendererPlugin, FileViewerRendererPluginInput, FileViewerRendererPresetInput, FileViewerRendererPresetName, FileViewerRendererPreset, FileViewerSearchMatch, FileViewerSearchOptions, FileViewerSearchProvider, FileViewerSearchState, FileViewerSource, FileViewerSourceKind, FileViewerSpreadsheetOptions, FileViewerStateDescriptor, FileViewerStateTheme, FileViewerStyleIsolation, 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
@@ -166,12 +166,13 @@ export { ADAPTER_PRINT_REQUIRED_EXTENSIONS, applyFileViewerZoomAvailability, cre
166
166
  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';
167
167
  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';
168
168
  export { createFileViewerLifecycleFacade, } from './lifecycle/facade.js';
169
- export { getFileViewerOptionsSearchParam, normalizeFileViewerTheme, parseFileViewerOptions, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options.js';
169
+ export { getFileViewerOptionsSearchParam, normalizeFileViewerUiDensity, normalizeFileViewerTheme, parseFileViewerOptions, resolveFileViewerUiDensity, sanitizeFileViewerOptions, serializeFileViewerOptions, setFileViewerOptionsSearchParam, } from './config/options.js';
170
170
  export { resolveFileViewerPresentationState, } from './presentation/state.js';
171
171
  export { createFileViewerRendererDispatcher, } from './rendering/dispatcher.js';
172
172
  export { appendFileViewerStyle, buildFileRenderContextFromLoadContext, applyFileViewerRenderSurfaceState, clearFileViewerRenderSurface, createFileRenderHandlerRendererSession, createFileRenderHandlerRegistry, createFileRenderHandlerLoader, createFileViewerRenderSurfaceActionHandlers, createFileViewerRenderReadinessTarget, createFileViewerRenderSurface, createFileViewerRenderSurfaceState, createFileViewerRenderSurfaceStateTarget, createFileViewerRenderTarget, DEFAULT_FILE_VIEWER_RENDER_TARGET_CLASS, DEFAULT_FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_LOGGER, FILE_VIEWER_RENDER_SESSION_DISPOSE_ERROR_MESSAGE, disposeActiveFileViewerRendererSession, disposeFileViewerRendered, disposeFileViewerRendererSession, getFileViewerShadowRootForNode, isFileViewerShadowRoot, normalizeFileViewerStyleIsolation, removeFileViewerRenderTarget, reportFileViewerRenderSessionDisposeError, resetFileViewerRenderSurface, resolveFileViewerStyleIsolation, resolveFileViewerRenderSessionDisposeErrorMessage, runFileViewerRenderSurfaceClear, runFileViewerRenderSurfaceMount, renderFileViewerHandler, } from './rendering/handler.js';
173
173
  export { DEFAULT_FILE_VIEWER_SOURCE_FILENAME, decodeFilename, getExtension, normalizeFileExtension, normalizeFilename, resolveFileViewerSourceFilename, normalizeSource, readFileViewerBuffer, readFileViewerDataUrl, readFileViewerText, wrapFileViewerFileRef, } from './source/index.js';
174
174
  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
+ export { FILE_VIEWER_BRAND_LICENSE_FORMAT, FILE_VIEWER_BRAND_LICENSE_KIND, FILE_VIEWER_BRAND_LICENSE_PERMISSION, FILE_VIEWER_BRAND_LICENSE_PRODUCT, FILE_VIEWER_BRAND_LICENSE_PROJECT, buildFileViewerBrandingInlineStyle, isFileViewerBrandRemovalLicense, resolveFileViewerBrandingPresentationState, } from './features/branding.js';
175
176
  export { buildFileViewerWatermarkBackgroundImage, buildFileViewerWatermarkInlineStyle, buildFileViewerWatermarkStyle, buildFileViewerWatermarkSvg, normalizeFileViewerWatermark, resolveFileViewerWatermarkPresentationState, } from './features/watermark.js';
176
177
  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';
177
178
  export { createViewer } from './viewer/createViewer.js';
@@ -1,4 +1,4 @@
1
- import type { FileViewerFileRef, FileViewerOptions, FileViewerThemeMode, FileViewerToolbarOptions } from '../contracts/types';
1
+ import type { FileViewerFileRef, FileViewerOptions, FileViewerThemeMode, FileViewerToolbarOptions, FileViewerUiDensity } from '../contracts/types';
2
2
  export interface ResolveFileViewerPresentationStateInput {
3
3
  filename?: string;
4
4
  file?: FileViewerFileRef;
@@ -10,5 +10,6 @@ export interface FileViewerPresentationState {
10
10
  extension: string;
11
11
  toolbar: FileViewerToolbarOptions;
12
12
  theme: FileViewerThemeMode;
13
+ density: FileViewerUiDensity;
13
14
  }
14
15
  export declare const resolveFileViewerPresentationState: ({ filename, file, url, options, }: ResolveFileViewerPresentationStateInput) => FileViewerPresentationState;
@@ -1,5 +1,5 @@
1
1
  import { normalizeFileViewerToolbar } from '../lifecycle/operations.js';
2
- import { normalizeFileViewerTheme } from '../config/options.js';
2
+ import { normalizeFileViewerTheme, resolveFileViewerUiDensity } from '../config/options.js';
3
3
  import { getExtension, resolveFileViewerSourceFilename } from '../source/index.js';
4
4
  export const resolveFileViewerPresentationState = ({ filename, file, url, options, }) => {
5
5
  const displayFilename = resolveFileViewerSourceFilename({
@@ -12,5 +12,6 @@ export const resolveFileViewerPresentationState = ({ filename, file, url, option
12
12
  extension: getExtension(displayFilename),
13
13
  toolbar: normalizeFileViewerToolbar(options),
14
14
  theme: normalizeFileViewerTheme(options === null || options === void 0 ? void 0 : options.theme),
15
+ density: resolveFileViewerUiDensity(options),
15
16
  };
16
17
  };
@@ -17,6 +17,7 @@ import { createFileRenderHandlerLoader, applyFileViewerRenderSurfaceState, creat
17
17
  import { createFileViewerCoreRendererRegistry } from '../renderers/index.js';
18
18
  import { createFileViewerRequestScope } from '../source/loading.js';
19
19
  import { normalizeSource } from '../source/index.js';
20
+ import { resolveFileViewerBrandingPresentationState } from '../features/branding.js';
20
21
  import { buildFileViewerWatermarkInlineStyle } from '../features/watermark.js';
21
22
  import { createFileViewerUnsupportedState } from './state.js';
22
23
  const emitLifecycle = async (options, onEvent, phase, source, version, startedAt, reason) => {
@@ -107,6 +108,7 @@ export const createViewer = (container, createOptions = {}) => {
107
108
  let watermarkResizeObserver = null;
108
109
  let watermarkMutationObserver = null;
109
110
  let watermarkFrame = null;
111
+ let brandingEl = null;
110
112
  const getContainerWindow = () => container.ownerDocument.defaultView || (typeof window !== 'undefined' ? window : undefined);
111
113
  const cancelWatermarkFrame = () => {
112
114
  if (watermarkFrame === null) {
@@ -234,6 +236,40 @@ export const createViewer = (container, createOptions = {}) => {
234
236
  }
235
237
  startWatermarkObservers();
236
238
  };
239
+ const removeBrandingBadge = () => {
240
+ brandingEl === null || brandingEl === void 0 ? void 0 : brandingEl.remove();
241
+ brandingEl = null;
242
+ };
243
+ const syncBrandingBadge = () => {
244
+ const state = resolveFileViewerBrandingPresentationState(options.branding);
245
+ if (!state.visible) {
246
+ removeBrandingBadge();
247
+ return;
248
+ }
249
+ if (!brandingEl || brandingEl.ownerDocument !== container.ownerDocument) {
250
+ brandingEl = container.ownerDocument.createElement('a');
251
+ brandingEl.className = 'viewer-branding';
252
+ brandingEl.target = '_blank';
253
+ brandingEl.rel = 'noreferrer noopener';
254
+ }
255
+ if (state.href) {
256
+ brandingEl.href = state.href;
257
+ }
258
+ else {
259
+ brandingEl.removeAttribute('href');
260
+ }
261
+ brandingEl.textContent = state.text;
262
+ brandingEl.title = state.title;
263
+ brandingEl.setAttribute('aria-label', state.title);
264
+ brandingEl.style.cssText = state.inlineStyle;
265
+ const view = getContainerWindow();
266
+ if ((view === null || view === void 0 ? void 0 : view.getComputedStyle) && view.getComputedStyle(container).position === 'static' && !container.style.position) {
267
+ container.style.position = 'relative';
268
+ }
269
+ if (brandingEl.parentElement !== container) {
270
+ container.appendChild(brandingEl);
271
+ }
272
+ };
237
273
  const ensureRendererPluginsInstalled = async () => {
238
274
  const nextMode = options.rendererMode || 'extend';
239
275
  const nextRendererInput = options.renderers;
@@ -459,6 +495,7 @@ export const createViewer = (container, createOptions = {}) => {
459
495
  renderMissingRendererState(target, normalized.extension, options);
460
496
  applyFileViewerRenderSurfaceState(renderSurfaceState, { session: null });
461
497
  syncWatermarkOverlay();
498
+ syncBrandingBadge();
462
499
  emitZoomAndOperationAvailabilityChange();
463
500
  await emitLifecycle(options, createOptions.onEvent, 'load-complete', normalized, version, startedAt);
464
501
  return null;
@@ -491,6 +528,7 @@ export const createViewer = (container, createOptions = {}) => {
491
528
  }
492
529
  applyFileViewerRenderSurfaceState(renderSurfaceState, { session });
493
530
  syncWatermarkOverlay();
531
+ syncBrandingBadge();
494
532
  zoomController.refreshProvider();
495
533
  viewStateController.refreshProvider();
496
534
  await documentActions.refreshDocumentIndex({ notify: false });
@@ -511,6 +549,7 @@ export const createViewer = (container, createOptions = {}) => {
511
549
  viewStateController.destroy();
512
550
  fitController.destroy();
513
551
  removeWatermarkOverlay();
552
+ removeBrandingBadge();
514
553
  },
515
554
  updateOptions(nextOptions) {
516
555
  const previousFit = options.fit;
@@ -519,6 +558,7 @@ export const createViewer = (container, createOptions = {}) => {
519
558
  ...nextOptions,
520
559
  };
521
560
  syncWatermarkOverlay();
561
+ syncBrandingBadge();
522
562
  if ('fit' in nextOptions && nextOptions.fit !== previousFit) {
523
563
  fitController.resetAutoFit();
524
564
  fitController.scheduleFit('resize');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@file-viewer/core",
3
- "version": "2.1.19",
3
+ "version": "2.1.21",
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",