@rhc-office/sdk 6.6.259 → 6.6.266

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.
Files changed (48) hide show
  1. package/README.md +44 -5
  2. package/dist/api/callbacks.d.ts +0 -1
  3. package/dist/api/callbacks.d.ts.map +1 -1
  4. package/dist/api/crypto-tool.d.ts +12 -1
  5. package/dist/api/crypto-tool.d.ts.map +1 -1
  6. package/dist/api/document-sdk.d.ts +0 -10
  7. package/dist/api/document-sdk.d.ts.map +1 -1
  8. package/dist/api/sign-tool.d.ts +43 -1
  9. package/dist/api/sign-tool.d.ts.map +1 -1
  10. package/dist/browser/document-viewer.js +2 -0
  11. package/dist/browser/document-viewer.js.map +1 -0
  12. package/dist/browser.d.ts +33 -0
  13. package/dist/browser.d.ts.map +1 -0
  14. package/dist/index.d.ts +0 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +119 -148
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.umd.cjs +1 -1
  19. package/dist/index.umd.cjs.map +1 -1
  20. package/dist/viewer/DocumentSDK.d.ts +0 -7
  21. package/dist/viewer/DocumentSDK.d.ts.map +1 -1
  22. package/dist/viewer/ReaderConfiguration.d.ts +1 -1
  23. package/dist/viewer/ReaderConfiguration.d.ts.map +1 -1
  24. package/dist/viewer/ReaderStateStore.d.ts +0 -1
  25. package/dist/viewer/ReaderStateStore.d.ts.map +1 -1
  26. package/dist/viewer/SdkCallbackRegistry.d.ts +1 -2
  27. package/dist/viewer/SdkCallbackRegistry.d.ts.map +1 -1
  28. package/package.json +12 -2
  29. package/src/api/callbacks.ts +4 -17
  30. package/src/api/crypto-tool.ts +13 -1
  31. package/src/api/document-sdk.ts +0 -13
  32. package/src/api/sign-tool.ts +62 -1
  33. package/src/browser.ts +85 -0
  34. package/src/index.ts +0 -3
  35. package/src/viewer/DocumentSDK.ts +2 -45
  36. package/src/viewer/ReaderBridgeClient.ts +1 -1
  37. package/src/viewer/ReaderConfiguration.ts +2 -2
  38. package/src/viewer/ReaderStateStore.ts +0 -2
  39. package/src/viewer/SdkCallbackRegistry.ts +0 -9
  40. package/dist/api/ekey-tool.d.ts +0 -8
  41. package/dist/api/ekey-tool.d.ts.map +0 -1
  42. package/dist/api/extension-tool.d.ts +0 -5
  43. package/dist/api/extension-tool.d.ts.map +0 -1
  44. package/dist/api/review-tool.d.ts +0 -71
  45. package/dist/api/review-tool.d.ts.map +0 -1
  46. package/src/api/ekey-tool.ts +0 -11
  47. package/src/api/extension-tool.ts +0 -5
  48. package/src/api/review-tool.ts +0 -105
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/api/watermark.ts","../src/api/digital-sign-environment.ts","../src/viewer/BridgeToolAdapter.ts","../src/tools/DocumentToolImpl.ts","../src/tools/FindToolImpl.ts","../src/tools/NetworkingToolImpl.ts","../src/tools/PageToolImpl.ts","../src/tools/PdfFormFillerImpl.ts","../src/tools/SDKValueObjects.ts","../src/tools/UIToolImpl.ts","../src/viewer/ReaderConfiguration.ts","../src/viewer/ReaderScriptLoader.ts","../src/viewer/AdapterProtocol.ts","../src/viewer/ReaderBridgeClient.ts","../src/viewer/ReaderStateStore.ts","../src/viewer/SdkCallbackRegistry.ts","../src/viewer/DocumentSDK.ts"],"sourcesContent":["export interface IWatermarkTextStyle {\n size?: number;\n color?: string;\n compact?: boolean;\n rotation?: number;\n opacity?: number;\n\n hex(color: string): IWatermarkTextStyle;\n\n rgb(r: number, g: number, b: number): IWatermarkTextStyle;\n\n rgba(r: number, g: number, b: number, a: number): IWatermarkTextStyle;\n}\n\nexport enum WatermarkDisplay {\n DEFAULT = 'default',\n COMPACT = 'compact',\n HIDE = 'none',\n}\n\nexport interface IWatermark {\n text?: string;\n\n sparseRatio?: number;\n\n display?: WatermarkDisplay;\n\n config?: IWatermarkTextStyle;\n\n setDisplay(display: WatermarkDisplay): void;\n\n setText(text: string, style?: IWatermarkTextStyle): void;\n\n setSparseRatio(sparseRatio: number): void;\n}\n","export type SignServerAuthSource = 'Password' | 'USBKey' | 'KolKey' | 'Token';\nexport type DigitalSignRsaMode = 'auto' | 'rsa' | 'sm2';\nexport type SigningDeviceType = 'client' | 'bjca' | 'plugin' | 'kol' | 'hsm' | string;\nexport type EdgePosition =\n | 'LEFT_TOP'\n | 'LEFT_CENTER'\n | 'LEFT_BOTTOM'\n | 'RIGHT_TOP'\n | 'RIGHT_CENTER'\n | 'RIGHT_BOTTOM'\n | string;\nexport type SignatureType = 'REGULAR_ESM' | 'OFCRYPTO_ESM' | string;\n\nconst DEFAULT_EDGE_POSITION = 'RIGHT_CENTER' as EdgePosition;\nconst DEFAULT_SIGNATURE_TYPE = 'REGULAR_ESM' as SignatureType;\nconst DEFAULT_RSA_MODE: DigitalSignRsaMode = 'auto';\n\nexport interface DigitalSignSignServerConfig {\n authSource: SignServerAuthSource;\n defaultLogin: string;\n defaultPassword: string;\n defaultServer: string;\n kol: {\n appId: string;\n appName: string;\n serviceUrl: string;\n token: string;\n };\n macAddress: string;\n token: string;\n usbKey: {\n checkCertificateBinding: boolean;\n usbKeyType: number;\n };\n}\n\nexport interface DigitalSignDefaultsConfig {\n bjca: {\n pin: string;\n };\n deviceType: SigningDeviceType;\n edgePosition: EdgePosition;\n kol: {\n appId: string;\n appName: string;\n pin: string;\n serviceUrl: string;\n token: string;\n };\n plugin: {\n pin: string;\n usbKeyType: number;\n };\n rsaMode: DigitalSignRsaMode;\n signatureType: SignatureType;\n}\n\nexport interface DigitalSignEnvironmentConfig {\n defaults: DigitalSignDefaultsConfig;\n signServer: DigitalSignSignServerConfig;\n}\n\nexport interface DigitalSignDefaultsPatch {\n bjca?: {\n pin?: string;\n };\n deviceType?: SigningDeviceType;\n edgePosition?: EdgePosition;\n kol?: {\n appId?: string;\n appName?: string;\n pin?: string;\n serviceUrl?: string;\n token?: string;\n };\n plugin?: {\n pin?: string;\n usbKeyType?: number;\n };\n rsaMode?: DigitalSignRsaMode;\n signatureType?: SignatureType;\n}\n\nexport interface DigitalSignSignServerPatch {\n authSource?: SignServerAuthSource;\n defaultLogin?: string;\n defaultPassword?: string;\n defaultServer?: string;\n kol?: {\n appId?: string;\n appName?: string;\n serviceUrl?: string;\n token?: string;\n };\n macAddress?: string;\n token?: string;\n usbKey?: {\n checkCertificateBinding?: boolean;\n usbKeyType?: number;\n };\n}\n\nexport interface DigitalSignEnvironmentPatch {\n defaults?: DigitalSignDefaultsPatch;\n signServer?: DigitalSignSignServerPatch;\n}\n\ninterface DigitalSignEnvironmentRuntimeStore {\n current: DigitalSignEnvironmentConfig;\n defaults: DigitalSignEnvironmentConfig;\n overrides: DigitalSignEnvironmentPatch;\n}\n\nconst DIGITAL_SIGN_ENVIRONMENT_STORE_KEY = '__RHC_OFFICE_DIGITAL_SIGN_ENVIRONMENT__';\n\nconst EMPTY_DIGITAL_SIGN_ENVIRONMENT: DigitalSignEnvironmentConfig = {\n defaults: {\n bjca: {\n pin: '',\n },\n deviceType: 'client',\n edgePosition: DEFAULT_EDGE_POSITION,\n kol: {\n appId: '',\n appName: '',\n pin: '',\n serviceUrl: '',\n token: '',\n },\n plugin: {\n pin: '',\n usbKeyType: 14,\n },\n rsaMode: DEFAULT_RSA_MODE,\n signatureType: DEFAULT_SIGNATURE_TYPE,\n },\n signServer: {\n authSource: 'Password',\n defaultLogin: '',\n defaultPassword: '',\n defaultServer: '',\n kol: {\n appId: '',\n appName: '',\n serviceUrl: '',\n token: '',\n },\n macAddress: '',\n token: '',\n usbKey: {\n checkCertificateBinding: false,\n usbKeyType: 14,\n },\n },\n};\n\nconst cloneDefaultsConfig = (config: DigitalSignDefaultsConfig): DigitalSignDefaultsConfig => {\n return {\n bjca: {\n pin: config.bjca.pin,\n },\n deviceType: config.deviceType,\n edgePosition: config.edgePosition,\n kol: {\n appId: config.kol.appId,\n appName: config.kol.appName,\n pin: config.kol.pin,\n serviceUrl: config.kol.serviceUrl,\n token: config.kol.token,\n },\n plugin: {\n pin: config.plugin.pin,\n usbKeyType: config.plugin.usbKeyType,\n },\n rsaMode: config.rsaMode,\n signatureType: config.signatureType,\n };\n};\n\nconst cloneSignServerConfig = (\n config: DigitalSignSignServerConfig,\n): DigitalSignSignServerConfig => {\n return {\n authSource: config.authSource,\n defaultLogin: config.defaultLogin,\n defaultPassword: config.defaultPassword,\n defaultServer: config.defaultServer,\n kol: {\n appId: config.kol.appId,\n appName: config.kol.appName,\n serviceUrl: config.kol.serviceUrl,\n token: config.kol.token,\n },\n macAddress: config.macAddress,\n token: config.token,\n usbKey: {\n checkCertificateBinding: config.usbKey.checkCertificateBinding,\n usbKeyType: config.usbKey.usbKeyType,\n },\n };\n};\n\nconst cloneEnvironmentConfig = (\n config: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n return {\n defaults: cloneDefaultsConfig(config.defaults),\n signServer: cloneSignServerConfig(config.signServer),\n };\n};\n\nconst cloneEnvironmentPatch = (patch: DigitalSignEnvironmentPatch): DigitalSignEnvironmentPatch => {\n return {\n defaults: patch.defaults\n ? {\n ...patch.defaults,\n bjca: patch.defaults.bjca ? { ...patch.defaults.bjca } : undefined,\n kol: patch.defaults.kol ? { ...patch.defaults.kol } : undefined,\n plugin: patch.defaults.plugin ? { ...patch.defaults.plugin } : undefined,\n }\n : undefined,\n signServer: patch.signServer\n ? {\n ...patch.signServer,\n kol: patch.signServer.kol ? { ...patch.signServer.kol } : undefined,\n usbKey: patch.signServer.usbKey ? { ...patch.signServer.usbKey } : undefined,\n }\n : undefined,\n };\n};\n\nconst mergeDefaultsPatch = (\n base: DigitalSignDefaultsConfig,\n patch?: DigitalSignEnvironmentPatch['defaults'],\n): DigitalSignDefaultsConfig => {\n if (!patch) {\n return cloneDefaultsConfig(base);\n }\n\n return {\n bjca: {\n pin: patch.bjca?.pin ?? base.bjca.pin,\n },\n deviceType: patch.deviceType ?? base.deviceType,\n edgePosition: patch.edgePosition ?? base.edgePosition,\n kol: {\n appId: patch.kol?.appId ?? base.kol.appId,\n appName: patch.kol?.appName ?? base.kol.appName,\n pin: patch.kol?.pin ?? base.kol.pin,\n serviceUrl: patch.kol?.serviceUrl ?? base.kol.serviceUrl,\n token: patch.kol?.token ?? base.kol.token,\n },\n plugin: {\n pin: patch.plugin?.pin ?? base.plugin.pin,\n usbKeyType: patch.plugin?.usbKeyType ?? base.plugin.usbKeyType,\n },\n rsaMode: patch.rsaMode ?? base.rsaMode,\n signatureType: patch.signatureType ?? base.signatureType,\n };\n};\n\nconst mergeSignServerPatch = (\n base: DigitalSignSignServerConfig,\n patch?: DigitalSignEnvironmentPatch['signServer'],\n): DigitalSignSignServerConfig => {\n if (!patch) {\n return cloneSignServerConfig(base);\n }\n\n return {\n authSource: patch.authSource ?? base.authSource,\n defaultLogin: patch.defaultLogin ?? base.defaultLogin,\n defaultPassword: patch.defaultPassword ?? base.defaultPassword,\n defaultServer: patch.defaultServer ?? base.defaultServer,\n kol: {\n appId: patch.kol?.appId ?? base.kol.appId,\n appName: patch.kol?.appName ?? base.kol.appName,\n serviceUrl: patch.kol?.serviceUrl ?? base.kol.serviceUrl,\n token: patch.kol?.token ?? base.kol.token,\n },\n macAddress: patch.macAddress ?? base.macAddress,\n token: patch.token ?? base.token,\n usbKey: {\n checkCertificateBinding:\n patch.usbKey?.checkCertificateBinding ?? base.usbKey.checkCertificateBinding,\n usbKeyType: patch.usbKey?.usbKeyType ?? base.usbKey.usbKeyType,\n },\n };\n};\n\nconst mergeEnvironmentPatch = (\n base: DigitalSignEnvironmentConfig,\n patch: DigitalSignEnvironmentPatch,\n): DigitalSignEnvironmentConfig => {\n return {\n defaults: mergeDefaultsPatch(base.defaults, patch.defaults),\n signServer: mergeSignServerPatch(base.signServer, patch.signServer),\n };\n};\n\nconst mergeEnvironmentPatchState = (\n base: DigitalSignEnvironmentPatch,\n patch: DigitalSignEnvironmentPatch,\n): DigitalSignEnvironmentPatch => {\n return {\n defaults:\n base.defaults || patch.defaults\n ? {\n ...base.defaults,\n ...patch.defaults,\n bjca: {\n ...(base.defaults?.bjca ?? {}),\n ...(patch.defaults?.bjca ?? {}),\n },\n kol: {\n ...(base.defaults?.kol ?? {}),\n ...(patch.defaults?.kol ?? {}),\n },\n plugin: {\n ...(base.defaults?.plugin ?? {}),\n ...(patch.defaults?.plugin ?? {}),\n },\n }\n : undefined,\n signServer:\n base.signServer || patch.signServer\n ? {\n ...base.signServer,\n ...patch.signServer,\n kol: {\n ...(base.signServer?.kol ?? {}),\n ...(patch.signServer?.kol ?? {}),\n },\n usbKey: {\n ...(base.signServer?.usbKey ?? {}),\n ...(patch.signServer?.usbKey ?? {}),\n },\n }\n : undefined,\n };\n};\n\nconst getGlobalScope = (): typeof globalThis & {\n [DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]?: DigitalSignEnvironmentRuntimeStore;\n} => {\n return globalThis as typeof globalThis & {\n [DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]?: DigitalSignEnvironmentRuntimeStore;\n };\n};\n\nconst resolveRuntimeStore = (): DigitalSignEnvironmentRuntimeStore => {\n const globalScope = getGlobalScope();\n if (!globalScope[DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]) {\n globalScope[DIGITAL_SIGN_ENVIRONMENT_STORE_KEY] = {\n current: cloneEnvironmentConfig(EMPTY_DIGITAL_SIGN_ENVIRONMENT),\n defaults: cloneEnvironmentConfig(EMPTY_DIGITAL_SIGN_ENVIRONMENT),\n overrides: {},\n };\n }\n\n return globalScope[DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]!;\n};\n\nexport const getDigitalSignEnvironment = (): DigitalSignEnvironmentConfig => {\n return resolveRuntimeStore().current;\n};\n\nexport const initializeDigitalSignEnvironment = (\n defaults: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n store.defaults = cloneEnvironmentConfig(defaults);\n store.current = mergeEnvironmentPatch(store.defaults, store.overrides);\n return store.current;\n};\n\nexport const setDigitalSignEnvironment = (\n config: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n store.current = cloneEnvironmentConfig(config);\n store.overrides = cloneEnvironmentPatch(config);\n return store.current;\n};\n\nexport const patchDigitalSignEnvironment = (\n patch: DigitalSignEnvironmentPatch,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n store.overrides = mergeEnvironmentPatchState(store.overrides, cloneEnvironmentPatch(patch));\n store.current = mergeEnvironmentPatch(store.current, patch);\n return store.current;\n};\n\nexport const resetDigitalSignEnvironment = (\n defaults?: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n if (defaults) {\n store.defaults = cloneEnvironmentConfig(defaults);\n }\n store.overrides = {};\n store.current = cloneEnvironmentConfig(store.defaults);\n return store.current;\n};\n\nexport const DIGITAL_SIGN_DEFAULTS = {\n EDGE_POSITION: DEFAULT_EDGE_POSITION,\n RSA_MODE: DEFAULT_RSA_MODE,\n SIGNATURE_TYPE: DEFAULT_SIGNATURE_TYPE,\n} as const;\n","import type { AdapterToolName } from './AdapterProtocol';\nimport type { ReaderBridgeClient } from './ReaderBridgeClient';\nimport type { SdkCallbackRegistry } from './SdkCallbackRegistry';\nimport type { ReaderStateStore } from './ReaderStateStore';\n\nexport type BridgeMethodKind =\n | 'callbackQuery'\n | 'callbackRegister'\n | 'command'\n | 'query'\n | 'stateGetter';\n\nexport interface BridgeToolMethodDescriptor {\n adapterMethod?: string;\n callback?: (callbacks: SdkCallbackRegistry, args: unknown[]) => void;\n mapCallbackResult?: (result: unknown) => unknown[];\n kind: BridgeMethodKind;\n state?: (state: ReturnType<ReaderStateStore['snapshot']>, args: unknown[]) => unknown;\n}\n\nexport type BridgeToolDescriptor = Record<string, BridgeToolMethodDescriptor>;\n\nexport interface BridgeToolAdapterContext {\n bridge: ReaderBridgeClient;\n callbacks: SdkCallbackRegistry;\n debug: () => boolean;\n onAsyncError: (error: unknown) => void;\n state: ReaderStateStore;\n}\n\nconst normalizeParams = (args: unknown[]): unknown => {\n if (args.length === 0) {\n return undefined;\n }\n\n if (args.length === 1) {\n return args[0];\n }\n\n return args;\n};\n\nexport const createBridgeToolAdapter = <T extends object>(\n tool: AdapterToolName,\n descriptor: BridgeToolDescriptor,\n context: BridgeToolAdapterContext,\n): T => {\n return new Proxy(\n {},\n {\n get: (_target, property): unknown => {\n if (property === 'then') {\n return undefined;\n }\n\n if (typeof property === 'symbol') {\n if (property === Symbol.toStringTag) {\n return tool;\n }\n\n return undefined;\n }\n\n const methodDescriptor = descriptor[property];\n if (!methodDescriptor) {\n return (..._args: unknown[]) => {\n const error = new Error(`${tool}.${property} is not implemented by the SDK adapter.`);\n context.onAsyncError(error);\n };\n }\n\n return (...args: unknown[]) => {\n if (methodDescriptor.kind === 'callbackRegister') {\n methodDescriptor.callback?.(context.callbacks, args);\n return undefined;\n }\n\n if (methodDescriptor.kind === 'stateGetter') {\n return methodDescriptor.state?.(context.state.snapshot(), args);\n }\n\n const adapterMethod = methodDescriptor.adapterMethod ?? property;\n\n if (methodDescriptor.kind === 'query') {\n return context.bridge.request(tool, adapterMethod, normalizeParams(args));\n }\n\n if (methodDescriptor.kind === 'callbackQuery') {\n const callback = args.find((arg) => typeof arg === 'function') as\n | ((...values: unknown[]) => void)\n | undefined;\n const params = args.filter((arg) => typeof arg !== 'function');\n void context.bridge\n .request(tool, adapterMethod, normalizeParams(params))\n .then((result) => {\n const callbackArgs = methodDescriptor.mapCallbackResult?.(result) ?? [result];\n callback?.(...callbackArgs);\n })\n .catch(context.onAsyncError);\n return undefined;\n }\n\n void context.bridge\n .request(tool, adapterMethod, normalizeParams(args))\n .catch(context.onAsyncError);\n return undefined;\n };\n },\n },\n ) as T;\n};\n\nexport const createNotImplementedBridgeTool = <T extends object>(\n tool: AdapterToolName,\n context: BridgeToolAdapterContext,\n): T => {\n return new Proxy(\n {},\n {\n get: (_target, property): unknown => {\n if (property === 'then') {\n return undefined;\n }\n\n if (typeof property === 'symbol') {\n return undefined;\n }\n\n return (..._args: unknown[]) => {\n const message = `${tool}.${property} is not implemented by the SDK adapter.`;\n context.onAsyncError(new Error(message));\n return undefined;\n };\n },\n },\n ) as T;\n};\n","import type { DocumentClosedCallback, DocumentSavedCallback } from '../api/callbacks';\nimport type { DocumentTool } from '../api/document-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst DOCUMENT_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n addDocumentOpenedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.documentOpened.push(callback as (status: string, error: string) => void);\n }\n },\n },\n addDocumentSavedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.documentSaved.push(callback as DocumentSavedCallback);\n }\n },\n },\n addDocumentClosedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.documentClosed.push(callback as DocumentClosedCallback);\n }\n },\n },\n openPDFDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openPdfDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openOFDDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openOfdDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openOfficeDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openImageDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openTextDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openFromLocalStorage: { kind: 'command' },\n setUploadUrl: { kind: 'command' },\n save: { kind: 'callbackQuery' },\n saveAs: { kind: 'query' },\n getDocumentContent: {\n kind: 'callbackQuery',\n mapCallbackResult: (result) => {\n const content = result as { fileCacheId?: string; fileBuffer?: ArrayBuffer };\n return [content?.fileCacheId, content?.fileBuffer];\n },\n },\n closeDocument: { kind: 'callbackQuery' },\n isDocumentOpened: {\n kind: 'stateGetter',\n state: (state) => state.documentOpened,\n },\n isDocumentModified: {\n kind: 'stateGetter',\n state: (state) => state.documentModified,\n },\n print: { kind: 'command' },\n createPreview: { kind: 'command' },\n};\n\nexport class DocumentToolImpl implements DocumentTool {\n private readonly adapter: DocumentTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<DocumentTool>(\n 'document',\n DOCUMENT_TOOL_DESCRIPTOR,\n context,\n );\n }\n\n addDocumentOpenedCallback: DocumentTool['addDocumentOpenedCallback'] = (callback) => {\n return this.adapter.addDocumentOpenedCallback(callback);\n };\n\n addDocumentSavedCallback: DocumentTool['addDocumentSavedCallback'] = (callback) => {\n return this.adapter.addDocumentSavedCallback(callback);\n };\n\n addDocumentClosedCallback: DocumentTool['addDocumentClosedCallback'] = (callback) => {\n return this.adapter.addDocumentClosedCallback(callback);\n };\n\n openPDFDocument: DocumentTool['openPDFDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openPDFDocument(options, onDocumentOpened);\n };\n\n openPdfDocument: DocumentTool['openPdfDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openPdfDocument(options, onDocumentOpened);\n };\n\n openOFDDocument: DocumentTool['openOFDDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openOFDDocument(options, onDocumentOpened);\n };\n\n openOfdDocument: DocumentTool['openOfdDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openOfdDocument(options, onDocumentOpened);\n };\n\n openOfficeDocument: DocumentTool['openOfficeDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openOfficeDocument(options, onDocumentOpened);\n };\n\n openImageDocument: DocumentTool['openImageDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openImageDocument(options, onDocumentOpened);\n };\n\n openTextDocument: DocumentTool['openTextDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openTextDocument(options, onDocumentOpened);\n };\n\n openFromLocalStorage: DocumentTool['openFromLocalStorage'] = () => {\n return this.adapter.openFromLocalStorage();\n };\n\n setUploadUrl: DocumentTool['setUploadUrl'] = (uploadUrl) => {\n return this.adapter.setUploadUrl(uploadUrl);\n };\n\n save: DocumentTool['save'] = (uploadUrl, onSavedCallback, options) => {\n return this.adapter.save(uploadUrl, onSavedCallback, options);\n };\n\n saveAs: DocumentTool['saveAs'] = (options) => {\n return this.adapter.saveAs(options);\n };\n\n getDocumentContent: DocumentTool['getDocumentContent'] = (onDocumentContent) => {\n return this.adapter.getDocumentContent(onDocumentContent);\n };\n\n closeDocument: DocumentTool['closeDocument'] = (discardModify, onClose, options) => {\n return this.adapter.closeDocument(discardModify, onClose, options);\n };\n\n isDocumentOpened: DocumentTool['isDocumentOpened'] = () => {\n return this.adapter.isDocumentOpened();\n };\n\n isDocumentModified: DocumentTool['isDocumentModified'] = () => {\n return this.adapter.isDocumentModified();\n };\n\n print: DocumentTool['print'] = () => {\n return this.adapter.print();\n };\n\n createPreview: DocumentTool['createPreview'] = (serverUrl, options) => {\n return this.adapter.createPreview(serverUrl, options);\n };\n}\n","import type { FindTool } from '../api/find-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst FIND_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n clearFind: { kind: 'command' },\n findNext: { kind: 'command' },\n findPrevious: { kind: 'command' },\n};\n\nexport class FindToolImpl implements FindTool {\n private readonly adapter: FindTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<FindTool>('find', FIND_TOOL_DESCRIPTOR, context);\n }\n\n clearFind: FindTool['clearFind'] = () => {\n return this.adapter.clearFind();\n };\n\n findNext: FindTool['findNext'] = (queryText) => {\n return this.adapter.findNext(queryText);\n };\n\n findPrevious: FindTool['findPrevious'] = (queryText) => {\n return this.adapter.findPrevious(queryText);\n };\n}\n","import type { NetworkingTool } from '../api/networking-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst NETWORKING_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n configFileUpload: { kind: 'command' },\n setHttpHeaders: { kind: 'command' },\n setHttpFormFields: { kind: 'command' },\n};\n\nexport class NetworkingToolImpl implements NetworkingTool {\n private readonly adapter: NetworkingTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<NetworkingTool>(\n 'networking',\n NETWORKING_TOOL_DESCRIPTOR,\n context,\n );\n }\n\n configFileUpload: NetworkingTool['configFileUpload'] = (options) => {\n return this.adapter.configFileUpload(options);\n };\n\n setHttpHeaders: NetworkingTool['setHttpHeaders'] = (headers) => {\n return this.adapter.setHttpHeaders(headers);\n };\n\n setHttpFormFields: NetworkingTool['setHttpFormFields'] = (fields) => {\n return this.adapter.setHttpFormFields(fields);\n };\n}\n","import type {\n PageChangeCallback,\n PageCountCallback,\n PageIndexGetCallback,\n PageModeChangeCallback,\n} from '../api/callbacks';\nimport type { PageTool } from '../api/page-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst createPageToolDescriptor = (context: BridgeToolAdapterContext): BridgeToolDescriptor => ({\n addPageChangeCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.pageChange.push(callback as PageChangeCallback);\n }\n },\n },\n addPageModeChangeCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.pageModeChange.push(callback as PageModeChangeCallback);\n }\n },\n },\n getPageCount: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n void callbacks;\n const callback = args[0];\n if (typeof callback === 'function') {\n (callback as PageCountCallback)(context.state.snapshot().pageCount);\n }\n },\n },\n getPageIndex: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n void callbacks;\n const callback = args[0];\n if (typeof callback === 'function') {\n (callback as PageIndexGetCallback)(context.state.snapshot().pageIndex);\n }\n },\n },\n setSinglePageViewMode: { kind: 'command' },\n setTwoPagesViewMode: { kind: 'command' },\n setPageScrollVertical: { kind: 'command' },\n setPageScrollHorizontal: { kind: 'command' },\n setPageCursorPanDrag: { kind: 'command' },\n setPageCursorTextSelect: { kind: 'command' },\n rotateCW: { kind: 'command' },\n rotateCCW: { kind: 'command' },\n autoFitPage: { kind: 'command' },\n fitPageSize: { kind: 'command' },\n fitPageWidth: { kind: 'command' },\n fitPageHeight: { kind: 'command' },\n increasePageScale: { kind: 'command' },\n decreasePageScale: { kind: 'command' },\n setPageScale: { kind: 'command' },\n setPageBlendColor: { kind: 'command' },\n gotoPage: { kind: 'command' },\n gotoNextPage: { kind: 'command' },\n gotoPreviousPage: { kind: 'command' },\n rotatePage: { kind: 'command' },\n});\n\nexport class PageToolImpl implements PageTool {\n private readonly adapter: PageTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<PageTool>(\n 'page',\n createPageToolDescriptor(context),\n context,\n );\n }\n\n addPageChangeCallback: PageTool['addPageChangeCallback'] = (callback) => {\n return this.adapter.addPageChangeCallback(callback);\n };\n\n addPageModeChangeCallback: PageTool['addPageModeChangeCallback'] = (callback) => {\n return this.adapter.addPageModeChangeCallback(callback);\n };\n\n getPageCount: PageTool['getPageCount'] = (callback) => {\n return this.adapter.getPageCount(callback);\n };\n\n getPageIndex: PageTool['getPageIndex'] = (callback) => {\n return this.adapter.getPageIndex(callback);\n };\n\n setSinglePageViewMode: PageTool['setSinglePageViewMode'] = () => {\n return this.adapter.setSinglePageViewMode();\n };\n\n setTwoPagesViewMode: PageTool['setTwoPagesViewMode'] = () => {\n return this.adapter.setTwoPagesViewMode();\n };\n\n setPageScrollVertical: PageTool['setPageScrollVertical'] = () => {\n return this.adapter.setPageScrollVertical();\n };\n\n setPageScrollHorizontal: PageTool['setPageScrollHorizontal'] = () => {\n return this.adapter.setPageScrollHorizontal();\n };\n\n setPageCursorPanDrag: PageTool['setPageCursorPanDrag'] = () => {\n return this.adapter.setPageCursorPanDrag();\n };\n\n setPageCursorTextSelect: PageTool['setPageCursorTextSelect'] = () => {\n return this.adapter.setPageCursorTextSelect();\n };\n\n rotateCW: PageTool['rotateCW'] = () => {\n return this.adapter.rotateCW();\n };\n\n rotateCCW: PageTool['rotateCCW'] = () => {\n return this.adapter.rotateCCW();\n };\n\n autoFitPage: PageTool['autoFitPage'] = () => {\n return this.adapter.autoFitPage();\n };\n\n fitPageSize: PageTool['fitPageSize'] = () => {\n return this.adapter.fitPageSize();\n };\n\n fitPageWidth: PageTool['fitPageWidth'] = () => {\n return this.adapter.fitPageWidth();\n };\n\n fitPageHeight: PageTool['fitPageHeight'] = () => {\n return this.adapter.fitPageHeight();\n };\n\n increasePageScale: PageTool['increasePageScale'] = () => {\n return this.adapter.increasePageScale();\n };\n\n decreasePageScale: PageTool['decreasePageScale'] = () => {\n return this.adapter.decreasePageScale();\n };\n\n setPageScale: PageTool['setPageScale'] = (scale) => {\n return this.adapter.setPageScale(scale);\n };\n\n setPageBlendColor: PageTool['setPageBlendColor'] = (r, g, b, alpha) => {\n return this.adapter.setPageBlendColor(r, g, b, alpha);\n };\n\n gotoPage: PageTool['gotoPage'] = (pageIndex, x, y) => {\n return this.adapter.gotoPage(pageIndex, x, y);\n };\n\n gotoNextPage: PageTool['gotoNextPage'] = () => {\n return this.adapter.gotoNextPage();\n };\n\n gotoPreviousPage: PageTool['gotoPreviousPage'] = () => {\n return this.adapter.gotoPreviousPage();\n };\n\n rotatePage: PageTool['rotatePage'] = (rotation) => {\n return this.adapter.rotatePage(rotation);\n };\n}\n","import type { PdfFormFiller } from '../api/pdf-formfiller';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\ninterface PdfFormKeyValueField {\n key: string;\n value: string;\n}\n\nconst PDF_FORM_FILLER_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n open: { kind: 'command' },\n setFormFieldValue: { kind: 'command' },\n setFormFieldReadonly: { kind: 'command' },\n commit: {\n kind: 'callbackQuery',\n mapCallbackResult: () => [],\n },\n clear: {\n kind: 'callbackQuery',\n mapCallbackResult: () => [],\n },\n toKeyValue: {\n kind: 'callbackQuery',\n mapCallbackResult: (result) => {\n return [Array.isArray(result) ? (result as PdfFormKeyValueField[]) : []];\n },\n },\n};\n\nexport class PdfFormFillerImpl implements PdfFormFiller {\n private readonly adapter: PdfFormFiller;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<PdfFormFiller>(\n 'pdfFormFiller',\n PDF_FORM_FILLER_TOOL_DESCRIPTOR,\n context,\n );\n }\n\n open: PdfFormFiller['open'] = () => {\n return this.adapter.open();\n };\n\n setFormFieldValue: PdfFormFiller['setFormFieldValue'] = (filedName, value) => {\n return this.adapter.setFormFieldValue(filedName, value);\n };\n\n setFormFieldReadonly: PdfFormFiller['setFormFieldReadonly'] = (filedName, readOnly) => {\n return this.adapter.setFormFieldReadonly(filedName, readOnly);\n };\n\n commit: PdfFormFiller['commit'] = (callback) => {\n return this.adapter.commit(callback);\n };\n\n clear: PdfFormFiller['clear'] = (callback) => {\n return this.adapter.clear(callback);\n };\n\n toKeyValue: PdfFormFiller['toKeyValue'] = (callback) => {\n return this.adapter.toKeyValue(callback);\n };\n}\n","import type {\n DigitalSealPosition,\n DigitalSignType,\n IDigitalSignOptions,\n IKVField,\n} from '../api/common';\n\nconst PAGE_RANGE_SEPARATOR_PATTERN = /\\s*,\\s*/;\nconst PAGE_BOUNDS_SEPARATOR_PATTERN = /\\s*-\\s*/;\n\nconst normalizePageNumber = (value: string): number | null => {\n const parsedValue = Number.parseInt(value.trim(), 10);\n if (!Number.isFinite(parsedValue) || parsedValue <= 0) {\n return null;\n }\n\n return parsedValue;\n};\n\nconst expandPageRangeSegment = (segment: string): number[] => {\n const bounds = segment.split(PAGE_BOUNDS_SEPARATOR_PATTERN);\n if (bounds.length === 1) {\n const pageNumber = normalizePageNumber(bounds[0] ?? '');\n return pageNumber ? [pageNumber] : [];\n }\n\n const startPage = normalizePageNumber(bounds[0] ?? '');\n const endPage = normalizePageNumber(bounds[1] ?? '');\n if (!startPage || !endPage || endPage < startPage) {\n return [];\n }\n\n return Array.from({ length: endPage - startPage + 1 }, (_, index) => startPage + index);\n};\n\nconst parsePageRanges = (pageRange?: string): number[] => {\n if (!pageRange) {\n return [];\n }\n\n const pageNumbers = pageRange\n .split(PAGE_RANGE_SEPARATOR_PATTERN)\n .flatMap((segment) => expandPageRangeSegment(segment))\n .filter((value, index, source) => source.indexOf(value) === index);\n\n return pageNumbers;\n};\n\nexport class KVField implements IKVField {\n key?: string;\n value?: string;\n description?: string;\n\n constructor(key: string, value: string, description?: string) {\n this.key = key;\n this.value = value;\n this.description = description;\n }\n\n readonly setFieldName = (name: string): void => {\n this.key = name;\n };\n\n readonly setFieldValue = (value: string): void => {\n this.value = value;\n };\n\n readonly setDescription = (description?: string): void => {\n this.description = description;\n };\n}\n\nexport class DigitalSignOptions implements IDigitalSignOptions {\n pageRange?: string;\n page?: number;\n pageX?: number;\n pageY?: number;\n signReason?: string;\n signLocation?: string;\n signUserData?: string;\n fields: IKVField[] = [];\n defaultStampPassword?: string;\n defaultKeystorePassword?: string;\n keywordText?: string | undefined;\n keywordTextFixedPositions:\n | {\n pageIndex?: number;\n firstOccurrence?: boolean;\n position?: number;\n }[]\n | undefined = undefined;\n keywordOffsetX = 0;\n keywordOffsetY = 0;\n bookmarkName?: string | undefined;\n bookmarkOffsetX = 0;\n bookmarkOffsetY = 0;\n printMargin?: number = 0;\n grayscaleSealImage = false;\n\n private signType: DigitalSignType = 0;\n private sealPosition: DigitalSealPosition = 0;\n\n readonly getSignType = (): DigitalSignType => {\n return this.signType;\n };\n\n readonly setSignType = (signType: DigitalSignType): void => {\n this.signType = signType;\n };\n\n readonly isCrossPageSideSign = (): boolean => {\n return this.signType === 2 || this.signType === 3;\n };\n\n readonly getSealPosition = (): DigitalSealPosition => {\n return this.sealPosition;\n };\n\n readonly setSignOnPageSides = (signType: number): void => {\n if (signType >= 0 && signType <= 3) {\n this.signType = signType as DigitalSignType;\n }\n };\n\n readonly setSignPositionOnPageSides = (position: number): void => {\n this.sealPosition = position;\n };\n\n readonly setPageRange = (text: string): void => {\n this.pageRange = text;\n };\n\n readonly getPageRange = (): string | undefined => {\n return this.pageRange;\n };\n\n readonly getPageRanges = (): number[] => {\n return parsePageRanges(this.pageRange);\n };\n\n readonly setSignUserData = (signUserData: string): void => {\n this.signUserData = signUserData;\n };\n\n readonly setPrintMargin = (margin: number): void => {\n this.printMargin = margin;\n };\n\n readonly getPrintMargin = (): number => {\n return this.printMargin ?? 0;\n };\n\n readonly setSignReason = (reason: string): void => {\n this.signReason = reason;\n };\n\n readonly getSignReason = (): string | undefined => {\n return this.signReason;\n };\n\n readonly setSignLocation = (location: string): void => {\n this.signLocation = location;\n };\n\n readonly getSignLocation = (): string | undefined => {\n return this.signLocation;\n };\n\n readonly setDefaultStampPassword = (password: string): void => {\n this.defaultStampPassword = password;\n };\n}\n","import type { UITool } from '../api/ui-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst BOOK_VIEW_PAGE_MODES = new Set([2, 5]);\n\nconst createUIToolDescriptor = (context: BridgeToolAdapterContext): BridgeToolDescriptor => ({\n showToolbarMenu: { kind: 'command' },\n hideToolbarMenu: { kind: 'command' },\n setupToolbarMenu: { kind: 'command' },\n showToolbarMenuItem: { kind: 'command' },\n hideToolbarMenuItem: { kind: 'command' },\n setupRibbonMenu: { kind: 'command' },\n setupRibbonMenuItem: { kind: 'command' },\n setupRibbonTitleBar: { kind: 'command' },\n showRibbonMenu: { kind: 'command' },\n hideRibbonMenu: { kind: 'command' },\n showRibbonMenuItem: { kind: 'command' },\n hideRibbonMenuItem: { kind: 'command' },\n showRibbonTitleBar: { kind: 'command' },\n hideRibbonTitleBar: { kind: 'command' },\n selectRibbonMenu: { kind: 'command' },\n setRibbonMenuButtonStyle: { kind: 'command' },\n setWatermark: { kind: 'command' },\n setCompactMode: { kind: 'command' },\n enterBookViewMode: {\n kind: 'callbackQuery',\n mapCallbackResult: () => [],\n },\n exitBookViewMode: { kind: 'command' },\n isBookViewActivated: {\n kind: 'stateGetter',\n state: () => BOOK_VIEW_PAGE_MODES.has(context.state.snapshot().pageMode),\n },\n requestFullScreen: { kind: 'command' },\n exitFullScreen: { kind: 'command' },\n invalidateView: { kind: 'command' },\n});\n\nexport class UIToolImpl implements UITool {\n private readonly adapter: UITool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<UITool>('ui', createUIToolDescriptor(context), context);\n }\n\n showToolbarMenu: UITool['showToolbarMenu'] = () => {\n return this.adapter.showToolbarMenu();\n };\n\n hideToolbarMenu: UITool['hideToolbarMenu'] = () => {\n return this.adapter.hideToolbarMenu();\n };\n\n setupToolbarMenu: UITool['setupToolbarMenu'] = (opt) => {\n return this.adapter.setupToolbarMenu(opt);\n };\n\n showToolbarMenuItem: UITool['showToolbarMenuItem'] = (menuId) => {\n return this.adapter.showToolbarMenuItem(menuId);\n };\n\n hideToolbarMenuItem: UITool['hideToolbarMenuItem'] = (menuId) => {\n return this.adapter.hideToolbarMenuItem(menuId);\n };\n\n setupRibbonMenu: UITool['setupRibbonMenu'] = (opt) => {\n return this.adapter.setupRibbonMenu(opt);\n };\n\n setupRibbonMenuItem: UITool['setupRibbonMenuItem'] = (menuId, visible, config) => {\n return this.adapter.setupRibbonMenuItem(menuId, visible, config);\n };\n\n setupRibbonTitleBar: UITool['setupRibbonTitleBar'] = (visible) => {\n return this.adapter.setupRibbonTitleBar(visible);\n };\n\n showRibbonMenu: UITool['showRibbonMenu'] = () => {\n return this.adapter.showRibbonMenu();\n };\n\n hideRibbonMenu: UITool['hideRibbonMenu'] = () => {\n return this.adapter.hideRibbonMenu();\n };\n\n showRibbonMenuItem: UITool['showRibbonMenuItem'] = (menuId, config) => {\n return this.adapter.showRibbonMenuItem(menuId, config);\n };\n\n hideRibbonMenuItem: UITool['hideRibbonMenuItem'] = (menuId, config) => {\n return this.adapter.hideRibbonMenuItem(menuId, config);\n };\n\n showRibbonTitleBar: UITool['showRibbonTitleBar'] = () => {\n return this.adapter.showRibbonTitleBar();\n };\n\n hideRibbonTitleBar: UITool['hideRibbonTitleBar'] = () => {\n return this.adapter.hideRibbonTitleBar();\n };\n\n selectRibbonMenu: UITool['selectRibbonMenu'] = (menuId) => {\n return this.adapter.selectRibbonMenu(menuId);\n };\n\n setRibbonMenuButtonStyle: UITool['setRibbonMenuButtonStyle'] = (buttonId, buttonStyle) => {\n return this.adapter.setRibbonMenuButtonStyle(buttonId, buttonStyle);\n };\n\n setWatermark: UITool['setWatermark'] = (fields) => {\n return this.adapter.setWatermark(fields);\n };\n\n setCompactMode: UITool['setCompactMode'] = (compact) => {\n return this.adapter.setCompactMode(compact);\n };\n\n enterBookViewMode: UITool['enterBookViewMode'] = (callback) => {\n return this.adapter.enterBookViewMode(callback);\n };\n\n exitBookViewMode: UITool['exitBookViewMode'] = () => {\n return this.adapter.exitBookViewMode();\n };\n\n isBookViewActivated: UITool['isBookViewActivated'] = () => {\n return this.adapter.isBookViewActivated();\n };\n\n requestFullScreen: UITool['requestFullScreen'] = () => {\n return this.adapter.requestFullScreen();\n };\n\n exitFullScreen: UITool['exitFullScreen'] = () => {\n return this.adapter.exitFullScreen();\n };\n\n invalidateView: UITool['invalidateView'] = () => {\n return this.adapter.invalidateView();\n };\n}\n","import type { IReaderEmbedOptions } from '../api/document-sdk';\n\nexport type SupportedReaderTheme = 'light' | 'dark' | 'high-contrast' | 'auto';\n\nexport interface NormalizedReaderEmbedOptions extends IReaderEmbedOptions {\n officeServer: string;\n scrollIntoView: boolean;\n theme?: SupportedReaderTheme;\n}\n\nconst normalizeTheme = (theme?: string): SupportedReaderTheme | undefined => {\n if (!theme) {\n return undefined;\n }\n\n const normalizedTheme = theme.trim().toLowerCase();\n if (normalizedTheme === 'application') {\n return 'auto';\n }\n\n if (\n normalizedTheme === 'light' ||\n normalizedTheme === 'dark' ||\n normalizedTheme === 'high-contrast' ||\n normalizedTheme === 'auto'\n ) {\n return normalizedTheme;\n }\n\n return undefined;\n};\n\nexport const normalizeAppUrl = (appUrl: string): string => {\n const normalizedUrl = new URL(appUrl, globalThis.location?.href ?? 'http://localhost/');\n normalizedUrl.hash = '';\n if (!normalizedUrl.pathname.endsWith('/')) {\n normalizedUrl.pathname = `${normalizedUrl.pathname}/`;\n }\n\n return normalizedUrl.toString();\n};\n\nexport const createBootstrapUrl = (appUrl: string): string => {\n return new URL('editors.bootstrap.js', appUrl).toString();\n};\n\nexport const normalizeReaderEmbedOptions = (\n appUrl: string,\n configuration: IReaderEmbedOptions,\n): NormalizedReaderEmbedOptions => {\n const normalizedAppUrl = normalizeAppUrl(appUrl);\n\n return {\n ...configuration,\n officeServer: normalizedAppUrl,\n scrollIntoView: configuration.scrollIntoView ?? true,\n theme: normalizeTheme(configuration.theme),\n };\n};\n","import { createBootstrapUrl } from './ReaderConfiguration';\n\nexport const READER_CUSTOM_ELEMENT_TAG = 'rhc-office-editor';\n\nconst READER_LOADER_REGISTRY_KEY = '__RHC_OFFICE_SDK_READER_LOADER__';\n\ninterface ReaderLoaderRegistry {\n activeAppUrl: string | null;\n loadPromises: Map<string, Promise<void>>;\n}\n\ntype BrowserGlobal = typeof globalThis & {\n [READER_LOADER_REGISTRY_KEY]?: ReaderLoaderRegistry;\n};\n\nconst getReaderLoaderRegistry = (): ReaderLoaderRegistry => {\n const browserGlobal = globalThis as BrowserGlobal;\n if (!browserGlobal[READER_LOADER_REGISTRY_KEY]) {\n browserGlobal[READER_LOADER_REGISTRY_KEY] = {\n activeAppUrl: null,\n loadPromises: new Map<string, Promise<void>>(),\n };\n }\n\n return browserGlobal[READER_LOADER_REGISTRY_KEY];\n};\n\nconst findScriptElementBySource = (source: string): HTMLScriptElement | null => {\n return (\n Array.from(document.querySelectorAll('script')).find((element) => element.src === source) ??\n null\n );\n};\n\nexport class ReaderScriptLoadError extends Error {\n constructor(bootstrapUrl: string) {\n super(`Failed to load reader bootstrap script: ${bootstrapUrl}`);\n this.name = 'ReaderScriptLoadError';\n }\n}\n\nexport class ReaderSourceConflictError extends Error {\n constructor(activeAppUrl: string, requestedAppUrl: string) {\n super(\n `Reader Web Component \"${READER_CUSTOM_ELEMENT_TAG}\" is already bound to ${activeAppUrl} and cannot be reloaded from ${requestedAppUrl}.`,\n );\n this.name = 'ReaderSourceConflictError';\n }\n}\n\nexport const assertCompatibleReaderSource = (appUrl: string): void => {\n const registry = getReaderLoaderRegistry();\n if (registry.activeAppUrl && registry.activeAppUrl !== appUrl) {\n throw new ReaderSourceConflictError(registry.activeAppUrl, appUrl);\n }\n};\n\nexport const ensureReaderScriptLoaded = (appUrl: string): Promise<void> => {\n const registry = getReaderLoaderRegistry();\n assertCompatibleReaderSource(appUrl);\n\n const existingLoadPromise = registry.loadPromises.get(appUrl);\n if (existingLoadPromise) {\n return existingLoadPromise;\n }\n\n if (globalThis.customElements?.get(READER_CUSTOM_ELEMENT_TAG)) {\n registry.activeAppUrl = appUrl;\n const resolvedPromise = Promise.resolve();\n registry.loadPromises.set(appUrl, resolvedPromise);\n return resolvedPromise;\n }\n\n const bootstrapUrl = createBootstrapUrl(appUrl);\n const existingScriptElement = findScriptElementBySource(bootstrapUrl);\n registry.activeAppUrl = appUrl;\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n const rejectScriptLoad = (scriptElement?: HTMLScriptElement): void => {\n scriptElement?.remove();\n reject(new ReaderScriptLoadError(bootstrapUrl));\n };\n\n const resolveWhenDefined = (): void => {\n void globalThis.customElements\n .whenDefined(READER_CUSTOM_ELEMENT_TAG)\n .then(() => {\n resolve();\n })\n .catch(reject);\n };\n\n if (existingScriptElement) {\n if (globalThis.customElements?.get(READER_CUSTOM_ELEMENT_TAG)) {\n resolve();\n return;\n }\n\n existingScriptElement.addEventListener(\n 'error',\n () => reject(new ReaderScriptLoadError(bootstrapUrl)),\n {\n once: true,\n },\n );\n resolveWhenDefined();\n return;\n }\n\n const scriptElement = document.createElement('script');\n scriptElement.src = bootstrapUrl;\n scriptElement.async = true;\n scriptElement.dataset.rhcOfficeSdkReader = appUrl;\n scriptElement.addEventListener('load', resolveWhenDefined, { once: true });\n scriptElement.addEventListener('error', () => rejectScriptLoad(scriptElement), { once: true });\n document.head.appendChild(scriptElement);\n }).catch((error: unknown) => {\n registry.loadPromises.delete(appUrl);\n if (\n !globalThis.customElements?.get(READER_CUSTOM_ELEMENT_TAG) &&\n registry.activeAppUrl === appUrl\n ) {\n registry.activeAppUrl = null;\n }\n throw error;\n });\n\n registry.loadPromises.set(appUrl, loadPromise);\n return loadPromise;\n};\n","export const RHC_OFFICE_ADAPTER_PROTOCOL = 'rhc-office.editor-adapter';\nexport const RHC_OFFICE_ADAPTER_VERSION = 1;\nexport const RHC_OFFICE_ADAPTER_GLOBAL = '__RHC_OFFICE_EDITOR_ADAPTER__';\nexport const RHC_OFFICE_ADAPTER_READY_EVENT = 'rhcOfficeAdapterReady';\nexport const RHC_OFFICE_ADAPTER_EVENT = 'rhcOfficeAdapterEvent';\nexport const RHC_OFFICE_READER_ID_ATTRIBUTE = 'data-rhc-office-reader-id';\n\nexport type AdapterToolName =\n | 'document'\n | 'page'\n | 'ui'\n | 'find'\n | 'annotation'\n | 'digitalSign'\n | 'signServer'\n | 'review'\n | 'ekey'\n | 'symbology'\n | 'templateSign'\n | 'pdfFormFiller'\n | 'extension'\n | 'networking'\n | 'crypto';\n\nexport type AdapterErrorCode =\n | 'ADAPTER_UNAVAILABLE'\n | 'READER_NOT_READY'\n | 'READER_NOT_FOUND'\n | 'COMMAND_NOT_FOUND'\n | 'NOT_IMPLEMENTED'\n | 'INVALID_PARAMS'\n | 'EXECUTION_FAILED'\n | 'TIMEOUT';\n\nexport interface AdapterError {\n code: AdapterErrorCode;\n message: string;\n details?: unknown;\n}\n\nexport interface AdapterRequest<TParams = unknown> {\n protocol: typeof RHC_OFFICE_ADAPTER_PROTOCOL;\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n requestId: string;\n readerId: string;\n tool: AdapterToolName;\n method: string;\n params?: TParams;\n}\n\nexport type AdapterResponse<TResult = unknown> =\n | {\n ok: true;\n requestId: string;\n result: TResult;\n }\n | {\n ok: false;\n requestId: string;\n error: AdapterError;\n };\n\nexport interface AdapterCommandCapability {\n implemented: boolean;\n method: string;\n tool: AdapterToolName;\n}\n\nexport interface AdapterCapabilityManifest {\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n tools: AdapterToolName[];\n commands: AdapterCommandCapability[];\n}\n\nexport interface AdapterStatePatch {\n documentOpened?: boolean;\n documentModified?: boolean;\n pageCount?: number;\n pageIndex?: number;\n pageMode?: number;\n zoomLevel?: number;\n documentType?: string;\n annotationMode?: string;\n annotationEnabled?: boolean;\n extensionState?: 'connected' | 'disconnected';\n}\n\nexport interface AdapterEvent<TPayload = unknown> {\n protocol: typeof RHC_OFFICE_ADAPTER_PROTOCOL;\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n readerId: string;\n event: string;\n payload?: TPayload;\n statePatch?: AdapterStatePatch;\n}\n\nexport interface AdapterReadyEventDetail {\n protocol: typeof RHC_OFFICE_ADAPTER_PROTOCOL;\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n readerId: string;\n}\n\nexport interface AdapterReaderSession {\n readerId: string;\n capabilities: AdapterCapabilityManifest;\n request(request: AdapterRequest): Promise<AdapterResponse>;\n}\n\nexport interface AdapterGlobal {\n registerReader(session: AdapterReaderSession): void;\n unregisterReader(readerId: string): void;\n request(request: AdapterRequest): Promise<AdapterResponse>;\n getCapabilities(readerId: string): AdapterCapabilityManifest | null;\n}\n","import {\n RHC_OFFICE_ADAPTER_GLOBAL,\n RHC_OFFICE_ADAPTER_PROTOCOL,\n RHC_OFFICE_ADAPTER_READY_EVENT,\n RHC_OFFICE_ADAPTER_VERSION,\n type AdapterCapabilityManifest,\n type AdapterGlobal,\n type AdapterRequest,\n type AdapterResponse,\n type AdapterToolName,\n} from './AdapterProtocol';\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 5000;\nconst DEFAULT_READY_TIMEOUT_MS = 5000;\n\ntype BrowserGlobal = typeof globalThis & {\n [RHC_OFFICE_ADAPTER_GLOBAL]?: AdapterGlobal;\n};\n\nconst createRequestId = (): string => {\n const cryptoApi = globalThis.crypto;\n if (typeof cryptoApi?.randomUUID === 'function') {\n return cryptoApi.randomUUID();\n }\n\n return `adapter-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n};\n\nconst getAdapterGlobal = (): AdapterGlobal | undefined => {\n return (globalThis as BrowserGlobal)[RHC_OFFICE_ADAPTER_GLOBAL];\n};\n\nexport class ReaderBridgeError extends Error {\n readonly code: string;\n readonly details?: unknown;\n\n constructor(code: string, message: string, details?: unknown) {\n super(message);\n this.name = 'ReaderBridgeError';\n this.code = code;\n this.details = details;\n }\n}\n\nexport class ReaderBridgeClient {\n private readerId: string | null = null;\n private readyTimeoutMs: number;\n private requestTimeoutMs: number;\n\n constructor(options?: { readyTimeoutMs?: number; requestTimeoutMs?: number }) {\n this.readyTimeoutMs = options?.readyTimeoutMs ?? DEFAULT_READY_TIMEOUT_MS;\n this.requestTimeoutMs = options?.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n }\n\n configureTimeouts(options?: { readyTimeoutMs?: number; requestTimeoutMs?: number }): void {\n this.readyTimeoutMs = options?.readyTimeoutMs ?? this.readyTimeoutMs;\n this.requestTimeoutMs = options?.requestTimeoutMs ?? this.requestTimeoutMs;\n }\n\n setReaderId(readerId: string | null): void {\n this.readerId = readerId;\n }\n\n getReaderId(): string | null {\n return this.readerId;\n }\n\n async request<TResult = unknown, TParams = unknown>(\n tool: AdapterToolName,\n method: string,\n params?: TParams,\n options?: {\n timeoutMs?: number;\n },\n ): Promise<TResult> {\n const response = await this.requestRaw<TResult, TParams>(tool, method, params, options);\n if (response.ok) {\n return response.result;\n }\n\n throw new ReaderBridgeError(\n response.error.code,\n response.error.message,\n response.error.details,\n );\n }\n\n async requestRaw<TResult = unknown, TParams = unknown>(\n tool: AdapterToolName,\n method: string,\n params?: TParams,\n options?: {\n timeoutMs?: number;\n },\n ): Promise<AdapterResponse<TResult>> {\n if (!this.readerId) {\n return {\n ok: false,\n requestId: '',\n error: {\n code: 'READER_NOT_READY',\n message: 'Reader is not mounted.',\n },\n };\n }\n\n const adapter = await this.waitForAdapter(this.readerId, options?.timeoutMs);\n if (!adapter) {\n return {\n ok: false,\n requestId: '',\n error: {\n code: 'ADAPTER_UNAVAILABLE',\n message: 'Editor adapter is not available.',\n },\n };\n }\n\n const request: AdapterRequest<TParams> = {\n protocol: RHC_OFFICE_ADAPTER_PROTOCOL,\n version: RHC_OFFICE_ADAPTER_VERSION,\n requestId: createRequestId(),\n readerId: this.readerId,\n tool,\n method,\n params,\n };\n\n return this.withTimeout(\n adapter.request(request) as Promise<AdapterResponse<TResult>>,\n request.requestId,\n options?.timeoutMs ?? this.requestTimeoutMs,\n );\n }\n\n getCapabilities(): AdapterCapabilityManifest | null {\n if (!this.readerId) {\n return null;\n }\n\n return getAdapterGlobal()?.getCapabilities(this.readerId) ?? null;\n }\n\n private async waitForAdapter(\n readerId: string,\n timeoutMs = this.readyTimeoutMs,\n ): Promise<AdapterGlobal | null> {\n const existingAdapter = getAdapterGlobal();\n if (existingAdapter?.getCapabilities(readerId)) {\n return existingAdapter;\n }\n\n return new Promise<AdapterGlobal | null>((resolve) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const cleanup = (): void => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n globalThis.removeEventListener(RHC_OFFICE_ADAPTER_READY_EVENT, onReady as EventListener);\n };\n\n const onReady = (event: Event): void => {\n const detail = event instanceof CustomEvent ? event.detail : undefined;\n if (detail?.readerId !== readerId) {\n return;\n }\n\n const adapter = getAdapterGlobal();\n cleanup();\n resolve(adapter ?? null);\n };\n\n globalThis.addEventListener(RHC_OFFICE_ADAPTER_READY_EVENT, onReady as EventListener);\n timeoutId = setTimeout(() => {\n cleanup();\n resolve(getAdapterGlobal()?.getCapabilities(readerId) ? getAdapterGlobal()! : null);\n }, timeoutMs);\n });\n }\n\n private async withTimeout<TResult>(\n promise: Promise<AdapterResponse<TResult>>,\n requestId: string,\n timeoutMs: number,\n ): Promise<AdapterResponse<TResult>> {\n return new Promise<AdapterResponse<TResult>>((resolve) => {\n const timeoutId = setTimeout(() => {\n resolve({\n ok: false,\n requestId,\n error: {\n code: 'TIMEOUT',\n message: `Editor adapter request timed out after ${timeoutMs}ms.`,\n },\n });\n }, timeoutMs);\n\n promise\n .then((response) => resolve(response))\n .catch((error: unknown) => {\n resolve({\n ok: false,\n requestId,\n error: {\n code: 'EXECUTION_FAILED',\n message: error instanceof Error ? error.message : String(error),\n },\n });\n })\n .finally(() => {\n clearTimeout(timeoutId);\n });\n });\n }\n}\n","import type { AdapterStatePatch } from './AdapterProtocol';\n\nexport interface ReaderStateSnapshot {\n annotationEnabled: boolean;\n annotationMode?: string;\n documentModified: boolean;\n documentOpened: boolean;\n documentType?: string;\n extensionState: 'connected' | 'disconnected';\n pageCount: number;\n pageIndex: number;\n pageMode: number;\n zoomLevel: number;\n}\n\nconst DEFAULT_READER_STATE: ReaderStateSnapshot = {\n annotationEnabled: false,\n documentModified: false,\n documentOpened: false,\n extensionState: 'disconnected',\n pageCount: 0,\n pageIndex: 1,\n pageMode: 0,\n zoomLevel: 100,\n};\n\nexport class ReaderStateStore {\n private state: ReaderStateSnapshot = { ...DEFAULT_READER_STATE };\n\n reset(): void {\n this.state = { ...DEFAULT_READER_STATE };\n }\n\n update(patch?: AdapterStatePatch): void {\n if (!patch) {\n return;\n }\n\n this.state = {\n ...this.state,\n ...patch,\n };\n }\n\n setDocumentOpened(opened: boolean): void {\n this.state = {\n ...this.state,\n documentOpened: opened,\n };\n }\n\n snapshot(): ReaderStateSnapshot {\n return { ...this.state };\n }\n}\n","import type {\n AnnotationEventCallback,\n DigitalSignatureRetrieveCallback,\n DocumentClosedCallback,\n DocumentSavedCallback,\n ExtensionStateChangedCallback,\n PageChangeCallback,\n PageModeChangeCallback,\n} from '../api/callbacks';\nimport type { IDigitalAnnotationInfo } from '../api/annotation-tool';\n\nexport class SdkCallbackRegistry {\n readonly annotationEvents: AnnotationEventCallback[] = [];\n readonly annotationPersist: Array<(event: unknown) => void> = [];\n readonly annotationRetrieve: Array<(event: unknown) => void> = [];\n readonly digitalAnnotationRetrieve: Array<(annotations: IDigitalAnnotationInfo[]) => void> = [];\n readonly digitalSignatureParse: DigitalSignatureRetrieveCallback[] = [];\n readonly digitalSignatureRetrieve: DigitalSignatureRetrieveCallback[] = [];\n readonly documentClosed: DocumentClosedCallback[] = [];\n readonly documentOpened: Array<(status: string, error: string) => void> = [];\n readonly documentSaved: DocumentSavedCallback[] = [];\n readonly extensionStateChanged: ExtensionStateChangedCallback[] = [];\n readonly pageChange: PageChangeCallback[] = [];\n readonly pageModeChange: PageModeChangeCallback[] = [];\n\n emit(event: string, payload: unknown): void {\n switch (event) {\n case 'documentOpened':\n case 'documentLoaded':\n this.documentOpened.forEach((callback) => callback('ok', ''));\n return;\n case 'documentSaved':\n this.documentSaved.forEach((callback) => callback(payload));\n return;\n case 'documentClosed':\n this.documentClosed.forEach((callback) => callback(payload));\n return;\n case 'pageChange': {\n const pagePayload = payload as { pageIndex?: number; pageCount?: number };\n this.pageChange.forEach((callback) =>\n callback(pagePayload.pageIndex ?? 1, pagePayload.pageCount ?? 0),\n );\n return;\n }\n case 'pageModeChange': {\n const pagePayload = payload as { pageMode?: number };\n this.pageModeChange.forEach((callback) => callback(pagePayload.pageMode ?? 0));\n return;\n }\n case 'annotationEvent': {\n const annotationPayload = payload as { event?: string; payload?: unknown };\n this.annotationEvents.forEach((callback) =>\n callback(annotationPayload.event ?? 'annotationEvent', annotationPayload.payload),\n );\n return;\n }\n case 'annotationPersist':\n this.annotationPersist.forEach((callback) => callback(payload));\n return;\n case 'annotationRetrieve':\n this.annotationRetrieve.forEach((callback) => callback(payload));\n return;\n case 'digitalAnnotationRetrieve':\n this.digitalAnnotationRetrieve.forEach((callback) =>\n callback(Array.isArray(payload) ? (payload as IDigitalAnnotationInfo[]) : []),\n );\n return;\n case 'digitalSignatureRetrieve':\n this.digitalSignatureRetrieve.forEach((callback) =>\n callback(Array.isArray(payload) ? payload : []),\n );\n return;\n case 'digitalSignatureParse':\n this.digitalSignatureParse.forEach((callback) =>\n callback(Array.isArray(payload) ? payload : []),\n );\n return;\n case 'extensionStateChanged': {\n const extensionPayload = payload as { state?: 'connected' | 'disconnected' };\n this.extensionStateChanged.forEach((callback) =>\n callback(extensionPayload.state ?? 'disconnected'),\n );\n return;\n }\n default:\n return;\n }\n }\n}\n","import type { AnnotationTool } from '../api/annotation-tool';\nimport type { IDigitalAnnotationInfo } from '../api/annotation-tool';\nimport type { CryptoTool } from '../api/crypto-tool';\nimport type {\n AnnotationEventCallback,\n ExtensionStateChangedCallback,\n ReaderReadyCallback,\n ReaderUnloadCallback,\n} from '../api/callbacks';\nimport type { IDocumentSDK, IReaderEmbedOptions } from '../api/document-sdk';\nimport type { DocumentTool } from '../api/document-tool';\nimport type { EkeyTool } from '../api/ekey-tool';\nimport type { ExtensionTool } from '../api/extension-tool';\nimport type { FindTool } from '../api/find-tool';\nimport type { NetworkingTool } from '../api/networking-tool';\nimport type { PageTool } from '../api/page-tool';\nimport type { PdfFormFiller } from '../api/pdf-formfiller';\nimport type { ReviewTool } from '../api/review-tool';\nimport type { SignServerTool } from '../api/sign-server';\nimport type { DigitalSignTool } from '../api/sign-tool';\nimport type { SymbologyTool } from '../api/symbology-tool';\nimport type { TemplateSignTool } from '../api/template-sign';\nimport type { UITool } from '../api/ui-tool';\nimport { DocumentToolImpl } from '../tools/DocumentToolImpl';\nimport { FindToolImpl } from '../tools/FindToolImpl';\nimport { NetworkingToolImpl } from '../tools/NetworkingToolImpl';\nimport { PageToolImpl } from '../tools/PageToolImpl';\nimport { PdfFormFillerImpl } from '../tools/PdfFormFillerImpl';\nimport { DigitalSignOptions, KVField } from '../tools/SDKValueObjects';\nimport { UIToolImpl } from '../tools/UIToolImpl';\nimport type { NormalizedReaderEmbedOptions } from './ReaderConfiguration';\nimport { normalizeAppUrl, normalizeReaderEmbedOptions } from './ReaderConfiguration';\nimport {\n assertCompatibleReaderSource,\n ensureReaderScriptLoaded,\n READER_CUSTOM_ELEMENT_TAG,\n} from './ReaderScriptLoader';\nimport {\n RHC_OFFICE_ADAPTER_EVENT,\n RHC_OFFICE_READER_ID_ATTRIBUTE,\n type AdapterEvent,\n} from './AdapterProtocol';\nimport { createBridgeToolAdapter, createNotImplementedBridgeTool } from './BridgeToolAdapter';\nimport { ReaderBridgeClient } from './ReaderBridgeClient';\nimport { ReaderStateStore } from './ReaderStateStore';\nimport { SdkCallbackRegistry } from './SdkCallbackRegistry';\n\ntype ReaderEventListener = Parameters<IDocumentSDK['setReaderEventListener']>[0];\ntype ReaderEventPayload = Parameters<NonNullable<ReaderEventListener>>[1];\n\ninterface DocumentSDKRuntimeOptions {\n adapterReadyTimeoutMs?: number;\n adapterRequestTimeoutMs?: number;\n}\n\ntype NativeReaderEventName = 'documentLoaded' | 'documentStateChange' | 'documentError';\ntype ReaderThemeCleanup = () => void;\ntype CompatibleMediaQueryList = MediaQueryList & {\n addListener?: (listener: (event: MediaQueryListEvent) => void) => void;\n removeListener?: (listener: (event: MediaQueryListEvent) => void) => void;\n};\n\nconst NATIVE_READER_EVENT_NAMES: NativeReaderEventName[] = [\n 'documentLoaded',\n 'documentStateChange',\n 'documentError',\n];\n\nconst READER_READY_EVENT_NAME = 'readerReady';\nconst READER_UNLOAD_EVENT_NAME = 'readerUnload';\nconst READER_ERROR_EVENT_NAME = 'readerError';\n\nconst createReaderId = (): string => {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n\n return `rhc-reader-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n};\n\nconst createReaderPayload = (\n readerElement: HTMLElement | null,\n configuration: NormalizedReaderEmbedOptions | null,\n): Record<string, unknown> => {\n return {\n appUrl: configuration?.officeServer ?? null,\n configuration,\n element: readerElement,\n };\n};\n\nconst resolveContainerElement = (container: string | HTMLDivElement): HTMLDivElement => {\n if (typeof container === 'string') {\n const element = document.getElementById(container);\n if (!element) {\n throw new Error(`Reader container \"${container}\" was not found.`);\n }\n\n if (!(element instanceof HTMLDivElement)) {\n throw new Error(`Reader container \"${container}\" must be a div element.`);\n }\n\n return element;\n }\n\n if (!(container instanceof HTMLDivElement)) {\n throw new Error('Reader container must be a div element.');\n }\n\n return container;\n};\n\nconst resolveSystemReaderTheme = (): 'light' | 'dark' | 'high-contrast' => {\n const supportsMatchMedia = typeof globalThis.matchMedia === 'function';\n const prefersHighContrast = supportsMatchMedia\n ? globalThis.matchMedia('(prefers-contrast: more)').matches\n : false;\n if (prefersHighContrast) {\n return 'high-contrast';\n }\n\n const prefersDark = supportsMatchMedia\n ? globalThis.matchMedia('(prefers-color-scheme: dark)').matches\n : false;\n return prefersDark ? 'dark' : 'light';\n};\n\nconst addMediaQueryListener = (\n mediaQuery: MediaQueryList,\n listener: (event: MediaQueryListEvent) => void,\n): void => {\n const compatibleMediaQuery = mediaQuery as CompatibleMediaQueryList;\n if (typeof compatibleMediaQuery.addEventListener === 'function') {\n compatibleMediaQuery.addEventListener('change', listener);\n return;\n }\n\n if (typeof compatibleMediaQuery.addListener === 'function') {\n compatibleMediaQuery.addListener(listener);\n }\n};\n\nconst removeMediaQueryListener = (\n mediaQuery: MediaQueryList,\n listener: (event: MediaQueryListEvent) => void,\n): void => {\n const compatibleMediaQuery = mediaQuery as CompatibleMediaQueryList;\n if (typeof compatibleMediaQuery.removeEventListener === 'function') {\n compatibleMediaQuery.removeEventListener('change', listener);\n return;\n }\n\n if (typeof compatibleMediaQuery.removeListener === 'function') {\n compatibleMediaQuery.removeListener(listener);\n }\n};\n\nconst applyReaderElementLayout = (\n readerElement: HTMLElement,\n configuration: NormalizedReaderEmbedOptions,\n): void => {\n if (configuration.style) {\n readerElement.style.cssText = configuration.style;\n }\n\n if (!readerElement.style.display) {\n readerElement.style.display = 'block';\n }\n\n if (!readerElement.style.width) {\n readerElement.style.width = configuration.width ?? '100%';\n } else if (configuration.width) {\n readerElement.style.width = configuration.width;\n }\n\n if (!readerElement.style.height) {\n readerElement.style.height = configuration.height ?? '100%';\n } else if (configuration.height) {\n readerElement.style.height = configuration.height;\n }\n};\n\nconst bindReaderElementTheme = (\n readerElement: HTMLElement,\n configuration: NormalizedReaderEmbedOptions,\n): ReaderThemeCleanup | null => {\n const configuredTheme = configuration.theme;\n if (!configuredTheme) {\n readerElement.removeAttribute('theme');\n return null;\n }\n\n if (configuredTheme !== 'auto') {\n readerElement.setAttribute('theme', configuredTheme);\n return null;\n }\n\n const applySystemTheme = (): void => {\n readerElement.setAttribute('theme', resolveSystemReaderTheme());\n };\n\n applySystemTheme();\n\n if (typeof globalThis.matchMedia !== 'function') {\n return null;\n }\n\n const colorSchemeMediaQuery = globalThis.matchMedia('(prefers-color-scheme: dark)');\n const contrastMediaQuery = globalThis.matchMedia('(prefers-contrast: more)');\n const handleThemeChange = (): void => {\n applySystemTheme();\n };\n\n addMediaQueryListener(colorSchemeMediaQuery, handleThemeChange);\n addMediaQueryListener(contrastMediaQuery, handleThemeChange);\n\n return () => {\n removeMediaQueryListener(colorSchemeMediaQuery, handleThemeChange);\n removeMediaQueryListener(contrastMediaQuery, handleThemeChange);\n };\n};\n\nexport class DocumentSDK implements IDocumentSDK {\n private readonly bridge = new ReaderBridgeClient();\n private readonly callbacks = new SdkCallbackRegistry();\n private readonly readerState = new ReaderStateStore();\n private readonly bridgeToolContext = {\n bridge: this.bridge,\n callbacks: this.callbacks,\n debug: () => this.debugEnabled,\n onAsyncError: (error: unknown) => this.reportAdapterError(error),\n state: this.readerState,\n };\n private readonly documentTool = new DocumentToolImpl(this.bridgeToolContext);\n private readonly uiTool = new UIToolImpl(this.bridgeToolContext);\n private readonly pageTool = new PageToolImpl(this.bridgeToolContext);\n private readonly findTool = new FindToolImpl(this.bridgeToolContext);\n private readonly signServerTool = createNotImplementedBridgeTool<SignServerTool>(\n 'signServer',\n this.bridgeToolContext,\n );\n private readonly digitalSignTool = createNotImplementedBridgeTool<DigitalSignTool>(\n 'digitalSign',\n this.bridgeToolContext,\n );\n private readonly reviewTool = createNotImplementedBridgeTool<ReviewTool>(\n 'review',\n this.bridgeToolContext,\n );\n private readonly ekeyTool = createNotImplementedBridgeTool<EkeyTool>(\n 'ekey',\n this.bridgeToolContext,\n );\n private readonly symbologyTool = createNotImplementedBridgeTool<SymbologyTool>(\n 'symbology',\n this.bridgeToolContext,\n );\n private readonly annotationTool = this.createAnnotationTool();\n private readonly templateSignTool = createNotImplementedBridgeTool<TemplateSignTool>(\n 'templateSign',\n this.bridgeToolContext,\n );\n private readonly pdfFormFiller = new PdfFormFillerImpl(this.bridgeToolContext);\n private readonly extensionTool = this.createExtensionTool();\n private readonly networkingTool = new NetworkingToolImpl(this.bridgeToolContext);\n private readonly cryptoTool = createNotImplementedBridgeTool<CryptoTool>(\n 'crypto',\n this.bridgeToolContext,\n );\n\n private readonly readyCallbacks: ReaderReadyCallback[] = [];\n private readonly unloadCallbacks: ReaderUnloadCallback[] = [];\n\n private debugEnabled = false;\n private isReady = false;\n private removed = false;\n private mountToken = 0;\n\n private readerEventListener?: ReaderEventListener;\n private hostContainer: HTMLDivElement | null = null;\n private readerElement: HTMLElement | null = null;\n private readerId: string | null = null;\n private normalizedConfiguration: NormalizedReaderEmbedOptions | null = null;\n private sessionUser?: Parameters<IDocumentSDK['setSessionUser']>[0];\n private sessionData?: string;\n private license?: { license: string; feature: string };\n private readonly nativeEventCleanupCallbacks: Array<() => void> = [];\n private themeCleanup: ReaderThemeCleanup | null = null;\n\n constructor(options?: DocumentSDKRuntimeOptions) {\n this.bridge.configureTimeouts({\n readyTimeoutMs: options?.adapterReadyTimeoutMs,\n requestTimeoutMs: options?.adapterRequestTimeoutMs,\n });\n }\n\n readonly enableDebug: IDocumentSDK['enableDebug'] = (debug): void => {\n this.debugEnabled = debug;\n };\n\n readonly changeLanguage: IDocumentSDK['changeLanguage'] = (): void => {\n // Phase 1: reserved for future reader language bridging.\n };\n\n readonly setLicense: IDocumentSDK['setLicense'] = (license, feature): void => {\n this.license = { license, feature };\n };\n\n readonly setSessionUser: IDocumentSDK['setSessionUser'] = (userNameOrInfo): void => {\n this.sessionUser = userNameOrInfo;\n };\n\n readonly setSessionUserId: IDocumentSDK['setSessionUserId'] = (userId): void => {\n if (typeof this.sessionUser === 'string' || !this.sessionUser) {\n this.sessionUser = {\n userName: typeof this.sessionUser === 'string' ? this.sessionUser : '',\n userId,\n };\n return;\n }\n\n this.sessionUser = {\n ...this.sessionUser,\n userId,\n };\n };\n\n readonly setSessionData: IDocumentSDK['setSessionData'] = (sessionData): void => {\n this.sessionData = sessionData;\n };\n\n readonly isReaderReady: IDocumentSDK['isReaderReady'] = (): boolean => {\n return this.isReady;\n };\n\n readonly isReaderDestroyed: IDocumentSDK['isReaderDestroyed'] = (): boolean => {\n return this.removed && !this.isReady;\n };\n\n readonly addReaderReadyCallback: IDocumentSDK['addReaderReadyCallback'] = (callback): void => {\n this.readyCallbacks.push(callback);\n };\n\n readonly addReaderUnloadCallback: IDocumentSDK['addReaderUnloadCallback'] = (callback): void => {\n this.unloadCallbacks.push(callback);\n };\n\n readonly setReaderEventListener: IDocumentSDK['setReaderEventListener'] = (callback): void => {\n this.readerEventListener = callback;\n };\n\n readonly embedReader: IDocumentSDK['embedReader'] = (container, appUrl, configuration): void => {\n const hostContainer = resolveContainerElement(container);\n const normalizedAppUrl = normalizeAppUrl(appUrl);\n assertCompatibleReaderSource(normalizedAppUrl);\n\n const normalizedConfiguration = normalizeReaderEmbedOptions(normalizedAppUrl, configuration);\n const mountToken = this.mountToken + 1;\n\n this.removeReader();\n\n this.mountToken = mountToken;\n this.removed = false;\n this.hostContainer = hostContainer;\n this.normalizedConfiguration = normalizedConfiguration;\n\n void this.mountReader(hostContainer, normalizedConfiguration, mountToken);\n };\n\n readonly removeReader: IDocumentSDK['removeReader'] = (): void => {\n const hadMountedReader = Boolean(this.readerElement || this.hostContainer);\n\n this.mountToken += 1;\n this.cleanupNativeEventForwarders();\n this.cleanupThemeBinding();\n\n if (this.readerElement?.parentNode) {\n this.readerElement.parentNode.removeChild(this.readerElement);\n }\n\n this.readerElement = null;\n this.readerId = null;\n this.bridge.setReaderId(null);\n this.readerState.reset();\n this.hostContainer = null;\n this.normalizedConfiguration = null;\n this.isReady = false;\n this.removed = true;\n\n if (!hadMountedReader) {\n return;\n }\n\n const payload = createReaderPayload(null, null);\n this.emitReaderEvent(READER_UNLOAD_EVENT_NAME, payload);\n this.unloadCallbacks.forEach((callback) => callback());\n };\n\n readonly getDocumentTool: IDocumentSDK['getDocumentTool'] = (): DocumentTool => {\n return this.documentTool;\n };\n\n readonly getUITool: IDocumentSDK['getUITool'] = (): UITool => {\n return this.uiTool;\n };\n\n readonly getPageTool: IDocumentSDK['getPageTool'] = (): PageTool => {\n return this.pageTool;\n };\n\n readonly getFindTool: IDocumentSDK['getFindTool'] = (): FindTool => {\n return this.findTool;\n };\n\n readonly getSignServerTool: IDocumentSDK['getSignServerTool'] = (): SignServerTool => {\n return this.signServerTool;\n };\n\n readonly getDigitalSignTool: IDocumentSDK['getDigitalSignTool'] = (): DigitalSignTool => {\n return this.digitalSignTool;\n };\n\n readonly getReviewTool: IDocumentSDK['getReviewTool'] = (): ReviewTool => {\n return this.reviewTool;\n };\n\n readonly getEkeyTool: IDocumentSDK['getEkeyTool'] = (): EkeyTool => {\n return this.ekeyTool;\n };\n\n readonly getSymbologyTool: IDocumentSDK['getSymbologyTool'] = (): SymbologyTool => {\n return this.symbologyTool;\n };\n\n readonly getAnnotationTool: IDocumentSDK['getAnnotationTool'] = (): AnnotationTool => {\n return this.annotationTool;\n };\n\n readonly getTemplateSignTool: IDocumentSDK['getTemplateSignTool'] = (): TemplateSignTool => {\n return this.templateSignTool;\n };\n\n readonly getPdfFormFiller: IDocumentSDK['getPdfFormFiller'] = (): PdfFormFiller => {\n return this.pdfFormFiller;\n };\n\n readonly getExtensionTool: IDocumentSDK['getExtensionTool'] = (): ExtensionTool => {\n return this.extensionTool;\n };\n\n readonly getNetworkingTool: IDocumentSDK['getNetworkingTool'] = (): NetworkingTool => {\n return this.networkingTool;\n };\n\n readonly getCryptoTool: IDocumentSDK['getCryptoTool'] = (): CryptoTool => {\n return this.cryptoTool;\n };\n\n readonly createDigitalSignOptions: IDocumentSDK['createDigitalSignOptions'] = () => {\n return new DigitalSignOptions();\n };\n\n readonly createKVField: IDocumentSDK['createKVField'] = (key, value, description) => {\n return new KVField(key, value, description);\n };\n\n private createAnnotationTool(): AnnotationTool {\n return createBridgeToolAdapter<AnnotationTool>(\n 'annotation',\n {\n addAnnotationEventCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.annotationEvents.push(callback as AnnotationEventCallback);\n }\n },\n },\n addAnnotationPersistCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.annotationPersist.push(callback as (event: unknown) => void);\n }\n },\n },\n addAnnotationRetrieveCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.annotationRetrieve.push(callback as (event: unknown) => void);\n }\n },\n },\n addDigitalAnnotationRetrieveCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.digitalAnnotationRetrieve.push(\n callback as (annotations: IDigitalAnnotationInfo[]) => void,\n );\n }\n },\n },\n isInAnnotationMode: {\n kind: 'stateGetter',\n state: (state) => state.annotationEnabled,\n },\n getAnnotations: { kind: 'stateGetter', state: () => [] },\n getAnnotationsCount: { kind: 'stateGetter', state: () => 0 },\n queryAnnotationsBy: { kind: 'stateGetter', state: () => [] },\n setToolSource: { kind: 'command' },\n openAnnotationView: { kind: 'command' },\n closeAnnotationView: { kind: 'command' },\n openTextAnnotationView: { kind: 'command' },\n setTextAnnotationFontColor: { kind: 'command' },\n setTextAnnotationFontSize: { kind: 'command' },\n closeTextAnnotationView: { kind: 'command' },\n createTextAnnotation: { kind: 'command' },\n setPersistToDocument: { kind: 'command' },\n saveAnnotations: { kind: 'callbackQuery' },\n saveTextAnnotations: { kind: 'command' },\n clearAnnotations: { kind: 'command' },\n clearTextAnnotations: { kind: 'command' },\n undoAnnotation: { kind: 'command' },\n redoAnnotation: { kind: 'command' },\n selectAnnotationTool: { kind: 'command' },\n showAnnotationColorPicker: { kind: 'command' },\n setAnnotationPenType: { kind: 'command' },\n appendAnnotations: { kind: 'callbackQuery' },\n batchAppendAnnotations: { kind: 'callbackQuery' },\n setAnnotationPenColor: { kind: 'command' },\n setAnnotationPenWidth: { kind: 'command' },\n setAnnotationPenThickness: { kind: 'command' },\n enableAnnotationsInfoView: { kind: 'command' },\n enableAnnotationsDeletion: { kind: 'command' },\n enableAnnotationsDeletionOnlyByAuthor: { kind: 'command' },\n listDigitalStamps: { kind: 'command' },\n listAnnotations: { kind: 'command' },\n deleteAnnotationsBy: { kind: 'command' },\n deleteAnnotationsById: { kind: 'command' },\n addDigitalAnnotation: { kind: 'command' },\n addInkAnnotationCallback: { kind: 'callbackRegister' },\n },\n this.bridgeToolContext,\n );\n }\n\n private createExtensionTool(): ExtensionTool {\n return createBridgeToolAdapter<ExtensionTool>(\n 'extension',\n {\n addExtensionStateChangedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.extensionStateChanged.push(callback as ExtensionStateChangedCallback);\n }\n },\n },\n },\n this.bridgeToolContext,\n );\n }\n\n private readonly mountReader = async (\n hostContainer: HTMLDivElement,\n configuration: NormalizedReaderEmbedOptions,\n mountToken: number,\n ): Promise<void> => {\n try {\n await ensureReaderScriptLoaded(configuration.officeServer);\n if (this.mountToken !== mountToken) {\n return;\n }\n\n const readerElement = document.createElement(READER_CUSTOM_ELEMENT_TAG);\n const readerId = createReaderId();\n readerElement.setAttribute(RHC_OFFICE_READER_ID_ATTRIBUTE, readerId);\n this.readerId = readerId;\n this.bridge.setReaderId(readerId);\n applyReaderElementLayout(readerElement, configuration);\n this.themeCleanup = bindReaderElementTheme(readerElement, configuration);\n this.bindNativeReaderEvents(readerElement);\n\n hostContainer.replaceChildren(readerElement);\n this.readerElement = readerElement;\n await Promise.resolve();\n if (this.mountToken !== mountToken) {\n return;\n }\n\n if (configuration.scrollIntoView && typeof hostContainer.scrollIntoView === 'function') {\n hostContainer.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n this.isReady = true;\n const payload = createReaderPayload(readerElement, configuration);\n this.emitReaderEvent(READER_READY_EVENT_NAME, payload);\n this.readyCallbacks.forEach((callback) => callback());\n } catch (error: unknown) {\n if (this.mountToken !== mountToken) {\n return;\n }\n\n this.reportReaderError(error);\n }\n };\n\n private readonly bindNativeReaderEvents = (readerElement: HTMLElement): void => {\n this.cleanupNativeEventForwarders();\n\n const adapterEventListener = (event: Event): void => {\n const detail = event instanceof CustomEvent ? (event.detail as AdapterEvent) : null;\n if (!detail || detail.readerId !== this.readerId) {\n return;\n }\n\n this.readerState.update(detail.statePatch);\n this.callbacks.emit(detail.event, detail.payload);\n this.emitReaderEvent(detail.event, detail.payload as ReaderEventPayload);\n };\n readerElement.addEventListener(RHC_OFFICE_ADAPTER_EVENT, adapterEventListener as EventListener);\n this.nativeEventCleanupCallbacks.push(() => {\n readerElement.removeEventListener(\n RHC_OFFICE_ADAPTER_EVENT,\n adapterEventListener as EventListener,\n );\n });\n\n NATIVE_READER_EVENT_NAMES.forEach((eventName) => {\n const listener = (event: Event): void => {\n const payload = event instanceof CustomEvent ? event.detail : event;\n if (eventName === 'documentLoaded') {\n this.readerState.setDocumentOpened(true);\n }\n this.emitReaderEvent(eventName, payload);\n if (eventName === 'documentError') {\n this.emitReaderEvent(READER_ERROR_EVENT_NAME, payload);\n }\n };\n\n readerElement.addEventListener(eventName, listener as EventListener);\n this.nativeEventCleanupCallbacks.push(() => {\n readerElement.removeEventListener(eventName, listener as EventListener);\n });\n });\n };\n\n private readonly cleanupNativeEventForwarders = (): void => {\n this.nativeEventCleanupCallbacks.splice(0).forEach((callback) => callback());\n };\n\n private readonly cleanupThemeBinding = (): void => {\n this.themeCleanup?.();\n this.themeCleanup = null;\n };\n\n private readonly emitReaderEvent = (eventName: string, payload: unknown): void => {\n this.readerEventListener?.(eventName, payload as ReaderEventPayload);\n };\n\n private readonly reportReaderError = (error: unknown): void => {\n this.isReady = false;\n if (this.debugEnabled) {\n console.error('[RHC Office SDK] Reader mount failed', error);\n }\n\n this.emitReaderEvent(READER_ERROR_EVENT_NAME, error);\n };\n\n private readonly reportAdapterError = (error: unknown): void => {\n if (this.debugEnabled) {\n console.error('[RHC Office SDK] Adapter command failed', error);\n }\n\n this.emitReaderEvent(READER_ERROR_EVENT_NAME, error);\n };\n}\n\nexport const createNewDocumentSdk = (options?: DocumentSDKRuntimeOptions): IDocumentSDK => {\n return new DocumentSDK(options);\n};\n"],"names":["WatermarkDisplay","DEFAULT_EDGE_POSITION","DEFAULT_SIGNATURE_TYPE","DEFAULT_RSA_MODE","DIGITAL_SIGN_ENVIRONMENT_STORE_KEY","EMPTY_DIGITAL_SIGN_ENVIRONMENT","cloneDefaultsConfig","config","cloneSignServerConfig","cloneEnvironmentConfig","cloneEnvironmentPatch","patch","mergeDefaultsPatch","base","mergeSignServerPatch","mergeEnvironmentPatch","mergeEnvironmentPatchState","getGlobalScope","resolveRuntimeStore","globalScope","getDigitalSignEnvironment","initializeDigitalSignEnvironment","defaults","store","setDigitalSignEnvironment","patchDigitalSignEnvironment","resetDigitalSignEnvironment","DIGITAL_SIGN_DEFAULTS","normalizeParams","args","createBridgeToolAdapter","tool","descriptor","context","_target","property","methodDescriptor","adapterMethod","callback","arg","params","result","callbackArgs","_args","error","createNotImplementedBridgeTool","message","DOCUMENT_TOOL_DESCRIPTOR","callbacks","content","state","DocumentToolImpl","options","onDocumentOpened","uploadUrl","onSavedCallback","onDocumentContent","discardModify","onClose","serverUrl","FIND_TOOL_DESCRIPTOR","FindToolImpl","queryText","NETWORKING_TOOL_DESCRIPTOR","NetworkingToolImpl","headers","fields","createPageToolDescriptor","PageToolImpl","scale","r","g","b","alpha","pageIndex","x","y","rotation","PDF_FORM_FILLER_TOOL_DESCRIPTOR","PdfFormFillerImpl","filedName","value","readOnly","PAGE_RANGE_SEPARATOR_PATTERN","PAGE_BOUNDS_SEPARATOR_PATTERN","normalizePageNumber","parsedValue","expandPageRangeSegment","segment","bounds","pageNumber","startPage","endPage","_","index","parsePageRanges","pageRange","source","KVField","key","description","name","DigitalSignOptions","signType","position","text","signUserData","margin","reason","location","password","BOOK_VIEW_PAGE_MODES","createUIToolDescriptor","UIToolImpl","opt","menuId","visible","buttonId","buttonStyle","compact","normalizeTheme","theme","normalizedTheme","normalizeAppUrl","appUrl","normalizedUrl","createBootstrapUrl","normalizeReaderEmbedOptions","configuration","normalizedAppUrl","READER_CUSTOM_ELEMENT_TAG","READER_LOADER_REGISTRY_KEY","getReaderLoaderRegistry","browserGlobal","findScriptElementBySource","element","ReaderScriptLoadError","bootstrapUrl","ReaderSourceConflictError","activeAppUrl","requestedAppUrl","assertCompatibleReaderSource","registry","ensureReaderScriptLoaded","existingLoadPromise","resolvedPromise","existingScriptElement","loadPromise","resolve","reject","rejectScriptLoad","scriptElement","resolveWhenDefined","RHC_OFFICE_ADAPTER_PROTOCOL","RHC_OFFICE_ADAPTER_VERSION","RHC_OFFICE_ADAPTER_GLOBAL","RHC_OFFICE_ADAPTER_READY_EVENT","RHC_OFFICE_ADAPTER_EVENT","RHC_OFFICE_READER_ID_ATTRIBUTE","DEFAULT_REQUEST_TIMEOUT_MS","DEFAULT_READY_TIMEOUT_MS","createRequestId","cryptoApi","getAdapterGlobal","ReaderBridgeError","code","details","ReaderBridgeClient","readerId","method","response","adapter","request","timeoutMs","existingAdapter","timeoutId","cleanup","onReady","event","promise","requestId","DEFAULT_READER_STATE","ReaderStateStore","opened","SdkCallbackRegistry","payload","pagePayload","annotationPayload","extensionPayload","NATIVE_READER_EVENT_NAMES","READER_READY_EVENT_NAME","READER_UNLOAD_EVENT_NAME","READER_ERROR_EVENT_NAME","createReaderId","createReaderPayload","readerElement","resolveContainerElement","container","resolveSystemReaderTheme","supportsMatchMedia","addMediaQueryListener","mediaQuery","listener","compatibleMediaQuery","removeMediaQueryListener","applyReaderElementLayout","bindReaderElementTheme","configuredTheme","applySystemTheme","colorSchemeMediaQuery","contrastMediaQuery","handleThemeChange","DocumentSDK","debug","license","feature","userNameOrInfo","userId","sessionData","hostContainer","normalizedConfiguration","mountToken","hadMountedReader","adapterEventListener","detail","eventName","createNewDocumentSdk"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/api/watermark.ts","../src/api/digital-sign-environment.ts","../src/viewer/BridgeToolAdapter.ts","../src/tools/DocumentToolImpl.ts","../src/tools/FindToolImpl.ts","../src/tools/NetworkingToolImpl.ts","../src/tools/PageToolImpl.ts","../src/tools/PdfFormFillerImpl.ts","../src/tools/SDKValueObjects.ts","../src/tools/UIToolImpl.ts","../src/viewer/ReaderConfiguration.ts","../src/viewer/ReaderScriptLoader.ts","../src/viewer/AdapterProtocol.ts","../src/viewer/ReaderBridgeClient.ts","../src/viewer/ReaderStateStore.ts","../src/viewer/SdkCallbackRegistry.ts","../src/viewer/DocumentSDK.ts"],"sourcesContent":["export interface IWatermarkTextStyle {\n size?: number;\n color?: string;\n compact?: boolean;\n rotation?: number;\n opacity?: number;\n\n hex(color: string): IWatermarkTextStyle;\n\n rgb(r: number, g: number, b: number): IWatermarkTextStyle;\n\n rgba(r: number, g: number, b: number, a: number): IWatermarkTextStyle;\n}\n\nexport enum WatermarkDisplay {\n DEFAULT = 'default',\n COMPACT = 'compact',\n HIDE = 'none',\n}\n\nexport interface IWatermark {\n text?: string;\n\n sparseRatio?: number;\n\n display?: WatermarkDisplay;\n\n config?: IWatermarkTextStyle;\n\n setDisplay(display: WatermarkDisplay): void;\n\n setText(text: string, style?: IWatermarkTextStyle): void;\n\n setSparseRatio(sparseRatio: number): void;\n}\n","export type SignServerAuthSource = 'Password' | 'USBKey' | 'KolKey' | 'Token';\nexport type DigitalSignRsaMode = 'auto' | 'rsa' | 'sm2';\nexport type SigningDeviceType = 'client' | 'bjca' | 'plugin' | 'kol' | 'hsm' | string;\nexport type EdgePosition =\n | 'LEFT_TOP'\n | 'LEFT_CENTER'\n | 'LEFT_BOTTOM'\n | 'RIGHT_TOP'\n | 'RIGHT_CENTER'\n | 'RIGHT_BOTTOM'\n | string;\nexport type SignatureType = 'REGULAR_ESM' | 'OFCRYPTO_ESM' | string;\n\nconst DEFAULT_EDGE_POSITION = 'RIGHT_CENTER' as EdgePosition;\nconst DEFAULT_SIGNATURE_TYPE = 'REGULAR_ESM' as SignatureType;\nconst DEFAULT_RSA_MODE: DigitalSignRsaMode = 'auto';\n\nexport interface DigitalSignSignServerConfig {\n authSource: SignServerAuthSource;\n defaultLogin: string;\n defaultPassword: string;\n defaultServer: string;\n kol: {\n appId: string;\n appName: string;\n serviceUrl: string;\n token: string;\n };\n macAddress: string;\n token: string;\n usbKey: {\n checkCertificateBinding: boolean;\n usbKeyType: number;\n };\n}\n\nexport interface DigitalSignDefaultsConfig {\n bjca: {\n pin: string;\n };\n deviceType: SigningDeviceType;\n edgePosition: EdgePosition;\n kol: {\n appId: string;\n appName: string;\n pin: string;\n serviceUrl: string;\n token: string;\n };\n plugin: {\n pin: string;\n usbKeyType: number;\n };\n rsaMode: DigitalSignRsaMode;\n signatureType: SignatureType;\n}\n\nexport interface DigitalSignEnvironmentConfig {\n defaults: DigitalSignDefaultsConfig;\n signServer: DigitalSignSignServerConfig;\n}\n\nexport interface DigitalSignDefaultsPatch {\n bjca?: {\n pin?: string;\n };\n deviceType?: SigningDeviceType;\n edgePosition?: EdgePosition;\n kol?: {\n appId?: string;\n appName?: string;\n pin?: string;\n serviceUrl?: string;\n token?: string;\n };\n plugin?: {\n pin?: string;\n usbKeyType?: number;\n };\n rsaMode?: DigitalSignRsaMode;\n signatureType?: SignatureType;\n}\n\nexport interface DigitalSignSignServerPatch {\n authSource?: SignServerAuthSource;\n defaultLogin?: string;\n defaultPassword?: string;\n defaultServer?: string;\n kol?: {\n appId?: string;\n appName?: string;\n serviceUrl?: string;\n token?: string;\n };\n macAddress?: string;\n token?: string;\n usbKey?: {\n checkCertificateBinding?: boolean;\n usbKeyType?: number;\n };\n}\n\nexport interface DigitalSignEnvironmentPatch {\n defaults?: DigitalSignDefaultsPatch;\n signServer?: DigitalSignSignServerPatch;\n}\n\ninterface DigitalSignEnvironmentRuntimeStore {\n current: DigitalSignEnvironmentConfig;\n defaults: DigitalSignEnvironmentConfig;\n overrides: DigitalSignEnvironmentPatch;\n}\n\nconst DIGITAL_SIGN_ENVIRONMENT_STORE_KEY = '__RHC_OFFICE_DIGITAL_SIGN_ENVIRONMENT__';\n\nconst EMPTY_DIGITAL_SIGN_ENVIRONMENT: DigitalSignEnvironmentConfig = {\n defaults: {\n bjca: {\n pin: '',\n },\n deviceType: 'client',\n edgePosition: DEFAULT_EDGE_POSITION,\n kol: {\n appId: '',\n appName: '',\n pin: '',\n serviceUrl: '',\n token: '',\n },\n plugin: {\n pin: '',\n usbKeyType: 14,\n },\n rsaMode: DEFAULT_RSA_MODE,\n signatureType: DEFAULT_SIGNATURE_TYPE,\n },\n signServer: {\n authSource: 'Password',\n defaultLogin: '',\n defaultPassword: '',\n defaultServer: '',\n kol: {\n appId: '',\n appName: '',\n serviceUrl: '',\n token: '',\n },\n macAddress: '',\n token: '',\n usbKey: {\n checkCertificateBinding: false,\n usbKeyType: 14,\n },\n },\n};\n\nconst cloneDefaultsConfig = (config: DigitalSignDefaultsConfig): DigitalSignDefaultsConfig => {\n return {\n bjca: {\n pin: config.bjca.pin,\n },\n deviceType: config.deviceType,\n edgePosition: config.edgePosition,\n kol: {\n appId: config.kol.appId,\n appName: config.kol.appName,\n pin: config.kol.pin,\n serviceUrl: config.kol.serviceUrl,\n token: config.kol.token,\n },\n plugin: {\n pin: config.plugin.pin,\n usbKeyType: config.plugin.usbKeyType,\n },\n rsaMode: config.rsaMode,\n signatureType: config.signatureType,\n };\n};\n\nconst cloneSignServerConfig = (\n config: DigitalSignSignServerConfig,\n): DigitalSignSignServerConfig => {\n return {\n authSource: config.authSource,\n defaultLogin: config.defaultLogin,\n defaultPassword: config.defaultPassword,\n defaultServer: config.defaultServer,\n kol: {\n appId: config.kol.appId,\n appName: config.kol.appName,\n serviceUrl: config.kol.serviceUrl,\n token: config.kol.token,\n },\n macAddress: config.macAddress,\n token: config.token,\n usbKey: {\n checkCertificateBinding: config.usbKey.checkCertificateBinding,\n usbKeyType: config.usbKey.usbKeyType,\n },\n };\n};\n\nconst cloneEnvironmentConfig = (\n config: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n return {\n defaults: cloneDefaultsConfig(config.defaults),\n signServer: cloneSignServerConfig(config.signServer),\n };\n};\n\nconst cloneEnvironmentPatch = (patch: DigitalSignEnvironmentPatch): DigitalSignEnvironmentPatch => {\n return {\n defaults: patch.defaults\n ? {\n ...patch.defaults,\n bjca: patch.defaults.bjca ? { ...patch.defaults.bjca } : undefined,\n kol: patch.defaults.kol ? { ...patch.defaults.kol } : undefined,\n plugin: patch.defaults.plugin ? { ...patch.defaults.plugin } : undefined,\n }\n : undefined,\n signServer: patch.signServer\n ? {\n ...patch.signServer,\n kol: patch.signServer.kol ? { ...patch.signServer.kol } : undefined,\n usbKey: patch.signServer.usbKey ? { ...patch.signServer.usbKey } : undefined,\n }\n : undefined,\n };\n};\n\nconst mergeDefaultsPatch = (\n base: DigitalSignDefaultsConfig,\n patch?: DigitalSignEnvironmentPatch['defaults'],\n): DigitalSignDefaultsConfig => {\n if (!patch) {\n return cloneDefaultsConfig(base);\n }\n\n return {\n bjca: {\n pin: patch.bjca?.pin ?? base.bjca.pin,\n },\n deviceType: patch.deviceType ?? base.deviceType,\n edgePosition: patch.edgePosition ?? base.edgePosition,\n kol: {\n appId: patch.kol?.appId ?? base.kol.appId,\n appName: patch.kol?.appName ?? base.kol.appName,\n pin: patch.kol?.pin ?? base.kol.pin,\n serviceUrl: patch.kol?.serviceUrl ?? base.kol.serviceUrl,\n token: patch.kol?.token ?? base.kol.token,\n },\n plugin: {\n pin: patch.plugin?.pin ?? base.plugin.pin,\n usbKeyType: patch.plugin?.usbKeyType ?? base.plugin.usbKeyType,\n },\n rsaMode: patch.rsaMode ?? base.rsaMode,\n signatureType: patch.signatureType ?? base.signatureType,\n };\n};\n\nconst mergeSignServerPatch = (\n base: DigitalSignSignServerConfig,\n patch?: DigitalSignEnvironmentPatch['signServer'],\n): DigitalSignSignServerConfig => {\n if (!patch) {\n return cloneSignServerConfig(base);\n }\n\n return {\n authSource: patch.authSource ?? base.authSource,\n defaultLogin: patch.defaultLogin ?? base.defaultLogin,\n defaultPassword: patch.defaultPassword ?? base.defaultPassword,\n defaultServer: patch.defaultServer ?? base.defaultServer,\n kol: {\n appId: patch.kol?.appId ?? base.kol.appId,\n appName: patch.kol?.appName ?? base.kol.appName,\n serviceUrl: patch.kol?.serviceUrl ?? base.kol.serviceUrl,\n token: patch.kol?.token ?? base.kol.token,\n },\n macAddress: patch.macAddress ?? base.macAddress,\n token: patch.token ?? base.token,\n usbKey: {\n checkCertificateBinding:\n patch.usbKey?.checkCertificateBinding ?? base.usbKey.checkCertificateBinding,\n usbKeyType: patch.usbKey?.usbKeyType ?? base.usbKey.usbKeyType,\n },\n };\n};\n\nconst mergeEnvironmentPatch = (\n base: DigitalSignEnvironmentConfig,\n patch: DigitalSignEnvironmentPatch,\n): DigitalSignEnvironmentConfig => {\n return {\n defaults: mergeDefaultsPatch(base.defaults, patch.defaults),\n signServer: mergeSignServerPatch(base.signServer, patch.signServer),\n };\n};\n\nconst mergeEnvironmentPatchState = (\n base: DigitalSignEnvironmentPatch,\n patch: DigitalSignEnvironmentPatch,\n): DigitalSignEnvironmentPatch => {\n return {\n defaults:\n base.defaults || patch.defaults\n ? {\n ...base.defaults,\n ...patch.defaults,\n bjca: {\n ...(base.defaults?.bjca ?? {}),\n ...(patch.defaults?.bjca ?? {}),\n },\n kol: {\n ...(base.defaults?.kol ?? {}),\n ...(patch.defaults?.kol ?? {}),\n },\n plugin: {\n ...(base.defaults?.plugin ?? {}),\n ...(patch.defaults?.plugin ?? {}),\n },\n }\n : undefined,\n signServer:\n base.signServer || patch.signServer\n ? {\n ...base.signServer,\n ...patch.signServer,\n kol: {\n ...(base.signServer?.kol ?? {}),\n ...(patch.signServer?.kol ?? {}),\n },\n usbKey: {\n ...(base.signServer?.usbKey ?? {}),\n ...(patch.signServer?.usbKey ?? {}),\n },\n }\n : undefined,\n };\n};\n\nconst getGlobalScope = (): typeof globalThis & {\n [DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]?: DigitalSignEnvironmentRuntimeStore;\n} => {\n return globalThis as typeof globalThis & {\n [DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]?: DigitalSignEnvironmentRuntimeStore;\n };\n};\n\nconst resolveRuntimeStore = (): DigitalSignEnvironmentRuntimeStore => {\n const globalScope = getGlobalScope();\n if (!globalScope[DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]) {\n globalScope[DIGITAL_SIGN_ENVIRONMENT_STORE_KEY] = {\n current: cloneEnvironmentConfig(EMPTY_DIGITAL_SIGN_ENVIRONMENT),\n defaults: cloneEnvironmentConfig(EMPTY_DIGITAL_SIGN_ENVIRONMENT),\n overrides: {},\n };\n }\n\n return globalScope[DIGITAL_SIGN_ENVIRONMENT_STORE_KEY]!;\n};\n\nexport const getDigitalSignEnvironment = (): DigitalSignEnvironmentConfig => {\n return resolveRuntimeStore().current;\n};\n\nexport const initializeDigitalSignEnvironment = (\n defaults: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n store.defaults = cloneEnvironmentConfig(defaults);\n store.current = mergeEnvironmentPatch(store.defaults, store.overrides);\n return store.current;\n};\n\nexport const setDigitalSignEnvironment = (\n config: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n store.current = cloneEnvironmentConfig(config);\n store.overrides = cloneEnvironmentPatch(config);\n return store.current;\n};\n\nexport const patchDigitalSignEnvironment = (\n patch: DigitalSignEnvironmentPatch,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n store.overrides = mergeEnvironmentPatchState(store.overrides, cloneEnvironmentPatch(patch));\n store.current = mergeEnvironmentPatch(store.current, patch);\n return store.current;\n};\n\nexport const resetDigitalSignEnvironment = (\n defaults?: DigitalSignEnvironmentConfig,\n): DigitalSignEnvironmentConfig => {\n const store = resolveRuntimeStore();\n if (defaults) {\n store.defaults = cloneEnvironmentConfig(defaults);\n }\n store.overrides = {};\n store.current = cloneEnvironmentConfig(store.defaults);\n return store.current;\n};\n\nexport const DIGITAL_SIGN_DEFAULTS = {\n EDGE_POSITION: DEFAULT_EDGE_POSITION,\n RSA_MODE: DEFAULT_RSA_MODE,\n SIGNATURE_TYPE: DEFAULT_SIGNATURE_TYPE,\n} as const;\n","import type { AdapterToolName } from './AdapterProtocol';\nimport type { ReaderBridgeClient } from './ReaderBridgeClient';\nimport type { SdkCallbackRegistry } from './SdkCallbackRegistry';\nimport type { ReaderStateStore } from './ReaderStateStore';\n\nexport type BridgeMethodKind =\n | 'callbackQuery'\n | 'callbackRegister'\n | 'command'\n | 'query'\n | 'stateGetter';\n\nexport interface BridgeToolMethodDescriptor {\n adapterMethod?: string;\n callback?: (callbacks: SdkCallbackRegistry, args: unknown[]) => void;\n mapCallbackResult?: (result: unknown) => unknown[];\n kind: BridgeMethodKind;\n state?: (state: ReturnType<ReaderStateStore['snapshot']>, args: unknown[]) => unknown;\n}\n\nexport type BridgeToolDescriptor = Record<string, BridgeToolMethodDescriptor>;\n\nexport interface BridgeToolAdapterContext {\n bridge: ReaderBridgeClient;\n callbacks: SdkCallbackRegistry;\n debug: () => boolean;\n onAsyncError: (error: unknown) => void;\n state: ReaderStateStore;\n}\n\nconst normalizeParams = (args: unknown[]): unknown => {\n if (args.length === 0) {\n return undefined;\n }\n\n if (args.length === 1) {\n return args[0];\n }\n\n return args;\n};\n\nexport const createBridgeToolAdapter = <T extends object>(\n tool: AdapterToolName,\n descriptor: BridgeToolDescriptor,\n context: BridgeToolAdapterContext,\n): T => {\n return new Proxy(\n {},\n {\n get: (_target, property): unknown => {\n if (property === 'then') {\n return undefined;\n }\n\n if (typeof property === 'symbol') {\n if (property === Symbol.toStringTag) {\n return tool;\n }\n\n return undefined;\n }\n\n const methodDescriptor = descriptor[property];\n if (!methodDescriptor) {\n return (..._args: unknown[]) => {\n const error = new Error(`${tool}.${property} is not implemented by the SDK adapter.`);\n context.onAsyncError(error);\n };\n }\n\n return (...args: unknown[]) => {\n if (methodDescriptor.kind === 'callbackRegister') {\n methodDescriptor.callback?.(context.callbacks, args);\n return undefined;\n }\n\n if (methodDescriptor.kind === 'stateGetter') {\n return methodDescriptor.state?.(context.state.snapshot(), args);\n }\n\n const adapterMethod = methodDescriptor.adapterMethod ?? property;\n\n if (methodDescriptor.kind === 'query') {\n return context.bridge.request(tool, adapterMethod, normalizeParams(args));\n }\n\n if (methodDescriptor.kind === 'callbackQuery') {\n const callback = args.find((arg) => typeof arg === 'function') as\n | ((...values: unknown[]) => void)\n | undefined;\n const params = args.filter((arg) => typeof arg !== 'function');\n void context.bridge\n .request(tool, adapterMethod, normalizeParams(params))\n .then((result) => {\n const callbackArgs = methodDescriptor.mapCallbackResult?.(result) ?? [result];\n callback?.(...callbackArgs);\n })\n .catch(context.onAsyncError);\n return undefined;\n }\n\n void context.bridge\n .request(tool, adapterMethod, normalizeParams(args))\n .catch(context.onAsyncError);\n return undefined;\n };\n },\n },\n ) as T;\n};\n\nexport const createNotImplementedBridgeTool = <T extends object>(\n tool: AdapterToolName,\n context: BridgeToolAdapterContext,\n): T => {\n return new Proxy(\n {},\n {\n get: (_target, property): unknown => {\n if (property === 'then') {\n return undefined;\n }\n\n if (typeof property === 'symbol') {\n return undefined;\n }\n\n return (..._args: unknown[]) => {\n const message = `${tool}.${property} is not implemented by the SDK adapter.`;\n context.onAsyncError(new Error(message));\n return undefined;\n };\n },\n },\n ) as T;\n};\n","import type { DocumentClosedCallback, DocumentSavedCallback } from '../api/callbacks';\nimport type { DocumentTool } from '../api/document-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst DOCUMENT_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n addDocumentOpenedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.documentOpened.push(callback as (status: string, error: string) => void);\n }\n },\n },\n addDocumentSavedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.documentSaved.push(callback as DocumentSavedCallback);\n }\n },\n },\n addDocumentClosedCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.documentClosed.push(callback as DocumentClosedCallback);\n }\n },\n },\n openPDFDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openPdfDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openOFDDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openOfdDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openOfficeDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openImageDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openTextDocument: { kind: 'callbackQuery', adapterMethod: 'open' },\n openFromLocalStorage: { kind: 'command' },\n setUploadUrl: { kind: 'command' },\n save: { kind: 'callbackQuery' },\n saveAs: { kind: 'query' },\n getDocumentContent: {\n kind: 'callbackQuery',\n mapCallbackResult: (result) => {\n const content = result as { fileCacheId?: string; fileBuffer?: ArrayBuffer };\n return [content?.fileCacheId, content?.fileBuffer];\n },\n },\n closeDocument: { kind: 'callbackQuery' },\n isDocumentOpened: {\n kind: 'stateGetter',\n state: (state) => state.documentOpened,\n },\n isDocumentModified: {\n kind: 'stateGetter',\n state: (state) => state.documentModified,\n },\n print: { kind: 'command' },\n createPreview: { kind: 'command' },\n};\n\nexport class DocumentToolImpl implements DocumentTool {\n private readonly adapter: DocumentTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<DocumentTool>(\n 'document',\n DOCUMENT_TOOL_DESCRIPTOR,\n context,\n );\n }\n\n addDocumentOpenedCallback: DocumentTool['addDocumentOpenedCallback'] = (callback) => {\n return this.adapter.addDocumentOpenedCallback(callback);\n };\n\n addDocumentSavedCallback: DocumentTool['addDocumentSavedCallback'] = (callback) => {\n return this.adapter.addDocumentSavedCallback(callback);\n };\n\n addDocumentClosedCallback: DocumentTool['addDocumentClosedCallback'] = (callback) => {\n return this.adapter.addDocumentClosedCallback(callback);\n };\n\n openPDFDocument: DocumentTool['openPDFDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openPDFDocument(options, onDocumentOpened);\n };\n\n openPdfDocument: DocumentTool['openPdfDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openPdfDocument(options, onDocumentOpened);\n };\n\n openOFDDocument: DocumentTool['openOFDDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openOFDDocument(options, onDocumentOpened);\n };\n\n openOfdDocument: DocumentTool['openOfdDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openOfdDocument(options, onDocumentOpened);\n };\n\n openOfficeDocument: DocumentTool['openOfficeDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openOfficeDocument(options, onDocumentOpened);\n };\n\n openImageDocument: DocumentTool['openImageDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openImageDocument(options, onDocumentOpened);\n };\n\n openTextDocument: DocumentTool['openTextDocument'] = (options, onDocumentOpened) => {\n return this.adapter.openTextDocument(options, onDocumentOpened);\n };\n\n openFromLocalStorage: DocumentTool['openFromLocalStorage'] = () => {\n return this.adapter.openFromLocalStorage();\n };\n\n setUploadUrl: DocumentTool['setUploadUrl'] = (uploadUrl) => {\n return this.adapter.setUploadUrl(uploadUrl);\n };\n\n save: DocumentTool['save'] = (uploadUrl, onSavedCallback, options) => {\n return this.adapter.save(uploadUrl, onSavedCallback, options);\n };\n\n saveAs: DocumentTool['saveAs'] = (options) => {\n return this.adapter.saveAs(options);\n };\n\n getDocumentContent: DocumentTool['getDocumentContent'] = (onDocumentContent) => {\n return this.adapter.getDocumentContent(onDocumentContent);\n };\n\n closeDocument: DocumentTool['closeDocument'] = (discardModify, onClose, options) => {\n return this.adapter.closeDocument(discardModify, onClose, options);\n };\n\n isDocumentOpened: DocumentTool['isDocumentOpened'] = () => {\n return this.adapter.isDocumentOpened();\n };\n\n isDocumentModified: DocumentTool['isDocumentModified'] = () => {\n return this.adapter.isDocumentModified();\n };\n\n print: DocumentTool['print'] = () => {\n return this.adapter.print();\n };\n\n createPreview: DocumentTool['createPreview'] = (serverUrl, options) => {\n return this.adapter.createPreview(serverUrl, options);\n };\n}\n","import type { FindTool } from '../api/find-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst FIND_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n clearFind: { kind: 'command' },\n findNext: { kind: 'command' },\n findPrevious: { kind: 'command' },\n};\n\nexport class FindToolImpl implements FindTool {\n private readonly adapter: FindTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<FindTool>('find', FIND_TOOL_DESCRIPTOR, context);\n }\n\n clearFind: FindTool['clearFind'] = () => {\n return this.adapter.clearFind();\n };\n\n findNext: FindTool['findNext'] = (queryText) => {\n return this.adapter.findNext(queryText);\n };\n\n findPrevious: FindTool['findPrevious'] = (queryText) => {\n return this.adapter.findPrevious(queryText);\n };\n}\n","import type { NetworkingTool } from '../api/networking-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst NETWORKING_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n configFileUpload: { kind: 'command' },\n setHttpHeaders: { kind: 'command' },\n setHttpFormFields: { kind: 'command' },\n};\n\nexport class NetworkingToolImpl implements NetworkingTool {\n private readonly adapter: NetworkingTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<NetworkingTool>(\n 'networking',\n NETWORKING_TOOL_DESCRIPTOR,\n context,\n );\n }\n\n configFileUpload: NetworkingTool['configFileUpload'] = (options) => {\n return this.adapter.configFileUpload(options);\n };\n\n setHttpHeaders: NetworkingTool['setHttpHeaders'] = (headers) => {\n return this.adapter.setHttpHeaders(headers);\n };\n\n setHttpFormFields: NetworkingTool['setHttpFormFields'] = (fields) => {\n return this.adapter.setHttpFormFields(fields);\n };\n}\n","import type {\n PageChangeCallback,\n PageCountCallback,\n PageIndexGetCallback,\n PageModeChangeCallback,\n} from '../api/callbacks';\nimport type { PageTool } from '../api/page-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst createPageToolDescriptor = (context: BridgeToolAdapterContext): BridgeToolDescriptor => ({\n addPageChangeCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.pageChange.push(callback as PageChangeCallback);\n }\n },\n },\n addPageModeChangeCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.pageModeChange.push(callback as PageModeChangeCallback);\n }\n },\n },\n getPageCount: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n void callbacks;\n const callback = args[0];\n if (typeof callback === 'function') {\n (callback as PageCountCallback)(context.state.snapshot().pageCount);\n }\n },\n },\n getPageIndex: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n void callbacks;\n const callback = args[0];\n if (typeof callback === 'function') {\n (callback as PageIndexGetCallback)(context.state.snapshot().pageIndex);\n }\n },\n },\n setSinglePageViewMode: { kind: 'command' },\n setTwoPagesViewMode: { kind: 'command' },\n setPageScrollVertical: { kind: 'command' },\n setPageScrollHorizontal: { kind: 'command' },\n setPageCursorPanDrag: { kind: 'command' },\n setPageCursorTextSelect: { kind: 'command' },\n rotateCW: { kind: 'command' },\n rotateCCW: { kind: 'command' },\n autoFitPage: { kind: 'command' },\n fitPageSize: { kind: 'command' },\n fitPageWidth: { kind: 'command' },\n fitPageHeight: { kind: 'command' },\n increasePageScale: { kind: 'command' },\n decreasePageScale: { kind: 'command' },\n setPageScale: { kind: 'command' },\n setPageBlendColor: { kind: 'command' },\n gotoPage: { kind: 'command' },\n gotoNextPage: { kind: 'command' },\n gotoPreviousPage: { kind: 'command' },\n rotatePage: { kind: 'command' },\n});\n\nexport class PageToolImpl implements PageTool {\n private readonly adapter: PageTool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<PageTool>(\n 'page',\n createPageToolDescriptor(context),\n context,\n );\n }\n\n addPageChangeCallback: PageTool['addPageChangeCallback'] = (callback) => {\n return this.adapter.addPageChangeCallback(callback);\n };\n\n addPageModeChangeCallback: PageTool['addPageModeChangeCallback'] = (callback) => {\n return this.adapter.addPageModeChangeCallback(callback);\n };\n\n getPageCount: PageTool['getPageCount'] = (callback) => {\n return this.adapter.getPageCount(callback);\n };\n\n getPageIndex: PageTool['getPageIndex'] = (callback) => {\n return this.adapter.getPageIndex(callback);\n };\n\n setSinglePageViewMode: PageTool['setSinglePageViewMode'] = () => {\n return this.adapter.setSinglePageViewMode();\n };\n\n setTwoPagesViewMode: PageTool['setTwoPagesViewMode'] = () => {\n return this.adapter.setTwoPagesViewMode();\n };\n\n setPageScrollVertical: PageTool['setPageScrollVertical'] = () => {\n return this.adapter.setPageScrollVertical();\n };\n\n setPageScrollHorizontal: PageTool['setPageScrollHorizontal'] = () => {\n return this.adapter.setPageScrollHorizontal();\n };\n\n setPageCursorPanDrag: PageTool['setPageCursorPanDrag'] = () => {\n return this.adapter.setPageCursorPanDrag();\n };\n\n setPageCursorTextSelect: PageTool['setPageCursorTextSelect'] = () => {\n return this.adapter.setPageCursorTextSelect();\n };\n\n rotateCW: PageTool['rotateCW'] = () => {\n return this.adapter.rotateCW();\n };\n\n rotateCCW: PageTool['rotateCCW'] = () => {\n return this.adapter.rotateCCW();\n };\n\n autoFitPage: PageTool['autoFitPage'] = () => {\n return this.adapter.autoFitPage();\n };\n\n fitPageSize: PageTool['fitPageSize'] = () => {\n return this.adapter.fitPageSize();\n };\n\n fitPageWidth: PageTool['fitPageWidth'] = () => {\n return this.adapter.fitPageWidth();\n };\n\n fitPageHeight: PageTool['fitPageHeight'] = () => {\n return this.adapter.fitPageHeight();\n };\n\n increasePageScale: PageTool['increasePageScale'] = () => {\n return this.adapter.increasePageScale();\n };\n\n decreasePageScale: PageTool['decreasePageScale'] = () => {\n return this.adapter.decreasePageScale();\n };\n\n setPageScale: PageTool['setPageScale'] = (scale) => {\n return this.adapter.setPageScale(scale);\n };\n\n setPageBlendColor: PageTool['setPageBlendColor'] = (r, g, b, alpha) => {\n return this.adapter.setPageBlendColor(r, g, b, alpha);\n };\n\n gotoPage: PageTool['gotoPage'] = (pageIndex, x, y) => {\n return this.adapter.gotoPage(pageIndex, x, y);\n };\n\n gotoNextPage: PageTool['gotoNextPage'] = () => {\n return this.adapter.gotoNextPage();\n };\n\n gotoPreviousPage: PageTool['gotoPreviousPage'] = () => {\n return this.adapter.gotoPreviousPage();\n };\n\n rotatePage: PageTool['rotatePage'] = (rotation) => {\n return this.adapter.rotatePage(rotation);\n };\n}\n","import type { PdfFormFiller } from '../api/pdf-formfiller';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\ninterface PdfFormKeyValueField {\n key: string;\n value: string;\n}\n\nconst PDF_FORM_FILLER_TOOL_DESCRIPTOR: BridgeToolDescriptor = {\n open: { kind: 'command' },\n setFormFieldValue: { kind: 'command' },\n setFormFieldReadonly: { kind: 'command' },\n commit: {\n kind: 'callbackQuery',\n mapCallbackResult: () => [],\n },\n clear: {\n kind: 'callbackQuery',\n mapCallbackResult: () => [],\n },\n toKeyValue: {\n kind: 'callbackQuery',\n mapCallbackResult: (result) => {\n return [Array.isArray(result) ? (result as PdfFormKeyValueField[]) : []];\n },\n },\n};\n\nexport class PdfFormFillerImpl implements PdfFormFiller {\n private readonly adapter: PdfFormFiller;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<PdfFormFiller>(\n 'pdfFormFiller',\n PDF_FORM_FILLER_TOOL_DESCRIPTOR,\n context,\n );\n }\n\n open: PdfFormFiller['open'] = () => {\n return this.adapter.open();\n };\n\n setFormFieldValue: PdfFormFiller['setFormFieldValue'] = (filedName, value) => {\n return this.adapter.setFormFieldValue(filedName, value);\n };\n\n setFormFieldReadonly: PdfFormFiller['setFormFieldReadonly'] = (filedName, readOnly) => {\n return this.adapter.setFormFieldReadonly(filedName, readOnly);\n };\n\n commit: PdfFormFiller['commit'] = (callback) => {\n return this.adapter.commit(callback);\n };\n\n clear: PdfFormFiller['clear'] = (callback) => {\n return this.adapter.clear(callback);\n };\n\n toKeyValue: PdfFormFiller['toKeyValue'] = (callback) => {\n return this.adapter.toKeyValue(callback);\n };\n}\n","import type {\n DigitalSealPosition,\n DigitalSignType,\n IDigitalSignOptions,\n IKVField,\n} from '../api/common';\n\nconst PAGE_RANGE_SEPARATOR_PATTERN = /\\s*,\\s*/;\nconst PAGE_BOUNDS_SEPARATOR_PATTERN = /\\s*-\\s*/;\n\nconst normalizePageNumber = (value: string): number | null => {\n const parsedValue = Number.parseInt(value.trim(), 10);\n if (!Number.isFinite(parsedValue) || parsedValue <= 0) {\n return null;\n }\n\n return parsedValue;\n};\n\nconst expandPageRangeSegment = (segment: string): number[] => {\n const bounds = segment.split(PAGE_BOUNDS_SEPARATOR_PATTERN);\n if (bounds.length === 1) {\n const pageNumber = normalizePageNumber(bounds[0] ?? '');\n return pageNumber ? [pageNumber] : [];\n }\n\n const startPage = normalizePageNumber(bounds[0] ?? '');\n const endPage = normalizePageNumber(bounds[1] ?? '');\n if (!startPage || !endPage || endPage < startPage) {\n return [];\n }\n\n return Array.from({ length: endPage - startPage + 1 }, (_, index) => startPage + index);\n};\n\nconst parsePageRanges = (pageRange?: string): number[] => {\n if (!pageRange) {\n return [];\n }\n\n const pageNumbers = pageRange\n .split(PAGE_RANGE_SEPARATOR_PATTERN)\n .flatMap((segment) => expandPageRangeSegment(segment))\n .filter((value, index, source) => source.indexOf(value) === index);\n\n return pageNumbers;\n};\n\nexport class KVField implements IKVField {\n key?: string;\n value?: string;\n description?: string;\n\n constructor(key: string, value: string, description?: string) {\n this.key = key;\n this.value = value;\n this.description = description;\n }\n\n readonly setFieldName = (name: string): void => {\n this.key = name;\n };\n\n readonly setFieldValue = (value: string): void => {\n this.value = value;\n };\n\n readonly setDescription = (description?: string): void => {\n this.description = description;\n };\n}\n\nexport class DigitalSignOptions implements IDigitalSignOptions {\n pageRange?: string;\n page?: number;\n pageX?: number;\n pageY?: number;\n signReason?: string;\n signLocation?: string;\n signUserData?: string;\n fields: IKVField[] = [];\n defaultStampPassword?: string;\n defaultKeystorePassword?: string;\n keywordText?: string | undefined;\n keywordTextFixedPositions:\n | {\n pageIndex?: number;\n firstOccurrence?: boolean;\n position?: number;\n }[]\n | undefined = undefined;\n keywordOffsetX = 0;\n keywordOffsetY = 0;\n bookmarkName?: string | undefined;\n bookmarkOffsetX = 0;\n bookmarkOffsetY = 0;\n printMargin?: number = 0;\n grayscaleSealImage = false;\n\n private signType: DigitalSignType = 0;\n private sealPosition: DigitalSealPosition = 0;\n\n readonly getSignType = (): DigitalSignType => {\n return this.signType;\n };\n\n readonly setSignType = (signType: DigitalSignType): void => {\n this.signType = signType;\n };\n\n readonly isCrossPageSideSign = (): boolean => {\n return this.signType === 2 || this.signType === 3;\n };\n\n readonly getSealPosition = (): DigitalSealPosition => {\n return this.sealPosition;\n };\n\n readonly setSignOnPageSides = (signType: number): void => {\n if (signType >= 0 && signType <= 3) {\n this.signType = signType as DigitalSignType;\n }\n };\n\n readonly setSignPositionOnPageSides = (position: number): void => {\n this.sealPosition = position;\n };\n\n readonly setPageRange = (text: string): void => {\n this.pageRange = text;\n };\n\n readonly getPageRange = (): string | undefined => {\n return this.pageRange;\n };\n\n readonly getPageRanges = (): number[] => {\n return parsePageRanges(this.pageRange);\n };\n\n readonly setSignUserData = (signUserData: string): void => {\n this.signUserData = signUserData;\n };\n\n readonly setPrintMargin = (margin: number): void => {\n this.printMargin = margin;\n };\n\n readonly getPrintMargin = (): number => {\n return this.printMargin ?? 0;\n };\n\n readonly setSignReason = (reason: string): void => {\n this.signReason = reason;\n };\n\n readonly getSignReason = (): string | undefined => {\n return this.signReason;\n };\n\n readonly setSignLocation = (location: string): void => {\n this.signLocation = location;\n };\n\n readonly getSignLocation = (): string | undefined => {\n return this.signLocation;\n };\n\n readonly setDefaultStampPassword = (password: string): void => {\n this.defaultStampPassword = password;\n };\n}\n","import type { UITool } from '../api/ui-tool';\nimport {\n createBridgeToolAdapter,\n type BridgeToolAdapterContext,\n type BridgeToolDescriptor,\n} from '../viewer/BridgeToolAdapter';\n\nconst BOOK_VIEW_PAGE_MODES = new Set([2, 5]);\n\nconst createUIToolDescriptor = (context: BridgeToolAdapterContext): BridgeToolDescriptor => ({\n showToolbarMenu: { kind: 'command' },\n hideToolbarMenu: { kind: 'command' },\n setupToolbarMenu: { kind: 'command' },\n showToolbarMenuItem: { kind: 'command' },\n hideToolbarMenuItem: { kind: 'command' },\n setupRibbonMenu: { kind: 'command' },\n setupRibbonMenuItem: { kind: 'command' },\n setupRibbonTitleBar: { kind: 'command' },\n showRibbonMenu: { kind: 'command' },\n hideRibbonMenu: { kind: 'command' },\n showRibbonMenuItem: { kind: 'command' },\n hideRibbonMenuItem: { kind: 'command' },\n showRibbonTitleBar: { kind: 'command' },\n hideRibbonTitleBar: { kind: 'command' },\n selectRibbonMenu: { kind: 'command' },\n setRibbonMenuButtonStyle: { kind: 'command' },\n setWatermark: { kind: 'command' },\n setCompactMode: { kind: 'command' },\n enterBookViewMode: {\n kind: 'callbackQuery',\n mapCallbackResult: () => [],\n },\n exitBookViewMode: { kind: 'command' },\n isBookViewActivated: {\n kind: 'stateGetter',\n state: () => BOOK_VIEW_PAGE_MODES.has(context.state.snapshot().pageMode),\n },\n requestFullScreen: { kind: 'command' },\n exitFullScreen: { kind: 'command' },\n invalidateView: { kind: 'command' },\n});\n\nexport class UIToolImpl implements UITool {\n private readonly adapter: UITool;\n\n constructor(context: BridgeToolAdapterContext) {\n this.adapter = createBridgeToolAdapter<UITool>('ui', createUIToolDescriptor(context), context);\n }\n\n showToolbarMenu: UITool['showToolbarMenu'] = () => {\n return this.adapter.showToolbarMenu();\n };\n\n hideToolbarMenu: UITool['hideToolbarMenu'] = () => {\n return this.adapter.hideToolbarMenu();\n };\n\n setupToolbarMenu: UITool['setupToolbarMenu'] = (opt) => {\n return this.adapter.setupToolbarMenu(opt);\n };\n\n showToolbarMenuItem: UITool['showToolbarMenuItem'] = (menuId) => {\n return this.adapter.showToolbarMenuItem(menuId);\n };\n\n hideToolbarMenuItem: UITool['hideToolbarMenuItem'] = (menuId) => {\n return this.adapter.hideToolbarMenuItem(menuId);\n };\n\n setupRibbonMenu: UITool['setupRibbonMenu'] = (opt) => {\n return this.adapter.setupRibbonMenu(opt);\n };\n\n setupRibbonMenuItem: UITool['setupRibbonMenuItem'] = (menuId, visible, config) => {\n return this.adapter.setupRibbonMenuItem(menuId, visible, config);\n };\n\n setupRibbonTitleBar: UITool['setupRibbonTitleBar'] = (visible) => {\n return this.adapter.setupRibbonTitleBar(visible);\n };\n\n showRibbonMenu: UITool['showRibbonMenu'] = () => {\n return this.adapter.showRibbonMenu();\n };\n\n hideRibbonMenu: UITool['hideRibbonMenu'] = () => {\n return this.adapter.hideRibbonMenu();\n };\n\n showRibbonMenuItem: UITool['showRibbonMenuItem'] = (menuId, config) => {\n return this.adapter.showRibbonMenuItem(menuId, config);\n };\n\n hideRibbonMenuItem: UITool['hideRibbonMenuItem'] = (menuId, config) => {\n return this.adapter.hideRibbonMenuItem(menuId, config);\n };\n\n showRibbonTitleBar: UITool['showRibbonTitleBar'] = () => {\n return this.adapter.showRibbonTitleBar();\n };\n\n hideRibbonTitleBar: UITool['hideRibbonTitleBar'] = () => {\n return this.adapter.hideRibbonTitleBar();\n };\n\n selectRibbonMenu: UITool['selectRibbonMenu'] = (menuId) => {\n return this.adapter.selectRibbonMenu(menuId);\n };\n\n setRibbonMenuButtonStyle: UITool['setRibbonMenuButtonStyle'] = (buttonId, buttonStyle) => {\n return this.adapter.setRibbonMenuButtonStyle(buttonId, buttonStyle);\n };\n\n setWatermark: UITool['setWatermark'] = (fields) => {\n return this.adapter.setWatermark(fields);\n };\n\n setCompactMode: UITool['setCompactMode'] = (compact) => {\n return this.adapter.setCompactMode(compact);\n };\n\n enterBookViewMode: UITool['enterBookViewMode'] = (callback) => {\n return this.adapter.enterBookViewMode(callback);\n };\n\n exitBookViewMode: UITool['exitBookViewMode'] = () => {\n return this.adapter.exitBookViewMode();\n };\n\n isBookViewActivated: UITool['isBookViewActivated'] = () => {\n return this.adapter.isBookViewActivated();\n };\n\n requestFullScreen: UITool['requestFullScreen'] = () => {\n return this.adapter.requestFullScreen();\n };\n\n exitFullScreen: UITool['exitFullScreen'] = () => {\n return this.adapter.exitFullScreen();\n };\n\n invalidateView: UITool['invalidateView'] = () => {\n return this.adapter.invalidateView();\n };\n}\n","import type { IReaderEmbedOptions } from '../api/document-sdk';\n\nexport type SupportedReaderTheme = 'light' | 'dark' | 'high-contrast' | 'auto';\n\nexport interface NormalizedReaderEmbedOptions extends IReaderEmbedOptions {\n appUrl: string;\n scrollIntoView: boolean;\n theme?: SupportedReaderTheme;\n}\n\nconst normalizeTheme = (theme?: string): SupportedReaderTheme | undefined => {\n if (!theme) {\n return undefined;\n }\n\n const normalizedTheme = theme.trim().toLowerCase();\n if (normalizedTheme === 'application') {\n return 'auto';\n }\n\n if (\n normalizedTheme === 'light' ||\n normalizedTheme === 'dark' ||\n normalizedTheme === 'high-contrast' ||\n normalizedTheme === 'auto'\n ) {\n return normalizedTheme;\n }\n\n return undefined;\n};\n\nexport const normalizeAppUrl = (appUrl: string): string => {\n const normalizedUrl = new URL(appUrl, globalThis.location?.href ?? 'http://localhost/');\n normalizedUrl.hash = '';\n if (!normalizedUrl.pathname.endsWith('/')) {\n normalizedUrl.pathname = `${normalizedUrl.pathname}/`;\n }\n\n return normalizedUrl.toString();\n};\n\nexport const createBootstrapUrl = (appUrl: string): string => {\n return new URL('editors.bootstrap.js', appUrl).toString();\n};\n\nexport const normalizeReaderEmbedOptions = (\n appUrl: string,\n configuration: IReaderEmbedOptions,\n): NormalizedReaderEmbedOptions => {\n const normalizedAppUrl = normalizeAppUrl(appUrl);\n\n return {\n ...configuration,\n appUrl: normalizedAppUrl,\n scrollIntoView: configuration.scrollIntoView ?? true,\n theme: normalizeTheme(configuration.theme),\n };\n};\n","import { createBootstrapUrl } from './ReaderConfiguration';\n\nexport const READER_CUSTOM_ELEMENT_TAG = 'rhc-office-editor';\n\nconst READER_LOADER_REGISTRY_KEY = '__RHC_OFFICE_SDK_READER_LOADER__';\n\ninterface ReaderLoaderRegistry {\n activeAppUrl: string | null;\n loadPromises: Map<string, Promise<void>>;\n}\n\ntype BrowserGlobal = typeof globalThis & {\n [READER_LOADER_REGISTRY_KEY]?: ReaderLoaderRegistry;\n};\n\nconst getReaderLoaderRegistry = (): ReaderLoaderRegistry => {\n const browserGlobal = globalThis as BrowserGlobal;\n if (!browserGlobal[READER_LOADER_REGISTRY_KEY]) {\n browserGlobal[READER_LOADER_REGISTRY_KEY] = {\n activeAppUrl: null,\n loadPromises: new Map<string, Promise<void>>(),\n };\n }\n\n return browserGlobal[READER_LOADER_REGISTRY_KEY];\n};\n\nconst findScriptElementBySource = (source: string): HTMLScriptElement | null => {\n return (\n Array.from(document.querySelectorAll('script')).find((element) => element.src === source) ??\n null\n );\n};\n\nexport class ReaderScriptLoadError extends Error {\n constructor(bootstrapUrl: string) {\n super(`Failed to load reader bootstrap script: ${bootstrapUrl}`);\n this.name = 'ReaderScriptLoadError';\n }\n}\n\nexport class ReaderSourceConflictError extends Error {\n constructor(activeAppUrl: string, requestedAppUrl: string) {\n super(\n `Reader Web Component \"${READER_CUSTOM_ELEMENT_TAG}\" is already bound to ${activeAppUrl} and cannot be reloaded from ${requestedAppUrl}.`,\n );\n this.name = 'ReaderSourceConflictError';\n }\n}\n\nexport const assertCompatibleReaderSource = (appUrl: string): void => {\n const registry = getReaderLoaderRegistry();\n if (registry.activeAppUrl && registry.activeAppUrl !== appUrl) {\n throw new ReaderSourceConflictError(registry.activeAppUrl, appUrl);\n }\n};\n\nexport const ensureReaderScriptLoaded = (appUrl: string): Promise<void> => {\n const registry = getReaderLoaderRegistry();\n assertCompatibleReaderSource(appUrl);\n\n const existingLoadPromise = registry.loadPromises.get(appUrl);\n if (existingLoadPromise) {\n return existingLoadPromise;\n }\n\n if (globalThis.customElements?.get(READER_CUSTOM_ELEMENT_TAG)) {\n registry.activeAppUrl = appUrl;\n const resolvedPromise = Promise.resolve();\n registry.loadPromises.set(appUrl, resolvedPromise);\n return resolvedPromise;\n }\n\n const bootstrapUrl = createBootstrapUrl(appUrl);\n const existingScriptElement = findScriptElementBySource(bootstrapUrl);\n registry.activeAppUrl = appUrl;\n\n const loadPromise = new Promise<void>((resolve, reject) => {\n const rejectScriptLoad = (scriptElement?: HTMLScriptElement): void => {\n scriptElement?.remove();\n reject(new ReaderScriptLoadError(bootstrapUrl));\n };\n\n const resolveWhenDefined = (): void => {\n void globalThis.customElements\n .whenDefined(READER_CUSTOM_ELEMENT_TAG)\n .then(() => {\n resolve();\n })\n .catch(reject);\n };\n\n if (existingScriptElement) {\n if (globalThis.customElements?.get(READER_CUSTOM_ELEMENT_TAG)) {\n resolve();\n return;\n }\n\n existingScriptElement.addEventListener(\n 'error',\n () => reject(new ReaderScriptLoadError(bootstrapUrl)),\n {\n once: true,\n },\n );\n resolveWhenDefined();\n return;\n }\n\n const scriptElement = document.createElement('script');\n scriptElement.src = bootstrapUrl;\n scriptElement.async = true;\n scriptElement.dataset.rhcOfficeSdkReader = appUrl;\n scriptElement.addEventListener('load', resolveWhenDefined, { once: true });\n scriptElement.addEventListener('error', () => rejectScriptLoad(scriptElement), { once: true });\n document.head.appendChild(scriptElement);\n }).catch((error: unknown) => {\n registry.loadPromises.delete(appUrl);\n if (\n !globalThis.customElements?.get(READER_CUSTOM_ELEMENT_TAG) &&\n registry.activeAppUrl === appUrl\n ) {\n registry.activeAppUrl = null;\n }\n throw error;\n });\n\n registry.loadPromises.set(appUrl, loadPromise);\n return loadPromise;\n};\n","export const RHC_OFFICE_ADAPTER_PROTOCOL = 'rhc-office.editor-adapter';\nexport const RHC_OFFICE_ADAPTER_VERSION = 1;\nexport const RHC_OFFICE_ADAPTER_GLOBAL = '__RHC_OFFICE_EDITOR_ADAPTER__';\nexport const RHC_OFFICE_ADAPTER_READY_EVENT = 'rhcOfficeAdapterReady';\nexport const RHC_OFFICE_ADAPTER_EVENT = 'rhcOfficeAdapterEvent';\nexport const RHC_OFFICE_READER_ID_ATTRIBUTE = 'data-rhc-office-reader-id';\n\nexport type AdapterToolName =\n | 'document'\n | 'page'\n | 'ui'\n | 'find'\n | 'annotation'\n | 'digitalSign'\n | 'signServer'\n | 'review'\n | 'ekey'\n | 'symbology'\n | 'templateSign'\n | 'pdfFormFiller'\n | 'extension'\n | 'networking'\n | 'crypto';\n\nexport type AdapterErrorCode =\n | 'ADAPTER_UNAVAILABLE'\n | 'READER_NOT_READY'\n | 'READER_NOT_FOUND'\n | 'COMMAND_NOT_FOUND'\n | 'NOT_IMPLEMENTED'\n | 'INVALID_PARAMS'\n | 'EXECUTION_FAILED'\n | 'TIMEOUT';\n\nexport interface AdapterError {\n code: AdapterErrorCode;\n message: string;\n details?: unknown;\n}\n\nexport interface AdapterRequest<TParams = unknown> {\n protocol: typeof RHC_OFFICE_ADAPTER_PROTOCOL;\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n requestId: string;\n readerId: string;\n tool: AdapterToolName;\n method: string;\n params?: TParams;\n}\n\nexport type AdapterResponse<TResult = unknown> =\n | {\n ok: true;\n requestId: string;\n result: TResult;\n }\n | {\n ok: false;\n requestId: string;\n error: AdapterError;\n };\n\nexport interface AdapterCommandCapability {\n implemented: boolean;\n method: string;\n tool: AdapterToolName;\n}\n\nexport interface AdapterCapabilityManifest {\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n tools: AdapterToolName[];\n commands: AdapterCommandCapability[];\n}\n\nexport interface AdapterStatePatch {\n documentOpened?: boolean;\n documentModified?: boolean;\n pageCount?: number;\n pageIndex?: number;\n pageMode?: number;\n zoomLevel?: number;\n documentType?: string;\n annotationMode?: string;\n annotationEnabled?: boolean;\n extensionState?: 'connected' | 'disconnected';\n}\n\nexport interface AdapterEvent<TPayload = unknown> {\n protocol: typeof RHC_OFFICE_ADAPTER_PROTOCOL;\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n readerId: string;\n event: string;\n payload?: TPayload;\n statePatch?: AdapterStatePatch;\n}\n\nexport interface AdapterReadyEventDetail {\n protocol: typeof RHC_OFFICE_ADAPTER_PROTOCOL;\n version: typeof RHC_OFFICE_ADAPTER_VERSION;\n readerId: string;\n}\n\nexport interface AdapterReaderSession {\n readerId: string;\n capabilities: AdapterCapabilityManifest;\n request(request: AdapterRequest): Promise<AdapterResponse>;\n}\n\nexport interface AdapterGlobal {\n registerReader(session: AdapterReaderSession): void;\n unregisterReader(readerId: string): void;\n request(request: AdapterRequest): Promise<AdapterResponse>;\n getCapabilities(readerId: string): AdapterCapabilityManifest | null;\n}\n","import {\n RHC_OFFICE_ADAPTER_GLOBAL,\n RHC_OFFICE_ADAPTER_PROTOCOL,\n RHC_OFFICE_ADAPTER_READY_EVENT,\n RHC_OFFICE_ADAPTER_VERSION,\n type AdapterCapabilityManifest,\n type AdapterGlobal,\n type AdapterRequest,\n type AdapterResponse,\n type AdapterToolName,\n} from './AdapterProtocol';\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 5000;\nconst DEFAULT_READY_TIMEOUT_MS = 5000;\n\ntype BrowserGlobal = typeof globalThis & {\n [RHC_OFFICE_ADAPTER_GLOBAL]?: AdapterGlobal;\n};\n\nconst createRequestId = (): string => {\n const cryptoApi = globalThis.crypto;\n if (typeof cryptoApi?.randomUUID === 'function') {\n return cryptoApi.randomUUID();\n }\n\n return `adapter-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n};\n\nconst getAdapterGlobal = (): AdapterGlobal | undefined => {\n return (globalThis as BrowserGlobal)[RHC_OFFICE_ADAPTER_GLOBAL];\n};\n\nexport class ReaderBridgeError extends Error {\n readonly code: string;\n readonly details?: unknown;\n\n constructor(code: string, message: string, details?: unknown) {\n super(message);\n this.name = 'ReaderBridgeError';\n this.code = code;\n this.details = details;\n }\n}\n\nexport class ReaderBridgeClient {\n private readerId: string | null = null;\n private readyTimeoutMs: number;\n private requestTimeoutMs: number;\n\n constructor(options?: { readyTimeoutMs?: number; requestTimeoutMs?: number }) {\n this.readyTimeoutMs = options?.readyTimeoutMs ?? DEFAULT_READY_TIMEOUT_MS;\n this.requestTimeoutMs = options?.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n }\n\n configureTimeouts(options?: { readyTimeoutMs?: number; requestTimeoutMs?: number }): void {\n this.readyTimeoutMs = options?.readyTimeoutMs ?? this.readyTimeoutMs;\n this.requestTimeoutMs = options?.requestTimeoutMs ?? this.requestTimeoutMs;\n }\n\n setReaderId(readerId: string | null): void {\n this.readerId = readerId;\n }\n\n getReaderId(): string | null {\n return this.readerId;\n }\n\n async request<TResult = unknown, TParams = unknown>(\n tool: AdapterToolName,\n method: string,\n params?: TParams,\n options?: {\n timeoutMs?: number;\n },\n ): Promise<TResult> {\n const response = await this.requestRaw<TResult, TParams>(tool, method, params, options);\n if (response.ok) {\n return response.result;\n }\n\n throw new ReaderBridgeError(\n response.error.code,\n response.error.message,\n response.error.details,\n );\n }\n\n async requestRaw<TResult = unknown, TParams = unknown>(\n tool: AdapterToolName,\n method: string,\n params?: TParams,\n options?: {\n timeoutMs?: number;\n },\n ): Promise<AdapterResponse<TResult>> {\n if (!this.readerId) {\n return {\n ok: false,\n requestId: '',\n error: {\n code: 'READER_NOT_READY',\n message: 'Reader is not mounted.',\n },\n };\n }\n\n const adapter = await this.waitForAdapter(this.readerId, options?.timeoutMs);\n if (!adapter) {\n return {\n ok: false,\n requestId: '',\n error: {\n code: 'ADAPTER_UNAVAILABLE',\n message: 'Editor adapter is not available.',\n },\n };\n }\n\n const request: AdapterRequest<TParams> = {\n protocol: RHC_OFFICE_ADAPTER_PROTOCOL,\n version: RHC_OFFICE_ADAPTER_VERSION,\n requestId: createRequestId(),\n readerId: this.readerId,\n tool,\n method,\n params,\n };\n\n return this.withTimeout(\n adapter.request(request) as Promise<AdapterResponse<TResult>>,\n request.requestId,\n options?.timeoutMs ?? this.requestTimeoutMs,\n );\n }\n\n getCapabilities(): AdapterCapabilityManifest | null {\n if (!this.readerId) {\n return null;\n }\n\n return getAdapterGlobal()?.getCapabilities(this.readerId) ?? null;\n }\n\n private async waitForAdapter(\n readerId: string,\n timeoutMs = this.readyTimeoutMs,\n ): Promise<AdapterGlobal | null> {\n const existingAdapter = getAdapterGlobal();\n if (existingAdapter?.getCapabilities(readerId)) {\n return existingAdapter;\n }\n\n return new Promise<AdapterGlobal | null>((resolve) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined = undefined;\n\n const cleanup = (): void => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n globalThis.removeEventListener(RHC_OFFICE_ADAPTER_READY_EVENT, onReady as EventListener);\n };\n\n const onReady = (event: Event): void => {\n const detail = event instanceof CustomEvent ? event.detail : undefined;\n if (detail?.readerId !== readerId) {\n return;\n }\n\n const adapter = getAdapterGlobal();\n cleanup();\n resolve(adapter ?? null);\n };\n\n globalThis.addEventListener(RHC_OFFICE_ADAPTER_READY_EVENT, onReady as EventListener);\n timeoutId = setTimeout(() => {\n cleanup();\n resolve(getAdapterGlobal()?.getCapabilities(readerId) ? getAdapterGlobal()! : null);\n }, timeoutMs);\n });\n }\n\n private async withTimeout<TResult>(\n promise: Promise<AdapterResponse<TResult>>,\n requestId: string,\n timeoutMs: number,\n ): Promise<AdapterResponse<TResult>> {\n return new Promise<AdapterResponse<TResult>>((resolve) => {\n const timeoutId = setTimeout(() => {\n resolve({\n ok: false,\n requestId,\n error: {\n code: 'TIMEOUT',\n message: `Editor adapter request timed out after ${timeoutMs}ms.`,\n },\n });\n }, timeoutMs);\n\n promise\n .then((response) => resolve(response))\n .catch((error: unknown) => {\n resolve({\n ok: false,\n requestId,\n error: {\n code: 'EXECUTION_FAILED',\n message: error instanceof Error ? error.message : String(error),\n },\n });\n })\n .finally(() => {\n clearTimeout(timeoutId);\n });\n });\n }\n}\n","import type { AdapterStatePatch } from './AdapterProtocol';\n\nexport interface ReaderStateSnapshot {\n annotationEnabled: boolean;\n annotationMode?: string;\n documentModified: boolean;\n documentOpened: boolean;\n documentType?: string;\n pageCount: number;\n pageIndex: number;\n pageMode: number;\n zoomLevel: number;\n}\n\nconst DEFAULT_READER_STATE: ReaderStateSnapshot = {\n annotationEnabled: false,\n documentModified: false,\n documentOpened: false,\n pageCount: 0,\n pageIndex: 1,\n pageMode: 0,\n zoomLevel: 100,\n};\n\nexport class ReaderStateStore {\n private state: ReaderStateSnapshot = { ...DEFAULT_READER_STATE };\n\n reset(): void {\n this.state = { ...DEFAULT_READER_STATE };\n }\n\n update(patch?: AdapterStatePatch): void {\n if (!patch) {\n return;\n }\n\n this.state = {\n ...this.state,\n ...patch,\n };\n }\n\n setDocumentOpened(opened: boolean): void {\n this.state = {\n ...this.state,\n documentOpened: opened,\n };\n }\n\n snapshot(): ReaderStateSnapshot {\n return { ...this.state };\n }\n}\n","import type {\n AnnotationEventCallback,\n DigitalSignatureRetrieveCallback,\n DocumentClosedCallback,\n DocumentSavedCallback,\n PageChangeCallback,\n PageModeChangeCallback,\n} from '../api/callbacks';\nimport type { IDigitalAnnotationInfo } from '../api/annotation-tool';\n\nexport class SdkCallbackRegistry {\n readonly annotationEvents: AnnotationEventCallback[] = [];\n readonly annotationPersist: Array<(event: unknown) => void> = [];\n readonly annotationRetrieve: Array<(event: unknown) => void> = [];\n readonly digitalAnnotationRetrieve: Array<(annotations: IDigitalAnnotationInfo[]) => void> = [];\n readonly digitalSignatureParse: DigitalSignatureRetrieveCallback[] = [];\n readonly digitalSignatureRetrieve: DigitalSignatureRetrieveCallback[] = [];\n readonly documentClosed: DocumentClosedCallback[] = [];\n readonly documentOpened: Array<(status: string, error: string) => void> = [];\n readonly documentSaved: DocumentSavedCallback[] = [];\n readonly pageChange: PageChangeCallback[] = [];\n readonly pageModeChange: PageModeChangeCallback[] = [];\n\n emit(event: string, payload: unknown): void {\n switch (event) {\n case 'documentOpened':\n case 'documentLoaded':\n this.documentOpened.forEach((callback) => callback('ok', ''));\n return;\n case 'documentSaved':\n this.documentSaved.forEach((callback) => callback(payload));\n return;\n case 'documentClosed':\n this.documentClosed.forEach((callback) => callback(payload));\n return;\n case 'pageChange': {\n const pagePayload = payload as { pageIndex?: number; pageCount?: number };\n this.pageChange.forEach((callback) =>\n callback(pagePayload.pageIndex ?? 1, pagePayload.pageCount ?? 0),\n );\n return;\n }\n case 'pageModeChange': {\n const pagePayload = payload as { pageMode?: number };\n this.pageModeChange.forEach((callback) => callback(pagePayload.pageMode ?? 0));\n return;\n }\n case 'annotationEvent': {\n const annotationPayload = payload as { event?: string; payload?: unknown };\n this.annotationEvents.forEach((callback) =>\n callback(annotationPayload.event ?? 'annotationEvent', annotationPayload.payload),\n );\n return;\n }\n case 'annotationPersist':\n this.annotationPersist.forEach((callback) => callback(payload));\n return;\n case 'annotationRetrieve':\n this.annotationRetrieve.forEach((callback) => callback(payload));\n return;\n case 'digitalAnnotationRetrieve':\n this.digitalAnnotationRetrieve.forEach((callback) =>\n callback(Array.isArray(payload) ? (payload as IDigitalAnnotationInfo[]) : []),\n );\n return;\n case 'digitalSignatureRetrieve':\n this.digitalSignatureRetrieve.forEach((callback) =>\n callback(Array.isArray(payload) ? payload : []),\n );\n return;\n case 'digitalSignatureParse':\n this.digitalSignatureParse.forEach((callback) =>\n callback(Array.isArray(payload) ? payload : []),\n );\n return;\n default:\n return;\n }\n }\n}\n","import type { AnnotationTool } from '../api/annotation-tool';\nimport type { IDigitalAnnotationInfo } from '../api/annotation-tool';\nimport type { CryptoTool } from '../api/crypto-tool';\nimport type {\n AnnotationEventCallback,\n ReaderReadyCallback,\n ReaderUnloadCallback,\n} from '../api/callbacks';\nimport type { IDocumentSDK, IReaderEmbedOptions } from '../api/document-sdk';\nimport type { DocumentTool } from '../api/document-tool';\nimport type { FindTool } from '../api/find-tool';\nimport type { NetworkingTool } from '../api/networking-tool';\nimport type { PageTool } from '../api/page-tool';\nimport type { PdfFormFiller } from '../api/pdf-formfiller';\nimport type { SignServerTool } from '../api/sign-server';\nimport type { DigitalSignTool } from '../api/sign-tool';\nimport type { SymbologyTool } from '../api/symbology-tool';\nimport type { TemplateSignTool } from '../api/template-sign';\nimport type { UITool } from '../api/ui-tool';\nimport { DocumentToolImpl } from '../tools/DocumentToolImpl';\nimport { FindToolImpl } from '../tools/FindToolImpl';\nimport { NetworkingToolImpl } from '../tools/NetworkingToolImpl';\nimport { PageToolImpl } from '../tools/PageToolImpl';\nimport { PdfFormFillerImpl } from '../tools/PdfFormFillerImpl';\nimport { DigitalSignOptions, KVField } from '../tools/SDKValueObjects';\nimport { UIToolImpl } from '../tools/UIToolImpl';\nimport type { NormalizedReaderEmbedOptions } from './ReaderConfiguration';\nimport { normalizeAppUrl, normalizeReaderEmbedOptions } from './ReaderConfiguration';\nimport {\n assertCompatibleReaderSource,\n ensureReaderScriptLoaded,\n READER_CUSTOM_ELEMENT_TAG,\n} from './ReaderScriptLoader';\nimport {\n RHC_OFFICE_ADAPTER_EVENT,\n RHC_OFFICE_READER_ID_ATTRIBUTE,\n type AdapterEvent,\n} from './AdapterProtocol';\nimport { createBridgeToolAdapter, createNotImplementedBridgeTool } from './BridgeToolAdapter';\nimport { ReaderBridgeClient } from './ReaderBridgeClient';\nimport { ReaderStateStore } from './ReaderStateStore';\nimport { SdkCallbackRegistry } from './SdkCallbackRegistry';\n\ntype ReaderEventListener = Parameters<IDocumentSDK['setReaderEventListener']>[0];\ntype ReaderEventPayload = Parameters<NonNullable<ReaderEventListener>>[1];\n\ninterface DocumentSDKRuntimeOptions {\n adapterReadyTimeoutMs?: number;\n adapterRequestTimeoutMs?: number;\n}\n\ntype NativeReaderEventName = 'documentLoaded' | 'documentStateChange' | 'documentError';\ntype ReaderThemeCleanup = () => void;\ntype CompatibleMediaQueryList = MediaQueryList & {\n addListener?: (listener: (event: MediaQueryListEvent) => void) => void;\n removeListener?: (listener: (event: MediaQueryListEvent) => void) => void;\n};\n\nconst NATIVE_READER_EVENT_NAMES: NativeReaderEventName[] = [\n 'documentLoaded',\n 'documentStateChange',\n 'documentError',\n];\n\nconst READER_READY_EVENT_NAME = 'readerReady';\nconst READER_UNLOAD_EVENT_NAME = 'readerUnload';\nconst READER_ERROR_EVENT_NAME = 'readerError';\n\nconst createReaderId = (): string => {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n\n return `rhc-reader-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n};\n\nconst createReaderPayload = (\n readerElement: HTMLElement | null,\n configuration: NormalizedReaderEmbedOptions | null,\n): Record<string, unknown> => {\n return {\n appUrl: configuration?.appUrl ?? null,\n configuration,\n element: readerElement,\n };\n};\n\nconst resolveContainerElement = (container: string | HTMLDivElement): HTMLDivElement => {\n if (typeof container === 'string') {\n const element = document.getElementById(container);\n if (!element) {\n throw new Error(`Reader container \"${container}\" was not found.`);\n }\n\n if (!(element instanceof HTMLDivElement)) {\n throw new Error(`Reader container \"${container}\" must be a div element.`);\n }\n\n return element;\n }\n\n if (!(container instanceof HTMLDivElement)) {\n throw new Error('Reader container must be a div element.');\n }\n\n return container;\n};\n\nconst resolveSystemReaderTheme = (): 'light' | 'dark' | 'high-contrast' => {\n const supportsMatchMedia = typeof globalThis.matchMedia === 'function';\n const prefersHighContrast = supportsMatchMedia\n ? globalThis.matchMedia('(prefers-contrast: more)').matches\n : false;\n if (prefersHighContrast) {\n return 'high-contrast';\n }\n\n const prefersDark = supportsMatchMedia\n ? globalThis.matchMedia('(prefers-color-scheme: dark)').matches\n : false;\n return prefersDark ? 'dark' : 'light';\n};\n\nconst addMediaQueryListener = (\n mediaQuery: MediaQueryList,\n listener: (event: MediaQueryListEvent) => void,\n): void => {\n const compatibleMediaQuery = mediaQuery as CompatibleMediaQueryList;\n if (typeof compatibleMediaQuery.addEventListener === 'function') {\n compatibleMediaQuery.addEventListener('change', listener);\n return;\n }\n\n if (typeof compatibleMediaQuery.addListener === 'function') {\n compatibleMediaQuery.addListener(listener);\n }\n};\n\nconst removeMediaQueryListener = (\n mediaQuery: MediaQueryList,\n listener: (event: MediaQueryListEvent) => void,\n): void => {\n const compatibleMediaQuery = mediaQuery as CompatibleMediaQueryList;\n if (typeof compatibleMediaQuery.removeEventListener === 'function') {\n compatibleMediaQuery.removeEventListener('change', listener);\n return;\n }\n\n if (typeof compatibleMediaQuery.removeListener === 'function') {\n compatibleMediaQuery.removeListener(listener);\n }\n};\n\nconst applyReaderElementLayout = (\n readerElement: HTMLElement,\n configuration: NormalizedReaderEmbedOptions,\n): void => {\n if (configuration.style) {\n readerElement.style.cssText = configuration.style;\n }\n\n if (!readerElement.style.display) {\n readerElement.style.display = 'block';\n }\n\n if (!readerElement.style.width) {\n readerElement.style.width = configuration.width ?? '100%';\n } else if (configuration.width) {\n readerElement.style.width = configuration.width;\n }\n\n if (!readerElement.style.height) {\n readerElement.style.height = configuration.height ?? '100%';\n } else if (configuration.height) {\n readerElement.style.height = configuration.height;\n }\n};\n\nconst bindReaderElementTheme = (\n readerElement: HTMLElement,\n configuration: NormalizedReaderEmbedOptions,\n): ReaderThemeCleanup | null => {\n const configuredTheme = configuration.theme;\n if (!configuredTheme) {\n readerElement.removeAttribute('theme');\n return null;\n }\n\n if (configuredTheme !== 'auto') {\n readerElement.setAttribute('theme', configuredTheme);\n return null;\n }\n\n const applySystemTheme = (): void => {\n readerElement.setAttribute('theme', resolveSystemReaderTheme());\n };\n\n applySystemTheme();\n\n if (typeof globalThis.matchMedia !== 'function') {\n return null;\n }\n\n const colorSchemeMediaQuery = globalThis.matchMedia('(prefers-color-scheme: dark)');\n const contrastMediaQuery = globalThis.matchMedia('(prefers-contrast: more)');\n const handleThemeChange = (): void => {\n applySystemTheme();\n };\n\n addMediaQueryListener(colorSchemeMediaQuery, handleThemeChange);\n addMediaQueryListener(contrastMediaQuery, handleThemeChange);\n\n return () => {\n removeMediaQueryListener(colorSchemeMediaQuery, handleThemeChange);\n removeMediaQueryListener(contrastMediaQuery, handleThemeChange);\n };\n};\n\nexport class DocumentSDK implements IDocumentSDK {\n private readonly bridge = new ReaderBridgeClient();\n private readonly callbacks = new SdkCallbackRegistry();\n private readonly readerState = new ReaderStateStore();\n private readonly bridgeToolContext = {\n bridge: this.bridge,\n callbacks: this.callbacks,\n debug: () => this.debugEnabled,\n onAsyncError: (error: unknown) => this.reportAdapterError(error),\n state: this.readerState,\n };\n private readonly documentTool = new DocumentToolImpl(this.bridgeToolContext);\n private readonly uiTool = new UIToolImpl(this.bridgeToolContext);\n private readonly pageTool = new PageToolImpl(this.bridgeToolContext);\n private readonly findTool = new FindToolImpl(this.bridgeToolContext);\n private readonly signServerTool = createNotImplementedBridgeTool<SignServerTool>(\n 'signServer',\n this.bridgeToolContext,\n );\n private readonly digitalSignTool = createNotImplementedBridgeTool<DigitalSignTool>(\n 'digitalSign',\n this.bridgeToolContext,\n );\n private readonly symbologyTool = createNotImplementedBridgeTool<SymbologyTool>(\n 'symbology',\n this.bridgeToolContext,\n );\n private readonly annotationTool = this.createAnnotationTool();\n private readonly templateSignTool = createNotImplementedBridgeTool<TemplateSignTool>(\n 'templateSign',\n this.bridgeToolContext,\n );\n private readonly pdfFormFiller = new PdfFormFillerImpl(this.bridgeToolContext);\n private readonly networkingTool = new NetworkingToolImpl(this.bridgeToolContext);\n private readonly cryptoTool = createNotImplementedBridgeTool<CryptoTool>(\n 'crypto',\n this.bridgeToolContext,\n );\n\n private readonly readyCallbacks: ReaderReadyCallback[] = [];\n private readonly unloadCallbacks: ReaderUnloadCallback[] = [];\n\n private debugEnabled = false;\n private isReady = false;\n private removed = false;\n private mountToken = 0;\n\n private readerEventListener?: ReaderEventListener;\n private hostContainer: HTMLDivElement | null = null;\n private readerElement: HTMLElement | null = null;\n private readerId: string | null = null;\n private normalizedConfiguration: NormalizedReaderEmbedOptions | null = null;\n private sessionUser?: Parameters<IDocumentSDK['setSessionUser']>[0];\n private sessionData?: string;\n private license?: { license: string; feature: string };\n private readonly nativeEventCleanupCallbacks: Array<() => void> = [];\n private themeCleanup: ReaderThemeCleanup | null = null;\n\n constructor(options?: DocumentSDKRuntimeOptions) {\n this.bridge.configureTimeouts({\n readyTimeoutMs: options?.adapterReadyTimeoutMs,\n requestTimeoutMs: options?.adapterRequestTimeoutMs,\n });\n }\n\n readonly enableDebug: IDocumentSDK['enableDebug'] = (debug): void => {\n this.debugEnabled = debug;\n };\n\n readonly changeLanguage: IDocumentSDK['changeLanguage'] = (): void => {\n // Phase 1: reserved for future reader language bridging.\n };\n\n readonly setLicense: IDocumentSDK['setLicense'] = (license, feature): void => {\n this.license = { license, feature };\n };\n\n readonly setSessionUser: IDocumentSDK['setSessionUser'] = (userNameOrInfo): void => {\n this.sessionUser = userNameOrInfo;\n };\n\n readonly setSessionUserId: IDocumentSDK['setSessionUserId'] = (userId): void => {\n if (typeof this.sessionUser === 'string' || !this.sessionUser) {\n this.sessionUser = {\n userName: typeof this.sessionUser === 'string' ? this.sessionUser : '',\n userId,\n };\n return;\n }\n\n this.sessionUser = {\n ...this.sessionUser,\n userId,\n };\n };\n\n readonly setSessionData: IDocumentSDK['setSessionData'] = (sessionData): void => {\n this.sessionData = sessionData;\n };\n\n readonly isReaderReady: IDocumentSDK['isReaderReady'] = (): boolean => {\n return this.isReady;\n };\n\n readonly isReaderDestroyed: IDocumentSDK['isReaderDestroyed'] = (): boolean => {\n return this.removed && !this.isReady;\n };\n\n readonly addReaderReadyCallback: IDocumentSDK['addReaderReadyCallback'] = (callback): void => {\n this.readyCallbacks.push(callback);\n };\n\n readonly addReaderUnloadCallback: IDocumentSDK['addReaderUnloadCallback'] = (callback): void => {\n this.unloadCallbacks.push(callback);\n };\n\n readonly setReaderEventListener: IDocumentSDK['setReaderEventListener'] = (callback): void => {\n this.readerEventListener = callback;\n };\n\n readonly embedReader: IDocumentSDK['embedReader'] = (container, appUrl, configuration): void => {\n const hostContainer = resolveContainerElement(container);\n const normalizedAppUrl = normalizeAppUrl(appUrl);\n assertCompatibleReaderSource(normalizedAppUrl);\n\n const normalizedConfiguration = normalizeReaderEmbedOptions(normalizedAppUrl, configuration);\n const mountToken = this.mountToken + 1;\n\n this.removeReader();\n\n this.mountToken = mountToken;\n this.removed = false;\n this.hostContainer = hostContainer;\n this.normalizedConfiguration = normalizedConfiguration;\n\n void this.mountReader(hostContainer, normalizedConfiguration, mountToken);\n };\n\n readonly removeReader: IDocumentSDK['removeReader'] = (): void => {\n const hadMountedReader = Boolean(this.readerElement || this.hostContainer);\n\n this.mountToken += 1;\n this.cleanupNativeEventForwarders();\n this.cleanupThemeBinding();\n\n if (this.readerElement?.parentNode) {\n this.readerElement.parentNode.removeChild(this.readerElement);\n }\n\n this.readerElement = null;\n this.readerId = null;\n this.bridge.setReaderId(null);\n this.readerState.reset();\n this.hostContainer = null;\n this.normalizedConfiguration = null;\n this.isReady = false;\n this.removed = true;\n\n if (!hadMountedReader) {\n return;\n }\n\n const payload = createReaderPayload(null, null);\n this.emitReaderEvent(READER_UNLOAD_EVENT_NAME, payload);\n this.unloadCallbacks.forEach((callback) => callback());\n };\n\n readonly getDocumentTool: IDocumentSDK['getDocumentTool'] = (): DocumentTool => {\n return this.documentTool;\n };\n\n readonly getUITool: IDocumentSDK['getUITool'] = (): UITool => {\n return this.uiTool;\n };\n\n readonly getPageTool: IDocumentSDK['getPageTool'] = (): PageTool => {\n return this.pageTool;\n };\n\n readonly getFindTool: IDocumentSDK['getFindTool'] = (): FindTool => {\n return this.findTool;\n };\n\n readonly getSignServerTool: IDocumentSDK['getSignServerTool'] = (): SignServerTool => {\n return this.signServerTool;\n };\n\n readonly getDigitalSignTool: IDocumentSDK['getDigitalSignTool'] = (): DigitalSignTool => {\n return this.digitalSignTool;\n };\n\n readonly getSymbologyTool: IDocumentSDK['getSymbologyTool'] = (): SymbologyTool => {\n return this.symbologyTool;\n };\n\n readonly getAnnotationTool: IDocumentSDK['getAnnotationTool'] = (): AnnotationTool => {\n return this.annotationTool;\n };\n\n readonly getTemplateSignTool: IDocumentSDK['getTemplateSignTool'] = (): TemplateSignTool => {\n return this.templateSignTool;\n };\n\n readonly getPdfFormFiller: IDocumentSDK['getPdfFormFiller'] = (): PdfFormFiller => {\n return this.pdfFormFiller;\n };\n\n readonly getNetworkingTool: IDocumentSDK['getNetworkingTool'] = (): NetworkingTool => {\n return this.networkingTool;\n };\n\n readonly getCryptoTool: IDocumentSDK['getCryptoTool'] = (): CryptoTool => {\n return this.cryptoTool;\n };\n\n readonly createDigitalSignOptions: IDocumentSDK['createDigitalSignOptions'] = () => {\n return new DigitalSignOptions();\n };\n\n readonly createKVField: IDocumentSDK['createKVField'] = (key, value, description) => {\n return new KVField(key, value, description);\n };\n\n private createAnnotationTool(): AnnotationTool {\n return createBridgeToolAdapter<AnnotationTool>(\n 'annotation',\n {\n addAnnotationEventCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.annotationEvents.push(callback as AnnotationEventCallback);\n }\n },\n },\n addAnnotationPersistCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.annotationPersist.push(callback as (event: unknown) => void);\n }\n },\n },\n addAnnotationRetrieveCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.annotationRetrieve.push(callback as (event: unknown) => void);\n }\n },\n },\n addDigitalAnnotationRetrieveCallback: {\n kind: 'callbackRegister',\n callback: (callbacks, args) => {\n const callback = args[0];\n if (typeof callback === 'function') {\n callbacks.digitalAnnotationRetrieve.push(\n callback as (annotations: IDigitalAnnotationInfo[]) => void,\n );\n }\n },\n },\n isInAnnotationMode: {\n kind: 'stateGetter',\n state: (state) => state.annotationEnabled,\n },\n getAnnotations: { kind: 'stateGetter', state: () => [] },\n getAnnotationsCount: { kind: 'stateGetter', state: () => 0 },\n queryAnnotationsBy: { kind: 'stateGetter', state: () => [] },\n setToolSource: { kind: 'command' },\n openAnnotationView: { kind: 'command' },\n closeAnnotationView: { kind: 'command' },\n openTextAnnotationView: { kind: 'command' },\n setTextAnnotationFontColor: { kind: 'command' },\n setTextAnnotationFontSize: { kind: 'command' },\n closeTextAnnotationView: { kind: 'command' },\n createTextAnnotation: { kind: 'command' },\n setPersistToDocument: { kind: 'command' },\n saveAnnotations: { kind: 'callbackQuery' },\n saveTextAnnotations: { kind: 'command' },\n clearAnnotations: { kind: 'command' },\n clearTextAnnotations: { kind: 'command' },\n undoAnnotation: { kind: 'command' },\n redoAnnotation: { kind: 'command' },\n selectAnnotationTool: { kind: 'command' },\n showAnnotationColorPicker: { kind: 'command' },\n setAnnotationPenType: { kind: 'command' },\n appendAnnotations: { kind: 'callbackQuery' },\n batchAppendAnnotations: { kind: 'callbackQuery' },\n setAnnotationPenColor: { kind: 'command' },\n setAnnotationPenWidth: { kind: 'command' },\n setAnnotationPenThickness: { kind: 'command' },\n enableAnnotationsInfoView: { kind: 'command' },\n enableAnnotationsDeletion: { kind: 'command' },\n enableAnnotationsDeletionOnlyByAuthor: { kind: 'command' },\n listDigitalStamps: { kind: 'command' },\n listAnnotations: { kind: 'command' },\n deleteAnnotationsBy: { kind: 'command' },\n deleteAnnotationsById: { kind: 'command' },\n addDigitalAnnotation: { kind: 'command' },\n addInkAnnotationCallback: { kind: 'callbackRegister' },\n },\n this.bridgeToolContext,\n );\n }\n\n private readonly mountReader = async (\n hostContainer: HTMLDivElement,\n configuration: NormalizedReaderEmbedOptions,\n mountToken: number,\n ): Promise<void> => {\n try {\n await ensureReaderScriptLoaded(configuration.appUrl);\n if (this.mountToken !== mountToken) {\n return;\n }\n\n const readerElement = document.createElement(READER_CUSTOM_ELEMENT_TAG);\n const readerId = createReaderId();\n readerElement.setAttribute(RHC_OFFICE_READER_ID_ATTRIBUTE, readerId);\n this.readerId = readerId;\n this.bridge.setReaderId(readerId);\n applyReaderElementLayout(readerElement, configuration);\n this.themeCleanup = bindReaderElementTheme(readerElement, configuration);\n this.bindNativeReaderEvents(readerElement);\n\n hostContainer.replaceChildren(readerElement);\n this.readerElement = readerElement;\n await Promise.resolve();\n if (this.mountToken !== mountToken) {\n return;\n }\n\n if (configuration.scrollIntoView && typeof hostContainer.scrollIntoView === 'function') {\n hostContainer.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n this.isReady = true;\n const payload = createReaderPayload(readerElement, configuration);\n this.emitReaderEvent(READER_READY_EVENT_NAME, payload);\n this.readyCallbacks.forEach((callback) => callback());\n } catch (error: unknown) {\n if (this.mountToken !== mountToken) {\n return;\n }\n\n this.reportReaderError(error);\n }\n };\n\n private readonly bindNativeReaderEvents = (readerElement: HTMLElement): void => {\n this.cleanupNativeEventForwarders();\n\n const adapterEventListener = (event: Event): void => {\n const detail = event instanceof CustomEvent ? (event.detail as AdapterEvent) : null;\n if (!detail || detail.readerId !== this.readerId) {\n return;\n }\n\n this.readerState.update(detail.statePatch);\n this.callbacks.emit(detail.event, detail.payload);\n this.emitReaderEvent(detail.event, detail.payload as ReaderEventPayload);\n };\n readerElement.addEventListener(RHC_OFFICE_ADAPTER_EVENT, adapterEventListener as EventListener);\n this.nativeEventCleanupCallbacks.push(() => {\n readerElement.removeEventListener(\n RHC_OFFICE_ADAPTER_EVENT,\n adapterEventListener as EventListener,\n );\n });\n\n NATIVE_READER_EVENT_NAMES.forEach((eventName) => {\n const listener = (event: Event): void => {\n const payload = event instanceof CustomEvent ? event.detail : event;\n if (eventName === 'documentLoaded') {\n this.readerState.setDocumentOpened(true);\n }\n this.emitReaderEvent(eventName, payload);\n if (eventName === 'documentError') {\n this.emitReaderEvent(READER_ERROR_EVENT_NAME, payload);\n }\n };\n\n readerElement.addEventListener(eventName, listener as EventListener);\n this.nativeEventCleanupCallbacks.push(() => {\n readerElement.removeEventListener(eventName, listener as EventListener);\n });\n });\n };\n\n private readonly cleanupNativeEventForwarders = (): void => {\n this.nativeEventCleanupCallbacks.splice(0).forEach((callback) => callback());\n };\n\n private readonly cleanupThemeBinding = (): void => {\n this.themeCleanup?.();\n this.themeCleanup = null;\n };\n\n private readonly emitReaderEvent = (eventName: string, payload: unknown): void => {\n this.readerEventListener?.(eventName, payload as ReaderEventPayload);\n };\n\n private readonly reportReaderError = (error: unknown): void => {\n this.isReady = false;\n if (this.debugEnabled) {\n console.error('[RHC Office SDK] Reader mount failed', error);\n }\n\n this.emitReaderEvent(READER_ERROR_EVENT_NAME, error);\n };\n\n private readonly reportAdapterError = (error: unknown): void => {\n if (this.debugEnabled) {\n console.error('[RHC Office SDK] Adapter command failed', error);\n }\n\n this.emitReaderEvent(READER_ERROR_EVENT_NAME, error);\n };\n}\n\nexport const createNewDocumentSdk = (options?: DocumentSDKRuntimeOptions): IDocumentSDK => {\n return new DocumentSDK(options);\n};\n"],"names":["WatermarkDisplay","DEFAULT_EDGE_POSITION","DEFAULT_SIGNATURE_TYPE","DEFAULT_RSA_MODE","DIGITAL_SIGN_ENVIRONMENT_STORE_KEY","EMPTY_DIGITAL_SIGN_ENVIRONMENT","cloneDefaultsConfig","config","cloneSignServerConfig","cloneEnvironmentConfig","cloneEnvironmentPatch","patch","mergeDefaultsPatch","base","mergeSignServerPatch","mergeEnvironmentPatch","mergeEnvironmentPatchState","getGlobalScope","resolveRuntimeStore","globalScope","getDigitalSignEnvironment","initializeDigitalSignEnvironment","defaults","store","setDigitalSignEnvironment","patchDigitalSignEnvironment","resetDigitalSignEnvironment","DIGITAL_SIGN_DEFAULTS","normalizeParams","args","createBridgeToolAdapter","tool","descriptor","context","_target","property","methodDescriptor","adapterMethod","callback","arg","params","result","callbackArgs","_args","error","createNotImplementedBridgeTool","message","DOCUMENT_TOOL_DESCRIPTOR","callbacks","content","state","DocumentToolImpl","options","onDocumentOpened","uploadUrl","onSavedCallback","onDocumentContent","discardModify","onClose","serverUrl","FIND_TOOL_DESCRIPTOR","FindToolImpl","queryText","NETWORKING_TOOL_DESCRIPTOR","NetworkingToolImpl","headers","fields","createPageToolDescriptor","PageToolImpl","scale","r","g","b","alpha","pageIndex","x","y","rotation","PDF_FORM_FILLER_TOOL_DESCRIPTOR","PdfFormFillerImpl","filedName","value","readOnly","PAGE_RANGE_SEPARATOR_PATTERN","PAGE_BOUNDS_SEPARATOR_PATTERN","normalizePageNumber","parsedValue","expandPageRangeSegment","segment","bounds","pageNumber","startPage","endPage","_","index","parsePageRanges","pageRange","source","KVField","key","description","name","DigitalSignOptions","signType","position","text","signUserData","margin","reason","location","password","BOOK_VIEW_PAGE_MODES","createUIToolDescriptor","UIToolImpl","opt","menuId","visible","buttonId","buttonStyle","compact","normalizeTheme","theme","normalizedTheme","normalizeAppUrl","appUrl","normalizedUrl","createBootstrapUrl","normalizeReaderEmbedOptions","configuration","normalizedAppUrl","READER_CUSTOM_ELEMENT_TAG","READER_LOADER_REGISTRY_KEY","getReaderLoaderRegistry","browserGlobal","findScriptElementBySource","element","ReaderScriptLoadError","bootstrapUrl","ReaderSourceConflictError","activeAppUrl","requestedAppUrl","assertCompatibleReaderSource","registry","ensureReaderScriptLoaded","existingLoadPromise","resolvedPromise","existingScriptElement","loadPromise","resolve","reject","rejectScriptLoad","scriptElement","resolveWhenDefined","RHC_OFFICE_ADAPTER_PROTOCOL","RHC_OFFICE_ADAPTER_VERSION","RHC_OFFICE_ADAPTER_GLOBAL","RHC_OFFICE_ADAPTER_READY_EVENT","RHC_OFFICE_ADAPTER_EVENT","RHC_OFFICE_READER_ID_ATTRIBUTE","DEFAULT_REQUEST_TIMEOUT_MS","DEFAULT_READY_TIMEOUT_MS","createRequestId","cryptoApi","getAdapterGlobal","ReaderBridgeError","code","details","ReaderBridgeClient","readerId","method","response","adapter","request","timeoutMs","existingAdapter","timeoutId","cleanup","onReady","event","promise","requestId","DEFAULT_READER_STATE","ReaderStateStore","opened","SdkCallbackRegistry","payload","pagePayload","annotationPayload","NATIVE_READER_EVENT_NAMES","READER_READY_EVENT_NAME","READER_UNLOAD_EVENT_NAME","READER_ERROR_EVENT_NAME","createReaderId","createReaderPayload","readerElement","resolveContainerElement","container","resolveSystemReaderTheme","supportsMatchMedia","addMediaQueryListener","mediaQuery","listener","compatibleMediaQuery","removeMediaQueryListener","applyReaderElementLayout","bindReaderElementTheme","configuredTheme","applySystemTheme","colorSchemeMediaQuery","contrastMediaQuery","handleThemeChange","DocumentSDK","debug","license","feature","userNameOrInfo","userId","sessionData","hostContainer","normalizedConfiguration","mountToken","hadMountedReader","adapterEventListener","detail","eventName","createNewDocumentSdk"],"mappings":"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"}