ngx-extended-pdf-viewer
Version:
Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.
52,854 lines • 1.9 MB
JavaScript
/**
* @licstart The following is the entire license notice for the
* JavaScript code in this page
*
* Copyright 2024 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @licend The above is the entire license notice for the
* JavaScript code in this page
*/
/**
* pdfjsVersion = 5.3.754
* pdfjsBuild = 75bd8d739
*/
/******/ var __webpack_modules__ = ({
/***/ 34:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isCallable = __webpack_require__(4901);
module.exports = function (it) {
return typeof it == 'object' ? it !== null : isCallable(it);
};
/***/ }),
/***/ 81:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var tryToString = __webpack_require__(6823);
var getIteratorMethod = __webpack_require__(851);
var $TypeError = TypeError;
module.exports = function (argument, usingIterator) {
var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
throw new $TypeError(tryToString(argument) + ' is not iterable');
};
/***/ }),
/***/ 116:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var iterate = __webpack_require__(2652);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var findWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('find', TypeError);
// `Iterator.prototype.find` method
// https://tc39.es/ecma262/#sec-iterator.prototype.find
$({ target: 'Iterator', proto: true, real: true, forced: findWithoutClosingOnEarlyError }, {
find: function find(predicate) {
anObject(this);
try {
aCallable(predicate);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (findWithoutClosingOnEarlyError) return call(findWithoutClosingOnEarlyError, this, predicate);
var record = getIteratorDirect(this);
var counter = 0;
return iterate(record, function (value, stop) {
if (predicate(value, counter++)) return stop(value);
}, { IS_RECORD: true, INTERRUPTED: true }).result;
}
});
/***/ }),
/***/ 283:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var fails = __webpack_require__(9039);
var isCallable = __webpack_require__(4901);
var hasOwn = __webpack_require__(9297);
var DESCRIPTORS = __webpack_require__(3724);
var CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(350).CONFIGURABLE);
var inspectSource = __webpack_require__(3706);
var InternalStateModule = __webpack_require__(1181);
var enforceInternalState = InternalStateModule.enforce;
var getInternalState = InternalStateModule.get;
var $String = String;
// eslint-disable-next-line es/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;
var stringSlice = uncurryThis(''.slice);
var replace = uncurryThis(''.replace);
var join = uncurryThis([].join);
var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {
return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;
});
var TEMPLATE = String(String).split('String');
var makeBuiltIn = module.exports = function (value, name, options) {
if (stringSlice($String(name), 0, 7) === 'Symbol(') {
name = '[' + replace($String(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']';
}
if (options && options.getter) name = 'get ' + name;
if (options && options.setter) name = 'set ' + name;
if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {
if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });
else value.name = name;
}
if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {
defineProperty(value, 'length', { value: options.arity });
}
try {
if (options && hasOwn(options, 'constructor') && options.constructor) {
if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });
// in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable
} else if (value.prototype) value.prototype = undefined;
} catch (error) { /* empty */ }
var state = enforceInternalState(value);
if (!hasOwn(state, 'source')) {
state.source = join(TEMPLATE, typeof name == 'string' ? name : '');
} return value;
};
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
// eslint-disable-next-line no-extend-native -- required
Function.prototype.toString = makeBuiltIn(function toString() {
return isCallable(this) && getInternalState(this).source || inspectSource(this);
}, 'toString');
/***/ }),
/***/ 350:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var hasOwn = __webpack_require__(9297);
var FunctionPrototype = Function.prototype;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
var EXISTS = hasOwn(FunctionPrototype, 'name');
// additional protection from minified / mangled / dropped function names
var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));
module.exports = {
EXISTS: EXISTS,
PROPER: PROPER,
CONFIGURABLE: CONFIGURABLE
};
/***/ }),
/***/ 373:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var uncurryThis = __webpack_require__(7476);
var fails = __webpack_require__(9039);
var aCallable = __webpack_require__(9306);
var internalSort = __webpack_require__(4488);
var ArrayBufferViewCore = __webpack_require__(4644);
var FF = __webpack_require__(3709);
var IE_OR_EDGE = __webpack_require__(3763);
var V8 = __webpack_require__(9519);
var WEBKIT = __webpack_require__(3607);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var Uint16Array = globalThis.Uint16Array;
var nativeSort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);
// WebKit
var ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !(fails(function () {
nativeSort(new Uint16Array(2), null);
}) && fails(function () {
nativeSort(new Uint16Array(2), {});
}));
var STABLE_SORT = !!nativeSort && !fails(function () {
// feature detection can be too slow, so check engines versions
if (V8) return V8 < 74;
if (FF) return FF < 67;
if (IE_OR_EDGE) return true;
if (WEBKIT) return WEBKIT < 602;
var array = new Uint16Array(516);
var expected = Array(516);
var index, mod;
for (index = 0; index < 516; index++) {
mod = index % 4;
array[index] = 515 - index;
expected[index] = index - 2 * mod + 3;
}
nativeSort(array, function (a, b) {
return (a / 4 | 0) - (b / 4 | 0);
});
for (index = 0; index < 516; index++) {
if (array[index] !== expected[index]) return true;
}
});
var getSortCompare = function (comparefn) {
return function (x, y) {
if (comparefn !== undefined) return +comparefn(x, y) || 0;
// eslint-disable-next-line no-self-compare -- NaN check
if (y !== y) return -1;
// eslint-disable-next-line no-self-compare -- NaN check
if (x !== x) return 1;
if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
return x > y;
};
};
// `%TypedArray%.prototype.sort` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
exportTypedArrayMethod('sort', function sort(comparefn) {
if (comparefn !== undefined) aCallable(comparefn);
if (STABLE_SORT) return nativeSort(this, comparefn);
return internalSort(aTypedArray(this), getSortCompare(comparefn));
}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);
/***/ }),
/***/ 397:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var getBuiltIn = __webpack_require__(7751);
module.exports = getBuiltIn('document', 'documentElement');
/***/ }),
/***/ 421:
/***/ ((module) => {
module.exports = {};
/***/ }),
/***/ 507:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
module.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {
var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;
var next = record.next;
var step, result;
while (!(step = call(next, iterator)).done) {
result = fn(step.value);
if (result !== undefined) return result;
}
};
/***/ }),
/***/ 531:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var getIteratorFlattenable = __webpack_require__(8646);
var createIteratorProxy = __webpack_require__(9462);
var iteratorClose = __webpack_require__(9539);
var IS_PURE = __webpack_require__(6395);
var iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE
&& !iteratorHelperThrowsOnInvalidIterator('flatMap', function () { /* empty */ });
var flatMapWithoutClosingOnEarlyError = !IS_PURE && !FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
&& iteratorHelperWithoutClosingOnEarlyError('flatMap', TypeError);
var FORCED = IS_PURE || FLAT_MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || flatMapWithoutClosingOnEarlyError;
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var mapper = this.mapper;
var result, inner;
while (true) {
if (inner = this.inner) try {
result = anObject(call(inner.next, inner.iterator));
if (!result.done) return result.value;
this.inner = null;
} catch (error) { iteratorClose(iterator, 'throw', error); }
result = anObject(call(this.next, iterator));
if (this.done = !!result.done) return;
try {
this.inner = getIteratorFlattenable(mapper(result.value, this.counter++), false);
} catch (error) { iteratorClose(iterator, 'throw', error); }
}
});
// `Iterator.prototype.flatMap` method
// https://tc39.es/ecma262/#sec-iterator.prototype.flatmap
$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
flatMap: function flatMap(mapper) {
anObject(this);
try {
aCallable(mapper);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (flatMapWithoutClosingOnEarlyError) return call(flatMapWithoutClosingOnEarlyError, this, mapper);
return new IteratorProxy(getIteratorDirect(this), {
mapper: mapper,
inner: null
});
}
});
/***/ }),
/***/ 616:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
module.exports = !fails(function () {
// eslint-disable-next-line es/no-function-prototype-bind -- safe
var test = (function () { /* empty */ }).bind();
// eslint-disable-next-line no-prototype-builtins -- safe
return typeof test != 'function' || test.hasOwnProperty('prototype');
});
/***/ }),
/***/ 655:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var classof = __webpack_require__(6955);
var $String = String;
module.exports = function (argument) {
if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');
return $String(argument);
};
/***/ }),
/***/ 679:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isPrototypeOf = __webpack_require__(1625);
var $TypeError = TypeError;
module.exports = function (it, Prototype) {
if (isPrototypeOf(Prototype, it)) return it;
throw new $TypeError('Incorrect invocation');
};
/***/ }),
/***/ 684:
/***/ ((module) => {
// Should throw an error on invalid iterator
// https://issues.chromium.org/issues/336839115
module.exports = function (methodName, argument) {
// eslint-disable-next-line es/no-iterator -- required for testing
var method = typeof Iterator == 'function' && Iterator.prototype[methodName];
if (method) try {
method.call({ next: null }, argument).next();
} catch (error) {
return true;
}
};
/***/ }),
/***/ 741:
/***/ ((module) => {
var ceil = Math.ceil;
var floor = Math.floor;
// `Math.trunc` method
// https://tc39.es/ecma262/#sec-math.trunc
// eslint-disable-next-line es/no-math-trunc -- safe
module.exports = Math.trunc || function trunc(x) {
var n = +x;
return (n > 0 ? floor : ceil)(n);
};
/***/ }),
/***/ 747:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var createNonEnumerableProperty = __webpack_require__(6699);
var clearErrorStack = __webpack_require__(6193);
var ERROR_STACK_INSTALLABLE = __webpack_require__(4659);
// non-standard V8
// eslint-disable-next-line es/no-nonstandard-error-properties -- safe
var captureStackTrace = Error.captureStackTrace;
module.exports = function (error, C, stack, dropEntries) {
if (ERROR_STACK_INSTALLABLE) {
if (captureStackTrace) captureStackTrace(error, C);
else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));
}
};
/***/ }),
/***/ 757:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var getBuiltIn = __webpack_require__(7751);
var isCallable = __webpack_require__(4901);
var isPrototypeOf = __webpack_require__(1625);
var USE_SYMBOL_AS_UID = __webpack_require__(7040);
var $Object = Object;
module.exports = USE_SYMBOL_AS_UID ? function (it) {
return typeof it == 'symbol';
} : function (it) {
var $Symbol = getBuiltIn('Symbol');
return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
};
/***/ }),
/***/ 851:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var classof = __webpack_require__(6955);
var getMethod = __webpack_require__(5966);
var isNullOrUndefined = __webpack_require__(4117);
var Iterators = __webpack_require__(6269);
var wellKnownSymbol = __webpack_require__(8227);
var ITERATOR = wellKnownSymbol('iterator');
module.exports = function (it) {
if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)
|| getMethod(it, '@@iterator')
|| Iterators[classof(it)];
};
/***/ }),
/***/ 944:
/***/ ((module) => {
var $TypeError = TypeError;
module.exports = function (options) {
var alphabet = options && options.alphabet;
if (alphabet === undefined || alphabet === 'base64' || alphabet === 'base64url') return alphabet || 'base64';
throw new $TypeError('Incorrect `alphabet` option');
};
/***/ }),
/***/ 1056:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var defineProperty = (__webpack_require__(4913).f);
module.exports = function (Target, Source, key) {
key in Target || defineProperty(Target, key, {
configurable: true,
get: function () { return Source[key]; },
set: function (it) { Source[key] = it; }
});
};
/***/ }),
/***/ 1072:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var internalObjectKeys = __webpack_require__(1828);
var enumBugKeys = __webpack_require__(8727);
// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
// eslint-disable-next-line es/no-object-keys -- safe
module.exports = Object.keys || function keys(O) {
return internalObjectKeys(O, enumBugKeys);
};
/***/ }),
/***/ 1103:
/***/ ((module) => {
module.exports = function (exec) {
try {
return { error: false, value: exec() };
} catch (error) {
return { error: true, value: error };
}
};
/***/ }),
/***/ 1108:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var classof = __webpack_require__(6955);
module.exports = function (it) {
var klass = classof(it);
return klass === 'BigInt64Array' || klass === 'BigUint64Array';
};
/***/ }),
/***/ 1134:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var ArrayBufferViewCore = __webpack_require__(4644);
var $findLastIndex = (__webpack_require__(3839).findLastIndex);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.findLastIndex` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlastindex
exportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {
return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
});
/***/ }),
/***/ 1148:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var iterate = __webpack_require__(2652);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var everyWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('every', TypeError);
// `Iterator.prototype.every` method
// https://tc39.es/ecma262/#sec-iterator.prototype.every
$({ target: 'Iterator', proto: true, real: true, forced: everyWithoutClosingOnEarlyError }, {
every: function every(predicate) {
anObject(this);
try {
aCallable(predicate);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (everyWithoutClosingOnEarlyError) return call(everyWithoutClosingOnEarlyError, this, predicate);
var record = getIteratorDirect(this);
var counter = 0;
return !iterate(record, function (value, stop) {
if (!predicate(value, counter++)) return stop();
}, { IS_RECORD: true, INTERRUPTED: true }).stopped;
}
});
/***/ }),
/***/ 1181:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var NATIVE_WEAK_MAP = __webpack_require__(8622);
var globalThis = __webpack_require__(4576);
var isObject = __webpack_require__(34);
var createNonEnumerableProperty = __webpack_require__(6699);
var hasOwn = __webpack_require__(9297);
var shared = __webpack_require__(7629);
var sharedKey = __webpack_require__(6119);
var hiddenKeys = __webpack_require__(421);
var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
var TypeError = globalThis.TypeError;
var WeakMap = globalThis.WeakMap;
var set, get, has;
var enforce = function (it) {
return has(it) ? get(it) : set(it, {});
};
var getterFor = function (TYPE) {
return function (it) {
var state;
if (!isObject(it) || (state = get(it)).type !== TYPE) {
throw new TypeError('Incompatible receiver, ' + TYPE + ' required');
} return state;
};
};
if (NATIVE_WEAK_MAP || shared.state) {
var store = shared.state || (shared.state = new WeakMap());
/* eslint-disable no-self-assign -- prototype methods protection */
store.get = store.get;
store.has = store.has;
store.set = store.set;
/* eslint-enable no-self-assign -- prototype methods protection */
set = function (it, metadata) {
if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
store.set(it, metadata);
return metadata;
};
get = function (it) {
return store.get(it) || {};
};
has = function (it) {
return store.has(it);
};
} else {
var STATE = sharedKey('state');
hiddenKeys[STATE] = true;
set = function (it, metadata) {
if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
createNonEnumerableProperty(it, STATE, metadata);
return metadata;
};
get = function (it) {
return hasOwn(it, STATE) ? it[STATE] : {};
};
has = function (it) {
return hasOwn(it, STATE);
};
}
module.exports = {
set: set,
get: get,
has: has,
enforce: enforce,
getterFor: getterFor
};
/***/ }),
/***/ 1291:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var trunc = __webpack_require__(741);
// `ToIntegerOrInfinity` abstract operation
// https://tc39.es/ecma262/#sec-tointegerorinfinity
module.exports = function (argument) {
var number = +argument;
// eslint-disable-next-line no-self-compare -- NaN check
return number !== number || number === 0 ? 0 : trunc(number);
};
/***/ }),
/***/ 1385:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var iteratorClose = __webpack_require__(9539);
module.exports = function (iters, kind, value) {
for (var i = iters.length - 1; i >= 0; i--) {
if (iters[i] === undefined) continue;
try {
value = iteratorClose(iters[i].iterator, kind, value);
} catch (error) {
kind = 'throw';
value = error;
}
}
if (kind === 'throw') throw value;
return value;
};
/***/ }),
/***/ 1548:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var fails = __webpack_require__(9039);
var V8 = __webpack_require__(9519);
var ENVIRONMENT = __webpack_require__(4215);
var structuredClone = globalThis.structuredClone;
module.exports = !!structuredClone && !fails(function () {
// prevent V8 ArrayBufferDetaching protector cell invalidation and performance degradation
// https://github.com/zloirock/core-js/issues/679
if ((ENVIRONMENT === 'DENO' && V8 > 92) || (ENVIRONMENT === 'NODE' && V8 > 94) || (ENVIRONMENT === 'BROWSER' && V8 > 97)) return false;
var buffer = new ArrayBuffer(8);
var clone = structuredClone(buffer, { transfer: [buffer] });
return buffer.byteLength !== 0 || clone.byteLength !== 8;
});
/***/ }),
/***/ 1549:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var $fromBase64 = __webpack_require__(9143);
var anUint8Array = __webpack_require__(4154);
var Uint8Array = globalThis.Uint8Array;
var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.setFromBase64 || !(function () {
var target = new Uint8Array([255, 255, 255, 255, 255]);
try {
target.setFromBase64('MjYyZg===');
} catch (error) {
return target[0] === 50 && target[1] === 54 && target[2] === 50 && target[3] === 255 && target[4] === 255;
}
})();
// `Uint8Array.prototype.setFromBase64` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {
setFromBase64: function setFromBase64(string /* , options */) {
anUint8Array(this);
var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, this, this.length);
return { read: result.read, written: result.written };
}
});
/***/ }),
/***/ 1625:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
module.exports = uncurryThis({}.isPrototypeOf);
/***/ }),
/***/ 1689:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var apply = __webpack_require__(8745);
var slice = __webpack_require__(7680);
var newPromiseCapabilityModule = __webpack_require__(6043);
var aCallable = __webpack_require__(9306);
var perform = __webpack_require__(1103);
var Promise = globalThis.Promise;
var ACCEPT_ARGUMENTS = false;
// Avoiding the use of polyfills of the previous iteration of this proposal
// that does not accept arguments of the callback
var FORCED = !Promise || !Promise['try'] || perform(function () {
Promise['try'](function (argument) {
ACCEPT_ARGUMENTS = argument === 8;
}, 8);
}).error || !ACCEPT_ARGUMENTS;
// `Promise.try` method
// https://tc39.es/ecma262/#sec-promise.try
$({ target: 'Promise', stat: true, forced: FORCED }, {
'try': function (callbackfn /* , ...args */) {
var args = arguments.length > 1 ? slice(arguments, 1) : [];
var promiseCapability = newPromiseCapabilityModule.f(this);
var result = perform(function () {
return apply(aCallable(callbackfn), undefined, args);
});
(result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);
return promiseCapability.promise;
}
});
/***/ }),
/***/ 1698:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var union = __webpack_require__(4204);
var setMethodGetKeysBeforeCloning = __webpack_require__(9835);
var setMethodAcceptSetLike = __webpack_require__(4916);
var FORCED = !setMethodAcceptSetLike('union') || !setMethodGetKeysBeforeCloning('union');
// `Set.prototype.union` method
// https://tc39.es/ecma262/#sec-set.prototype.union
$({ target: 'Set', proto: true, real: true, forced: FORCED }, {
union: union
});
/***/ }),
/***/ 1701:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var createIteratorProxy = __webpack_require__(9462);
var callWithSafeIterationClosing = __webpack_require__(6319);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var IS_PURE = __webpack_require__(6395);
var MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('map', function () { /* empty */ });
var mapWithoutClosingOnEarlyError = !IS_PURE && !MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR
&& iteratorHelperWithoutClosingOnEarlyError('map', TypeError);
var FORCED = IS_PURE || MAP_WITHOUT_THROWING_ON_INVALID_ITERATOR || mapWithoutClosingOnEarlyError;
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var result = anObject(call(this.next, iterator));
var done = this.done = !!result.done;
if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);
});
// `Iterator.prototype.map` method
// https://tc39.es/ecma262/#sec-iterator.prototype.map
$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
map: function map(mapper) {
anObject(this);
try {
aCallable(mapper);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (mapWithoutClosingOnEarlyError) return call(mapWithoutClosingOnEarlyError, this, mapper);
return new IteratorProxy(getIteratorDirect(this), {
mapper: mapper
});
}
});
/***/ }),
/***/ 1767:
/***/ ((module) => {
// `GetIteratorDirect(obj)` abstract operation
// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect
module.exports = function (obj) {
return {
iterator: obj,
next: obj.next,
done: false
};
};
/***/ }),
/***/ 1828:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var hasOwn = __webpack_require__(9297);
var toIndexedObject = __webpack_require__(5397);
var indexOf = (__webpack_require__(9617).indexOf);
var hiddenKeys = __webpack_require__(421);
var push = uncurryThis([].push);
module.exports = function (object, names) {
var O = toIndexedObject(object);
var i = 0;
var result = [];
var key;
for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
// Don't enum bug & hidden keys
while (names.length > i) if (hasOwn(O, key = names[i++])) {
~indexOf(result, key) || push(result, key);
}
return result;
};
/***/ }),
/***/ 1903:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var ArrayBufferViewCore = __webpack_require__(4644);
var $findLast = (__webpack_require__(3839).findLast);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.findLast` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlast
exportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {
return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
});
/***/ }),
/***/ 2106:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var makeBuiltIn = __webpack_require__(283);
var defineProperty = __webpack_require__(4913);
module.exports = function (target, name, descriptor) {
if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
return defineProperty.f(target, name, descriptor);
};
/***/ }),
/***/ 2140:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var wellKnownSymbol = __webpack_require__(8227);
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var test = {};
test[TO_STRING_TAG] = 'z';
module.exports = String(test) === '[object z]';
/***/ }),
/***/ 2195:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var toString = uncurryThis({}.toString);
var stringSlice = uncurryThis(''.slice);
module.exports = function (it) {
return stringSlice(toString(it), 8, -1);
};
/***/ }),
/***/ 2211:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
module.exports = !fails(function () {
function F() { /* empty */ }
F.prototype.constructor = null;
// eslint-disable-next-line es/no-object-getprototypeof -- required for testing
return Object.getPrototypeOf(new F()) !== F.prototype;
});
/***/ }),
/***/ 2222:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var getBuiltIn = __webpack_require__(7751);
var fails = __webpack_require__(9039);
var validateArgumentsLength = __webpack_require__(2812);
var toString = __webpack_require__(655);
var USE_NATIVE_URL = __webpack_require__(7416);
var URL = getBuiltIn('URL');
// https://github.com/nodejs/node/issues/47505
// https://github.com/denoland/deno/issues/18893
var THROWS_WITHOUT_ARGUMENTS = USE_NATIVE_URL && fails(function () {
URL.canParse();
});
// Bun ~ 1.0.30 bug
// https://github.com/oven-sh/bun/issues/9250
var WRONG_ARITY = fails(function () {
return URL.canParse.length !== 1;
});
// `URL.canParse` method
// https://url.spec.whatwg.org/#dom-url-canparse
$({ target: 'URL', stat: true, forced: !THROWS_WITHOUT_ARGUMENTS || WRONG_ARITY }, {
canParse: function canParse(url) {
var length = validateArgumentsLength(arguments.length, 1);
var urlString = toString(url);
var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]);
try {
return !!new URL(urlString, base);
} catch (error) {
return false;
}
}
});
/***/ }),
/***/ 2278:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var definePropertyModule = __webpack_require__(4913);
var createPropertyDescriptor = __webpack_require__(6980);
module.exports = function (object, key, value) {
if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));
else object[key] = value;
};
/***/ }),
/***/ 2303:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var uncurryThis = __webpack_require__(9504);
var Uint8Array = globalThis.Uint8Array;
var SyntaxError = globalThis.SyntaxError;
var parseInt = globalThis.parseInt;
var min = Math.min;
var NOT_HEX = /[^\da-f]/i;
var exec = uncurryThis(NOT_HEX.exec);
var stringSlice = uncurryThis(''.slice);
module.exports = function (string, into) {
var stringLength = string.length;
if (stringLength % 2 !== 0) throw new SyntaxError('String should be an even number of characters');
var maxLength = into ? min(into.length, stringLength / 2) : stringLength / 2;
var bytes = into || new Uint8Array(maxLength);
var read = 0;
var written = 0;
while (written < maxLength) {
var hexits = stringSlice(string, read, read += 2);
if (exec(NOT_HEX, hexits)) throw new SyntaxError('String should only contain hex characters');
bytes[written++] = parseInt(hexits, 16);
}
return { bytes: bytes, read: read };
};
/***/ }),
/***/ 2360:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* global ActiveXObject -- old IE, WSH */
var anObject = __webpack_require__(8551);
var definePropertiesModule = __webpack_require__(6801);
var enumBugKeys = __webpack_require__(8727);
var hiddenKeys = __webpack_require__(421);
var html = __webpack_require__(397);
var documentCreateElement = __webpack_require__(4055);
var sharedKey = __webpack_require__(6119);
var GT = '>';
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
var IE_PROTO = sharedKey('IE_PROTO');
var EmptyConstructor = function () { /* empty */ };
var scriptTag = function (content) {
return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};
// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
var NullProtoObjectViaActiveX = function (activeXDocument) {
activeXDocument.write(scriptTag(''));
activeXDocument.close();
var temp = activeXDocument.parentWindow.Object;
// eslint-disable-next-line no-useless-assignment -- avoid memory leak
activeXDocument = null;
return temp;
};
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
// Thrash, waste and sodomy: IE GC bug
var iframe = documentCreateElement('iframe');
var JS = 'java' + SCRIPT + ':';
var iframeDocument;
iframe.style.display = 'none';
html.appendChild(iframe);
// https://github.com/zloirock/core-js/issues/475
iframe.src = String(JS);
iframeDocument = iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.write(scriptTag('document.F=Object'));
iframeDocument.close();
return iframeDocument.F;
};
// Check for document.domain and active x support
// No need to use active x approach when document.domain is not set
// see https://github.com/es-shims/es5-shim/issues/150
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
// avoid IE GC bug
var activeXDocument;
var NullProtoObject = function () {
try {
activeXDocument = new ActiveXObject('htmlfile');
} catch (error) { /* ignore */ }
NullProtoObject = typeof document != 'undefined'
? document.domain && activeXDocument
? NullProtoObjectViaActiveX(activeXDocument) // old IE
: NullProtoObjectViaIFrame()
: NullProtoObjectViaActiveX(activeXDocument); // WSH
var length = enumBugKeys.length;
while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
return NullProtoObject();
};
hiddenKeys[IE_PROTO] = true;
// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
// eslint-disable-next-line es/no-object-create -- safe
module.exports = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
EmptyConstructor[PROTOTYPE] = anObject(O);
result = new EmptyConstructor();
EmptyConstructor[PROTOTYPE] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
result[IE_PROTO] = O;
} else result = NullProtoObject();
return Properties === undefined ? result : definePropertiesModule.f(result, Properties);
};
/***/ }),
/***/ 2475:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var isSupersetOf = __webpack_require__(8527);
var setMethodAcceptSetLike = __webpack_require__(4916);
var INCORRECT = !setMethodAcceptSetLike('isSupersetOf', function (result) {
return !result;
});
// `Set.prototype.isSupersetOf` method
// https://tc39.es/ecma262/#sec-set.prototype.issupersetof
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
isSupersetOf: isSupersetOf
});
/***/ }),
/***/ 2489:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var createIteratorProxy = __webpack_require__(9462);
var callWithSafeIterationClosing = __webpack_require__(6319);
var IS_PURE = __webpack_require__(6395);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('filter', function () { /* empty */ });
var filterWithoutClosingOnEarlyError = !IS_PURE && !FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR
&& iteratorHelperWithoutClosingOnEarlyError('filter', TypeError);
var FORCED = IS_PURE || FILTER_WITHOUT_THROWING_ON_INVALID_ITERATOR || filterWithoutClosingOnEarlyError;
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var predicate = this.predicate;
var next = this.next;
var result, done, value;
while (true) {
result = anObject(call(next, iterator));
done = this.done = !!result.done;
if (done) return;
value = result.value;
if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;
}
});
// `Iterator.prototype.filter` method
// https://tc39.es/ecma262/#sec-iterator.prototype.filter
$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
filter: function filter(predicate) {
anObject(this);
try {
aCallable(predicate);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (filterWithoutClosingOnEarlyError) return call(filterWithoutClosingOnEarlyError, this, predicate);
return new IteratorProxy(getIteratorDirect(this), {
predicate: predicate
});
}
});
/***/ }),
/***/ 2529:
/***/ ((module) => {
// `CreateIterResultObject` abstract operation
// https://tc39.es/ecma262/#sec-createiterresultobject
module.exports = function (value, done) {
return { value: value, done: done };
};
/***/ }),
/***/ 2603:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toString = __webpack_require__(655);
module.exports = function (argument, $default) {
return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);
};
/***/ }),
/***/ 2652:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var bind = __webpack_require__(6080);
var call = __webpack_require__(9565);
var anObject = __webpack_require__(8551);
var tryToString = __webpack_require__(6823);
var isArrayIteratorMethod = __webpack_require__(4209);
var lengthOfArrayLike = __webpack_require__(6198);
var isPrototypeOf = __webpack_require__(1625);
var getIterator = __webpack_require__(81);
var getIteratorMethod = __webpack_require__(851);
var iteratorClose = __webpack_require__(9539);
var $TypeError = TypeError;
var Result = function (stopped, result) {
this.stopped = stopped;
this.result = result;
};
var ResultPrototype = Result.prototype;
module.exports = function (iterable, unboundFunction, options) {
var that = options && options.that;
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
var IS_RECORD = !!(options && options.IS_RECORD);
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
var INTERRUPTED = !!(options && options.INTERRUPTED);
var fn = bind(unboundFunction, that);
var iterator, iterFn, index, length, result, next, step;
var stop = function (condition) {
if (iterator) iteratorClose(iterator, 'normal');
return new Result(true, condition);
};
var callFn = function (value) {
if (AS_ENTRIES) {
anObject(value);
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
} return INTERRUPTED ? fn(value, stop) : fn(value);
};
if (IS_RECORD) {
iterator = iterable.iterator;
} else if (IS_ITERATOR) {
iterator = iterable;
} else {
iterFn = getIteratorMethod(iterable);
if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');
// optimisation for array iterators
if (isArrayIteratorMethod(iterFn)) {
for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
result = callFn(iterable[index]);
if (result && isPrototypeOf(ResultPrototype, result)) return result;
} return new Result(false);
}
iterator = getIterator(iterable, iterFn);
}
next = IS_RECORD ? iterable.next : iterator.next;
while (!(step = call(next, iterator)).done) {
try {
result = callFn(step.value);
} catch (error) {
iteratorClose(iterator, 'throw', error);
}
if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;
} return new Result(false);
};
/***/ }),
/***/ 2777:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
var isObject = __webpack_require__(34);
var isSymbol = __webpack_require__(757);
var getMethod = __webpack_require__(5966);
var ordinaryToPrimitive = __webpack_require__(4270);
var wellKnownSymbol = __webpack_require__(8227);
var $TypeError = TypeError;
var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
// `ToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-toprimitive
module.exports = function (input, pref) {
if (!isObject(input) || isSymbol(input)) return input;
var exoticToPrim = getMethod(input, TO_PRIMITIVE);
var result;
if (exoticToPrim) {
if (pref === undefined) pref = 'default';
result = call(exoticToPrim, input, pref);
if (!isObject(result) || isSymbol(result)) return result;
throw new $TypeError("Can't convert object to primitive value");
}
if (pref === undefined) pref = 'number';
return ordinaryToPrimitive(input, pref);
};
/***/ }),
/***/ 2787:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var hasOwn = __webpack_require__(9297);
var isCallable = __webpack_require__(4901);
var toObject = __webpack_require__(8981);
var sharedKey = __webpack_require__(6119);
var CORRECT_PROTOTYPE_GETTER = __webpack_require__(2211);
var IE_PROTO = sharedKey('IE_PROTO');
var $Object = Object;
var ObjectPrototype = $Object.prototype;
// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
// eslint-disable-next-line es/no-object-getprototypeof -- safe
module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {
var object = toObject(O);
if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
var constructor = object.constructor;
if (isCallable(constructor) && object instanceof constructor) {
return constructor.prototype;
} return object instanceof $Object ? ObjectPrototype : null;
};
/***/ }),
/***/ 2796:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
var isCallable = __webpack_require__(4901);
var replacement = /#|\.prototype\./;
var isForced = function (feature, detection) {
var value = data[normalize(feature)];
return value === POLYFILL ? true
: value === NATIVE ? false
: isCallable(detection) ? fails(detection)
: !!detection;
};
var normalize = isForced.normalize = function (string) {
return String(string).replace(replacement, '.').toLowerCase();
};
var data = isForced.data = {};
var NATIVE = isForced.NATIVE = 'N';
var POLYFILL = isForced.POLYFILL = 'P';
module.exports = isForced;
/***/ }),
/***/ 2804:
/***/ ((module) => {
var commonAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var base64Alphabet = commonAlphabet + '+/';
var base64UrlAlphabet = commonAlphabet + '-_';
var inverse = function (characters) {
// TODO: use `Object.create(null)` in `core-js@4`
var result = {};
var index = 0;
for (; index < 64; index++) result[characters.charAt(index)] = index;
return result;
};
module.exports = {
i2c: base64Alphabet,
c2i: inverse(base64Alphabet),
i2cUrl: base64UrlAlphabet,
c2iUrl: inverse(base64UrlAlphabet)
};
/***/ }),
/***/ 2812:
/***/ ((module) => {
var $TypeError = TypeError;
module.exports = function (passed, required) {
if (passed < required) throw new $TypeError('Not enough arguments');
return passed;
};
/***/ }),
/***/ 2839:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var navigator = globalThis.navigator;
var userAgent = navigator && navigator.userAgent;
module.exports = userAgent ? String(userAgent) : '';
/***/ }),
/***/ 2967:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* eslint-disable no-proto -- safe */
var uncurryThisAccessor = __webpack_require__(6706);
var isObject = __webpack_require__(34);
var requireObjectCoercible = __webpack_require__(7750);
var aPossiblePrototype = __webpack_require__(3506);
// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
// Works with __proto__ only. Old v8 can't work with null proto objects.
// eslint-disable-next-line es/no-object-setprototypeof -- safe
module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
var CORRECT_SETTER = false;
var test = {};
var setter;
try {
setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');
setter(test, []);
CORRECT_SETTER = test instanceof Array;
} catch (error) { /* empty */ }
return function setPrototypeOf(O, proto) {
requireObjectCoercible(O);
aPossiblePrototype(proto);
if (!isObject(O)) return O;
if (CORRECT_SETTER) setter(O, proto);
else O.__proto__ = proto;
return O;
};
}() : undefined);
/***/ }),
/***/ 3167:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isCallable = __webpack_require__(4901);
var isObject = __webpack_require__(34);
var setPrototypeOf = __webpack_require__(2967);
// makes subclassing work correct for wrapped built-ins
module.exports = function ($this, dummy, Wrapper) {
var NewTarget, NewTargetPrototype;
if (
// it can work only with native `setPrototypeOf`
setPrototypeOf &&
// we haven't completely correct pre-ES6 way for getting `new.target`, so use this
isCallable(NewTarget = dummy.constructor) &&
NewTarget !== Wrapper &&
isObject(NewTargetPrototype = NewTarget.prototype) &&
NewTargetPrototype !== Wrapper.prototype
) setPrototypeOf($this, NewTargetPrototype);
return $this;
};
/***/ }),
/***/ 3238:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var NATIVE_ARRAY_BUFFER = __webpack_require__(7811);
var arrayBufferByteLength = __webpack_require__(7394);
var DataView = globalThis.DataView;
module.exports = function (O) {
if (!NATIVE_ARRAY_BUFFER || arrayBufferByteLength(O) !== 0) return false;
try {
// eslint-disable-next-line no-new -- thrower
new DataView(O);
return false;
} catch (error) {
return true;
}
};
/***/ }),
/***/ 3392:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var id = 0;
var postfix = Math.random();
var toString = uncurryThis(1.1.toString);
module.exports = function (key) {
return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);
};
/***/ }),
/***/ 3440:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var SetHelpers = __webpack_require__(4402);
var clone = __webpack_require__(9286);
var size = __webpack_require__(5170);
var getSetRecord = __webpack_require__(3789);
var iterateSet = __webpack_require__(8469);
var iterateSimple = __webpack_require__(507);
var has = SetHelpers.has;
var remove = SetHelpers.remove;
// `Set.prototype.difference` method
// https://github.com/tc39/proposal-set-methods
module.exports = function difference(other) {
var O = aSet(this);
var otherRec = getSetRecord(other);
var result = clone(O);
if (size(O) <= otherRec.size) iterateSet(O, function (e) {
if (otherRec.includes(e)) remove(result, e);
});
else iterateSimple(otherRec.getIterator(), function (e) {
if (has(result, e)) remove(result, e);
});
return result;
};
/***/ }),
/***/ 3463:
/***/ ((module) => {
var $TypeError = TypeError;
module.exports = function (argument) {
if (typeof argument == 'string') return argument;
throw new $TypeError('Argument is not a string');
};
/***/ }),
/***/ 3506:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isPossiblePrototype = __webpack_require__(3925);
var $String = String;
var $TypeError = TypeError;
module.exports = function (argument) {
if (isPossiblePrototype(argument)) return argument;
throw new $TypeError("Can't set " + $String(argument) + ' as a prototype');
};
/***/ }),
/***/ 3579:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var iterate = __webpack_require__(2652);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var someWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('some', TypeError);
// `Iterator.prototype.some` method
// https://tc39.es/ecma262/#sec-iterator.prototype.some
$({ target: 'Iterator', proto: true, real: true, forced: someWithoutClosingOnEarlyError }, {
some: function some(predicate) {
anObject(this);
try {
aCallable(predicate);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (someWithoutClosingOnEarlyError) return call(someWithoutClosingOnEarlyError, this, predicate);
var record = getIteratorDirect(this);
var counter = 0;
return iterate(record, function (value, stop) {
if (predicate(value, counter++)) return stop();
}, { IS_RECORD: true, INTERRUPTED: true }).stopped;
}
});
/***/ }),
/***/ 3607:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var userAgent = __webpack_require__(2839);
var webkit = userAgent.match(/AppleWebKit\/(\d+)\./);
module.exports = !!webkit && +webkit[1];
/***/ }),
/***/ 3611:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var defineBuiltInAccessor = __webpack_require__(2106);
var DESCRIPTORS = __webpack_require__(3724);
var $TypeError = TypeError;
// eslint-disable-next-line es/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;
var INCORRECT_VALUE = globalThis.self !== globalThis;
// `self` getter
// https://html.spec.whatwg.org/multipage/window-object.html#dom-self
try {
if (DESCRIPTORS) {
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var descriptor = Object.getOwnPropertyDescriptor(globalThis, 'self');
// some engines have `self`, but with incorrect descriptor
// https://github.com/denoland/deno/issues/15765
if (INCORRECT_VALUE || !descriptor || !descriptor.get || !descriptor.enumerable) {
defineBuiltInAccessor(globalThis, 'self', {
get: function self() {
return globalThis;
},
set: function self(value) {
if (this !== globalThis) throw new $TypeError('Illegal invocation');
defineProperty(globalThis, 'self', {
value: value,
writable: true,
configurable: true,
enumerable: true
});
},
configurable: true,
enumerable: true
});
}
} else $({ global: true, simple: true, forced: INCORRECT_VALUE }, {
self: globalThis
});
} catch (error) { /* empty */ }
/***/ }),
/***/ 3650:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var SetHelpers = __webpack_require__(4402);
var clone = __webpack_require__(9286);
var getSetRecord = __webpack_require__(3789);
var iterateSimple = __webpack_require__(507);
var add = SetHelpers.add;
var has = SetHelpers.has;
var remove = SetHelpers.remove;
// `Set.prototype.symmetricDifference` method
// https://github.com/tc39/proposal-set-methods
module.exports = function symmetricDifference(other) {
var O = aSet(this);
var keysIter = getSetRecord(other).getIterator();
var result = clone(O);
iterateSimple(keysIter, function (e) {
if (has(O, e)) remove(result, e);
else add(result, e);
});
return result;
};
/***/ }),
/***/ 3706:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var isCallable = __webpack_require__(4901);
var store = __webpack_require__(7629);
var functionToString = uncurryThis(Function.toString);
// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
if (!isCallable(store.inspectSource)) {
store.inspectSource = function (it) {
return functionToString(it);
};
}
module.exports = store.inspectSource;
/***/ }),
/***/ 3709:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var userAgent = __webpack_require__(2839);
var firefox = userAgent.match(/firefox\/(\d+)/i);
module.exports = !!firefox && +firefox[1];
/***/ }),
/***/ 3717:
/***/ ((__unused_webpack_module, exports) => {
// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe
exports.f = Object.getOwnPropertySymbols;
/***/ }),
/***/ 3724:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
// Detect IE8's incomplete defineProperty implementation
module.exports = !fails(function () {
// eslint-disable-next-line es/no-object-defineproperty -- required for testing
return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;
});
/***/ }),
/***/ 3763:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var UA = __webpack_require__(2839);
module.exports = /MSIE|Trident/.test(UA);
/***/ }),
/***/ 3789:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var call = __webpack_require__(9565);
var toIntegerOrInfinity = __webpack_require__(1291);
var getIteratorDirect = __webpack_require__(1767);
var INVALID_SIZE = 'Invalid size';
var $RangeError = RangeError;
var $TypeError = TypeError;
var max = Math.max;
var SetRecord = function (set, intSize) {
this.set = set;
this.size = max(intSize, 0);
this.has = aCallable(set.has);
this.keys = aCallable(set.keys);
};
SetRecord.prototype = {
getIterator: function () {
return getIteratorDirect(anObject(call(this.keys, this.set)));
},
includes: function (it) {
return call(this.has, this.set, it);
}
};
// `GetSetRecord` abstract operation
// https://tc39.es/proposal-set-methods/#sec-getsetrecord
module.exports = function (obj) {
anObject(obj);
var numSize = +obj.size;
// NOTE: If size is undefined, then numSize will be NaN
// eslint-disable-next-line no-self-compare -- NaN check
if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);
var intSize = toIntegerOrInfinity(numSize);
if (intSize < 0) throw new $RangeError(INVALID_SIZE);
return new SetRecord(obj, intSize);
};
/***/ }),
/***/ 3838:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var size = __webpack_require__(5170);
var iterate = __webpack_require__(8469);
var getSetRecord = __webpack_require__(3789);
// `Set.prototype.isSubsetOf` method
// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf
module.exports = function isSubsetOf(other) {
var O = aSet(this);
var otherRec = getSetRecord(other);
if (size(O) > otherRec.size) return false;
return iterate(O, function (e) {
if (!otherRec.includes(e)) return false;
}, true) !== false;
};
/***/ }),
/***/ 3839:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var bind = __webpack_require__(6080);
var IndexedObject = __webpack_require__(7055);
var toObject = __webpack_require__(8981);
var lengthOfArrayLike = __webpack_require__(6198);
// `Array.prototype.{ findLast, findLastIndex }` methods implementation
var createMethod = function (TYPE) {
var IS_FIND_LAST_INDEX = TYPE === 1;
return function ($this, callbackfn, that) {
var O = toObject($this);
var self = IndexedObject(O);
var index = lengthOfArrayLike(self);
var boundFunction = bind(callbackfn, that);
var value, result;
while (index-- > 0) {
value = self[index];
result = boundFunction(value, index, O);
if (result) switch (TYPE) {
case 0: return value; // findLast
case 1: return index; // findLastIndex
}
}
return IS_FIND_LAST_INDEX ? -1 : undefined;
};
};
module.exports = {
// `Array.prototype.findLast` method
// https://github.com/tc39/proposal-array-find-from-last
findLast: createMethod(0),
// `Array.prototype.findLastIndex` method
// https://github.com/tc39/proposal-array-find-from-last
findLastIndex: createMethod(1)
};
/***/ }),
/***/ 3853:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var isDisjointFrom = __webpack_require__(4449);
var setMethodAcceptSetLike = __webpack_require__(4916);
var INCORRECT = !setMethodAcceptSetLike('isDisjointFrom', function (result) {
return !result;
});
// `Set.prototype.isDisjointFrom` method
// https://tc39.es/ecma262/#sec-set.prototype.isdisjointfrom
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
isDisjointFrom: isDisjointFrom
});
/***/ }),
/***/ 3925:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(34);
module.exports = function (argument) {
return isObject(argument) || argument === null;
};
/***/ }),
/***/ 3972:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(34);
var $String = String;
var $TypeError = TypeError;
module.exports = function (argument) {
if (argument === undefined || isObject(argument)) return argument;
throw new $TypeError($String(argument) + ' is not an object or undefined');
};
/***/ }),
/***/ 4055:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var isObject = __webpack_require__(34);
var document = globalThis.document;
// typeof document.createElement is 'object' in old IE
var EXISTS = isObject(document) && isObject(document.createElement);
module.exports = function (it) {
return EXISTS ? document.createElement(it) : {};
};
/***/ }),
/***/ 4114:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var toObject = __webpack_require__(8981);
var lengthOfArrayLike = __webpack_require__(6198);
var setArrayLength = __webpack_require__(4527);
var doesNotExceedSafeInteger = __webpack_require__(6837);
var fails = __webpack_require__(9039);
var INCORRECT_TO_LENGTH = fails(function () {
return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;
});
// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError
// https://bugs.chromium.org/p/v8/issues/detail?id=12681
var properErrorOnNonWritableLength = function () {
try {
// eslint-disable-next-line es/no-object-defineproperty -- safe
Object.defineProperty([], 'length', { writable: false }).push();
} catch (error) {
return error instanceof TypeError;
}
};
var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();
// `Array.prototype.push` method
// https://tc39.es/ecma262/#sec-array.prototype.push
$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
push: function push(item) {
var O = toObject(this);
var len = lengthOfArrayLike(O);
var argCount = arguments.length;
doesNotExceedSafeInteger(len + argCount);
for (var i = 0; i < argCount; i++) {
O[len] = arguments[i];
len++;
}
setArrayLength(O, len);
return len;
}
});
/***/ }),
/***/ 4117:
/***/ ((module) => {
// we can't use just `it == null` since of `document.all` special case
// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec
module.exports = function (it) {
return it === null || it === undefined;
};
/***/ }),
/***/ 4149:
/***/ ((module) => {
var $RangeError = RangeError;
module.exports = function (it) {
// eslint-disable-next-line no-self-compare -- NaN check
if (it === it) return it;
throw new $RangeError('NaN is not allowed');
};
/***/ }),
/***/ 4154:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var classof = __webpack_require__(6955);
var $TypeError = TypeError;
// Perform ? RequireInternalSlot(argument, [[TypedArrayName]])
// If argument.[[TypedArrayName]] is not "Uint8Array", throw a TypeError exception
module.exports = function (argument) {
if (classof(argument) === 'Uint8Array') return argument;
throw new $TypeError('Argument is not an Uint8Array');
};
/***/ }),
/***/ 4204:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var add = (__webpack_require__(4402).add);
var clone = __webpack_require__(9286);
var getSetRecord = __webpack_require__(3789);
var iterateSimple = __webpack_require__(507);
// `Set.prototype.union` method
// https://github.com/tc39/proposal-set-methods
module.exports = function union(other) {
var O = aSet(this);
var keysIter = getSetRecord(other).getIterator();
var result = clone(O);
iterateSimple(keysIter, function (it) {
add(result, it);
});
return result;
};
/***/ }),
/***/ 4209:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var wellKnownSymbol = __webpack_require__(8227);
var Iterators = __webpack_require__(6269);
var ITERATOR = wellKnownSymbol('iterator');
var ArrayPrototype = Array.prototype;
// check on default Array iterator
module.exports = function (it) {
return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
};
/***/ }),
/***/ 4215:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* global Bun, Deno -- detection */
var globalThis = __webpack_require__(4576);
var userAgent = __webpack_require__(2839);
var classof = __webpack_require__(2195);
var userAgentStartsWith = function (string) {
return userAgent.slice(0, string.length) === string;
};
module.exports = (function () {
if (userAgentStartsWith('Bun/')) return 'BUN';
if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';
if (userAgentStartsWith('Deno/')) return 'DENO';
if (userAgentStartsWith('Node.js/')) return 'NODE';
if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';
if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';
if (classof(globalThis.process) === 'process') return 'NODE';
if (globalThis.window && globalThis.document) return 'BROWSER';
return 'REST';
})();
/***/ }),
/***/ 4270:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
var isCallable = __webpack_require__(4901);
var isObject = __webpack_require__(34);
var $TypeError = TypeError;
// `OrdinaryToPrimitive` abstract operation
// https://tc39.es/ecma262/#sec-ordinarytoprimitive
module.exports = function (input, pref) {
var fn, val;
if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;
if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
throw new $TypeError("Can't convert object to primitive value");
};
/***/ }),
/***/ 4373:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toObject = __webpack_require__(8981);
var toAbsoluteIndex = __webpack_require__(5610);
var lengthOfArrayLike = __webpack_require__(6198);
// `Array.prototype.fill` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.fill
module.exports = function fill(value /* , start = 0, end = @length */) {
var O = toObject(this);
var length = lengthOfArrayLike(O);
var argumentsLength = arguments.length;
var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);
var end = argumentsLength > 2 ? arguments[2] : undefined;
var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
while (endPos > index) O[index++] = value;
return O;
};
/***/ }),
/***/ 4376:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var classof = __webpack_require__(2195);
// `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
// eslint-disable-next-line es/no-array-isarray -- safe
module.exports = Array.isArray || function isArray(argument) {
return classof(argument) === 'Array';
};
/***/ }),
/***/ 4402:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
// eslint-disable-next-line es/no-set -- safe
var SetPrototype = Set.prototype;
module.exports = {
// eslint-disable-next-line es/no-set -- safe
Set: Set,
add: uncurryThis(SetPrototype.add),
has: uncurryThis(SetPrototype.has),
remove: uncurryThis(SetPrototype['delete']),
proto: SetPrototype
};
/***/ }),
/***/ 4449:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var has = (__webpack_require__(4402).has);
var size = __webpack_require__(5170);
var getSetRecord = __webpack_require__(3789);
var iterateSet = __webpack_require__(8469);
var iterateSimple = __webpack_require__(507);
var iteratorClose = __webpack_require__(9539);
// `Set.prototype.isDisjointFrom` method
// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom
module.exports = function isDisjointFrom(other) {
var O = aSet(this);
var otherRec = getSetRecord(other);
if (size(O) <= otherRec.size) return iterateSet(O, function (e) {
if (otherRec.includes(e)) return false;
}, true) !== false;
var iterator = otherRec.getIterator();
return iterateSimple(iterator, function (e) {
if (has(O, e)) return iteratorClose(iterator, 'normal', false);
}) !== false;
};
/***/ }),
/***/ 4483:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var getBuiltInNodeModule = __webpack_require__(9429);
var PROPER_STRUCTURED_CLONE_TRANSFER = __webpack_require__(1548);
var structuredClone = globalThis.structuredClone;
var $ArrayBuffer = globalThis.ArrayBuffer;
var $MessageChannel = globalThis.MessageChannel;
var detach = false;
var WorkerThreads, channel, buffer, $detach;
if (PROPER_STRUCTURED_CLONE_TRANSFER) {
detach = function (transferable) {
structuredClone(transferable, { transfer: [transferable] });
};
} else if ($ArrayBuffer) try {
if (!$MessageChannel) {
WorkerThreads = getBuiltInNodeModule('worker_threads');
if (WorkerThreads) $MessageChannel = WorkerThreads.MessageChannel;
}
if ($MessageChannel) {
channel = new $MessageChannel();
buffer = new $ArrayBuffer(2);
$detach = function (transferable) {
channel.port1.postMessage(null, [transferable]);
};
if (buffer.byteLength === 2) {
$detach(buffer);
if (buffer.byteLength === 0) detach = $detach;
}
}
} catch (error) { /* empty */ }
module.exports = detach;
/***/ }),
/***/ 4488:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var arraySlice = __webpack_require__(7680);
var floor = Math.floor;
var sort = function (array, comparefn) {
var length = array.length;
if (length < 8) {
// insertion sort
var i = 1;
var element, j;
while (i < length) {
j = i;
element = array[i];
while (j && comparefn(array[j - 1], element) > 0) {
array[j] = array[--j];
}
if (j !== i++) array[j] = element;
}
} else {
// merge sort
var middle = floor(length / 2);
var left = sort(arraySlice(array, 0, middle), comparefn);
var right = sort(arraySlice(array, middle), comparefn);
var llength = left.length;
var rlength = right.length;
var lindex = 0;
var rindex = 0;
while (lindex < llength || rindex < rlength) {
array[lindex + rindex] = (lindex < llength && rindex < rlength)
? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
: lindex < llength ? left[lindex++] : right[rindex++];
}
}
return array;
};
module.exports = sort;
/***/ }),
/***/ 4495:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* eslint-disable es/no-symbol -- required for testing */
var V8_VERSION = __webpack_require__(9519);
var fails = __webpack_require__(9039);
var globalThis = __webpack_require__(4576);
var $String = globalThis.String;
// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing
module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
var symbol = Symbol('symbol detection');
// Chrome 38 Symbol has incorrect toString conversion
// `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
// nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,
// of course, fail.
return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||
// Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
!Symbol.sham && V8_VERSION && V8_VERSION < 41;
});
/***/ }),
/***/ 4527:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var isArray = __webpack_require__(4376);
var $TypeError = TypeError;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
// Safari < 13 does not throw an error in this case
var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {
// makes no sense without proper strict mode support
if (this !== undefined) return true;
try {
// eslint-disable-next-line es/no-object-defineproperty -- safe
Object.defineProperty([], 'length', { writable: false }).length = 1;
} catch (error) {
return error instanceof TypeError;
}
}();
module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {
if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {
throw new $TypeError('Cannot set read only .length');
} return O.length = length;
} : function (O, length) {
return O.length = length;
};
/***/ }),
/***/ 4549:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
// https://github.com/tc39/ecma262/pull/3467
module.exports = function (METHOD_NAME, ExpectedError) {
var Iterator = globalThis.Iterator;
var IteratorPrototype = Iterator && Iterator.prototype;
var method = IteratorPrototype && IteratorPrototype[METHOD_NAME];
var CLOSED = false;
if (method) try {
method.call({
next: function () { return { done: true }; },
'return': function () { CLOSED = true; }
}, -1);
} catch (error) {
// https://bugs.webkit.org/show_bug.cgi?id=291195
if (!(error instanceof ExpectedError)) CLOSED = false;
}
if (!CLOSED) return method;
};
/***/ }),
/***/ 4576:
/***/ (function(module) {
var check = function (it) {
return it && it.Math === Math && it;
};
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
module.exports =
// eslint-disable-next-line es/no-global-this -- safe
check(typeof globalThis == 'object' && globalThis) ||
check(typeof window == 'object' && window) ||
// eslint-disable-next-line no-restricted-globals -- safe
check(typeof self == 'object' && self) ||
check(typeof global == 'object' && global) ||
check(typeof this == 'object' && this) ||
// eslint-disable-next-line no-new-func -- fallback
(function () { return this; })() || Function('return this')();
/***/ }),
/***/ 4601:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var getBuiltIn = __webpack_require__(7751);
var hasOwn = __webpack_require__(9297);
var createNonEnumerableProperty = __webpack_require__(6699);
var isPrototypeOf = __webpack_require__(1625);
var setPrototypeOf = __webpack_require__(2967);
var copyConstructorProperties = __webpack_require__(7740);
var proxyAccessor = __webpack_require__(1056);
var inheritIfRequired = __webpack_require__(3167);
var normalizeStringArgument = __webpack_require__(2603);
var installErrorCause = __webpack_require__(7584);
var installErrorStack = __webpack_require__(747);
var DESCRIPTORS = __webpack_require__(3724);
var IS_PURE = __webpack_require__(6395);
module.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
var STACK_TRACE_LIMIT = 'stackTraceLimit';
var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
var path = FULL_NAME.split('.');
var ERROR_NAME = path[path.length - 1];
var OriginalError = getBuiltIn.apply(null, path);
if (!OriginalError) return;
var OriginalErrorPrototype = OriginalError.prototype;
// V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006
if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;
if (!FORCED) return OriginalError;
var BaseError = getBuiltIn('Error');
var WrappedError = wrapper(function (a, b) {
var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);
var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
if (message !== undefined) createNonEnumerableProperty(result, 'message', message);
installErrorStack(result, WrappedError, result.stack, 2);
if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
return result;
});
WrappedError.prototype = OriginalErrorPrototype;
if (ERROR_NAME !== 'Error') {
if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
else copyConstructorProperties(WrappedError, BaseError, { name: true });
} else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');
}
copyConstructorProperties(WrappedError, OriginalError);
if (!IS_PURE) try {
// Safari 13- bug: WebAssembly errors does not have a proper `.name`
if (OriginalErrorPrototype.name !== ERROR_NAME) {
createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);
}
OriginalErrorPrototype.constructor = WrappedError;
} catch (error) { /* empty */ }
return WrappedError;
};
/***/ }),
/***/ 4603:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var defineBuiltIn = __webpack_require__(6840);
var uncurryThis = __webpack_require__(9504);
var toString = __webpack_require__(655);
var validateArgumentsLength = __webpack_require__(2812);
var $URLSearchParams = URLSearchParams;
var URLSearchParamsPrototype = $URLSearchParams.prototype;
var append = uncurryThis(URLSearchParamsPrototype.append);
var $delete = uncurryThis(URLSearchParamsPrototype['delete']);
var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
var push = uncurryThis([].push);
var params = new $URLSearchParams('a=1&a=2&b=3');
params['delete']('a', 1);
// `undefined` case is a Chromium 117 bug
// https://bugs.chromium.org/p/v8/issues/detail?id=14222
params['delete']('b', undefined);
if (params + '' !== 'a=2') {
defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {
var length = arguments.length;
var $value = length < 2 ? undefined : arguments[1];
if (length && $value === undefined) return $delete(this, name);
var entries = [];
forEach(this, function (v, k) { // also validates `this`
push(entries, { key: k, value: v });
});
validateArgumentsLength(length, 1);
var key = toString(name);
var value = toString($value);
var index = 0;
var dindex = 0;
var found = false;
var entriesLength = entries.length;
var entry;
while (index < entriesLength) {
entry = entries[index++];
if (found || entry.key === key) {
found = true;
$delete(this, entry.key);
} else dindex++;
}
while (dindex < entriesLength) {
entry = entries[dindex++];
if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);
}
}, { enumerable: true, unsafe: true });
}
/***/ }),
/***/ 4628:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var newPromiseCapabilityModule = __webpack_require__(6043);
// `Promise.withResolvers` method
// https://tc39.es/ecma262/#sec-promise.withResolvers
$({ target: 'Promise', stat: true }, {
withResolvers: function withResolvers() {
var promiseCapability = newPromiseCapabilityModule.f(this);
return {
promise: promiseCapability.promise,
resolve: promiseCapability.resolve,
reject: promiseCapability.reject
};
}
});
/***/ }),
/***/ 4644:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var NATIVE_ARRAY_BUFFER = __webpack_require__(7811);
var DESCRIPTORS = __webpack_require__(3724);
var globalThis = __webpack_require__(4576);
var isCallable = __webpack_require__(4901);
var isObject = __webpack_require__(34);
var hasOwn = __webpack_require__(9297);
var classof = __webpack_require__(6955);
var tryToString = __webpack_require__(6823);
var createNonEnumerableProperty = __webpack_require__(6699);
var defineBuiltIn = __webpack_require__(6840);
var defineBuiltInAccessor = __webpack_require__(2106);
var isPrototypeOf = __webpack_require__(1625);
var getPrototypeOf = __webpack_require__(2787);
var setPrototypeOf = __webpack_require__(2967);
var wellKnownSymbol = __webpack_require__(8227);
var uid = __webpack_require__(3392);
var InternalStateModule = __webpack_require__(1181);
var enforceInternalState = InternalStateModule.enforce;
var getInternalState = InternalStateModule.get;
var Int8Array = globalThis.Int8Array;
var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
var Uint8ClampedArray = globalThis.Uint8ClampedArray;
var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;
var TypedArray = Int8Array && getPrototypeOf(Int8Array);
var TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);
var ObjectPrototype = Object.prototype;
var TypeError = globalThis.TypeError;
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');
var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
// Fixing native typed arrays in Opera Presto crashes the browser, see #595
var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(globalThis.opera) !== 'Opera';
var TYPED_ARRAY_TAG_REQUIRED = false;
var NAME, Constructor, Prototype;
var TypedArrayConstructorsList = {
Int8Array: 1,
Uint8Array: 1,
Uint8ClampedArray: 1,
Int16Array: 2,
Uint16Array: 2,
Int32Array: 4,
Uint32Array: 4,
Float32Array: 4,
Float64Array: 8
};
var BigIntArrayConstructorsList = {
BigInt64Array: 8,
BigUint64Array: 8
};
var isView = function isView(it) {
if (!isObject(it)) return false;
var klass = classof(it);
return klass === 'DataView'
|| hasOwn(TypedArrayConstructorsList, klass)
|| hasOwn(BigIntArrayConstructorsList, klass);
};
var getTypedArrayConstructor = function (it) {
var proto = getPrototypeOf(it);
if (!isObject(proto)) return;
var state = getInternalState(proto);
return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);
};
var isTypedArray = function (it) {
if (!isObject(it)) return false;
var klass = classof(it);
return hasOwn(TypedArrayConstructorsList, klass)
|| hasOwn(BigIntArrayConstructorsList, klass);
};
var aTypedArray = function (it) {
if (isTypedArray(it)) return it;
throw new TypeError('Target is not a typed array');
};
var aTypedArrayConstructor = function (C) {
if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;
throw new TypeError(tryToString(C) + ' is not a typed array constructor');
};
var exportTypedArrayMethod = function (KEY, property, forced, options) {
if (!DESCRIPTORS) return;
if (forced) for (var ARRAY in TypedArrayConstructorsList) {
var TypedArrayConstructor = globalThis[ARRAY];
if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {
delete TypedArrayConstructor.prototype[KEY];
} catch (error) {
// old WebKit bug - some methods are non-configurable
try {
TypedArrayConstructor.prototype[KEY] = property;
} catch (error2) { /* empty */ }
}
}
if (!TypedArrayPrototype[KEY] || forced) {
defineBuiltIn(TypedArrayPrototype, KEY, forced ? property
: NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);
}
};
var exportTypedArrayStaticMethod = function (KEY, property, forced) {
var ARRAY, TypedArrayConstructor;
if (!DESCRIPTORS) return;
if (setPrototypeOf) {
if (forced) for (ARRAY in TypedArrayConstructorsList) {
TypedArrayConstructor = globalThis[ARRAY];
if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {
delete TypedArrayConstructor[KEY];
} catch (error) { /* empty */ }
}
if (!TypedArray[KEY] || forced) {
// V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
try {
return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);
} catch (error) { /* empty */ }
} else return;
}
for (ARRAY in TypedArrayConstructorsList) {
TypedArrayConstructor = globalThis[ARRAY];
if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
defineBuiltIn(TypedArrayConstructor, KEY, property);
}
}
};
for (NAME in TypedArrayConstructorsList) {
Constructor = globalThis[NAME];
Prototype = Constructor && Constructor.prototype;
if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
else NATIVE_ARRAY_BUFFER_VIEWS = false;
}
for (NAME in BigIntArrayConstructorsList) {
Constructor = globalThis[NAME];
Prototype = Constructor && Constructor.prototype;
if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
}
// WebKit bug - typed arrays constructors prototype is Object.prototype
if (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {
// eslint-disable-next-line no-shadow -- safe
TypedArray = function TypedArray() {
throw new TypeError('Incorrect invocation');
};
if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {
if (globalThis[NAME]) setPrototypeOf(globalThis[NAME], TypedArray);
}
}
if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {
TypedArrayPrototype = TypedArray.prototype;
if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {
if (globalThis[NAME]) setPrototypeOf(globalThis[NAME].prototype, TypedArrayPrototype);
}
}
// WebKit bug - one more object in Uint8ClampedArray prototype chain
if (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {
setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);
}
if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {
TYPED_ARRAY_TAG_REQUIRED = true;
defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {
configurable: true,
get: function () {
return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;
}
});
for (NAME in TypedArrayConstructorsList) if (globalThis[NAME]) {
createNonEnumerableProperty(globalThis[NAME], TYPED_ARRAY_TAG, NAME);
}
}
module.exports = {
NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,
TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,
aTypedArray: aTypedArray,
aTypedArrayConstructor: aTypedArrayConstructor,
exportTypedArrayMethod: exportTypedArrayMethod,
exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
getTypedArrayConstructor: getTypedArrayConstructor,
isView: isView,
isTypedArray: isTypedArray,
TypedArray: TypedArray,
TypedArrayPrototype: TypedArrayPrototype
};
/***/ }),
/***/ 4659:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
var createPropertyDescriptor = __webpack_require__(6980);
module.exports = !fails(function () {
var error = new Error('a');
if (!('stack' in error)) return true;
// eslint-disable-next-line es/no-object-defineproperty -- safe
Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
return error.stack !== 7;
});
/***/ }),
/***/ 4732:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var ArrayBufferViewCore = __webpack_require__(4644);
var uncurryThis = __webpack_require__(9504);
var aCallable = __webpack_require__(9306);
var arrayFromConstructorAndList = __webpack_require__(5370);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);
// `%TypedArray%.prototype.toSorted` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tosorted
exportTypedArrayMethod('toSorted', function toSorted(compareFn) {
if (compareFn !== undefined) aCallable(compareFn);
var O = aTypedArray(this);
var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);
return sort(A, compareFn);
});
/***/ }),
/***/ 4901:
/***/ ((module) => {
// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot
var documentAll = typeof document == 'object' && document.all;
// `IsCallable` abstract operation
// https://tc39.es/ecma262/#sec-iscallable
// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing
module.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {
return typeof argument == 'function' || argument === documentAll;
} : function (argument) {
return typeof argument == 'function';
};
/***/ }),
/***/ 4913:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var IE8_DOM_DEFINE = __webpack_require__(5917);
var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(8686);
var anObject = __webpack_require__(8551);
var toPropertyKey = __webpack_require__(6969);
var $TypeError = TypeError;
// eslint-disable-next-line es/no-object-defineproperty -- safe
var $defineProperty = Object.defineProperty;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var ENUMERABLE = 'enumerable';
var CONFIGURABLE = 'configurable';
var WRITABLE = 'writable';
// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
anObject(O);
P = toPropertyKey(P);
anObject(Attributes);
if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
var current = $getOwnPropertyDescriptor(O, P);
if (current && current[WRITABLE]) {
O[P] = Attributes.value;
Attributes = {
configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
writable: false
};
}
} return $defineProperty(O, P, Attributes);
} : $defineProperty : function defineProperty(O, P, Attributes) {
anObject(O);
P = toPropertyKey(P);
anObject(Attributes);
if (IE8_DOM_DEFINE) try {
return $defineProperty(O, P, Attributes);
} catch (error) { /* empty */ }
if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');
if ('value' in Attributes) O[P] = Attributes.value;
return O;
};
/***/ }),
/***/ 4916:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var getBuiltIn = __webpack_require__(7751);
var createSetLike = function (size) {
return {
size: size,
has: function () {
return false;
},
keys: function () {
return {
next: function () {
return { done: true };
}
};
}
};
};
var createSetLikeWithInfinitySize = function (size) {
return {
size: size,
has: function () {
return true;
},
keys: function () {
throw new Error('e');
}
};
};
module.exports = function (name, callback) {
var Set = getBuiltIn('Set');
try {
new Set()[name](createSetLike(0));
try {
// late spec change, early WebKit ~ Safari 17 implementation does not pass it
// https://github.com/tc39/proposal-set-methods/pull/88
// also covered engines with
// https://bugs.webkit.org/show_bug.cgi?id=272679
new Set()[name](createSetLike(-1));
return false;
} catch (error2) {
if (!callback) return true;
// early V8 implementation bug
// https://issues.chromium.org/issues/351332634
try {
new Set()[name](createSetLikeWithInfinitySize(-Infinity));
return false;
} catch (error) {
var set = new Set();
set.add(1);
set.add(2);
return callback(set[name](createSetLikeWithInfinitySize(Infinity)));
}
}
} catch (error) {
return false;
}
};
/***/ }),
/***/ 4979:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var getBuiltIn = __webpack_require__(7751);
var createPropertyDescriptor = __webpack_require__(6980);
var defineProperty = (__webpack_require__(4913).f);
var hasOwn = __webpack_require__(9297);
var anInstance = __webpack_require__(679);
var inheritIfRequired = __webpack_require__(3167);
var normalizeStringArgument = __webpack_require__(2603);
var DOMExceptionConstants = __webpack_require__(5002);
var clearErrorStack = __webpack_require__(6193);
var DESCRIPTORS = __webpack_require__(3724);
var IS_PURE = __webpack_require__(6395);
var DOM_EXCEPTION = 'DOMException';
var Error = getBuiltIn('Error');
var NativeDOMException = getBuiltIn(DOM_EXCEPTION);
var $DOMException = function DOMException() {
anInstance(this, DOMExceptionPrototype);
var argumentsLength = arguments.length;
var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
var that = new NativeDOMException(message, name);
var error = new Error(message);
error.name = DOM_EXCEPTION;
defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
inheritIfRequired(that, this, $DOMException);
return that;
};
var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;
var ERROR_HAS_STACK = 'stack' in new Error(DOM_EXCEPTION);
var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(globalThis, DOM_EXCEPTION);
// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it
// https://github.com/Jarred-Sumner/bun/issues/399
var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);
var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;
// `DOMException` constructor patch for `.stack` where it's required
// https://webidl.spec.whatwg.org/#es-DOMException-specialness
$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic
DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException
});
var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;
if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {
if (!IS_PURE) {
defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));
}
for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {
var constant = DOMExceptionConstants[key];
var constantName = constant.s;
if (!hasOwn(PolyfilledDOMException, constantName)) {
defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));
}
}
}
/***/ }),
/***/ 5002:
/***/ ((module) => {
module.exports = {
IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },
DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },
HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },
WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },
InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },
NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },
NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },
NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },
NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },
InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },
InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },
SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },
InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },
NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },
InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },
ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },
TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },
SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },
NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },
AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },
URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },
QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },
TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },
InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },
DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }
};
/***/ }),
/***/ 5024:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var symmetricDifference = __webpack_require__(3650);
var setMethodGetKeysBeforeCloning = __webpack_require__(9835);
var setMethodAcceptSetLike = __webpack_require__(4916);
var FORCED = !setMethodAcceptSetLike('symmetricDifference') || !setMethodGetKeysBeforeCloning('symmetricDifference');
// `Set.prototype.symmetricDifference` method
// https://tc39.es/ecma262/#sec-set.prototype.symmetricdifference
$({ target: 'Set', proto: true, real: true, forced: FORCED }, {
symmetricDifference: symmetricDifference
});
/***/ }),
/***/ 5031:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var getBuiltIn = __webpack_require__(7751);
var uncurryThis = __webpack_require__(9504);
var getOwnPropertyNamesModule = __webpack_require__(8480);
var getOwnPropertySymbolsModule = __webpack_require__(3717);
var anObject = __webpack_require__(8551);
var concat = uncurryThis([].concat);
// all object keys, includes non-enumerable and symbols
module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
var keys = getOwnPropertyNamesModule.f(anObject(it));
var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
};
/***/ }),
/***/ 5044:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var ArrayBufferViewCore = __webpack_require__(4644);
var $fill = __webpack_require__(4373);
var toBigInt = __webpack_require__(5854);
var classof = __webpack_require__(6955);
var call = __webpack_require__(9565);
var uncurryThis = __webpack_require__(9504);
var fails = __webpack_require__(9039);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var slice = uncurryThis(''.slice);
// V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18
var CONVERSION_BUG = fails(function () {
var count = 0;
// eslint-disable-next-line es/no-typed-arrays -- safe
new Int8Array(2).fill({ valueOf: function () { return count++; } });
return count !== 1;
});
// `%TypedArray%.prototype.fill` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
exportTypedArrayMethod('fill', function fill(value /* , start, end */) {
var length = arguments.length;
aTypedArray(this);
var actualValue = slice(classof(this), 0, 3) === 'Big' ? toBigInt(value) : +value;
return call($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);
}, CONVERSION_BUG);
/***/ }),
/***/ 5169:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isDetached = __webpack_require__(3238);
var $TypeError = TypeError;
module.exports = function (it) {
if (isDetached(it)) throw new $TypeError('ArrayBuffer is detached');
return it;
};
/***/ }),
/***/ 5170:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThisAccessor = __webpack_require__(6706);
var SetHelpers = __webpack_require__(4402);
module.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {
return set.size;
};
/***/ }),
/***/ 5370:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var lengthOfArrayLike = __webpack_require__(6198);
module.exports = function (Constructor, list, $length) {
var index = 0;
var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);
var result = new Constructor(length);
while (length > index) result[index] = list[index++];
return result;
};
/***/ }),
/***/ 5397:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// toObject with fallback for non-array-like ES3 strings
var IndexedObject = __webpack_require__(7055);
var requireObjectCoercible = __webpack_require__(7750);
module.exports = function (it) {
return IndexedObject(requireObjectCoercible(it));
};
/***/ }),
/***/ 5610:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toIntegerOrInfinity = __webpack_require__(1291);
var max = Math.max;
var min = Math.min;
// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
module.exports = function (index, length) {
var integer = toIntegerOrInfinity(index);
return integer < 0 ? max(integer + length, 0) : min(integer, length);
};
/***/ }),
/***/ 5623:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var uncurryThis = __webpack_require__(9504);
var anUint8Array = __webpack_require__(4154);
var notDetached = __webpack_require__(5169);
var numberToString = uncurryThis(1.1.toString);
// `Uint8Array.prototype.toHex` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (globalThis.Uint8Array) $({ target: 'Uint8Array', proto: true }, {
toHex: function toHex() {
anUint8Array(this);
notDetached(this.buffer);
var result = '';
for (var i = 0, length = this.length; i < length; i++) {
var hex = numberToString(this[i], 16);
result += hex.length === 1 ? '0' + hex : hex;
}
return result;
}
});
/***/ }),
/***/ 5636:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var uncurryThis = __webpack_require__(9504);
var uncurryThisAccessor = __webpack_require__(6706);
var toIndex = __webpack_require__(7696);
var notDetached = __webpack_require__(5169);
var arrayBufferByteLength = __webpack_require__(7394);
var detachTransferable = __webpack_require__(4483);
var PROPER_STRUCTURED_CLONE_TRANSFER = __webpack_require__(1548);
var structuredClone = globalThis.structuredClone;
var ArrayBuffer = globalThis.ArrayBuffer;
var DataView = globalThis.DataView;
var min = Math.min;
var ArrayBufferPrototype = ArrayBuffer.prototype;
var DataViewPrototype = DataView.prototype;
var slice = uncurryThis(ArrayBufferPrototype.slice);
var isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get');
var maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get');
var getInt8 = uncurryThis(DataViewPrototype.getInt8);
var setInt8 = uncurryThis(DataViewPrototype.setInt8);
module.exports = (PROPER_STRUCTURED_CLONE_TRANSFER || detachTransferable) && function (arrayBuffer, newLength, preserveResizability) {
var byteLength = arrayBufferByteLength(arrayBuffer);
var newByteLength = newLength === undefined ? byteLength : toIndex(newLength);
var fixedLength = !isResizable || !isResizable(arrayBuffer);
var newBuffer;
notDetached(arrayBuffer);
if (PROPER_STRUCTURED_CLONE_TRANSFER) {
arrayBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] });
if (byteLength === newByteLength && (preserveResizability || fixedLength)) return arrayBuffer;
}
if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) {
newBuffer = slice(arrayBuffer, 0, newByteLength);
} else {
var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(arrayBuffer) } : undefined;
newBuffer = new ArrayBuffer(newByteLength, options);
var a = new DataView(arrayBuffer);
var b = new DataView(newBuffer);
var copyLength = min(newByteLength, byteLength);
for (var i = 0; i < copyLength; i++) setInt8(b, i, getInt8(a, i));
}
if (!PROPER_STRUCTURED_CLONE_TRANSFER) detachTransferable(arrayBuffer);
return newBuffer;
};
/***/ }),
/***/ 5745:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var store = __webpack_require__(7629);
module.exports = function (key, value) {
return store[key] || (store[key] = value || {});
};
/***/ }),
/***/ 5781:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var getBuiltIn = __webpack_require__(7751);
var validateArgumentsLength = __webpack_require__(2812);
var toString = __webpack_require__(655);
var USE_NATIVE_URL = __webpack_require__(7416);
var URL = getBuiltIn('URL');
// `URL.parse` method
// https://url.spec.whatwg.org/#dom-url-canparse
$({ target: 'URL', stat: true, forced: !USE_NATIVE_URL }, {
parse: function parse(url) {
var length = validateArgumentsLength(arguments.length, 1);
var urlString = toString(url);
var base = length < 2 || arguments[1] === undefined ? undefined : toString(arguments[1]);
try {
return new URL(urlString, base);
} catch (error) {
return null;
}
}
});
/***/ }),
/***/ 5854:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPrimitive = __webpack_require__(2777);
var $TypeError = TypeError;
// `ToBigInt` abstract operation
// https://tc39.es/ecma262/#sec-tobigint
module.exports = function (argument) {
var prim = toPrimitive(argument, 'number');
if (typeof prim == 'number') throw new $TypeError("Can't convert number to bigint");
// eslint-disable-next-line es/no-bigint -- safe
return BigInt(prim);
};
/***/ }),
/***/ 5876:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var isSubsetOf = __webpack_require__(3838);
var setMethodAcceptSetLike = __webpack_require__(4916);
var INCORRECT = !setMethodAcceptSetLike('isSubsetOf', function (result) {
return result;
});
// `Set.prototype.isSubsetOf` method
// https://tc39.es/ecma262/#sec-set.prototype.issubsetof
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
isSubsetOf: isSubsetOf
});
/***/ }),
/***/ 5917:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var fails = __webpack_require__(9039);
var createElement = __webpack_require__(4055);
// Thanks to IE8 for its funny defineProperty
module.exports = !DESCRIPTORS && !fails(function () {
// eslint-disable-next-line es/no-object-defineproperty -- required for testing
return Object.defineProperty(createElement('div'), 'a', {
get: function () { return 7; }
}).a !== 7;
});
/***/ }),
/***/ 5966:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aCallable = __webpack_require__(9306);
var isNullOrUndefined = __webpack_require__(4117);
// `GetMethod` abstract operation
// https://tc39.es/ecma262/#sec-getmethod
module.exports = function (V, P) {
var func = V[P];
return isNullOrUndefined(func) ? undefined : aCallable(func);
};
/***/ }),
/***/ 6043:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aCallable = __webpack_require__(9306);
var $TypeError = TypeError;
var PromiseCapability = function (C) {
var resolve, reject;
this.promise = new C(function ($$resolve, $$reject) {
if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');
resolve = $$resolve;
reject = $$reject;
});
this.resolve = aCallable(resolve);
this.reject = aCallable(reject);
};
// `NewPromiseCapability` abstract operation
// https://tc39.es/ecma262/#sec-newpromisecapability
module.exports.f = function (C) {
return new PromiseCapability(C);
};
/***/ }),
/***/ 6080:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(7476);
var aCallable = __webpack_require__(9306);
var NATIVE_BIND = __webpack_require__(616);
var bind = uncurryThis(uncurryThis.bind);
// optional / simple context binding
module.exports = function (fn, that) {
aCallable(fn);
return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {
return fn.apply(that, arguments);
};
};
/***/ }),
/***/ 6119:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var shared = __webpack_require__(5745);
var uid = __webpack_require__(3392);
var keys = shared('keys');
module.exports = function (key) {
return keys[key] || (keys[key] = uid(key));
};
/***/ }),
/***/ 6193:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var $Error = Error;
var replace = uncurryThis(''.replace);
var TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');
// eslint-disable-next-line redos/no-vulnerable, sonarjs/slow-regex -- safe
var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
module.exports = function (stack, dropEntries) {
if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
} return stack;
};
/***/ }),
/***/ 6198:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toLength = __webpack_require__(8014);
// `LengthOfArrayLike` abstract operation
// https://tc39.es/ecma262/#sec-lengthofarraylike
module.exports = function (obj) {
return toLength(obj.length);
};
/***/ }),
/***/ 6269:
/***/ ((module) => {
module.exports = {};
/***/ }),
/***/ 6279:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var defineBuiltIn = __webpack_require__(6840);
module.exports = function (target, src, options) {
for (var key in src) defineBuiltIn(target, key, src[key], options);
return target;
};
/***/ }),
/***/ 6280:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
/* eslint-disable no-unused-vars -- required for functions `.length` */
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var apply = __webpack_require__(8745);
var wrapErrorConstructorWithCause = __webpack_require__(4601);
var WEB_ASSEMBLY = 'WebAssembly';
var WebAssembly = globalThis[WEB_ASSEMBLY];
// eslint-disable-next-line es/no-error-cause -- feature detection
var FORCED = new Error('e', { cause: 7 }).cause !== 7;
var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
var O = {};
O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
$({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
};
var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {
if (WebAssembly && WebAssembly[ERROR_NAME]) {
var O = {};
O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);
$({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
}
};
// https://tc39.es/ecma262/#sec-nativeerror
exportGlobalErrorCauseWrapper('Error', function (init) {
return function Error(message) { return apply(init, this, arguments); };
});
exportGlobalErrorCauseWrapper('EvalError', function (init) {
return function EvalError(message) { return apply(init, this, arguments); };
});
exportGlobalErrorCauseWrapper('RangeError', function (init) {
return function RangeError(message) { return apply(init, this, arguments); };
});
exportGlobalErrorCauseWrapper('ReferenceError', function (init) {
return function ReferenceError(message) { return apply(init, this, arguments); };
});
exportGlobalErrorCauseWrapper('SyntaxError', function (init) {
return function SyntaxError(message) { return apply(init, this, arguments); };
});
exportGlobalErrorCauseWrapper('TypeError', function (init) {
return function TypeError(message) { return apply(init, this, arguments); };
});
exportGlobalErrorCauseWrapper('URIError', function (init) {
return function URIError(message) { return apply(init, this, arguments); };
});
exportWebAssemblyErrorCauseWrapper('CompileError', function (init) {
return function CompileError(message) { return apply(init, this, arguments); };
});
exportWebAssemblyErrorCauseWrapper('LinkError', function (init) {
return function LinkError(message) { return apply(init, this, arguments); };
});
exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {
return function RuntimeError(message) { return apply(init, this, arguments); };
});
/***/ }),
/***/ 6319:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var anObject = __webpack_require__(8551);
var iteratorClose = __webpack_require__(9539);
// call something on iterator step with safe closing on error
module.exports = function (iterator, fn, value, ENTRIES) {
try {
return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
} catch (error) {
iteratorClose(iterator, 'throw', error);
}
};
/***/ }),
/***/ 6395:
/***/ ((module) => {
module.exports = false;
/***/ }),
/***/ 6469:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var wellKnownSymbol = __webpack_require__(8227);
var create = __webpack_require__(2360);
var defineProperty = (__webpack_require__(4913).f);
var UNSCOPABLES = wellKnownSymbol('unscopables');
var ArrayPrototype = Array.prototype;
// Array.prototype[@@unscopables]
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
if (ArrayPrototype[UNSCOPABLES] === undefined) {
defineProperty(ArrayPrototype, UNSCOPABLES, {
configurable: true,
value: create(null)
});
}
// add a key to Array.prototype[@@unscopables]
module.exports = function (key) {
ArrayPrototype[UNSCOPABLES][key] = true;
};
/***/ }),
/***/ 6518:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var getOwnPropertyDescriptor = (__webpack_require__(7347).f);
var createNonEnumerableProperty = __webpack_require__(6699);
var defineBuiltIn = __webpack_require__(6840);
var defineGlobalProperty = __webpack_require__(9433);
var copyConstructorProperties = __webpack_require__(7740);
var isForced = __webpack_require__(2796);
/*
options.target - name of the target object
options.global - target is the global object
options.stat - export as static methods of target
options.proto - export as prototype methods of target
options.real - real prototype method for the `pure` version
options.forced - export even if the native feature is available
options.bind - bind methods to the target, required for the `pure` version
options.wrap - wrap constructors to preventing global pollution, required for the `pure` version
options.unsafe - use the simple assignment of property instead of delete + defineProperty
options.sham - add a flag to not completely full polyfills
options.enumerable - export as enumerable property
options.dontCallGetSet - prevent calling a getter on target
options.name - the .name of the function if it does not match the key
*/
module.exports = function (options, source) {
var TARGET = options.target;
var GLOBAL = options.global;
var STATIC = options.stat;
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
if (GLOBAL) {
target = globalThis;
} else if (STATIC) {
target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});
} else {
target = globalThis[TARGET] && globalThis[TARGET].prototype;
}
if (target) for (key in source) {
sourceProperty = source[key];
if (options.dontCallGetSet) {
descriptor = getOwnPropertyDescriptor(target, key);
targetProperty = descriptor && descriptor.value;
} else targetProperty = target[key];
FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
// contained in target
if (!FORCED && targetProperty !== undefined) {
if (typeof sourceProperty == typeof targetProperty) continue;
copyConstructorProperties(sourceProperty, targetProperty);
}
// add a flag to not completely full polyfills
if (options.sham || (targetProperty && targetProperty.sham)) {
createNonEnumerableProperty(sourceProperty, 'sham', true);
}
defineBuiltIn(target, key, sourceProperty, options);
}
};
/***/ }),
/***/ 6573:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var defineBuiltInAccessor = __webpack_require__(2106);
var isDetached = __webpack_require__(3238);
var ArrayBufferPrototype = ArrayBuffer.prototype;
// `ArrayBuffer.prototype.detached` getter
// https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.detached
if (DESCRIPTORS && !('detached' in ArrayBufferPrototype)) {
defineBuiltInAccessor(ArrayBufferPrototype, 'detached', {
configurable: true,
get: function detached() {
return isDetached(this);
}
});
}
/***/ }),
/***/ 6699:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var definePropertyModule = __webpack_require__(4913);
var createPropertyDescriptor = __webpack_require__(6980);
module.exports = DESCRIPTORS ? function (object, key, value) {
return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
/***/ }),
/***/ 6706:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var aCallable = __webpack_require__(9306);
module.exports = function (object, key, method) {
try {
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
} catch (error) { /* empty */ }
};
/***/ }),
/***/ 6801:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(8686);
var definePropertyModule = __webpack_require__(4913);
var anObject = __webpack_require__(8551);
var toIndexedObject = __webpack_require__(5397);
var objectKeys = __webpack_require__(1072);
// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
// eslint-disable-next-line es/no-object-defineproperties -- safe
exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
anObject(O);
var props = toIndexedObject(Properties);
var keys = objectKeys(Properties);
var length = keys.length;
var index = 0;
var key;
while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);
return O;
};
/***/ }),
/***/ 6823:
/***/ ((module) => {
var $String = String;
module.exports = function (argument) {
try {
return $String(argument);
} catch (error) {
return 'Object';
}
};
/***/ }),
/***/ 6837:
/***/ ((module) => {
var $TypeError = TypeError;
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
module.exports = function (it) {
if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');
return it;
};
/***/ }),
/***/ 6840:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isCallable = __webpack_require__(4901);
var definePropertyModule = __webpack_require__(4913);
var makeBuiltIn = __webpack_require__(283);
var defineGlobalProperty = __webpack_require__(9433);
module.exports = function (O, key, value, options) {
if (!options) options = {};
var simple = options.enumerable;
var name = options.name !== undefined ? options.name : key;
if (isCallable(value)) makeBuiltIn(value, name, options);
if (options.global) {
if (simple) O[key] = value;
else defineGlobalProperty(key, value);
} else {
try {
if (!options.unsafe) delete O[key];
else if (O[key]) simple = true;
} catch (error) { /* empty */ }
if (simple) O[key] = value;
else definePropertyModule.f(O, key, {
value: value,
enumerable: false,
configurable: !options.nonConfigurable,
writable: !options.nonWritable
});
} return O;
};
/***/ }),
/***/ 6955:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var TO_STRING_TAG_SUPPORT = __webpack_require__(2140);
var isCallable = __webpack_require__(4901);
var classofRaw = __webpack_require__(2195);
var wellKnownSymbol = __webpack_require__(8227);
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var $Object = Object;
// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';
// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
try {
return it[key];
} catch (error) { /* empty */ }
};
// getting tag from ES6+ `Object.prototype.toString`
module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
var O, tag, result;
return it === undefined ? 'Undefined' : it === null ? 'Null'
// @@toStringTag case
: typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag
// builtinTag case
: CORRECT_ARGUMENTS ? classofRaw(O)
// ES3 arguments fallback
: (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;
};
/***/ }),
/***/ 6969:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPrimitive = __webpack_require__(2777);
var isSymbol = __webpack_require__(757);
// `ToPropertyKey` abstract operation
// https://tc39.es/ecma262/#sec-topropertykey
module.exports = function (argument) {
var key = toPrimitive(argument, 'string');
return isSymbol(key) ? key : key + '';
};
/***/ }),
/***/ 6980:
/***/ ((module) => {
module.exports = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
configurable: !(bitmap & 2),
writable: !(bitmap & 4),
value: value
};
};
/***/ }),
/***/ 7040:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/* eslint-disable es/no-symbol -- required for testing */
var NATIVE_SYMBOL = __webpack_require__(4495);
module.exports = NATIVE_SYMBOL &&
!Symbol.sham &&
typeof Symbol.iterator == 'symbol';
/***/ }),
/***/ 7055:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var fails = __webpack_require__(9039);
var classof = __webpack_require__(2195);
var $Object = Object;
var split = uncurryThis(''.split);
// fallback for non-array-like ES3 and non-enumerable old V8 strings
module.exports = fails(function () {
// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
// eslint-disable-next-line no-prototype-builtins -- safe
return !$Object('z').propertyIsEnumerable(0);
}) ? function (it) {
return classof(it) === 'String' ? split(it, '') : $Object(it);
} : $Object;
/***/ }),
/***/ 7080:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var has = (__webpack_require__(4402).has);
// Perform ? RequireInternalSlot(M, [[SetData]])
module.exports = function (it) {
has(it);
return it;
};
/***/ }),
/***/ 7347:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var call = __webpack_require__(9565);
var propertyIsEnumerableModule = __webpack_require__(8773);
var createPropertyDescriptor = __webpack_require__(6980);
var toIndexedObject = __webpack_require__(5397);
var toPropertyKey = __webpack_require__(6969);
var hasOwn = __webpack_require__(9297);
var IE8_DOM_DEFINE = __webpack_require__(5917);
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
O = toIndexedObject(O);
P = toPropertyKey(P);
if (IE8_DOM_DEFINE) try {
return $getOwnPropertyDescriptor(O, P);
} catch (error) { /* empty */ }
if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
};
/***/ }),
/***/ 7357:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var uncurryThis = __webpack_require__(9504);
var requireObjectCoercible = __webpack_require__(7750);
var toIntegerOrInfinity = __webpack_require__(1291);
var toString = __webpack_require__(655);
var fails = __webpack_require__(9039);
var charAt = uncurryThis(''.charAt);
var FORCED = fails(function () {
// eslint-disable-next-line es/no-string-prototype-at -- safe
return '𠮷'.at(-2) !== '\uD842';
});
// `String.prototype.at` method
// https://tc39.es/ecma262/#sec-string.prototype.at
$({ target: 'String', proto: true, forced: FORCED }, {
at: function at(index) {
var S = toString(requireObjectCoercible(this));
var len = S.length;
var relativeIndex = toIntegerOrInfinity(index);
var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
return (k < 0 || k >= len) ? undefined : charAt(S, k);
}
});
/***/ }),
/***/ 7394:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var uncurryThisAccessor = __webpack_require__(6706);
var classof = __webpack_require__(2195);
var ArrayBuffer = globalThis.ArrayBuffer;
var TypeError = globalThis.TypeError;
// Includes
// - Perform ? RequireInternalSlot(O, [[ArrayBufferData]]).
// - If IsSharedArrayBuffer(O) is true, throw a TypeError exception.
module.exports = ArrayBuffer && uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) {
if (classof(O) !== 'ArrayBuffer') throw new TypeError('ArrayBuffer expected');
return O.byteLength;
};
/***/ }),
/***/ 7416:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
var wellKnownSymbol = __webpack_require__(8227);
var DESCRIPTORS = __webpack_require__(3724);
var IS_PURE = __webpack_require__(6395);
var ITERATOR = wellKnownSymbol('iterator');
module.exports = !fails(function () {
// eslint-disable-next-line unicorn/relative-url-style -- required for testing
var url = new URL('b?a=1&b=2&c=3', 'https://a');
var params = url.searchParams;
var params2 = new URLSearchParams('a=1&a=2&b=3');
var result = '';
url.pathname = 'c%20d';
params.forEach(function (value, key) {
params['delete']('b');
result += key + value;
});
params2['delete']('a', 2);
// `undefined` case is a Chromium 117 bug
// https://bugs.chromium.org/p/v8/issues/detail?id=14222
params2['delete']('b', undefined);
return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b')))
|| (!params.size && (IS_PURE || !DESCRIPTORS))
|| !params.sort
|| url.href !== 'https://a/c%20d?a=1&c=3'
|| params.get('c') !== '3'
|| String(new URLSearchParams('?a=1')) !== 'a=1'
|| !params[ITERATOR]
// throws in Edge
|| new URL('https://a@b').username !== 'a'
|| new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
// not punycoded in Edge
|| new URL('https://тест').host !== 'xn--e1aybc'
// not escaped in Chrome 62-
|| new URL('https://a#б').hash !== '#%D0%B1'
// fails in Chrome 66-
|| result !== 'a1c3'
// throws in Safari
|| new URL('https://x', undefined).host !== 'x';
});
/***/ }),
/***/ 7467:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var arrayToReversed = __webpack_require__(7628);
var ArrayBufferViewCore = __webpack_require__(4644);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
// `%TypedArray%.prototype.toReversed` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.toreversed
exportTypedArrayMethod('toReversed', function toReversed() {
return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this));
});
/***/ }),
/***/ 7476:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var classofRaw = __webpack_require__(2195);
var uncurryThis = __webpack_require__(9504);
module.exports = function (fn) {
// Nashorn bug:
// https://github.com/zloirock/core-js/issues/1128
// https://github.com/zloirock/core-js/issues/1130
if (classofRaw(fn) === 'Function') return uncurryThis(fn);
};
/***/ }),
/***/ 7566:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var defineBuiltIn = __webpack_require__(6840);
var uncurryThis = __webpack_require__(9504);
var toString = __webpack_require__(655);
var validateArgumentsLength = __webpack_require__(2812);
var $URLSearchParams = URLSearchParams;
var URLSearchParamsPrototype = $URLSearchParams.prototype;
var getAll = uncurryThis(URLSearchParamsPrototype.getAll);
var $has = uncurryThis(URLSearchParamsPrototype.has);
var params = new $URLSearchParams('a=1');
// `undefined` case is a Chromium 117 bug
// https://bugs.chromium.org/p/v8/issues/detail?id=14222
if (params.has('a', 2) || !params.has('a', undefined)) {
defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name /* , value */) {
var length = arguments.length;
var $value = length < 2 ? undefined : arguments[1];
if (length && $value === undefined) return $has(this, name);
var values = getAll(this, name); // also validates `this`
validateArgumentsLength(length, 1);
var value = toString($value);
var index = 0;
while (index < values.length) {
if (values[index++] === value) return true;
} return false;
}, { enumerable: true, unsafe: true });
}
/***/ }),
/***/ 7584:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(34);
var createNonEnumerableProperty = __webpack_require__(6699);
// `InstallErrorCause` abstract operation
// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause
module.exports = function (O, options) {
if (isObject(options) && 'cause' in options) {
createNonEnumerableProperty(O, 'cause', options.cause);
}
};
/***/ }),
/***/ 7588:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var iterate = __webpack_require__(2652);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var forEachWithoutClosingOnEarlyError = iteratorHelperWithoutClosingOnEarlyError('forEach', TypeError);
// `Iterator.prototype.forEach` method
// https://tc39.es/ecma262/#sec-iterator.prototype.foreach
$({ target: 'Iterator', proto: true, real: true, forced: forEachWithoutClosingOnEarlyError }, {
forEach: function forEach(fn) {
anObject(this);
try {
aCallable(fn);
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (forEachWithoutClosingOnEarlyError) return call(forEachWithoutClosingOnEarlyError, this, fn);
var record = getIteratorDirect(this);
var counter = 0;
iterate(record, function (value) {
fn(value, counter++);
}, { IS_RECORD: true });
}
});
/***/ }),
/***/ 7628:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var lengthOfArrayLike = __webpack_require__(6198);
// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed
// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed
module.exports = function (O, C) {
var len = lengthOfArrayLike(O);
var A = new C(len);
var k = 0;
for (; k < len; k++) A[k] = O[len - k - 1];
return A;
};
/***/ }),
/***/ 7629:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var IS_PURE = __webpack_require__(6395);
var globalThis = __webpack_require__(4576);
var defineGlobalProperty = __webpack_require__(9433);
var SHARED = '__core-js_shared__';
var store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});
(store.versions || (store.versions = [])).push({
version: '3.43.0',
mode: IS_PURE ? 'pure' : 'global',
copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',
license: 'https://github.com/zloirock/core-js/blob/v3.43.0/LICENSE',
source: 'https://github.com/zloirock/core-js'
});
/***/ }),
/***/ 7642:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var difference = __webpack_require__(3440);
var fails = __webpack_require__(9039);
var setMethodAcceptSetLike = __webpack_require__(4916);
var SET_LIKE_INCORRECT_BEHAVIOR = !setMethodAcceptSetLike('difference', function (result) {
return result.size === 0;
});
var FORCED = SET_LIKE_INCORRECT_BEHAVIOR || fails(function () {
// https://bugs.webkit.org/show_bug.cgi?id=288595
var setLike = {
size: 1,
has: function () { return true; },
keys: function () {
var index = 0;
return {
next: function () {
var done = index++ > 1;
if (baseSet.has(1)) baseSet.clear();
return { done: done, value: 2 };
}
};
}
};
// eslint-disable-next-line es/no-set -- testing
var baseSet = new Set([1, 2, 3, 4]);
// eslint-disable-next-line es/no-set-prototype-difference -- testing
return baseSet.difference(setLike).size !== 3;
});
// `Set.prototype.difference` method
// https://tc39.es/ecma262/#sec-set.prototype.difference
$({ target: 'Set', proto: true, real: true, forced: FORCED }, {
difference: difference
});
/***/ }),
/***/ 7657:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var fails = __webpack_require__(9039);
var isCallable = __webpack_require__(4901);
var isObject = __webpack_require__(34);
var create = __webpack_require__(2360);
var getPrototypeOf = __webpack_require__(2787);
var defineBuiltIn = __webpack_require__(6840);
var wellKnownSymbol = __webpack_require__(8227);
var IS_PURE = __webpack_require__(6395);
var ITERATOR = wellKnownSymbol('iterator');
var BUGGY_SAFARI_ITERATORS = false;
// `%IteratorPrototype%` object
// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
/* eslint-disable es/no-array-prototype-keys -- safe */
if ([].keys) {
arrayIterator = [].keys();
// Safari 8 has buggy iterators w/o `next`
if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
else {
PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
}
}
var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {
var test = {};
// FF44- legacy iterators case
return IteratorPrototype[ITERATOR].call(test) !== test;
});
if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
else if (IS_PURE) IteratorPrototype = create(IteratorPrototype);
// `%IteratorPrototype%[@@iterator]()` method
// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator
if (!isCallable(IteratorPrototype[ITERATOR])) {
defineBuiltIn(IteratorPrototype, ITERATOR, function () {
return this;
});
}
module.exports = {
IteratorPrototype: IteratorPrototype,
BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
};
/***/ }),
/***/ 7680:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
module.exports = uncurryThis([].slice);
/***/ }),
/***/ 7696:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toIntegerOrInfinity = __webpack_require__(1291);
var toLength = __webpack_require__(8014);
var $RangeError = RangeError;
// `ToIndex` abstract operation
// https://tc39.es/ecma262/#sec-toindex
module.exports = function (it) {
if (it === undefined) return 0;
var number = toIntegerOrInfinity(it);
var length = toLength(number);
if (number !== length) throw new $RangeError('Wrong length or index');
return length;
};
/***/ }),
/***/ 7740:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var hasOwn = __webpack_require__(9297);
var ownKeys = __webpack_require__(5031);
var getOwnPropertyDescriptorModule = __webpack_require__(7347);
var definePropertyModule = __webpack_require__(4913);
module.exports = function (target, source, exceptions) {
var keys = ownKeys(source);
var defineProperty = definePropertyModule.f;
var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
defineProperty(target, key, getOwnPropertyDescriptor(source, key));
}
}
};
/***/ }),
/***/ 7750:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isNullOrUndefined = __webpack_require__(4117);
var $TypeError = TypeError;
// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
module.exports = function (it) {
if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it);
return it;
};
/***/ }),
/***/ 7751:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var isCallable = __webpack_require__(4901);
var aFunction = function (argument) {
return isCallable(argument) ? argument : undefined;
};
module.exports = function (namespace, method) {
return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];
};
/***/ }),
/***/ 7811:
/***/ ((module) => {
// eslint-disable-next-line es/no-typed-arrays -- safe
module.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
/***/ }),
/***/ 7936:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var $transfer = __webpack_require__(5636);
// `ArrayBuffer.prototype.transferToFixedLength` method
// https://tc39.es/proposal-arraybuffer-transfer/#sec-arraybuffer.prototype.transfertofixedlength
if ($transfer) $({ target: 'ArrayBuffer', proto: true }, {
transferToFixedLength: function transferToFixedLength() {
return $transfer(this, arguments.length ? arguments[0] : undefined, false);
}
});
/***/ }),
/***/ 8004:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var fails = __webpack_require__(9039);
var intersection = __webpack_require__(8750);
var setMethodAcceptSetLike = __webpack_require__(4916);
var INCORRECT = !setMethodAcceptSetLike('intersection', function (result) {
return result.size === 2 && result.has(1) && result.has(2);
}) || fails(function () {
// eslint-disable-next-line es/no-array-from, es/no-set, es/no-set-prototype-intersection -- testing
return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';
});
// `Set.prototype.intersection` method
// https://tc39.es/ecma262/#sec-set.prototype.intersection
$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {
intersection: intersection
});
/***/ }),
/***/ 8014:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toIntegerOrInfinity = __webpack_require__(1291);
var min = Math.min;
// `ToLength` abstract operation
// https://tc39.es/ecma262/#sec-tolength
module.exports = function (argument) {
var len = toIntegerOrInfinity(argument);
return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};
/***/ }),
/***/ 8100:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var $transfer = __webpack_require__(5636);
// `ArrayBuffer.prototype.transfer` method
// https://tc39.es/proposal-arraybuffer-transfer/#sec-arraybuffer.prototype.transfer
if ($transfer) $({ target: 'ArrayBuffer', proto: true }, {
transfer: function transfer() {
return $transfer(this, arguments.length ? arguments[0] : undefined, true);
}
});
/***/ }),
/***/ 8107:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var toObject = __webpack_require__(8981);
var lengthOfArrayLike = __webpack_require__(6198);
var toIntegerOrInfinity = __webpack_require__(1291);
var addToUnscopables = __webpack_require__(6469);
// `Array.prototype.at` method
// https://tc39.es/ecma262/#sec-array.prototype.at
$({ target: 'Array', proto: true }, {
at: function at(index) {
var O = toObject(this);
var len = lengthOfArrayLike(O);
var relativeIndex = toIntegerOrInfinity(index);
var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
return (k < 0 || k >= len) ? undefined : O[k];
}
});
addToUnscopables('at');
/***/ }),
/***/ 8111:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var anInstance = __webpack_require__(679);
var anObject = __webpack_require__(8551);
var isCallable = __webpack_require__(4901);
var getPrototypeOf = __webpack_require__(2787);
var defineBuiltInAccessor = __webpack_require__(2106);
var createProperty = __webpack_require__(2278);
var fails = __webpack_require__(9039);
var hasOwn = __webpack_require__(9297);
var wellKnownSymbol = __webpack_require__(8227);
var IteratorPrototype = (__webpack_require__(7657).IteratorPrototype);
var DESCRIPTORS = __webpack_require__(3724);
var IS_PURE = __webpack_require__(6395);
var CONSTRUCTOR = 'constructor';
var ITERATOR = 'Iterator';
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var $TypeError = TypeError;
var NativeIterator = globalThis[ITERATOR];
// FF56- have non-standard global helper `Iterator`
var FORCED = IS_PURE
|| !isCallable(NativeIterator)
|| NativeIterator.prototype !== IteratorPrototype
// FF44- non-standard `Iterator` passes previous tests
|| !fails(function () { NativeIterator({}); });
var IteratorConstructor = function Iterator() {
anInstance(this, IteratorPrototype);
if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError('Abstract class Iterator not directly constructable');
};
var defineIteratorPrototypeAccessor = function (key, value) {
if (DESCRIPTORS) {
defineBuiltInAccessor(IteratorPrototype, key, {
configurable: true,
get: function () {
return value;
},
set: function (replacement) {
anObject(this);
if (this === IteratorPrototype) throw new $TypeError("You can't redefine this property");
if (hasOwn(this, key)) this[key] = replacement;
else createProperty(this, key, replacement);
}
});
} else IteratorPrototype[key] = value;
};
if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);
if (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {
defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);
}
IteratorConstructor.prototype = IteratorPrototype;
// `Iterator` constructor
// https://tc39.es/ecma262/#sec-iterator
$({ global: true, constructor: true, forced: FORCED }, {
Iterator: IteratorConstructor
});
/***/ }),
/***/ 8140:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var ArrayBufferViewCore = __webpack_require__(4644);
var lengthOfArrayLike = __webpack_require__(6198);
var toIntegerOrInfinity = __webpack_require__(1291);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.at` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.at
exportTypedArrayMethod('at', function at(index) {
var O = aTypedArray(this);
var len = lengthOfArrayLike(O);
var relativeIndex = toIntegerOrInfinity(index);
var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
return (k < 0 || k >= len) ? undefined : O[k];
});
/***/ }),
/***/ 8227:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var shared = __webpack_require__(5745);
var hasOwn = __webpack_require__(9297);
var uid = __webpack_require__(3392);
var NATIVE_SYMBOL = __webpack_require__(4495);
var USE_SYMBOL_AS_UID = __webpack_require__(7040);
var Symbol = globalThis.Symbol;
var WellKnownSymbolsStore = shared('wks');
var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;
module.exports = function (name) {
if (!hasOwn(WellKnownSymbolsStore, name)) {
WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)
? Symbol[name]
: createWellKnownSymbol('Symbol.' + name);
} return WellKnownSymbolsStore[name];
};
/***/ }),
/***/ 8229:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toPositiveInteger = __webpack_require__(9590);
var $RangeError = RangeError;
module.exports = function (it, BYTES) {
var offset = toPositiveInteger(it);
if (offset % BYTES) throw new $RangeError('Wrong offset');
return offset;
};
/***/ }),
/***/ 8235:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var hasOwn = __webpack_require__(9297);
var $SyntaxError = SyntaxError;
var $parseInt = parseInt;
var fromCharCode = String.fromCharCode;
var at = uncurryThis(''.charAt);
var slice = uncurryThis(''.slice);
var exec = uncurryThis(/./.exec);
var codePoints = {
'\\"': '"',
'\\\\': '\\',
'\\/': '/',
'\\b': '\b',
'\\f': '\f',
'\\n': '\n',
'\\r': '\r',
'\\t': '\t'
};
var IS_4_HEX_DIGITS = /^[\da-f]{4}$/i;
// eslint-disable-next-line regexp/no-control-character -- safe
var IS_C0_CONTROL_CODE = /^[\u0000-\u001F]$/;
module.exports = function (source, i) {
var unterminated = true;
var value = '';
while (i < source.length) {
var chr = at(source, i);
if (chr === '\\') {
var twoChars = slice(source, i, i + 2);
if (hasOwn(codePoints, twoChars)) {
value += codePoints[twoChars];
i += 2;
} else if (twoChars === '\\u') {
i += 2;
var fourHexDigits = slice(source, i, i + 4);
if (!exec(IS_4_HEX_DIGITS, fourHexDigits)) throw new $SyntaxError('Bad Unicode escape at: ' + i);
value += fromCharCode($parseInt(fourHexDigits, 16));
i += 4;
} else throw new $SyntaxError('Unknown escape sequence: "' + twoChars + '"');
} else if (chr === '"') {
unterminated = false;
i++;
break;
} else {
if (exec(IS_C0_CONTROL_CODE, chr)) throw new $SyntaxError('Bad control character in string literal at: ' + i);
value += chr;
i++;
}
}
if (unterminated) throw new $SyntaxError('Unterminated string at: ' + i);
return { value: value, end: i };
};
/***/ }),
/***/ 8237:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var iterate = __webpack_require__(2652);
var aCallable = __webpack_require__(9306);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var iteratorClose = __webpack_require__(9539);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var apply = __webpack_require__(8745);
var fails = __webpack_require__(9039);
var $TypeError = TypeError;
// https://bugs.webkit.org/show_bug.cgi?id=291651
var FAILS_ON_INITIAL_UNDEFINED = fails(function () {
// eslint-disable-next-line es/no-iterator-prototype-reduce, es/no-array-prototype-keys, array-callback-return -- required for testing
[].keys().reduce(function () { /* empty */ }, undefined);
});
var reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError('reduce', $TypeError);
// `Iterator.prototype.reduce` method
// https://tc39.es/ecma262/#sec-iterator.prototype.reduce
$({ target: 'Iterator', proto: true, real: true, forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError }, {
reduce: function reduce(reducer /* , initialValue */) {
anObject(this);
try {
aCallable(reducer);
} catch (error) {
iteratorClose(this, 'throw', error);
}
var noInitial = arguments.length < 2;
var accumulator = noInitial ? undefined : arguments[1];
if (reduceWithoutClosingOnEarlyError) {
return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer] : [reducer, accumulator]);
}
var record = getIteratorDirect(this);
var counter = 0;
iterate(record, function (value) {
if (noInitial) {
noInitial = false;
accumulator = value;
} else {
accumulator = reducer(accumulator, value, counter);
}
counter++;
}, { IS_RECORD: true });
if (noInitial) throw new $TypeError('Reduce of empty iterator with no initial value');
return accumulator;
}
});
/***/ }),
/***/ 8335:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var DESCRIPTORS = __webpack_require__(3724);
var globalThis = __webpack_require__(4576);
var getBuiltIn = __webpack_require__(7751);
var uncurryThis = __webpack_require__(9504);
var call = __webpack_require__(9565);
var isCallable = __webpack_require__(4901);
var isObject = __webpack_require__(34);
var isArray = __webpack_require__(4376);
var hasOwn = __webpack_require__(9297);
var toString = __webpack_require__(655);
var lengthOfArrayLike = __webpack_require__(6198);
var createProperty = __webpack_require__(2278);
var fails = __webpack_require__(9039);
var parseJSONString = __webpack_require__(8235);
var NATIVE_SYMBOL = __webpack_require__(4495);
var JSON = globalThis.JSON;
var Number = globalThis.Number;
var SyntaxError = globalThis.SyntaxError;
var nativeParse = JSON && JSON.parse;
var enumerableOwnProperties = getBuiltIn('Object', 'keys');
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var at = uncurryThis(''.charAt);
var slice = uncurryThis(''.slice);
var exec = uncurryThis(/./.exec);
var push = uncurryThis([].push);
var IS_DIGIT = /^\d$/;
var IS_NON_ZERO_DIGIT = /^[1-9]$/;
var IS_NUMBER_START = /^[\d-]$/;
var IS_WHITESPACE = /^[\t\n\r ]$/;
var PRIMITIVE = 0;
var OBJECT = 1;
var $parse = function (source, reviver) {
source = toString(source);
var context = new Context(source, 0, '');
var root = context.parse();
var value = root.value;
var endIndex = context.skip(IS_WHITESPACE, root.end);
if (endIndex < source.length) {
throw new SyntaxError('Unexpected extra character: "' + at(source, endIndex) + '" after the parsed data at: ' + endIndex);
}
return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value;
};
var internalize = function (holder, name, reviver, node) {
var val = holder[name];
var unmodified = node && val === node.value;
var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {};
var elementRecordsLen, keys, len, i, P;
if (isObject(val)) {
var nodeIsArray = isArray(val);
var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {};
if (nodeIsArray) {
elementRecordsLen = nodes.length;
len = lengthOfArrayLike(val);
for (i = 0; i < len; i++) {
internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined));
}
} else {
keys = enumerableOwnProperties(val);
len = lengthOfArrayLike(keys);
for (i = 0; i < len; i++) {
P = keys[i];
internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined));
}
}
}
return call(reviver, holder, name, val, context);
};
var internalizeProperty = function (object, key, value) {
if (DESCRIPTORS) {
var descriptor = getOwnPropertyDescriptor(object, key);
if (descriptor && !descriptor.configurable) return;
}
if (value === undefined) delete object[key];
else createProperty(object, key, value);
};
var Node = function (value, end, source, nodes) {
this.value = value;
this.end = end;
this.source = source;
this.nodes = nodes;
};
var Context = function (source, index) {
this.source = source;
this.index = index;
};
// https://www.json.org/json-en.html
Context.prototype = {
fork: function (nextIndex) {
return new Context(this.source, nextIndex);
},
parse: function () {
var source = this.source;
var i = this.skip(IS_WHITESPACE, this.index);
var fork = this.fork(i);
var chr = at(source, i);
if (exec(IS_NUMBER_START, chr)) return fork.number();
switch (chr) {
case '{':
return fork.object();
case '[':
return fork.array();
case '"':
return fork.string();
case 't':
return fork.keyword(true);
case 'f':
return fork.keyword(false);
case 'n':
return fork.keyword(null);
} throw new SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
},
node: function (type, value, start, end, nodes) {
return new Node(value, end, type ? null : slice(this.source, start, end), nodes);
},
object: function () {
var source = this.source;
var i = this.index + 1;
var expectKeypair = false;
var object = {};
var nodes = {};
while (i < source.length) {
i = this.until(['"', '}'], i);
if (at(source, i) === '}' && !expectKeypair) {
i++;
break;
}
// Parsing the key
var result = this.fork(i).string();
var key = result.value;
i = result.end;
i = this.until([':'], i) + 1;
// Parsing value
i = this.skip(IS_WHITESPACE, i);
result = this.fork(i).parse();
createProperty(nodes, key, result);
createProperty(object, key, result.value);
i = this.until([',', '}'], result.end);
var chr = at(source, i);
if (chr === ',') {
expectKeypair = true;
i++;
} else if (chr === '}') {
i++;
break;
}
}
return this.node(OBJECT, object, this.index, i, nodes);
},
array: function () {
var source = this.source;
var i = this.index + 1;
var expectElement = false;
var array = [];
var nodes = [];
while (i < source.length) {
i = this.skip(IS_WHITESPACE, i);
if (at(source, i) === ']' && !expectElement) {
i++;
break;
}
var result = this.fork(i).parse();
push(nodes, result);
push(array, result.value);
i = this.until([',', ']'], result.end);
if (at(source, i) === ',') {
expectElement = true;
i++;
} else if (at(source, i) === ']') {
i++;
break;
}
}
return this.node(OBJECT, array, this.index, i, nodes);
},
string: function () {
var index = this.index;
var parsed = parseJSONString(this.source, this.index + 1);
return this.node(PRIMITIVE, parsed.value, index, parsed.end);
},
number: function () {
var source = this.source;
var startIndex = this.index;
var i = startIndex;
if (at(source, i) === '-') i++;
if (at(source, i) === '0') i++;
else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) i = this.skip(IS_DIGIT, i + 1);
else throw new SyntaxError('Failed to parse number at: ' + i);
if (at(source, i) === '.') i = this.skip(IS_DIGIT, i + 1);
if (at(source, i) === 'e' || at(source, i) === 'E') {
i++;
if (at(source, i) === '+' || at(source, i) === '-') i++;
var exponentStartIndex = i;
i = this.skip(IS_DIGIT, i);
if (exponentStartIndex === i) throw new SyntaxError("Failed to parse number's exponent value at: " + i);
}
return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i);
},
keyword: function (value) {
var keyword = '' + value;
var index = this.index;
var endIndex = index + keyword.length;
if (slice(this.source, index, endIndex) !== keyword) throw new SyntaxError('Failed to parse value at: ' + index);
return this.node(PRIMITIVE, value, index, endIndex);
},
skip: function (regex, i) {
var source = this.source;
for (; i < source.length; i++) if (!exec(regex, at(source, i))) break;
return i;
},
until: function (array, i) {
i = this.skip(IS_WHITESPACE, i);
var chr = at(this.source, i);
for (var j = 0; j < array.length; j++) if (array[j] === chr) return i;
throw new SyntaxError('Unexpected character: "' + chr + '" at: ' + i);
}
};
var NO_SOURCE_SUPPORT = fails(function () {
var unsafeInt = '9007199254740993';
var source;
nativeParse(unsafeInt, function (key, value, context) {
source = context.source;
});
return source !== unsafeInt;
});
var PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () {
// Safari 9 bug
return 1 / nativeParse('-0 \t') !== -Infinity;
});
// `JSON.parse` method
// https://tc39.es/ecma262/#sec-json.parse
// https://github.com/tc39/proposal-json-parse-with-source
$({ target: 'JSON', stat: true, forced: NO_SOURCE_SUPPORT }, {
parse: function parse(text, reviver) {
return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver);
}
});
/***/ }),
/***/ 8469:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var iterateSimple = __webpack_require__(507);
var SetHelpers = __webpack_require__(4402);
var Set = SetHelpers.Set;
var SetPrototype = SetHelpers.proto;
var forEach = uncurryThis(SetPrototype.forEach);
var keys = uncurryThis(SetPrototype.keys);
var next = keys(new Set()).next;
module.exports = function (set, fn, interruptible) {
return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);
};
/***/ }),
/***/ 8480:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var internalObjectKeys = __webpack_require__(1828);
var enumBugKeys = __webpack_require__(8727);
var hiddenKeys = enumBugKeys.concat('length', 'prototype');
// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
// eslint-disable-next-line es/no-object-getownpropertynames -- safe
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
return internalObjectKeys(O, hiddenKeys);
};
/***/ }),
/***/ 8527:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var has = (__webpack_require__(4402).has);
var size = __webpack_require__(5170);
var getSetRecord = __webpack_require__(3789);
var iterateSimple = __webpack_require__(507);
var iteratorClose = __webpack_require__(9539);
// `Set.prototype.isSupersetOf` method
// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf
module.exports = function isSupersetOf(other) {
var O = aSet(this);
var otherRec = getSetRecord(other);
if (size(O) < otherRec.size) return false;
var iterator = otherRec.getIterator();
return iterateSimple(iterator, function (e) {
if (!has(O, e)) return iteratorClose(iterator, 'normal', false);
}) !== false;
};
/***/ }),
/***/ 8551:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(34);
var $String = String;
var $TypeError = TypeError;
// `Assert: Type(argument) is Object`
module.exports = function (argument) {
if (isObject(argument)) return argument;
throw new $TypeError($String(argument) + ' is not an object');
};
/***/ }),
/***/ 8574:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ENVIRONMENT = __webpack_require__(4215);
module.exports = ENVIRONMENT === 'NODE';
/***/ }),
/***/ 8622:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var isCallable = __webpack_require__(4901);
var WeakMap = globalThis.WeakMap;
module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));
/***/ }),
/***/ 8646:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var getIteratorMethod = __webpack_require__(851);
module.exports = function (obj, stringHandling) {
if (!stringHandling || typeof obj !== 'string') anObject(obj);
var method = getIteratorMethod(obj);
return getIteratorDirect(anObject(method !== undefined ? call(method, obj) : obj));
};
/***/ }),
/***/ 8686:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var fails = __webpack_require__(9039);
// V8 ~ Chrome 36-
// https://bugs.chromium.org/p/v8/issues/detail?id=3334
module.exports = DESCRIPTORS && fails(function () {
// eslint-disable-next-line es/no-object-defineproperty -- required for testing
return Object.defineProperty(function () { /* empty */ }, 'prototype', {
value: 42,
writable: false
}).prototype !== 42;
});
/***/ }),
/***/ 8721:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var DESCRIPTORS = __webpack_require__(3724);
var uncurryThis = __webpack_require__(9504);
var defineBuiltInAccessor = __webpack_require__(2106);
var URLSearchParamsPrototype = URLSearchParams.prototype;
var forEach = uncurryThis(URLSearchParamsPrototype.forEach);
// `URLSearchParams.prototype.size` getter
// https://github.com/whatwg/url/pull/734
if (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {
defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {
get: function size() {
var count = 0;
forEach(this, function () { count++; });
return count;
},
configurable: true,
enumerable: true
});
}
/***/ }),
/***/ 8727:
/***/ ((module) => {
// IE8- don't enum bug keys
module.exports = [
'constructor',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'toLocaleString',
'toString',
'valueOf'
];
/***/ }),
/***/ 8745:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var NATIVE_BIND = __webpack_require__(616);
var FunctionPrototype = Function.prototype;
var apply = FunctionPrototype.apply;
var call = FunctionPrototype.call;
// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe
module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {
return call.apply(apply, arguments);
});
/***/ }),
/***/ 8750:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var aSet = __webpack_require__(7080);
var SetHelpers = __webpack_require__(4402);
var size = __webpack_require__(5170);
var getSetRecord = __webpack_require__(3789);
var iterateSet = __webpack_require__(8469);
var iterateSimple = __webpack_require__(507);
var Set = SetHelpers.Set;
var add = SetHelpers.add;
var has = SetHelpers.has;
// `Set.prototype.intersection` method
// https://github.com/tc39/proposal-set-methods
module.exports = function intersection(other) {
var O = aSet(this);
var otherRec = getSetRecord(other);
var result = new Set();
if (size(O) > otherRec.size) {
iterateSimple(otherRec.getIterator(), function (e) {
if (has(O, e)) add(result, e);
});
} else {
iterateSet(O, function (e) {
if (otherRec.includes(e)) add(result, e);
});
}
return result;
};
/***/ }),
/***/ 8773:
/***/ ((__unused_webpack_module, exports) => {
var $propertyIsEnumerable = {}.propertyIsEnumerable;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
// Nashorn ~ JDK8 bug
var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
var descriptor = getOwnPropertyDescriptor(this, V);
return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable;
/***/ }),
/***/ 8845:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var call = __webpack_require__(9565);
var ArrayBufferViewCore = __webpack_require__(4644);
var lengthOfArrayLike = __webpack_require__(6198);
var toOffset = __webpack_require__(8229);
var toIndexedObject = __webpack_require__(8981);
var fails = __webpack_require__(9039);
var RangeError = globalThis.RangeError;
var Int8Array = globalThis.Int8Array;
var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
var $set = Int8ArrayPrototype && Int8ArrayPrototype.set;
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {
// eslint-disable-next-line es/no-typed-arrays -- required for testing
var array = new Uint8ClampedArray(2);
call($set, array, { length: 1, 0: 3 }, 1);
return array[1] !== 3;
});
// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other
var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {
var array = new Int8Array(2);
array.set(1);
array.set('2', 1);
return array[0] !== 0 || array[1] !== 2;
});
// `%TypedArray%.prototype.set` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set
exportTypedArrayMethod('set', function set(arrayLike /* , offset */) {
aTypedArray(this);
var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
var src = toIndexedObject(arrayLike);
if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);
var length = this.length;
var len = lengthOfArrayLike(src);
var index = 0;
if (len + offset > length) throw new RangeError('Wrong length');
while (index < len) this[offset + index] = src[index++];
}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);
/***/ }),
/***/ 8981:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var requireObjectCoercible = __webpack_require__(7750);
var $Object = Object;
// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
module.exports = function (argument) {
return $Object(requireObjectCoercible(argument));
};
/***/ }),
/***/ 9039:
/***/ ((module) => {
module.exports = function (exec) {
try {
return !!exec();
} catch (error) {
return true;
}
};
/***/ }),
/***/ 9143:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var uncurryThis = __webpack_require__(9504);
var anObjectOrUndefined = __webpack_require__(3972);
var aString = __webpack_require__(3463);
var hasOwn = __webpack_require__(9297);
var base64Map = __webpack_require__(2804);
var getAlphabetOption = __webpack_require__(944);
var notDetached = __webpack_require__(5169);
var base64Alphabet = base64Map.c2i;
var base64UrlAlphabet = base64Map.c2iUrl;
var SyntaxError = globalThis.SyntaxError;
var TypeError = globalThis.TypeError;
var at = uncurryThis(''.charAt);
var skipAsciiWhitespace = function (string, index) {
var length = string.length;
for (;index < length; index++) {
var chr = at(string, index);
if (chr !== ' ' && chr !== '\t' && chr !== '\n' && chr !== '\f' && chr !== '\r') break;
} return index;
};
var decodeBase64Chunk = function (chunk, alphabet, throwOnExtraBits) {
var chunkLength = chunk.length;
if (chunkLength < 4) {
chunk += chunkLength === 2 ? 'AA' : 'A';
}
var triplet = (alphabet[at(chunk, 0)] << 18)
+ (alphabet[at(chunk, 1)] << 12)
+ (alphabet[at(chunk, 2)] << 6)
+ alphabet[at(chunk, 3)];
var chunkBytes = [
(triplet >> 16) & 255,
(triplet >> 8) & 255,
triplet & 255
];
if (chunkLength === 2) {
if (throwOnExtraBits && chunkBytes[1] !== 0) {
throw new SyntaxError('Extra bits');
}
return [chunkBytes[0]];
}
if (chunkLength === 3) {
if (throwOnExtraBits && chunkBytes[2] !== 0) {
throw new SyntaxError('Extra bits');
}
return [chunkBytes[0], chunkBytes[1]];
}
return chunkBytes;
};
var writeBytes = function (bytes, elements, written) {
var elementsLength = elements.length;
for (var index = 0; index < elementsLength; index++) {
bytes[written + index] = elements[index];
}
return written + elementsLength;
};
/* eslint-disable max-statements, max-depth -- TODO */
module.exports = function (string, options, into, maxLength) {
aString(string);
anObjectOrUndefined(options);
var alphabet = getAlphabetOption(options) === 'base64' ? base64Alphabet : base64UrlAlphabet;
var lastChunkHandling = options ? options.lastChunkHandling : undefined;
if (lastChunkHandling === undefined) lastChunkHandling = 'loose';
if (lastChunkHandling !== 'loose' && lastChunkHandling !== 'strict' && lastChunkHandling !== 'stop-before-partial') {
throw new TypeError('Incorrect `lastChunkHandling` option');
}
if (into) notDetached(into.buffer);
var bytes = into || [];
var written = 0;
var read = 0;
var chunk = '';
var index = 0;
if (maxLength) while (true) {
index = skipAsciiWhitespace(string, index);
if (index === string.length) {
if (chunk.length > 0) {
if (lastChunkHandling === 'stop-before-partial') {
break;
}
if (lastChunkHandling === 'loose') {
if (chunk.length === 1) {
throw new SyntaxError('Malformed padding: exactly one additional character');
}
written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, false), written);
} else {
throw new SyntaxError('Missing padding');
}
}
read = string.length;
break;
}
var chr = at(string, index);
++index;
if (chr === '=') {
if (chunk.length < 2) {
throw new SyntaxError('Padding is too early');
}
index = skipAsciiWhitespace(string, index);
if (chunk.length === 2) {
if (index === string.length) {
if (lastChunkHandling === 'stop-before-partial') {
break;
}
throw new SyntaxError('Malformed padding: only one =');
}
if (at(string, index) === '=') {
++index;
index = skipAsciiWhitespace(string, index);
}
}
if (index < string.length) {
throw new SyntaxError('Unexpected character after padding');
}
written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, lastChunkHandling === 'strict'), written);
read = string.length;
break;
}
if (!hasOwn(alphabet, chr)) {
throw new SyntaxError('Unexpected character');
}
var remainingBytes = maxLength - written;
if (remainingBytes === 1 && chunk.length === 2 || remainingBytes === 2 && chunk.length === 3) {
// special case: we can fit exactly the number of bytes currently represented by chunk, so we were just checking for `=`
break;
}
chunk += chr;
if (chunk.length === 4) {
written = writeBytes(bytes, decodeBase64Chunk(chunk, alphabet, false), written);
chunk = '';
read = index;
if (written === maxLength) {
break;
}
}
}
return { bytes: bytes, read: read, written: written };
};
/***/ }),
/***/ 9286:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var SetHelpers = __webpack_require__(4402);
var iterate = __webpack_require__(8469);
var Set = SetHelpers.Set;
var add = SetHelpers.add;
module.exports = function (set) {
var result = new Set();
iterate(set, function (it) {
add(result, it);
});
return result;
};
/***/ }),
/***/ 9297:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var uncurryThis = __webpack_require__(9504);
var toObject = __webpack_require__(8981);
var hasOwnProperty = uncurryThis({}.hasOwnProperty);
// `HasOwnProperty` abstract operation
// https://tc39.es/ecma262/#sec-hasownproperty
// eslint-disable-next-line es/no-object-hasown -- safe
module.exports = Object.hasOwn || function hasOwn(it, key) {
return hasOwnProperty(toObject(it), key);
};
/***/ }),
/***/ 9306:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isCallable = __webpack_require__(4901);
var tryToString = __webpack_require__(6823);
var $TypeError = TypeError;
// `Assert: IsCallable(argument) is true`
module.exports = function (argument) {
if (isCallable(argument)) return argument;
throw new $TypeError(tryToString(argument) + ' is not a function');
};
/***/ }),
/***/ 9314:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var call = __webpack_require__(9565);
var anObject = __webpack_require__(8551);
var getIteratorDirect = __webpack_require__(1767);
var notANaN = __webpack_require__(4149);
var toPositiveInteger = __webpack_require__(9590);
var iteratorClose = __webpack_require__(9539);
var createIteratorProxy = __webpack_require__(9462);
var iteratorHelperThrowsOnInvalidIterator = __webpack_require__(684);
var iteratorHelperWithoutClosingOnEarlyError = __webpack_require__(4549);
var IS_PURE = __webpack_require__(6395);
var DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR = !IS_PURE && !iteratorHelperThrowsOnInvalidIterator('drop', 0);
var dropWithoutClosingOnEarlyError = !IS_PURE && !DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR
&& iteratorHelperWithoutClosingOnEarlyError('drop', RangeError);
var FORCED = IS_PURE || DROP_WITHOUT_THROWING_ON_INVALID_ITERATOR || dropWithoutClosingOnEarlyError;
var IteratorProxy = createIteratorProxy(function () {
var iterator = this.iterator;
var next = this.next;
var result, done;
while (this.remaining) {
this.remaining--;
result = anObject(call(next, iterator));
done = this.done = !!result.done;
if (done) return;
}
result = anObject(call(next, iterator));
done = this.done = !!result.done;
if (!done) return result.value;
});
// `Iterator.prototype.drop` method
// https://tc39.es/ecma262/#sec-iterator.prototype.drop
$({ target: 'Iterator', proto: true, real: true, forced: FORCED }, {
drop: function drop(limit) {
anObject(this);
var remaining;
try {
remaining = toPositiveInteger(notANaN(+limit));
} catch (error) {
iteratorClose(this, 'throw', error);
}
if (dropWithoutClosingOnEarlyError) return call(dropWithoutClosingOnEarlyError, this, remaining);
return new IteratorProxy(getIteratorDirect(this), {
remaining: remaining
});
}
});
/***/ }),
/***/ 9429:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var IS_NODE = __webpack_require__(8574);
module.exports = function (name) {
if (IS_NODE) {
try {
return globalThis.process.getBuiltinModule(name);
} catch (error) { /* empty */ }
try {
// eslint-disable-next-line no-new-func -- safe
return Function('return require("' + name + '")')();
} catch (error) { /* empty */ }
}
};
/***/ }),
/***/ 9432:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var arrayFromConstructorAndList = __webpack_require__(5370);
var $fromBase64 = __webpack_require__(9143);
var Uint8Array = globalThis.Uint8Array;
// `Uint8Array.fromBase64` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (Uint8Array) $({ target: 'Uint8Array', stat: true }, {
fromBase64: function fromBase64(string /* , options */) {
var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, null, 0x1FFFFFFFFFFFFF);
return arrayFromConstructorAndList(Uint8Array, result.bytes);
}
});
/***/ }),
/***/ 9433:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
// eslint-disable-next-line es/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;
module.exports = function (key, value) {
try {
defineProperty(globalThis, key, { value: value, configurable: true, writable: true });
} catch (error) {
globalThis[key] = value;
} return value;
};
/***/ }),
/***/ 9462:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
var create = __webpack_require__(2360);
var createNonEnumerableProperty = __webpack_require__(6699);
var defineBuiltIns = __webpack_require__(6279);
var wellKnownSymbol = __webpack_require__(8227);
var InternalStateModule = __webpack_require__(1181);
var getMethod = __webpack_require__(5966);
var IteratorPrototype = (__webpack_require__(7657).IteratorPrototype);
var createIterResultObject = __webpack_require__(2529);
var iteratorClose = __webpack_require__(9539);
var iteratorCloseAll = __webpack_require__(1385);
var TO_STRING_TAG = wellKnownSymbol('toStringTag');
var ITERATOR_HELPER = 'IteratorHelper';
var WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';
var NORMAL = 'normal';
var THROW = 'throw';
var setInternalState = InternalStateModule.set;
var createIteratorProxyPrototype = function (IS_ITERATOR) {
var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
return defineBuiltIns(create(IteratorPrototype), {
next: function next() {
var state = getInternalState(this);
// for simplification:
// for `%WrapForValidIteratorPrototype%.next` or with `state.returnHandlerResult` our `nextHandler` returns `IterResultObject`
// for `%IteratorHelperPrototype%.next` - just a value
if (IS_ITERATOR) return state.nextHandler();
if (state.done) return createIterResultObject(undefined, true);
try {
var result = state.nextHandler();
return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
} catch (error) {
state.done = true;
throw error;
}
},
'return': function () {
var state = getInternalState(this);
var iterator = state.iterator;
state.done = true;
if (IS_ITERATOR) {
var returnMethod = getMethod(iterator, 'return');
return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);
}
if (state.inner) try {
iteratorClose(state.inner.iterator, NORMAL);
} catch (error) {
return iteratorClose(iterator, THROW, error);
}
if (state.openIters) try {
iteratorCloseAll(state.openIters, NORMAL);
} catch (error) {
return iteratorClose(iterator, THROW, error);
}
if (iterator) iteratorClose(iterator, NORMAL);
return createIterResultObject(undefined, true);
}
});
};
var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
var IteratorHelperPrototype = createIteratorProxyPrototype(false);
createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');
module.exports = function (nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
var IteratorProxy = function Iterator(record, state) {
if (state) {
state.iterator = record.iterator;
state.next = record.next;
} else state = record;
state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
state.nextHandler = nextHandler;
state.counter = 0;
state.done = false;
setInternalState(this, state);
};
IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
return IteratorProxy;
};
/***/ }),
/***/ 9504:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var NATIVE_BIND = __webpack_require__(616);
var FunctionPrototype = Function.prototype;
var call = FunctionPrototype.call;
// eslint-disable-next-line es/no-function-prototype-bind -- safe
var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {
return function () {
return call.apply(fn, arguments);
};
};
/***/ }),
/***/ 9519:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var globalThis = __webpack_require__(4576);
var userAgent = __webpack_require__(2839);
var process = globalThis.process;
var Deno = globalThis.Deno;
var versions = process && process.versions || Deno && Deno.version;
var v8 = versions && versions.v8;
var match, version;
if (v8) {
match = v8.split('.');
// in old Chrome, versions of V8 isn't V8 = Chrome / 10
// but their correct versions are not interesting for us
version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
}
// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
// so check `userAgent` even if `.v8` exists, but 0
if (!version && userAgent) {
match = userAgent.match(/Edge\/(\d+)/);
if (!match || match[1] >= 74) {
match = userAgent.match(/Chrome\/(\d+)/);
if (match) version = +match[1];
}
}
module.exports = version;
/***/ }),
/***/ 9539:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var call = __webpack_require__(9565);
var anObject = __webpack_require__(8551);
var getMethod = __webpack_require__(5966);
module.exports = function (iterator, kind, value) {
var innerResult, innerError;
anObject(iterator);
try {
innerResult = getMethod(iterator, 'return');
if (!innerResult) {
if (kind === 'throw') throw value;
return value;
}
innerResult = call(innerResult, iterator);
} catch (error) {
innerError = true;
innerResult = error;
}
if (kind === 'throw') throw value;
if (innerError) throw innerResult;
anObject(innerResult);
return value;
};
/***/ }),
/***/ 9565:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var NATIVE_BIND = __webpack_require__(616);
var call = Function.prototype.call;
// eslint-disable-next-line es/no-function-prototype-bind -- safe
module.exports = NATIVE_BIND ? call.bind(call) : function () {
return call.apply(call, arguments);
};
/***/ }),
/***/ 9577:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var arrayWith = __webpack_require__(9928);
var ArrayBufferViewCore = __webpack_require__(4644);
var isBigIntArray = __webpack_require__(1108);
var toIntegerOrInfinity = __webpack_require__(1291);
var toBigInt = __webpack_require__(5854);
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
var PROPER_ORDER = function () {
try {
// eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing
new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });
} catch (error) {
// some early implementations, like WebKit, does not follow the final semantic
// https://github.com/tc39/proposal-change-array-by-copy/pull/86
return error === 8;
}
}();
// Bug in WebKit. It should truncate a negative fractional index to zero, but instead throws an error
var THROW_ON_NEGATIVE_FRACTIONAL_INDEX = PROPER_ORDER && function () {
try {
// eslint-disable-next-line es/no-typed-arrays, es/no-array-prototype-with -- required for testing
new Int8Array(1)['with'](-0.5, 1);
} catch (error) {
return true;
}
}();
// `%TypedArray%.prototype.with` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with
exportTypedArrayMethod('with', { 'with': function (index, value) {
var O = aTypedArray(this);
var relativeIndex = toIntegerOrInfinity(index);
var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;
return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);
} }['with'], !PROPER_ORDER || THROW_ON_NEGATIVE_FRACTIONAL_INDEX);
/***/ }),
/***/ 9590:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toIntegerOrInfinity = __webpack_require__(1291);
var $RangeError = RangeError;
module.exports = function (it) {
var result = toIntegerOrInfinity(it);
if (result < 0) throw new $RangeError("The argument can't be less than 0");
return result;
};
/***/ }),
/***/ 9617:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var toIndexedObject = __webpack_require__(5397);
var toAbsoluteIndex = __webpack_require__(5610);
var lengthOfArrayLike = __webpack_require__(6198);
// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
var O = toIndexedObject($this);
var length = lengthOfArrayLike(O);
if (length === 0) return !IS_INCLUDES && -1;
var index = toAbsoluteIndex(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
// eslint-disable-next-line no-self-compare -- NaN check
if (IS_INCLUDES && el !== el) while (length > index) {
value = O[index++];
// eslint-disable-next-line no-self-compare -- NaN check
if (value !== value) return true;
// Array#indexOf ignores holes, Array#includes - not
} else for (;length > index; index++) {
if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
} return !IS_INCLUDES && -1;
};
};
module.exports = {
// `Array.prototype.includes` method
// https://tc39.es/ecma262/#sec-array.prototype.includes
includes: createMethod(true),
// `Array.prototype.indexOf` method
// https://tc39.es/ecma262/#sec-array.prototype.indexof
indexOf: createMethod(false)
};
/***/ }),
/***/ 9631:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var uncurryThis = __webpack_require__(9504);
var anObjectOrUndefined = __webpack_require__(3972);
var anUint8Array = __webpack_require__(4154);
var notDetached = __webpack_require__(5169);
var base64Map = __webpack_require__(2804);
var getAlphabetOption = __webpack_require__(944);
var base64Alphabet = base64Map.i2c;
var base64UrlAlphabet = base64Map.i2cUrl;
var charAt = uncurryThis(''.charAt);
// `Uint8Array.prototype.toBase64` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (globalThis.Uint8Array) $({ target: 'Uint8Array', proto: true }, {
toBase64: function toBase64(/* options */) {
var array = anUint8Array(this);
var options = arguments.length ? anObjectOrUndefined(arguments[0]) : undefined;
var alphabet = getAlphabetOption(options) === 'base64' ? base64Alphabet : base64UrlAlphabet;
var omitPadding = !!options && !!options.omitPadding;
notDetached(this.buffer);
var result = '';
var i = 0;
var length = array.length;
var triplet;
var at = function (shift) {
return charAt(alphabet, (triplet >> (6 * shift)) & 63);
};
for (; i + 2 < length; i += 3) {
triplet = (array[i] << 16) + (array[i + 1] << 8) + array[i + 2];
result += at(3) + at(2) + at(1) + at(0);
}
if (i + 2 === length) {
triplet = (array[i] << 16) + (array[i + 1] << 8);
result += at(3) + at(2) + at(1) + (omitPadding ? '' : '=');
} else if (i + 1 === length) {
triplet = array[i] << 16;
result += at(3) + at(2) + (omitPadding ? '' : '==');
}
return result;
}
});
/***/ }),
/***/ 9797:
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
var $ = __webpack_require__(6518);
var globalThis = __webpack_require__(4576);
var aString = __webpack_require__(3463);
var anUint8Array = __webpack_require__(4154);
var notDetached = __webpack_require__(5169);
var $fromHex = __webpack_require__(2303);
// `Uint8Array.prototype.setFromHex` method
// https://github.com/tc39/proposal-arraybuffer-base64
if (globalThis.Uint8Array) $({ target: 'Uint8Array', proto: true }, {
setFromHex: function setFromHex(string) {
anUint8Array(this);
aString(string);
notDetached(this.buffer);
var read = $fromHex(string, this).read;
return { read: read, written: read / 2 };
}
});
/***/ }),
/***/ 9835:
/***/ ((module) => {
// Should get iterator record of a set-like object before cloning this
// https://bugs.webkit.org/show_bug.cgi?id=289430
module.exports = function (METHOD_NAME) {
try {
// eslint-disable-next-line es/no-set -- needed for test
var baseSet = new Set();
var setLike = {
size: 0,
has: function () { return true; },
keys: function () {
// eslint-disable-next-line es/no-object-defineproperty -- needed for test
return Object.defineProperty({}, 'next', {
get: function () {
baseSet.clear();
baseSet.add(4);
return function () {
return { done: true };
};
}
});
}
};
var result = baseSet[METHOD_NAME](setLike);
return result.size !== 1 || result.values().next().value !== 4;
} catch (error) {
return false;
}
};
/***/ }),
/***/ 9928:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var lengthOfArrayLike = __webpack_require__(6198);
var toIntegerOrInfinity = __webpack_require__(1291);
var $RangeError = RangeError;
// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with
// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with
module.exports = function (O, C, index, value) {
var len = lengthOfArrayLike(O);
var relativeIndex = toIntegerOrInfinity(index);
var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;
if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');
var A = new C(len);
var k = 0;
for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];
return A;
};
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
var __webpack_exports__ = {};
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.error.cause.js
var es_error_cause = __webpack_require__(6280);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.push.js
var es_array_push = __webpack_require__(4114);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array-buffer.detached.js
var es_array_buffer_detached = __webpack_require__(6573);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array-buffer.transfer.js
var es_array_buffer_transfer = __webpack_require__(8100);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array-buffer.transfer-to-fixed-length.js
var es_array_buffer_transfer_to_fixed_length = __webpack_require__(7936);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.constructor.js
var es_iterator_constructor = __webpack_require__(8111);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.reduce.js
var es_iterator_reduce = __webpack_require__(8237);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.try.js
var es_promise_try = __webpack_require__(1689);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.at.js
var es_typed_array_at = __webpack_require__(8140);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.fill.js
var es_typed_array_fill = __webpack_require__(5044);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find-last.js
var es_typed_array_find_last = __webpack_require__(1903);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find-last-index.js
var es_typed_array_find_last_index = __webpack_require__(1134);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.set.js
var es_typed_array_set = __webpack_require__(8845);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.sort.js
var es_typed_array_sort = __webpack_require__(373);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-reversed.js
var es_typed_array_to_reversed = __webpack_require__(7467);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-sorted.js
var es_typed_array_to_sorted = __webpack_require__(4732);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.with.js
var es_typed_array_with = __webpack_require__(9577);
// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.uint8-array.from-base64.js
var esnext_uint8_array_from_base64 = __webpack_require__(9432);
// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.uint8-array.set-from-base64.js
var esnext_uint8_array_set_from_base64 = __webpack_require__(1549);
// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.uint8-array.set-from-hex.js
var esnext_uint8_array_set_from_hex = __webpack_require__(9797);
// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.uint8-array.to-base64.js
var esnext_uint8_array_to_base64 = __webpack_require__(9631);
// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.uint8-array.to-hex.js
var esnext_uint8_array_to_hex = __webpack_require__(5623);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-exception.stack.js
var web_dom_exception_stack = __webpack_require__(4979);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.self.js
var web_self = __webpack_require__(3611);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url.parse.js
var web_url_parse = __webpack_require__(5781);
;// ./external/ngx-logger/ngx-console.js
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class NgxConsole {
static log(message, reason) {
if (NgxConsole.ngxConsoleFilter("log", message)) {
if (reason !== undefined) {
console.log("%s", message, reason);
} else {
console.log(message);
}
}
}
static error(message, reason) {
if (NgxConsole.ngxConsoleFilter("error", message)) {
if (reason !== undefined) {
console.error("%s", message, reason);
} else {
console.error(message);
}
}
}
static warn(message, reason) {
if (NgxConsole.ngxConsoleFilter("warn", message)) {
if (reason !== undefined) {
console.warn("%s", message, reason);
} else {
console.warn(message);
}
}
}
static debug(message, reason) {
if (NgxConsole.ngxConsoleFilter("debug", message)) {
if (reason !== undefined) {
console.warn("%s", message, reason);
} else {
console.warn(message);
}
}
}
get ngxConsoleFilter() {
return NgxConsole.ngxConsoleFilter;
}
set ngxConsoleFilter(filter) {
NgxConsole.ngxConsoleFilter = filter;
}
reset() {
NgxConsole.ngxConsoleFilter = (_level, _message) => true;
}
}
_defineProperty(NgxConsole, "ngxConsoleFilter", (_level, _message) => true);
;// ./src/shared/util.js
var _Util;
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
const LINE_FACTOR = 1.35;
const LINE_DESCENT_FACTOR = 0.35;
const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;
const RenderingIntentFlag = {
ANY: 0x01,
DISPLAY: 0x02,
PRINT: 0x04,
SAVE: 0x08,
ANNOTATIONS_FORMS: 0x10,
ANNOTATIONS_STORAGE: 0x20,
ANNOTATIONS_DISABLE: 0x40,
IS_EDITING: 0x80,
OPLIST: 0x100
};
const AnnotationMode = {
DISABLE: 0,
ENABLE: 1,
ENABLE_FORMS: 2,
ENABLE_STORAGE: 3
};
const AnnotationEditorPrefix = "pdfjs_internal_editor_";
const AnnotationEditorType = {
DISABLE: -1,
NONE: 0,
FREETEXT: 3,
HIGHLIGHT: 9,
STAMP: 13,
INK: 15,
SIGNATURE: 101
};
const AnnotationEditorParamsType = {
RESIZE: 1,
CREATE: 2,
FREETEXT_SIZE: 11,
FREETEXT_COLOR: 12,
FREETEXT_OPACITY: 13,
INK_COLOR: 21,
INK_THICKNESS: 22,
INK_OPACITY: 23,
HIGHLIGHT_COLOR: 31,
HIGHLIGHT_DEFAULT_COLOR: 32,
HIGHLIGHT_THICKNESS: 33,
HIGHLIGHT_FREE: 34,
HIGHLIGHT_SHOW_ALL: 35,
DRAW_STEP: 41
};
const PermissionFlag = {
PRINT: 0x04,
MODIFY_CONTENTS: 0x08,
COPY: 0x10,
MODIFY_ANNOTATIONS: 0x20,
FILL_INTERACTIVE_FORMS: 0x100,
COPY_FOR_ACCESSIBILITY: 0x200,
ASSEMBLE: 0x400,
PRINT_HIGH_QUALITY: 0x800
};
const TextRenderingMode = {
FILL: 0,
STROKE: 1,
FILL_STROKE: 2,
INVISIBLE: 3,
FILL_ADD_TO_PATH: 4,
STROKE_ADD_TO_PATH: 5,
FILL_STROKE_ADD_TO_PATH: 6,
ADD_TO_PATH: 7,
FILL_STROKE_MASK: 3,
ADD_TO_PATH_FLAG: 4
};
const util_ImageKind = {
GRAYSCALE_1BPP: 1,
RGB_24BPP: 2,
RGBA_32BPP: 3
};
const AnnotationType = {
TEXT: 1,
LINK: 2,
FREETEXT: 3,
LINE: 4,
SQUARE: 5,
CIRCLE: 6,
POLYGON: 7,
POLYLINE: 8,
HIGHLIGHT: 9,
UNDERLINE: 10,
SQUIGGLY: 11,
STRIKEOUT: 12,
STAMP: 13,
CARET: 14,
INK: 15,
POPUP: 16,
FILEATTACHMENT: 17,
SOUND: 18,
MOVIE: 19,
WIDGET: 20,
SCREEN: 21,
PRINTERMARK: 22,
TRAPNET: 23,
WATERMARK: 24,
THREED: 25,
REDACT: 26
};
const AnnotationReplyType = {
GROUP: "Group",
REPLY: "R"
};
const AnnotationFlag = {
INVISIBLE: 0x01,
HIDDEN: 0x02,
PRINT: 0x04,
NOZOOM: 0x08,
NOROTATE: 0x10,
NOVIEW: 0x20,
READONLY: 0x40,
LOCKED: 0x80,
TOGGLENOVIEW: 0x100,
LOCKEDCONTENTS: 0x200
};
const AnnotationFieldFlag = {
READONLY: 0x0000001,
REQUIRED: 0x0000002,
NOEXPORT: 0x0000004,
MULTILINE: 0x0001000,
PASSWORD: 0x0002000,
NOTOGGLETOOFF: 0x0004000,
RADIO: 0x0008000,
PUSHBUTTON: 0x0010000,
COMBO: 0x0020000,
EDIT: 0x0040000,
SORT: 0x0080000,
FILESELECT: 0x0100000,
MULTISELECT: 0x0200000,
DONOTSPELLCHECK: 0x0400000,
DONOTSCROLL: 0x0800000,
COMB: 0x1000000,
RICHTEXT: 0x2000000,
RADIOSINUNISON: 0x2000000,
COMMITONSELCHANGE: 0x4000000
};
const AnnotationBorderStyleType = {
SOLID: 1,
DASHED: 2,
BEVELED: 3,
INSET: 4,
UNDERLINE: 5
};
const AnnotationActionEventType = {
E: "Mouse Enter",
X: "Mouse Exit",
D: "Mouse Down",
U: "Mouse Up",
Fo: "Focus",
Bl: "Blur",
PO: "PageOpen",
PC: "PageClose",
PV: "PageVisible",
PI: "PageInvisible",
K: "Keystroke",
F: "Format",
V: "Validate",
C: "Calculate"
};
const DocumentActionEventType = {
WC: "WillClose",
WS: "WillSave",
DS: "DidSave",
WP: "WillPrint",
DP: "DidPrint"
};
const PageActionEventType = {
O: "PageOpen",
C: "PageClose"
};
const VerbosityLevel = {
ERRORS: 0,
WARNINGS: 1,
INFOS: 5
};
const OPS = {
dependency: 1,
setLineWidth: 2,
setLineCap: 3,
setLineJoin: 4,
setMiterLimit: 5,
setDash: 6,
setRenderingIntent: 7,
setFlatness: 8,
setGState: 9,
save: 10,
restore: 11,
transform: 12,
moveTo: 13,
lineTo: 14,
curveTo: 15,
curveTo2: 16,
curveTo3: 17,
closePath: 18,
rectangle: 19,
stroke: 20,
closeStroke: 21,
fill: 22,
eoFill: 23,
fillStroke: 24,
eoFillStroke: 25,
closeFillStroke: 26,
closeEOFillStroke: 27,
endPath: 28,
clip: 29,
eoClip: 30,
beginText: 31,
endText: 32,
setCharSpacing: 33,
setWordSpacing: 34,
setHScale: 35,
setLeading: 36,
setFont: 37,
setTextRenderingMode: 38,
setTextRise: 39,
moveText: 40,
setLeadingMoveText: 41,
setTextMatrix: 42,
nextLine: 43,
showText: 44,
showSpacedText: 45,
nextLineShowText: 46,
nextLineSetSpacingShowText: 47,
setCharWidth: 48,
setCharWidthAndBounds: 49,
setStrokeColorSpace: 50,
setFillColorSpace: 51,
setStrokeColor: 52,
setStrokeColorN: 53,
setFillColor: 54,
setFillColorN: 55,
setStrokeGray: 56,
setFillGray: 57,
setStrokeRGBColor: 58,
setFillRGBColor: 59,
setStrokeCMYKColor: 60,
setFillCMYKColor: 61,
shadingFill: 62,
beginInlineImage: 63,
beginImageData: 64,
endInlineImage: 65,
paintXObject: 66,
markPoint: 67,
markPointProps: 68,
beginMarkedContent: 69,
beginMarkedContentProps: 70,
endMarkedContent: 71,
beginCompat: 72,
endCompat: 73,
paintFormXObjectBegin: 74,
paintFormXObjectEnd: 75,
beginGroup: 76,
endGroup: 77,
beginAnnotation: 80,
endAnnotation: 81,
paintImageMaskXObject: 83,
paintImageMaskXObjectGroup: 84,
paintImageXObject: 85,
paintInlineImageXObject: 86,
paintInlineImageXObjectGroup: 87,
paintImageXObjectRepeat: 88,
paintImageMaskXObjectRepeat: 89,
paintSolidColorImageMask: 90,
constructPath: 91,
setStrokeTransparent: 92,
setFillTransparent: 93,
rawFillPath: 94
};
const DrawOPS = {
moveTo: 0,
lineTo: 1,
curveTo: 2,
closePath: 3
};
const PasswordResponses = {
NEED_PASSWORD: 1,
INCORRECT_PASSWORD: 2
};
let verbosity = VerbosityLevel.WARNINGS;
function setVerbosityLevel(level) {
if (Number.isInteger(level)) {
verbosity = level;
}
}
function getVerbosityLevel() {
return verbosity;
}
function info(msg) {
if (verbosity >= VerbosityLevel.INFOS) {
if (typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope) {
console.log(`Info: ${msg}`);
} else if (Window && NgxConsole) {
NgxConsole.log(`Info: ${msg}`);
} else {
console.log(`Info: ${msg}`);
}
}
}
function warn(msg) {
if (verbosity >= VerbosityLevel.WARNINGS) {
if (typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope) {
NgxConsole.log(`Warning: ${msg}`);
} else if (Window && NgxConsole) {
NgxConsole.log(`Warning: ${msg}`);
} else {
console.log(`Warning: ${msg}`);
}
}
}
function unreachable(msg) {
throw new Error(msg);
}
function assert(cond, msg) {
if (!cond) {
unreachable(msg);
}
}
function _isValidProtocol(url) {
switch (url?.protocol) {
case "http:":
case "https:":
case "ftp:":
case "mailto:":
case "tel:":
case "capacitor":
return true;
default:
return false;
}
}
function createValidAbsoluteUrl(url) {
let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!url) {
return null;
}
if (options && typeof url === "string") {
if (options.addDefaultProtocol && url.startsWith("www.")) {
const dots = url.match(/\./g);
if (dots?.length >= 2) {
url = `http://${url}`;
}
}
if (options.tryConvertEncoding) {
try {
url = stringToUTF8String(url);
} catch {}
}
}
const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);
return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;
}
function updateUrlHash(url, hash) {
let allowRel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
const res = URL.parse(url);
if (res) {
res.hash = hash;
return res.href;
}
if (allowRel && createValidAbsoluteUrl(url, "http://example.com")) {
return url.split("#", 1)[0] + `${hash ? `#${hash}` : ""}`;
}
return "";
}
function shadow(obj, prop, value) {
let nonSerializable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
Object.defineProperty(obj, prop, {
value,
enumerable: !nonSerializable,
configurable: true,
writable: false
});
return value;
}
const BaseException = function BaseExceptionClosure() {
function BaseException(message, name) {
this.message = message;
this.name = name;
}
BaseException.prototype = new Error();
BaseException.constructor = BaseException;
return BaseException;
}();
class PasswordException extends BaseException {
constructor(msg, code) {
super(msg, "PasswordException");
this.code = code;
}
}
class UnknownErrorException extends BaseException {
constructor(msg, details) {
super(msg, "UnknownErrorException");
this.details = details;
}
}
class InvalidPDFException extends BaseException {
constructor(msg) {
super(msg, "InvalidPDFException");
}
}
class ResponseException extends BaseException {
constructor(msg, status, missing) {
super(msg, "ResponseException");
this.status = status;
this.missing = missing;
}
}
class FormatError extends BaseException {
constructor(msg) {
super(msg, "FormatError");
}
}
class AbortException extends BaseException {
constructor(msg) {
super(msg, "AbortException");
}
}
function bytesToString(bytes) {
if (typeof bytes !== "object" || bytes?.length === undefined) {
unreachable("Invalid argument for bytesToString");
}
const length = bytes.length;
const MAX_ARGUMENT_COUNT = 8192;
if (length < MAX_ARGUMENT_COUNT) {
return String.fromCharCode.apply(null, bytes);
}
const strBuf = [];
for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
const chunk = bytes.subarray(i, chunkEnd);
strBuf.push(String.fromCharCode.apply(null, chunk));
}
return strBuf.join("");
}
function stringToBytes(str) {
if (typeof str !== "string") {
unreachable("Invalid argument for stringToBytes");
}
const length = str.length;
const bytes = new Uint8Array(length);
for (let i = 0; i < length; ++i) {
bytes[i] = str.charCodeAt(i) & 0xff;
}
return bytes;
}
function string32(value) {
return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
}
function objectSize(obj) {
return Object.keys(obj).length;
}
function isLittleEndian() {
const buffer8 = new Uint8Array(4);
buffer8[0] = 1;
const view32 = new Uint32Array(buffer8.buffer, 0, 1);
return view32[0] === 1;
}
function isEvalSupported() {
try {
new Function("");
return true;
} catch {
return false;
}
}
class util_FeatureTest {
static get isLittleEndian() {
return shadow(this, "isLittleEndian", isLittleEndian());
}
static get isEvalSupported() {
return shadow(this, "isEvalSupported", isEvalSupported());
}
static get isOffscreenCanvasSupported() {
return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined");
}
static get isImageDecoderSupported() {
return shadow(this, "isImageDecoderSupported", typeof ImageDecoder !== "undefined");
}
static get platform() {
const {
platform,
userAgent
} = navigator;
return shadow(this, "platform", {
isAndroid: userAgent.includes("Android"),
isLinux: platform.includes("Linux"),
isMac: platform.includes("Mac"),
isWindows: platform.includes("Win"),
isFirefox: userAgent.includes("Firefox")
});
}
static get isCSSRoundSupported() {
return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)"));
}
}
const hexNumbers = Array.from(Array(256).keys(), n => n.toString(16).padStart(2, "0"));
class Util {
static makeHexColor(r, g, b) {
return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
}
static scaleMinMax(transform, minMax) {
let temp;
if (transform[0]) {
if (transform[0] < 0) {
temp = minMax[0];
minMax[0] = minMax[2];
minMax[2] = temp;
}
minMax[0] *= transform[0];
minMax[2] *= transform[0];
if (transform[3] < 0) {
temp = minMax[1];
minMax[1] = minMax[3];
minMax[3] = temp;
}
minMax[1] *= transform[3];
minMax[3] *= transform[3];
} else {
temp = minMax[0];
minMax[0] = minMax[1];
minMax[1] = temp;
temp = minMax[2];
minMax[2] = minMax[3];
minMax[3] = temp;
if (transform[1] < 0) {
temp = minMax[1];
minMax[1] = minMax[3];
minMax[3] = temp;
}
minMax[1] *= transform[1];
minMax[3] *= transform[1];
if (transform[2] < 0) {
temp = minMax[0];
minMax[0] = minMax[2];
minMax[2] = temp;
}
minMax[0] *= transform[2];
minMax[2] *= transform[2];
}
minMax[0] += transform[4];
minMax[1] += transform[5];
minMax[2] += transform[4];
minMax[3] += transform[5];
}
static transform(m1, m2) {
return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
}
static applyTransform(p, m) {
let pos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
const p0 = p[pos];
const p1 = p[pos + 1];
p[pos] = p0 * m[0] + p1 * m[2] + m[4];
p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];
}
static applyTransformToBezier(p, transform) {
let pos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
const m0 = transform[0];
const m1 = transform[1];
const m2 = transform[2];
const m3 = transform[3];
const m4 = transform[4];
const m5 = transform[5];
for (let i = 0; i < 6; i += 2) {
const pI = p[pos + i];
const pI1 = p[pos + i + 1];
p[pos + i] = pI * m0 + pI1 * m2 + m4;
p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;
}
}
static applyInverseTransform(p, m) {
const p0 = p[0];
const p1 = p[1];
const d = m[0] * m[3] - m[1] * m[2];
p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
}
static axialAlignedBoundingBox(rect, transform, output) {
const m0 = transform[0];
const m1 = transform[1];
const m2 = transform[2];
const m3 = transform[3];
const m4 = transform[4];
const m5 = transform[5];
const r0 = rect[0];
const r1 = rect[1];
const r2 = rect[2];
const r3 = rect[3];
let a0 = m0 * r0 + m4;
let a2 = a0;
let a1 = m0 * r2 + m4;
let a3 = a1;
let b0 = m3 * r1 + m5;
let b2 = b0;
let b1 = m3 * r3 + m5;
let b3 = b1;
if (m1 !== 0 || m2 !== 0) {
const m1r0 = m1 * r0;
const m1r2 = m1 * r2;
const m2r1 = m2 * r1;
const m2r3 = m2 * r3;
a0 += m2r1;
a3 += m2r1;
a1 += m2r3;
a2 += m2r3;
b0 += m1r0;
b3 += m1r0;
b1 += m1r2;
b2 += m1r2;
}
output[0] = Math.min(output[0], a0, a1, a2, a3);
output[1] = Math.min(output[1], b0, b1, b2, b3);
output[2] = Math.max(output[2], a0, a1, a2, a3);
output[3] = Math.max(output[3], b0, b1, b2, b3);
}
static inverseTransform(m) {
const d = m[0] * m[3] - m[1] * m[2];
return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
}
static singularValueDecompose2dScale(matrix, output) {
const m0 = matrix[0];
const m1 = matrix[1];
const m2 = matrix[2];
const m3 = matrix[3];
const a = m0 ** 2 + m1 ** 2;
const b = m0 * m2 + m1 * m3;
const c = m2 ** 2 + m3 ** 2;
const first = (a + c) / 2;
const second = Math.sqrt(first ** 2 - (a * c - b ** 2));
output[0] = Math.sqrt(first + second || 1);
output[1] = Math.sqrt(first - second || 1);
}
static normalizeRect(rect) {
const r = rect.slice(0);
if (rect[0] > rect[2]) {
r[0] = rect[2];
r[2] = rect[0];
}
if (rect[1] > rect[3]) {
r[1] = rect[3];
r[3] = rect[1];
}
return r;
}
static intersect(rect1, rect2) {
const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2]));
const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2]));
if (xLow > xHigh) {
return null;
}
const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3]));
const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3]));
if (yLow > yHigh) {
return null;
}
return [xLow, yLow, xHigh, yHigh];
}
static pointBoundingBox(x, y, minMax) {
minMax[0] = Math.min(minMax[0], x);
minMax[1] = Math.min(minMax[1], y);
minMax[2] = Math.max(minMax[2], x);
minMax[3] = Math.max(minMax[3], y);
}
static rectBoundingBox(x0, y0, x1, y1, minMax) {
minMax[0] = Math.min(minMax[0], x0, x1);
minMax[1] = Math.min(minMax[1], y0, y1);
minMax[2] = Math.max(minMax[2], x0, x1);
minMax[3] = Math.max(minMax[3], y0, y1);
}
static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {
minMax[0] = Math.min(minMax[0], x0, x3);
minMax[1] = Math.min(minMax[1], y0, y3);
minMax[2] = Math.max(minMax[2], x0, x3);
minMax[3] = Math.max(minMax[3], y0, y3);
_assertClassBrand(Util, this, _getExtremum).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax);
_assertClassBrand(Util, this, _getExtremum).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax);
}
}
_Util = Util;
function _getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {
if (t <= 0 || t >= 1) {
return;
}
const mt = 1 - t;
const tt = t * t;
const ttt = tt * t;
const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;
const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;
minMax[0] = Math.min(minMax[0], x);
minMax[1] = Math.min(minMax[1], y);
minMax[2] = Math.max(minMax[2], x);
minMax[3] = Math.max(minMax[3], y);
}
function _getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {
if (Math.abs(a) < 1e-12) {
if (Math.abs(b) >= 1e-12) {
_assertClassBrand(_Util, this, _getExtremumOnCurve).call(this, x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax);
}
return;
}
const delta = b ** 2 - 4 * c * a;
if (delta < 0) {
return;
}
const sqrtDelta = Math.sqrt(delta);
const a2 = 2 * a;
_assertClassBrand(_Util, this, _getExtremumOnCurve).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax);
_assertClassBrand(_Util, this, _getExtremumOnCurve).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax);
}
const PDFStringTranslateTable = (/* unused pure expression or super */ null && ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]));
function stringToPDFString(str) {
let keepEscapeSequence = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (str[0] >= "\xEF") {
let encoding;
if (str[0] === "\xFE" && str[1] === "\xFF") {
encoding = "utf-16be";
if (str.length % 2 === 1) {
str = str.slice(0, -1);
}
} else if (str[0] === "\xFF" && str[1] === "\xFE") {
encoding = "utf-16le";
if (str.length % 2 === 1) {
str = str.slice(0, -1);
}
} else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") {
encoding = "utf-8";
}
if (encoding) {
try {
const decoder = new TextDecoder(encoding, {
fatal: true
});
const buffer = stringToBytes(str);
const decoded = decoder.decode(buffer);
if (keepEscapeSequence || !decoded.includes("\x1b")) {
return decoded;
}
return decoded.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g, "");
} catch (ex) {
warn(`stringToPDFString: "${ex}".`);
}
}
}
const strBuf = [];
for (let i = 0, ii = str.length; i < ii; i++) {
const charCode = str.charCodeAt(i);
if (!keepEscapeSequence && charCode === 0x1b) {
while (++i < ii && str.charCodeAt(i) !== 0x1b) {}
continue;
}
const code = PDFStringTranslateTable[charCode];
strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
}
return strBuf.join("");
}
function stringToUTF8String(str) {
return decodeURIComponent(escape(str));
}
function utf8StringToString(str) {
return unescape(encodeURIComponent(str));
}
function isArrayEqual(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
for (let i = 0, ii = arr1.length; i < ii; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
function getModificationDate() {
let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();
const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
return buffer.join("");
}
let NormalizeRegex = null;
let NormalizationMap = null;
function normalizeUnicode(str) {
if (!NormalizeRegex) {
NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;
NormalizationMap = new Map([["ſt", "ſt"]]);
}
return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2));
}
function getUuid() {
if (typeof crypto.randomUUID === "function") {
return crypto.randomUUID();
}
const buf = new Uint8Array(32);
crypto.getRandomValues(buf);
return bytesToString(buf);
}
const AnnotationPrefix = "pdfjs_internal_id_";
function _isValidExplicitDest(validRef, validName, dest) {
if (!Array.isArray(dest) || dest.length < 2) {
return false;
}
const [page, zoom, ...args] = dest;
if (!validRef(page) && !Number.isInteger(page)) {
return false;
}
if (!validName(zoom)) {
return false;
}
const argsLen = args.length;
let allowNull = true;
switch (zoom.name) {
case "XYZ":
if (argsLen < 2 || argsLen > 3) {
return false;
}
break;
case "Fit":
case "FitB":
return argsLen === 0;
case "FitH":
case "FitBH":
case "FitV":
case "FitBV":
if (argsLen > 1) {
return false;
}
break;
case "FitR":
if (argsLen !== 4) {
return false;
}
allowNull = false;
break;
default:
return false;
}
for (const arg of args) {
if (typeof arg === "number" || allowNull && arg === null) {
continue;
}
return false;
}
return true;
}
function MathClamp(v, min, max) {
return Math.min(Math.max(v, min), max);
}
function toHexUtil(arr) {
if (Uint8Array.prototype.toHex) {
return arr.toHex();
}
return Array.from(arr, num => hexNumbers[num]).join("");
}
function toBase64Util(arr) {
if (Uint8Array.prototype.toBase64) {
return arr.toBase64();
}
return btoa(bytesToString(arr));
}
function fromBase64Util(str) {
if (Uint8Array.fromBase64) {
return Uint8Array.fromBase64(str);
}
return stringToBytes(atob(str));
}
if (typeof Math.sumPrecise !== "function") {
Math.sumPrecise = function (numbers) {
return numbers.reduce((a, b) => a + b, 0);
};
}
if (typeof AbortSignal.any !== "function") {
AbortSignal.any = function (iterable) {
const ac = new AbortController();
const {
signal
} = ac;
for (const s of iterable) {
if (s.aborted) {
ac.abort(s.reason);
return signal;
}
}
for (const s of iterable) {
s.addEventListener("abort", () => {
ac.abort(s.reason);
}, {
signal
});
}
return signal;
};
}
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.map.js
var es_iterator_map = __webpack_require__(1701);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.promise.with-resolvers.js
var es_promise_with_resolvers = __webpack_require__(4628);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.difference.v2.js
var es_set_difference_v2 = __webpack_require__(7642);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.intersection.v2.js
var es_set_intersection_v2 = __webpack_require__(8004);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js
var es_set_is_disjoint_from_v2 = __webpack_require__(3853);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.is-subset-of.v2.js
var es_set_is_subset_of_v2 = __webpack_require__(5876);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.is-superset-of.v2.js
var es_set_is_superset_of_v2 = __webpack_require__(2475);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.symmetric-difference.v2.js
var es_set_symmetric_difference_v2 = __webpack_require__(5024);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.set.union.v2.js
var es_set_union_v2 = __webpack_require__(1698);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.delete.js
var web_url_search_params_delete = __webpack_require__(4603);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.has.js
var web_url_search_params_has = __webpack_require__(7566);
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url-search-params.size.js
var web_url_search_params_size = __webpack_require__(8721);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.at.js
var es_array_at = __webpack_require__(8107);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.drop.js
var es_iterator_drop = __webpack_require__(9314);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.every.js
var es_iterator_every = __webpack_require__(1148);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.for-each.js
var es_iterator_for_each = __webpack_require__(7588);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.some.js
var es_iterator_some = __webpack_require__(3579);
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.at-alternative.js
var es_string_at_alternative = __webpack_require__(7357);
// EXTERNAL MODULE: ./node_modules/core-js/modules/esnext.json.parse.js
var esnext_json_parse = __webpack_require__(8335);
;// ./src/display/display_utils.js
var _PixelsPerInch;
function display_utils_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function display_utils_defineProperty(e, r, t) { return (r = display_utils_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function display_utils_toPropertyKey(t) { var i = display_utils_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function display_utils_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const SVG_NS = "http://www.w3.org/2000/svg";
class PixelsPerInch {}
_PixelsPerInch = PixelsPerInch;
display_utils_defineProperty(PixelsPerInch, "CSS", 96.0);
display_utils_defineProperty(PixelsPerInch, "PDF", 72.0);
display_utils_defineProperty(PixelsPerInch, "PDF_TO_CSS_UNITS", _PixelsPerInch.CSS / _PixelsPerInch.PDF);
async function fetchData(url) {
let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "text";
if (isValidFetchUrl(url, document.baseURI)) {
const response = await fetch(url);
if (!response.ok) {
throw new Error(response.statusText);
}
switch (type) {
case "arraybuffer":
return response.arrayBuffer();
case "blob":
return response.blob();
case "json":
return response.json();
}
return response.text();
}
return new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = type;
request.onreadystatechange = () => {
if (request.readyState !== XMLHttpRequest.DONE) {
return;
}
if (request.status === 200 || request.status === 0) {
switch (type) {
case "arraybuffer":
case "blob":
case "json":
resolve(request.response);
return;
}
resolve(request.responseText);
return;
}
reject(new Error(request.statusText));
};
request.send(null);
});
}
class PageViewport {
constructor(_ref) {
let {
viewBox,
userUnit,
scale,
rotation,
offsetX = 0,
offsetY = 0,
dontFlip = false
} = _ref;
this.viewBox = viewBox;
this.userUnit = userUnit;
this.scale = scale;
this.rotation = rotation;
this.offsetX = offsetX;
this.offsetY = offsetY;
scale *= userUnit;
const centerX = (viewBox[2] + viewBox[0]) / 2;
const centerY = (viewBox[3] + viewBox[1]) / 2;
let rotateA, rotateB, rotateC, rotateD;
rotation %= 360;
if (rotation < 0) {
rotation += 360;
}
switch (rotation) {
case 180:
rotateA = -1;
rotateB = 0;
rotateC = 0;
rotateD = 1;
break;
case 90:
rotateA = 0;
rotateB = 1;
rotateC = 1;
rotateD = 0;
break;
case 270:
rotateA = 0;
rotateB = -1;
rotateC = -1;
rotateD = 0;
break;
case 0:
rotateA = 1;
rotateB = 0;
rotateC = 0;
rotateD = -1;
break;
default:
throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
}
if (dontFlip) {
rotateC = -rotateC;
rotateD = -rotateD;
}
let offsetCanvasX, offsetCanvasY;
let width, height;
if (rotateA === 0) {
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
width = (viewBox[3] - viewBox[1]) * scale;
height = (viewBox[2] - viewBox[0]) * scale;
} else {
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
width = (viewBox[2] - viewBox[0]) * scale;
height = (viewBox[3] - viewBox[1]) * scale;
}
this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
this.width = width;
this.height = height;
}
get rawDims() {
const dims = this.viewBox;
return shadow(this, "rawDims", {
pageWidth: dims[2] - dims[0],
pageHeight: dims[3] - dims[1],
pageX: dims[0],
pageY: dims[1]
});
}
clone() {
let {
scale = this.scale,
rotation = this.rotation,
offsetX = this.offsetX,
offsetY = this.offsetY,
dontFlip = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return new PageViewport({
viewBox: this.viewBox.slice(),
userUnit: this.userUnit,
scale,
rotation,
offsetX,
offsetY,
dontFlip
});
}
convertToViewportPoint(x, y) {
const p = [x, y];
Util.applyTransform(p, this.transform);
return p;
}
convertToViewportRectangle(rect) {
const topLeft = [rect[0], rect[1]];
Util.applyTransform(topLeft, this.transform);
const bottomRight = [rect[2], rect[3]];
Util.applyTransform(bottomRight, this.transform);
return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
}
convertToPdfPoint(x, y) {
const p = [x, y];
Util.applyInverseTransform(p, this.transform);
return p;
}
}
class RenderingCancelledException extends BaseException {
constructor(msg) {
let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
super(msg, "RenderingCancelledException");
this.extraDelay = extraDelay;
}
}
function isDataScheme(url) {
const ii = url.length;
let i = 0;
while (i < ii && url[i].trim() === "") {
i++;
}
return url.substring(i, i + 5).toLowerCase() === "data:";
}
function isPdfFile(filename) {
return typeof filename === "string" && /\.pdf$/i.test(filename);
}
function getFilenameFromUrl(url) {
[url] = url.split(/[#?]/, 1);
return url.substring(url.lastIndexOf("/") + 1);
}
function display_utils_getPdfFilenameFromUrl(url) {
let defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "document.pdf";
if (defaultFilename && defaultFilename !== "document.pdf") {
return defaultFilename;
}
if (typeof url !== "string") {
return defaultFilename;
}
if (isDataScheme(url)) {
warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
return defaultFilename;
}
const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
const splitURI = reURI.exec(url);
let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
if (suggestedFilename) {
suggestedFilename = suggestedFilename[0];
if (suggestedFilename.includes("%")) {
try {
suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
} catch {}
}
}
return suggestedFilename || defaultFilename;
}
class StatTimer {
constructor() {
display_utils_defineProperty(this, "started", Object.create(null));
display_utils_defineProperty(this, "times", []);
}
time(name) {
if (name in this.started) {
warn(`Timer is already running for ${name}`);
}
this.started[name] = Date.now();
}
timeEnd(name) {
if (!(name in this.started)) {
warn(`Timer has not been started for ${name}`);
}
this.times.push({
name,
start: this.started[name],
end: Date.now()
});
delete this.started[name];
}
toString() {
const outBuf = [];
let longest = 0;
for (const {
name
} of this.times) {
longest = Math.max(name.length, longest);
}
for (const {
name,
start,
end
} of this.times) {
outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`);
}
return outBuf.join("");
}
}
function isValidFetchUrl(url, baseUrl) {
const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);
return res?.protocol === "http:" || res?.protocol === "https:" || res?.protocol === "capacitor:";
}
function noContextMenu(e) {
e.preventDefault();
}
function stopEvent(e) {
e.preventDefault();
e.stopPropagation();
}
function deprecated(details) {
NgxConsole.log("Deprecated API usage: " + details);
}
class PDFDateString {
static toDateObject(input) {
if (!input || typeof input !== "string") {
return null;
}
display_utils_assertClassBrand(PDFDateString, this, _regex)._ || (_regex._ = display_utils_assertClassBrand(PDFDateString, this, new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?")));
const matches = display_utils_assertClassBrand(PDFDateString, this, _regex)._.exec(input);
if (!matches) {
return null;
}
const year = parseInt(matches[1], 10);
let month = parseInt(matches[2], 10);
month = month >= 1 && month <= 12 ? month - 1 : 0;
let day = parseInt(matches[3], 10);
day = day >= 1 && day <= 31 ? day : 1;
let hour = parseInt(matches[4], 10);
hour = hour >= 0 && hour <= 23 ? hour : 0;
let minute = parseInt(matches[5], 10);
minute = minute >= 0 && minute <= 59 ? minute : 0;
let second = parseInt(matches[6], 10);
second = second >= 0 && second <= 59 ? second : 0;
const universalTimeRelation = matches[7] || "Z";
let offsetHour = parseInt(matches[8], 10);
offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
let offsetMinute = parseInt(matches[9], 10) || 0;
offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
if (universalTimeRelation === "-") {
hour += offsetHour;
minute += offsetMinute;
} else if (universalTimeRelation === "+") {
hour -= offsetHour;
minute -= offsetMinute;
}
return new Date(Date.UTC(year, month, day, hour, minute, second));
}
}
var _regex = {
_: void 0
};
function getXfaPageViewport(xfaPage, _ref2) {
let {
scale = 1,
rotation = 0
} = _ref2;
const {
width,
height
} = xfaPage.attributes.style;
const viewBox = [0, 0, parseInt(width), parseInt(height)];
return new PageViewport({
viewBox,
userUnit: 1,
scale,
rotation
});
}
function getRGB(color) {
if (color.startsWith("#")) {
const colorRGB = parseInt(color.slice(1), 16);
return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff];
}
if (color.startsWith("rgb(")) {
return color.slice(4, -1).split(",").map(x => parseInt(x));
}
if (color.startsWith("rgba(")) {
return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3);
}
warn(`Not a valid color format: "${color}"`);
return [0, 0, 0];
}
function getColorValues(colors) {
const span = document.createElement("span");
span.style.visibility = "hidden";
span.style.colorScheme = "only light";
document.body.append(span);
for (const name of colors.keys()) {
span.style.color = name;
const computedColor = window.getComputedStyle(span).color;
colors.set(name, getRGB(computedColor));
}
span.remove();
}
function getCurrentTransform(ctx) {
const {
a,
b,
c,
d,
e,
f
} = ctx.getTransform();
return [a, b, c, d, e, f];
}
function getCurrentTransformInverse(ctx) {
const {
a,
b,
c,
d,
e,
f
} = ctx.getTransform().invertSelf();
return [a, b, c, d, e, f];
}
function setLayerDimensions(div, viewport) {
let mustFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
let mustRotate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
if (viewport instanceof PageViewport) {
const {
pageWidth,
pageHeight
} = viewport.rawDims;
const {
style
} = div;
const useRound = util_FeatureTest.isCSSRoundSupported;
const w = `var(--total-scale-factor) * ${pageWidth}px`,
h = `var(--total-scale-factor) * ${pageHeight}px`;
const widthStr = useRound ? `round(down, ${w}, var(--scale-round-x))` : `calc(${w})`,
heightStr = useRound ? `round(down, ${h}, var(--scale-round-y))` : `calc(${h})`;
if (!mustFlip || viewport.rotation % 180 === 0) {
style.width = widthStr;
style.height = heightStr;
} else {
style.width = heightStr;
style.height = widthStr;
}
}
if (mustRotate) {
div.setAttribute("data-main-rotation", viewport.rotation);
}
}
class OutputScale {
constructor() {
const {
pixelRatio
} = OutputScale;
this.sx = pixelRatio;
this.sy = pixelRatio;
}
get scaled() {
return this.sx !== 1 || this.sy !== 1;
}
get symmetric() {
return this.sx === this.sy;
}
limitCanvas(width, height, maxPixels, maxDim) {
let capAreaFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;
let maxAreaScale = Infinity,
maxWidthScale = Infinity,
maxHeightScale = Infinity;
maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor);
if (maxPixels > 0) {
maxAreaScale = Math.sqrt(maxPixels / (width * height));
}
if (maxDim !== -1) {
maxWidthScale = maxDim / width;
maxHeightScale = maxDim / height;
}
const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);
if (this.sx > maxScale || this.sy > maxScale) {
this.sx = maxScale;
this.sy = maxScale;
return true;
}
return false;
}
static get pixelRatio() {
return globalThis.devicePixelRatio || 1;
}
static capPixels(maxPixels, capAreaFactor) {
if (capAreaFactor >= 0) {
const winPixels = Math.ceil(window.screen.availWidth * window.screen.availHeight * this.pixelRatio ** 2 * (1 + capAreaFactor / 100));
return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;
}
return maxPixels;
}
}
const SupportedImageMimeTypes = ["image/apng", "image/avif", "image/bmp", "image/gif", "image/jpeg", "image/png", "image/svg+xml", "image/webp", "image/x-icon"];
;// ./src/display/editor/toolbar.js
function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function _classPrivateGetter(s, r, a) { return a(toolbar_assertClassBrand(s, r)); }
function _classPrivateFieldGet(s, a) { return s.get(toolbar_assertClassBrand(s, a)); }
function _classPrivateFieldSet(s, a, r) { return s.set(toolbar_assertClassBrand(s, a), r), r; }
function toolbar_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _toolbar = /*#__PURE__*/new WeakMap();
var _colorPicker = /*#__PURE__*/new WeakMap();
var _editor = /*#__PURE__*/new WeakMap();
var _buttons = /*#__PURE__*/new WeakMap();
var _altText = /*#__PURE__*/new WeakMap();
var _signatureDescriptionButton = /*#__PURE__*/new WeakMap();
var _EditorToolbar_brand = /*#__PURE__*/new WeakSet();
class EditorToolbar {
constructor(editor) {
_classPrivateMethodInitSpec(this, _EditorToolbar_brand);
_classPrivateFieldInitSpec(this, _toolbar, null);
_classPrivateFieldInitSpec(this, _colorPicker, null);
_classPrivateFieldInitSpec(this, _editor, void 0);
_classPrivateFieldInitSpec(this, _buttons, null);
_classPrivateFieldInitSpec(this, _altText, null);
_classPrivateFieldInitSpec(this, _signatureDescriptionButton, null);
_classPrivateFieldSet(_editor, this, editor);
_l10nRemove._ || (_l10nRemove._ = Object.freeze({
freetext: "pdfjs-editor-remove-freetext-button",
highlight: "pdfjs-editor-remove-highlight-button",
ink: "pdfjs-editor-remove-ink-button",
stamp: "pdfjs-editor-remove-stamp-button",
signature: "pdfjs-editor-remove-signature-button"
}));
}
render() {
const editToolbar = _classPrivateFieldSet(_toolbar, this, document.createElement("div"));
editToolbar.classList.add("editToolbar", "hidden");
editToolbar.setAttribute("role", "toolbar");
const signal = _classPrivateFieldGet(_editor, this)._uiManager._signal;
editToolbar.addEventListener("contextmenu", noContextMenu, {
signal
});
editToolbar.addEventListener("pointerdown", _pointerDown, {
signal
});
const buttons = _classPrivateFieldSet(_buttons, this, document.createElement("div"));
buttons.className = "buttons";
editToolbar.append(buttons);
const position = _classPrivateFieldGet(_editor, this).toolbarPosition;
if (position) {
const {
style
} = editToolbar;
const x = _classPrivateFieldGet(_editor, this)._uiManager.direction === "ltr" ? 1 - position[0] : position[0];
style.insetInlineEnd = `${100 * x}%`;
style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`;
}
toolbar_assertClassBrand(_EditorToolbar_brand, this, _addDeleteButton).call(this);
return editToolbar;
}
get div() {
return _classPrivateFieldGet(_toolbar, this);
}
hide() {
_classPrivateFieldGet(_toolbar, this).classList.add("hidden");
_classPrivateFieldGet(_colorPicker, this)?.hideDropdown();
}
show() {
_classPrivateFieldGet(_toolbar, this).classList.remove("hidden");
_classPrivateFieldGet(_altText, this)?.shown();
}
async addAltText(altText) {
const button = await altText.render();
toolbar_assertClassBrand(_EditorToolbar_brand, this, _addListenersToElement).call(this, button);
_classPrivateFieldGet(_buttons, this).prepend(button, _classPrivateGetter(_EditorToolbar_brand, this, _get_divider));
_classPrivateFieldSet(_altText, this, altText);
}
addColorPicker(colorPicker) {
_classPrivateFieldSet(_colorPicker, this, colorPicker);
const button = colorPicker.renderButton();
toolbar_assertClassBrand(_EditorToolbar_brand, this, _addListenersToElement).call(this, button);
_classPrivateFieldGet(_buttons, this).prepend(button, _classPrivateGetter(_EditorToolbar_brand, this, _get_divider));
}
async addEditSignatureButton(signatureManager) {
const button = _classPrivateFieldSet(_signatureDescriptionButton, this, await signatureManager.renderEditButton(_classPrivateFieldGet(_editor, this)));
toolbar_assertClassBrand(_EditorToolbar_brand, this, _addListenersToElement).call(this, button);
_classPrivateFieldGet(_buttons, this).prepend(button, _classPrivateGetter(_EditorToolbar_brand, this, _get_divider));
}
updateEditSignatureButton(description) {
if (_classPrivateFieldGet(_signatureDescriptionButton, this)) {
_classPrivateFieldGet(_signatureDescriptionButton, this).title = description;
}
}
remove() {
_classPrivateFieldGet(_toolbar, this).remove();
_classPrivateFieldGet(_colorPicker, this)?.destroy();
_classPrivateFieldSet(_colorPicker, this, null);
}
}
function _pointerDown(e) {
e.stopPropagation();
}
function _focusIn(e) {
_classPrivateFieldGet(_editor, this)._focusEventsAllowed = false;
stopEvent(e);
}
function _focusOut(e) {
_classPrivateFieldGet(_editor, this)._focusEventsAllowed = true;
stopEvent(e);
}
function _addListenersToElement(element) {
const signal = _classPrivateFieldGet(_editor, this)._uiManager._signal;
element.addEventListener("focusin", toolbar_assertClassBrand(_EditorToolbar_brand, this, _focusIn).bind(this), {
capture: true,
signal
});
element.addEventListener("focusout", toolbar_assertClassBrand(_EditorToolbar_brand, this, _focusOut).bind(this), {
capture: true,
signal
});
element.addEventListener("contextmenu", noContextMenu, {
signal
});
}
function _addDeleteButton() {
const {
editorType,
_uiManager
} = _classPrivateFieldGet(_editor, this);
const button = document.createElement("button");
button.className = "delete";
button.tabIndex = 0;
button.setAttribute("data-l10n-id", _l10nRemove._[editorType]);
toolbar_assertClassBrand(_EditorToolbar_brand, this, _addListenersToElement).call(this, button);
button.addEventListener("click", e => {
_uiManager.delete();
}, {
signal: _uiManager._signal
});
_classPrivateFieldGet(_buttons, this).append(button);
}
function _get_divider(_this) {
const divider = document.createElement("div");
divider.className = "divider";
return divider;
}
var _l10nRemove = {
_: null
};
var _buttons2 = /*#__PURE__*/new WeakMap();
var _toolbar2 = /*#__PURE__*/new WeakMap();
var _uiManager2 = /*#__PURE__*/new WeakMap();
var _HighlightToolbar_brand = /*#__PURE__*/new WeakSet();
class HighlightToolbar {
constructor(uiManager) {
_classPrivateMethodInitSpec(this, _HighlightToolbar_brand);
_classPrivateFieldInitSpec(this, _buttons2, null);
_classPrivateFieldInitSpec(this, _toolbar2, null);
_classPrivateFieldInitSpec(this, _uiManager2, void 0);
_classPrivateFieldSet(_uiManager2, this, uiManager);
}
show(parent, boxes, isLTR) {
const [x, y] = toolbar_assertClassBrand(_HighlightToolbar_brand, this, _getLastPoint).call(this, boxes, isLTR);
const {
style
} = _classPrivateFieldGet(_toolbar2, this) || _classPrivateFieldSet(_toolbar2, this, toolbar_assertClassBrand(_HighlightToolbar_brand, this, _render).call(this));
parent.append(_classPrivateFieldGet(_toolbar2, this));
style.insetInlineEnd = `${100 * x}%`;
style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;
}
hide() {
_classPrivateFieldGet(_toolbar2, this).remove();
}
}
function _render() {
const editToolbar = _classPrivateFieldSet(_toolbar2, this, document.createElement("div"));
editToolbar.className = "editToolbar";
editToolbar.setAttribute("role", "toolbar");
editToolbar.addEventListener("contextmenu", noContextMenu, {
signal: _classPrivateFieldGet(_uiManager2, this)._signal
});
const buttons = _classPrivateFieldSet(_buttons2, this, document.createElement("div"));
buttons.className = "buttons";
editToolbar.append(buttons);
toolbar_assertClassBrand(_HighlightToolbar_brand, this, _addHighlightButton).call(this);
return editToolbar;
}
function _getLastPoint(boxes, isLTR) {
let lastY = 0;
let lastX = 0;
for (const box of boxes) {
const y = box.y + box.height;
if (y < lastY) {
continue;
}
const x = box.x + (isLTR ? box.width : 0);
if (y > lastY) {
lastX = x;
lastY = y;
continue;
}
if (isLTR) {
if (x > lastX) {
lastX = x;
}
} else if (x < lastX) {
lastX = x;
}
}
return [isLTR ? 1 - lastX : lastX, lastY];
}
function _addHighlightButton() {
const button = document.createElement("button");
button.className = "highlightButton";
button.tabIndex = 0;
button.setAttribute("data-l10n-id", `pdfjs-highlight-floating-button1`);
const span = document.createElement("span");
button.append(span);
span.className = "visuallyHidden";
span.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button-label");
const signal = _classPrivateFieldGet(_uiManager2, this)._signal;
button.addEventListener("contextmenu", noContextMenu, {
signal
});
button.addEventListener("click", () => {
_classPrivateFieldGet(_uiManager2, this).highlightSelection("floating_button");
}, {
signal
});
_classPrivateFieldGet(_buttons2, this).append(button);
}
;// ./src/display/editor/tools.js
var _ImageManager;
function tools_classPrivateGetter(s, r, a) { return a(tools_assertClassBrand(s, r)); }
function tools_defineProperty(e, r, t) { return (r = tools_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function tools_toPropertyKey(t) { var i = tools_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function tools_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function tools_classPrivateMethodInitSpec(e, a) { tools_checkPrivateRedeclaration(e, a), a.add(e); }
function tools_classPrivateFieldInitSpec(e, t, a) { tools_checkPrivateRedeclaration(e, t), t.set(e, a); }
function tools_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function tools_classPrivateFieldGet(s, a) { return s.get(tools_assertClassBrand(s, a)); }
function tools_classPrivateFieldSet(s, a, r) { return s.set(tools_assertClassBrand(s, a), r), r; }
function tools_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function bindEvents(obj, element, names) {
for (const name of names) {
element.addEventListener(name, obj[name].bind(obj));
}
}
var _id = /*#__PURE__*/new WeakMap();
class IdManager {
constructor() {
tools_classPrivateFieldInitSpec(this, _id, 0);
}
get id() {
var _this$id, _this$id2;
return `${AnnotationEditorPrefix}${tools_classPrivateFieldSet(_id, this, (_this$id = tools_classPrivateFieldGet(_id, this), _this$id2 = _this$id++, _this$id)), _this$id2}`;
}
}
var _baseId = /*#__PURE__*/new WeakMap();
var _id2 = /*#__PURE__*/new WeakMap();
var _cache = /*#__PURE__*/new WeakMap();
var _ImageManager_brand = /*#__PURE__*/new WeakSet();
class ImageManager {
constructor() {
tools_classPrivateMethodInitSpec(this, _ImageManager_brand);
tools_classPrivateFieldInitSpec(this, _baseId, getUuid());
tools_classPrivateFieldInitSpec(this, _id2, 0);
tools_classPrivateFieldInitSpec(this, _cache, null);
}
static get _isSVGFittingCanvas() {
const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>`;
const canvas = new OffscreenCanvas(1, 3);
const ctx = canvas.getContext("2d", {
willReadFrequently: true
});
const image = new Image();
image.src = svg;
const promise = image.decode().then(() => {
ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);
return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;
});
return shadow(this, "_isSVGFittingCanvas", promise);
}
async getFromFile(file) {
const {
lastModified,
name,
size,
type
} = file;
return tools_assertClassBrand(_ImageManager_brand, this, _get).call(this, `${lastModified}_${name}_${size}_${type}`, file);
}
async getFromUrl(url) {
return tools_assertClassBrand(_ImageManager_brand, this, _get).call(this, url, url);
}
async getFromBlob(id, blobPromise) {
const blob = await blobPromise;
return tools_assertClassBrand(_ImageManager_brand, this, _get).call(this, id, blob);
}
async getFromId(id) {
tools_classPrivateFieldGet(_cache, this) || tools_classPrivateFieldSet(_cache, this, new Map());
const data = tools_classPrivateFieldGet(_cache, this).get(id);
if (!data) {
return null;
}
if (data.bitmap) {
data.refCounter += 1;
return data;
}
if (data.file) {
return this.getFromFile(data.file);
}
if (data.blobPromise) {
const {
blobPromise
} = data;
delete data.blobPromise;
return this.getFromBlob(data.id, blobPromise);
}
return this.getFromUrl(data.url);
}
getFromCanvas(id, canvas) {
var _this$id5, _this$id6;
tools_classPrivateFieldGet(_cache, this) || tools_classPrivateFieldSet(_cache, this, new Map());
let data = tools_classPrivateFieldGet(_cache, this).get(id);
if (data?.bitmap) {
data.refCounter += 1;
return data;
}
const offscreen = new OffscreenCanvas(canvas.width, canvas.height);
const ctx = offscreen.getContext("2d");
ctx.drawImage(canvas, 0, 0);
data = {
bitmap: offscreen.transferToImageBitmap(),
id: `image_${tools_classPrivateFieldGet(_baseId, this)}_${tools_classPrivateFieldSet(_id2, this, (_this$id5 = tools_classPrivateFieldGet(_id2, this), _this$id6 = _this$id5++, _this$id5)), _this$id6}`,
refCounter: 1,
isSvg: false
};
tools_classPrivateFieldGet(_cache, this).set(id, data);
tools_classPrivateFieldGet(_cache, this).set(data.id, data);
return data;
}
getSvgUrl(id) {
const data = tools_classPrivateFieldGet(_cache, this).get(id);
if (!data?.isSvg) {
return null;
}
return data.svgUrl;
}
deleteId(id) {
tools_classPrivateFieldGet(_cache, this) || tools_classPrivateFieldSet(_cache, this, new Map());
const data = tools_classPrivateFieldGet(_cache, this).get(id);
if (!data) {
return;
}
data.refCounter -= 1;
if (data.refCounter !== 0) {
return;
}
const {
bitmap
} = data;
if (!data.url && !data.file) {
const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);
const ctx = canvas.getContext("bitmaprenderer");
ctx.transferFromImageBitmap(bitmap);
data.blobPromise = canvas.convertToBlob();
}
bitmap.close?.();
data.bitmap = null;
}
isValidId(id) {
return id.startsWith(`image_${tools_classPrivateFieldGet(_baseId, this)}_`);
}
}
_ImageManager = ImageManager;
async function _get(key, rawData) {
tools_classPrivateFieldGet(_cache, this) || tools_classPrivateFieldSet(_cache, this, new Map());
let data = tools_classPrivateFieldGet(_cache, this).get(key);
if (data === null) {
return null;
}
if (data?.bitmap) {
data.refCounter += 1;
return data;
}
try {
var _this$id3, _this$id4;
data ||= {
bitmap: null,
id: `image_${tools_classPrivateFieldGet(_baseId, this)}_${tools_classPrivateFieldSet(_id2, this, (_this$id3 = tools_classPrivateFieldGet(_id2, this), _this$id4 = _this$id3++, _this$id3)), _this$id4}`,
refCounter: 0,
isSvg: false
};
let image;
if (typeof rawData === "string") {
data.url = rawData;
image = await fetchData(rawData, "blob");
} else if (rawData instanceof File) {
image = data.file = rawData;
} else if (rawData instanceof Blob) {
image = rawData;
}
if (image.type === "image/svg+xml") {
const mustRemoveAspectRatioPromise = _ImageManager._isSVGFittingCanvas;
const fileReader = new FileReader();
const imageElement = new Image();
const imagePromise = new Promise((resolve, reject) => {
imageElement.onload = () => {
data.bitmap = imageElement;
data.isSvg = true;
resolve();
};
fileReader.onload = async () => {
const url = data.svgUrl = fileReader.result;
imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url;
};
imageElement.onerror = fileReader.onerror = reject;
});
fileReader.readAsDataURL(image);
await imagePromise;
} else {
data.bitmap = await createImageBitmap(image);
}
data.refCounter = 1;
} catch (e) {
warn(e);
data = null;
}
tools_classPrivateFieldGet(_cache, this).set(key, data);
if (data) {
tools_classPrivateFieldGet(_cache, this).set(data.id, data);
}
return data;
}
var _commands = /*#__PURE__*/new WeakMap();
var _locked = /*#__PURE__*/new WeakMap();
var _maxSize = /*#__PURE__*/new WeakMap();
var _position = /*#__PURE__*/new WeakMap();
class CommandManager {
constructor() {
let maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 128;
tools_classPrivateFieldInitSpec(this, _commands, []);
tools_classPrivateFieldInitSpec(this, _locked, false);
tools_classPrivateFieldInitSpec(this, _maxSize, void 0);
tools_classPrivateFieldInitSpec(this, _position, -1);
tools_classPrivateFieldSet(_maxSize, this, maxSize);
}
add(_ref) {
let {
cmd,
undo,
post,
mustExec,
type = NaN,
overwriteIfSameType = false,
keepUndo = false
} = _ref;
if (mustExec) {
cmd();
}
if (tools_classPrivateFieldGet(_locked, this)) {
return;
}
const save = {
cmd,
undo,
post,
type
};
if (tools_classPrivateFieldGet(_position, this) === -1) {
if (tools_classPrivateFieldGet(_commands, this).length > 0) {
tools_classPrivateFieldGet(_commands, this).length = 0;
}
tools_classPrivateFieldSet(_position, this, 0);
tools_classPrivateFieldGet(_commands, this).push(save);
return;
}
if (overwriteIfSameType && tools_classPrivateFieldGet(_commands, this)[tools_classPrivateFieldGet(_position, this)].type === type) {
if (keepUndo) {
save.undo = tools_classPrivateFieldGet(_commands, this)[tools_classPrivateFieldGet(_position, this)].undo;
}
tools_classPrivateFieldGet(_commands, this)[tools_classPrivateFieldGet(_position, this)] = save;
return;
}
const next = tools_classPrivateFieldGet(_position, this) + 1;
if (next === tools_classPrivateFieldGet(_maxSize, this)) {
tools_classPrivateFieldGet(_commands, this).splice(0, 1);
} else {
tools_classPrivateFieldSet(_position, this, next);
if (next < tools_classPrivateFieldGet(_commands, this).length) {
tools_classPrivateFieldGet(_commands, this).splice(next);
}
}
tools_classPrivateFieldGet(_commands, this).push(save);
}
undo() {
if (tools_classPrivateFieldGet(_position, this) === -1) {
return;
}
tools_classPrivateFieldSet(_locked, this, true);
const {
undo,
post
} = tools_classPrivateFieldGet(_commands, this)[tools_classPrivateFieldGet(_position, this)];
undo();
post?.();
tools_classPrivateFieldSet(_locked, this, false);
tools_classPrivateFieldSet(_position, this, tools_classPrivateFieldGet(_position, this) - 1);
}
redo() {
if (tools_classPrivateFieldGet(_position, this) < tools_classPrivateFieldGet(_commands, this).length - 1) {
tools_classPrivateFieldSet(_position, this, tools_classPrivateFieldGet(_position, this) + 1);
tools_classPrivateFieldSet(_locked, this, true);
const {
cmd,
post
} = tools_classPrivateFieldGet(_commands, this)[tools_classPrivateFieldGet(_position, this)];
cmd();
post?.();
tools_classPrivateFieldSet(_locked, this, false);
}
}
hasSomethingToUndo() {
return tools_classPrivateFieldGet(_position, this) !== -1;
}
hasSomethingToRedo() {
return tools_classPrivateFieldGet(_position, this) < tools_classPrivateFieldGet(_commands, this).length - 1;
}
cleanType(type) {
if (tools_classPrivateFieldGet(_position, this) === -1) {
return;
}
for (let i = tools_classPrivateFieldGet(_position, this); i >= 0; i--) {
if (tools_classPrivateFieldGet(_commands, this)[i].type !== type) {
tools_classPrivateFieldGet(_commands, this).splice(i + 1, tools_classPrivateFieldGet(_position, this) - i);
tools_classPrivateFieldSet(_position, this, i);
return;
}
}
tools_classPrivateFieldGet(_commands, this).length = 0;
tools_classPrivateFieldSet(_position, this, -1);
}
destroy() {
tools_classPrivateFieldSet(_commands, this, null);
}
reset() {
tools_classPrivateFieldSet(_commands, this, []);
tools_classPrivateFieldSet(_position, this, -1);
tools_classPrivateFieldSet(_locked, this, false);
}
}
var _KeyboardManager_brand = /*#__PURE__*/new WeakSet();
class KeyboardManager {
constructor(callbacks) {
tools_classPrivateMethodInitSpec(this, _KeyboardManager_brand);
this.buffer = [];
this.callbacks = new Map();
this.allKeys = new Set();
const {
isMac
} = util_FeatureTest.platform;
for (const [keys, callback, options = {}] of callbacks) {
for (const key of keys) {
const isMacKey = key.startsWith("mac+");
if (isMac && isMacKey) {
this.callbacks.set(key.slice(4), {
callback,
options
});
this.allKeys.add(key.split("+").at(-1));
} else if (!isMac && !isMacKey) {
this.callbacks.set(key, {
callback,
options
});
this.allKeys.add(key.split("+").at(-1));
}
}
}
}
exec(self, event) {
if (!this.allKeys.has(event.key)) {
return;
}
const info = this.callbacks.get(tools_assertClassBrand(_KeyboardManager_brand, this, _serialize).call(this, event));
if (!info) {
return;
}
const {
callback,
options: {
bubbles = false,
args = [],
checker = null
}
} = info;
if (checker && !checker(self, event)) {
return;
}
callback.bind(self, ...args, event)();
if (!bubbles) {
stopEvent(event);
}
}
}
function _serialize(event) {
if (event.altKey) {
this.buffer.push("alt");
}
if (event.ctrlKey) {
this.buffer.push("ctrl");
}
if (event.metaKey) {
this.buffer.push("meta");
}
if (event.shiftKey) {
this.buffer.push("shift");
}
this.buffer.push(event.key);
const str = this.buffer.join("+");
this.buffer.length = 0;
return str;
}
class ColorManager {
get _colors() {
const colors = new Map([["CanvasText", null], ["Canvas", null]]);
getColorValues(colors);
return shadow(this, "_colors", colors);
}
convert(color) {
const rgb = getRGB(color);
if (!window.matchMedia("(forced-colors: active)").matches) {
return rgb;
}
for (const [name, RGB] of this._colors) {
if (RGB.every((x, i) => x === rgb[i])) {
return ColorManager._colorsMapping.get(name);
}
}
return rgb;
}
getHexCode(name) {
const rgb = this._colors.get(name);
if (!rgb) {
return name;
}
return Util.makeHexColor(...rgb);
}
}
tools_defineProperty(ColorManager, "_colorsMapping", new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]));
var _abortController = /*#__PURE__*/new WeakMap();
var _activeEditor = /*#__PURE__*/new WeakMap();
var _allEditors = /*#__PURE__*/new WeakMap();
var _allLayers = /*#__PURE__*/new WeakMap();
var _altTextManager = /*#__PURE__*/new WeakMap();
var _annotationStorage = /*#__PURE__*/new WeakMap();
var _changedExistingAnnotations = /*#__PURE__*/new WeakMap();
var _commandManager = /*#__PURE__*/new WeakMap();
var _copyPasteAC = /*#__PURE__*/new WeakMap();
var _currentDrawingSession = /*#__PURE__*/new WeakMap();
var _currentPageIndex = /*#__PURE__*/new WeakMap();
var _deletedAnnotationsElementIds = /*#__PURE__*/new WeakMap();
var _draggingEditors = /*#__PURE__*/new WeakMap();
var _editorTypes = /*#__PURE__*/new WeakMap();
var _editorsToRescale = /*#__PURE__*/new WeakMap();
var _enableHighlightFloatingButton = /*#__PURE__*/new WeakMap();
var _enableUpdatedAddImage = /*#__PURE__*/new WeakMap();
var _enableNewAltTextWhenAddingImage = /*#__PURE__*/new WeakMap();
var _filterFactory = /*#__PURE__*/new WeakMap();
var _focusMainContainerTimeoutId = /*#__PURE__*/new WeakMap();
var _focusManagerAC = /*#__PURE__*/new WeakMap();
var _highlightColors = /*#__PURE__*/new WeakMap();
var _highlightWhenShiftUp = /*#__PURE__*/new WeakMap();
var _highlightToolbar = /*#__PURE__*/new WeakMap();
var _idManager = /*#__PURE__*/new WeakMap();
var _isEnabled = /*#__PURE__*/new WeakMap();
var _isWaiting = /*#__PURE__*/new WeakMap();
var _keyboardManagerAC = /*#__PURE__*/new WeakMap();
var _lastActiveElement = /*#__PURE__*/new WeakMap();
var _mainHighlightColorPicker = /*#__PURE__*/new WeakMap();
var _missingCanvases = /*#__PURE__*/new WeakMap();
var _mlManager = /*#__PURE__*/new WeakMap();
var _mode = /*#__PURE__*/new WeakMap();
var _selectedEditors = /*#__PURE__*/new WeakMap();
var _selectedTextNode = /*#__PURE__*/new WeakMap();
var _signatureManager = /*#__PURE__*/new WeakMap();
var _pageColors = /*#__PURE__*/new WeakMap();
var _showAllStates = /*#__PURE__*/new WeakMap();
var _previousStates = /*#__PURE__*/new WeakMap();
var _translation = /*#__PURE__*/new WeakMap();
var _translationTimeoutId = /*#__PURE__*/new WeakMap();
var _container = /*#__PURE__*/new WeakMap();
var _viewer = /*#__PURE__*/new WeakMap();
var _updateModeCapability = /*#__PURE__*/new WeakMap();
var _AnnotationEditorUIManager_brand = /*#__PURE__*/new WeakSet();
class AnnotationEditorUIManager {
static get _keyboardManager() {
const proto = AnnotationEditorUIManager.prototype;
const arrowChecker = self => tools_classPrivateFieldGet(_container, self).contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl();
const textInputChecker = (_self, _ref2) => {
let {
target: el
} = _ref2;
if (el instanceof HTMLInputElement) {
const {
type
} = el;
return type !== "text" && type !== "number";
}
return true;
};
const small = this.TRANSLATE_SMALL;
const big = this.TRANSLATE_BIG;
return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, {
checker: textInputChecker
}], [["ctrl+z", "mac+meta+z"], proto.undo, {
checker: textInputChecker
}], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, {
checker: textInputChecker
}], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, {
checker: textInputChecker
}], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, {
checker: (self, _ref3) => {
let {
target: el
} = _ref3;
return !(el instanceof HTMLButtonElement) && tools_classPrivateFieldGet(_container, self).contains(el) && !self.isEnterHandled;
}
}], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, {
checker: (self, _ref4) => {
let {
target: el
} = _ref4;
return !(el instanceof HTMLButtonElement) && tools_classPrivateFieldGet(_container, self).contains(document.activeElement);
}
}], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, {
args: [-small, 0],
checker: arrowChecker
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, {
args: [-big, 0],
checker: arrowChecker
}], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, {
args: [small, 0],
checker: arrowChecker
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, {
args: [big, 0],
checker: arrowChecker
}], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, {
args: [0, -small],
checker: arrowChecker
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, {
args: [0, -big],
checker: arrowChecker
}], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, {
args: [0, small],
checker: arrowChecker
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, {
args: [0, big],
checker: arrowChecker
}]]));
}
constructor(container, viewer, altTextManager, signatureManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager, editorUndoBar, supportsPinchToZoom) {
tools_classPrivateMethodInitSpec(this, _AnnotationEditorUIManager_brand);
tools_classPrivateFieldInitSpec(this, _abortController, new AbortController());
tools_classPrivateFieldInitSpec(this, _activeEditor, null);
tools_classPrivateFieldInitSpec(this, _allEditors, new Map());
tools_classPrivateFieldInitSpec(this, _allLayers, new Map());
tools_classPrivateFieldInitSpec(this, _altTextManager, null);
tools_classPrivateFieldInitSpec(this, _annotationStorage, null);
tools_classPrivateFieldInitSpec(this, _changedExistingAnnotations, null);
tools_classPrivateFieldInitSpec(this, _commandManager, new CommandManager());
tools_classPrivateFieldInitSpec(this, _copyPasteAC, null);
tools_classPrivateFieldInitSpec(this, _currentDrawingSession, null);
tools_classPrivateFieldInitSpec(this, _currentPageIndex, 0);
tools_classPrivateFieldInitSpec(this, _deletedAnnotationsElementIds, new Set());
tools_classPrivateFieldInitSpec(this, _draggingEditors, null);
tools_classPrivateFieldInitSpec(this, _editorTypes, null);
tools_classPrivateFieldInitSpec(this, _editorsToRescale, new Set());
tools_defineProperty(this, "_editorUndoBar", null);
tools_classPrivateFieldInitSpec(this, _enableHighlightFloatingButton, false);
tools_classPrivateFieldInitSpec(this, _enableUpdatedAddImage, false);
tools_classPrivateFieldInitSpec(this, _enableNewAltTextWhenAddingImage, false);
tools_classPrivateFieldInitSpec(this, _filterFactory, null);
tools_classPrivateFieldInitSpec(this, _focusMainContainerTimeoutId, null);
tools_classPrivateFieldInitSpec(this, _focusManagerAC, null);
tools_classPrivateFieldInitSpec(this, _highlightColors, null);
tools_classPrivateFieldInitSpec(this, _highlightWhenShiftUp, false);
tools_classPrivateFieldInitSpec(this, _highlightToolbar, null);
tools_classPrivateFieldInitSpec(this, _idManager, new IdManager());
tools_classPrivateFieldInitSpec(this, _isEnabled, false);
tools_classPrivateFieldInitSpec(this, _isWaiting, false);
tools_classPrivateFieldInitSpec(this, _keyboardManagerAC, null);
tools_classPrivateFieldInitSpec(this, _lastActiveElement, null);
tools_classPrivateFieldInitSpec(this, _mainHighlightColorPicker, null);
tools_classPrivateFieldInitSpec(this, _missingCanvases, null);
tools_classPrivateFieldInitSpec(this, _mlManager, null);
tools_classPrivateFieldInitSpec(this, _mode, AnnotationEditorType.NONE);
tools_classPrivateFieldInitSpec(this, _selectedEditors, new Set());
tools_classPrivateFieldInitSpec(this, _selectedTextNode, null);
tools_classPrivateFieldInitSpec(this, _signatureManager, null);
tools_classPrivateFieldInitSpec(this, _pageColors, null);
tools_classPrivateFieldInitSpec(this, _showAllStates, null);
tools_classPrivateFieldInitSpec(this, _previousStates, {
isEditing: false,
isEmpty: true,
hasSomethingToUndo: false,
hasSomethingToRedo: false,
hasSelectedEditor: false,
hasSelectedText: false
});
tools_classPrivateFieldInitSpec(this, _translation, [0, 0]);
tools_classPrivateFieldInitSpec(this, _translationTimeoutId, null);
tools_classPrivateFieldInitSpec(this, _container, null);
tools_classPrivateFieldInitSpec(this, _viewer, null);
tools_classPrivateFieldInitSpec(this, _updateModeCapability, null);
const _signal = this._signal = tools_classPrivateFieldGet(_abortController, this).signal;
tools_classPrivateFieldSet(_container, this, container);
tools_classPrivateFieldSet(_viewer, this, viewer);
tools_classPrivateFieldSet(_altTextManager, this, altTextManager);
tools_classPrivateFieldSet(_signatureManager, this, signatureManager);
this._eventBus = eventBus;
eventBus._on("editingaction", this.onEditingAction.bind(this), {
signal: _signal
});
eventBus._on("pagechanging", this.onPageChanging.bind(this), {
signal: _signal
});
eventBus._on("scalechanging", this.onScaleChanging.bind(this), {
signal: _signal
});
eventBus._on("rotationchanging", this.onRotationChanging.bind(this), {
signal: _signal
});
eventBus._on("setpreference", this.onSetPreference.bind(this), {
signal: _signal
});
eventBus._on("switchannotationeditorparams", evt => this.updateParams(evt.type, evt.value), {
signal: _signal
});
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addSelectionListener).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addDragAndDropListeners).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addKeyboardManager).call(this);
tools_classPrivateFieldSet(_annotationStorage, this, pdfDocument.annotationStorage);
tools_classPrivateFieldSet(_filterFactory, this, pdfDocument.filterFactory);
tools_classPrivateFieldSet(_pageColors, this, pageColors);
tools_classPrivateFieldSet(_highlightColors, this, highlightColors || null);
tools_classPrivateFieldSet(_enableHighlightFloatingButton, this, enableHighlightFloatingButton);
tools_classPrivateFieldSet(_enableUpdatedAddImage, this, enableUpdatedAddImage);
tools_classPrivateFieldSet(_enableNewAltTextWhenAddingImage, this, enableNewAltTextWhenAddingImage);
tools_classPrivateFieldSet(_mlManager, this, mlManager || null);
this.viewParameters = {
realScale: PixelsPerInch.PDF_TO_CSS_UNITS,
rotation: 0
};
this.isShiftKeyDown = false;
this._editorUndoBar = editorUndoBar || null;
this._supportsPinchToZoom = supportsPinchToZoom !== false;
}
destroy() {
tools_classPrivateFieldGet(_updateModeCapability, this)?.resolve();
tools_classPrivateFieldSet(_updateModeCapability, this, null);
tools_classPrivateFieldGet(_abortController, this)?.abort();
tools_classPrivateFieldSet(_abortController, this, null);
this._signal = null;
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
layer.destroy();
}
tools_classPrivateFieldGet(_allLayers, this).clear();
tools_classPrivateFieldGet(_allEditors, this).clear();
tools_classPrivateFieldGet(_editorsToRescale, this).clear();
tools_classPrivateFieldGet(_missingCanvases, this)?.clear();
tools_classPrivateFieldSet(_activeEditor, this, null);
tools_classPrivateFieldGet(_selectedEditors, this).clear();
tools_classPrivateFieldGet(_commandManager, this).destroy();
tools_classPrivateFieldGet(_altTextManager, this)?.destroy();
tools_classPrivateFieldGet(_signatureManager, this)?.destroy();
tools_classPrivateFieldGet(_highlightToolbar, this)?.hide();
tools_classPrivateFieldSet(_highlightToolbar, this, null);
tools_classPrivateFieldGet(_mainHighlightColorPicker, this)?.destroy();
tools_classPrivateFieldSet(_mainHighlightColorPicker, this, null);
if (tools_classPrivateFieldGet(_focusMainContainerTimeoutId, this)) {
clearTimeout(tools_classPrivateFieldGet(_focusMainContainerTimeoutId, this));
tools_classPrivateFieldSet(_focusMainContainerTimeoutId, this, null);
}
if (tools_classPrivateFieldGet(_translationTimeoutId, this)) {
clearTimeout(tools_classPrivateFieldGet(_translationTimeoutId, this));
tools_classPrivateFieldSet(_translationTimeoutId, this, null);
}
this._editorUndoBar?.destroy();
}
combinedSignal(ac) {
return AbortSignal.any([this._signal, ac.signal]);
}
get mlManager() {
return tools_classPrivateFieldGet(_mlManager, this);
}
get useNewAltTextFlow() {
return tools_classPrivateFieldGet(_enableUpdatedAddImage, this);
}
get useNewAltTextWhenAddingImage() {
return tools_classPrivateFieldGet(_enableNewAltTextWhenAddingImage, this);
}
get hcmFilter() {
return shadow(this, "hcmFilter", tools_classPrivateFieldGet(_pageColors, this) ? tools_classPrivateFieldGet(_filterFactory, this).addHCMFilter(tools_classPrivateFieldGet(_pageColors, this).foreground, tools_classPrivateFieldGet(_pageColors, this).background) : "none");
}
get direction() {
return shadow(this, "direction", getComputedStyle(tools_classPrivateFieldGet(_container, this)).direction);
}
get highlightColors() {
return shadow(this, "highlightColors", tools_classPrivateFieldGet(_highlightColors, this) ? new Map(tools_classPrivateFieldGet(_highlightColors, this).split(",").map(pair => pair.split("=").map(x => x.trim()))) : null);
}
get highlightColorNames() {
return shadow(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, e => e.reverse())) : null);
}
setCurrentDrawingSession(layer) {
if (layer) {
this.unselectAll();
this.disableUserSelect(true);
} else {
this.disableUserSelect(false);
}
tools_classPrivateFieldSet(_currentDrawingSession, this, layer);
}
setMainHighlightColorPicker(colorPicker) {
tools_classPrivateFieldSet(_mainHighlightColorPicker, this, colorPicker);
}
editAltText(editor) {
let firstTime = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
tools_classPrivateFieldGet(_altTextManager, this)?.editAltText(this, editor, firstTime);
}
getSignature(editor) {
tools_classPrivateFieldGet(_signatureManager, this)?.getSignature({
uiManager: this,
editor
});
}
get signatureManager() {
return tools_classPrivateFieldGet(_signatureManager, this);
}
switchToMode(mode, callback) {
this._eventBus.on("annotationeditormodechanged", callback, {
once: true,
signal: this._signal
});
this._eventBus.dispatch("showannotationeditorui", {
source: this,
mode
});
}
setPreference(name, value) {
this._eventBus.dispatch("setpreference", {
source: this,
name,
value
});
}
onSetPreference(_ref5) {
let {
name,
value
} = _ref5;
switch (name) {
case "enableNewAltTextWhenAddingImage":
tools_classPrivateFieldSet(_enableNewAltTextWhenAddingImage, this, value);
break;
}
}
onPageChanging(_ref6) {
let {
pageNumber
} = _ref6;
tools_classPrivateFieldSet(_currentPageIndex, this, pageNumber - 1);
}
focusMainContainer() {
tools_classPrivateFieldGet(_container, this).focus();
}
findParent(x, y) {
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
const {
x: layerX,
y: layerY,
width,
height
} = layer.div.getBoundingClientRect();
if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) {
return layer;
}
}
return null;
}
disableUserSelect() {
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
tools_classPrivateFieldGet(_viewer, this).classList.toggle("noUserSelect", value);
}
addShouldRescale(editor) {
tools_classPrivateFieldGet(_editorsToRescale, this).add(editor);
}
removeShouldRescale(editor) {
tools_classPrivateFieldGet(_editorsToRescale, this).delete(editor);
}
onScaleChanging(_ref7) {
let {
scale
} = _ref7;
this.commitOrRemove();
this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;
for (const editor of tools_classPrivateFieldGet(_editorsToRescale, this)) {
editor.onScaleChanging();
}
tools_classPrivateFieldGet(_currentDrawingSession, this)?.onScaleChanging();
}
onRotationChanging(_ref8) {
let {
pagesRotation
} = _ref8;
this.commitOrRemove();
this.viewParameters.rotation = pagesRotation;
}
highlightSelection() {
let methodOfCreation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
const selection = document.getSelection();
if (!selection || selection.isCollapsed) {
return;
}
const {
anchorNode,
anchorOffset,
focusNode,
focusOffset
} = selection;
const text = selection.toString();
const anchorElement = tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _getAnchorElementForSelection).call(this, selection);
const textLayer = anchorElement.closest(".textLayer");
const boxes = this.getSelectionBoxes(textLayer);
if (!boxes) {
return;
}
selection.empty();
const layer = tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _getLayerForTextLayer).call(this, textLayer);
const isNoneMode = tools_classPrivateFieldGet(_mode, this) === AnnotationEditorType.NONE;
const callback = () => {
layer?.createAndAddNewEditor({
x: 0,
y: 0
}, false, {
methodOfCreation,
boxes,
anchorNode,
anchorOffset,
focusNode,
focusOffset,
text
});
if (isNoneMode) {
this.showAllEditors("highlight", true, true);
}
};
if (isNoneMode) {
this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);
return;
}
callback();
}
addToAnnotationStorage(editor) {
if (!editor.isEmpty() && tools_classPrivateFieldGet(_annotationStorage, this) && !tools_classPrivateFieldGet(_annotationStorage, this).has(editor.id)) {
tools_classPrivateFieldGet(_annotationStorage, this).setValue(editor.id, editor);
}
}
blur() {
this.isShiftKeyDown = false;
if (tools_classPrivateFieldGet(_highlightWhenShiftUp, this)) {
tools_classPrivateFieldSet(_highlightWhenShiftUp, this, false);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _onSelectEnd).call(this, "main_toolbar");
}
if (!this.hasSelection) {
return;
}
const {
activeElement
} = document;
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
if (editor.div.contains(activeElement)) {
tools_classPrivateFieldSet(_lastActiveElement, this, [editor, activeElement]);
editor._focusEventsAllowed = false;
break;
}
}
}
focus() {
if (!tools_classPrivateFieldGet(_lastActiveElement, this)) {
return;
}
const [lastEditor, lastActiveElement] = tools_classPrivateFieldGet(_lastActiveElement, this);
tools_classPrivateFieldSet(_lastActiveElement, this, null);
lastActiveElement.addEventListener("focusin", () => {
lastEditor._focusEventsAllowed = true;
}, {
once: true,
signal: this._signal
});
lastActiveElement.focus();
}
addEditListeners() {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addKeyboardManager).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addCopyPasteListeners).call(this);
}
removeEditListeners() {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _removeKeyboardManager).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _removeCopyPasteListeners).call(this);
}
dragOver(event) {
for (const {
type
} of event.dataTransfer.items) {
for (const editorType of tools_classPrivateFieldGet(_editorTypes, this)) {
if (editorType.isHandlingMimeForPasting(type)) {
event.dataTransfer.dropEffect = "copy";
event.preventDefault();
return;
}
}
}
}
drop(event) {
for (const item of event.dataTransfer.items) {
for (const editorType of tools_classPrivateFieldGet(_editorTypes, this)) {
if (editorType.isHandlingMimeForPasting(item.type)) {
editorType.paste(item, this.currentLayer);
event.preventDefault();
return;
}
}
}
}
copy(event) {
event.preventDefault();
tools_classPrivateFieldGet(_activeEditor, this)?.commitOrRemove();
if (!this.hasSelection) {
return;
}
const editors = [];
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
const serialized = editor.serialize(true);
if (serialized) {
editors.push(serialized);
}
}
if (editors.length === 0) {
return;
}
event.clipboardData.setData("application/pdfjs", JSON.stringify(editors));
}
cut(event) {
this.copy(event);
this.delete();
}
async paste(event) {
event.preventDefault();
const {
clipboardData
} = event;
for (const item of clipboardData.items) {
for (const editorType of tools_classPrivateFieldGet(_editorTypes, this)) {
if (editorType.isHandlingMimeForPasting(item.type)) {
editorType.paste(item, this.currentLayer);
return;
}
}
}
const data = clipboardData.getData("application/pdfjs");
await this.addSerializedEditor(data);
}
async addSerializedEditor(data) {
let activateEditorIfNecessary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
let doNotMove = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
let ignorePageNumber = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
if (!data) {
return;
}
try {
if (typeof data === "string") {
data = JSON.parse(data);
}
} catch (ex) {
warn(`paste: "${ex.message}".`);
return;
}
if (!Array.isArray(data)) {
return;
}
const previousMode = tools_classPrivateFieldGet(_mode, this);
if (activateEditorIfNecessary && previousMode === AnnotationEditorType.NONE) {
this.updateMode(AnnotationEditorType.FREETEXT);
}
this.unselectAll();
try {
const newEditors = [];
for (const editor of data) {
const pageNumberMissing = editor.pageIndex === undefined;
const useCurrentPage = ignorePageNumber || pageNumberMissing;
const layer = useCurrentPage ? this.currentLayer : this.getLayer(editor.pageIndex);
const deserializedEditor = await layer.deserialize(editor);
if (!deserializedEditor) {
return;
}
deserializedEditor.doNotMove = doNotMove;
newEditors.push(deserializedEditor);
}
const cmd = () => {
for (const editor of newEditors) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addEditorToLayer).call(this, editor);
}
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _selectEditors).call(this, newEditors);
};
const undo = () => {
for (const editor of newEditors) {
editor.remove();
}
};
this.addCommands({
cmd,
undo,
mustExec: true
});
} catch (ex) {
warn(`paste: "${ex.message}".`);
}
if (activateEditorIfNecessary && previousMode !== tools_classPrivateFieldGet(_mode, this)) {
this.updateMode(previousMode);
}
}
keydown(event) {
if (!this.isShiftKeyDown && event.key === "Shift") {
this.isShiftKeyDown = true;
}
if (tools_classPrivateFieldGet(_mode, this) !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) {
AnnotationEditorUIManager._keyboardManager.exec(this, event);
}
}
keyup(event) {
if (this.isShiftKeyDown && event.key === "Shift") {
this.isShiftKeyDown = false;
if (tools_classPrivateFieldGet(_highlightWhenShiftUp, this)) {
tools_classPrivateFieldSet(_highlightWhenShiftUp, this, false);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _onSelectEnd).call(this, "main_toolbar");
}
}
}
onEditingAction(_ref9) {
let {
name
} = _ref9;
switch (name) {
case "undo":
case "redo":
case "delete":
case "selectAll":
this[name]();
break;
case "highlightSelection":
this.highlightSelection("context_menu");
break;
}
}
setEditingState(isEditing) {
if (isEditing) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addFocusManager).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addCopyPasteListeners).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
isEditing: tools_classPrivateFieldGet(_mode, this) !== AnnotationEditorType.NONE,
isEmpty: tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _isEmpty).call(this),
hasSomethingToUndo: tools_classPrivateFieldGet(_commandManager, this).hasSomethingToUndo(),
hasSomethingToRedo: tools_classPrivateFieldGet(_commandManager, this).hasSomethingToRedo(),
hasSelectedEditor: false
});
} else {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _removeFocusManager).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _removeCopyPasteListeners).call(this);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
isEditing: false
});
this.disableUserSelect(false);
}
}
registerEditorTypes(types) {
if (tools_classPrivateFieldGet(_editorTypes, this)) {
return;
}
tools_classPrivateFieldSet(_editorTypes, this, types);
for (const editorType of tools_classPrivateFieldGet(_editorTypes, this)) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, editorType.defaultPropertiesToUpdate);
}
}
getId() {
return tools_classPrivateFieldGet(_idManager, this).id;
}
get currentLayer() {
return tools_classPrivateFieldGet(_allLayers, this).get(tools_classPrivateFieldGet(_currentPageIndex, this));
}
getLayer(pageIndex) {
return tools_classPrivateFieldGet(_allLayers, this).get(pageIndex);
}
get currentPageIndex() {
return tools_classPrivateFieldGet(_currentPageIndex, this);
}
addLayer(layer) {
tools_classPrivateFieldGet(_allLayers, this).set(layer.pageIndex, layer);
if (tools_classPrivateFieldGet(_isEnabled, this)) {
layer.enable();
} else {
layer.disable();
}
}
removeLayer(layer) {
tools_classPrivateFieldGet(_allLayers, this).delete(layer.pageIndex);
}
async updateMode(mode) {
let editId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let isFromKeyboard = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (tools_classPrivateFieldGet(_mode, this) === mode) {
return;
}
if (tools_classPrivateFieldGet(_updateModeCapability, this)) {
await tools_classPrivateFieldGet(_updateModeCapability, this).promise;
if (!tools_classPrivateFieldGet(_updateModeCapability, this)) {
return;
}
}
tools_classPrivateFieldSet(_updateModeCapability, this, Promise.withResolvers());
tools_classPrivateFieldGet(_currentDrawingSession, this)?.commitOrRemove();
tools_classPrivateFieldSet(_mode, this, mode);
if (mode === AnnotationEditorType.NONE) {
this.setEditingState(false);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _disableAll).call(this);
this._editorUndoBar?.hide();
tools_classPrivateFieldGet(_updateModeCapability, this).resolve();
return;
}
if (mode === AnnotationEditorType.SIGNATURE) {
await tools_classPrivateFieldGet(_signatureManager, this)?.loadSignatures();
}
this.setEditingState(true);
await tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _enableAll).call(this);
this.unselectAll();
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
layer.updateMode(mode);
}
if (!editId) {
if (isFromKeyboard) {
this.addNewEditorFromKeyboard();
}
tools_classPrivateFieldGet(_updateModeCapability, this).resolve();
return;
}
for (const editor of tools_classPrivateFieldGet(_allEditors, this).values()) {
if (editor.annotationElementId === editId || editor.id === editId) {
this.setSelected(editor);
editor.enterInEditMode();
} else {
editor.unselect();
}
}
tools_classPrivateFieldGet(_updateModeCapability, this).resolve();
}
addNewEditorFromKeyboard() {
if (this.currentLayer.canCreateNewEmptyEditor()) {
this.currentLayer.addNewEditor();
}
}
updateToolbar(options) {
if (options.mode === tools_classPrivateFieldGet(_mode, this)) {
return;
}
this._eventBus.dispatch("switchannotationeditormode", {
source: this,
...options
});
}
updateParams(type, value) {
if (!tools_classPrivateFieldGet(_editorTypes, this)) {
return;
}
switch (type) {
case AnnotationEditorParamsType.CREATE:
this.currentLayer.addNewEditor(value);
return;
case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:
tools_classPrivateFieldGet(_mainHighlightColorPicker, this)?.updateColor(value);
break;
case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:
this._eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data: {
type: "highlight",
action: "toggle_visibility"
}
}
});
(tools_classPrivateFieldGet(_showAllStates, this) || tools_classPrivateFieldSet(_showAllStates, this, new Map())).set(type, value);
this.showAllEditors("highlight", value);
break;
}
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
editor.updateParams(type, value);
}
for (const editorType of tools_classPrivateFieldGet(_editorTypes, this)) {
editorType.updateDefaultParams(type, value);
}
}
showAllEditors(type, visible) {
let updateButton = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
for (const editor of tools_classPrivateFieldGet(_allEditors, this).values()) {
if (editor.editorType === type) {
editor.show(visible);
}
}
const state = tools_classPrivateFieldGet(_showAllStates, this)?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true;
if (state !== visible) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]);
}
}
enableWaiting() {
let mustWait = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (tools_classPrivateFieldGet(_isWaiting, this) === mustWait) {
return;
}
tools_classPrivateFieldSet(_isWaiting, this, mustWait);
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
if (mustWait) {
layer.disableClick();
} else {
layer.enableClick();
}
layer.div.classList.toggle("waiting", mustWait);
}
}
getEditors(pageIndex) {
const editors = [];
for (const editor of tools_classPrivateFieldGet(_allEditors, this).values()) {
if (editor.pageIndex === pageIndex) {
editors.push(editor);
}
}
return editors;
}
getEditor(id) {
return tools_classPrivateFieldGet(_allEditors, this).get(id);
}
addEditor(editor) {
tools_classPrivateFieldGet(_allEditors, this).set(editor.id, editor);
}
removeEditor(editor) {
if (editor.div.contains(document.activeElement)) {
if (tools_classPrivateFieldGet(_focusMainContainerTimeoutId, this)) {
clearTimeout(tools_classPrivateFieldGet(_focusMainContainerTimeoutId, this));
}
tools_classPrivateFieldSet(_focusMainContainerTimeoutId, this, setTimeout(() => {
this.focusMainContainer();
tools_classPrivateFieldSet(_focusMainContainerTimeoutId, this, null);
}, 0));
}
tools_classPrivateFieldGet(_allEditors, this).delete(editor.id);
if (editor.annotationElementId) {
tools_classPrivateFieldGet(_missingCanvases, this)?.delete(editor.annotationElementId);
}
this.unselect(editor);
if (!editor.annotationElementId || !tools_classPrivateFieldGet(_deletedAnnotationsElementIds, this).has(editor.annotationElementId)) {
tools_classPrivateFieldGet(_annotationStorage, this)?.remove(editor.id);
}
}
addDeletedAnnotationElement(editor) {
tools_classPrivateFieldGet(_deletedAnnotationsElementIds, this).add(editor.annotationElementId);
this.addChangedExistingAnnotation(editor);
editor.deleted = true;
}
isDeletedAnnotationElement(annotationElementId) {
return tools_classPrivateFieldGet(_deletedAnnotationsElementIds, this).has(annotationElementId);
}
removeDeletedAnnotationElement(editor) {
tools_classPrivateFieldGet(_deletedAnnotationsElementIds, this).delete(editor.annotationElementId);
this.removeChangedExistingAnnotation(editor);
editor.deleted = false;
}
setActiveEditor(editor) {
if (tools_classPrivateFieldGet(_activeEditor, this) === editor) {
return;
}
tools_classPrivateFieldSet(_activeEditor, this, editor);
if (editor) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, editor.propertiesToUpdate);
}
}
updateUI(editor) {
if (tools_classPrivateGetter(_AnnotationEditorUIManager_brand, this, _get_lastSelectedEditor) === editor) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, editor.propertiesToUpdate);
}
}
updateUIForDefaultProperties(editorType) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, editorType.defaultPropertiesToUpdate);
}
toggleSelected(editor) {
if (tools_classPrivateFieldGet(_selectedEditors, this).has(editor)) {
tools_classPrivateFieldGet(_selectedEditors, this).delete(editor);
editor.unselect();
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedEditor: this.hasSelection
});
return;
}
tools_classPrivateFieldGet(_selectedEditors, this).add(editor);
editor.select();
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, editor.propertiesToUpdate);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedEditor: true
});
}
setSelected(editor) {
tools_classPrivateFieldGet(_currentDrawingSession, this)?.commitOrRemove();
for (const ed of tools_classPrivateFieldGet(_selectedEditors, this)) {
if (ed !== editor) {
ed.unselect();
}
}
tools_classPrivateFieldGet(_selectedEditors, this).clear();
tools_classPrivateFieldGet(_selectedEditors, this).add(editor);
editor.select();
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, editor.propertiesToUpdate);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedEditor: true
});
}
isSelected(editor) {
return tools_classPrivateFieldGet(_selectedEditors, this).has(editor);
}
get firstSelectedEditor() {
return tools_classPrivateFieldGet(_selectedEditors, this).values().next().value;
}
unselect(editor) {
editor.unselect();
tools_classPrivateFieldGet(_selectedEditors, this).delete(editor);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedEditor: this.hasSelection
});
}
get hasSelection() {
return tools_classPrivateFieldGet(_selectedEditors, this).size !== 0;
}
get isEnterHandled() {
return tools_classPrivateFieldGet(_selectedEditors, this).size === 1 && this.firstSelectedEditor.isEnterHandled;
}
undo() {
tools_classPrivateFieldGet(_commandManager, this).undo();
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSomethingToUndo: tools_classPrivateFieldGet(_commandManager, this).hasSomethingToUndo(),
hasSomethingToRedo: true,
isEmpty: tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _isEmpty).call(this)
});
this._editorUndoBar?.hide();
}
redo() {
tools_classPrivateFieldGet(_commandManager, this).redo();
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSomethingToUndo: true,
hasSomethingToRedo: tools_classPrivateFieldGet(_commandManager, this).hasSomethingToRedo(),
isEmpty: tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _isEmpty).call(this)
});
}
addCommands(params) {
tools_classPrivateFieldGet(_commandManager, this).add(params);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSomethingToUndo: true,
hasSomethingToRedo: false,
isEmpty: tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _isEmpty).call(this)
});
}
cleanUndoStack(type) {
tools_classPrivateFieldGet(_commandManager, this).cleanType(type);
}
delete() {
this.commitOrRemove();
const drawingEditor = this.currentLayer?.endDrawingSession(true);
if (!this.hasSelection && !drawingEditor) {
return;
}
const editors = drawingEditor ? [drawingEditor] : [...tools_classPrivateFieldGet(_selectedEditors, this)];
const cmd = () => {
this._editorUndoBar?.show(undo, editors.length === 1 ? editors[0].editorType : editors.length);
for (const editor of editors) {
editor.remove();
}
};
const undo = () => {
for (const editor of editors) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _addEditorToLayer).call(this, editor);
}
};
this.addCommands({
cmd,
undo,
mustExec: true
});
}
commitOrRemove() {
tools_classPrivateFieldGet(_activeEditor, this)?.commitOrRemove();
}
hasSomethingToControl() {
return tools_classPrivateFieldGet(_activeEditor, this) || this.hasSelection;
}
selectAll() {
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
editor.commit();
}
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _selectEditors).call(this, tools_classPrivateFieldGet(_allEditors, this).values());
}
unselectAll() {
if (tools_classPrivateFieldGet(_activeEditor, this)) {
tools_classPrivateFieldGet(_activeEditor, this).commitOrRemove();
if (tools_classPrivateFieldGet(_mode, this) !== AnnotationEditorType.NONE) {
return;
}
}
if (tools_classPrivateFieldGet(_currentDrawingSession, this)?.commitOrRemove()) {
return;
}
if (!this.hasSelection) {
return;
}
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
editor.unselect();
}
tools_classPrivateFieldGet(_selectedEditors, this).clear();
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedEditor: false
});
}
translateSelectedEditors(x, y) {
let noCommit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (!noCommit) {
this.commitOrRemove();
}
if (!this.hasSelection) {
return;
}
tools_classPrivateFieldGet(_translation, this)[0] += x;
tools_classPrivateFieldGet(_translation, this)[1] += y;
const [totalX, totalY] = tools_classPrivateFieldGet(_translation, this);
const editors = [...tools_classPrivateFieldGet(_selectedEditors, this)];
const TIME_TO_WAIT = 1000;
if (tools_classPrivateFieldGet(_translationTimeoutId, this)) {
clearTimeout(tools_classPrivateFieldGet(_translationTimeoutId, this));
}
tools_classPrivateFieldSet(_translationTimeoutId, this, setTimeout(() => {
tools_classPrivateFieldSet(_translationTimeoutId, this, null);
tools_classPrivateFieldGet(_translation, this)[0] = tools_classPrivateFieldGet(_translation, this)[1] = 0;
this.addCommands({
cmd: () => {
for (const editor of editors) {
if (tools_classPrivateFieldGet(_allEditors, this).has(editor.id)) {
editor.translateInPage(totalX, totalY);
editor.translationDone();
}
}
},
undo: () => {
for (const editor of editors) {
if (tools_classPrivateFieldGet(_allEditors, this).has(editor.id)) {
editor.translateInPage(-totalX, -totalY);
editor.translationDone();
}
}
},
mustExec: false
});
}, TIME_TO_WAIT));
for (const editor of editors) {
editor.translateInPage(x, y);
editor.translationDone();
}
}
setUpDragSession() {
if (!this.hasSelection) {
return;
}
this.disableUserSelect(true);
tools_classPrivateFieldSet(_draggingEditors, this, new Map());
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
tools_classPrivateFieldGet(_draggingEditors, this).set(editor, {
savedX: editor.x,
savedY: editor.y,
savedPageIndex: editor.pageIndex,
newX: 0,
newY: 0,
newPageIndex: -1
});
}
}
endDragSession() {
if (!tools_classPrivateFieldGet(_draggingEditors, this)) {
return false;
}
this.disableUserSelect(false);
const map = tools_classPrivateFieldGet(_draggingEditors, this);
tools_classPrivateFieldSet(_draggingEditors, this, null);
let mustBeAddedInUndoStack = false;
for (const [{
x,
y,
pageIndex
}, value] of map) {
value.newX = x;
value.newY = y;
value.newPageIndex = pageIndex;
mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex;
}
if (!mustBeAddedInUndoStack) {
return false;
}
const move = (editor, x, y, pageIndex) => {
if (tools_classPrivateFieldGet(_allEditors, this).has(editor.id)) {
const parent = tools_classPrivateFieldGet(_allLayers, this).get(pageIndex);
if (parent) {
editor._setParentAndPosition(parent, x, y);
} else {
editor.pageIndex = pageIndex;
editor.x = x;
editor.y = y;
}
}
};
this.addCommands({
cmd: () => {
for (const [editor, {
newX,
newY,
newPageIndex,
savedX,
savedY,
savedPageIndex
}] of map) {
move(editor, newX, newY, newPageIndex);
this._eventBus?.dispatch("annotation-editor-event", {
source: editor,
type: "moved",
page: newPageIndex + 1,
editorType: editor.constructor.name,
previousValue: {
x: savedX,
y: savedY,
page: savedPageIndex + 1
},
value: {
x: newX,
y: newY,
page: newPageIndex + 1
}
});
}
},
undo: () => {
for (const [editor, {
savedX,
savedY,
savedPageIndex
}] of map) {
move(editor, savedX, savedY, savedPageIndex);
}
},
mustExec: true
});
return true;
}
dragSelectedEditors(tx, ty) {
if (!tools_classPrivateFieldGet(_draggingEditors, this)) {
return;
}
for (const editor of tools_classPrivateFieldGet(_draggingEditors, this).keys()) {
editor.drag(tx, ty);
}
}
rebuild(editor) {
if (editor.parent === null) {
const parent = this.getLayer(editor.pageIndex);
if (parent) {
parent.changeParent(editor);
parent.addOrRebuild(editor);
} else {
this.addEditor(editor);
this.addToAnnotationStorage(editor);
editor.rebuild();
}
} else {
editor.parent.addOrRebuild(editor);
}
}
get isEditorHandlingKeyboard() {
return this.getActive()?.shouldGetKeyboardEvents() || tools_classPrivateFieldGet(_selectedEditors, this).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();
}
isActive(editor) {
return tools_classPrivateFieldGet(_activeEditor, this) === editor;
}
getActive() {
return tools_classPrivateFieldGet(_activeEditor, this);
}
getMode() {
return tools_classPrivateFieldGet(_mode, this);
}
get imageManager() {
return shadow(this, "imageManager", new ImageManager());
}
removeEditors() {
let filterFunction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => true;
let hasChanged = false;
tools_classPrivateFieldGet(_allEditors, this).forEach(editor => {
if (editor?.serialize()) {
if (filterFunction(editor.serialize())) {
editor.remove();
hasChanged = true;
}
}
});
if (hasChanged) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSomethingToUndo: false,
hasSomethingToRedo: false,
isEmpty: tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _isEmpty).call(this)
});
tools_classPrivateFieldGet(_commandManager, this).reset();
}
}
getSelectionBoxes(textLayer) {
if (!textLayer) {
return null;
}
const selection = document.getSelection();
for (let i = 0, ii = selection.rangeCount; i < ii; i++) {
if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) {
return null;
}
}
const {
x: layerX,
y: layerY,
width: parentWidth,
height: parentHeight
} = textLayer.getBoundingClientRect();
let rotator;
switch (textLayer.getAttribute("data-main-rotation")) {
case "90":
rotator = (x, y, w, h) => ({
x: (y - layerY) / parentHeight,
y: 1 - (x + w - layerX) / parentWidth,
width: h / parentHeight,
height: w / parentWidth
});
break;
case "180":
rotator = (x, y, w, h) => ({
x: 1 - (x + w - layerX) / parentWidth,
y: 1 - (y + h - layerY) / parentHeight,
width: w / parentWidth,
height: h / parentHeight
});
break;
case "270":
rotator = (x, y, w, h) => ({
x: 1 - (y + h - layerY) / parentHeight,
y: (x - layerX) / parentWidth,
width: h / parentHeight,
height: w / parentWidth
});
break;
default:
rotator = (x, y, w, h) => ({
x: (x - layerX) / parentWidth,
y: (y - layerY) / parentHeight,
width: w / parentWidth,
height: h / parentHeight
});
break;
}
const boxes = [];
for (let i = 0, ii = selection.rangeCount; i < ii; i++) {
const range = selection.getRangeAt(i);
if (range.collapsed) {
continue;
}
for (const {
x,
y,
width,
height
} of range.getClientRects()) {
if (width === 0 || height === 0) {
continue;
}
boxes.push(rotator(x, y, width, height));
}
}
return boxes.length === 0 ? null : boxes;
}
addChangedExistingAnnotation(_ref0) {
let {
annotationElementId,
id
} = _ref0;
(tools_classPrivateFieldGet(_changedExistingAnnotations, this) || tools_classPrivateFieldSet(_changedExistingAnnotations, this, new Map())).set(annotationElementId, id);
}
removeChangedExistingAnnotation(_ref1) {
let {
annotationElementId
} = _ref1;
tools_classPrivateFieldGet(_changedExistingAnnotations, this)?.delete(annotationElementId);
}
renderAnnotationElement(annotation) {
const editorId = tools_classPrivateFieldGet(_changedExistingAnnotations, this)?.get(annotation.data.id);
if (!editorId) {
return;
}
const editor = tools_classPrivateFieldGet(_annotationStorage, this).getRawValue(editorId);
if (!editor) {
return;
}
if (tools_classPrivateFieldGet(_mode, this) === AnnotationEditorType.NONE && !editor.hasBeenModified) {
return;
}
editor.renderAnnotationElement(annotation);
}
setMissingCanvas(annotationId, annotationElementId, canvas) {
const editor = tools_classPrivateFieldGet(_missingCanvases, this)?.get(annotationId);
if (!editor) {
return;
}
editor.setCanvas(annotationElementId, canvas);
tools_classPrivateFieldGet(_missingCanvases, this).delete(annotationId);
}
addMissingCanvas(annotationId, editor) {
(tools_classPrivateFieldGet(_missingCanvases, this) || tools_classPrivateFieldSet(_missingCanvases, this, new Map())).set(annotationId, editor);
}
}
function _getAnchorElementForSelection(_ref10) {
let {
anchorNode
} = _ref10;
return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode;
}
function _getLayerForTextLayer(textLayer) {
const {
currentLayer
} = this;
if (currentLayer.hasTextLayer(textLayer)) {
return currentLayer;
}
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
if (layer.hasTextLayer(textLayer)) {
return layer;
}
}
return null;
}
function _displayHighlightToolbar() {
const selection = document.getSelection();
if (!selection || selection.isCollapsed) {
return;
}
const anchorElement = tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _getAnchorElementForSelection).call(this, selection);
const textLayer = anchorElement.closest(".textLayer");
const boxes = this.getSelectionBoxes(textLayer);
if (!boxes) {
return;
}
tools_classPrivateFieldGet(_highlightToolbar, this) || tools_classPrivateFieldSet(_highlightToolbar, this, new HighlightToolbar(this));
tools_classPrivateFieldGet(_highlightToolbar, this).show(textLayer, boxes, this.direction === "ltr");
}
function _selectionChange() {
const selection = document.getSelection();
if (!selection || selection.isCollapsed) {
if (tools_classPrivateFieldGet(_selectedTextNode, this)) {
tools_classPrivateFieldGet(_highlightToolbar, this)?.hide();
tools_classPrivateFieldSet(_selectedTextNode, this, null);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedText: false
});
}
return;
}
const {
anchorNode
} = selection;
if (anchorNode === tools_classPrivateFieldGet(_selectedTextNode, this)) {
return;
}
const anchorElement = tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _getAnchorElementForSelection).call(this, selection);
const textLayer = anchorElement.closest(".textLayer");
if (!textLayer) {
if (tools_classPrivateFieldGet(_selectedTextNode, this)) {
tools_classPrivateFieldGet(_highlightToolbar, this)?.hide();
tools_classPrivateFieldSet(_selectedTextNode, this, null);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedText: false
});
}
return;
}
tools_classPrivateFieldGet(_highlightToolbar, this)?.hide();
tools_classPrivateFieldSet(_selectedTextNode, this, anchorNode);
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedText: true
});
if (tools_classPrivateFieldGet(_mode, this) !== AnnotationEditorType.HIGHLIGHT && tools_classPrivateFieldGet(_mode, this) !== AnnotationEditorType.NONE) {
return;
}
if (tools_classPrivateFieldGet(_mode, this) === AnnotationEditorType.HIGHLIGHT) {
this.showAllEditors("highlight", true, true);
}
tools_classPrivateFieldSet(_highlightWhenShiftUp, this, this.isShiftKeyDown);
if (!this.isShiftKeyDown) {
const activeLayer = tools_classPrivateFieldGet(_mode, this) === AnnotationEditorType.HIGHLIGHT ? tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _getLayerForTextLayer).call(this, textLayer) : null;
activeLayer?.toggleDrawing();
const ac = new AbortController();
const signal = this.combinedSignal(ac);
const pointerup = e => {
if (e.type === "pointerup" && e.button !== 0) {
return;
}
ac.abort();
activeLayer?.toggleDrawing(true);
if (e.type === "pointerup") {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _onSelectEnd).call(this, "main_toolbar");
}
};
window.addEventListener("pointerup", pointerup, {
signal
});
window.addEventListener("blur", pointerup, {
signal
});
}
}
function _onSelectEnd() {
let methodOfCreation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
if (tools_classPrivateFieldGet(_mode, this) === AnnotationEditorType.HIGHLIGHT) {
this.highlightSelection(methodOfCreation);
} else if (tools_classPrivateFieldGet(_enableHighlightFloatingButton, this)) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _displayHighlightToolbar).call(this);
}
}
function _addSelectionListener() {
document.addEventListener("selectionchange", tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _selectionChange).bind(this), {
signal: this._signal
});
}
function _addFocusManager() {
if (tools_classPrivateFieldGet(_focusManagerAC, this)) {
return;
}
tools_classPrivateFieldSet(_focusManagerAC, this, new AbortController());
const signal = this.combinedSignal(tools_classPrivateFieldGet(_focusManagerAC, this));
window.addEventListener("focus", this.focus.bind(this), {
signal
});
window.addEventListener("blur", this.blur.bind(this), {
signal
});
}
function _removeFocusManager() {
tools_classPrivateFieldGet(_focusManagerAC, this)?.abort();
tools_classPrivateFieldSet(_focusManagerAC, this, null);
}
function _addKeyboardManager() {
if (tools_classPrivateFieldGet(_keyboardManagerAC, this)) {
return;
}
tools_classPrivateFieldSet(_keyboardManagerAC, this, new AbortController());
const signal = this.combinedSignal(tools_classPrivateFieldGet(_keyboardManagerAC, this));
window.addEventListener("keydown", this.keydown.bind(this), {
signal
});
window.addEventListener("keyup", this.keyup.bind(this), {
signal
});
}
function _removeKeyboardManager() {
tools_classPrivateFieldGet(_keyboardManagerAC, this)?.abort();
tools_classPrivateFieldSet(_keyboardManagerAC, this, null);
}
function _addCopyPasteListeners() {
if (tools_classPrivateFieldGet(_copyPasteAC, this)) {
return;
}
tools_classPrivateFieldSet(_copyPasteAC, this, new AbortController());
const signal = this.combinedSignal(tools_classPrivateFieldGet(_copyPasteAC, this));
document.addEventListener("copy", this.copy.bind(this), {
signal
});
document.addEventListener("cut", this.cut.bind(this), {
signal
});
document.addEventListener("paste", this.paste.bind(this), {
signal
});
}
function _removeCopyPasteListeners() {
tools_classPrivateFieldGet(_copyPasteAC, this)?.abort();
tools_classPrivateFieldSet(_copyPasteAC, this, null);
}
function _addDragAndDropListeners() {
const signal = this._signal;
document.addEventListener("dragover", this.dragOver.bind(this), {
signal
});
document.addEventListener("drop", this.drop.bind(this), {
signal
});
}
function _dispatchUpdateStates(details) {
const hasChanged = Object.entries(details).some(_ref11 => {
let [key, value] = _ref11;
return tools_classPrivateFieldGet(_previousStates, this)[key] !== value;
});
if (hasChanged) {
this._eventBus.dispatch("annotationeditorstateschanged", {
source: this,
details: Object.assign(tools_classPrivateFieldGet(_previousStates, this), details)
});
if (tools_classPrivateFieldGet(_mode, this) === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) {
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateUI).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]);
}
}
}
function _dispatchUpdateUI(details) {
this._eventBus.dispatch("annotationeditorparamschanged", {
source: this,
details
});
}
async function _enableAll() {
if (!tools_classPrivateFieldGet(_isEnabled, this)) {
tools_classPrivateFieldSet(_isEnabled, this, true);
const promises = [];
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
promises.push(layer.enable());
}
await Promise.all(promises);
for (const editor of tools_classPrivateFieldGet(_allEditors, this).values()) {
editor.enable();
}
}
}
function _disableAll() {
this.unselectAll();
if (tools_classPrivateFieldGet(_isEnabled, this)) {
tools_classPrivateFieldSet(_isEnabled, this, false);
for (const layer of tools_classPrivateFieldGet(_allLayers, this).values()) {
layer.disable();
}
for (const editor of tools_classPrivateFieldGet(_allEditors, this).values()) {
editor.disable();
}
}
}
function _addEditorToLayer(editor) {
const layer = tools_classPrivateFieldGet(_allLayers, this).get(editor.pageIndex);
if (layer) {
layer.addOrRebuild(editor);
} else {
this.addEditor(editor);
this.addToAnnotationStorage(editor);
}
}
function _get_lastSelectedEditor(_this) {
let ed = null;
for (ed of tools_classPrivateFieldGet(_selectedEditors, _this)) {}
return ed;
}
function _isEmpty() {
if (tools_classPrivateFieldGet(_allEditors, this).size === 0) {
return true;
}
if (tools_classPrivateFieldGet(_allEditors, this).size === 1) {
for (const editor of tools_classPrivateFieldGet(_allEditors, this).values()) {
return editor.isEmpty();
}
}
return false;
}
function _selectEditors(editors) {
for (const editor of tools_classPrivateFieldGet(_selectedEditors, this)) {
editor.unselect();
}
tools_classPrivateFieldGet(_selectedEditors, this).clear();
for (const editor of editors) {
if (editor.isEmpty()) {
continue;
}
tools_classPrivateFieldGet(_selectedEditors, this).add(editor);
editor.select();
}
tools_assertClassBrand(_AnnotationEditorUIManager_brand, this, _dispatchUpdateStates).call(this, {
hasSelectedEditor: this.hasSelection
});
}
tools_defineProperty(AnnotationEditorUIManager, "TRANSLATE_SMALL", 1);
tools_defineProperty(AnnotationEditorUIManager, "TRANSLATE_BIG", 10);
;// ./src/display/editor/alt_text.js
function alt_text_classPrivateMethodInitSpec(e, a) { alt_text_checkPrivateRedeclaration(e, a), a.add(e); }
function alt_text_defineProperty(e, r, t) { return (r = alt_text_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function alt_text_toPropertyKey(t) { var i = alt_text_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function alt_text_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function alt_text_classPrivateFieldInitSpec(e, t, a) { alt_text_checkPrivateRedeclaration(e, t), t.set(e, a); }
function alt_text_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function alt_text_classPrivateGetter(s, r, a) { return a(alt_text_assertClassBrand(s, r)); }
function alt_text_classPrivateFieldGet(s, a) { return s.get(alt_text_assertClassBrand(s, a)); }
function alt_text_classPrivateFieldSet(s, a, r) { return s.set(alt_text_assertClassBrand(s, a), r), r; }
function alt_text_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var alt_text_altText = /*#__PURE__*/new WeakMap();
var _altTextDecorative = /*#__PURE__*/new WeakMap();
var _altTextButton = /*#__PURE__*/new WeakMap();
var _altTextButtonLabel = /*#__PURE__*/new WeakMap();
var _altTextTooltip = /*#__PURE__*/new WeakMap();
var _altTextTooltipTimeout = /*#__PURE__*/new WeakMap();
var _altTextWasFromKeyBoard = /*#__PURE__*/new WeakMap();
var _badge = /*#__PURE__*/new WeakMap();
var alt_text_editor = /*#__PURE__*/new WeakMap();
var _guessedText = /*#__PURE__*/new WeakMap();
var _textWithDisclaimer = /*#__PURE__*/new WeakMap();
var _useNewAltTextFlow = /*#__PURE__*/new WeakMap();
var _AltText_brand = /*#__PURE__*/new WeakSet();
class AltText {
constructor(editor) {
alt_text_classPrivateMethodInitSpec(this, _AltText_brand);
alt_text_classPrivateFieldInitSpec(this, alt_text_altText, null);
alt_text_classPrivateFieldInitSpec(this, _altTextDecorative, false);
alt_text_classPrivateFieldInitSpec(this, _altTextButton, null);
alt_text_classPrivateFieldInitSpec(this, _altTextButtonLabel, null);
alt_text_classPrivateFieldInitSpec(this, _altTextTooltip, null);
alt_text_classPrivateFieldInitSpec(this, _altTextTooltipTimeout, null);
alt_text_classPrivateFieldInitSpec(this, _altTextWasFromKeyBoard, false);
alt_text_classPrivateFieldInitSpec(this, _badge, null);
alt_text_classPrivateFieldInitSpec(this, alt_text_editor, null);
alt_text_classPrivateFieldInitSpec(this, _guessedText, null);
alt_text_classPrivateFieldInitSpec(this, _textWithDisclaimer, null);
alt_text_classPrivateFieldInitSpec(this, _useNewAltTextFlow, false);
alt_text_classPrivateFieldSet(alt_text_editor, this, editor);
alt_text_classPrivateFieldSet(_useNewAltTextFlow, this, editor._uiManager.useNewAltTextFlow);
_l10nNewButton._ || (_l10nNewButton._ = Object.freeze({
added: "pdfjs-editor-new-alt-text-added-button",
"added-label": "pdfjs-editor-new-alt-text-added-button-label",
missing: "pdfjs-editor-new-alt-text-missing-button",
"missing-label": "pdfjs-editor-new-alt-text-missing-button-label",
review: "pdfjs-editor-new-alt-text-to-review-button",
"review-label": "pdfjs-editor-new-alt-text-to-review-button-label"
}));
}
static initialize(l10n) {
AltText._l10n ??= l10n;
}
async render() {
const altText = alt_text_classPrivateFieldSet(_altTextButton, this, document.createElement("button"));
altText.className = "altText";
altText.tabIndex = "0";
const label = alt_text_classPrivateFieldSet(_altTextButtonLabel, this, document.createElement("span"));
altText.append(label);
if (alt_text_classPrivateFieldGet(_useNewAltTextFlow, this)) {
altText.classList.add("new");
altText.setAttribute("data-l10n-id", _l10nNewButton._.missing);
label.setAttribute("data-l10n-id", _l10nNewButton._["missing-label"]);
} else {
altText.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button");
label.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button-label");
}
const signal = alt_text_classPrivateFieldGet(alt_text_editor, this)._uiManager._signal;
altText.addEventListener("contextmenu", noContextMenu, {
signal
});
altText.addEventListener("pointerdown", event => event.stopPropagation(), {
signal
});
const onClick = event => {
event.preventDefault();
alt_text_classPrivateFieldGet(alt_text_editor, this)._uiManager.editAltText(alt_text_classPrivateFieldGet(alt_text_editor, this));
if (alt_text_classPrivateFieldGet(_useNewAltTextFlow, this)) {
alt_text_classPrivateFieldGet(alt_text_editor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.image_status_label_clicked",
data: {
label: alt_text_classPrivateGetter(_AltText_brand, this, _get_label)
}
});
}
};
altText.addEventListener("click", onClick, {
capture: true,
signal
});
altText.addEventListener("keydown", event => {
if (event.target === altText && event.key === "Enter") {
alt_text_classPrivateFieldSet(_altTextWasFromKeyBoard, this, true);
onClick(event);
}
}, {
signal
});
await alt_text_assertClassBrand(_AltText_brand, this, _setState).call(this);
return altText;
}
finish() {
if (!alt_text_classPrivateFieldGet(_altTextButton, this)) {
return;
}
alt_text_classPrivateFieldGet(_altTextButton, this).focus({
focusVisible: alt_text_classPrivateFieldGet(_altTextWasFromKeyBoard, this)
});
alt_text_classPrivateFieldSet(_altTextWasFromKeyBoard, this, false);
}
isEmpty() {
if (alt_text_classPrivateFieldGet(_useNewAltTextFlow, this)) {
return alt_text_classPrivateFieldGet(alt_text_altText, this) === null;
}
return !alt_text_classPrivateFieldGet(alt_text_altText, this) && !alt_text_classPrivateFieldGet(_altTextDecorative, this);
}
hasData() {
if (alt_text_classPrivateFieldGet(_useNewAltTextFlow, this)) {
return alt_text_classPrivateFieldGet(alt_text_altText, this) !== null || !!alt_text_classPrivateFieldGet(_guessedText, this);
}
return this.isEmpty();
}
get guessedText() {
return alt_text_classPrivateFieldGet(_guessedText, this);
}
async setGuessedText(guessedText) {
if (alt_text_classPrivateFieldGet(alt_text_altText, this) !== null) {
return;
}
alt_text_classPrivateFieldSet(_guessedText, this, guessedText);
alt_text_classPrivateFieldSet(_textWithDisclaimer, this, await AltText._l10n.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer", {
generatedAltText: guessedText
}));
alt_text_assertClassBrand(_AltText_brand, this, _setState).call(this);
}
toggleAltTextBadge() {
let visibility = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!alt_text_classPrivateFieldGet(_useNewAltTextFlow, this) || alt_text_classPrivateFieldGet(alt_text_altText, this)) {
alt_text_classPrivateFieldGet(_badge, this)?.remove();
alt_text_classPrivateFieldSet(_badge, this, null);
return;
}
if (!alt_text_classPrivateFieldGet(_badge, this)) {
const badge = alt_text_classPrivateFieldSet(_badge, this, document.createElement("div"));
badge.className = "noAltTextBadge";
alt_text_classPrivateFieldGet(alt_text_editor, this).div.append(badge);
}
alt_text_classPrivateFieldGet(_badge, this).classList.toggle("hidden", !visibility);
}
serialize(isForCopying) {
let altText = alt_text_classPrivateFieldGet(alt_text_altText, this);
if (!isForCopying && alt_text_classPrivateFieldGet(_guessedText, this) === altText) {
altText = alt_text_classPrivateFieldGet(_textWithDisclaimer, this);
}
return {
altText,
decorative: alt_text_classPrivateFieldGet(_altTextDecorative, this),
guessedText: alt_text_classPrivateFieldGet(_guessedText, this),
textWithDisclaimer: alt_text_classPrivateFieldGet(_textWithDisclaimer, this)
};
}
get data() {
return {
altText: alt_text_classPrivateFieldGet(alt_text_altText, this),
decorative: alt_text_classPrivateFieldGet(_altTextDecorative, this)
};
}
set data(_ref) {
let {
altText,
decorative,
guessedText,
textWithDisclaimer,
cancel = false
} = _ref;
if (guessedText) {
alt_text_classPrivateFieldSet(_guessedText, this, guessedText);
alt_text_classPrivateFieldSet(_textWithDisclaimer, this, textWithDisclaimer);
}
if (alt_text_classPrivateFieldGet(alt_text_altText, this) === altText && alt_text_classPrivateFieldGet(_altTextDecorative, this) === decorative) {
return;
}
if (!cancel) {
alt_text_classPrivateFieldSet(alt_text_altText, this, altText);
alt_text_classPrivateFieldSet(_altTextDecorative, this, decorative);
}
alt_text_assertClassBrand(_AltText_brand, this, _setState).call(this);
}
toggle() {
let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!alt_text_classPrivateFieldGet(_altTextButton, this)) {
return;
}
if (!enabled && alt_text_classPrivateFieldGet(_altTextTooltipTimeout, this)) {
clearTimeout(alt_text_classPrivateFieldGet(_altTextTooltipTimeout, this));
alt_text_classPrivateFieldSet(_altTextTooltipTimeout, this, null);
}
alt_text_classPrivateFieldGet(_altTextButton, this).disabled = !enabled;
}
shown() {
alt_text_classPrivateFieldGet(alt_text_editor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.image_status_label_displayed",
data: {
label: alt_text_classPrivateGetter(_AltText_brand, this, _get_label)
}
});
}
destroy() {
alt_text_classPrivateFieldGet(_altTextButton, this)?.remove();
alt_text_classPrivateFieldSet(_altTextButton, this, null);
alt_text_classPrivateFieldSet(_altTextButtonLabel, this, null);
alt_text_classPrivateFieldSet(_altTextTooltip, this, null);
alt_text_classPrivateFieldGet(_badge, this)?.remove();
alt_text_classPrivateFieldSet(_badge, this, null);
}
}
function _get_label(_this) {
return alt_text_classPrivateFieldGet(alt_text_altText, _this) && "added" || alt_text_classPrivateFieldGet(alt_text_altText, _this) === null && _this.guessedText && "review" || "missing";
}
async function _setState() {
const button = alt_text_classPrivateFieldGet(_altTextButton, this);
if (!button) {
return;
}
if (alt_text_classPrivateFieldGet(_useNewAltTextFlow, this)) {
button.classList.toggle("done", !!alt_text_classPrivateFieldGet(alt_text_altText, this));
button.setAttribute("data-l10n-id", _l10nNewButton._[alt_text_classPrivateGetter(_AltText_brand, this, _get_label)]);
alt_text_classPrivateFieldGet(_altTextButtonLabel, this)?.setAttribute("data-l10n-id", _l10nNewButton._[`${alt_text_classPrivateGetter(_AltText_brand, this, _get_label)}-label`]);
if (!alt_text_classPrivateFieldGet(alt_text_altText, this)) {
alt_text_classPrivateFieldGet(_altTextTooltip, this)?.remove();
return;
}
} else {
if (!alt_text_classPrivateFieldGet(alt_text_altText, this) && !alt_text_classPrivateFieldGet(_altTextDecorative, this)) {
button.classList.remove("done");
alt_text_classPrivateFieldGet(_altTextTooltip, this)?.remove();
return;
}
button.classList.add("done");
button.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-edit-button");
}
let tooltip = alt_text_classPrivateFieldGet(_altTextTooltip, this);
if (!tooltip) {
alt_text_classPrivateFieldSet(_altTextTooltip, this, tooltip = document.createElement("span"));
tooltip.className = "tooltip";
tooltip.setAttribute("role", "tooltip");
tooltip.id = `alt-text-tooltip-${alt_text_classPrivateFieldGet(alt_text_editor, this).id}`;
const DELAY_TO_SHOW_TOOLTIP = 100;
const signal = alt_text_classPrivateFieldGet(alt_text_editor, this)._uiManager._signal;
signal.addEventListener("abort", () => {
clearTimeout(alt_text_classPrivateFieldGet(_altTextTooltipTimeout, this));
alt_text_classPrivateFieldSet(_altTextTooltipTimeout, this, null);
}, {
once: true
});
button.addEventListener("mouseenter", () => {
alt_text_classPrivateFieldSet(_altTextTooltipTimeout, this, setTimeout(() => {
alt_text_classPrivateFieldSet(_altTextTooltipTimeout, this, null);
alt_text_classPrivateFieldGet(_altTextTooltip, this).classList.add("show");
alt_text_classPrivateFieldGet(alt_text_editor, this)._reportTelemetry({
action: "alt_text_tooltip"
});
}, DELAY_TO_SHOW_TOOLTIP));
}, {
signal
});
button.addEventListener("mouseleave", () => {
if (alt_text_classPrivateFieldGet(_altTextTooltipTimeout, this)) {
clearTimeout(alt_text_classPrivateFieldGet(_altTextTooltipTimeout, this));
alt_text_classPrivateFieldSet(_altTextTooltipTimeout, this, null);
}
alt_text_classPrivateFieldGet(_altTextTooltip, this)?.classList.remove("show");
}, {
signal
});
}
if (alt_text_classPrivateFieldGet(_altTextDecorative, this)) {
tooltip.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-decorative-tooltip");
} else {
tooltip.removeAttribute("data-l10n-id");
tooltip.textContent = alt_text_classPrivateFieldGet(alt_text_altText, this);
}
if (!tooltip.parentNode) {
button.append(tooltip);
}
const element = alt_text_classPrivateFieldGet(alt_text_editor, this).getElementForAltText();
element?.setAttribute("aria-describedby", tooltip.id);
}
var _l10nNewButton = {
_: null
};
alt_text_defineProperty(AltText, "_l10n", null);
;// ./src/display/touch_manager.js
var _TouchManager;
function touch_manager_classPrivateMethodInitSpec(e, a) { touch_manager_checkPrivateRedeclaration(e, a), a.add(e); }
function touch_manager_classPrivateFieldInitSpec(e, t, a) { touch_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function touch_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function touch_manager_classPrivateFieldGet(s, a) { return s.get(touch_manager_assertClassBrand(s, a)); }
function touch_manager_classPrivateFieldSet(s, a, r) { return s.set(touch_manager_assertClassBrand(s, a), r), r; }
function touch_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var touch_manager_container = /*#__PURE__*/new WeakMap();
var _isPinching = /*#__PURE__*/new WeakMap();
var _isPinchingStopped = /*#__PURE__*/new WeakMap();
var _isPinchingDisabled = /*#__PURE__*/new WeakMap();
var _onPinchStart = /*#__PURE__*/new WeakMap();
var _onPinching = /*#__PURE__*/new WeakMap();
var _onPinchEnd = /*#__PURE__*/new WeakMap();
var _pointerDownAC = /*#__PURE__*/new WeakMap();
var _signal = /*#__PURE__*/new WeakMap();
var _touchInfo = /*#__PURE__*/new WeakMap();
var _touchManagerAC = /*#__PURE__*/new WeakMap();
var _touchMoveAC = /*#__PURE__*/new WeakMap();
var _TouchManager_brand = /*#__PURE__*/new WeakSet();
class TouchManager {
constructor(_ref) {
let {
container: _container2,
isPinchingDisabled = null,
isPinchingStopped = null,
onPinchStart = null,
onPinching = null,
onPinchEnd = null,
signal: _signal2
} = _ref;
touch_manager_classPrivateMethodInitSpec(this, _TouchManager_brand);
touch_manager_classPrivateFieldInitSpec(this, touch_manager_container, void 0);
touch_manager_classPrivateFieldInitSpec(this, _isPinching, false);
touch_manager_classPrivateFieldInitSpec(this, _isPinchingStopped, null);
touch_manager_classPrivateFieldInitSpec(this, _isPinchingDisabled, void 0);
touch_manager_classPrivateFieldInitSpec(this, _onPinchStart, void 0);
touch_manager_classPrivateFieldInitSpec(this, _onPinching, void 0);
touch_manager_classPrivateFieldInitSpec(this, _onPinchEnd, void 0);
touch_manager_classPrivateFieldInitSpec(this, _pointerDownAC, null);
touch_manager_classPrivateFieldInitSpec(this, _signal, void 0);
touch_manager_classPrivateFieldInitSpec(this, _touchInfo, null);
touch_manager_classPrivateFieldInitSpec(this, _touchManagerAC, void 0);
touch_manager_classPrivateFieldInitSpec(this, _touchMoveAC, null);
touch_manager_classPrivateFieldSet(touch_manager_container, this, _container2);
touch_manager_classPrivateFieldSet(_isPinchingStopped, this, isPinchingStopped);
touch_manager_classPrivateFieldSet(_isPinchingDisabled, this, isPinchingDisabled);
touch_manager_classPrivateFieldSet(_onPinchStart, this, onPinchStart);
touch_manager_classPrivateFieldSet(_onPinching, this, onPinching);
touch_manager_classPrivateFieldSet(_onPinchEnd, this, onPinchEnd);
touch_manager_classPrivateFieldSet(_touchManagerAC, this, new AbortController());
touch_manager_classPrivateFieldSet(_signal, this, AbortSignal.any([_signal2, touch_manager_classPrivateFieldGet(_touchManagerAC, this).signal]));
_container2.addEventListener("touchstart", touch_manager_assertClassBrand(_TouchManager_brand, this, _onTouchStart).bind(this), {
passive: false,
signal: touch_manager_classPrivateFieldGet(_signal, this)
});
}
get MIN_TOUCH_DISTANCE_TO_PINCH() {
return 35 / OutputScale.pixelRatio;
}
destroy() {
touch_manager_classPrivateFieldGet(_touchManagerAC, this)?.abort();
touch_manager_classPrivateFieldSet(_touchManagerAC, this, null);
touch_manager_classPrivateFieldGet(_pointerDownAC, this)?.abort();
touch_manager_classPrivateFieldSet(_pointerDownAC, this, null);
}
}
_TouchManager = TouchManager;
function _onTouchStart(evt) {
if (touch_manager_classPrivateFieldGet(_isPinchingDisabled, this)?.call(this)) {
return;
}
if (evt.touches.length === 1) {
if (touch_manager_classPrivateFieldGet(_pointerDownAC, this)) {
return;
}
const pointerDownAC = touch_manager_classPrivateFieldSet(_pointerDownAC, this, new AbortController());
const signal = AbortSignal.any([touch_manager_classPrivateFieldGet(_signal, this), pointerDownAC.signal]);
const container = touch_manager_classPrivateFieldGet(touch_manager_container, this);
const opts = {
capture: true,
signal,
passive: false
};
const cancelPointerDown = e => {
if (e.pointerType === "touch") {
touch_manager_classPrivateFieldGet(_pointerDownAC, this)?.abort();
touch_manager_classPrivateFieldSet(_pointerDownAC, this, null);
}
};
container.addEventListener("pointerdown", e => {
if (e.pointerType === "touch") {
stopEvent(e);
cancelPointerDown(e);
}
}, opts);
container.addEventListener("pointerup", cancelPointerDown, opts);
container.addEventListener("pointercancel", cancelPointerDown, opts);
return;
}
if (!touch_manager_classPrivateFieldGet(_touchMoveAC, this)) {
touch_manager_classPrivateFieldSet(_touchMoveAC, this, new AbortController());
const signal = AbortSignal.any([touch_manager_classPrivateFieldGet(_signal, this), touch_manager_classPrivateFieldGet(_touchMoveAC, this).signal]);
const container = touch_manager_classPrivateFieldGet(touch_manager_container, this);
const opt = {
signal,
capture: false,
passive: false
};
container.addEventListener("touchmove", touch_manager_assertClassBrand(_TouchManager_brand, this, _onTouchMove).bind(this), opt);
const onTouchEnd = touch_manager_assertClassBrand(_TouchManager_brand, this, _onTouchEnd).bind(this);
container.addEventListener("touchend", onTouchEnd, opt);
container.addEventListener("touchcancel", onTouchEnd, opt);
opt.capture = true;
container.addEventListener("pointerdown", stopEvent, opt);
container.addEventListener("pointermove", stopEvent, opt);
container.addEventListener("pointercancel", stopEvent, opt);
container.addEventListener("pointerup", stopEvent, opt);
touch_manager_classPrivateFieldGet(_onPinchStart, this)?.call(this);
}
stopEvent(evt);
if (evt.touches.length !== 2 || touch_manager_classPrivateFieldGet(_isPinchingStopped, this)?.call(this)) {
touch_manager_classPrivateFieldSet(_touchInfo, this, null);
return;
}
let [touch0, touch1] = evt.touches;
if (touch0.identifier > touch1.identifier) {
[touch0, touch1] = [touch1, touch0];
}
touch_manager_classPrivateFieldSet(_touchInfo, this, {
touch0X: touch0.screenX,
touch0Y: touch0.screenY,
touch1X: touch1.screenX,
touch1Y: touch1.screenY
});
}
function _onTouchMove(evt) {
if (!touch_manager_classPrivateFieldGet(_touchInfo, this) || evt.touches.length !== 2) {
return;
}
stopEvent(evt);
let [touch0, touch1] = evt.touches;
if (touch0.identifier > touch1.identifier) {
[touch0, touch1] = [touch1, touch0];
}
const {
screenX: screen0X,
screenY: screen0Y
} = touch0;
const {
screenX: screen1X,
screenY: screen1Y
} = touch1;
const touchInfo = touch_manager_classPrivateFieldGet(_touchInfo, this);
const {
touch0X: pTouch0X,
touch0Y: pTouch0Y,
touch1X: pTouch1X,
touch1Y: pTouch1Y
} = touchInfo;
const prevGapX = pTouch1X - pTouch0X;
const prevGapY = pTouch1Y - pTouch0Y;
const currGapX = screen1X - screen0X;
const currGapY = screen1Y - screen0Y;
const distance = Math.hypot(currGapX, currGapY) || 1;
const pDistance = Math.hypot(prevGapX, prevGapY) || 1;
if (!touch_manager_classPrivateFieldGet(_isPinching, this) && Math.abs(pDistance - distance) <= _TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH) {
return;
}
touchInfo.touch0X = screen0X;
touchInfo.touch0Y = screen0Y;
touchInfo.touch1X = screen1X;
touchInfo.touch1Y = screen1Y;
if (!touch_manager_classPrivateFieldGet(_isPinching, this)) {
touch_manager_classPrivateFieldSet(_isPinching, this, true);
return;
}
const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2];
touch_manager_classPrivateFieldGet(_onPinching, this)?.call(this, origin, pDistance, distance);
}
function _onTouchEnd(evt) {
if (evt.touches.length >= 2) {
return;
}
if (touch_manager_classPrivateFieldGet(_touchMoveAC, this)) {
touch_manager_classPrivateFieldGet(_touchMoveAC, this).abort();
touch_manager_classPrivateFieldSet(_touchMoveAC, this, null);
touch_manager_classPrivateFieldGet(_onPinchEnd, this)?.call(this);
}
if (!touch_manager_classPrivateFieldGet(_touchInfo, this)) {
return;
}
stopEvent(evt);
touch_manager_classPrivateFieldSet(_touchInfo, this, null);
touch_manager_classPrivateFieldSet(_isPinching, this, false);
}
;// ./src/display/editor/editor.js
var _AnnotationEditor;
function editor_classPrivateMethodInitSpec(e, a) { editor_checkPrivateRedeclaration(e, a), a.add(e); }
function editor_defineProperty(e, r, t) { return (r = editor_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function editor_toPropertyKey(t) { var i = editor_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function editor_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function editor_classPrivateFieldInitSpec(e, t, a) { editor_checkPrivateRedeclaration(e, t), t.set(e, a); }
function editor_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function editor_classPrivateFieldSet(s, a, r) { return s.set(editor_assertClassBrand(s, a), r), r; }
function editor_classPrivateFieldGet(s, a) { return s.get(editor_assertClassBrand(s, a)); }
function editor_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _accessibilityData = /*#__PURE__*/new WeakMap();
var _allResizerDivs = /*#__PURE__*/new WeakMap();
var editor_altText = /*#__PURE__*/new WeakMap();
var _disabled = /*#__PURE__*/new WeakMap();
var _dragPointerId = /*#__PURE__*/new WeakMap();
var _dragPointerType = /*#__PURE__*/new WeakMap();
var _keepAspectRatio = /*#__PURE__*/new WeakMap();
var _resizersDiv = /*#__PURE__*/new WeakMap();
var _lastPointerCoords = /*#__PURE__*/new WeakMap();
var _savedDimensions = /*#__PURE__*/new WeakMap();
var _focusAC = /*#__PURE__*/new WeakMap();
var _focusedResizerName = /*#__PURE__*/new WeakMap();
var _hasBeenClicked = /*#__PURE__*/new WeakMap();
var _initialRect = /*#__PURE__*/new WeakMap();
var _isEditing = /*#__PURE__*/new WeakMap();
var _isInEditMode = /*#__PURE__*/new WeakMap();
var _isResizerEnabledForKeyboard = /*#__PURE__*/new WeakMap();
var _moveInDOMTimeout = /*#__PURE__*/new WeakMap();
var _prevDragX = /*#__PURE__*/new WeakMap();
var _prevDragY = /*#__PURE__*/new WeakMap();
var _telemetryTimeouts = /*#__PURE__*/new WeakMap();
var _touchManager = /*#__PURE__*/new WeakMap();
var _isDraggable = /*#__PURE__*/new WeakMap();
var _zIndex = /*#__PURE__*/new WeakMap();
var _AnnotationEditor_brand = /*#__PURE__*/new WeakSet();
class AnnotationEditor {
static get _resizerKeyboardManager() {
const resize = AnnotationEditor.prototype._resizeWithKeyboard;
const small = AnnotationEditorUIManager.TRANSLATE_SMALL;
const big = AnnotationEditorUIManager.TRANSLATE_BIG;
return shadow(this, "_resizerKeyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, {
args: [-small, 0]
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, {
args: [-big, 0]
}], [["ArrowRight", "mac+ArrowRight"], resize, {
args: [small, 0]
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, {
args: [big, 0]
}], [["ArrowUp", "mac+ArrowUp"], resize, {
args: [0, -small]
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, {
args: [0, -big]
}], [["ArrowDown", "mac+ArrowDown"], resize, {
args: [0, small]
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, {
args: [0, big]
}], [["Escape", "mac+Escape"], AnnotationEditor.prototype._stopResizingWithKeyboard]]));
}
constructor(parameters) {
editor_classPrivateMethodInitSpec(this, _AnnotationEditor_brand);
editor_classPrivateFieldInitSpec(this, _accessibilityData, null);
editor_classPrivateFieldInitSpec(this, _allResizerDivs, null);
editor_classPrivateFieldInitSpec(this, editor_altText, null);
editor_classPrivateFieldInitSpec(this, _disabled, false);
editor_classPrivateFieldInitSpec(this, _dragPointerId, null);
editor_classPrivateFieldInitSpec(this, _dragPointerType, "");
editor_classPrivateFieldInitSpec(this, _keepAspectRatio, false);
editor_classPrivateFieldInitSpec(this, _resizersDiv, null);
editor_classPrivateFieldInitSpec(this, _lastPointerCoords, null);
editor_classPrivateFieldInitSpec(this, _savedDimensions, null);
editor_classPrivateFieldInitSpec(this, _focusAC, null);
editor_classPrivateFieldInitSpec(this, _focusedResizerName, "");
editor_classPrivateFieldInitSpec(this, _hasBeenClicked, false);
editor_classPrivateFieldInitSpec(this, _initialRect, null);
editor_classPrivateFieldInitSpec(this, _isEditing, false);
editor_classPrivateFieldInitSpec(this, _isInEditMode, false);
editor_classPrivateFieldInitSpec(this, _isResizerEnabledForKeyboard, false);
editor_classPrivateFieldInitSpec(this, _moveInDOMTimeout, null);
editor_classPrivateFieldInitSpec(this, _prevDragX, 0);
editor_classPrivateFieldInitSpec(this, _prevDragY, 0);
editor_classPrivateFieldInitSpec(this, _telemetryTimeouts, null);
editor_classPrivateFieldInitSpec(this, _touchManager, null);
editor_defineProperty(this, "isSelected", false);
editor_defineProperty(this, "_isCopy", false);
editor_defineProperty(this, "_editToolbar", null);
editor_defineProperty(this, "_initialOptions", Object.create(null));
editor_defineProperty(this, "_initialData", null);
editor_defineProperty(this, "_isVisible", true);
editor_defineProperty(this, "_uiManager", null);
editor_defineProperty(this, "_focusEventsAllowed", true);
editor_classPrivateFieldInitSpec(this, _isDraggable, false);
editor_classPrivateFieldInitSpec(this, _zIndex, AnnotationEditor._zIndex++);
editor_defineProperty(this, "doNotMove", false);
this.parent = parameters.parent;
this.id = parameters.id;
this.width = this.height = null;
this.pageIndex = parameters.parent.pageIndex;
this.name = parameters.name;
this.div = null;
this._uiManager = parameters.uiManager;
this.annotationElementId = null;
this._willKeepAspectRatio = false;
this._initialOptions.isCentered = parameters.isCentered;
this._structTreeParentId = null;
const {
rotation: _rotation,
rawDims: {
pageWidth: _pageWidth,
pageHeight: _pageHeight,
pageX,
pageY
}
} = this.parent.viewport;
this.rotation = _rotation;
this.pageRotation = (360 + _rotation - this._uiManager.viewParameters.rotation) % 360;
this.pageDimensions = [_pageWidth, _pageHeight];
this.pageTranslation = [pageX, pageY];
const [_width, _height] = this.parentDimensions;
this.x = parameters.x / _width;
this.y = parameters.y / _height;
this.isAttachedToDOM = false;
this.deleted = false;
this.eventBus = parameters.eventBus;
}
get editorType() {
return Object.getPrototypeOf(this).constructor._type;
}
static get isDrawer() {
return false;
}
static get _defaultLineColor() {
return shadow(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText"));
}
static deleteAnnotationElement(editor) {
const fakeEditor = new FakeEditor({
id: editor.parent.getNextId(),
parent: editor.parent,
uiManager: editor._uiManager
});
fakeEditor.annotationElementId = editor.annotationElementId;
fakeEditor.deleted = true;
fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);
}
static initialize(l10n, _uiManager) {
AnnotationEditor._l10n ??= l10n;
AnnotationEditor._l10nResizer ||= Object.freeze({
topLeft: "pdfjs-editor-resizer-top-left",
topMiddle: "pdfjs-editor-resizer-top-middle",
topRight: "pdfjs-editor-resizer-top-right",
middleRight: "pdfjs-editor-resizer-middle-right",
bottomRight: "pdfjs-editor-resizer-bottom-right",
bottomMiddle: "pdfjs-editor-resizer-bottom-middle",
bottomLeft: "pdfjs-editor-resizer-bottom-left",
middleLeft: "pdfjs-editor-resizer-middle-left"
});
if (AnnotationEditor._borderLineWidth !== -1) {
return;
}
const style = getComputedStyle(document.documentElement);
AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0;
}
static updateDefaultParams(_type, _value) {}
static get defaultPropertiesToUpdate() {
return [];
}
static isHandlingMimeForPasting(mime) {
return false;
}
static paste(item, parent) {
unreachable("Not implemented");
}
get propertiesToUpdate() {
return [];
}
get _isDraggable() {
return editor_classPrivateFieldGet(_isDraggable, this);
}
set _isDraggable(value) {
editor_classPrivateFieldSet(_isDraggable, this, value);
this.div?.classList.toggle("draggable", value);
}
get isEnterHandled() {
return true;
}
center() {
const [pageWidth, pageHeight] = this.pageDimensions;
switch (this.parentRotation) {
case 90:
this.x -= this.height * pageHeight / (pageWidth * 2);
this.y += this.width * pageWidth / (pageHeight * 2);
break;
case 180:
this.x += this.width / 2;
this.y += this.height / 2;
break;
case 270:
this.x += this.height * pageHeight / (pageWidth * 2);
this.y -= this.width * pageWidth / (pageHeight * 2);
break;
default:
this.x -= this.width / 2;
this.y -= this.height / 2;
break;
}
this.fixAndSetPosition();
}
addCommands(params) {
this._uiManager.addCommands(params);
}
get currentLayer() {
return this._uiManager.currentLayer;
}
setInBackground() {
this.div.style.zIndex = 0;
}
setInForeground() {
this.div.style.zIndex = editor_classPrivateFieldGet(_zIndex, this);
}
setParent(parent) {
if (parent !== null) {
this.pageIndex = parent.pageIndex;
this.pageDimensions = parent.pageDimensions;
} else {
editor_assertClassBrand(_AnnotationEditor_brand, this, _stopResizing).call(this);
}
this.parent = parent;
}
focusin(event) {
if (!this._focusEventsAllowed) {
return;
}
if (!editor_classPrivateFieldGet(_hasBeenClicked, this)) {
this.parent.setSelected(this);
} else {
editor_classPrivateFieldSet(_hasBeenClicked, this, false);
}
}
focusout(event) {
if (!this._focusEventsAllowed) {
return;
}
if (!this.isAttachedToDOM) {
return;
}
const target = event.relatedTarget;
if (target?.closest(`#${this.id}`)) {
return;
}
event.preventDefault();
if (!this.parent?.isMultipleSelection) {
this.commitOrRemove();
}
}
commitOrRemove() {
if (this.isEmpty()) {
this.remove();
} else {
this.commit();
}
}
commit() {
this.addToAnnotationStorage();
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "commit",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: this
});
}
addToAnnotationStorage() {
this._uiManager.addToAnnotationStorage(this);
}
setAt(x, y, tx, ty) {
const [width, height] = this.parentDimensions;
[tx, ty] = this.screenToPageTranslation(tx, ty);
if (this.doNotMove) {
[tx, ty] = [0, 0];
}
this.x = (x + tx) / width;
this.y = (y + ty) / height;
this.fixAndSetPosition();
}
_moveAfterPaste(baseX, baseY) {
const [parentWidth, parentHeight] = this.parentDimensions;
this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
this._onTranslated();
}
translate(x, y) {
editor_assertClassBrand(_AnnotationEditor_brand, this, _translate).call(this, this.parentDimensions, x, y);
}
translateInPage(x, y) {
editor_classPrivateFieldGet(_initialRect, this) || editor_classPrivateFieldSet(_initialRect, this, [this.x, this.y, this.width, this.height]);
editor_assertClassBrand(_AnnotationEditor_brand, this, _translate).call(this, this.pageDimensions, x, y);
this.div.scrollIntoView({
block: "nearest"
});
}
translationDone() {
this._onTranslated(this.x, this.y);
}
drag(tx, ty) {
editor_classPrivateFieldGet(_initialRect, this) || editor_classPrivateFieldSet(_initialRect, this, [this.x, this.y, this.width, this.height]);
const {
div,
parentDimensions: [parentWidth, parentHeight]
} = this;
this.x += tx / parentWidth;
this.y += ty / parentHeight;
if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {
const {
x,
y
} = this.div.getBoundingClientRect();
if (this.parent.findNewParent(this, x, y)) {
this.x -= Math.floor(this.x);
this.y -= Math.floor(this.y);
}
}
let {
x,
y
} = this;
const [bx, by] = this.getBaseTranslation();
x += bx;
y += by;
const {
style
} = div;
style.left = `${(100 * x).toFixed(2)}%`;
style.top = `${(100 * y).toFixed(2)}%`;
this._onTranslating(x, y);
div.scrollIntoView({
block: "nearest"
});
}
_onTranslating(x, y) {}
_onTranslated(x, y) {
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "moved",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: {
x,
y
}
});
}
get _hasBeenMoved() {
return !!editor_classPrivateFieldGet(_initialRect, this) && (editor_classPrivateFieldGet(_initialRect, this)[0] !== this.x || editor_classPrivateFieldGet(_initialRect, this)[1] !== this.y);
}
get _hasBeenResized() {
return !!editor_classPrivateFieldGet(_initialRect, this) && (editor_classPrivateFieldGet(_initialRect, this)[2] !== this.width || editor_classPrivateFieldGet(_initialRect, this)[3] !== this.height);
}
getBaseTranslation() {
const [parentWidth, parentHeight] = this.parentDimensions;
const {
_borderLineWidth
} = AnnotationEditor;
const x = _borderLineWidth / parentWidth;
const y = _borderLineWidth / parentHeight;
switch (this.rotation) {
case 90:
return [-x, y];
case 180:
return [x, y];
case 270:
return [x, -y];
default:
return [-x, -y];
}
}
get _mustFixPosition() {
return true;
}
fixAndSetPosition() {
let rotation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.rotation;
const {
div: {
style
},
pageDimensions: [pageWidth, pageHeight]
} = this;
let {
x,
y,
width,
height
} = this;
width *= pageWidth;
height *= pageHeight;
x *= pageWidth;
y *= pageHeight;
if (this._mustFixPosition) {
switch (rotation) {
case 0:
x = MathClamp(x, 0, pageWidth - width);
y = MathClamp(y, 0, pageHeight - height);
break;
case 90:
x = MathClamp(x, 0, pageWidth - height);
y = MathClamp(y, width, pageHeight);
break;
case 180:
x = MathClamp(x, width, pageWidth);
y = MathClamp(y, height, pageHeight);
break;
case 270:
x = MathClamp(x, height, pageWidth);
y = MathClamp(y, 0, pageHeight - width);
break;
}
}
this.x = x /= pageWidth;
this.y = y /= pageHeight;
const [bx, by] = this.getBaseTranslation();
x += bx;
y += by;
style.left = `${(100 * x).toFixed(2)}%`;
style.top = `${(100 * y).toFixed(2)}%`;
this.moveInDOM();
}
screenToPageTranslation(x, y) {
return _rotatePoint.call(AnnotationEditor, x, y, this.parentRotation);
}
pageTranslationToScreen(x, y) {
return _rotatePoint.call(AnnotationEditor, x, y, 360 - this.parentRotation);
}
get parentScale() {
return this._uiManager.viewParameters.realScale;
}
get parentRotation() {
return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;
}
get parentDimensions() {
const {
parentScale,
pageDimensions: [pageWidth, pageHeight]
} = this;
return [pageWidth * parentScale, pageHeight * parentScale];
}
setDims(width, height) {
const [parentWidth, parentHeight] = this.parentDimensions;
const {
style
} = this.div;
style.width = `${(100 * width / parentWidth).toFixed(2)}%`;
if (!editor_classPrivateFieldGet(_keepAspectRatio, this)) {
style.height = `${(100 * height / parentHeight).toFixed(2)}%`;
}
}
fixDims() {
const {
style
} = this.div;
const {
height,
width
} = style;
const widthPercent = width.endsWith("%");
const heightPercent = !editor_classPrivateFieldGet(_keepAspectRatio, this) && height.endsWith("%");
if (widthPercent && heightPercent) {
return;
}
const [parentWidth, parentHeight] = this.parentDimensions;
if (!widthPercent) {
style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`;
}
if (!editor_classPrivateFieldGet(_keepAspectRatio, this) && !heightPercent) {
style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`;
}
}
getInitialTranslation() {
return [0, 0];
}
_onResized() {}
static _round(x) {
return Math.round(x * 10000) / 10000;
}
_onResizing() {}
altTextFinish() {
editor_classPrivateFieldGet(editor_altText, this)?.finish();
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "altTextChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: editor_classPrivateFieldGet(editor_altText, this)
});
}
async addEditToolbar() {
if (this._editToolbar || editor_classPrivateFieldGet(_isInEditMode, this)) {
return this._editToolbar;
}
this._editToolbar = new EditorToolbar(this);
this.div.append(this._editToolbar.render());
if (editor_classPrivateFieldGet(editor_altText, this)) {
await this._editToolbar.addAltText(editor_classPrivateFieldGet(editor_altText, this));
}
return this._editToolbar;
}
removeEditToolbar() {
if (!this._editToolbar) {
return;
}
this._editToolbar.remove();
this._editToolbar = null;
editor_classPrivateFieldGet(editor_altText, this)?.destroy();
}
addContainer(container) {
const editToolbarDiv = this._editToolbar?.div;
if (editToolbarDiv) {
editToolbarDiv.before(container);
} else {
this.div.append(container);
}
}
getClientDimensions() {
return this.div.getBoundingClientRect();
}
async addAltTextButton() {
if (editor_classPrivateFieldGet(editor_altText, this)) {
return;
}
AltText.initialize(AnnotationEditor._l10n);
editor_classPrivateFieldSet(editor_altText, this, new AltText(this));
if (editor_classPrivateFieldGet(_accessibilityData, this)) {
editor_classPrivateFieldGet(editor_altText, this).data = editor_classPrivateFieldGet(_accessibilityData, this);
editor_classPrivateFieldSet(_accessibilityData, this, null);
}
await this.addEditToolbar();
}
get altTextData() {
return editor_classPrivateFieldGet(editor_altText, this)?.data;
}
set altTextData(data) {
if (!editor_classPrivateFieldGet(editor_altText, this)) {
return;
}
editor_classPrivateFieldGet(editor_altText, this).data = data;
}
get guessedAltText() {
return editor_classPrivateFieldGet(editor_altText, this)?.guessedText;
}
async setGuessedAltText(text) {
await editor_classPrivateFieldGet(editor_altText, this)?.setGuessedText(text);
}
serializeAltText(isForCopying) {
return editor_classPrivateFieldGet(editor_altText, this)?.serialize(isForCopying);
}
hasAltText() {
return !!editor_classPrivateFieldGet(editor_altText, this) && !editor_classPrivateFieldGet(editor_altText, this).isEmpty();
}
hasAltTextData() {
return editor_classPrivateFieldGet(editor_altText, this)?.hasData() ?? false;
}
render() {
const div = this.div = document.createElement("div");
div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360);
div.className = this.name;
div.setAttribute("id", this.id);
div.tabIndex = editor_classPrivateFieldGet(_disabled, this) ? -1 : 0;
div.setAttribute("role", "application");
if (this.defaultL10nId) {
div.setAttribute("data-l10n-id", this.defaultL10nId);
}
if (!this._isVisible) {
div.classList.add("hidden");
}
this.setInForeground();
editor_assertClassBrand(_AnnotationEditor_brand, this, _addFocusListeners).call(this);
const [parentWidth, parentHeight] = this.parentDimensions;
if (this.parentRotation % 180 !== 0) {
div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;
div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;
}
const [tx, ty] = this.getInitialTranslation();
this.translate(tx, ty);
bindEvents(this, div, ["keydown", "pointerdown", "dblclick"]);
if (this.isResizable && this._uiManager._supportsPinchToZoom) {
editor_classPrivateFieldGet(_touchManager, this) || editor_classPrivateFieldSet(_touchManager, this, new TouchManager({
container: div,
isPinchingDisabled: () => !this.isSelected,
onPinchStart: editor_assertClassBrand(_AnnotationEditor_brand, this, _touchPinchStartCallback).bind(this),
onPinching: editor_assertClassBrand(_AnnotationEditor_brand, this, _touchPinchCallback).bind(this),
onPinchEnd: editor_assertClassBrand(_AnnotationEditor_brand, this, _touchPinchEndCallback).bind(this),
signal: this._uiManager._signal
}));
}
this._uiManager._editorUndoBar?.hide();
return div;
}
pointerdown(event) {
const {
isMac
} = util_FeatureTest.platform;
if (event.button !== 0 || event.ctrlKey && isMac) {
event.preventDefault();
return;
}
editor_classPrivateFieldSet(_hasBeenClicked, this, true);
if (this._isDraggable) {
editor_assertClassBrand(_AnnotationEditor_brand, this, _setUpDragSession).call(this, event);
return;
}
editor_assertClassBrand(_AnnotationEditor_brand, this, _selectOnPointerEvent).call(this, event);
}
_onStartDragging() {}
_onStopDragging() {}
moveInDOM() {
if (editor_classPrivateFieldGet(_moveInDOMTimeout, this)) {
clearTimeout(editor_classPrivateFieldGet(_moveInDOMTimeout, this));
}
editor_classPrivateFieldSet(_moveInDOMTimeout, this, setTimeout(() => {
editor_classPrivateFieldSet(_moveInDOMTimeout, this, null);
this.parent?.moveEditorInDOM(this);
}, 0));
}
_setParentAndPosition(parent, x, y) {
parent.changeParent(this);
this.x = x;
this.y = y;
this.fixAndSetPosition();
this._onTranslated();
}
getRect(tx, ty) {
let rotation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.rotation;
const scale = this.parentScale;
const [pageWidth, pageHeight] = this.pageDimensions;
const [pageX, pageY] = this.pageTranslation;
const shiftX = tx / scale;
const shiftY = ty / scale;
const x = this.x * pageWidth;
const y = this.y * pageHeight;
const width = this.width * pageWidth;
const height = this.height * pageHeight;
switch (rotation) {
case 0:
return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY];
case 90:
return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY];
case 180:
return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY];
case 270:
return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY];
default:
throw new Error("Invalid rotation");
}
}
getRectInCurrentCoords(rect, pageHeight) {
const [x1, y1, x2, y2] = rect;
const width = x2 - x1;
const height = y2 - y1;
switch (this.rotation) {
case 0:
return [x1, pageHeight - y2, width, height];
case 90:
return [x1, pageHeight - y1, height, width];
case 180:
return [x2, pageHeight - y1, width, height];
case 270:
return [x2, pageHeight - y2, height, width];
default:
throw new Error("Invalid rotation");
}
}
onceAdded(focus) {}
isEmpty() {
return false;
}
enableEditMode() {
if (this.isInEditMode()) {
return false;
}
this.parent.setEditingState(false);
editor_classPrivateFieldSet(_isInEditMode, this, true);
return true;
}
disableEditMode() {
if (!this.isInEditMode()) {
return false;
}
this.parent.setEditingState(true);
editor_classPrivateFieldSet(_isInEditMode, this, false);
return true;
}
isInEditMode() {
return editor_classPrivateFieldGet(_isInEditMode, this);
}
shouldGetKeyboardEvents() {
return editor_classPrivateFieldGet(_isResizerEnabledForKeyboard, this);
}
needsToBeRebuilt() {
return this.div && !this.isAttachedToDOM;
}
get isOnScreen() {
const {
top,
left,
bottom,
right
} = this.getClientDimensions();
const {
innerHeight,
innerWidth
} = window;
return left < innerWidth && right > 0 && top < innerHeight && bottom > 0;
}
rebuild() {
editor_assertClassBrand(_AnnotationEditor_brand, this, _addFocusListeners).call(this);
}
rotate(_angle) {}
resize() {}
serializeDeleted() {
return {
id: this.annotationElementId,
deleted: true,
pageIndex: this.pageIndex,
popupRef: this._initialData?.popupRef || ""
};
}
serialize() {
let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
unreachable("An editor must be serializable");
}
static async deserialize(data, parent, uiManager) {
const editor = new this.prototype.constructor({
parent,
id: parent.getNextId(),
uiManager,
eventBus: parent.eventBus
});
editor.rotation = data.rotation;
editor_classPrivateFieldSet(_accessibilityData, editor, data.accessibilityData);
editor._isCopy = data.isCopy || false;
const [pageWidth, pageHeight] = editor.pageDimensions;
const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight);
editor.x = x / pageWidth;
editor.y = y / pageHeight;
editor.width = width / pageWidth;
editor.height = height / pageHeight;
return editor;
}
get hasBeenModified() {
return !!this.annotationElementId && (this.deleted || this.serialize() !== null);
}
remove() {
editor_classPrivateFieldGet(_focusAC, this)?.abort();
editor_classPrivateFieldSet(_focusAC, this, null);
if (!this.isEmpty()) {
this.commit();
}
if (this.parent) {
this.parent.remove(this);
} else {
this._uiManager.removeEditor(this);
}
if (editor_classPrivateFieldGet(_moveInDOMTimeout, this)) {
clearTimeout(editor_classPrivateFieldGet(_moveInDOMTimeout, this));
editor_classPrivateFieldSet(_moveInDOMTimeout, this, null);
}
editor_assertClassBrand(_AnnotationEditor_brand, this, _stopResizing).call(this);
this.removeEditToolbar();
if (editor_classPrivateFieldGet(_telemetryTimeouts, this)) {
for (const timeout of editor_classPrivateFieldGet(_telemetryTimeouts, this).values()) {
clearTimeout(timeout);
}
editor_classPrivateFieldSet(_telemetryTimeouts, this, null);
}
this.parent = null;
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "removed",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: this
});
editor_classPrivateFieldGet(_touchManager, this)?.destroy();
editor_classPrivateFieldSet(_touchManager, this, null);
}
get isResizable() {
return false;
}
makeResizable() {
if (this.isResizable) {
editor_assertClassBrand(_AnnotationEditor_brand, this, _createResizers).call(this);
editor_classPrivateFieldGet(_resizersDiv, this).classList.remove("hidden");
}
}
get toolbarPosition() {
return null;
}
keydown(event) {
if (!this.isResizable || event.target !== this.div || event.key !== "Enter") {
return;
}
this._uiManager.setSelected(this);
editor_classPrivateFieldSet(_savedDimensions, this, {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
});
const children = editor_classPrivateFieldGet(_resizersDiv, this).children;
if (!editor_classPrivateFieldGet(_allResizerDivs, this)) {
editor_classPrivateFieldSet(_allResizerDivs, this, Array.from(children));
const boundResizerKeydown = editor_assertClassBrand(_AnnotationEditor_brand, this, _resizerKeydown).bind(this);
const boundResizerBlur = editor_assertClassBrand(_AnnotationEditor_brand, this, _resizerBlur).bind(this);
const signal = this._uiManager._signal;
for (const div of editor_classPrivateFieldGet(_allResizerDivs, this)) {
const name = div.getAttribute("data-resizer-name");
div.setAttribute("role", "spinbutton");
div.addEventListener("keydown", boundResizerKeydown, {
signal
});
div.addEventListener("blur", boundResizerBlur, {
signal
});
div.addEventListener("focus", editor_assertClassBrand(_AnnotationEditor_brand, this, _resizerFocus).bind(this, name), {
signal
});
div.setAttribute("data-l10n-id", AnnotationEditor._l10nResizer[name]);
}
}
const first = editor_classPrivateFieldGet(_allResizerDivs, this)[0];
let firstPosition = 0;
for (const div of children) {
if (div === first) {
break;
}
firstPosition++;
}
const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (editor_classPrivateFieldGet(_allResizerDivs, this).length / 4);
if (nextFirstPosition !== firstPosition) {
if (nextFirstPosition < firstPosition) {
for (let i = 0; i < firstPosition - nextFirstPosition; i++) {
editor_classPrivateFieldGet(_resizersDiv, this).append(editor_classPrivateFieldGet(_resizersDiv, this).firstChild);
}
} else if (nextFirstPosition > firstPosition) {
for (let i = 0; i < nextFirstPosition - firstPosition; i++) {
editor_classPrivateFieldGet(_resizersDiv, this).firstChild.before(editor_classPrivateFieldGet(_resizersDiv, this).lastChild);
}
}
let i = 0;
for (const child of children) {
const div = editor_classPrivateFieldGet(_allResizerDivs, this)[i++];
const name = div.getAttribute("data-resizer-name");
child.setAttribute("data-l10n-id", AnnotationEditor._l10nResizer[name]);
}
}
editor_assertClassBrand(_AnnotationEditor_brand, this, _setResizerTabIndex).call(this, 0);
editor_classPrivateFieldSet(_isResizerEnabledForKeyboard, this, true);
editor_classPrivateFieldGet(_resizersDiv, this).firstChild.focus({
focusVisible: true
});
event.preventDefault();
event.stopImmediatePropagation();
}
_resizeWithKeyboard(x, y) {
if (!editor_classPrivateFieldGet(_isResizerEnabledForKeyboard, this)) {
return;
}
editor_assertClassBrand(_AnnotationEditor_brand, this, _resizerPointermove).call(this, editor_classPrivateFieldGet(_focusedResizerName, this), {
deltaX: x,
deltaY: y,
fromKeyboard: true
});
}
_stopResizingWithKeyboard() {
editor_assertClassBrand(_AnnotationEditor_brand, this, _stopResizing).call(this);
this.div.focus();
}
select() {
if (this.isSelected && this._editToolbar) {
return;
}
this.isSelected = true;
this.makeResizable();
this.div?.classList.add("selectedEditor");
if (!this._editToolbar) {
this.addEditToolbar().then(() => {
if (this.div?.classList.contains("selectedEditor")) {
this._editToolbar?.show();
}
});
return;
}
this._editToolbar?.show();
editor_classPrivateFieldGet(editor_altText, this)?.toggleAltTextBadge(false);
}
unselect() {
if (!this.isSelected) {
return;
}
this.isSelected = false;
editor_classPrivateFieldGet(_resizersDiv, this)?.classList.add("hidden");
this.div?.classList.remove("selectedEditor");
if (this.div?.contains(document.activeElement)) {
this._uiManager.currentLayer.div.focus({
preventScroll: true
});
}
this._editToolbar?.hide();
editor_classPrivateFieldGet(editor_altText, this)?.toggleAltTextBadge(true);
}
updateParams(type, value) {}
disableEditing() {}
enableEditing() {}
get canChangeContent() {
return false;
}
enterInEditMode() {
if (!this.canChangeContent) {
return;
}
this.enableEditMode();
this.div.focus();
}
dblclick(event) {
this.enterInEditMode();
this.parent.updateToolbar({
mode: this.constructor._editorType,
editId: this.id
});
}
getElementForAltText() {
return this.div;
}
get contentDiv() {
return this.div;
}
get isEditing() {
return editor_classPrivateFieldGet(_isEditing, this);
}
set isEditing(value) {
editor_classPrivateFieldSet(_isEditing, this, value);
if (!this.parent) {
return;
}
if (value) {
this.parent.setSelected(this);
this.parent.setActiveEditor(this);
} else {
this.parent.setActiveEditor(null);
}
}
setAspectRatio(width, height) {
editor_classPrivateFieldSet(_keepAspectRatio, this, true);
const aspectRatio = width / height;
const {
style
} = this.div;
style.aspectRatio = aspectRatio;
style.height = "auto";
}
static get MIN_SIZE() {
return 16;
}
static canCreateNewEmptyEditor() {
return true;
}
get telemetryInitialData() {
return {
action: "added"
};
}
get telemetryFinalData() {
return null;
}
_reportTelemetry(data) {
let mustWait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (mustWait) {
editor_classPrivateFieldGet(_telemetryTimeouts, this) || editor_classPrivateFieldSet(_telemetryTimeouts, this, new Map());
const {
action
} = data;
let timeout = editor_classPrivateFieldGet(_telemetryTimeouts, this).get(action);
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
this._reportTelemetry(data);
editor_classPrivateFieldGet(_telemetryTimeouts, this).delete(action);
if (editor_classPrivateFieldGet(_telemetryTimeouts, this).size === 0) {
editor_classPrivateFieldSet(_telemetryTimeouts, this, null);
}
}, AnnotationEditor._telemetryTimeout);
editor_classPrivateFieldGet(_telemetryTimeouts, this).set(action, timeout);
return;
}
data.type ||= this.editorType;
this._uiManager._eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data
}
});
}
show() {
let visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._isVisible;
this.div.classList.toggle("hidden", !visible);
this._isVisible = visible;
}
enable() {
if (this.div) {
this.div.tabIndex = 0;
}
editor_classPrivateFieldSet(_disabled, this, false);
}
disable() {
if (this.div) {
this.div.tabIndex = -1;
}
editor_classPrivateFieldSet(_disabled, this, true);
}
renderAnnotationElement(annotation) {
let content = annotation.container.querySelector(".annotationContent");
if (!content) {
content = document.createElement("div");
content.classList.add("annotationContent", this.editorType);
annotation.container.prepend(content);
} else if (content.nodeName === "CANVAS") {
const canvas = content;
content = document.createElement("div");
content.classList.add("annotationContent", this.editorType);
canvas.before(content);
}
return content;
}
resetAnnotationElement(annotation) {
const {
firstChild
} = annotation.container;
if (firstChild?.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) {
firstChild.remove();
}
}
}
_AnnotationEditor = AnnotationEditor;
function _translate(_ref, x, y) {
let [width, height] = _ref;
[x, y] = this.screenToPageTranslation(x, y);
this.x += x / width;
this.y += y / height;
this._onTranslating(this.x, this.y);
this.fixAndSetPosition();
}
function _rotatePoint(x, y, angle) {
switch (angle) {
case 90:
return [y, -x];
case 180:
return [-x, -y];
case 270:
return [-y, x];
default:
return [x, y];
}
}
function _getRotationMatrix(rotation) {
switch (rotation) {
case 90:
{
const [pageWidth, pageHeight] = this.pageDimensions;
return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];
}
case 180:
return [-1, 0, 0, -1];
case 270:
{
const [pageWidth, pageHeight] = this.pageDimensions;
return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];
}
default:
return [1, 0, 0, 1];
}
}
function _createResizers() {
if (editor_classPrivateFieldGet(_resizersDiv, this)) {
return;
}
editor_classPrivateFieldSet(_resizersDiv, this, document.createElement("div"));
editor_classPrivateFieldGet(_resizersDiv, this).classList.add("resizers");
const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"];
const signal = this._uiManager._signal;
for (const name of classes) {
const div = document.createElement("div");
editor_classPrivateFieldGet(_resizersDiv, this).append(div);
div.classList.add("resizer", name);
div.setAttribute("data-resizer-name", name);
div.addEventListener("pointerdown", editor_assertClassBrand(_AnnotationEditor_brand, this, _resizerPointerdown).bind(this, name), {
signal
});
div.addEventListener("contextmenu", noContextMenu, {
signal
});
div.tabIndex = -1;
}
this.div.prepend(editor_classPrivateFieldGet(_resizersDiv, this));
}
function _resizerPointerdown(name, event) {
event.preventDefault();
const {
isMac
} = util_FeatureTest.platform;
if (event.button !== 0 || event.ctrlKey && isMac) {
return;
}
editor_classPrivateFieldGet(editor_altText, this)?.toggle(false);
const savedDraggable = this._isDraggable;
this._isDraggable = false;
editor_classPrivateFieldSet(_lastPointerCoords, this, [event.screenX, event.screenY]);
const ac = new AbortController();
const signal = this._uiManager.combinedSignal(ac);
this.parent.togglePointerEvents(false);
window.addEventListener("pointermove", editor_assertClassBrand(_AnnotationEditor_brand, this, _resizerPointermove).bind(this, name), {
passive: true,
capture: true,
signal
});
window.addEventListener("touchmove", stopEvent, {
passive: false,
signal
});
window.addEventListener("contextmenu", noContextMenu, {
signal
});
editor_classPrivateFieldSet(_savedDimensions, this, {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
});
const savedParentCursor = this.parent.div.style.cursor;
const savedCursor = this.div.style.cursor;
this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor;
const pointerUpCallback = () => {
ac.abort();
this.parent.togglePointerEvents(true);
editor_classPrivateFieldGet(editor_altText, this)?.toggle(true);
this._isDraggable = savedDraggable;
this.parent.div.style.cursor = savedParentCursor;
this.div.style.cursor = savedCursor;
editor_assertClassBrand(_AnnotationEditor_brand, this, _addResizeToUndoStack).call(this);
};
window.addEventListener("pointerup", pointerUpCallback, {
signal
});
window.addEventListener("blur", pointerUpCallback, {
signal
});
}
function _resize(x, y, width, height) {
this.width = width;
this.height = height;
this.x = x;
this.y = y;
const [parentWidth, parentHeight] = this.parentDimensions;
this.setDims(parentWidth * width, parentHeight * height);
this.fixAndSetPosition();
this._onResized();
}
function _addResizeToUndoStack() {
if (!editor_classPrivateFieldGet(_savedDimensions, this)) {
return;
}
const {
savedX,
savedY,
savedWidth,
savedHeight
} = editor_classPrivateFieldGet(_savedDimensions, this);
editor_classPrivateFieldSet(_savedDimensions, this, null);
const newX = this.x;
const newY = this.y;
const newWidth = this.width;
const newHeight = this.height;
if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) {
return;
}
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "sizeChanged",
editorType: this.constructor.name,
page: this.pageIndex + 1,
value: {
x: savedX,
y: savedY,
width: savedWidth,
height: savedHeight
}
});
this.addCommands({
cmd: editor_assertClassBrand(_AnnotationEditor_brand, this, _resize).bind(this, newX, newY, newWidth, newHeight),
undo: editor_assertClassBrand(_AnnotationEditor_brand, this, _resize).bind(this, savedX, savedY, savedWidth, savedHeight),
mustExec: true
});
}
function _resizerPointermove(name, event) {
const [parentWidth, parentHeight] = this.parentDimensions;
const savedX = this.x;
const savedY = this.y;
const savedWidth = this.width;
const savedHeight = this.height;
const minWidth = _AnnotationEditor.MIN_SIZE / parentWidth;
const minHeight = _AnnotationEditor.MIN_SIZE / parentHeight;
const rotationMatrix = editor_assertClassBrand(_AnnotationEditor_brand, this, _getRotationMatrix).call(this, this.rotation);
const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];
const invRotationMatrix = editor_assertClassBrand(_AnnotationEditor_brand, this, _getRotationMatrix).call(this, 360 - this.rotation);
const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];
let getPoint;
let getOpposite;
let isDiagonal = false;
let isHorizontal = false;
switch (name) {
case "topLeft":
isDiagonal = true;
getPoint = (w, h) => [0, 0];
getOpposite = (w, h) => [w, h];
break;
case "topMiddle":
getPoint = (w, h) => [w / 2, 0];
getOpposite = (w, h) => [w / 2, h];
break;
case "topRight":
isDiagonal = true;
getPoint = (w, h) => [w, 0];
getOpposite = (w, h) => [0, h];
break;
case "middleRight":
isHorizontal = true;
getPoint = (w, h) => [w, h / 2];
getOpposite = (w, h) => [0, h / 2];
break;
case "bottomRight":
isDiagonal = true;
getPoint = (w, h) => [w, h];
getOpposite = (w, h) => [0, 0];
break;
case "bottomMiddle":
getPoint = (w, h) => [w / 2, h];
getOpposite = (w, h) => [w / 2, 0];
break;
case "bottomLeft":
isDiagonal = true;
getPoint = (w, h) => [0, h];
getOpposite = (w, h) => [w, 0];
break;
case "middleLeft":
isHorizontal = true;
getPoint = (w, h) => [0, h / 2];
getOpposite = (w, h) => [w, h / 2];
break;
}
const point = getPoint(savedWidth, savedHeight);
const oppositePoint = getOpposite(savedWidth, savedHeight);
let transfOppositePoint = transf(...oppositePoint);
const oppositeX = _AnnotationEditor._round(savedX + transfOppositePoint[0]);
const oppositeY = _AnnotationEditor._round(savedY + transfOppositePoint[1]);
let ratioX = 1;
let ratioY = 1;
let deltaX, deltaY;
if (!event.fromKeyboard) {
const {
screenX,
screenY
} = event;
const [lastScreenX, lastScreenY] = editor_classPrivateFieldGet(_lastPointerCoords, this);
[deltaX, deltaY] = this.screenToPageTranslation(screenX - lastScreenX, screenY - lastScreenY);
editor_classPrivateFieldGet(_lastPointerCoords, this)[0] = screenX;
editor_classPrivateFieldGet(_lastPointerCoords, this)[1] = screenY;
} else {
({
deltaX,
deltaY
} = event);
}
[deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);
if (isDiagonal) {
const oldDiag = Math.hypot(savedWidth, savedHeight);
ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);
} else if (isHorizontal) {
ratioX = MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) / savedWidth;
} else {
ratioY = MathClamp(Math.abs(oppositePoint[1] - point[1] - deltaY), minHeight, 1) / savedHeight;
}
const newWidth = _AnnotationEditor._round(savedWidth * ratioX);
const newHeight = _AnnotationEditor._round(savedHeight * ratioY);
transfOppositePoint = transf(...getOpposite(newWidth, newHeight));
const newX = oppositeX - transfOppositePoint[0];
const newY = oppositeY - transfOppositePoint[1];
editor_classPrivateFieldGet(_initialRect, this) || editor_classPrivateFieldSet(_initialRect, this, [this.x, this.y, this.width, this.height]);
this.width = newWidth;
this.height = newHeight;
this.x = newX;
this.y = newY;
this.setDims(parentWidth * newWidth, parentHeight * newHeight);
this.fixAndSetPosition();
this._onResizing();
}
function _touchPinchStartCallback() {
editor_classPrivateFieldSet(_savedDimensions, this, {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
});
editor_classPrivateFieldGet(editor_altText, this)?.toggle(false);
this.parent.togglePointerEvents(false);
}
function _touchPinchCallback(_origin, prevDistance, distance) {
const slowDownFactor = 0.7;
let factor = slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor;
if (factor === 1) {
return;
}
const rotationMatrix = editor_assertClassBrand(_AnnotationEditor_brand, this, _getRotationMatrix).call(this, this.rotation);
const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];
const [parentWidth, parentHeight] = this.parentDimensions;
const savedX = this.x;
const savedY = this.y;
const savedWidth = this.width;
const savedHeight = this.height;
const minWidth = _AnnotationEditor.MIN_SIZE / parentWidth;
const minHeight = _AnnotationEditor.MIN_SIZE / parentHeight;
factor = Math.max(Math.min(factor, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight);
const newWidth = _AnnotationEditor._round(savedWidth * factor);
const newHeight = _AnnotationEditor._round(savedHeight * factor);
if (newWidth === savedWidth && newHeight === savedHeight) {
return;
}
editor_classPrivateFieldGet(_initialRect, this) || editor_classPrivateFieldSet(_initialRect, this, [savedX, savedY, savedWidth, savedHeight]);
const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2);
const centerX = _AnnotationEditor._round(savedX + transfCenterPoint[0]);
const centerY = _AnnotationEditor._round(savedY + transfCenterPoint[1]);
const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2);
this.x = centerX - newTransfCenterPoint[0];
this.y = centerY - newTransfCenterPoint[1];
this.width = newWidth;
this.height = newHeight;
this.setDims(parentWidth * newWidth, parentHeight * newHeight);
this.fixAndSetPosition();
this._onResizing();
}
function _touchPinchEndCallback() {
editor_classPrivateFieldGet(editor_altText, this)?.toggle(true);
this.parent.togglePointerEvents(true);
editor_assertClassBrand(_AnnotationEditor_brand, this, _addResizeToUndoStack).call(this);
}
function _selectOnPointerEvent(event) {
const {
isMac
} = util_FeatureTest.platform;
if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {
this.parent.toggleSelected(this);
} else {
this.parent.setSelected(this);
}
}
function _setUpDragSession(event) {
const {
isSelected
} = this;
this._uiManager.setUpDragSession();
let hasDraggingStarted = false;
const ac = new AbortController();
const signal = this._uiManager.combinedSignal(ac);
const opts = {
capture: true,
passive: false,
signal
};
const cancelDrag = e => {
ac.abort();
editor_classPrivateFieldSet(_dragPointerId, this, null);
editor_classPrivateFieldSet(_hasBeenClicked, this, false);
if (!this._uiManager.endDragSession()) {
editor_assertClassBrand(_AnnotationEditor_brand, this, _selectOnPointerEvent).call(this, e);
}
if (hasDraggingStarted) {
this._onStopDragging();
}
};
if (isSelected) {
editor_classPrivateFieldSet(_prevDragX, this, event.clientX);
editor_classPrivateFieldSet(_prevDragY, this, event.clientY);
editor_classPrivateFieldSet(_dragPointerId, this, event.pointerId);
editor_classPrivateFieldSet(_dragPointerType, this, event.pointerType);
window.addEventListener("pointermove", e => {
if (!hasDraggingStarted) {
hasDraggingStarted = true;
this._onStartDragging();
}
const {
clientX: x,
clientY: y,
pointerId
} = e;
if (pointerId !== editor_classPrivateFieldGet(_dragPointerId, this)) {
stopEvent(e);
return;
}
const [tx, ty] = this.screenToPageTranslation(x - editor_classPrivateFieldGet(_prevDragX, this), y - editor_classPrivateFieldGet(_prevDragY, this));
editor_classPrivateFieldSet(_prevDragX, this, x);
editor_classPrivateFieldSet(_prevDragY, this, y);
this._uiManager.dragSelectedEditors(tx, ty);
}, opts);
window.addEventListener("touchmove", stopEvent, opts);
window.addEventListener("pointerdown", e => {
if (e.pointerType === editor_classPrivateFieldGet(_dragPointerType, this)) {
if (editor_classPrivateFieldGet(_touchManager, this) || e.isPrimary) {
cancelDrag(e);
}
}
stopEvent(e);
}, opts);
}
const pointerUpCallback = e => {
if (!editor_classPrivateFieldGet(_dragPointerId, this) || editor_classPrivateFieldGet(_dragPointerId, this) === e.pointerId) {
cancelDrag(e);
return;
}
stopEvent(e);
};
window.addEventListener("pointerup", pointerUpCallback, {
signal
});
window.addEventListener("blur", pointerUpCallback, {
signal
});
}
function _addFocusListeners() {
if (editor_classPrivateFieldGet(_focusAC, this) || !this.div) {
return;
}
editor_classPrivateFieldSet(_focusAC, this, new AbortController());
const signal = this._uiManager.combinedSignal(editor_classPrivateFieldGet(_focusAC, this));
this.div.addEventListener("focusin", this.focusin.bind(this), {
signal
});
this.div.addEventListener("focusout", this.focusout.bind(this), {
signal
});
}
function _resizerKeydown(event) {
_AnnotationEditor._resizerKeyboardManager.exec(this, event);
}
function _resizerBlur(event) {
if (editor_classPrivateFieldGet(_isResizerEnabledForKeyboard, this) && event.relatedTarget?.parentNode !== editor_classPrivateFieldGet(_resizersDiv, this)) {
editor_assertClassBrand(_AnnotationEditor_brand, this, _stopResizing).call(this);
}
}
function _resizerFocus(name) {
editor_classPrivateFieldSet(_focusedResizerName, this, editor_classPrivateFieldGet(_isResizerEnabledForKeyboard, this) ? name : "");
}
function _setResizerTabIndex(value) {
if (!editor_classPrivateFieldGet(_allResizerDivs, this)) {
return;
}
for (const div of editor_classPrivateFieldGet(_allResizerDivs, this)) {
div.tabIndex = value;
}
}
function _stopResizing() {
editor_classPrivateFieldSet(_isResizerEnabledForKeyboard, this, false);
editor_assertClassBrand(_AnnotationEditor_brand, this, _setResizerTabIndex).call(this, -1);
editor_assertClassBrand(_AnnotationEditor_brand, this, _addResizeToUndoStack).call(this);
}
editor_defineProperty(AnnotationEditor, "_l10n", null);
editor_defineProperty(AnnotationEditor, "_l10nResizer", null);
editor_defineProperty(AnnotationEditor, "_borderLineWidth", -1);
editor_defineProperty(AnnotationEditor, "_colorManager", new ColorManager());
editor_defineProperty(AnnotationEditor, "_zIndex", 1);
editor_defineProperty(AnnotationEditor, "_telemetryTimeout", 1000);
class FakeEditor extends AnnotationEditor {
constructor(params) {
super(params);
this.annotationElementId = params.annotationElementId;
this.deleted = true;
}
serialize() {
return this.serializeDeleted();
}
}
;// ./src/shared/murmurhash3.js
const SEED = 0xc3d2e1f0;
const MASK_HIGH = 0xffff0000;
const MASK_LOW = 0xffff;
class MurmurHash3_64 {
constructor(seed) {
this.h1 = seed ? seed & 0xffffffff : SEED;
this.h2 = seed ? seed & 0xffffffff : SEED;
}
update(input) {
let data, length;
if (typeof input === "string") {
data = new Uint8Array(input.length * 2);
length = 0;
for (let i = 0, ii = input.length; i < ii; i++) {
const code = input.charCodeAt(i);
if (code <= 0xff) {
data[length++] = code;
} else {
data[length++] = code >>> 8;
data[length++] = code & 0xff;
}
}
} else if (ArrayBuffer.isView(input)) {
data = input.slice();
length = data.byteLength;
} else {
throw new Error("Invalid data format, must be a string or TypedArray.");
}
const blockCounts = length >> 2;
const tailLength = length - blockCounts * 4;
const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);
let k1 = 0,
k2 = 0;
let h1 = this.h1,
h2 = this.h2;
const C1 = 0xcc9e2d51,
C2 = 0x1b873593;
const C1_LOW = C1 & MASK_LOW,
C2_LOW = C2 & MASK_LOW;
for (let i = 0; i < blockCounts; i++) {
if (i & 1) {
k1 = dataUint32[i];
k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
k1 = k1 << 15 | k1 >>> 17;
k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
h1 ^= k1;
h1 = h1 << 13 | h1 >>> 19;
h1 = h1 * 5 + 0xe6546b64;
} else {
k2 = dataUint32[i];
k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;
k2 = k2 << 15 | k2 >>> 17;
k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;
h2 ^= k2;
h2 = h2 << 13 | h2 >>> 19;
h2 = h2 * 5 + 0xe6546b64;
}
}
k1 = 0;
switch (tailLength) {
case 3:
k1 ^= data[blockCounts * 4 + 2] << 16;
case 2:
k1 ^= data[blockCounts * 4 + 1] << 8;
case 1:
k1 ^= data[blockCounts * 4];
k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;
k1 = k1 << 15 | k1 >>> 17;
k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
if (blockCounts & 1) {
h1 ^= k1;
} else {
h2 ^= k1;
}
}
this.h1 = h1;
this.h2 = h2;
}
hexdigest() {
let h1 = this.h1,
h2 = this.h2;
h1 ^= h2 >>> 1;
h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;
h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;
h1 ^= h2 >>> 1;
h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;
h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;
h1 ^= h2 >>> 1;
return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0");
}
}
;// ./src/display/annotation_storage.js
function annotation_storage_classPrivateMethodInitSpec(e, a) { annotation_storage_checkPrivateRedeclaration(e, a), a.add(e); }
function annotation_storage_classPrivateFieldInitSpec(e, t, a) { annotation_storage_checkPrivateRedeclaration(e, t), t.set(e, a); }
function annotation_storage_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function annotation_storage_classPrivateFieldSet(s, a, r) { return s.set(annotation_storage_assertClassBrand(s, a), r), r; }
function annotation_storage_classPrivateFieldGet(s, a) { return s.get(annotation_storage_assertClassBrand(s, a)); }
function annotation_storage_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const SerializableEmpty = Object.freeze({
map: null,
hash: "",
transfer: undefined
});
var _modified = /*#__PURE__*/new WeakMap();
var _modifiedIds = /*#__PURE__*/new WeakMap();
var _storage = /*#__PURE__*/new WeakMap();
var _AnnotationStorage_brand = /*#__PURE__*/new WeakSet();
class AnnotationStorage {
constructor() {
annotation_storage_classPrivateMethodInitSpec(this, _AnnotationStorage_brand);
annotation_storage_classPrivateFieldInitSpec(this, _modified, false);
annotation_storage_classPrivateFieldInitSpec(this, _modifiedIds, null);
annotation_storage_classPrivateFieldInitSpec(this, _storage, new Map());
this.onSetModified = null;
this.onResetModified = null;
this.onAnnotationEditor = null;
}
getValue(key, defaultValue) {
const value = annotation_storage_classPrivateFieldGet(_storage, this).get(key);
if (value === undefined) {
return defaultValue;
}
return Object.assign(defaultValue, value);
}
getRawValue(key) {
return annotation_storage_classPrivateFieldGet(_storage, this).get(key);
}
remove(key) {
annotation_storage_classPrivateFieldGet(_storage, this).delete(key);
if (annotation_storage_classPrivateFieldGet(_storage, this).size === 0) {
this.resetModified();
}
if (typeof this.onAnnotationEditor === "function") {
for (const value of annotation_storage_classPrivateFieldGet(_storage, this).values()) {
if (value instanceof AnnotationEditor) {
return;
}
}
this.onAnnotationEditor(null);
}
}
setValue(key, value) {
const obj = annotation_storage_classPrivateFieldGet(_storage, this).get(key);
let modified = false;
if (obj !== undefined) {
for (const [entry, val] of Object.entries(value)) {
if (obj[entry] !== val) {
modified = true;
obj[entry] = val;
}
}
} else {
modified = true;
annotation_storage_classPrivateFieldGet(_storage, this).set(key, value);
}
if (modified) {
annotation_storage_assertClassBrand(_AnnotationStorage_brand, this, _setModified).call(this);
}
if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") {
this.onAnnotationEditor(value.constructor._type);
}
}
has(key) {
return annotation_storage_classPrivateFieldGet(_storage, this).has(key);
}
get size() {
return annotation_storage_classPrivateFieldGet(_storage, this).size;
}
resetModified() {
if (annotation_storage_classPrivateFieldGet(_modified, this)) {
annotation_storage_classPrivateFieldSet(_modified, this, false);
if (typeof this.onResetModified === "function") {
this.onResetModified();
}
}
}
get print() {
return new PrintAnnotationStorage(this);
}
get serializable() {
if (annotation_storage_classPrivateFieldGet(_storage, this).size === 0) {
return SerializableEmpty;
}
const map = new Map(),
hash = new MurmurHash3_64(),
transfer = [];
const context = Object.create(null);
let hasBitmap = false;
for (const [key, val] of annotation_storage_classPrivateFieldGet(_storage, this)) {
const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val;
if (serialized) {
map.set(key, serialized);
hash.update(`${key}:${JSON.stringify(serialized)}`);
hasBitmap ||= !!serialized.bitmap;
}
}
if (hasBitmap) {
for (const value of map.values()) {
if (value.bitmap) {
transfer.push(value.bitmap);
}
}
}
return map.size > 0 ? {
map,
hash: hash.hexdigest(),
transfer
} : SerializableEmpty;
}
get editorStats() {
let stats = null;
const typeToEditor = new Map();
for (const value of annotation_storage_classPrivateFieldGet(_storage, this).values()) {
if (!(value instanceof AnnotationEditor)) {
continue;
}
const editorStats = value.telemetryFinalData;
if (!editorStats) {
continue;
}
const {
type
} = editorStats;
if (!typeToEditor.has(type)) {
typeToEditor.set(type, Object.getPrototypeOf(value).constructor);
}
stats ||= Object.create(null);
const map = stats[type] ||= new Map();
for (const [key, val] of Object.entries(editorStats)) {
if (key === "type") {
continue;
}
let counters = map.get(key);
if (!counters) {
counters = new Map();
map.set(key, counters);
}
const count = counters.get(val) ?? 0;
counters.set(val, count + 1);
}
}
for (const [type, editor] of typeToEditor) {
stats[type] = editor.computeTelemetryFinalData(stats[type]);
}
return stats;
}
resetModifiedIds() {
annotation_storage_classPrivateFieldSet(_modifiedIds, this, null);
}
get modifiedIds() {
if (annotation_storage_classPrivateFieldGet(_modifiedIds, this)) {
return annotation_storage_classPrivateFieldGet(_modifiedIds, this);
}
const ids = [];
for (const value of annotation_storage_classPrivateFieldGet(_storage, this).values()) {
if (!(value instanceof AnnotationEditor) || !value.annotationElementId || !value.serialize()) {
continue;
}
ids.push(value.annotationElementId);
}
return annotation_storage_classPrivateFieldSet(_modifiedIds, this, {
ids: new Set(ids),
hash: ids.join(",")
});
}
[Symbol.iterator]() {
return annotation_storage_classPrivateFieldGet(_storage, this).entries();
}
}
function _setModified() {
if (!annotation_storage_classPrivateFieldGet(_modified, this)) {
annotation_storage_classPrivateFieldSet(_modified, this, true);
if (typeof this.onSetModified === "function") {
this.onSetModified();
}
}
}
var _serializable = /*#__PURE__*/new WeakMap();
class PrintAnnotationStorage extends AnnotationStorage {
constructor(parent) {
super();
annotation_storage_classPrivateFieldInitSpec(this, _serializable, void 0);
const {
map,
hash,
transfer
} = parent.serializable;
const clone = structuredClone(map, transfer ? {
transfer
} : null);
annotation_storage_classPrivateFieldSet(_serializable, this, {
map: clone,
hash,
transfer
});
}
get print() {
unreachable("Should not call PrintAnnotationStorage.print");
}
get serializable() {
return annotation_storage_classPrivateFieldGet(_serializable, this);
}
get modifiedIds() {
return shadow(this, "modifiedIds", {
ids: new Set(),
hash: ""
});
}
}
;// ./src/display/font_loader.js
function font_loader_classPrivateFieldInitSpec(e, t, a) { font_loader_checkPrivateRedeclaration(e, t), t.set(e, a); }
function font_loader_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function font_loader_classPrivateFieldGet(s, a) { return s.get(font_loader_assertClassBrand(s, a)); }
function font_loader_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _systemFonts = /*#__PURE__*/new WeakMap();
class FontLoader {
constructor(_ref) {
let {
ownerDocument = globalThis.document,
styleElement = null
} = _ref;
font_loader_classPrivateFieldInitSpec(this, _systemFonts, new Set());
this._document = ownerDocument;
this.nativeFontFaces = new Set();
this.styleElement = null;
this.loadingRequests = [];
this.loadTestFontId = 0;
}
addNativeFontFace(nativeFontFace) {
this.nativeFontFaces.add(nativeFontFace);
this._document.fonts.add(nativeFontFace);
}
removeNativeFontFace(nativeFontFace) {
this.nativeFontFaces.delete(nativeFontFace);
this._document.fonts.delete(nativeFontFace);
}
insertRule(rule) {
if (!this.styleElement) {
this.styleElement = this._document.createElement("style");
this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement);
}
const styleSheet = this.styleElement.sheet;
styleSheet.insertRule(rule, styleSheet.cssRules.length);
}
clear() {
for (const nativeFontFace of this.nativeFontFaces) {
this._document.fonts.delete(nativeFontFace);
}
this.nativeFontFaces.clear();
font_loader_classPrivateFieldGet(_systemFonts, this).clear();
if (this.styleElement) {
this.styleElement.remove();
this.styleElement = null;
}
}
async loadSystemFont(_ref2) {
let {
systemFontInfo: info,
disableFontFace,
_inspectFont
} = _ref2;
if (!info || font_loader_classPrivateFieldGet(_systemFonts, this).has(info.loadedName)) {
return;
}
assert(!disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set.");
if (this.isFontLoadingAPISupported) {
const {
loadedName,
src,
style
} = info;
const fontFace = new FontFace(loadedName, src, style);
this.addNativeFontFace(fontFace);
try {
await fontFace.load();
font_loader_classPrivateFieldGet(_systemFonts, this).add(loadedName);
_inspectFont?.(info);
} catch {
warn(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`);
this.removeNativeFontFace(fontFace);
}
return;
}
unreachable("Not implemented: loadSystemFont without the Font Loading API.");
}
async bind(font) {
if (font.attached || font.missingFile && !font.systemFontInfo) {
return;
}
font.attached = true;
if (font.systemFontInfo) {
await this.loadSystemFont(font);
return;
}
if (this.isFontLoadingAPISupported) {
const nativeFontFace = font.createNativeFontFace();
if (nativeFontFace) {
this.addNativeFontFace(nativeFontFace);
try {
await nativeFontFace.loaded;
} catch (ex) {
warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
font.disableFontFace = true;
throw ex;
}
}
return;
}
const rule = font.createFontFaceRule();
if (rule) {
this.insertRule(rule);
if (this.isSyncFontLoadingSupported) {
return;
}
await new Promise(resolve => {
const request = this._queueLoadingCallback(resolve);
this._prepareFontLoadEvent(font, request);
});
}
}
get isFontLoadingAPISupported() {
const hasFonts = !!this._document?.fonts;
return shadow(this, "isFontLoadingAPISupported", hasFonts);
}
get isSyncFontLoadingSupported() {
return shadow(this, "isSyncFontLoadingSupported", isNodeJS || util_FeatureTest.platform.isFirefox);
}
_queueLoadingCallback(callback) {
function completeRequest() {
assert(!request.done, "completeRequest() cannot be called twice.");
request.done = true;
while (loadingRequests.length > 0 && loadingRequests[0].done) {
const otherRequest = loadingRequests.shift();
setTimeout(otherRequest.callback, 0);
}
}
const {
loadingRequests
} = this;
const request = {
done: false,
complete: completeRequest,
callback
};
loadingRequests.push(request);
return request;
}
get _loadTestFont() {
const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
return shadow(this, "_loadTestFont", testFont);
}
_prepareFontLoadEvent(font, request) {
function int32(data, offset) {
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
}
function spliceString(s, offset, remove, insert) {
const chunk1 = s.substring(0, offset);
const chunk2 = s.substring(offset + remove);
return chunk1 + insert + chunk2;
}
let i, ii;
const canvas = this._document.createElement("canvas");
canvas.width = 1;
canvas.height = 1;
const ctx = canvas.getContext("2d");
let called = 0;
function isFontReady(name, callback) {
if (++called > 30) {
warn("Load test font never loaded.");
callback();
return;
}
ctx.font = "30px " + name;
ctx.fillText(".", 0, 20);
const imageData = ctx.getImageData(0, 0, 1, 1);
if (imageData.data[3] > 0) {
callback();
return;
}
setTimeout(isFontReady.bind(null, name, callback));
}
const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
let data = this._loadTestFont;
const COMMENT_OFFSET = 976;
data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
const CFF_CHECKSUM_OFFSET = 16;
const XXXX_VALUE = 0x58585858;
let checksum = int32(data, CFF_CHECKSUM_OFFSET);
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
}
if (i < loadTestFontId.length) {
checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
}
data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));
const url = `url(data:font/opentype;base64,${btoa(data)});`;
const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
this.insertRule(rule);
const div = this._document.createElement("div");
div.style.visibility = "hidden";
div.style.width = div.style.height = "10px";
div.style.position = "absolute";
div.style.top = div.style.left = "0px";
for (const name of [font.loadedName, loadTestFontId]) {
const span = this._document.createElement("span");
span.textContent = "Hi";
span.style.fontFamily = name;
div.append(span);
}
this._document.body.append(div);
isFontReady(loadTestFontId, () => {
div.remove();
request.complete();
});
}
}
class FontFaceObject {
constructor(translatedData) {
let inspectFont = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
this.compiledGlyphs = Object.create(null);
for (const i in translatedData) {
this[i] = translatedData[i];
}
this._inspectFont = inspectFont;
}
createNativeFontFace() {
if (!this.data || this.disableFontFace) {
return null;
}
let nativeFontFace;
if (!this.cssFontInfo) {
nativeFontFace = new FontFace(this.loadedName, this.data, {});
} else {
const css = {
weight: this.cssFontInfo.fontWeight
};
if (this.cssFontInfo.italicAngle) {
css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;
}
nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
}
this._inspectFont?.(this);
return nativeFontFace;
}
createFontFaceRule() {
if (!this.data || this.disableFontFace) {
return null;
}
const url = `url(data:${this.mimetype};base64,${toBase64Util(this.data)});`;
let rule;
if (!this.cssFontInfo) {
rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
} else {
let css = `font-weight: ${this.cssFontInfo.fontWeight};`;
if (this.cssFontInfo.italicAngle) {
css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;
}
rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`;
}
this._inspectFont?.(this, url);
return rule;
}
getPathGenerator(objs, character) {
if (this.compiledGlyphs[character] !== undefined) {
return this.compiledGlyphs[character];
}
const objId = this.loadedName + "_path_" + character;
let cmds;
try {
cmds = objs.get(objId);
} catch (ex) {
warn(`getPathGenerator - ignoring character: "${ex}".`);
}
const path = new Path2D(cmds || "");
if (!this.fontExtraProperties) {
objs.delete(objId);
}
return this.compiledGlyphs[character] = path;
}
}
;// ./src/display/api_utils.js
function api_utils_classPrivateFieldInitSpec(e, t, a) { api_utils_checkPrivateRedeclaration(e, t), t.set(e, a); }
function api_utils_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function api_utils_classPrivateFieldGet(s, a) { return s.get(api_utils_assertClassBrand(s, a)); }
function api_utils_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function getUrlProp(val, baseHref) {
if (val instanceof URL) {
return val.href;
}
if (typeof val === "string") {
if (isNodeJS) {
return val;
}
if (baseHref) {
return new URL(val, window.location.origin + baseHref).href;
}
const url = URL.parse(val, window.location);
if (url) {
return url.href;
}
}
throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property.");
}
function getDataProp(val) {
if (isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) {
throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");
}
if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {
return val;
}
if (typeof val === "string") {
return stringToBytes(val);
}
if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === "object" && !isNaN(val?.length)) {
return new Uint8Array(val);
}
throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property.");
}
function getFactoryUrlProp(val) {
if (typeof val !== "string") {
return null;
}
if (val.endsWith("/")) {
return val;
}
throw new Error(`Invalid factory url: "${val}" must include trailing slash.`);
}
const isRefProxy = v => typeof v === "object" && Number.isInteger(v?.num) && v.num >= 0 && Number.isInteger(v?.gen) && v.gen >= 0;
const isNameProxy = v => typeof v === "object" && typeof v?.name === "string";
const isValidExplicitDest = _isValidExplicitDest.bind(null, isRefProxy, isNameProxy);
var _listeners = /*#__PURE__*/new WeakMap();
var _deferred = /*#__PURE__*/new WeakMap();
class LoopbackPort {
constructor() {
api_utils_classPrivateFieldInitSpec(this, _listeners, new Map());
api_utils_classPrivateFieldInitSpec(this, _deferred, Promise.resolve());
}
postMessage(obj, transfer) {
const event = {
data: structuredClone(obj, transfer ? {
transfer
} : null)
};
api_utils_classPrivateFieldGet(_deferred, this).then(() => {
for (const [listener] of api_utils_classPrivateFieldGet(_listeners, this)) {
listener.call(this, event);
}
});
}
addEventListener(name, listener) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
let rmAbort = null;
if (options?.signal instanceof AbortSignal) {
const {
signal
} = options;
if (signal.aborted) {
warn("LoopbackPort - cannot use an `aborted` signal.");
return;
}
const onAbort = () => this.removeEventListener(name, listener);
rmAbort = () => signal.removeEventListener("abort", onAbort);
signal.addEventListener("abort", onAbort);
}
api_utils_classPrivateFieldGet(_listeners, this).set(listener, rmAbort);
}
removeEventListener(name, listener) {
const rmAbort = api_utils_classPrivateFieldGet(_listeners, this).get(listener);
rmAbort?.();
api_utils_classPrivateFieldGet(_listeners, this).delete(listener);
}
terminate() {
for (const [, rmAbort] of api_utils_classPrivateFieldGet(_listeners, this)) {
rmAbort?.();
}
api_utils_classPrivateFieldGet(_listeners, this).clear();
}
}
;// ./src/shared/message_handler.js
function message_handler_classPrivateMethodInitSpec(e, a) { message_handler_checkPrivateRedeclaration(e, a), a.add(e); }
function message_handler_classPrivateFieldInitSpec(e, t, a) { message_handler_checkPrivateRedeclaration(e, t), t.set(e, a); }
function message_handler_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function message_handler_classPrivateFieldSet(s, a, r) { return s.set(message_handler_assertClassBrand(s, a), r), r; }
function message_handler_classPrivateFieldGet(s, a) { return s.get(message_handler_assertClassBrand(s, a)); }
function message_handler_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const CallbackKind = {
DATA: 1,
ERROR: 2
};
const StreamKind = {
CANCEL: 1,
CANCEL_COMPLETE: 2,
CLOSE: 3,
ENQUEUE: 4,
ERROR: 5,
PULL: 6,
PULL_COMPLETE: 7,
START_COMPLETE: 8
};
function onFn() {}
function wrapReason(ex) {
if (ex instanceof AbortException || ex instanceof InvalidPDFException || ex instanceof PasswordException || ex instanceof ResponseException || ex instanceof UnknownErrorException) {
return ex;
}
if (!(ex instanceof Error || typeof ex === "object" && ex !== null)) {
unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
}
switch (ex.name) {
case "AbortException":
return new AbortException(ex.message);
case "InvalidPDFException":
return new InvalidPDFException(ex.message);
case "PasswordException":
return new PasswordException(ex.message, ex.code);
case "ResponseException":
return new ResponseException(ex.message, ex.status, ex.missing);
case "UnknownErrorException":
return new UnknownErrorException(ex.message, ex.details);
}
return new UnknownErrorException(ex.message, ex.toString());
}
var _messageAC = /*#__PURE__*/new WeakMap();
var _MessageHandler_brand = /*#__PURE__*/new WeakSet();
class MessageHandler {
constructor(_sourceName, _targetName, _comObj) {
message_handler_classPrivateMethodInitSpec(this, _MessageHandler_brand);
message_handler_classPrivateFieldInitSpec(this, _messageAC, new AbortController());
this.sourceName = _sourceName;
this.targetName = _targetName;
this.comObj = _comObj;
this.callbackId = 1;
this.streamId = 1;
this.streamSinks = Object.create(null);
this.streamControllers = Object.create(null);
this.callbackCapabilities = Object.create(null);
this.actionHandler = Object.create(null);
_comObj.addEventListener("message", message_handler_assertClassBrand(_MessageHandler_brand, this, _onMessage).bind(this), {
signal: message_handler_classPrivateFieldGet(_messageAC, this).signal
});
}
on(actionName, handler) {
const ah = this.actionHandler;
if (ah[actionName]) {
throw new Error(`There is already an actionName called "${actionName}"`);
}
ah[actionName] = handler;
}
send(actionName, data, transfers) {
this.comObj.postMessage({
sourceName: this.sourceName,
targetName: this.targetName,
action: actionName,
data
}, transfers);
}
sendWithPromise(actionName, data, transfers) {
const callbackId = this.callbackId++;
const capability = Promise.withResolvers();
this.callbackCapabilities[callbackId] = capability;
try {
this.comObj.postMessage({
sourceName: this.sourceName,
targetName: this.targetName,
action: actionName,
callbackId,
data
}, transfers);
} catch (ex) {
capability.reject(ex);
}
return capability.promise;
}
sendWithStream(actionName, data, queueingStrategy, transfers) {
const streamId = this.streamId++,
sourceName = this.sourceName,
targetName = this.targetName,
comObj = this.comObj;
return new ReadableStream({
start: controller => {
const startCapability = Promise.withResolvers();
this.streamControllers[streamId] = {
controller,
startCall: startCapability,
pullCall: null,
cancelCall: null,
isClosed: false
};
comObj.postMessage({
sourceName,
targetName,
action: actionName,
streamId,
data,
desiredSize: controller.desiredSize
}, transfers);
return startCapability.promise;
},
pull: controller => {
const pullCapability = Promise.withResolvers();
this.streamControllers[streamId].pullCall = pullCapability;
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.PULL,
streamId,
desiredSize: controller.desiredSize
});
return pullCapability.promise;
},
cancel: reason => {
assert(reason instanceof Error, "cancel must have a valid reason");
const cancelCapability = Promise.withResolvers();
this.streamControllers[streamId].cancelCall = cancelCapability;
this.streamControllers[streamId].isClosed = true;
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.CANCEL,
streamId,
reason: wrapReason(reason)
});
return cancelCapability.promise;
}
}, queueingStrategy);
}
destroy() {
message_handler_classPrivateFieldGet(_messageAC, this)?.abort();
message_handler_classPrivateFieldSet(_messageAC, this, null);
}
}
function _onMessage(_ref) {
let {
data
} = _ref;
if (data.targetName !== this.sourceName) {
return;
}
if (data.stream) {
message_handler_assertClassBrand(_MessageHandler_brand, this, _processStreamMessage).call(this, data);
return;
}
if (data.callback) {
const callbackId = data.callbackId;
const capability = this.callbackCapabilities[callbackId];
if (!capability) {
throw new Error(`Cannot resolve callback ${callbackId}`);
}
delete this.callbackCapabilities[callbackId];
if (data.callback === CallbackKind.DATA) {
capability.resolve(data.data);
} else if (data.callback === CallbackKind.ERROR) {
capability.reject(wrapReason(data.reason));
} else {
throw new Error("Unexpected callback case");
}
return;
}
const action = this.actionHandler[data.action];
if (!action) {
throw new Error(`Unknown action from worker: ${data.action}`);
}
if (data.callbackId) {
const sourceName = this.sourceName,
targetName = data.sourceName,
comObj = this.comObj;
Promise.try(action, data.data).then(function (result) {
comObj.postMessage({
sourceName,
targetName,
callback: CallbackKind.DATA,
callbackId: data.callbackId,
data: result
});
}, function (reason) {
comObj.postMessage({
sourceName,
targetName,
callback: CallbackKind.ERROR,
callbackId: data.callbackId,
reason: wrapReason(reason)
});
});
return;
}
if (data.streamId) {
message_handler_assertClassBrand(_MessageHandler_brand, this, _createStreamSink).call(this, data);
return;
}
action(data.data);
}
function _createStreamSink(data) {
const streamId = data.streamId,
sourceName = this.sourceName,
targetName = data.sourceName,
comObj = this.comObj;
const self = this,
action = this.actionHandler[data.action];
const streamSink = {
enqueue(chunk) {
let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
let transfers = arguments.length > 2 ? arguments[2] : undefined;
if (this.isCancelled) {
return;
}
const lastDesiredSize = this.desiredSize;
this.desiredSize -= size;
if (lastDesiredSize > 0 && this.desiredSize <= 0) {
this.sinkCapability = Promise.withResolvers();
this.ready = this.sinkCapability.promise;
}
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.ENQUEUE,
streamId,
chunk
}, transfers);
},
close() {
if (this.isCancelled) {
return;
}
this.isCancelled = true;
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.CLOSE,
streamId
});
delete self.streamSinks[streamId];
},
error(reason) {
assert(reason instanceof Error, "error must have a valid reason");
if (this.isCancelled) {
return;
}
this.isCancelled = true;
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.ERROR,
streamId,
reason: wrapReason(reason)
});
},
sinkCapability: Promise.withResolvers(),
onPull: null,
onCancel: null,
isCancelled: false,
desiredSize: data.desiredSize,
ready: null
};
streamSink.sinkCapability.resolve();
streamSink.ready = streamSink.sinkCapability.promise;
this.streamSinks[streamId] = streamSink;
Promise.try(action, data.data, streamSink).then(function () {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.START_COMPLETE,
streamId,
success: true
});
}, function (reason) {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.START_COMPLETE,
streamId,
reason: wrapReason(reason)
});
});
}
function _processStreamMessage(data) {
const streamId = data.streamId,
sourceName = this.sourceName,
targetName = data.sourceName,
comObj = this.comObj;
const streamController = this.streamControllers[streamId],
streamSink = this.streamSinks[streamId];
switch (data.stream) {
case StreamKind.START_COMPLETE:
if (data.success) {
streamController.startCall.resolve();
} else {
streamController.startCall.reject(wrapReason(data.reason));
}
break;
case StreamKind.PULL_COMPLETE:
if (data.success) {
streamController.pullCall.resolve();
} else {
streamController.pullCall.reject(wrapReason(data.reason));
}
break;
case StreamKind.PULL:
if (!streamSink) {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.PULL_COMPLETE,
streamId,
success: true
});
break;
}
if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {
streamSink.sinkCapability.resolve();
}
streamSink.desiredSize = data.desiredSize;
Promise.try(streamSink.onPull || onFn).then(function () {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.PULL_COMPLETE,
streamId,
success: true
});
}, function (reason) {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.PULL_COMPLETE,
streamId,
reason: wrapReason(reason)
});
});
break;
case StreamKind.ENQUEUE:
assert(streamController, "enqueue should have stream controller");
if (streamController.isClosed) {
break;
}
streamController.controller.enqueue(data.chunk);
break;
case StreamKind.CLOSE:
assert(streamController, "close should have stream controller");
if (streamController.isClosed) {
break;
}
streamController.isClosed = true;
streamController.controller.close();
message_handler_assertClassBrand(_MessageHandler_brand, this, _deleteStreamController).call(this, streamController, streamId);
break;
case StreamKind.ERROR:
assert(streamController, "error should have stream controller");
streamController.controller.error(wrapReason(data.reason));
message_handler_assertClassBrand(_MessageHandler_brand, this, _deleteStreamController).call(this, streamController, streamId);
break;
case StreamKind.CANCEL_COMPLETE:
if (data.success) {
streamController.cancelCall.resolve();
} else {
streamController.cancelCall.reject(wrapReason(data.reason));
}
message_handler_assertClassBrand(_MessageHandler_brand, this, _deleteStreamController).call(this, streamController, streamId);
break;
case StreamKind.CANCEL:
if (!streamSink) {
break;
}
const dataReason = wrapReason(data.reason);
Promise.try(streamSink.onCancel || onFn, dataReason).then(function () {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.CANCEL_COMPLETE,
streamId,
success: true
});
}, function (reason) {
comObj.postMessage({
sourceName,
targetName,
stream: StreamKind.CANCEL_COMPLETE,
streamId,
reason: wrapReason(reason)
});
});
streamSink.sinkCapability.reject(dataReason);
streamSink.isCancelled = true;
delete this.streamSinks[streamId];
break;
default:
throw new Error("Unexpected stream case");
}
}
async function _deleteStreamController(streamController, streamId) {
await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]);
delete this.streamControllers[streamId];
}
;// ./src/display/canvas_factory.js
function canvas_factory_classPrivateFieldInitSpec(e, t, a) { canvas_factory_checkPrivateRedeclaration(e, t), t.set(e, a); }
function canvas_factory_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function canvas_factory_classPrivateFieldGet(s, a) { return s.get(canvas_factory_assertClassBrand(s, a)); }
function canvas_factory_classPrivateFieldSet(s, a, r) { return s.set(canvas_factory_assertClassBrand(s, a), r), r; }
function canvas_factory_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _enableHWA = /*#__PURE__*/new WeakMap();
class BaseCanvasFactory {
constructor(_ref) {
let {
enableHWA = false
} = _ref;
canvas_factory_classPrivateFieldInitSpec(this, _enableHWA, false);
canvas_factory_classPrivateFieldSet(_enableHWA, this, enableHWA);
}
create(width, height) {
if (width <= 0 || height <= 0) {
throw new Error("Invalid canvas size");
}
const canvas = this._createCanvas(width, height);
return {
canvas,
context: canvas.getContext("2d", {
willReadFrequently: !canvas_factory_classPrivateFieldGet(_enableHWA, this)
})
};
}
reset(canvasAndContext, width, height) {
if (!canvasAndContext.canvas) {
throw new Error("Canvas is not specified");
}
if (width <= 0 || height <= 0) {
throw new Error("Invalid canvas size");
}
canvasAndContext.canvas.width = width;
canvasAndContext.canvas.height = height;
}
destroy(canvasAndContext) {
if (!canvasAndContext.canvas) {
throw new Error("Canvas is not specified");
}
canvasAndContext.canvas.width = 0;
canvasAndContext.canvas.height = 0;
canvasAndContext.canvas = null;
canvasAndContext.context = null;
}
_createCanvas(width, height) {
unreachable("Abstract method `_createCanvas` called.");
}
}
class DOMCanvasFactory extends BaseCanvasFactory {
constructor(_ref2) {
let {
ownerDocument = globalThis.document,
enableHWA = false
} = _ref2;
super({
enableHWA
});
this._document = ownerDocument;
}
_createCanvas(width, height) {
const canvas = this._document.createElement("canvas");
canvas.width = width;
canvas.height = height;
return canvas;
}
}
;// ./src/display/cmap_reader_factory.js
class BaseCMapReaderFactory {
constructor(_ref) {
let {
baseUrl = null,
isCompressed = true
} = _ref;
this.baseUrl = baseUrl;
this.isCompressed = isCompressed;
}
async fetch(_ref2) {
let {
name
} = _ref2;
if (!this.baseUrl) {
throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.");
}
if (!name) {
throw new Error("CMap name must be specified.");
}
const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
return this._fetch(url).then(cMapData => ({
cMapData,
isCompressed: this.isCompressed
})).catch(reason => {
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`);
});
}
async _fetch(url) {
unreachable("Abstract method `_fetch` called.");
}
}
class DOMCMapReaderFactory extends BaseCMapReaderFactory {
async _fetch(url) {
const data = await fetchData(url, this.isCompressed ? "arraybuffer" : "text");
return data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data);
}
}
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.filter.js
var es_iterator_filter = __webpack_require__(2489);
;// ./src/display/filter_factory.js
function filter_factory_classPrivateMethodInitSpec(e, a) { filter_factory_checkPrivateRedeclaration(e, a), a.add(e); }
function filter_factory_classPrivateFieldInitSpec(e, t, a) { filter_factory_checkPrivateRedeclaration(e, t), t.set(e, a); }
function filter_factory_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function filter_factory_classPrivateGetter(s, r, a) { return a(filter_factory_assertClassBrand(s, r)); }
function filter_factory_classPrivateFieldGet(s, a) { return s.get(filter_factory_assertClassBrand(s, a)); }
function filter_factory_classPrivateFieldSet(s, a, r) { return s.set(filter_factory_assertClassBrand(s, a), r), r; }
function filter_factory_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
class BaseFilterFactory {
addFilter(maps) {
return "none";
}
addHCMFilter(fgColor, bgColor) {
return "none";
}
addAlphaFilter(map) {
return "none";
}
addLuminosityFilter(map) {
return "none";
}
addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {
return "none";
}
destroy() {
let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
}
}
var _baseUrl = /*#__PURE__*/new WeakMap();
var filter_factory_cache = /*#__PURE__*/new WeakMap();
var _defs = /*#__PURE__*/new WeakMap();
var _docId = /*#__PURE__*/new WeakMap();
var _document = /*#__PURE__*/new WeakMap();
var _hcmCache = /*#__PURE__*/new WeakMap();
var filter_factory_id = /*#__PURE__*/new WeakMap();
var _DOMFilterFactory_brand = /*#__PURE__*/new WeakSet();
class DOMFilterFactory extends BaseFilterFactory {
constructor(_ref) {
let {
docId,
ownerDocument = globalThis.document
} = _ref;
super();
filter_factory_classPrivateMethodInitSpec(this, _DOMFilterFactory_brand);
filter_factory_classPrivateFieldInitSpec(this, _baseUrl, void 0);
filter_factory_classPrivateFieldInitSpec(this, filter_factory_cache, void 0);
filter_factory_classPrivateFieldInitSpec(this, _defs, void 0);
filter_factory_classPrivateFieldInitSpec(this, _docId, void 0);
filter_factory_classPrivateFieldInitSpec(this, _document, void 0);
filter_factory_classPrivateFieldInitSpec(this, _hcmCache, void 0);
filter_factory_classPrivateFieldInitSpec(this, filter_factory_id, 0);
filter_factory_classPrivateFieldSet(_docId, this, docId);
filter_factory_classPrivateFieldSet(_document, this, ownerDocument);
}
addFilter(maps) {
var _this$id, _this$id2;
if (!maps) {
return "none";
}
let value = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).get(maps);
if (value) {
return value;
}
const [tableR, tableG, tableB] = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createTables).call(this, maps);
const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;
value = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).get(key);
if (value) {
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(maps, value);
return value;
}
const id = `g_${filter_factory_classPrivateFieldGet(_docId, this)}_transfer_map_${filter_factory_classPrivateFieldSet(filter_factory_id, this, (_this$id = filter_factory_classPrivateFieldGet(filter_factory_id, this), _this$id2 = _this$id++, _this$id)), _this$id2}`;
const url = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createUrl).call(this, id);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(maps, url);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(key, url);
const filter = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createFilter).call(this, id);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addTransferMapConversion).call(this, tableR, tableG, tableB, filter);
return url;
}
addHCMFilter(fgColor, bgColor) {
const key = `${fgColor}-${bgColor}`;
const filterName = "base";
let info = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_hcmCache).get(filterName);
if (info?.key === key) {
return info.url;
}
if (info) {
info.filter?.remove();
info.key = key;
info.url = "none";
info.filter = null;
} else {
info = {
key,
url: "none",
filter: null
};
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_hcmCache).set(filterName, info);
}
if (!fgColor || !bgColor) {
return info.url;
}
const fgRGB = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _getRGB).call(this, fgColor);
fgColor = Util.makeHexColor(...fgRGB);
const bgRGB = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _getRGB).call(this, bgColor);
bgColor = Util.makeHexColor(...bgRGB);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_defs).style.color = "";
if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) {
return info.url;
}
const map = new Array(256);
for (let i = 0; i <= 255; i++) {
const x = i / 255;
map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;
}
const table = map.join(",");
const id = `g_${filter_factory_classPrivateFieldGet(_docId, this)}_hcm_filter`;
const filter = info.filter = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createFilter).call(this, id);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addTransferMapConversion).call(this, table, table, table, filter);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addGrayConversion).call(this, filter);
const getSteps = (c, n) => {
const start = fgRGB[c] / 255;
const end = bgRGB[c] / 255;
const arr = new Array(n + 1);
for (let i = 0; i <= n; i++) {
arr[i] = start + i / n * (end - start);
}
return arr.join(",");
};
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addTransferMapConversion).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);
info.url = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createUrl).call(this, id);
return info.url;
}
addAlphaFilter(map) {
var _this$id3, _this$id4;
let value = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).get(map);
if (value) {
return value;
}
const [tableA] = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createTables).call(this, [map]);
const key = `alpha_${tableA}`;
value = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).get(key);
if (value) {
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(map, value);
return value;
}
const id = `g_${filter_factory_classPrivateFieldGet(_docId, this)}_alpha_map_${filter_factory_classPrivateFieldSet(filter_factory_id, this, (_this$id3 = filter_factory_classPrivateFieldGet(filter_factory_id, this), _this$id4 = _this$id3++, _this$id3)), _this$id4}`;
const url = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createUrl).call(this, id);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(map, url);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(key, url);
const filter = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createFilter).call(this, id);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addTransferMapAlphaConversion).call(this, tableA, filter);
return url;
}
addLuminosityFilter(map) {
var _this$id5, _this$id6;
let value = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).get(map || "luminosity");
if (value) {
return value;
}
let tableA, key;
if (map) {
[tableA] = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createTables).call(this, [map]);
key = `luminosity_${tableA}`;
} else {
key = "luminosity";
}
value = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).get(key);
if (value) {
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(map, value);
return value;
}
const id = `g_${filter_factory_classPrivateFieldGet(_docId, this)}_luminosity_map_${filter_factory_classPrivateFieldSet(filter_factory_id, this, (_this$id5 = filter_factory_classPrivateFieldGet(filter_factory_id, this), _this$id6 = _this$id5++, _this$id5)), _this$id6}`;
const url = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createUrl).call(this, id);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(map, url);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_cache).set(key, url);
const filter = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createFilter).call(this, id);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addLuminosityConversion).call(this, filter);
if (map) {
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addTransferMapAlphaConversion).call(this, tableA, filter);
}
return url;
}
addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {
const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;
let info = filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_hcmCache).get(filterName);
if (info?.key === key) {
return info.url;
}
if (info) {
info.filter?.remove();
info.key = key;
info.url = "none";
info.filter = null;
} else {
info = {
key,
url: "none",
filter: null
};
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_hcmCache).set(filterName, info);
}
if (!fgColor || !bgColor) {
return info.url;
}
const [fgRGB, bgRGB] = [fgColor, bgColor].map(filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _getRGB).bind(this));
let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]);
let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]);
let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _getRGB).bind(this));
if (bgGray < fgGray) {
[fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];
}
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_defs).style.color = "";
const getSteps = (fg, bg, n) => {
const arr = new Array(256);
const step = (bgGray - fgGray) / n;
const newStart = fg / 255;
const newStep = (bg - fg) / (255 * n);
let prev = 0;
for (let i = 0; i <= n; i++) {
const k = Math.round(fgGray + i * step);
const value = newStart + i * newStep;
for (let j = prev; j <= k; j++) {
arr[j] = value;
}
prev = k + 1;
}
for (let i = prev; i < 256; i++) {
arr[i] = arr[prev - 1];
}
return arr.join(",");
};
const id = `g_${filter_factory_classPrivateFieldGet(_docId, this)}_hcm_${filterName}_filter`;
const filter = info.filter = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createFilter).call(this, id);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addGrayConversion).call(this, filter);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _addTransferMapConversion).call(this, getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);
info.url = filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _createUrl).call(this, id);
return info.url;
}
destroy() {
let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (keepHCM && filter_factory_classPrivateFieldGet(_hcmCache, this)?.size) {
return;
}
filter_factory_classPrivateFieldGet(_defs, this)?.parentNode.parentNode.remove();
filter_factory_classPrivateFieldSet(_defs, this, null);
filter_factory_classPrivateFieldGet(filter_factory_cache, this)?.clear();
filter_factory_classPrivateFieldSet(filter_factory_cache, this, null);
filter_factory_classPrivateFieldGet(_hcmCache, this)?.clear();
filter_factory_classPrivateFieldSet(_hcmCache, this, null);
filter_factory_classPrivateFieldSet(filter_factory_id, this, 0);
}
}
function _get_cache(_this) {
return filter_factory_classPrivateFieldGet(filter_factory_cache, _this) || filter_factory_classPrivateFieldSet(filter_factory_cache, _this, new Map());
}
function _get_hcmCache(_this2) {
return filter_factory_classPrivateFieldGet(_hcmCache, _this2) || filter_factory_classPrivateFieldSet(_hcmCache, _this2, new Map());
}
function _get_defs(_this3) {
if (!filter_factory_classPrivateFieldGet(_defs, _this3)) {
const div = filter_factory_classPrivateFieldGet(_document, _this3).createElement("div");
const {
style
} = div;
style.visibility = "hidden";
style.contain = "strict";
style.width = style.height = 0;
style.position = "absolute";
style.top = style.left = 0;
style.zIndex = -1;
const svg = filter_factory_classPrivateFieldGet(_document, _this3).createElementNS(SVG_NS, "svg");
svg.setAttribute("width", 0);
svg.setAttribute("height", 0);
filter_factory_classPrivateFieldSet(_defs, _this3, filter_factory_classPrivateFieldGet(_document, _this3).createElementNS(SVG_NS, "defs"));
div.append(svg);
svg.append(filter_factory_classPrivateFieldGet(_defs, _this3));
filter_factory_classPrivateFieldGet(_document, _this3).body.append(div);
}
return filter_factory_classPrivateFieldGet(_defs, _this3);
}
function _createTables(maps) {
if (maps.length === 1) {
const mapR = maps[0];
const buffer = new Array(256);
for (let i = 0; i < 256; i++) {
buffer[i] = mapR[i] / 255;
}
const table = buffer.join(",");
return [table, table, table];
}
const [mapR, mapG, mapB] = maps;
const bufferR = new Array(256);
const bufferG = new Array(256);
const bufferB = new Array(256);
for (let i = 0; i < 256; i++) {
bufferR[i] = mapR[i] / 255;
bufferG[i] = mapG[i] / 255;
bufferB[i] = mapB[i] / 255;
}
return [bufferR.join(","), bufferG.join(","), bufferB.join(",")];
}
function _createUrl(id) {
if (filter_factory_classPrivateFieldGet(_baseUrl, this) === undefined) {
filter_factory_classPrivateFieldSet(_baseUrl, this, "");
const url = filter_factory_classPrivateFieldGet(_document, this).URL;
if (url !== filter_factory_classPrivateFieldGet(_document, this).baseURI) {
if (isDataScheme(url)) {
warn('#createUrl: ignore "data:"-URL for performance reasons.');
} else {
filter_factory_classPrivateFieldSet(_baseUrl, this, updateUrlHash(url, ""));
}
}
}
return `url(${filter_factory_classPrivateFieldGet(_baseUrl, this)}#${id})`;
}
function _addLuminosityConversion(filter) {
const feColorMatrix = filter_factory_classPrivateFieldGet(_document, this).createElementNS(SVG_NS, "feColorMatrix");
feColorMatrix.setAttribute("type", "matrix");
feColorMatrix.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0");
filter.append(feColorMatrix);
}
function _addGrayConversion(filter) {
const feColorMatrix = filter_factory_classPrivateFieldGet(_document, this).createElementNS(SVG_NS, "feColorMatrix");
feColorMatrix.setAttribute("type", "matrix");
feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0");
filter.append(feColorMatrix);
}
function _createFilter(id) {
const filter = filter_factory_classPrivateFieldGet(_document, this).createElementNS(SVG_NS, "filter");
filter.setAttribute("color-interpolation-filters", "sRGB");
filter.setAttribute("id", id);
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_defs).append(filter);
return filter;
}
function _appendFeFunc(feComponentTransfer, func, table) {
const feFunc = filter_factory_classPrivateFieldGet(_document, this).createElementNS(SVG_NS, func);
feFunc.setAttribute("type", "discrete");
feFunc.setAttribute("tableValues", table);
feComponentTransfer.append(feFunc);
}
function _addTransferMapConversion(rTable, gTable, bTable, filter) {
const feComponentTransfer = filter_factory_classPrivateFieldGet(_document, this).createElementNS(SVG_NS, "feComponentTransfer");
filter.append(feComponentTransfer);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _appendFeFunc).call(this, feComponentTransfer, "feFuncR", rTable);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _appendFeFunc).call(this, feComponentTransfer, "feFuncG", gTable);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _appendFeFunc).call(this, feComponentTransfer, "feFuncB", bTable);
}
function _addTransferMapAlphaConversion(aTable, filter) {
const feComponentTransfer = filter_factory_classPrivateFieldGet(_document, this).createElementNS(SVG_NS, "feComponentTransfer");
filter.append(feComponentTransfer);
filter_factory_assertClassBrand(_DOMFilterFactory_brand, this, _appendFeFunc).call(this, feComponentTransfer, "feFuncA", aTable);
}
function _getRGB(color) {
filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_defs).style.color = color;
return getRGB(getComputedStyle(filter_factory_classPrivateGetter(_DOMFilterFactory_brand, this, _get_defs)).getPropertyValue("color"));
}
;// ./src/display/standard_fontdata_factory.js
class BaseStandardFontDataFactory {
constructor(_ref) {
let {
baseUrl = null
} = _ref;
this.baseUrl = baseUrl;
}
async fetch(_ref2) {
let {
filename
} = _ref2;
if (!this.baseUrl) {
throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided.");
}
if (!filename) {
throw new Error("Font filename must be specified.");
}
const url = `${this.baseUrl}${filename}`;
return this._fetch(url).catch(reason => {
throw new Error(`Unable to load font data at: ${url}`);
});
}
async _fetch(url) {
unreachable("Abstract method `_fetch` called.");
}
}
class DOMStandardFontDataFactory extends BaseStandardFontDataFactory {
async _fetch(url) {
const data = await fetchData(url, "arraybuffer");
return new Uint8Array(data);
}
}
;// ./src/display/wasm_factory.js
class BaseWasmFactory {
constructor(_ref) {
let {
baseUrl = null
} = _ref;
this.baseUrl = baseUrl;
}
async fetch(_ref2) {
let {
filename
} = _ref2;
if (!this.baseUrl) {
throw new Error("Ensure that the `wasmUrl` API parameter is provided.");
}
if (!filename) {
throw new Error("Wasm filename must be specified.");
}
const url = `${this.baseUrl}${filename}`;
return this._fetch(url).catch(reason => {
throw new Error(`Unable to load wasm data at: ${url}`);
});
}
async _fetch(url) {
unreachable("Abstract method `_fetch` called.");
}
}
class DOMWasmFactory extends BaseWasmFactory {
async _fetch(url) {
const data = await fetchData(url, "arraybuffer");
return new Uint8Array(data);
}
}
;// ./src/display/node_utils.js
async function node_utils_fetchData(url) {
const fs = process.getBuiltinModule("fs");
const data = await fs.promises.readFile(url);
return new Uint8Array(data);
}
class NodeFilterFactory extends BaseFilterFactory {}
class NodeCanvasFactory extends BaseCanvasFactory {
_createCanvas(width, height) {
const require = process.getBuiltinModule("module").createRequire(import.meta.url);
const canvas = require("@napi-rs/canvas");
return canvas.createCanvas(width, height);
}
}
class NodeCMapReaderFactory extends BaseCMapReaderFactory {
async _fetch(url) {
return node_utils_fetchData(url);
}
}
class NodeStandardFontDataFactory extends BaseStandardFontDataFactory {
async _fetch(url) {
return node_utils_fetchData(url);
}
}
class NodeWasmFactory extends BaseWasmFactory {
async _fetch(url) {
return node_utils_fetchData(url);
}
}
;// ./src/display/pattern_helper.js
function pattern_helper_defineProperty(e, r, t) { return (r = pattern_helper_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function pattern_helper_toPropertyKey(t) { var i = pattern_helper_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function pattern_helper_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const PathType = {
FILL: "Fill",
STROKE: "Stroke",
SHADING: "Shading"
};
function applyBoundingBox(ctx, bbox) {
if (!bbox) {
return;
}
const width = bbox[2] - bbox[0];
const height = bbox[3] - bbox[1];
const region = new Path2D();
region.rect(bbox[0], bbox[1], width, height);
ctx.clip(region);
}
class BaseShadingPattern {
isModifyingCurrentTransform() {
return false;
}
getPattern() {
unreachable("Abstract method `getPattern` called.");
}
}
class RadialAxialShadingPattern extends BaseShadingPattern {
constructor(IR) {
super();
this._type = IR[1];
this._bbox = IR[2];
this._colorStops = IR[3];
this._p0 = IR[4];
this._p1 = IR[5];
this._r0 = IR[6];
this._r1 = IR[7];
this.matrix = null;
}
_createGradient(ctx) {
let grad;
if (this._type === "axial") {
grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);
} else if (this._type === "radial") {
grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);
}
for (const colorStop of this._colorStops) {
grad.addColorStop(colorStop[0], colorStop[1]);
}
return grad;
}
getPattern(ctx, owner, inverse, pathType) {
let pattern;
if (pathType === PathType.STROKE || pathType === PathType.FILL) {
const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0];
const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;
const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;
const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height);
const tmpCtx = tmpCanvas.context;
tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
tmpCtx.beginPath();
tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);
inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);
tmpCtx.transform(...owner.baseTransform);
if (this.matrix) {
tmpCtx.transform(...this.matrix);
}
applyBoundingBox(tmpCtx, this._bbox);
tmpCtx.fillStyle = this._createGradient(tmpCtx);
tmpCtx.fill();
pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat");
const domMatrix = new DOMMatrix(inverse);
pattern.setTransform(domMatrix);
} else {
applyBoundingBox(ctx, this._bbox);
pattern = this._createGradient(ctx);
}
return pattern;
}
}
function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
const coords = context.coords,
colors = context.colors;
const bytes = data.data,
rowSize = data.width * 4;
let tmp;
if (coords[p1 + 1] > coords[p2 + 1]) {
tmp = p1;
p1 = p2;
p2 = tmp;
tmp = c1;
c1 = c2;
c2 = tmp;
}
if (coords[p2 + 1] > coords[p3 + 1]) {
tmp = p2;
p2 = p3;
p3 = tmp;
tmp = c2;
c2 = c3;
c3 = tmp;
}
if (coords[p1 + 1] > coords[p2 + 1]) {
tmp = p1;
p1 = p2;
p2 = tmp;
tmp = c1;
c1 = c2;
c2 = tmp;
}
const x1 = (coords[p1] + context.offsetX) * context.scaleX;
const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
const x2 = (coords[p2] + context.offsetX) * context.scaleX;
const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
const x3 = (coords[p3] + context.offsetX) * context.scaleX;
const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
if (y1 >= y3) {
return;
}
const c1r = colors[c1],
c1g = colors[c1 + 1],
c1b = colors[c1 + 2];
const c2r = colors[c2],
c2g = colors[c2 + 1],
c2b = colors[c2 + 2];
const c3r = colors[c3],
c3g = colors[c3 + 1],
c3b = colors[c3 + 2];
const minY = Math.round(y1),
maxY = Math.round(y3);
let xa, car, cag, cab;
let xb, cbr, cbg, cbb;
for (let y = minY; y <= maxY; y++) {
if (y < y2) {
const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);
xa = x1 - (x1 - x2) * k;
car = c1r - (c1r - c2r) * k;
cag = c1g - (c1g - c2g) * k;
cab = c1b - (c1b - c2b) * k;
} else {
let k;
if (y > y3) {
k = 1;
} else if (y2 === y3) {
k = 0;
} else {
k = (y2 - y) / (y2 - y3);
}
xa = x2 - (x2 - x3) * k;
car = c2r - (c2r - c3r) * k;
cag = c2g - (c2g - c3g) * k;
cab = c2b - (c2b - c3b) * k;
}
let k;
if (y < y1) {
k = 0;
} else if (y > y3) {
k = 1;
} else {
k = (y1 - y) / (y1 - y3);
}
xb = x1 - (x1 - x3) * k;
cbr = c1r - (c1r - c3r) * k;
cbg = c1g - (c1g - c3g) * k;
cbb = c1b - (c1b - c3b) * k;
const x1_ = Math.round(Math.min(xa, xb));
const x2_ = Math.round(Math.max(xa, xb));
let j = rowSize * y + x1_ * 4;
for (let x = x1_; x <= x2_; x++) {
k = (xa - x) / (xa - xb);
if (k < 0) {
k = 0;
} else if (k > 1) {
k = 1;
}
bytes[j++] = car - (car - cbr) * k | 0;
bytes[j++] = cag - (cag - cbg) * k | 0;
bytes[j++] = cab - (cab - cbb) * k | 0;
bytes[j++] = 255;
}
}
}
function drawFigure(data, figure, context) {
const ps = figure.coords;
const cs = figure.colors;
let i, ii;
switch (figure.type) {
case "lattice":
const verticesPerRow = figure.verticesPerRow;
const rows = Math.floor(ps.length / verticesPerRow) - 1;
const cols = verticesPerRow - 1;
for (i = 0; i < rows; i++) {
let q = i * verticesPerRow;
for (let j = 0; j < cols; j++, q++) {
drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
}
}
break;
case "triangles":
for (i = 0, ii = ps.length; i < ii; i += 3) {
drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
}
break;
default:
throw new Error("illegal figure");
}
}
class MeshShadingPattern extends BaseShadingPattern {
constructor(IR) {
super();
this._coords = IR[2];
this._colors = IR[3];
this._figures = IR[4];
this._bounds = IR[5];
this._bbox = IR[6];
this._background = IR[7];
this.matrix = null;
}
_createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
const EXPECTED_SCALE = 1.1;
const MAX_PATTERN_SIZE = 3000;
const BORDER_SIZE = 2;
const offsetX = Math.floor(this._bounds[0]);
const offsetY = Math.floor(this._bounds[1]);
const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;
const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;
const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
const scaleX = boundsWidth / width;
const scaleY = boundsHeight / height;
const context = {
coords: this._coords,
colors: this._colors,
offsetX: -offsetX,
offsetY: -offsetY,
scaleX: 1 / scaleX,
scaleY: 1 / scaleY
};
const paddedWidth = width + BORDER_SIZE * 2;
const paddedHeight = height + BORDER_SIZE * 2;
const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight);
const tmpCtx = tmpCanvas.context;
const data = tmpCtx.createImageData(width, height);
if (backgroundColor) {
const bytes = data.data;
for (let i = 0, ii = bytes.length; i < ii; i += 4) {
bytes[i] = backgroundColor[0];
bytes[i + 1] = backgroundColor[1];
bytes[i + 2] = backgroundColor[2];
bytes[i + 3] = 255;
}
}
for (const figure of this._figures) {
drawFigure(data, figure, context);
}
tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
const canvas = tmpCanvas.canvas;
return {
canvas,
offsetX: offsetX - BORDER_SIZE * scaleX,
offsetY: offsetY - BORDER_SIZE * scaleY,
scaleX,
scaleY
};
}
isModifyingCurrentTransform() {
return true;
}
getPattern(ctx, owner, inverse, pathType) {
applyBoundingBox(ctx, this._bbox);
const scale = new Float32Array(2);
if (pathType === PathType.SHADING) {
Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale);
} else if (this.matrix) {
Util.singularValueDecompose2dScale(this.matrix, scale);
const [matrixScaleX, matrixScaleY] = scale;
Util.singularValueDecompose2dScale(owner.baseTransform, scale);
scale[0] *= matrixScaleX;
scale[1] *= matrixScaleY;
} else {
Util.singularValueDecompose2dScale(owner.baseTransform, scale);
}
const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);
if (pathType !== PathType.SHADING) {
ctx.setTransform(...owner.baseTransform);
if (this.matrix) {
ctx.transform(...this.matrix);
}
}
ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
}
}
class DummyShadingPattern extends BaseShadingPattern {
getPattern() {
return "hotpink";
}
}
function getShadingPattern(IR) {
switch (IR[0]) {
case "RadialAxial":
return new RadialAxialShadingPattern(IR);
case "Mesh":
return new MeshShadingPattern(IR);
case "Dummy":
return new DummyShadingPattern();
}
throw new Error(`Unknown IR type: ${IR[0]}`);
}
const PaintType = {
COLORED: 1,
UNCOLORED: 2
};
class TilingPattern {
constructor(IR, ctx, canvasGraphicsFactory, baseTransform) {
this.color = IR[1];
this.operatorList = IR[2];
this.matrix = IR[3];
this.bbox = IR[4];
this.xstep = IR[5];
this.ystep = IR[6];
this.paintType = IR[7];
this.tilingType = IR[8];
this.ctx = ctx;
this.canvasGraphicsFactory = canvasGraphicsFactory;
this.baseTransform = baseTransform;
}
createPatternCanvas(owner) {
const {
bbox,
operatorList,
paintType,
tilingType,
color,
canvasGraphicsFactory
} = this;
let {
xstep,
ystep
} = this;
xstep = Math.abs(xstep);
ystep = Math.abs(ystep);
info("TilingType: " + tilingType);
const x0 = bbox[0],
y0 = bbox[1],
x1 = bbox[2],
y1 = bbox[3];
const width = x1 - x0;
const height = y1 - y0;
const scale = new Float32Array(2);
Util.singularValueDecompose2dScale(this.matrix, scale);
const [matrixScaleX, matrixScaleY] = scale;
Util.singularValueDecompose2dScale(this.baseTransform, scale);
const combinedScaleX = matrixScaleX * scale[0];
const combinedScaleY = matrixScaleY * scale[1];
let canvasWidth = width,
canvasHeight = height,
redrawHorizontally = false,
redrawVertically = false;
const xScaledStep = Math.ceil(xstep * combinedScaleX);
const yScaledStep = Math.ceil(ystep * combinedScaleY);
const xScaledWidth = Math.ceil(width * combinedScaleX);
const yScaledHeight = Math.ceil(height * combinedScaleY);
if (xScaledStep >= xScaledWidth) {
canvasWidth = xstep;
} else {
redrawHorizontally = true;
}
if (yScaledStep >= yScaledHeight) {
canvasHeight = ystep;
} else {
redrawVertically = true;
}
const dimx = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX);
const dimy = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY);
const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size);
const tmpCtx = tmpCanvas.context;
const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
graphics.groupLevel = owner.groupLevel;
this.setFillAndStrokeStyleToContext(graphics, paintType, color);
tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0);
graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
tmpCtx.save();
this.clipBbox(graphics, x0, y0, x1, y1);
graphics.baseTransform = getCurrentTransform(graphics.ctx);
graphics.executeOperatorList(operatorList);
graphics.endDrawing();
tmpCtx.restore();
if (redrawHorizontally || redrawVertically) {
const image = tmpCanvas.canvas;
if (redrawHorizontally) {
canvasWidth = xstep;
}
if (redrawVertically) {
canvasHeight = ystep;
}
const dimx2 = this.getSizeAndScale(canvasWidth, this.ctx.canvas.width, combinedScaleX);
const dimy2 = this.getSizeAndScale(canvasHeight, this.ctx.canvas.height, combinedScaleY);
const xSize = dimx2.size;
const ySize = dimy2.size;
const tmpCanvas2 = owner.cachedCanvases.getCanvas("pattern-workaround", xSize, ySize);
const tmpCtx2 = tmpCanvas2.context;
const ii = redrawHorizontally ? Math.floor(width / xstep) : 0;
const jj = redrawVertically ? Math.floor(height / ystep) : 0;
for (let i = 0; i <= ii; i++) {
for (let j = 0; j <= jj; j++) {
tmpCtx2.drawImage(image, xSize * i, ySize * j, xSize, ySize, 0, 0, xSize, ySize);
}
}
return {
canvas: tmpCanvas2.canvas,
scaleX: dimx2.scale,
scaleY: dimy2.scale,
offsetX: x0,
offsetY: y0
};
}
return {
canvas: tmpCanvas.canvas,
scaleX: dimx.scale,
scaleY: dimy.scale,
offsetX: x0,
offsetY: y0
};
}
getSizeAndScale(step, realOutputSize, scale) {
const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);
let size = Math.ceil(step * scale);
if (size >= maxSize) {
size = maxSize;
} else {
scale = size / step;
}
return {
scale,
size
};
}
clipBbox(graphics, x0, y0, x1, y1) {
const bboxWidth = x1 - x0;
const bboxHeight = y1 - y0;
graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
Util.axialAlignedBoundingBox([x0, y0, x1, y1], getCurrentTransform(graphics.ctx), graphics.current.minMax);
graphics.clip();
graphics.endPath();
}
setFillAndStrokeStyleToContext(graphics, paintType, color) {
const context = graphics.ctx,
current = graphics.current;
switch (paintType) {
case PaintType.COLORED:
const {
fillStyle,
strokeStyle
} = this.ctx;
context.fillStyle = current.fillColor = fillStyle;
context.strokeStyle = current.strokeColor = strokeStyle;
break;
case PaintType.UNCOLORED:
context.fillStyle = context.strokeStyle = color;
current.fillColor = current.strokeColor = color;
break;
default:
throw new FormatError(`Unsupported paint type: ${paintType}`);
}
}
isModifyingCurrentTransform() {
return false;
}
getPattern(ctx, owner, inverse, pathType) {
let matrix = inverse;
if (pathType !== PathType.SHADING) {
matrix = Util.transform(matrix, owner.baseTransform);
if (this.matrix) {
matrix = Util.transform(matrix, this.matrix);
}
}
const temporaryPatternCanvas = this.createPatternCanvas(owner);
let domMatrix = new DOMMatrix(matrix);
domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);
const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat");
pattern.setTransform(domMatrix);
return pattern;
}
}
pattern_helper_defineProperty(TilingPattern, "MAX_PATTERN_SIZE", 3000);
;// ./src/shared/image_utils.js
function convertToRGBA(params) {
switch (params.kind) {
case ImageKind.GRAYSCALE_1BPP:
return convertBlackAndWhiteToRGBA(params);
case ImageKind.RGB_24BPP:
return convertRGBToRGBA(params);
}
return null;
}
function convertBlackAndWhiteToRGBA(_ref) {
let {
src,
srcPos = 0,
dest,
width,
height,
nonBlackColor = 0xffffffff,
inverseDecode = false
} = _ref;
const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
const widthInSource = width >> 3;
const widthRemainder = width & 7;
const srcLength = src.length;
dest = new Uint32Array(dest.buffer);
let destPos = 0;
for (let i = 0; i < height; i++) {
for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
const elem = srcPos < srcLength ? src[srcPos] : 255;
dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
}
if (widthRemainder === 0) {
continue;
}
const elem = srcPos < srcLength ? src[srcPos++] : 255;
for (let j = 0; j < widthRemainder; j++) {
dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
}
}
return {
srcPos,
destPos
};
}
function convertRGBToRGBA(_ref2) {
let {
src,
srcPos = 0,
dest,
destPos = 0,
width,
height
} = _ref2;
let i = 0;
const len = width * height * 3;
const len32 = len >> 2;
const src32 = new Uint32Array(src.buffer, srcPos, len32);
if (FeatureTest.isLittleEndian) {
for (; i < len32 - 2; i += 3, destPos += 4) {
const s1 = src32[i];
const s2 = src32[i + 1];
const s3 = src32[i + 2];
dest[destPos] = s1 | 0xff000000;
dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
dest[destPos + 3] = s3 >>> 8 | 0xff000000;
}
for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {
dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
}
} else {
for (; i < len32 - 2; i += 3, destPos += 4) {
const s1 = src32[i];
const s2 = src32[i + 1];
const s3 = src32[i + 2];
dest[destPos] = s1 | 0xff;
dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
dest[destPos + 3] = s3 << 8 | 0xff;
}
for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {
dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
}
}
return {
srcPos: srcPos + len,
destPos
};
}
function grayToRGBA(src, dest) {
if (FeatureTest.isLittleEndian) {
for (let i = 0, ii = src.length; i < ii; i++) {
dest[i] = src[i] * 0x10101 | 0xff000000;
}
} else {
for (let i = 0, ii = src.length; i < ii; i++) {
dest[i] = src[i] * 0x1010100 | 0x000000ff;
}
}
}
;// ./src/display/canvas.js
function canvas_classPrivateMethodInitSpec(e, a) { canvas_checkPrivateRedeclaration(e, a), a.add(e); }
function canvas_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function canvas_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function canvas_defineProperty(e, r, t) { return (r = canvas_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function canvas_toPropertyKey(t) { var i = canvas_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function canvas_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const MIN_FONT_SIZE = 16;
const MAX_FONT_SIZE = 100;
const EXECUTION_TIME = 15;
const EXECUTION_STEPS = 10;
const FULL_CHUNK_HEIGHT = 16;
const SCALE_MATRIX = new DOMMatrix();
const XY = new Float32Array(2);
const MIN_MAX_INIT = new Float32Array([Infinity, Infinity, -Infinity, -Infinity]);
function mirrorContextOperations(ctx, destCtx) {
if (ctx._removeMirroring) {
throw new Error("Context is already forwarding operations.");
}
ctx.__originalSave = ctx.save;
ctx.__originalRestore = ctx.restore;
ctx.__originalRotate = ctx.rotate;
ctx.__originalScale = ctx.scale;
ctx.__originalTranslate = ctx.translate;
ctx.__originalTransform = ctx.transform;
ctx.__originalSetTransform = ctx.setTransform;
ctx.__originalResetTransform = ctx.resetTransform;
ctx.__originalClip = ctx.clip;
ctx.__originalMoveTo = ctx.moveTo;
ctx.__originalLineTo = ctx.lineTo;
ctx.__originalBezierCurveTo = ctx.bezierCurveTo;
ctx.__originalRect = ctx.rect;
ctx.__originalClosePath = ctx.closePath;
ctx.__originalBeginPath = ctx.beginPath;
ctx._removeMirroring = () => {
ctx.save = ctx.__originalSave;
ctx.restore = ctx.__originalRestore;
ctx.rotate = ctx.__originalRotate;
ctx.scale = ctx.__originalScale;
ctx.translate = ctx.__originalTranslate;
ctx.transform = ctx.__originalTransform;
ctx.setTransform = ctx.__originalSetTransform;
ctx.resetTransform = ctx.__originalResetTransform;
ctx.clip = ctx.__originalClip;
ctx.moveTo = ctx.__originalMoveTo;
ctx.lineTo = ctx.__originalLineTo;
ctx.bezierCurveTo = ctx.__originalBezierCurveTo;
ctx.rect = ctx.__originalRect;
ctx.closePath = ctx.__originalClosePath;
ctx.beginPath = ctx.__originalBeginPath;
delete ctx._removeMirroring;
};
ctx.save = function () {
destCtx.save();
this.__originalSave();
};
ctx.restore = function () {
destCtx.restore();
this.__originalRestore();
};
ctx.translate = function (x, y) {
destCtx.translate(x, y);
this.__originalTranslate(x, y);
};
ctx.scale = function (x, y) {
destCtx.scale(x, y);
this.__originalScale(x, y);
};
ctx.transform = function (a, b, c, d, e, f) {
destCtx.transform(a, b, c, d, e, f);
this.__originalTransform(a, b, c, d, e, f);
};
ctx.setTransform = function (a, b, c, d, e, f) {
destCtx.setTransform(a, b, c, d, e, f);
this.__originalSetTransform(a, b, c, d, e, f);
};
ctx.resetTransform = function () {
destCtx.resetTransform();
this.__originalResetTransform();
};
ctx.rotate = function (angle) {
destCtx.rotate(angle);
this.__originalRotate(angle);
};
ctx.clip = function (rule) {
destCtx.clip(rule);
this.__originalClip(rule);
};
ctx.moveTo = function (x, y) {
destCtx.moveTo(x, y);
this.__originalMoveTo(x, y);
};
ctx.lineTo = function (x, y) {
destCtx.lineTo(x, y);
this.__originalLineTo(x, y);
};
ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {
destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
};
ctx.rect = function (x, y, width, height) {
destCtx.rect(x, y, width, height);
this.__originalRect(x, y, width, height);
};
ctx.closePath = function () {
destCtx.closePath();
this.__originalClosePath();
};
ctx.beginPath = function () {
destCtx.beginPath();
this.__originalBeginPath();
};
}
class CachedCanvases {
constructor(canvasFactory) {
this.canvasFactory = canvasFactory;
this.cache = Object.create(null);
}
getCanvas(id, width, height) {
let canvasEntry;
if (this.cache[id] !== undefined) {
canvasEntry = this.cache[id];
this.canvasFactory.reset(canvasEntry, width, height);
} else {
canvasEntry = this.canvasFactory.create(width, height);
this.cache[id] = canvasEntry;
}
return canvasEntry;
}
delete(id) {
delete this.cache[id];
}
clear() {
for (const id in this.cache) {
const canvasEntry = this.cache[id];
this.canvasFactory.destroy(canvasEntry);
delete this.cache[id];
}
}
}
function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) {
const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);
if (b === 0 && c === 0) {
const tlX = destX * a + tx;
const rTlX = Math.round(tlX);
const tlY = destY * d + ty;
const rTlY = Math.round(tlY);
const brX = (destX + destW) * a + tx;
const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;
const brY = (destY + destH) * d + ty;
const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;
ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);
ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);
ctx.setTransform(a, b, c, d, tx, ty);
return [rWidth, rHeight];
}
if (a === 0 && d === 0) {
const tlX = destY * c + tx;
const rTlX = Math.round(tlX);
const tlY = destX * b + ty;
const rTlY = Math.round(tlY);
const brX = (destY + destH) * c + tx;
const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;
const brY = (destX + destW) * b + ty;
const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;
ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);
ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);
ctx.setTransform(a, b, c, d, tx, ty);
return [rHeight, rWidth];
}
ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);
const scaleX = Math.hypot(a, b);
const scaleY = Math.hypot(c, d);
return [scaleX * destW, scaleY * destH];
}
class CanvasExtraState {
constructor(width, height) {
canvas_defineProperty(this, "alphaIsShape", false);
canvas_defineProperty(this, "fontSize", 0);
canvas_defineProperty(this, "fontSizeScale", 1);
canvas_defineProperty(this, "textMatrix", null);
canvas_defineProperty(this, "textMatrixScale", 1);
canvas_defineProperty(this, "fontMatrix", FONT_IDENTITY_MATRIX);
canvas_defineProperty(this, "leading", 0);
canvas_defineProperty(this, "x", 0);
canvas_defineProperty(this, "y", 0);
canvas_defineProperty(this, "lineX", 0);
canvas_defineProperty(this, "lineY", 0);
canvas_defineProperty(this, "charSpacing", 0);
canvas_defineProperty(this, "wordSpacing", 0);
canvas_defineProperty(this, "textHScale", 1);
canvas_defineProperty(this, "textRenderingMode", TextRenderingMode.FILL);
canvas_defineProperty(this, "textRise", 0);
canvas_defineProperty(this, "fillColor", "#000000");
canvas_defineProperty(this, "strokeColor", "#000000");
canvas_defineProperty(this, "patternFill", false);
canvas_defineProperty(this, "patternStroke", false);
canvas_defineProperty(this, "fillAlpha", 1);
canvas_defineProperty(this, "strokeAlpha", 1);
canvas_defineProperty(this, "lineWidth", 1);
canvas_defineProperty(this, "activeSMask", null);
canvas_defineProperty(this, "transferMaps", "none");
this.clipBox = new Float32Array([0, 0, width, height]);
this.minMax = MIN_MAX_INIT.slice();
}
clone() {
const clone = Object.create(this);
clone.clipBox = this.clipBox.slice();
clone.minMax = this.minMax.slice();
return clone;
}
getPathBoundingBox() {
let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : PathType.FILL;
let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
const box = this.minMax.slice();
if (pathType === PathType.STROKE) {
if (!transform) {
unreachable("Stroke bounding box must include transform.");
}
Util.singularValueDecompose2dScale(transform, XY);
const xStrokePad = XY[0] * this.lineWidth / 2;
const yStrokePad = XY[1] * this.lineWidth / 2;
box[0] -= xStrokePad;
box[1] -= yStrokePad;
box[2] += xStrokePad;
box[3] += yStrokePad;
}
return box;
}
updateClipFromPath() {
const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());
this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);
}
isEmptyClip() {
return this.minMax[0] === Infinity;
}
startNewPathAndClipBox(box) {
this.clipBox.set(box, 0);
this.minMax.set(MIN_MAX_INIT, 0);
}
getClippedPathBoundingBox() {
let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : PathType.FILL;
let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
}
}
function putBinaryImageData(ctx, imgData) {
if (imgData instanceof ImageData) {
ctx.putImageData(imgData, 0, 0);
return;
}
const height = imgData.height,
width = imgData.width;
const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
let srcPos = 0,
destPos;
const src = imgData.data;
const dest = chunkImgData.data;
let i, j, thisChunkHeight, elemsInThisChunk;
if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) {
const srcLength = src.byteLength;
const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
const dest32DataLength = dest32.length;
const fullSrcDiff = width + 7 >> 3;
const white = 0xffffffff;
const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
for (i = 0; i < totalChunks; i++) {
thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
destPos = 0;
for (j = 0; j < thisChunkHeight; j++) {
const srcDiff = srcLength - srcPos;
let k = 0;
const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
const kEndUnrolled = kEnd & ~7;
let mask = 0;
let srcByte = 0;
for (; k < kEndUnrolled; k += 8) {
srcByte = src[srcPos++];
dest32[destPos++] = srcByte & 128 ? white : black;
dest32[destPos++] = srcByte & 64 ? white : black;
dest32[destPos++] = srcByte & 32 ? white : black;
dest32[destPos++] = srcByte & 16 ? white : black;
dest32[destPos++] = srcByte & 8 ? white : black;
dest32[destPos++] = srcByte & 4 ? white : black;
dest32[destPos++] = srcByte & 2 ? white : black;
dest32[destPos++] = srcByte & 1 ? white : black;
}
for (; k < kEnd; k++) {
if (mask === 0) {
srcByte = src[srcPos++];
mask = 128;
}
dest32[destPos++] = srcByte & mask ? white : black;
mask >>= 1;
}
}
while (destPos < dest32DataLength) {
dest32[destPos++] = 0;
}
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
}
} else if (imgData.kind === util_ImageKind.RGBA_32BPP) {
j = 0;
elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
for (i = 0; i < fullChunks; i++) {
dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
srcPos += elemsInThisChunk;
ctx.putImageData(chunkImgData, 0, j);
j += FULL_CHUNK_HEIGHT;
}
if (i < totalChunks) {
elemsInThisChunk = width * partialChunkHeight * 4;
dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
ctx.putImageData(chunkImgData, 0, j);
}
} else if (imgData.kind === util_ImageKind.RGB_24BPP) {
thisChunkHeight = FULL_CHUNK_HEIGHT;
elemsInThisChunk = width * thisChunkHeight;
for (i = 0; i < totalChunks; i++) {
if (i >= fullChunks) {
thisChunkHeight = partialChunkHeight;
elemsInThisChunk = width * thisChunkHeight;
}
destPos = 0;
for (j = elemsInThisChunk; j--;) {
dest[destPos++] = src[srcPos++];
dest[destPos++] = src[srcPos++];
dest[destPos++] = src[srcPos++];
dest[destPos++] = 255;
}
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
}
} else {
throw new Error(`bad image kind: ${imgData.kind}`);
}
}
function putBinaryImageMask(ctx, imgData) {
if (imgData.bitmap) {
ctx.drawImage(imgData.bitmap, 0, 0);
return;
}
const height = imgData.height,
width = imgData.width;
const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
let srcPos = 0;
const src = imgData.data;
const dest = chunkImgData.data;
for (let i = 0; i < totalChunks; i++) {
const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
({
srcPos
} = convertBlackAndWhiteToRGBA({
src,
srcPos,
dest,
width,
height: thisChunkHeight,
nonBlackColor: 0
}));
ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
}
}
function copyCtxState(sourceCtx, destCtx) {
const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"];
for (const property of properties) {
if (sourceCtx[property] !== undefined) {
destCtx[property] = sourceCtx[property];
}
}
if (sourceCtx.setLineDash !== undefined) {
destCtx.setLineDash(sourceCtx.getLineDash());
destCtx.lineDashOffset = sourceCtx.lineDashOffset;
}
}
function resetCtxToDefault(ctx) {
ctx.strokeStyle = ctx.fillStyle = "#000000";
ctx.fillRule = "nonzero";
ctx.globalAlpha = 1;
ctx.lineWidth = 1;
ctx.lineCap = "butt";
ctx.lineJoin = "miter";
ctx.miterLimit = 10;
ctx.globalCompositeOperation = "source-over";
ctx.font = "10px sans-serif";
if (ctx.setLineDash !== undefined) {
ctx.setLineDash([]);
ctx.lineDashOffset = 0;
}
const {
filter
} = ctx;
if (filter !== "none" && filter !== "") {
ctx.filter = "none";
}
}
function getImageSmoothingEnabled(transform, interpolate) {
if (interpolate) {
return true;
}
Util.singularValueDecompose2dScale(transform, XY);
const actualScale = Math.fround(OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS);
return XY[0] <= actualScale && XY[1] <= actualScale;
}
const LINE_CAP_STYLES = ["butt", "round", "square"];
const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
const NORMAL_CLIP = {};
const EO_CLIP = {};
var _CanvasGraphics_brand = /*#__PURE__*/new WeakSet();
class CanvasGraphics {
constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, _ref, annotationCanvasMap, pageColors) {
let {
optionalContentConfig,
markedContentStack = null
} = _ref;
canvas_classPrivateMethodInitSpec(this, _CanvasGraphics_brand);
this.ctx = canvasCtx;
this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
this.stateStack = [];
this.pendingClip = null;
this.pendingEOFill = false;
this.res = null;
this.xobjs = null;
this.commonObjs = commonObjs;
this.objs = objs;
this.canvasFactory = canvasFactory;
this.filterFactory = filterFactory;
this.groupStack = [];
this.baseTransform = null;
this.baseTransformStack = [];
this.groupLevel = 0;
this.smaskStack = [];
this.smaskCounter = 0;
this.tempSMask = null;
this.suspendedCtx = null;
this.contentVisible = true;
this.markedContentStack = markedContentStack || [];
this.optionalContentConfig = optionalContentConfig;
this.cachedCanvases = new CachedCanvases(this.canvasFactory);
this.cachedPatterns = new Map();
this.annotationCanvasMap = annotationCanvasMap;
this.viewportScale = 1;
this.outputScaleX = 1;
this.outputScaleY = 1;
this.pageColors = pageColors;
this._cachedScaleForStroking = [-1, 0];
this._cachedGetSinglePixelWidth = null;
this._cachedBitmapsMap = new Map();
}
getObject(data) {
let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (typeof data === "string") {
return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data);
}
return fallback;
}
beginDrawing(_ref2) {
let {
transform,
viewport,
transparency = false,
background = null
} = _ref2;
const width = this.ctx.canvas.width;
const height = this.ctx.canvas.height;
const savedFillStyle = this.ctx.fillStyle;
this.ctx.fillStyle = background || "#ffffff";
this.ctx.fillRect(0, 0, width, height);
this.ctx.fillStyle = savedFillStyle;
if (transparency) {
const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height);
this.compositeCtx = this.ctx;
this.transparentCanvas = transparentCanvas.canvas;
this.ctx = transparentCanvas.context;
this.ctx.save();
this.ctx.transform(...getCurrentTransform(this.compositeCtx));
}
this.ctx.save();
resetCtxToDefault(this.ctx);
if (transform) {
this.ctx.transform(...transform);
this.outputScaleX = transform[0];
this.outputScaleY = transform[0];
}
this.ctx.transform(...viewport.transform);
this.viewportScale = viewport.scale;
this.baseTransform = getCurrentTransform(this.ctx);
}
executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
const argsArray = operatorList.argsArray;
const fnArray = operatorList.fnArray;
let i = executionStartIdx || 0;
const argsArrayLen = argsArray.length;
if (argsArrayLen === i) {
return i;
}
const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
let steps = 0;
const commonObjs = this.commonObjs;
const objs = this.objs;
let fnId;
while (true) {
if (stepper !== undefined && i === stepper.nextBreakPoint) {
stepper.breakIt(i, continueCallback);
return i;
}
fnId = fnArray[i];
if (fnId !== OPS.dependency) {
this[fnId].apply(this, argsArray[i]);
} else {
for (const depObjId of argsArray[i]) {
const objsPool = depObjId.startsWith("g_") ? commonObjs : objs;
if (!objsPool.has(depObjId)) {
objsPool.get(depObjId, continueCallback);
return i;
}
}
}
i++;
if (i === argsArrayLen) {
return i;
}
if (chunkOperations && ++steps > EXECUTION_STEPS) {
if (Date.now() > endTime) {
continueCallback();
return i;
}
steps = 0;
}
}
}
endDrawing() {
canvas_assertClassBrand(_CanvasGraphics_brand, this, _restoreInitialState).call(this);
this.cachedCanvases.clear();
this.cachedPatterns.clear();
for (const cache of this._cachedBitmapsMap.values()) {
for (const canvas of cache.values()) {
if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) {
canvas.width = canvas.height = 0;
}
}
cache.clear();
}
this._cachedBitmapsMap.clear();
canvas_assertClassBrand(_CanvasGraphics_brand, this, _drawFilter).call(this);
}
_scaleImage(img, inverseTransform) {
const width = img.width ?? img.displayWidth;
const height = img.height ?? img.displayHeight;
let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);
let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);
let paintWidth = width,
paintHeight = height;
let tmpCanvasId = "prescale1";
let tmpCanvas, tmpCtx;
while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
let newWidth = paintWidth,
newHeight = paintHeight;
if (widthScale > 2 && paintWidth > 1) {
newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2);
widthScale /= paintWidth / newWidth;
}
if (heightScale > 2 && paintHeight > 1) {
newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2;
heightScale /= paintHeight / newHeight;
}
tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
tmpCtx = tmpCanvas.context;
tmpCtx.clearRect(0, 0, newWidth, newHeight);
tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
img = tmpCanvas.canvas;
paintWidth = newWidth;
paintHeight = newHeight;
tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
}
return {
img,
paintWidth,
paintHeight
};
}
_createMaskCanvas(img) {
const ctx = this.ctx;
const {
width,
height
} = img;
const fillColor = this.current.fillColor;
const isPatternFill = this.current.patternFill;
const currentTransform = getCurrentTransform(ctx);
let cache, cacheKey, scaled, maskCanvas;
if ((img.bitmap || img.data) && img.count > 1) {
const mainKey = img.bitmap || img.data.buffer;
cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);
cache = this._cachedBitmapsMap.get(mainKey);
if (!cache) {
cache = new Map();
this._cachedBitmapsMap.set(mainKey, cache);
}
const cachedImage = cache.get(cacheKey);
if (cachedImage && !isPatternFill) {
const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);
const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);
return {
canvas: cachedImage,
offsetX,
offsetY
};
}
scaled = cachedImage;
}
if (!scaled) {
maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
putBinaryImageMask(maskCanvas.context, img);
}
let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]);
maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);
const minMax = MIN_MAX_INIT.slice();
Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax);
const [minX, minY, maxX, maxY] = minMax;
const drawnWidth = Math.round(maxX - minX) || 1;
const drawnHeight = Math.round(maxY - minY) || 1;
const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight);
const fillCtx = fillCanvas.context;
const offsetX = minX;
const offsetY = minY;
fillCtx.translate(-offsetX, -offsetY);
fillCtx.transform(...maskToCanvas);
if (!scaled) {
scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx));
scaled = scaled.img;
if (cache && isPatternFill) {
cache.set(cacheKey, scaled);
}
}
fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate);
drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height);
fillCtx.globalCompositeOperation = "source-in";
const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]);
fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor;
fillCtx.fillRect(0, 0, width, height);
if (cache && !isPatternFill) {
this.cachedCanvases.delete("fillCanvas");
cache.set(cacheKey, fillCanvas.canvas);
}
return {
canvas: fillCanvas.canvas,
offsetX: Math.round(offsetX),
offsetY: Math.round(offsetY)
};
}
setLineWidth(width) {
if (width !== this.current.lineWidth) {
this._cachedScaleForStroking[0] = -1;
}
this.current.lineWidth = width;
this.ctx.lineWidth = width;
}
setLineCap(style) {
this.ctx.lineCap = LINE_CAP_STYLES[style];
}
setLineJoin(style) {
this.ctx.lineJoin = LINE_JOIN_STYLES[style];
}
setMiterLimit(limit) {
this.ctx.miterLimit = limit;
}
setDash(dashArray, dashPhase) {
const ctx = this.ctx;
if (ctx.setLineDash !== undefined) {
ctx.setLineDash(dashArray);
ctx.lineDashOffset = dashPhase;
}
}
setRenderingIntent(intent) {}
setFlatness(flatness) {}
setGState(states) {
for (const [key, value] of states) {
switch (key) {
case "LW":
this.setLineWidth(value);
break;
case "LC":
this.setLineCap(value);
break;
case "LJ":
this.setLineJoin(value);
break;
case "ML":
this.setMiterLimit(value);
break;
case "D":
this.setDash(value[0], value[1]);
break;
case "RI":
this.setRenderingIntent(value);
break;
case "FL":
this.setFlatness(value);
break;
case "Font":
this.setFont(value[0], value[1]);
break;
case "CA":
this.current.strokeAlpha = value;
break;
case "ca":
this.ctx.globalAlpha = this.current.fillAlpha = value;
break;
case "BM":
this.ctx.globalCompositeOperation = value;
break;
case "SMask":
this.current.activeSMask = value ? this.tempSMask : null;
this.tempSMask = null;
this.checkSMaskState();
break;
case "TR":
this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value);
break;
}
}
}
get inSMaskMode() {
return !!this.suspendedCtx;
}
checkSMaskState() {
const inSMaskMode = this.inSMaskMode;
if (this.current.activeSMask && !inSMaskMode) {
this.beginSMaskMode();
} else if (!this.current.activeSMask && inSMaskMode) {
this.endSMaskMode();
}
}
beginSMaskMode() {
if (this.inSMaskMode) {
throw new Error("beginSMaskMode called while already in smask mode");
}
const drawnWidth = this.ctx.canvas.width;
const drawnHeight = this.ctx.canvas.height;
const cacheId = "smaskGroupAt" + this.groupLevel;
const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);
this.suspendedCtx = this.ctx;
const ctx = this.ctx = scratchCanvas.context;
ctx.setTransform(this.suspendedCtx.getTransform());
copyCtxState(this.suspendedCtx, ctx);
mirrorContextOperations(ctx, this.suspendedCtx);
this.setGState([["BM", "source-over"]]);
}
endSMaskMode() {
if (!this.inSMaskMode) {
throw new Error("endSMaskMode called while not in smask mode");
}
this.ctx._removeMirroring();
copyCtxState(this.ctx, this.suspendedCtx);
this.ctx = this.suspendedCtx;
this.suspendedCtx = null;
}
compose(dirtyBox) {
if (!this.current.activeSMask) {
return;
}
if (!dirtyBox) {
dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
} else {
dirtyBox[0] = Math.floor(dirtyBox[0]);
dirtyBox[1] = Math.floor(dirtyBox[1]);
dirtyBox[2] = Math.ceil(dirtyBox[2]);
dirtyBox[3] = Math.ceil(dirtyBox[3]);
}
const smask = this.current.activeSMask;
const suspendedCtx = this.suspendedCtx;
this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);
this.ctx.save();
this.ctx.setTransform(1, 0, 0, 1, 0, 0);
this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
this.ctx.restore();
}
composeSMask(ctx, smask, layerCtx, layerBox) {
const layerOffsetX = layerBox[0];
const layerOffsetY = layerBox[1];
const layerWidth = layerBox[2] - layerOffsetX;
const layerHeight = layerBox[3] - layerOffsetY;
if (layerWidth === 0 || layerHeight === 0) {
return;
}
this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);
ctx.save();
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.drawImage(layerCtx.canvas, 0, 0);
ctx.restore();
}
genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {
let maskCanvas = maskCtx.canvas;
let maskX = layerOffsetX - maskOffsetX;
let maskY = layerOffsetY - maskOffsetY;
if (backdrop) {
if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) {
const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height);
const ctx = canvas.context;
ctx.drawImage(maskCanvas, -maskX, -maskY);
ctx.globalCompositeOperation = "destination-atop";
ctx.fillStyle = backdrop;
ctx.fillRect(0, 0, width, height);
ctx.globalCompositeOperation = "source-over";
maskCanvas = canvas.canvas;
maskX = maskY = 0;
} else {
maskCtx.save();
maskCtx.globalAlpha = 1;
maskCtx.setTransform(1, 0, 0, 1, 0, 0);
const clip = new Path2D();
clip.rect(maskX, maskY, width, height);
maskCtx.clip(clip);
maskCtx.globalCompositeOperation = "destination-atop";
maskCtx.fillStyle = backdrop;
maskCtx.fillRect(maskX, maskY, width, height);
maskCtx.restore();
}
}
layerCtx.save();
layerCtx.globalAlpha = 1;
layerCtx.setTransform(1, 0, 0, 1, 0, 0);
if (subtype === "Alpha" && transferMap) {
layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);
} else if (subtype === "Luminosity") {
layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);
}
const clip = new Path2D();
clip.rect(layerOffsetX, layerOffsetY, width, height);
layerCtx.clip(clip);
layerCtx.globalCompositeOperation = "destination-in";
layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height);
layerCtx.restore();
}
save() {
if (this.inSMaskMode) {
copyCtxState(this.ctx, this.suspendedCtx);
}
this.ctx.save();
const old = this.current;
this.stateStack.push(old);
this.current = old.clone();
}
restore() {
if (this.stateStack.length === 0) {
if (this.inSMaskMode) {
this.endSMaskMode();
}
return;
}
this.current = this.stateStack.pop();
this.ctx.restore();
if (this.inSMaskMode) {
copyCtxState(this.suspendedCtx, this.ctx);
}
this.checkSMaskState();
this.pendingClip = null;
this._cachedScaleForStroking[0] = -1;
this._cachedGetSinglePixelWidth = null;
}
transform(a, b, c, d, e, f) {
this.ctx.transform(a, b, c, d, e, f);
this._cachedScaleForStroking[0] = -1;
this._cachedGetSinglePixelWidth = null;
}
constructPath(op, data, minMax) {
let [path] = data;
if (!minMax) {
path ||= data[0] = new Path2D();
this[op](path);
return;
}
if (!(path instanceof Path2D)) {
const path2d = data[0] = new Path2D();
for (let i = 0, ii = path.length; i < ii;) {
switch (path[i++]) {
case DrawOPS.moveTo:
path2d.moveTo(path[i++], path[i++]);
break;
case DrawOPS.lineTo:
path2d.lineTo(path[i++], path[i++]);
break;
case DrawOPS.curveTo:
path2d.bezierCurveTo(path[i++], path[i++], path[i++], path[i++], path[i++], path[i++]);
break;
case DrawOPS.closePath:
path2d.closePath();
break;
default:
warn(`Unrecognized drawing path operator: ${path[i - 1]}`);
break;
}
}
path = path2d;
}
Util.axialAlignedBoundingBox(minMax, getCurrentTransform(this.ctx), this.current.minMax);
this[op](path);
}
closePath() {
this.ctx.closePath();
}
stroke(path) {
let consumePath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
const ctx = this.ctx;
const strokeColor = this.current.strokeColor;
ctx.globalAlpha = this.current.strokeAlpha;
if (this.contentVisible) {
if (typeof strokeColor === "object" && strokeColor?.getPattern) {
const baseTransform = strokeColor.isModifyingCurrentTransform() ? ctx.getTransform() : null;
ctx.save();
ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE);
if (baseTransform) {
const newPath = new Path2D();
newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform));
path = newPath;
}
this.rescaleAndStroke(path, false);
ctx.restore();
} else {
this.rescaleAndStroke(path, true);
}
}
if (consumePath) {
this.consumePath(path, this.current.getClippedPathBoundingBox(PathType.STROKE, getCurrentTransform(this.ctx)));
}
ctx.globalAlpha = this.current.fillAlpha;
}
closeStroke(path) {
this.stroke(path);
}
fill(path) {
let consumePath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
const ctx = this.ctx;
const fillColor = this.current.fillColor;
const isPatternFill = this.current.patternFill;
let needRestore = false;
if (isPatternFill) {
const baseTransform = fillColor.isModifyingCurrentTransform() ? ctx.getTransform() : null;
ctx.save();
ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL);
if (baseTransform) {
const newPath = new Path2D();
newPath.addPath(path, ctx.getTransform().invertSelf().multiplySelf(baseTransform));
path = newPath;
}
needRestore = true;
}
const intersect = this.current.getClippedPathBoundingBox();
if (this.contentVisible && intersect !== null) {
if (this.pendingEOFill) {
ctx.fill(path, "evenodd");
this.pendingEOFill = false;
} else {
ctx.fill(path);
}
}
if (needRestore) {
ctx.restore();
}
if (consumePath) {
this.consumePath(path, intersect);
}
}
eoFill(path) {
this.pendingEOFill = true;
this.fill(path);
}
fillStroke(path) {
this.fill(path, false);
this.stroke(path, false);
this.consumePath(path);
}
eoFillStroke(path) {
this.pendingEOFill = true;
this.fillStroke(path);
}
closeFillStroke(path) {
this.fillStroke(path);
}
closeEOFillStroke(path) {
this.pendingEOFill = true;
this.fillStroke(path);
}
endPath(path) {
this.consumePath(path);
}
rawFillPath(path) {
this.ctx.fill(path);
}
clip() {
this.pendingClip = NORMAL_CLIP;
}
eoClip() {
this.pendingClip = EO_CLIP;
}
beginText() {
this.current.textMatrix = null;
this.current.textMatrixScale = 1;
this.current.x = this.current.lineX = 0;
this.current.y = this.current.lineY = 0;
}
endText() {
const paths = this.pendingTextPaths;
const ctx = this.ctx;
if (paths === undefined) {
return;
}
const newPath = new Path2D();
const invTransf = ctx.getTransform().invertSelf();
for (const {
transform,
x,
y,
fontSize,
path
} of paths) {
newPath.addPath(path, new DOMMatrix(transform).preMultiplySelf(invTransf).translate(x, y).scale(fontSize, -fontSize));
}
ctx.clip(newPath);
delete this.pendingTextPaths;
}
setCharSpacing(spacing) {
this.current.charSpacing = spacing;
}
setWordSpacing(spacing) {
this.current.wordSpacing = spacing;
}
setHScale(scale) {
this.current.textHScale = scale / 100;
}
setLeading(leading) {
this.current.leading = -leading;
}
setFont(fontRefName, size) {
const fontObj = this.commonObjs.get(fontRefName);
const current = this.current;
if (!fontObj) {
throw new Error(`Can't find font for ${fontRefName}`);
}
current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;
if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
warn("Invalid font matrix for font " + fontRefName);
}
if (size < 0) {
size = -size;
current.fontDirection = -1;
} else {
current.fontDirection = 1;
}
this.current.font = fontObj;
this.current.fontSize = size;
if (fontObj.isType3Font) {
return;
}
const name = fontObj.loadedName || "sans-serif";
const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`;
let bold = "normal";
if (fontObj.black) {
bold = "900";
} else if (fontObj.bold) {
bold = "bold";
}
const italic = fontObj.italic ? "italic" : "normal";
let browserFontSize = size;
if (size < MIN_FONT_SIZE) {
browserFontSize = MIN_FONT_SIZE;
} else if (size > MAX_FONT_SIZE) {
browserFontSize = MAX_FONT_SIZE;
}
this.current.fontSizeScale = size / browserFontSize;
this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;
}
setTextRenderingMode(mode) {
this.current.textRenderingMode = mode;
}
setTextRise(rise) {
this.current.textRise = rise;
}
moveText(x, y) {
this.current.x = this.current.lineX += x;
this.current.y = this.current.lineY += y;
}
setLeadingMoveText(x, y) {
this.setLeading(-y);
this.moveText(x, y);
}
setTextMatrix(matrix) {
const {
current
} = this;
current.textMatrix = matrix;
current.textMatrixScale = Math.hypot(matrix[0], matrix[1]);
current.x = current.lineX = 0;
current.y = current.lineY = 0;
}
nextLine() {
this.moveText(0, this.current.leading);
}
paintChar(character, x, y, patternFillTransform, patternStrokeTransform) {
const ctx = this.ctx;
const current = this.current;
const font = current.font;
const textRenderingMode = current.textRenderingMode;
const fontSize = current.fontSize / current.fontSizeScale;
const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;
const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG);
const patternFill = current.patternFill && !font.missingFile;
const patternStroke = current.patternStroke && !font.missingFile;
let path;
if (font.disableFontFace || isAddToPathSet || patternFill || patternStroke) {
path = font.getPathGenerator(this.commonObjs, character);
}
if (font.disableFontFace || patternFill || patternStroke) {
ctx.save();
ctx.translate(x, y);
ctx.scale(fontSize, -fontSize);
let currentTransform;
if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
if (patternFillTransform) {
currentTransform = ctx.getTransform();
ctx.setTransform(...patternFillTransform);
ctx.fill(canvas_assertClassBrand(_CanvasGraphics_brand, this, _getScaledPath).call(this, path, currentTransform, patternFillTransform));
} else {
ctx.fill(path);
}
}
if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
if (patternStrokeTransform) {
currentTransform ||= ctx.getTransform();
ctx.setTransform(...patternStrokeTransform);
const {
a,
b,
c,
d
} = currentTransform;
const invPatternTransform = Util.inverseTransform(patternStrokeTransform);
const transf = Util.transform([a, b, c, d, 0, 0], invPatternTransform);
Util.singularValueDecompose2dScale(transf, XY);
ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize;
ctx.stroke(canvas_assertClassBrand(_CanvasGraphics_brand, this, _getScaledPath).call(this, path, currentTransform, patternStrokeTransform));
} else {
ctx.lineWidth /= fontSize;
ctx.stroke(path);
}
}
ctx.restore();
} else {
if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
ctx.fillText(character, x, y);
}
if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
ctx.strokeText(character, x, y);
}
}
if (isAddToPathSet) {
const paths = this.pendingTextPaths ||= [];
paths.push({
transform: getCurrentTransform(ctx),
x,
y,
fontSize,
path
});
}
}
get isFontSubpixelAAEnabled() {
const {
context: ctx
} = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
ctx.scale(1.5, 1);
ctx.fillText("I", 0, 10);
const data = ctx.getImageData(0, 0, 10, 10).data;
let enabled = false;
for (let i = 3; i < data.length; i += 4) {
if (data[i] > 0 && data[i] < 255) {
enabled = true;
break;
}
}
return shadow(this, "isFontSubpixelAAEnabled", enabled);
}
showText(glyphs) {
const current = this.current;
const font = current.font;
if (font.isType3Font) {
return this.showType3Text(glyphs);
}
const fontSize = current.fontSize;
if (fontSize === 0) {
return undefined;
}
const ctx = this.ctx;
const fontSizeScale = current.fontSizeScale;
const charSpacing = current.charSpacing;
const wordSpacing = current.wordSpacing;
const fontDirection = current.fontDirection;
const textHScale = current.textHScale * fontDirection;
const glyphsLength = glyphs.length;
const vertical = font.vertical;
const spacingDir = vertical ? 1 : -1;
const defaultVMetrics = font.defaultVMetrics;
const widthAdvanceScale = fontSize * current.fontMatrix[0];
const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
ctx.save();
if (current.textMatrix) {
ctx.transform(...current.textMatrix);
}
ctx.translate(current.x, current.y + current.textRise);
if (fontDirection > 0) {
ctx.scale(textHScale, -1);
} else {
ctx.scale(textHScale, 1);
}
let patternFillTransform, patternStrokeTransform;
if (current.patternFill) {
ctx.save();
const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL);
patternFillTransform = getCurrentTransform(ctx);
ctx.restore();
ctx.fillStyle = pattern;
}
if (current.patternStroke) {
ctx.save();
const pattern = current.strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE);
patternStrokeTransform = getCurrentTransform(ctx);
ctx.restore();
ctx.strokeStyle = pattern;
}
let lineWidth = current.lineWidth;
const scale = current.textMatrixScale;
if (scale === 0 || lineWidth === 0) {
const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;
if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
lineWidth = this.getSinglePixelWidth();
}
} else {
lineWidth /= scale;
}
if (fontSizeScale !== 1.0) {
ctx.scale(fontSizeScale, fontSizeScale);
lineWidth /= fontSizeScale;
}
ctx.lineWidth = lineWidth;
if (font.isInvalidPDFjsFont) {
const chars = [];
let width = 0;
for (const glyph of glyphs) {
chars.push(glyph.unicode);
width += glyph.width;
}
ctx.fillText(chars.join(""), 0, 0);
current.x += width * widthAdvanceScale * textHScale;
ctx.restore();
this.compose();
return undefined;
}
let x = 0,
i;
for (i = 0; i < glyphsLength; ++i) {
const glyph = glyphs[i];
if (typeof glyph === "number") {
x += spacingDir * glyph * fontSize / 1000;
continue;
}
let restoreNeeded = false;
const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
const character = glyph.fontChar;
const accent = glyph.accent;
let scaledX, scaledY;
let width = glyph.width;
if (vertical) {
const vmetric = glyph.vmetric || defaultVMetrics;
const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;
const vy = vmetric[2] * widthAdvanceScale;
width = vmetric ? -vmetric[0] : width;
scaledX = vx / fontSizeScale;
scaledY = (x + vy) / fontSizeScale;
} else {
scaledX = x / fontSizeScale;
scaledY = 0;
}
if (font.remeasure && width > 0) {
const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
const characterScaleX = width / measuredWidth;
restoreNeeded = true;
ctx.save();
ctx.scale(characterScaleX, 1);
scaledX /= characterScaleX;
} else if (width !== measuredWidth) {
scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
}
}
if (this.contentVisible && (glyph.isInFont || font.missingFile)) {
if (simpleFillText && !accent) {
ctx.fillText(character, scaledX, scaledY);
} else {
this.paintChar(character, scaledX, scaledY, patternFillTransform, patternStrokeTransform);
if (accent) {
const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternFillTransform, patternStrokeTransform);
}
}
}
const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection;
x += charWidth;
if (restoreNeeded) {
ctx.restore();
}
}
if (vertical) {
current.y -= x;
} else {
current.x += x * textHScale;
}
ctx.restore();
this.compose();
return undefined;
}
showType3Text(glyphs) {
const ctx = this.ctx;
const current = this.current;
const font = current.font;
const fontSize = current.fontSize;
const fontDirection = current.fontDirection;
const spacingDir = font.vertical ? 1 : -1;
const charSpacing = current.charSpacing;
const wordSpacing = current.wordSpacing;
const textHScale = current.textHScale * fontDirection;
const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;
const glyphsLength = glyphs.length;
const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE;
let i, glyph, width, spacingLength;
if (isTextInvisible || fontSize === 0) {
return;
}
this._cachedScaleForStroking[0] = -1;
this._cachedGetSinglePixelWidth = null;
ctx.save();
if (current.textMatrix) {
ctx.transform(...current.textMatrix);
}
ctx.translate(current.x, current.y + current.textRise);
ctx.scale(textHScale, fontDirection);
for (i = 0; i < glyphsLength; ++i) {
glyph = glyphs[i];
if (typeof glyph === "number") {
spacingLength = spacingDir * glyph * fontSize / 1000;
this.ctx.translate(spacingLength, 0);
current.x += spacingLength * textHScale;
continue;
}
const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
const operatorList = font.charProcOperatorList[glyph.operatorListId];
if (!operatorList) {
warn(`Type3 character "${glyph.operatorListId}" is not available.`);
} else if (this.contentVisible) {
this.save();
ctx.scale(fontSize, fontSize);
ctx.transform(...fontMatrix);
this.executeOperatorList(operatorList);
this.restore();
}
const p = [glyph.width, 0];
Util.applyTransform(p, fontMatrix);
width = p[0] * fontSize + spacing;
ctx.translate(width, 0);
current.x += width * textHScale;
}
ctx.restore();
}
setCharWidth(xWidth, yWidth) {}
setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
const clip = new Path2D();
clip.rect(llx, lly, urx - llx, ury - lly);
this.ctx.clip(clip);
this.endPath();
}
getColorN_Pattern(IR) {
let pattern;
if (IR[0] === "TilingPattern") {
const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);
const canvasGraphicsFactory = {
createCanvasGraphics: ctx => new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig: this.optionalContentConfig,
markedContentStack: this.markedContentStack
})
};
pattern = new TilingPattern(IR, this.ctx, canvasGraphicsFactory, baseTransform);
} else {
pattern = this._getPattern(IR[1], IR[2]);
}
return pattern;
}
setStrokeColorN() {
this.current.strokeColor = this.getColorN_Pattern(arguments);
this.current.patternStroke = true;
}
setFillColorN() {
this.current.fillColor = this.getColorN_Pattern(arguments);
this.current.patternFill = true;
}
setStrokeRGBColor(color) {
this.ctx.strokeStyle = this.current.strokeColor = color;
this.current.patternStroke = false;
}
setStrokeTransparent() {
this.ctx.strokeStyle = this.current.strokeColor = "transparent";
this.current.patternStroke = false;
}
setFillRGBColor(color) {
this.ctx.fillStyle = this.current.fillColor = color;
this.current.patternFill = false;
}
setFillTransparent() {
this.ctx.fillStyle = this.current.fillColor = "transparent";
this.current.patternFill = false;
}
_getPattern(objId) {
let matrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let pattern;
if (this.cachedPatterns.has(objId)) {
pattern = this.cachedPatterns.get(objId);
} else {
pattern = getShadingPattern(this.getObject(objId));
this.cachedPatterns.set(objId, pattern);
}
if (matrix) {
pattern.matrix = matrix;
}
return pattern;
}
shadingFill(objId) {
if (!this.contentVisible) {
return;
}
const ctx = this.ctx;
this.save();
const pattern = this._getPattern(objId);
ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING);
const inv = getCurrentTransformInverse(ctx);
if (inv) {
const {
width,
height
} = ctx.canvas;
const minMax = MIN_MAX_INIT.slice();
Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax);
const [x0, y0, x1, y1] = minMax;
this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
} else {
this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
}
this.compose(this.current.getClippedPathBoundingBox());
this.restore();
}
beginInlineImage() {
unreachable("Should not call beginInlineImage");
}
beginImageData() {
unreachable("Should not call beginImageData");
}
paintFormXObjectBegin(matrix, bbox) {
if (!this.contentVisible) {
return;
}
this.save();
this.baseTransformStack.push(this.baseTransform);
if (matrix) {
this.transform(...matrix);
}
this.baseTransform = getCurrentTransform(this.ctx);
if (bbox) {
Util.axialAlignedBoundingBox(bbox, this.baseTransform, this.current.minMax);
const [x0, y0, x1, y1] = bbox;
const clip = new Path2D();
clip.rect(x0, y0, x1 - x0, y1 - y0);
this.ctx.clip(clip);
this.endPath();
}
}
paintFormXObjectEnd() {
if (!this.contentVisible) {
return;
}
this.restore();
this.baseTransform = this.baseTransformStack.pop();
}
beginGroup(group) {
if (!this.contentVisible) {
return;
}
this.save();
if (this.inSMaskMode) {
this.endSMaskMode();
this.current.activeSMask = null;
}
const currentCtx = this.ctx;
if (!group.isolated) {
info("TODO: Support non-isolated groups.");
}
if (group.knockout) {
warn("Knockout groups not supported.");
}
const currentTransform = getCurrentTransform(currentCtx);
if (group.matrix) {
currentCtx.transform(...group.matrix);
}
if (!group.bbox) {
throw new Error("Bounding box is required.");
}
let bounds = MIN_MAX_INIT.slice();
Util.axialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx), bounds);
const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
const offsetX = Math.floor(bounds[0]);
const offsetY = Math.floor(bounds[1]);
const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);
let cacheId = "groupAt" + this.groupLevel;
if (group.smask) {
cacheId += "_smask_" + this.smaskCounter++ % 2;
}
const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight);
const groupCtx = scratchCanvas.context;
groupCtx.translate(-offsetX, -offsetY);
groupCtx.transform(...currentTransform);
let clip = new Path2D();
const [x0, y0, x1, y1] = group.bbox;
clip.rect(x0, y0, x1 - x0, y1 - y0);
if (group.matrix) {
const path = new Path2D();
path.addPath(clip, new DOMMatrix(group.matrix));
clip = path;
}
groupCtx.clip(clip);
if (group.smask) {
this.smaskStack.push({
canvas: scratchCanvas.canvas,
context: groupCtx,
offsetX,
offsetY,
subtype: group.smask.subtype,
backdrop: group.smask.backdrop,
transferMap: group.smask.transferMap || null,
startTransformInverse: null
});
} else {
currentCtx.setTransform(1, 0, 0, 1, 0, 0);
currentCtx.translate(offsetX, offsetY);
currentCtx.save();
}
copyCtxState(currentCtx, groupCtx);
this.ctx = groupCtx;
this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
this.groupStack.push(currentCtx);
this.groupLevel++;
}
endGroup(group) {
if (!this.contentVisible) {
return;
}
this.groupLevel--;
const groupCtx = this.ctx;
const ctx = this.groupStack.pop();
this.ctx = ctx;
this.ctx.imageSmoothingEnabled = false;
if (group.smask) {
this.tempSMask = this.smaskStack.pop();
this.restore();
} else {
this.ctx.restore();
const currentMtx = getCurrentTransform(this.ctx);
this.restore();
this.ctx.save();
this.ctx.setTransform(...currentMtx);
const dirtyBox = MIN_MAX_INIT.slice();
Util.axialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx, dirtyBox);
this.ctx.drawImage(groupCtx.canvas, 0, 0);
this.ctx.restore();
this.compose(dirtyBox);
}
}
beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
canvas_assertClassBrand(_CanvasGraphics_brand, this, _restoreInitialState).call(this);
resetCtxToDefault(this.ctx);
this.ctx.save();
this.save();
if (this.baseTransform) {
this.ctx.setTransform(...this.baseTransform);
}
if (rect) {
const width = rect[2] - rect[0];
const height = rect[3] - rect[1];
if (hasOwnCanvas && this.annotationCanvasMap) {
transform = transform.slice();
transform[4] -= rect[0];
transform[5] -= rect[1];
rect = rect.slice();
rect[0] = rect[1] = 0;
rect[2] = width;
rect[3] = height;
Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY);
const {
viewportScale
} = this;
const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);
const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);
this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);
const {
canvas,
context
} = this.annotationCanvas;
this.annotationCanvasMap.set(id, canvas);
this.annotationCanvas.savedCtx = this.ctx;
this.ctx = context;
this.ctx.save();
this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]);
resetCtxToDefault(this.ctx);
} else {
resetCtxToDefault(this.ctx);
this.endPath();
const clip = new Path2D();
clip.rect(rect[0], rect[1], width, height);
this.ctx.clip(clip);
}
}
this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
this.transform(...transform);
this.transform(...matrix);
}
endAnnotation() {
if (this.annotationCanvas) {
this.ctx.restore();
canvas_assertClassBrand(_CanvasGraphics_brand, this, _drawFilter).call(this);
this.ctx = this.annotationCanvas.savedCtx;
delete this.annotationCanvas.savedCtx;
delete this.annotationCanvas;
}
}
paintImageMaskXObject(img) {
if (!this.contentVisible) {
return;
}
const count = img.count;
img = this.getObject(img.data, img);
img.count = count;
const ctx = this.ctx;
const mask = this._createMaskCanvas(img);
const maskCanvas = mask.canvas;
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);
ctx.restore();
this.compose();
}
paintImageMaskXObjectRepeat(img, scaleX) {
let skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
let skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
let scaleY = arguments.length > 4 ? arguments[4] : undefined;
let positions = arguments.length > 5 ? arguments[5] : undefined;
if (!this.contentVisible) {
return;
}
img = this.getObject(img.data, img);
const ctx = this.ctx;
ctx.save();
const currentTransform = getCurrentTransform(ctx);
ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);
const mask = this._createMaskCanvas(img);
ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]);
for (let i = 0, ii = positions.length; i < ii; i += 2) {
const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);
ctx.drawImage(mask.canvas, trans[4], trans[5]);
}
ctx.restore();
this.compose();
}
paintImageMaskXObjectGroup(images) {
if (!this.contentVisible) {
return;
}
const ctx = this.ctx;
const fillColor = this.current.fillColor;
const isPatternFill = this.current.patternFill;
for (const image of images) {
const {
data,
width,
height,
transform
} = image;
const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
const maskCtx = maskCanvas.context;
maskCtx.save();
const img = this.getObject(data, image);
putBinaryImageMask(maskCtx, img);
maskCtx.globalCompositeOperation = "source-in";
maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL) : fillColor;
maskCtx.fillRect(0, 0, width, height);
maskCtx.restore();
ctx.save();
ctx.transform(...transform);
ctx.scale(1, -1);
drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
ctx.restore();
}
this.compose();
}
paintImageXObject(objId) {
if (!this.contentVisible) {
return;
}
const imgData = this.getObject(objId);
if (!imgData) {
warn("Dependent image isn't ready yet");
return;
}
this.paintInlineImageXObject(imgData);
}
paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
if (!this.contentVisible) {
return;
}
const imgData = this.getObject(objId);
if (!imgData) {
warn("Dependent image isn't ready yet");
return;
}
const width = imgData.width;
const height = imgData.height;
const map = [];
for (let i = 0, ii = positions.length; i < ii; i += 2) {
map.push({
transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
x: 0,
y: 0,
w: width,
h: height
});
}
this.paintInlineImageXObjectGroup(imgData, map);
}
applyTransferMapsToCanvas(ctx) {
if (this.current.transferMaps !== "none") {
ctx.filter = this.current.transferMaps;
ctx.drawImage(ctx.canvas, 0, 0);
ctx.filter = "none";
}
return ctx.canvas;
}
applyTransferMapsToBitmap(imgData) {
if (this.current.transferMaps === "none") {
return imgData.bitmap;
}
const {
bitmap,
width,
height
} = imgData;
const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
const tmpCtx = tmpCanvas.context;
tmpCtx.filter = this.current.transferMaps;
tmpCtx.drawImage(bitmap, 0, 0);
tmpCtx.filter = "none";
return tmpCanvas.canvas;
}
paintInlineImageXObject(imgData) {
if (!this.contentVisible) {
return;
}
const width = imgData.width;
const height = imgData.height;
const ctx = this.ctx;
this.save();
const {
filter
} = ctx;
if (filter !== "none" && filter !== "") {
ctx.filter = "none";
}
ctx.scale(1 / width, -1 / height);
let imgToPaint;
if (imgData.bitmap) {
imgToPaint = this.applyTransferMapsToBitmap(imgData);
} else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
imgToPaint = imgData;
} else {
const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
const tmpCtx = tmpCanvas.context;
putBinaryImageData(tmpCtx, imgData);
imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
}
const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx));
ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate);
drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);
this.compose();
this.restore();
}
paintInlineImageXObjectGroup(imgData, map) {
if (!this.contentVisible) {
return;
}
const ctx = this.ctx;
let imgToPaint;
if (imgData.bitmap) {
imgToPaint = imgData.bitmap;
} else {
const w = imgData.width;
const h = imgData.height;
const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
const tmpCtx = tmpCanvas.context;
putBinaryImageData(tmpCtx, imgData);
imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);
}
for (const entry of map) {
ctx.save();
ctx.transform(...entry.transform);
ctx.scale(1, -1);
drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
ctx.restore();
}
this.compose();
}
paintSolidColorImageMask() {
if (!this.contentVisible) {
return;
}
this.ctx.fillRect(0, 0, 1, 1);
this.compose();
}
markPoint(tag) {}
markPointProps(tag, properties) {}
beginMarkedContent(tag) {
this.markedContentStack.push({
visible: true
});
}
beginMarkedContentProps(tag, properties) {
if (tag === "OC") {
this.markedContentStack.push({
visible: this.optionalContentConfig.isVisible(properties)
});
} else {
this.markedContentStack.push({
visible: true
});
}
this.contentVisible = this.isContentVisible();
}
endMarkedContent() {
this.markedContentStack.pop();
this.contentVisible = this.isContentVisible();
}
beginCompat() {}
endCompat() {}
consumePath(path, clipBox) {
const isEmpty = this.current.isEmptyClip();
if (this.pendingClip) {
this.current.updateClipFromPath();
}
if (!this.pendingClip) {
this.compose(clipBox);
}
const ctx = this.ctx;
if (this.pendingClip) {
if (!isEmpty) {
if (this.pendingClip === EO_CLIP) {
ctx.clip(path, "evenodd");
} else {
ctx.clip(path);
}
}
this.pendingClip = null;
}
this.current.startNewPathAndClipBox(this.current.clipBox);
}
getSinglePixelWidth() {
if (!this._cachedGetSinglePixelWidth) {
const m = getCurrentTransform(this.ctx);
if (m[1] === 0 && m[2] === 0) {
this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));
} else {
const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
const normX = Math.hypot(m[0], m[2]);
const normY = Math.hypot(m[1], m[3]);
this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;
}
}
return this._cachedGetSinglePixelWidth;
}
getScaleForStroking() {
if (this._cachedScaleForStroking[0] === -1) {
const {
lineWidth
} = this.current;
const {
a,
b,
c,
d
} = this.ctx.getTransform();
let scaleX, scaleY;
if (b === 0 && c === 0) {
const normX = Math.abs(a);
const normY = Math.abs(d);
if (normX === normY) {
if (lineWidth === 0) {
scaleX = scaleY = 1 / normX;
} else {
const scaledLineWidth = normX * lineWidth;
scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;
}
} else if (lineWidth === 0) {
scaleX = 1 / normX;
scaleY = 1 / normY;
} else {
const scaledXLineWidth = normX * lineWidth;
const scaledYLineWidth = normY * lineWidth;
scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;
scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;
}
} else {
const absDet = Math.abs(a * d - b * c);
const normX = Math.hypot(a, b);
const normY = Math.hypot(c, d);
if (lineWidth === 0) {
scaleX = normY / absDet;
scaleY = normX / absDet;
} else {
const baseArea = lineWidth * absDet;
scaleX = normY > baseArea ? normY / baseArea : 1;
scaleY = normX > baseArea ? normX / baseArea : 1;
}
}
this._cachedScaleForStroking[0] = scaleX;
this._cachedScaleForStroking[1] = scaleY;
}
return this._cachedScaleForStroking;
}
rescaleAndStroke(path, saveRestore) {
const {
ctx,
current: {
lineWidth
}
} = this;
const [scaleX, scaleY] = this.getScaleForStroking();
if (scaleX === scaleY) {
ctx.lineWidth = (lineWidth || 1) * scaleX;
ctx.stroke(path);
return;
}
const dashes = ctx.getLineDash();
if (saveRestore) {
ctx.save();
}
ctx.scale(scaleX, scaleY);
SCALE_MATRIX.a = 1 / scaleX;
SCALE_MATRIX.d = 1 / scaleY;
const newPath = new Path2D();
newPath.addPath(path, SCALE_MATRIX);
if (dashes.length > 0) {
const scale = Math.max(scaleX, scaleY);
ctx.setLineDash(dashes.map(x => x / scale));
ctx.lineDashOffset /= scale;
}
ctx.lineWidth = lineWidth || 1;
ctx.stroke(newPath);
if (saveRestore) {
ctx.restore();
}
}
isContentVisible() {
for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
if (!this.markedContentStack[i].visible) {
return false;
}
}
return true;
}
}
function _restoreInitialState() {
while (this.stateStack.length || this.inSMaskMode) {
this.restore();
}
this.current.activeSMask = null;
this.ctx.restore();
if (this.transparentCanvas) {
this.ctx = this.compositeCtx;
this.ctx.save();
this.ctx.setTransform(1, 0, 0, 1, 0, 0);
this.ctx.drawImage(this.transparentCanvas, 0, 0);
this.ctx.restore();
this.transparentCanvas = null;
}
}
function _drawFilter() {
if (this.pageColors) {
const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);
if (hcmFilterId !== "none") {
const savedFilter = this.ctx.filter;
this.ctx.filter = hcmFilterId;
this.ctx.drawImage(this.ctx.canvas, 0, 0);
this.ctx.filter = savedFilter;
}
}
}
function _getScaledPath(path, currentTransform, transform) {
const newPath = new Path2D();
newPath.addPath(path, new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform));
return newPath;
}
for (const op in OPS) {
if (CanvasGraphics.prototype[op] !== undefined) {
CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];
}
}
;// ./src/display/worker_options.js
function worker_options_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
class GlobalWorkerOptions {
static get workerPort() {
return worker_options_assertClassBrand(GlobalWorkerOptions, this, _port)._;
}
static set workerPort(val) {
if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) {
throw new Error("Invalid `workerPort` type.");
}
_port._ = worker_options_assertClassBrand(GlobalWorkerOptions, this, val);
}
static get workerSrc() {
return worker_options_assertClassBrand(GlobalWorkerOptions, this, _src)._;
}
static set workerSrc(val) {
if (typeof val !== "string") {
throw new Error("Invalid `workerSrc` type.");
}
_src._ = worker_options_assertClassBrand(GlobalWorkerOptions, this, val);
}
}
var _port = {
_: null
};
var _src = {
_: ""
};
;// ./src/display/metadata.js
function metadata_classPrivateFieldInitSpec(e, t, a) { metadata_checkPrivateRedeclaration(e, t), t.set(e, a); }
function metadata_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function metadata_classPrivateFieldGet(s, a) { return s.get(metadata_assertClassBrand(s, a)); }
function metadata_classPrivateFieldSet(s, a, r) { return s.set(metadata_assertClassBrand(s, a), r), r; }
function metadata_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _map = /*#__PURE__*/new WeakMap();
var _data = /*#__PURE__*/new WeakMap();
class Metadata {
constructor(_ref) {
let {
parsedData,
rawData
} = _ref;
metadata_classPrivateFieldInitSpec(this, _map, void 0);
metadata_classPrivateFieldInitSpec(this, _data, void 0);
metadata_classPrivateFieldSet(_map, this, parsedData);
metadata_classPrivateFieldSet(_data, this, rawData);
}
getRaw() {
return metadata_classPrivateFieldGet(_data, this);
}
get(name) {
return metadata_classPrivateFieldGet(_map, this).get(name) ?? null;
}
[Symbol.iterator]() {
return metadata_classPrivateFieldGet(_map, this).entries();
}
}
;// ./src/display/optional_content_config.js
function optional_content_config_classPrivateMethodInitSpec(e, a) { optional_content_config_checkPrivateRedeclaration(e, a), a.add(e); }
function optional_content_config_classPrivateFieldInitSpec(e, t, a) { optional_content_config_checkPrivateRedeclaration(e, t), t.set(e, a); }
function optional_content_config_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function optional_content_config_classPrivateFieldGet(s, a) { return s.get(optional_content_config_assertClassBrand(s, a)); }
function optional_content_config_classPrivateFieldSet(s, a, r) { return s.set(optional_content_config_assertClassBrand(s, a), r), r; }
function optional_content_config_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const INTERNAL = Symbol("INTERNAL");
var _isDisplay = /*#__PURE__*/new WeakMap();
var _isPrint = /*#__PURE__*/new WeakMap();
var _userSet = /*#__PURE__*/new WeakMap();
var _visible = /*#__PURE__*/new WeakMap();
class OptionalContentGroup {
constructor(renderingIntent, _ref) {
let {
name,
intent,
usage,
rbGroups
} = _ref;
optional_content_config_classPrivateFieldInitSpec(this, _isDisplay, false);
optional_content_config_classPrivateFieldInitSpec(this, _isPrint, false);
optional_content_config_classPrivateFieldInitSpec(this, _userSet, false);
optional_content_config_classPrivateFieldInitSpec(this, _visible, true);
optional_content_config_classPrivateFieldSet(_isDisplay, this, !!(renderingIntent & RenderingIntentFlag.DISPLAY));
optional_content_config_classPrivateFieldSet(_isPrint, this, !!(renderingIntent & RenderingIntentFlag.PRINT));
this.name = name;
this.intent = intent;
this.usage = usage;
this.rbGroups = rbGroups;
}
get visible() {
if (optional_content_config_classPrivateFieldGet(_userSet, this)) {
return optional_content_config_classPrivateFieldGet(_visible, this);
}
if (!optional_content_config_classPrivateFieldGet(_visible, this)) {
return false;
}
const {
print,
view
} = this.usage;
if (optional_content_config_classPrivateFieldGet(_isDisplay, this)) {
return view?.viewState !== "OFF";
} else if (optional_content_config_classPrivateFieldGet(_isPrint, this)) {
return print?.printState !== "OFF";
}
return true;
}
_setVisible(internal, visible) {
let userSet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (internal !== INTERNAL) {
unreachable("Internal method `_setVisible` called.");
}
optional_content_config_classPrivateFieldSet(_userSet, this, userSet);
optional_content_config_classPrivateFieldSet(_visible, this, visible);
}
}
var _cachedGetHash = /*#__PURE__*/new WeakMap();
var _groups = /*#__PURE__*/new WeakMap();
var _initialHash = /*#__PURE__*/new WeakMap();
var _order = /*#__PURE__*/new WeakMap();
var _OptionalContentConfig_brand = /*#__PURE__*/new WeakSet();
class OptionalContentConfig {
constructor(data) {
let renderingIntent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RenderingIntentFlag.DISPLAY;
optional_content_config_classPrivateMethodInitSpec(this, _OptionalContentConfig_brand);
optional_content_config_classPrivateFieldInitSpec(this, _cachedGetHash, null);
optional_content_config_classPrivateFieldInitSpec(this, _groups, new Map());
optional_content_config_classPrivateFieldInitSpec(this, _initialHash, null);
optional_content_config_classPrivateFieldInitSpec(this, _order, null);
this.renderingIntent = renderingIntent;
this.name = null;
this.creator = null;
if (data === null) {
return;
}
this.name = data.name;
this.creator = data.creator;
optional_content_config_classPrivateFieldSet(_order, this, data.order);
for (const group of data.groups) {
optional_content_config_classPrivateFieldGet(_groups, this).set(group.id, new OptionalContentGroup(renderingIntent, group));
}
if (data.baseState === "OFF") {
for (const group of optional_content_config_classPrivateFieldGet(_groups, this).values()) {
group._setVisible(INTERNAL, false);
}
}
for (const on of data.on) {
optional_content_config_classPrivateFieldGet(_groups, this).get(on)._setVisible(INTERNAL, true);
}
for (const off of data.off) {
optional_content_config_classPrivateFieldGet(_groups, this).get(off)._setVisible(INTERNAL, false);
}
optional_content_config_classPrivateFieldSet(_initialHash, this, this.getHash());
}
isVisible(group) {
if (optional_content_config_classPrivateFieldGet(_groups, this).size === 0) {
return true;
}
if (!group) {
info("Optional content group not defined.");
return true;
}
if (group.type === "OCG") {
if (!optional_content_config_classPrivateFieldGet(_groups, this).has(group.id)) {
warn(`Optional content group not found: ${group.id}`);
return true;
}
return optional_content_config_classPrivateFieldGet(_groups, this).get(group.id).visible;
} else if (group.type === "OCMD") {
if (group.expression) {
return optional_content_config_assertClassBrand(_OptionalContentConfig_brand, this, _evaluateVisibilityExpression).call(this, group.expression);
}
if (!group.policy || group.policy === "AnyOn") {
for (const id of group.ids) {
if (!optional_content_config_classPrivateFieldGet(_groups, this).has(id)) {
warn(`Optional content group not found: ${id}`);
return true;
}
if (optional_content_config_classPrivateFieldGet(_groups, this).get(id).visible) {
return true;
}
}
return false;
} else if (group.policy === "AllOn") {
for (const id of group.ids) {
if (!optional_content_config_classPrivateFieldGet(_groups, this).has(id)) {
warn(`Optional content group not found: ${id}`);
return true;
}
if (!optional_content_config_classPrivateFieldGet(_groups, this).get(id).visible) {
return false;
}
}
return true;
} else if (group.policy === "AnyOff") {
for (const id of group.ids) {
if (!optional_content_config_classPrivateFieldGet(_groups, this).has(id)) {
warn(`Optional content group not found: ${id}`);
return true;
}
if (!optional_content_config_classPrivateFieldGet(_groups, this).get(id).visible) {
return true;
}
}
return false;
} else if (group.policy === "AllOff") {
for (const id of group.ids) {
if (!optional_content_config_classPrivateFieldGet(_groups, this).has(id)) {
warn(`Optional content group not found: ${id}`);
return true;
}
if (optional_content_config_classPrivateFieldGet(_groups, this).get(id).visible) {
return false;
}
}
return true;
}
warn(`Unknown optional content policy ${group.policy}.`);
return true;
}
warn(`Unknown group type ${group.type}.`);
return true;
}
setVisibility(id) {
let visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
let preserveRB = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
const group = optional_content_config_classPrivateFieldGet(_groups, this).get(id);
if (!group) {
warn(`Optional content group not found: ${id}`);
return;
}
if (preserveRB && visible && group.rbGroups.length) {
for (const rbGroup of group.rbGroups) {
for (const otherId of rbGroup) {
if (otherId !== id) {
optional_content_config_classPrivateFieldGet(_groups, this).get(otherId)?._setVisible(INTERNAL, false, true);
}
}
}
}
group._setVisible(INTERNAL, !!visible, true);
optional_content_config_classPrivateFieldSet(_cachedGetHash, this, null);
}
setOCGState(_ref2) {
let {
state,
preserveRB
} = _ref2;
let operator;
for (const elem of state) {
switch (elem) {
case "ON":
case "OFF":
case "Toggle":
operator = elem;
continue;
}
const group = optional_content_config_classPrivateFieldGet(_groups, this).get(elem);
if (!group) {
continue;
}
switch (operator) {
case "ON":
this.setVisibility(elem, true, preserveRB);
break;
case "OFF":
this.setVisibility(elem, false, preserveRB);
break;
case "Toggle":
this.setVisibility(elem, !group.visible, preserveRB);
break;
}
}
optional_content_config_classPrivateFieldSet(_cachedGetHash, this, null);
}
get hasInitialVisibility() {
return optional_content_config_classPrivateFieldGet(_initialHash, this) === null || this.getHash() === optional_content_config_classPrivateFieldGet(_initialHash, this);
}
getOrder() {
if (!optional_content_config_classPrivateFieldGet(_groups, this).size) {
return null;
}
if (optional_content_config_classPrivateFieldGet(_order, this)) {
return optional_content_config_classPrivateFieldGet(_order, this).slice();
}
return [...optional_content_config_classPrivateFieldGet(_groups, this).keys()];
}
getGroup(id) {
return optional_content_config_classPrivateFieldGet(_groups, this).get(id) || null;
}
getHash() {
if (optional_content_config_classPrivateFieldGet(_cachedGetHash, this) !== null) {
return optional_content_config_classPrivateFieldGet(_cachedGetHash, this);
}
const hash = new MurmurHash3_64();
for (const [id, group] of optional_content_config_classPrivateFieldGet(_groups, this)) {
hash.update(`${id}:${group.visible}`);
}
return optional_content_config_classPrivateFieldSet(_cachedGetHash, this, hash.hexdigest());
}
[Symbol.iterator]() {
return optional_content_config_classPrivateFieldGet(_groups, this).entries();
}
}
function _evaluateVisibilityExpression(array) {
const length = array.length;
if (length < 2) {
return true;
}
const operator = array[0];
for (let i = 1; i < length; i++) {
const element = array[i];
let state;
if (Array.isArray(element)) {
state = optional_content_config_assertClassBrand(_OptionalContentConfig_brand, this, _evaluateVisibilityExpression).call(this, element);
} else if (optional_content_config_classPrivateFieldGet(_groups, this).has(element)) {
state = optional_content_config_classPrivateFieldGet(_groups, this).get(element).visible;
} else {
warn(`Optional content group not found: ${element}`);
return true;
}
switch (operator) {
case "And":
if (!state) {
return false;
}
break;
case "Or":
if (state) {
return true;
}
break;
case "Not":
return !state;
default:
return true;
}
}
return operator === "And";
}
;// ./src/display/transport_stream.js
class PDFDataTransportStream {
constructor(pdfDataRangeTransport, _ref) {
let {
disableRange = false,
disableStream = false
} = _ref;
assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
const {
length,
initialData,
progressiveDone,
contentDispositionFilename
} = pdfDataRangeTransport;
this._queuedChunks = [];
this._progressiveDone = progressiveDone;
this._contentDispositionFilename = contentDispositionFilename;
if (initialData?.length > 0) {
const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer;
this._queuedChunks.push(buffer);
}
this._pdfDataRangeTransport = pdfDataRangeTransport;
this._isStreamingSupported = !disableStream;
this._isRangeSupported = !disableRange;
this._contentLength = length;
this._fullRequestReader = null;
this._rangeReaders = [];
pdfDataRangeTransport.addRangeListener((begin, chunk) => {
this._onReceiveData({
begin,
chunk
});
});
pdfDataRangeTransport.addProgressListener((loaded, total) => {
this._onProgress({
loaded,
total
});
});
pdfDataRangeTransport.addProgressiveReadListener(chunk => {
this._onReceiveData({
chunk
});
});
pdfDataRangeTransport.addProgressiveDoneListener(() => {
this._onProgressiveDone();
});
pdfDataRangeTransport.transportReady();
}
_onReceiveData(_ref2) {
let {
begin,
chunk
} = _ref2;
const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer;
if (begin === undefined) {
if (this._fullRequestReader) {
this._fullRequestReader._enqueue(buffer);
} else {
this._queuedChunks.push(buffer);
}
} else {
const found = this._rangeReaders.some(function (rangeReader) {
if (rangeReader._begin !== begin) {
return false;
}
rangeReader._enqueue(buffer);
return true;
});
assert(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
}
}
get _progressiveDataLength() {
return this._fullRequestReader?._loaded ?? 0;
}
_onProgress(evt) {
if (evt.total === undefined) {
this._rangeReaders[0]?.onProgress?.({
loaded: evt.loaded
});
} else {
this._fullRequestReader?.onProgress?.({
loaded: evt.loaded,
total: evt.total
});
}
}
_onProgressiveDone() {
this._fullRequestReader?.progressiveDone();
this._progressiveDone = true;
}
_removeRangeReader(reader) {
const i = this._rangeReaders.indexOf(reader);
if (i >= 0) {
this._rangeReaders.splice(i, 1);
}
}
getFullReader() {
assert(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
const queuedChunks = this._queuedChunks;
this._queuedChunks = null;
return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);
}
getRangeReader(begin, end) {
if (end <= this._progressiveDataLength) {
return null;
}
const reader = new PDFDataTransportStreamRangeReader(this, begin, end);
this._pdfDataRangeTransport.requestDataRange(begin, end);
this._rangeReaders.push(reader);
return reader;
}
cancelAllRequests(reason) {
this._fullRequestReader?.cancel(reason);
for (const reader of this._rangeReaders.slice(0)) {
reader.cancel(reason);
}
this._pdfDataRangeTransport.abort();
}
}
class PDFDataTransportStreamReader {
constructor(stream, queuedChunks) {
let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
this._stream = stream;
this._done = progressiveDone || false;
this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null;
this._queuedChunks = queuedChunks || [];
this._loaded = 0;
for (const chunk of this._queuedChunks) {
this._loaded += chunk.byteLength;
}
this._requests = [];
this._headersReady = Promise.resolve();
stream._fullRequestReader = this;
this.onProgress = null;
}
_enqueue(chunk) {
if (this._done) {
return;
}
if (this._requests.length > 0) {
const requestCapability = this._requests.shift();
requestCapability.resolve({
value: chunk,
done: false
});
} else {
this._queuedChunks.push(chunk);
}
this._loaded += chunk.byteLength;
}
get headersReady() {
return this._headersReady;
}
get filename() {
return this._filename;
}
get isRangeSupported() {
return this._stream._isRangeSupported;
}
get isStreamingSupported() {
return this._stream._isStreamingSupported;
}
get contentLength() {
return this._stream._contentLength;
}
async read() {
if (this._queuedChunks.length > 0) {
const chunk = this._queuedChunks.shift();
return {
value: chunk,
done: false
};
}
if (this._done) {
return {
value: undefined,
done: true
};
}
const requestCapability = Promise.withResolvers();
this._requests.push(requestCapability);
return requestCapability.promise;
}
cancel(reason) {
this._done = true;
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
}
progressiveDone() {
if (this._done) {
return;
}
this._done = true;
}
}
class PDFDataTransportStreamRangeReader {
constructor(stream, begin, end) {
this._stream = stream;
this._begin = begin;
this._end = end;
this._queuedChunk = null;
this._requests = [];
this._done = false;
this.onProgress = null;
}
_enqueue(chunk) {
if (this._done) {
return;
}
if (this._requests.length === 0) {
this._queuedChunk = chunk;
} else {
const requestsCapability = this._requests.shift();
requestsCapability.resolve({
value: chunk,
done: false
});
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
}
this._done = true;
this._stream._removeRangeReader(this);
}
get isStreamingSupported() {
return false;
}
async read() {
if (this._queuedChunk) {
const chunk = this._queuedChunk;
this._queuedChunk = null;
return {
value: chunk,
done: false
};
}
if (this._done) {
return {
value: undefined,
done: true
};
}
const requestCapability = Promise.withResolvers();
this._requests.push(requestCapability);
return requestCapability.promise;
}
cancel(reason) {
this._done = true;
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
this._stream._removeRangeReader(this);
}
}
;// ./src/display/content_disposition.js
function getFilenameFromContentDispositionHeader(contentDisposition) {
let needsEncodingFixup = true;
let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition);
if (tmp) {
tmp = tmp[1];
let filename = rfc2616unquote(tmp);
filename = unescape(filename);
filename = rfc5987decode(filename);
filename = rfc2047decode(filename);
return fixupEncoding(filename);
}
tmp = rfc2231getparam(contentDisposition);
if (tmp) {
const filename = rfc2047decode(tmp);
return fixupEncoding(filename);
}
tmp = toParamRegExp("filename", "i").exec(contentDisposition);
if (tmp) {
tmp = tmp[1];
let filename = rfc2616unquote(tmp);
filename = rfc2047decode(filename);
return fixupEncoding(filename);
}
function toParamRegExp(attributePattern, flags) {
return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags);
}
function textdecode(encoding, value) {
if (encoding) {
if (!/^[\x00-\xFF]+$/.test(value)) {
return value;
}
try {
const decoder = new TextDecoder(encoding, {
fatal: true
});
const buffer = stringToBytes(value);
value = decoder.decode(buffer);
needsEncodingFixup = false;
} catch {}
}
return value;
}
function fixupEncoding(value) {
if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
value = textdecode("utf-8", value);
if (needsEncodingFixup) {
value = textdecode("iso-8859-1", value);
}
}
return value;
}
function rfc2231getparam(contentDispositionStr) {
const matches = [];
let match;
const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
while ((match = iter.exec(contentDispositionStr)) !== null) {
let [, n, quot, part] = match;
n = parseInt(n, 10);
if (n in matches) {
if (n === 0) {
break;
}
continue;
}
matches[n] = [quot, part];
}
const parts = [];
for (let n = 0; n < matches.length; ++n) {
if (!(n in matches)) {
break;
}
let [quot, part] = matches[n];
part = rfc2616unquote(part);
if (quot) {
part = unescape(part);
if (n === 0) {
part = rfc5987decode(part);
}
}
parts.push(part);
}
return parts.join("");
}
function rfc2616unquote(value) {
if (value.startsWith('"')) {
const parts = value.slice(1).split('\\"');
for (let i = 0; i < parts.length; ++i) {
const quotindex = parts[i].indexOf('"');
if (quotindex !== -1) {
parts[i] = parts[i].slice(0, quotindex);
parts.length = i + 1;
}
parts[i] = parts[i].replaceAll(/\\(.)/g, "$1");
}
value = parts.join('"');
}
return value;
}
function rfc5987decode(extvalue) {
const encodingend = extvalue.indexOf("'");
if (encodingend === -1) {
return extvalue;
}
const encoding = extvalue.slice(0, encodingend);
const langvalue = extvalue.slice(encodingend + 1);
const value = langvalue.replace(/^[^']*'/, "");
return textdecode(encoding, value);
}
function rfc2047decode(value) {
if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
return value;
}
return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
if (encoding === "q" || encoding === "Q") {
text = text.replaceAll("_", " ");
text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {
return String.fromCharCode(parseInt(hex, 16));
});
return textdecode(charset, text);
}
try {
text = atob(text);
} catch {}
return textdecode(charset, text);
});
}
return "";
}
;// ./src/display/network_utils.js
function createHeaders(isHttp, httpHeaders) {
const headers = new Headers();
if (!isHttp || !httpHeaders || typeof httpHeaders !== "object") {
return headers;
}
for (const key in httpHeaders) {
const val = httpHeaders[key];
if (val !== undefined) {
headers.append(key, val);
}
}
return headers;
}
function getResponseOrigin(url) {
return URL.parse(url)?.origin ?? null;
}
function validateRangeRequestCapabilities(_ref) {
let {
responseHeaders,
isHttp,
rangeChunkSize,
disableRange
} = _ref;
const returnValues = {
allowRangeRequests: false,
suggestedLength: undefined
};
const length = parseInt(responseHeaders.get("Content-Length"), 10);
if (!Number.isInteger(length)) {
return returnValues;
}
returnValues.suggestedLength = length;
if (length <= 2 * rangeChunkSize) {
return returnValues;
}
if (disableRange || !isHttp) {
return returnValues;
}
if (responseHeaders.get("Accept-Ranges") !== "bytes") {
return returnValues;
}
const contentEncoding = responseHeaders.get("Content-Encoding") || "identity";
if (contentEncoding !== "identity") {
return returnValues;
}
returnValues.allowRangeRequests = true;
return returnValues;
}
function extractFilenameFromHeader(responseHeaders) {
const contentDisposition = responseHeaders.get("Content-Disposition");
if (contentDisposition) {
let filename = getFilenameFromContentDispositionHeader(contentDisposition);
if (filename.includes("%")) {
try {
filename = decodeURIComponent(filename);
} catch {}
}
if (isPdfFile(filename)) {
return filename;
}
}
return null;
}
function createResponseError(status, url) {
return new ResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status, status === 404 || status === 0 && url.startsWith("file:"));
}
function validateResponseStatus(status) {
return status === 200 || status === 206;
}
;// ./src/display/fetch_stream.js
function fetch_stream_defineProperty(e, r, t) { return (r = fetch_stream_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function fetch_stream_toPropertyKey(t) { var i = fetch_stream_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function fetch_stream_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function createFetchOptions(headers, withCredentials, abortController) {
return {
method: "GET",
headers,
signal: abortController.signal,
mode: "cors",
credentials: withCredentials ? "include" : "same-origin",
redirect: "follow"
};
}
function getArrayBuffer(val) {
if (val instanceof Uint8Array) {
return val.buffer;
}
if (val instanceof ArrayBuffer) {
return val;
}
warn(`getArrayBuffer - unexpected data format: ${val}`);
return new Uint8Array(val).buffer;
}
class PDFFetchStream {
constructor(source) {
fetch_stream_defineProperty(this, "_responseOrigin", null);
this.source = source;
this.isHttp = /^https?:/i.test(source.url);
this.headers = createHeaders(this.isHttp, source.httpHeaders);
this._fullRequestReader = null;
this._rangeRequestReaders = [];
}
get _progressiveDataLength() {
return this._fullRequestReader?._loaded ?? 0;
}
getFullReader() {
assert(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
this._fullRequestReader = new PDFFetchStreamReader(this);
return this._fullRequestReader;
}
getRangeReader(begin, end) {
if (end <= this._progressiveDataLength) {
return null;
}
const reader = new PDFFetchStreamRangeReader(this, begin, end);
this._rangeRequestReaders.push(reader);
return reader;
}
cancelAllRequests(reason) {
this._fullRequestReader?.cancel(reason);
for (const reader of this._rangeRequestReaders.slice(0)) {
reader.cancel(reason);
}
}
}
class PDFFetchStreamReader {
constructor(stream) {
this._stream = stream;
this._reader = null;
this._loaded = 0;
this._filename = null;
const source = stream.source;
this._withCredentials = source.withCredentials || false;
this._contentLength = source.length;
this._headersCapability = Promise.withResolvers();
this._disableRange = source.disableRange || false;
this._rangeChunkSize = source.rangeChunkSize;
if (!this._rangeChunkSize && !this._disableRange) {
this._disableRange = true;
}
this._abortController = new AbortController();
this._isStreamingSupported = !source.disableStream;
this._isRangeSupported = !source.disableRange;
const headers = new Headers(stream.headers);
const url = source.url;
fetch(url, createFetchOptions(headers, this._withCredentials, this._abortController)).then(response => {
stream._responseOrigin = getResponseOrigin(response.url);
if (!validateResponseStatus(response.status)) {
throw createResponseError(response.status, url);
}
this._reader = response.body.getReader();
this._headersCapability.resolve();
const responseHeaders = response.headers;
const {
allowRangeRequests,
suggestedLength
} = validateRangeRequestCapabilities({
responseHeaders,
isHttp: stream.isHttp,
rangeChunkSize: this._rangeChunkSize,
disableRange: this._disableRange
});
this._isRangeSupported = allowRangeRequests;
this._contentLength = suggestedLength || this._contentLength;
this._filename = extractFilenameFromHeader(responseHeaders);
if (!this._isStreamingSupported && this._isRangeSupported) {
this.cancel(new AbortException("Streaming is disabled."));
}
}).catch(this._headersCapability.reject);
this.onProgress = null;
}
get headersReady() {
return this._headersCapability.promise;
}
get filename() {
return this._filename;
}
get contentLength() {
return this._contentLength;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
await this._headersCapability.promise;
const {
value,
done
} = await this._reader.read();
if (done) {
return {
value,
done
};
}
this._loaded += value.byteLength;
this.onProgress?.({
loaded: this._loaded,
total: this._contentLength
});
return {
value: getArrayBuffer(value),
done: false
};
}
cancel(reason) {
this._reader?.cancel(reason);
this._abortController.abort();
}
}
class PDFFetchStreamRangeReader {
constructor(stream, begin, end) {
this._stream = stream;
this._reader = null;
this._loaded = 0;
const source = stream.source;
this._withCredentials = source.withCredentials || false;
this._readCapability = Promise.withResolvers();
this._isStreamingSupported = !source.disableStream;
this._abortController = new AbortController();
const headers = new Headers(stream.headers);
headers.append("Range", `bytes=${begin}-${end - 1}`);
const url = source.url;
fetch(url, createFetchOptions(headers, this._withCredentials, this._abortController)).then(response => {
const responseOrigin = getResponseOrigin(response.url);
if (responseOrigin !== stream._responseOrigin) {
throw new Error(`Expected range response-origin "${responseOrigin}" to match "${stream._responseOrigin}".`);
}
if (!validateResponseStatus(response.status)) {
throw createResponseError(response.status, url);
}
this._readCapability.resolve();
this._reader = response.body.getReader();
}).catch(this._readCapability.reject);
this.onProgress = null;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
await this._readCapability.promise;
const {
value,
done
} = await this._reader.read();
if (done) {
return {
value,
done
};
}
this._loaded += value.byteLength;
this.onProgress?.({
loaded: this._loaded
});
return {
value: getArrayBuffer(value),
done: false
};
}
cancel(reason) {
this._reader?.cancel(reason);
this._abortController.abort();
}
}
;// ./src/display/network.js
function network_defineProperty(e, r, t) { return (r = network_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function network_toPropertyKey(t) { var i = network_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function network_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const OK_RESPONSE = 200;
const PARTIAL_CONTENT_RESPONSE = 206;
function network_getArrayBuffer(xhr) {
const data = xhr.response;
if (typeof data !== "string") {
return data;
}
return stringToBytes(data).buffer;
}
class NetworkManager {
constructor(_ref) {
let {
url,
httpHeaders,
withCredentials
} = _ref;
network_defineProperty(this, "_responseOrigin", null);
this.url = url;
this.isHttp = /^https?:/i.test(url);
this.headers = createHeaders(this.isHttp, httpHeaders);
this.withCredentials = withCredentials || false;
this.currXhrId = 0;
this.pendingRequests = Object.create(null);
}
request(args) {
const xhr = new XMLHttpRequest();
const xhrId = this.currXhrId++;
const pendingRequest = this.pendingRequests[xhrId] = {
xhr
};
xhr.open("GET", this.url);
xhr.withCredentials = this.withCredentials;
for (const [key, val] of this.headers) {
xhr.setRequestHeader(key, val);
}
if (this.isHttp && "begin" in args && "end" in args) {
xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`);
pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;
} else {
pendingRequest.expectedStatus = OK_RESPONSE;
}
xhr.responseType = "arraybuffer";
assert(args.onError, "Expected `onError` callback to be provided.");
xhr.onerror = () => {
args.onError(xhr.status);
};
xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
xhr.onprogress = this.onProgress.bind(this, xhrId);
pendingRequest.onHeadersReceived = args.onHeadersReceived;
pendingRequest.onDone = args.onDone;
pendingRequest.onError = args.onError;
pendingRequest.onProgress = args.onProgress;
xhr.send(null);
return xhrId;
}
onProgress(xhrId, evt) {
const pendingRequest = this.pendingRequests[xhrId];
if (!pendingRequest) {
return;
}
pendingRequest.onProgress?.(evt);
}
onStateChange(xhrId, evt) {
const pendingRequest = this.pendingRequests[xhrId];
if (!pendingRequest) {
return;
}
const xhr = pendingRequest.xhr;
if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
pendingRequest.onHeadersReceived();
delete pendingRequest.onHeadersReceived;
}
if (xhr.readyState !== 4) {
return;
}
if (!(xhrId in this.pendingRequests)) {
return;
}
delete this.pendingRequests[xhrId];
if (xhr.status === 0 && this.isHttp) {
pendingRequest.onError(xhr.status);
return;
}
const xhrStatus = xhr.status || OK_RESPONSE;
const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
pendingRequest.onError(xhr.status);
return;
}
const chunk = network_getArrayBuffer(xhr);
if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
const rangeHeader = xhr.getResponseHeader("Content-Range");
const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
if (matches) {
pendingRequest.onDone({
begin: parseInt(matches[1], 10),
chunk
});
} else {
warn(`Missing or invalid "Content-Range" header.`);
pendingRequest.onError(0);
}
} else if (chunk) {
pendingRequest.onDone({
begin: 0,
chunk
});
} else {
pendingRequest.onError(xhr.status);
}
}
getRequestXhr(xhrId) {
return this.pendingRequests[xhrId].xhr;
}
isPendingRequest(xhrId) {
return xhrId in this.pendingRequests;
}
abortRequest(xhrId) {
const xhr = this.pendingRequests[xhrId].xhr;
delete this.pendingRequests[xhrId];
xhr.abort();
}
}
class PDFNetworkStream {
constructor(source) {
this._source = source;
this._manager = new NetworkManager(source);
this._rangeChunkSize = source.rangeChunkSize;
this._fullRequestReader = null;
this._rangeRequestReaders = [];
}
_onRangeRequestReaderClosed(reader) {
const i = this._rangeRequestReaders.indexOf(reader);
if (i >= 0) {
this._rangeRequestReaders.splice(i, 1);
}
}
getFullReader() {
assert(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
return this._fullRequestReader;
}
getRangeReader(begin, end) {
const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
reader.onClosed = this._onRangeRequestReaderClosed.bind(this);
this._rangeRequestReaders.push(reader);
return reader;
}
cancelAllRequests(reason) {
this._fullRequestReader?.cancel(reason);
for (const reader of this._rangeRequestReaders.slice(0)) {
reader.cancel(reason);
}
}
}
class PDFNetworkStreamFullRequestReader {
constructor(manager, source) {
this._manager = manager;
this._url = source.url;
this._fullRequestId = manager.request({
onHeadersReceived: this._onHeadersReceived.bind(this),
onDone: this._onDone.bind(this),
onError: this._onError.bind(this),
onProgress: this._onProgress.bind(this)
});
this._headersCapability = Promise.withResolvers();
this._disableRange = source.disableRange || false;
this._contentLength = source.length;
this._rangeChunkSize = source.rangeChunkSize;
if (!this._rangeChunkSize && !this._disableRange) {
this._disableRange = true;
}
this._isStreamingSupported = false;
this._isRangeSupported = false;
this._cachedChunks = [];
this._requests = [];
this._done = false;
this._storedError = undefined;
this._filename = null;
this.onProgress = null;
}
_onHeadersReceived() {
const fullRequestXhrId = this._fullRequestId;
const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
this._manager._responseOrigin = getResponseOrigin(fullRequestXhr.responseURL);
const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders();
const responseHeaders = new Headers(rawResponseHeaders ? rawResponseHeaders.trimStart().replace(/[^\S ]+$/, "").split(/[\r\n]+/).map(x => {
const [key, ...val] = x.split(": ");
return [key, val.join(": ")];
}) : []);
const {
allowRangeRequests,
suggestedLength
} = validateRangeRequestCapabilities({
responseHeaders,
isHttp: this._manager.isHttp,
rangeChunkSize: this._rangeChunkSize,
disableRange: this._disableRange
});
if (allowRangeRequests) {
this._isRangeSupported = true;
}
this._contentLength = suggestedLength || this._contentLength;
this._filename = extractFilenameFromHeader(responseHeaders);
if (this._isRangeSupported) {
this._manager.abortRequest(fullRequestXhrId);
}
this._headersCapability.resolve();
}
_onDone(data) {
if (data) {
if (this._requests.length > 0) {
const requestCapability = this._requests.shift();
requestCapability.resolve({
value: data.chunk,
done: false
});
} else {
this._cachedChunks.push(data.chunk);
}
}
this._done = true;
if (this._cachedChunks.length > 0) {
return;
}
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
}
_onError(status) {
this._storedError = createResponseError(status, this._url);
this._headersCapability.reject(this._storedError);
for (const requestCapability of this._requests) {
requestCapability.reject(this._storedError);
}
this._requests.length = 0;
this._cachedChunks.length = 0;
}
_onProgress(evt) {
this.onProgress?.({
loaded: evt.loaded,
total: evt.lengthComputable ? evt.total : this._contentLength
});
}
get filename() {
return this._filename;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
get contentLength() {
return this._contentLength;
}
get headersReady() {
return this._headersCapability.promise;
}
async read() {
await this._headersCapability.promise;
if (this._storedError) {
throw this._storedError;
}
if (this._cachedChunks.length > 0) {
const chunk = this._cachedChunks.shift();
return {
value: chunk,
done: false
};
}
if (this._done) {
return {
value: undefined,
done: true
};
}
const requestCapability = Promise.withResolvers();
this._requests.push(requestCapability);
return requestCapability.promise;
}
cancel(reason) {
this._done = true;
this._headersCapability.reject(reason);
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
if (this._manager.isPendingRequest(this._fullRequestId)) {
this._manager.abortRequest(this._fullRequestId);
}
this._fullRequestReader = null;
}
}
class PDFNetworkStreamRangeRequestReader {
constructor(manager, begin, end) {
this._manager = manager;
this._url = manager.url;
this._requestId = manager.request({
begin,
end,
onHeadersReceived: this._onHeadersReceived.bind(this),
onDone: this._onDone.bind(this),
onError: this._onError.bind(this),
onProgress: this._onProgress.bind(this)
});
this._requests = [];
this._queuedChunk = null;
this._done = false;
this._storedError = undefined;
this.onProgress = null;
this.onClosed = null;
}
_onHeadersReceived() {
const responseOrigin = getResponseOrigin(this._manager.getRequestXhr(this._requestId)?.responseURL);
if (responseOrigin !== this._manager._responseOrigin) {
this._storedError = new Error(`Expected range response-origin "${responseOrigin}" to match "${this._manager._responseOrigin}".`);
this._onError(0);
}
}
_close() {
this.onClosed?.(this);
}
_onDone(data) {
const chunk = data.chunk;
if (this._requests.length > 0) {
const requestCapability = this._requests.shift();
requestCapability.resolve({
value: chunk,
done: false
});
} else {
this._queuedChunk = chunk;
}
this._done = true;
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
this._close();
}
_onError(status) {
this._storedError ??= createResponseError(status, this._url);
for (const requestCapability of this._requests) {
requestCapability.reject(this._storedError);
}
this._requests.length = 0;
this._queuedChunk = null;
}
_onProgress(evt) {
if (!this.isStreamingSupported) {
this.onProgress?.({
loaded: evt.loaded
});
}
}
get isStreamingSupported() {
return false;
}
async read() {
if (this._storedError) {
throw this._storedError;
}
if (this._queuedChunk !== null) {
const chunk = this._queuedChunk;
this._queuedChunk = null;
return {
value: chunk,
done: false
};
}
if (this._done) {
return {
value: undefined,
done: true
};
}
const requestCapability = Promise.withResolvers();
this._requests.push(requestCapability);
return requestCapability.promise;
}
cancel(reason) {
this._done = true;
for (const requestCapability of this._requests) {
requestCapability.resolve({
value: undefined,
done: true
});
}
this._requests.length = 0;
if (this._manager.isPendingRequest(this._requestId)) {
this._manager.abortRequest(this._requestId);
}
this._close();
}
}
;// ./src/display/node_stream.js
const urlRegex = /^[a-z][a-z0-9\-+.]+:/i;
function parseUrlOrPath(sourceUrl) {
if (urlRegex.test(sourceUrl)) {
return new URL(sourceUrl);
}
const url = process.getBuiltinModule("url");
return new URL(url.pathToFileURL(sourceUrl));
}
class PDFNodeStream {
constructor(source) {
this.source = source;
this.url = parseUrlOrPath(source.url);
assert(this.url.protocol === "file:", "PDFNodeStream only supports file:// URLs.");
this._fullRequestReader = null;
this._rangeRequestReaders = [];
}
get _progressiveDataLength() {
return this._fullRequestReader?._loaded ?? 0;
}
getFullReader() {
assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
this._fullRequestReader = new PDFNodeStreamFsFullReader(this);
return this._fullRequestReader;
}
getRangeReader(start, end) {
if (end <= this._progressiveDataLength) {
return null;
}
const rangeReader = new PDFNodeStreamFsRangeReader(this, start, end);
this._rangeRequestReaders.push(rangeReader);
return rangeReader;
}
cancelAllRequests(reason) {
this._fullRequestReader?.cancel(reason);
for (const reader of this._rangeRequestReaders.slice(0)) {
reader.cancel(reason);
}
}
}
class PDFNodeStreamFsFullReader {
constructor(stream) {
this._url = stream.url;
this._done = false;
this._storedError = null;
this.onProgress = null;
const source = stream.source;
this._contentLength = source.length;
this._loaded = 0;
this._filename = null;
this._disableRange = source.disableRange || false;
this._rangeChunkSize = source.rangeChunkSize;
if (!this._rangeChunkSize && !this._disableRange) {
this._disableRange = true;
}
this._isStreamingSupported = !source.disableStream;
this._isRangeSupported = !source.disableRange;
this._readableStream = null;
this._readCapability = Promise.withResolvers();
this._headersCapability = Promise.withResolvers();
const fs = process.getBuiltinModule("fs");
fs.promises.lstat(this._url).then(stat => {
this._contentLength = stat.size;
this._setReadableStream(fs.createReadStream(this._url));
this._headersCapability.resolve();
}, error => {
if (error.code === "ENOENT") {
error = createResponseError(0, this._url.href);
}
this._storedError = error;
this._headersCapability.reject(error);
});
}
get headersReady() {
return this._headersCapability.promise;
}
get filename() {
return this._filename;
}
get contentLength() {
return this._contentLength;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
await this._readCapability.promise;
if (this._done) {
return {
value: undefined,
done: true
};
}
if (this._storedError) {
throw this._storedError;
}
const chunk = this._readableStream.read();
if (chunk === null) {
this._readCapability = Promise.withResolvers();
return this.read();
}
this._loaded += chunk.length;
this.onProgress?.({
loaded: this._loaded,
total: this._contentLength
});
const buffer = new Uint8Array(chunk).buffer;
return {
value: buffer,
done: false
};
}
cancel(reason) {
if (!this._readableStream) {
this._error(reason);
return;
}
this._readableStream.destroy(reason);
}
_error(reason) {
this._storedError = reason;
this._readCapability.resolve();
}
_setReadableStream(readableStream) {
this._readableStream = readableStream;
readableStream.on("readable", () => {
this._readCapability.resolve();
});
readableStream.on("end", () => {
readableStream.destroy();
this._done = true;
this._readCapability.resolve();
});
readableStream.on("error", reason => {
this._error(reason);
});
if (!this._isStreamingSupported && this._isRangeSupported) {
this._error(new AbortException("streaming is disabled"));
}
if (this._storedError) {
this._readableStream.destroy(this._storedError);
}
}
}
class PDFNodeStreamFsRangeReader {
constructor(stream, start, end) {
this._url = stream.url;
this._done = false;
this._storedError = null;
this.onProgress = null;
this._loaded = 0;
this._readableStream = null;
this._readCapability = Promise.withResolvers();
const source = stream.source;
this._isStreamingSupported = !source.disableStream;
const fs = process.getBuiltinModule("fs");
this._setReadableStream(fs.createReadStream(this._url, {
start,
end: end - 1
}));
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
await this._readCapability.promise;
if (this._done) {
return {
value: undefined,
done: true
};
}
if (this._storedError) {
throw this._storedError;
}
const chunk = this._readableStream.read();
if (chunk === null) {
this._readCapability = Promise.withResolvers();
return this.read();
}
this._loaded += chunk.length;
this.onProgress?.({
loaded: this._loaded
});
const buffer = new Uint8Array(chunk).buffer;
return {
value: buffer,
done: false
};
}
cancel(reason) {
if (!this._readableStream) {
this._error(reason);
return;
}
this._readableStream.destroy(reason);
}
_error(reason) {
this._storedError = reason;
this._readCapability.resolve();
}
_setReadableStream(readableStream) {
this._readableStream = readableStream;
readableStream.on("readable", () => {
this._readCapability.resolve();
});
readableStream.on("end", () => {
readableStream.destroy();
this._done = true;
this._readCapability.resolve();
});
readableStream.on("error", reason => {
this._error(reason);
});
if (this._storedError) {
this._readableStream.destroy(this._storedError);
}
}
}
;// ./src/display/pdf_objects.js
function pdf_objects_classPrivateMethodInitSpec(e, a) { pdf_objects_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_objects_classPrivateFieldInitSpec(e, t, a) { pdf_objects_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_objects_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_objects_classPrivateFieldSet(s, a, r) { return s.set(pdf_objects_assertClassBrand(s, a), r), r; }
function pdf_objects_classPrivateFieldGet(s, a) { return s.get(pdf_objects_assertClassBrand(s, a)); }
function pdf_objects_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const INITIAL_DATA = Symbol("INITIAL_DATA");
var _objs = /*#__PURE__*/new WeakMap();
var _PDFObjects_brand = /*#__PURE__*/new WeakSet();
class PDFObjects {
constructor() {
pdf_objects_classPrivateMethodInitSpec(this, _PDFObjects_brand);
pdf_objects_classPrivateFieldInitSpec(this, _objs, Object.create(null));
}
get(objId) {
let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (callback) {
const obj = pdf_objects_assertClassBrand(_PDFObjects_brand, this, _ensureObj).call(this, objId);
obj.promise.then(() => callback(obj.data));
return null;
}
const obj = pdf_objects_classPrivateFieldGet(_objs, this)[objId];
if (!obj || obj.data === INITIAL_DATA) {
throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
}
return obj.data;
}
has(objId) {
const obj = pdf_objects_classPrivateFieldGet(_objs, this)[objId];
return !!obj && obj.data !== INITIAL_DATA;
}
delete(objId) {
const obj = pdf_objects_classPrivateFieldGet(_objs, this)[objId];
if (!obj || obj.data === INITIAL_DATA) {
return false;
}
delete pdf_objects_classPrivateFieldGet(_objs, this)[objId];
return true;
}
resolve(objId) {
let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
const obj = pdf_objects_assertClassBrand(_PDFObjects_brand, this, _ensureObj).call(this, objId);
obj.data = data;
obj.resolve();
}
clear() {
for (const objId in pdf_objects_classPrivateFieldGet(_objs, this)) {
const {
data
} = pdf_objects_classPrivateFieldGet(_objs, this)[objId];
data?.bitmap?.close();
}
pdf_objects_classPrivateFieldSet(_objs, this, Object.create(null));
}
*[Symbol.iterator]() {
for (const objId in pdf_objects_classPrivateFieldGet(_objs, this)) {
const {
data
} = pdf_objects_classPrivateFieldGet(_objs, this)[objId];
if (data === INITIAL_DATA) {
continue;
}
yield [objId, data];
}
}
}
function _ensureObj(objId) {
return pdf_objects_classPrivateFieldGet(_objs, this)[objId] ||= {
...Promise.withResolvers(),
data: INITIAL_DATA
};
}
;// ./src/display/text_layer.js
var _TextLayer;
function text_layer_classPrivateMethodInitSpec(e, a) { text_layer_checkPrivateRedeclaration(e, a), a.add(e); }
function text_layer_classPrivateFieldInitSpec(e, t, a) { text_layer_checkPrivateRedeclaration(e, t), t.set(e, a); }
function text_layer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function text_layer_classPrivateFieldGet(s, a) { return s.get(text_layer_assertClassBrand(s, a)); }
function text_layer_classPrivateFieldSet(s, a, r) { return s.set(text_layer_assertClassBrand(s, a), r), r; }
function text_layer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const MAX_TEXT_DIVS_TO_RENDER = 100000;
const DEFAULT_FONT_SIZE = 30;
var _capability = /*#__PURE__*/new WeakMap();
var text_layer_container = /*#__PURE__*/new WeakMap();
var _disableProcessItems = /*#__PURE__*/new WeakMap();
var _fontInspectorEnabled = /*#__PURE__*/new WeakMap();
var _lang = /*#__PURE__*/new WeakMap();
var _layoutTextParams = /*#__PURE__*/new WeakMap();
var _pageHeight = /*#__PURE__*/new WeakMap();
var _pageWidth = /*#__PURE__*/new WeakMap();
var _reader = /*#__PURE__*/new WeakMap();
var _rootContainer = /*#__PURE__*/new WeakMap();
var _rotation = /*#__PURE__*/new WeakMap();
var _scale = /*#__PURE__*/new WeakMap();
var _styleCache = /*#__PURE__*/new WeakMap();
var _textContentItemsStr = /*#__PURE__*/new WeakMap();
var _textContentSource = /*#__PURE__*/new WeakMap();
var _textDivs = /*#__PURE__*/new WeakMap();
var _textDivProperties = /*#__PURE__*/new WeakMap();
var _transform = /*#__PURE__*/new WeakMap();
var _TextLayer_brand = /*#__PURE__*/new WeakSet();
class TextLayer {
constructor(_ref) {
let {
textContentSource,
container,
viewport
} = _ref;
text_layer_classPrivateMethodInitSpec(this, _TextLayer_brand);
text_layer_classPrivateFieldInitSpec(this, _capability, Promise.withResolvers());
text_layer_classPrivateFieldInitSpec(this, text_layer_container, null);
text_layer_classPrivateFieldInitSpec(this, _disableProcessItems, false);
text_layer_classPrivateFieldInitSpec(this, _fontInspectorEnabled, !!globalThis.FontInspector?.enabled);
text_layer_classPrivateFieldInitSpec(this, _lang, null);
text_layer_classPrivateFieldInitSpec(this, _layoutTextParams, null);
text_layer_classPrivateFieldInitSpec(this, _pageHeight, 0);
text_layer_classPrivateFieldInitSpec(this, _pageWidth, 0);
text_layer_classPrivateFieldInitSpec(this, _reader, null);
text_layer_classPrivateFieldInitSpec(this, _rootContainer, null);
text_layer_classPrivateFieldInitSpec(this, _rotation, 0);
text_layer_classPrivateFieldInitSpec(this, _scale, 0);
text_layer_classPrivateFieldInitSpec(this, _styleCache, Object.create(null));
text_layer_classPrivateFieldInitSpec(this, _textContentItemsStr, []);
text_layer_classPrivateFieldInitSpec(this, _textContentSource, null);
text_layer_classPrivateFieldInitSpec(this, _textDivs, []);
text_layer_classPrivateFieldInitSpec(this, _textDivProperties, new WeakMap());
text_layer_classPrivateFieldInitSpec(this, _transform, null);
if (textContentSource instanceof ReadableStream) {
text_layer_classPrivateFieldSet(_textContentSource, this, textContentSource);
} else if (typeof textContentSource === "object") {
text_layer_classPrivateFieldSet(_textContentSource, this, new ReadableStream({
start(controller) {
controller.enqueue(textContentSource);
controller.close();
}
}));
} else {
throw new Error('No "textContentSource" parameter specified.');
}
text_layer_classPrivateFieldSet(text_layer_container, this, text_layer_classPrivateFieldSet(_rootContainer, this, container));
text_layer_classPrivateFieldSet(_scale, this, viewport.scale * OutputScale.pixelRatio);
text_layer_classPrivateFieldSet(_rotation, this, viewport.rotation);
text_layer_classPrivateFieldSet(_layoutTextParams, this, {
div: null,
properties: null,
ctx: null
});
const {
pageWidth,
pageHeight,
pageX,
pageY
} = viewport.rawDims;
text_layer_classPrivateFieldSet(_transform, this, [1, 0, 0, -1, -pageX, pageY + pageHeight]);
text_layer_classPrivateFieldSet(_pageWidth, this, pageWidth);
text_layer_classPrivateFieldSet(_pageHeight, this, pageHeight);
_ensureMinFontSizeComputed.call(TextLayer);
setLayerDimensions(container, viewport);
text_layer_classPrivateFieldGet(_capability, this).promise.finally(() => {
_pendingTextLayers._.delete(this);
text_layer_classPrivateFieldSet(_layoutTextParams, this, null);
text_layer_classPrivateFieldSet(_styleCache, this, null);
}).catch(() => {});
}
static get fontFamilyMap() {
const {
isWindows,
isFirefox
} = util_FeatureTest.platform;
return shadow(this, "fontFamilyMap", new Map([["sans-serif", `${isWindows && isFirefox ? "Calibri, " : ""}sans-serif`], ["monospace", `${isWindows && isFirefox ? "Lucida Console, " : ""}monospace`]]));
}
render() {
const pump = () => {
text_layer_classPrivateFieldGet(_reader, this).read().then(_ref2 => {
let {
value,
done
} = _ref2;
if (done) {
text_layer_classPrivateFieldGet(_capability, this).resolve();
return;
}
text_layer_classPrivateFieldGet(_lang, this) ?? text_layer_classPrivateFieldSet(_lang, this, value.lang);
Object.assign(text_layer_classPrivateFieldGet(_styleCache, this), value.styles);
text_layer_assertClassBrand(_TextLayer_brand, this, _processItems).call(this, value.items);
pump();
}, text_layer_classPrivateFieldGet(_capability, this).reject);
};
text_layer_classPrivateFieldSet(_reader, this, text_layer_classPrivateFieldGet(_textContentSource, this).getReader());
_pendingTextLayers._.add(this);
pump();
return text_layer_classPrivateFieldGet(_capability, this).promise;
}
update(_ref3) {
let {
viewport,
onBefore = null
} = _ref3;
const scale = viewport.scale * OutputScale.pixelRatio;
const rotation = viewport.rotation;
if (rotation !== text_layer_classPrivateFieldGet(_rotation, this)) {
onBefore?.();
text_layer_classPrivateFieldSet(_rotation, this, rotation);
setLayerDimensions(text_layer_classPrivateFieldGet(_rootContainer, this), {
rotation
});
}
if (scale !== text_layer_classPrivateFieldGet(_scale, this)) {
onBefore?.();
text_layer_classPrivateFieldSet(_scale, this, scale);
const params = {
div: null,
properties: null,
ctx: _getCtx.call(TextLayer, text_layer_classPrivateFieldGet(_lang, this))
};
for (const div of text_layer_classPrivateFieldGet(_textDivs, this)) {
params.properties = text_layer_classPrivateFieldGet(_textDivProperties, this).get(div);
params.div = div;
text_layer_assertClassBrand(_TextLayer_brand, this, _layout).call(this, params);
}
}
}
cancel() {
const abortEx = new AbortException("TextLayer task cancelled.");
text_layer_classPrivateFieldGet(_reader, this)?.cancel(abortEx).catch(() => {});
text_layer_classPrivateFieldSet(_reader, this, null);
text_layer_classPrivateFieldGet(_capability, this).reject(abortEx);
}
get textDivs() {
return text_layer_classPrivateFieldGet(_textDivs, this);
}
get textContentItemsStr() {
return text_layer_classPrivateFieldGet(_textContentItemsStr, this);
}
static cleanup() {
if (text_layer_assertClassBrand(TextLayer, this, _pendingTextLayers)._.size > 0) {
return;
}
text_layer_assertClassBrand(TextLayer, this, _ascentCache)._.clear();
for (const {
canvas
} of text_layer_assertClassBrand(TextLayer, this, _canvasContexts)._.values()) {
canvas.remove();
}
text_layer_assertClassBrand(TextLayer, this, _canvasContexts)._.clear();
}
}
_TextLayer = TextLayer;
function _processItems(items) {
if (text_layer_classPrivateFieldGet(_disableProcessItems, this)) {
return;
}
text_layer_classPrivateFieldGet(_layoutTextParams, this).ctx ??= _getCtx.call(_TextLayer, text_layer_classPrivateFieldGet(_lang, this));
const textDivs = text_layer_classPrivateFieldGet(_textDivs, this),
textContentItemsStr = text_layer_classPrivateFieldGet(_textContentItemsStr, this);
for (const item of items) {
if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {
warn("Ignoring additional textDivs for performance reasons.");
text_layer_classPrivateFieldSet(_disableProcessItems, this, true);
return;
}
if (item.str === undefined) {
if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") {
const parent = text_layer_classPrivateFieldGet(text_layer_container, this);
text_layer_classPrivateFieldSet(text_layer_container, this, document.createElement("span"));
text_layer_classPrivateFieldGet(text_layer_container, this).classList.add("markedContent");
if (item.id !== null) {
text_layer_classPrivateFieldGet(text_layer_container, this).setAttribute("id", `${item.id}`);
}
parent.append(text_layer_classPrivateFieldGet(text_layer_container, this));
} else if (item.type === "endMarkedContent") {
text_layer_classPrivateFieldSet(text_layer_container, this, text_layer_classPrivateFieldGet(text_layer_container, this).parentNode);
}
continue;
}
textContentItemsStr.push(item.str);
text_layer_assertClassBrand(_TextLayer_brand, this, _appendText).call(this, item);
}
}
function _appendText(geom) {
const textDiv = document.createElement("span");
const textDivProperties = {
angle: 0,
canvasWidth: 0,
hasText: geom.str !== "",
hasEOL: geom.hasEOL,
fontSize: 0
};
text_layer_classPrivateFieldGet(_textDivs, this).push(textDiv);
const tx = Util.transform(text_layer_classPrivateFieldGet(_transform, this), geom.transform);
let angle = Math.atan2(tx[1], tx[0]);
const style = text_layer_classPrivateFieldGet(_styleCache, this)[geom.fontName];
if (style.vertical) {
angle += Math.PI / 2;
}
let fontFamily = text_layer_classPrivateFieldGet(_fontInspectorEnabled, this) && style.fontSubstitution || style.fontFamily;
fontFamily = _TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;
const fontHeight = Math.hypot(tx[2], tx[3]);
const fontAscent = fontHeight * _getAscent.call(_TextLayer, fontFamily, style, text_layer_classPrivateFieldGet(_lang, this));
let left, top;
if (angle === 0) {
left = tx[4];
top = tx[5] - fontAscent;
} else {
left = tx[4] + fontAscent * Math.sin(angle);
top = tx[5] - fontAscent * Math.cos(angle);
}
const scaleFactorStr = "calc(var(--total-scale-factor) *";
const divStyle = textDiv.style;
if (text_layer_classPrivateFieldGet(text_layer_container, this) === text_layer_classPrivateFieldGet(_rootContainer, this)) {
divStyle.left = `${(100 * left / text_layer_classPrivateFieldGet(_pageWidth, this)).toFixed(2)}%`;
divStyle.top = `${(100 * top / text_layer_classPrivateFieldGet(_pageHeight, this)).toFixed(2)}%`;
} else {
divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;
divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;
}
divStyle.fontSize = `${scaleFactorStr}${(_minFontSize._ * fontHeight).toFixed(2)}px)`;
divStyle.fontFamily = fontFamily;
textDivProperties.fontSize = fontHeight;
textDiv.setAttribute("role", "presentation");
textDiv.textContent = geom.str;
textDiv.dir = geom.dir;
if (text_layer_classPrivateFieldGet(_fontInspectorEnabled, this)) {
textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName;
}
if (angle !== 0) {
textDivProperties.angle = angle * (180 / Math.PI);
}
let shouldScaleText = false;
if (geom.str.length > 1) {
shouldScaleText = true;
} else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) {
const absScaleX = Math.abs(geom.transform[0]),
absScaleY = Math.abs(geom.transform[3]);
if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
shouldScaleText = true;
}
}
if (shouldScaleText) {
textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;
}
text_layer_classPrivateFieldGet(_textDivProperties, this).set(textDiv, textDivProperties);
text_layer_classPrivateFieldGet(_layoutTextParams, this).div = textDiv;
text_layer_classPrivateFieldGet(_layoutTextParams, this).properties = textDivProperties;
text_layer_assertClassBrand(_TextLayer_brand, this, _layout).call(this, text_layer_classPrivateFieldGet(_layoutTextParams, this));
if (textDivProperties.hasText) {
text_layer_classPrivateFieldGet(text_layer_container, this).append(textDiv);
}
if (textDivProperties.hasEOL) {
const br = document.createElement("br");
br.setAttribute("role", "presentation");
text_layer_classPrivateFieldGet(text_layer_container, this).append(br);
}
}
function _layout(params) {
const {
div,
properties,
ctx
} = params;
const {
style
} = div;
let transform = "";
if (_minFontSize._ > 1) {
transform = `scale(${1 / _minFontSize._})`;
}
if (properties.canvasWidth !== 0 && properties.hasText) {
const {
fontFamily
} = style;
const {
canvasWidth,
fontSize
} = properties;
_ensureCtxFont.call(_TextLayer, ctx, fontSize * text_layer_classPrivateFieldGet(_scale, this), fontFamily);
try {
const {
width
} = ctx.measureText(div.textContent);
if (width > 0) {
transform = `scaleX(${canvasWidth * text_layer_classPrivateFieldGet(_scale, this) / width}) ${transform}`;
}
} catch (fingerprintIsBlockedException) {}
}
if (properties.angle !== 0) {
transform = `rotate(${properties.angle}deg) ${transform}`;
}
if (transform.length > 0) {
style.transform = transform;
}
}
function _getCtx() {
let lang = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let ctx = text_layer_assertClassBrand(_TextLayer, this, _canvasContexts)._.get(lang ||= "");
if (!ctx) {
const canvas = document.createElement("canvas");
canvas.className = "hiddenCanvasElement";
canvas.lang = lang;
canvas.width = canvas.height = 0;
document.body.append(canvas);
ctx = canvas.getContext("2d", {
alpha: false,
willReadFrequently: true
});
text_layer_assertClassBrand(_TextLayer, this, _canvasContexts)._.set(lang, ctx);
text_layer_assertClassBrand(_TextLayer, this, _canvasCtxFonts)._.set(ctx, {
size: 0,
family: ""
});
}
return ctx;
}
function _ensureCtxFont(ctx, size, family) {
const cached = text_layer_assertClassBrand(_TextLayer, this, _canvasCtxFonts)._.get(ctx);
if (size === cached.size && family === cached.family) {
return;
}
ctx.font = `${size}px ${family}`;
cached.size = size;
cached.family = family;
}
function _ensureMinFontSizeComputed() {
if (text_layer_assertClassBrand(_TextLayer, this, _minFontSize)._ !== null) {
return;
}
const div = document.createElement("div");
div.style.opacity = 0;
div.style.lineHeight = 1;
div.style.fontSize = "1px";
div.style.position = "absolute";
div.textContent = "X";
document.body.append(div);
_minFontSize._ = text_layer_assertClassBrand(_TextLayer, this, div.getBoundingClientRect().height);
div.remove();
}
function _getAscent(fontFamily, style, lang) {
const cachedAscent = text_layer_assertClassBrand(_TextLayer, this, _ascentCache)._.get(fontFamily);
if (cachedAscent) {
return cachedAscent;
}
const ctx = text_layer_assertClassBrand(_TextLayer, this, _getCtx).call(this, lang);
ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;
text_layer_assertClassBrand(_TextLayer, this, _ensureCtxFont).call(this, ctx, DEFAULT_FONT_SIZE, fontFamily);
const metrics = ctx.measureText("");
const ascent = metrics?.fontBoundingBoxAscent;
const descent = Math.abs(metrics?.fontBoundingBoxDescent);
ctx.canvas.width = ctx.canvas.height = 0;
let ratio = 0.8;
if (ascent) {
ratio = ascent / (ascent + descent);
} else {
if (util_FeatureTest.platform.isFirefox) {
warn("Enable the `dom.textMetrics.fontBoundingBox.enabled` preference " + "in `about:config` to improve TextLayer rendering.");
}
if (style.ascent) {
ratio = style.ascent;
} else if (style.descent) {
ratio = 1 + style.descent;
}
}
text_layer_assertClassBrand(_TextLayer, this, _ascentCache)._.set(fontFamily, ratio);
return ratio;
}
var _ascentCache = {
_: new Map()
};
var _canvasContexts = {
_: new Map()
};
var _canvasCtxFonts = {
_: new WeakMap()
};
var _minFontSize = {
_: null
};
var _pendingTextLayers = {
_: new Set()
};
;// ./src/display/xfa_text.js
class XfaText {
static textContent(xfa) {
const items = [];
const output = {
items,
styles: Object.create(null)
};
function walk(node) {
if (!node) {
return;
}
let str = null;
const name = node.name;
if (name === "#text") {
str = node.value;
} else if (!XfaText.shouldBuildText(name)) {
return;
} else if (node?.attributes?.textContent) {
str = node.attributes.textContent;
} else if (node.value) {
str = node.value;
}
if (str !== null) {
items.push({
str
});
}
if (!node.children) {
return;
}
for (const child of node.children) {
walk(child);
}
}
walk(xfa);
return output;
}
static shouldBuildText(name) {
return !(name === "textarea" || name === "input" || name === "option" || name === "select");
}
}
;// ./src/display/api.js
var _PDFDocumentLoadingTa, _PDFDocumentLoadingTa2, _PDFWorker;
function api_classPrivateGetter(s, r, a) { return a(api_assertClassBrand(s, r)); }
function api_classPrivateMethodInitSpec(e, a) { api_checkPrivateRedeclaration(e, a), a.add(e); }
function api_classPrivateFieldSet(s, a, r) { return s.set(api_assertClassBrand(s, a), r), r; }
function api_classPrivateFieldInitSpec(e, t, a) { api_checkPrivateRedeclaration(e, t), t.set(e, a); }
function api_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function api_classPrivateFieldGet(s, a) { return s.get(api_assertClassBrand(s, a)); }
function api_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function api_defineProperty(e, r, t) { return (r = api_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function api_toPropertyKey(t) { var i = api_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function api_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const RENDERING_CANCELLED_TIMEOUT = 100;
function getDocument() {
let src = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (typeof src === "string" || src instanceof URL) {
src = {
url: src
};
} else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) {
src = {
data: src
};
}
const task = new PDFDocumentLoadingTask();
const {
docId
} = task;
const url = src.url ? getUrlProp(src.url, src.baseHref) : null;
const data = src.data ? getDataProp(src.data) : null;
const httpHeaders = src.httpHeaders || null;
const withCredentials = src.withCredentials === true;
const password = src.password ?? null;
const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null;
const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : 2 ** 16;
let worker = src.worker instanceof PDFWorker ? src.worker : null;
const verbosity = src.verbosity;
const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null;
const rawCMapUrl = typeof src.cMapUrl === "function" ? src.cMapUrl() : typeof src.cMapUrl === "string" ? src.cMapUrl : null;
const cMapUrl = getFactoryUrlProp(rawCMapUrl);
const cMapPacked = src.cMapPacked !== false;
const CMapReaderFactory = src.CMapReaderFactory || (isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory);
const iccUrl = getFactoryUrlProp(src.iccUrl);
const rawStandardFontDataUrl = typeof src.standardFontDataUrl === "function" ? src.standardFontDataUrl() : typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null;
const standardFontDataUrl = getFactoryUrlProp(rawStandardFontDataUrl);
const StandardFontDataFactory = src.StandardFontDataFactory || (isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory);
const wasmUrl = getFactoryUrlProp(src.wasmUrl);
const WasmFactory = src.WasmFactory || (isNodeJS ? NodeWasmFactory : DOMWasmFactory);
const ignoreErrors = src.stopAtErrors !== true;
const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;
const isEvalSupported = src.isEvalSupported !== false;
const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS;
const isImageDecoderSupported = typeof src.isImageDecoderSupported === "boolean" ? src.isImageDecoderSupported : !isNodeJS && (util_FeatureTest.platform.isFirefox || !globalThis.chrome);
const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;
const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS;
const fontExtraProperties = src.fontExtraProperties === true;
const enableXfa = src.enableXfa === true;
const ownerDocument = src.ownerDocument || globalThis.document;
const disableRange = src.disableRange === true;
const disableStream = src.disableStream === true;
const disableAutoFetch = src.disableAutoFetch === true;
const pdfBug = src.pdfBug === true;
const CanvasFactory = src.CanvasFactory || (isNodeJS ? NodeCanvasFactory : DOMCanvasFactory);
const FilterFactory = src.FilterFactory || (isNodeJS ? NodeFilterFactory : DOMFilterFactory);
const enableHWA = src.enableHWA === true;
const useWasm = src.useWasm !== false;
const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;
const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace;
const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : !!(CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && WasmFactory === DOMWasmFactory && cMapUrl && standardFontDataUrl && wasmUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI) && isValidFetchUrl(wasmUrl, document.baseURI));
const styleElement = null;
setVerbosityLevel(verbosity);
const transportFactory = {
canvasFactory: new CanvasFactory({
ownerDocument,
enableHWA
}),
filterFactory: new FilterFactory({
docId,
ownerDocument
}),
cMapReaderFactory: useWorkerFetch ? null : new CMapReaderFactory({
baseUrl: cMapUrl,
isCompressed: cMapPacked
}),
standardFontDataFactory: useWorkerFetch ? null : new StandardFontDataFactory({
baseUrl: standardFontDataUrl
}),
wasmFactory: useWorkerFetch ? null : new WasmFactory({
baseUrl: wasmUrl
})
};
if (!worker) {
const workerParams = {
verbosity,
port: GlobalWorkerOptions.workerPort,
cspPolicyService: src.cspPolicyService
};
worker = PDFWorker.create(workerParams);
task._worker = worker;
}
const docParams = {
docId,
apiVersion: "5.3.754",
data,
password,
disableAutoFetch,
rangeChunkSize,
length,
docBaseUrl,
enableXfa,
evaluatorOptions: {
maxImageSize,
disableFontFace,
ignoreErrors,
isEvalSupported,
isOffscreenCanvasSupported,
isImageDecoderSupported,
canvasMaxAreaInBytes,
fontExtraProperties,
useSystemFonts,
useWasm,
useWorkerFetch,
cMapUrl,
iccUrl,
standardFontDataUrl,
wasmUrl
}
};
const transportParams = {
ownerDocument,
pdfBug,
styleElement,
loadingParams: {
disableAutoFetch,
enableXfa
}
};
worker.promise.then(function () {
if (task.destroyed) {
throw new Error("Loading aborted");
}
if (worker.destroyed) {
throw new Error("Worker was destroyed");
}
const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null);
let networkStream;
if (rangeTransport) {
networkStream = new PDFDataTransportStream(rangeTransport, {
disableRange,
disableStream
});
} else if (!data) {
if (!url) {
throw new Error("getDocument - no `url` parameter provided.");
}
const NetworkStream = isValidFetchUrl(url) ? PDFFetchStream : isNodeJS ? PDFNodeStream : PDFNetworkStream;
networkStream = new NetworkStream({
url,
length,
httpHeaders,
withCredentials,
rangeChunkSize,
disableRange,
disableStream
});
}
return workerIdPromise.then(workerId => {
if (task.destroyed) {
throw new Error("Loading aborted");
}
if (worker.destroyed) {
throw new Error("Worker was destroyed");
}
const messageHandler = new MessageHandler(docId, workerId, worker.port);
const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory);
task._transport = transport;
messageHandler.send("Ready", null);
});
}).catch(task._capability.reject);
return task;
}
class PDFDocumentLoadingTask {
constructor() {
api_defineProperty(this, "_capability", Promise.withResolvers());
api_defineProperty(this, "_transport", null);
api_defineProperty(this, "_worker", null);
api_defineProperty(this, "docId", `d${api_docId._ = (_PDFDocumentLoadingTa = api_docId._, _PDFDocumentLoadingTa2 = _PDFDocumentLoadingTa++, _PDFDocumentLoadingTa), _PDFDocumentLoadingTa2}`);
api_defineProperty(this, "destroyed", false);
api_defineProperty(this, "onPassword", null);
api_defineProperty(this, "onProgress", null);
}
get promise() {
return this._capability.promise;
}
async destroy() {
this.destroyed = true;
try {
if (this._worker?.port) {
this._worker._pendingDestroy = true;
}
await this._transport?.destroy();
} catch (ex) {
if (this._worker?.port) {
delete this._worker._pendingDestroy;
}
throw ex;
}
this._transport = null;
this._worker?.destroy();
this._worker = null;
}
async getData() {
return this._transport.getData();
}
}
var api_docId = {
_: 0
};
var api_capability = /*#__PURE__*/new WeakMap();
var _progressiveDoneListeners = /*#__PURE__*/new WeakMap();
var _progressiveReadListeners = /*#__PURE__*/new WeakMap();
var _progressListeners = /*#__PURE__*/new WeakMap();
var _rangeListeners = /*#__PURE__*/new WeakMap();
class PDFDataRangeTransport {
constructor(length, initialData) {
let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
api_classPrivateFieldInitSpec(this, api_capability, Promise.withResolvers());
api_classPrivateFieldInitSpec(this, _progressiveDoneListeners, []);
api_classPrivateFieldInitSpec(this, _progressiveReadListeners, []);
api_classPrivateFieldInitSpec(this, _progressListeners, []);
api_classPrivateFieldInitSpec(this, _rangeListeners, []);
this.length = length;
this.initialData = initialData;
this.progressiveDone = progressiveDone;
this.contentDispositionFilename = contentDispositionFilename;
}
addRangeListener(listener) {
api_classPrivateFieldGet(_rangeListeners, this).push(listener);
}
addProgressListener(listener) {
api_classPrivateFieldGet(_progressListeners, this).push(listener);
}
addProgressiveReadListener(listener) {
api_classPrivateFieldGet(_progressiveReadListeners, this).push(listener);
}
addProgressiveDoneListener(listener) {
api_classPrivateFieldGet(_progressiveDoneListeners, this).push(listener);
}
onDataRange(begin, chunk) {
for (const listener of api_classPrivateFieldGet(_rangeListeners, this)) {
listener(begin, chunk);
}
}
onDataProgress(loaded, total) {
api_classPrivateFieldGet(api_capability, this).promise.then(() => {
for (const listener of api_classPrivateFieldGet(_progressListeners, this)) {
listener(loaded, total);
}
});
}
onDataProgressiveRead(chunk) {
api_classPrivateFieldGet(api_capability, this).promise.then(() => {
for (const listener of api_classPrivateFieldGet(_progressiveReadListeners, this)) {
listener(chunk);
}
});
}
onDataProgressiveDone() {
api_classPrivateFieldGet(api_capability, this).promise.then(() => {
for (const listener of api_classPrivateFieldGet(_progressiveDoneListeners, this)) {
listener();
}
});
}
transportReady() {
api_classPrivateFieldGet(api_capability, this).resolve();
}
requestDataRange(begin, end) {
unreachable("Abstract method PDFDataRangeTransport.requestDataRange");
}
abort() {}
}
class PDFDocumentProxy {
constructor(pdfInfo, transport) {
this._pdfInfo = pdfInfo;
this._transport = transport;
}
get annotationStorage() {
return this._transport.annotationStorage;
}
get canvasFactory() {
return this._transport.canvasFactory;
}
get filterFactory() {
return this._transport.filterFactory;
}
get numPages() {
return this._pdfInfo.numPages;
}
get fingerprints() {
return this._pdfInfo.fingerprints;
}
get isPureXfa() {
return shadow(this, "isPureXfa", !!this._transport._htmlForXfa);
}
get allXfaHtml() {
return this._transport._htmlForXfa;
}
getPage(pageNumber) {
return this._transport.getPage(pageNumber);
}
getPageIndex(ref) {
return this._transport.getPageIndex(ref);
}
getDestinations() {
return this._transport.getDestinations();
}
getDestination(id) {
return this._transport.getDestination(id);
}
getPageLabels() {
return this._transport.getPageLabels();
}
getPageLayout() {
return this._transport.getPageLayout();
}
getPageMode() {
return this._transport.getPageMode();
}
getViewerPreferences() {
return this._transport.getViewerPreferences();
}
getOpenAction() {
return this._transport.getOpenAction();
}
getAttachments() {
return this._transport.getAttachments();
}
getJSActions() {
return this._transport.getDocJSActions();
}
getOutline() {
return this._transport.getOutline();
}
getOptionalContentConfig() {
let {
intent = "display"
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const {
renderingIntent
} = this._transport.getRenderingIntent(intent);
return this._transport.getOptionalContentConfig(renderingIntent);
}
getPermissions() {
return this._transport.getPermissions();
}
getMetadata() {
return this._transport.getMetadata();
}
getMarkInfo() {
return this._transport.getMarkInfo();
}
getData() {
return this._transport.getData();
}
saveDocument() {
let pageOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
return this._transport.saveDocument(pageOrder);
}
getDownloadInfo() {
return this._transport.downloadInfoCapability.promise;
}
cleanup() {
let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);
}
destroy() {
return this.loadingTask.destroy();
}
cachedPageNumber(ref) {
return this._transport.cachedPageNumber(ref);
}
get loadingParams() {
return this._transport.loadingParams;
}
get loadingTask() {
return this._transport.loadingTask;
}
getFieldObjects() {
return this._transport.getFieldObjects();
}
hasJSActions() {
return this._transport.hasJSActions();
}
getCalculationOrderIds() {
return this._transport.getCalculationOrderIds();
}
}
var _pendingCleanup = /*#__PURE__*/new WeakMap();
var _PDFPageProxy_brand = /*#__PURE__*/new WeakSet();
class PDFPageProxy {
constructor(pageIndex, pageInfo, transport) {
let pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
api_classPrivateMethodInitSpec(this, _PDFPageProxy_brand);
api_classPrivateFieldInitSpec(this, _pendingCleanup, false);
this._pageIndex = pageIndex;
this._pageInfo = pageInfo;
this._transport = transport;
this._stats = pdfBug ? new StatTimer() : null;
this._pdfBug = pdfBug;
this.commonObjs = transport.commonObjs;
this.objs = new PDFObjects();
this._intentStates = new Map();
this.destroyed = false;
}
get pageNumber() {
return this._pageIndex + 1;
}
get rotate() {
return this._pageInfo.rotate;
}
get ref() {
return this._pageInfo.ref;
}
get userUnit() {
return this._pageInfo.userUnit;
}
get view() {
return this._pageInfo.view;
}
getViewport() {
let {
scale,
rotation = this.rotate,
offsetX = 0,
offsetY = 0,
dontFlip = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return new PageViewport({
viewBox: this.view,
userUnit: this.userUnit,
scale,
rotation,
offsetX,
offsetY,
dontFlip
});
}
getAnnotations() {
let {
intent = "display"
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const {
renderingIntent
} = this._transport.getRenderingIntent(intent);
return this._transport.getAnnotations(this._pageIndex, renderingIntent);
}
getJSActions() {
return this._transport.getPageJSActions(this._pageIndex);
}
get filterFactory() {
return this._transport.filterFactory;
}
get isPureXfa() {
return shadow(this, "isPureXfa", !!this._transport._htmlForXfa);
}
async getXfa() {
return this._transport._htmlForXfa?.children[this._pageIndex] || null;
}
render(_ref) {
let {
canvasContext,
viewport,
intent = "display",
annotationMode = AnnotationMode.ENABLE,
transform = null,
background = null,
optionalContentConfigPromise = null,
annotationCanvasMap = null,
pageColors = null,
printAnnotationStorage = null,
isEditing = false
} = _ref;
this._stats?.time("Overall");
const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing);
const {
renderingIntent,
cacheKey
} = intentArgs;
api_classPrivateFieldSet(_pendingCleanup, this, false);
optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent);
let intentState = this._intentStates.get(cacheKey);
if (!intentState) {
intentState = Object.create(null);
this._intentStates.set(cacheKey, intentState);
}
if (intentState.streamReaderCancelTimeout) {
clearTimeout(intentState.streamReaderCancelTimeout);
intentState.streamReaderCancelTimeout = null;
}
const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);
if (!intentState.displayReadyCapability) {
intentState.displayReadyCapability = Promise.withResolvers();
intentState.operatorList = {
fnArray: [],
argsArray: [],
lastChunk: false,
separateAnnots: null
};
this._stats?.time("Page Request");
this._pumpOperatorList(intentArgs);
}
const complete = error => {
intentState.renderTasks.delete(internalRenderTask);
if (intentPrint) {
api_classPrivateFieldSet(_pendingCleanup, this, true);
}
api_assertClassBrand(_PDFPageProxy_brand, this, _tryCleanup).call(this);
if (error) {
internalRenderTask.capability.reject(error);
this._abortOperatorList({
intentState,
reason: error instanceof Error ? error : new Error(error)
});
} else {
internalRenderTask.capability.resolve();
}
if (this._stats) {
this._stats.timeEnd("Rendering");
this._stats.timeEnd("Overall");
if (globalThis.Stats?.enabled) {
globalThis.Stats.add(this.pageNumber, this._stats);
}
}
};
const internalRenderTask = new InternalRenderTask({
callback: complete,
params: {
canvasContext,
viewport,
transform,
background
},
objs: this.objs,
commonObjs: this.commonObjs,
annotationCanvasMap,
operatorList: intentState.operatorList,
pageIndex: this._pageIndex,
canvasFactory: this._transport.canvasFactory,
filterFactory: this._transport.filterFactory,
useRequestAnimationFrame: !intentPrint,
pdfBug: this._pdfBug,
pageColors
});
(intentState.renderTasks ||= new Set()).add(internalRenderTask);
const renderTask = internalRenderTask.task;
Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(_ref2 => {
let [transparency, optionalContentConfig] = _ref2;
if (this.destroyed) {
complete();
return;
}
this._stats?.time("Rendering");
if (!(optionalContentConfig.renderingIntent & renderingIntent)) {
throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` " + "and `PDFDocumentProxy.getOptionalContentConfig` methods.");
}
internalRenderTask.initializeGraphics({
transparency,
optionalContentConfig
});
internalRenderTask.operatorListChanged();
}).catch(complete);
return renderTask;
}
getOperatorList() {
let {
intent = "display",
annotationMode = AnnotationMode.ENABLE,
printAnnotationStorage = null,
isEditing = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
function operatorListChanged() {
if (intentState.operatorList.lastChunk) {
intentState.opListReadCapability.resolve(intentState.operatorList);
intentState.renderTasks.delete(opListTask);
}
}
const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true);
let intentState = this._intentStates.get(intentArgs.cacheKey);
if (!intentState) {
intentState = Object.create(null);
this._intentStates.set(intentArgs.cacheKey, intentState);
}
let opListTask;
if (!intentState.opListReadCapability) {
opListTask = Object.create(null);
opListTask.operatorListChanged = operatorListChanged;
intentState.opListReadCapability = Promise.withResolvers();
(intentState.renderTasks ||= new Set()).add(opListTask);
intentState.operatorList = {
fnArray: [],
argsArray: [],
lastChunk: false,
separateAnnots: null
};
this._stats?.time("Page Request");
this._pumpOperatorList(intentArgs);
}
return intentState.opListReadCapability.promise;
}
streamTextContent() {
let {
includeMarkedContent = false,
disableNormalization = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const TEXT_CONTENT_CHUNK_SIZE = 100;
return this._transport.messageHandler.sendWithStream("GetTextContent", {
pageIndex: this._pageIndex,
includeMarkedContent: includeMarkedContent === true,
disableNormalization: disableNormalization === true
}, {
highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
size(textContent) {
return textContent.items.length;
}
});
}
getTextContent() {
let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (this._transport._htmlForXfa) {
return this.getXfa().then(xfa => XfaText.textContent(xfa));
}
const readableStream = this.streamTextContent(params);
return new Promise(function (resolve, reject) {
function pump() {
reader.read().then(function (_ref3) {
let {
value,
done
} = _ref3;
if (done) {
resolve(textContent);
return;
}
textContent.lang ??= value.lang;
Object.assign(textContent.styles, value.styles);
textContent.items.push(...value.items);
pump();
}, reject);
}
const reader = readableStream.getReader();
const textContent = {
items: [],
styles: Object.create(null),
lang: null
};
pump();
});
}
getStructTree() {
return this._transport.getStructTree(this._pageIndex);
}
_destroy() {
this.destroyed = true;
const waitOn = [];
for (const intentState of this._intentStates.values()) {
this._abortOperatorList({
intentState,
reason: new Error("Page was destroyed."),
force: true
});
if (intentState.opListReadCapability) {
continue;
}
for (const internalRenderTask of intentState.renderTasks) {
waitOn.push(internalRenderTask.completed);
internalRenderTask.cancel();
}
}
this.objs.clear();
api_classPrivateFieldSet(_pendingCleanup, this, false);
return Promise.all(waitOn);
}
cleanup() {
let resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
api_classPrivateFieldSet(_pendingCleanup, this, true);
const success = api_assertClassBrand(_PDFPageProxy_brand, this, _tryCleanup).call(this);
if (resetStats && success) {
this._stats &&= new StatTimer();
}
return success;
}
_startRenderPage(transparency, cacheKey) {
const intentState = this._intentStates.get(cacheKey);
if (!intentState) {
return;
}
this._stats?.timeEnd("Page Request");
intentState.displayReadyCapability?.resolve(transparency);
}
_renderPageChunk(operatorListChunk, intentState) {
for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
}
intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;
for (const internalRenderTask of intentState.renderTasks) {
internalRenderTask.operatorListChanged();
}
if (operatorListChunk.lastChunk) {
api_assertClassBrand(_PDFPageProxy_brand, this, _tryCleanup).call(this);
}
}
_pumpOperatorList(_ref4) {
let {
renderingIntent,
cacheKey,
annotationStorageSerializable,
modifiedIds
} = _ref4;
const {
map,
transfer
} = annotationStorageSerializable;
const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", {
pageIndex: this._pageIndex,
intent: renderingIntent,
cacheKey,
annotationStorage: map,
modifiedIds
}, transfer);
const reader = readableStream.getReader();
const intentState = this._intentStates.get(cacheKey);
intentState.streamReader = reader;
const pump = () => {
reader.read().then(_ref5 => {
let {
value,
done
} = _ref5;
if (done) {
intentState.streamReader = null;
return;
}
if (this._transport.destroyed) {
return;
}
this._renderPageChunk(value, intentState);
pump();
}, reason => {
intentState.streamReader = null;
if (this._transport.destroyed) {
return;
}
if (intentState.operatorList) {
intentState.operatorList.lastChunk = true;
for (const internalRenderTask of intentState.renderTasks) {
internalRenderTask.operatorListChanged();
}
api_assertClassBrand(_PDFPageProxy_brand, this, _tryCleanup).call(this);
}
if (intentState.displayReadyCapability) {
intentState.displayReadyCapability.reject(reason);
} else if (intentState.opListReadCapability) {
intentState.opListReadCapability.reject(reason);
} else {
throw reason;
}
});
};
pump();
}
_abortOperatorList(_ref6) {
let {
intentState,
reason,
force = false
} = _ref6;
if (!intentState.streamReader) {
return;
}
if (intentState.streamReaderCancelTimeout) {
clearTimeout(intentState.streamReaderCancelTimeout);
intentState.streamReaderCancelTimeout = null;
}
if (!force) {
if (intentState.renderTasks.size > 0) {
return;
}
if (reason instanceof RenderingCancelledException) {
let delay = RENDERING_CANCELLED_TIMEOUT;
if (reason.extraDelay > 0 && reason.extraDelay < 1000) {
delay += reason.extraDelay;
}
intentState.streamReaderCancelTimeout = setTimeout(() => {
intentState.streamReaderCancelTimeout = null;
this._abortOperatorList({
intentState,
reason,
force: true
});
}, delay);
return;
}
}
intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => {});
intentState.streamReader = null;
if (this._transport.destroyed) {
return;
}
for (const [curCacheKey, curIntentState] of this._intentStates) {
if (curIntentState === intentState) {
this._intentStates.delete(curCacheKey);
break;
}
}
this.cleanup();
}
get stats() {
return this._stats;
}
}
function _tryCleanup() {
if (!api_classPrivateFieldGet(_pendingCleanup, this) || this.destroyed) {
return false;
}
for (const {
renderTasks,
operatorList
} of this._intentStates.values()) {
if (renderTasks.size > 0 || !operatorList.lastChunk) {
return false;
}
}
this._intentStates.clear();
this.objs.clear();
api_classPrivateFieldSet(_pendingCleanup, this, false);
return true;
}
var _capability2 = /*#__PURE__*/new WeakMap();
var _messageHandler = /*#__PURE__*/new WeakMap();
var api_port = /*#__PURE__*/new WeakMap();
var _webWorker = /*#__PURE__*/new WeakMap();
var _PDFWorker_brand = /*#__PURE__*/new WeakSet();
class PDFWorker {
constructor() {
let {
name = null,
port: _port2 = null,
verbosity = getVerbosityLevel(),
cspPolicyService
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
api_classPrivateMethodInitSpec(this, _PDFWorker_brand);
api_classPrivateFieldInitSpec(this, _capability2, Promise.withResolvers());
api_classPrivateFieldInitSpec(this, _messageHandler, null);
api_classPrivateFieldInitSpec(this, api_port, null);
api_classPrivateFieldInitSpec(this, _webWorker, null);
this.name = name;
this.destroyed = false;
this.verbosity = verbosity;
if (_port2) {
if (_workerPorts._.has(_port2)) {
throw new Error("Cannot use more than one PDFWorker per port.");
}
_workerPorts._.set(_port2, this);
api_assertClassBrand(_PDFWorker_brand, this, _initializeFromPort).call(this, _port2);
} else {
this._initialize(cspPolicyService);
}
}
get promise() {
return api_classPrivateFieldGet(_capability2, this).promise;
}
get port() {
return api_classPrivateFieldGet(api_port, this);
}
get messageHandler() {
return api_classPrivateFieldGet(_messageHandler, this);
}
_initialize(cspPolicyService) {
if (_isWorkerDisabled._ || _get_mainThreadWorkerMessageHandler(PDFWorker)) {
api_assertClassBrand(_PDFWorker_brand, this, _setupFakeWorker).call(this);
return;
}
let {
workerSrc
} = PDFWorker;
try {
if (!PDFWorker._isSameOrigin(window.location, workerSrc)) {
workerSrc = PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href);
}
const worker = new Worker(cspPolicyService.generateTrustedURL(workerSrc), {
type: "module"
});
const messageHandler = new MessageHandler("main", "worker", worker);
const terminateEarly = () => {
ac.abort();
messageHandler.destroy();
worker.terminate();
if (this.destroyed) {
api_classPrivateFieldGet(_capability2, this).reject(new Error("Worker was destroyed"));
} else {
api_assertClassBrand(_PDFWorker_brand, this, _setupFakeWorker).call(this);
}
};
const ac = new AbortController();
worker.addEventListener("error", () => {
if (!api_classPrivateFieldGet(_webWorker, this)) {
terminateEarly();
}
}, {
signal: ac.signal
});
messageHandler.on("test", data => {
ac.abort();
if (this.destroyed || !data) {
terminateEarly();
return;
}
api_classPrivateFieldSet(_messageHandler, this, messageHandler);
api_classPrivateFieldSet(api_port, this, worker);
api_classPrivateFieldSet(_webWorker, this, worker);
api_assertClassBrand(_PDFWorker_brand, this, _resolve).call(this);
});
messageHandler.on("ready", data => {
ac.abort();
if (this.destroyed) {
terminateEarly();
return;
}
try {
sendTest();
} catch {
api_assertClassBrand(_PDFWorker_brand, this, _setupFakeWorker).call(this);
}
});
const sendTest = () => {
const testObj = new Uint8Array();
messageHandler.send("test", testObj, [testObj.buffer]);
};
sendTest();
return;
} catch {
info("The worker has been disabled.");
}
api_assertClassBrand(_PDFWorker_brand, this, _setupFakeWorker).call(this);
}
destroy() {
this.destroyed = true;
api_classPrivateFieldGet(_webWorker, this)?.terminate();
api_classPrivateFieldSet(_webWorker, this, null);
_workerPorts._.delete(api_classPrivateFieldGet(api_port, this));
api_classPrivateFieldSet(api_port, this, null);
api_classPrivateFieldGet(_messageHandler, this)?.destroy();
api_classPrivateFieldSet(_messageHandler, this, null);
}
static create(params) {
const cachedPort = api_assertClassBrand(PDFWorker, this, _workerPorts)._.get(params?.port);
if (cachedPort) {
if (cachedPort._pendingDestroy) {
throw new Error("PDFWorker.create - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.");
}
return cachedPort;
}
return new PDFWorker(params);
}
static get workerSrc() {
if (GlobalWorkerOptions.workerSrc) {
return GlobalWorkerOptions.workerSrc;
}
throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
}
static get _setupFakeWorkerGlobal() {
const loader = async () => {
if (api_classPrivateGetter(PDFWorker, this, _get_mainThreadWorkerMessageHandler)) {
return api_classPrivateGetter(PDFWorker, this, _get_mainThreadWorkerMessageHandler);
}
const worker = await import(
/*webpackIgnore: true*/
/*@vite-ignore*/
this.workerSrc);
return worker.WorkerMessageHandler;
};
return shadow(this, "_setupFakeWorkerGlobal", loader());
}
}
_PDFWorker = PDFWorker;
function _resolve() {
api_classPrivateFieldGet(_capability2, this).resolve();
api_classPrivateFieldGet(_messageHandler, this).send("configure", {
verbosity: this.verbosity
});
}
function _initializeFromPort(port) {
api_classPrivateFieldSet(api_port, this, port);
api_classPrivateFieldSet(_messageHandler, this, new MessageHandler("main", "worker", port));
api_classPrivateFieldGet(_messageHandler, this).on("ready", () => {});
api_assertClassBrand(_PDFWorker_brand, this, _resolve).call(this);
}
function _setupFakeWorker() {
if (!_isWorkerDisabled._) {
warn("Setting up fake worker.");
_isWorkerDisabled._ = true;
}
_PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {
var _PDFWorker$fakeWorker, _PDFWorker$fakeWorker2;
if (this.destroyed) {
api_classPrivateFieldGet(_capability2, this).reject(new Error("Worker was destroyed"));
return;
}
const port = new LoopbackPort();
api_classPrivateFieldSet(api_port, this, port);
const id = `fake${_fakeWorkerId._ = (_PDFWorker$fakeWorker = _fakeWorkerId._, _PDFWorker$fakeWorker2 = _PDFWorker$fakeWorker++, _PDFWorker$fakeWorker), _PDFWorker$fakeWorker2}`;
const workerHandler = new MessageHandler(id + "_worker", id, port);
WorkerMessageHandler.setup(workerHandler, port);
api_classPrivateFieldSet(_messageHandler, this, new MessageHandler(id, id + "_worker", port));
api_assertClassBrand(_PDFWorker_brand, this, _resolve).call(this);
}).catch(reason => {
api_classPrivateFieldGet(_capability2, this).reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
});
}
function _get_mainThreadWorkerMessageHandler(_this) {
try {
return globalThis.pdfjsWorker?.WorkerMessageHandler || null;
} catch {
return null;
}
}
var _fakeWorkerId = {
_: 0
};
var _isWorkerDisabled = {
_: false
};
var _workerPorts = {
_: new WeakMap()
};
(() => {
if (isNodeJS) {
_isWorkerDisabled._ = api_assertClassBrand(_PDFWorker, _PDFWorker, true);
GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs";
}
_PDFWorker._isSameOrigin = (baseUrl, otherUrl) => {
const base = URL.parse(baseUrl);
if (!base?.origin || base.origin === "null") {
return false;
}
const other = new URL(otherUrl, base);
return base.origin === other.origin;
};
_PDFWorker._createCDNWrapper = url => {
const wrapper = `await import("${url}");`;
return URL.createObjectURL(new Blob([wrapper], {
type: "text/javascript"
}));
};
_PDFWorker.fromPort = params => {
deprecated("`PDFWorker.fromPort` - please use `PDFWorker.create` instead.");
if (!params?.port) {
throw new Error("PDFWorker.fromPort - invalid method signature.");
}
return _PDFWorker.create(params);
};
})();
var _methodPromises = /*#__PURE__*/new WeakMap();
var _pageCache = /*#__PURE__*/new WeakMap();
var _pagePromises = /*#__PURE__*/new WeakMap();
var _pageRefCache = /*#__PURE__*/new WeakMap();
var _passwordCapability = /*#__PURE__*/new WeakMap();
var _WorkerTransport_brand = /*#__PURE__*/new WeakSet();
class WorkerTransport {
constructor(messageHandler, loadingTask, networkStream, params, factory) {
api_classPrivateMethodInitSpec(this, _WorkerTransport_brand);
api_classPrivateFieldInitSpec(this, _methodPromises, new Map());
api_classPrivateFieldInitSpec(this, _pageCache, new Map());
api_classPrivateFieldInitSpec(this, _pagePromises, new Map());
api_classPrivateFieldInitSpec(this, _pageRefCache, new Map());
api_classPrivateFieldInitSpec(this, _passwordCapability, null);
this.messageHandler = messageHandler;
this.loadingTask = loadingTask;
this.commonObjs = new PDFObjects();
this.fontLoader = new FontLoader({
ownerDocument: params.ownerDocument,
styleElement: params.styleElement
});
this.loadingParams = params.loadingParams;
this._params = params;
this.canvasFactory = factory.canvasFactory;
this.filterFactory = factory.filterFactory;
this.cMapReaderFactory = factory.cMapReaderFactory;
this.standardFontDataFactory = factory.standardFontDataFactory;
this.wasmFactory = factory.wasmFactory;
this.destroyed = false;
this.destroyCapability = null;
this._networkStream = networkStream;
this._fullReader = null;
this._lastProgress = null;
this.downloadInfoCapability = Promise.withResolvers();
this.setupMessageHandler();
}
get annotationStorage() {
return shadow(this, "annotationStorage", new AnnotationStorage());
}
getRenderingIntent(intent) {
let annotationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AnnotationMode.ENABLE;
let printAnnotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
let isEditing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
let isOpList = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
let renderingIntent = RenderingIntentFlag.DISPLAY;
let annotationStorageSerializable = SerializableEmpty;
switch (intent) {
case "any":
renderingIntent = RenderingIntentFlag.ANY;
break;
case "display":
break;
case "print":
renderingIntent = RenderingIntentFlag.PRINT;
break;
default:
warn(`getRenderingIntent - invalid intent: ${intent}`);
}
const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage;
switch (annotationMode) {
case AnnotationMode.DISABLE:
renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE;
break;
case AnnotationMode.ENABLE:
break;
case AnnotationMode.ENABLE_FORMS:
renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS;
break;
case AnnotationMode.ENABLE_STORAGE:
renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE;
annotationStorageSerializable = annotationStorage.serializable;
break;
default:
warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);
}
if (isEditing) {
renderingIntent += RenderingIntentFlag.IS_EDITING;
}
if (isOpList) {
renderingIntent += RenderingIntentFlag.OPLIST;
}
const {
ids: modifiedIds,
hash: modifiedIdsHash
} = annotationStorage.modifiedIds;
const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash];
return {
renderingIntent,
cacheKey: cacheKeyBuf.join("_"),
annotationStorageSerializable,
modifiedIds
};
}
destroy() {
if (this.destroyCapability) {
return this.destroyCapability.promise;
}
this.destroyed = true;
this.destroyCapability = Promise.withResolvers();
api_classPrivateFieldGet(_passwordCapability, this)?.reject(new Error("Worker was destroyed during onPassword callback"));
const waitOn = [];
for (const page of api_classPrivateFieldGet(_pageCache, this).values()) {
waitOn.push(page._destroy());
}
api_classPrivateFieldGet(_pageCache, this).clear();
api_classPrivateFieldGet(_pagePromises, this).clear();
api_classPrivateFieldGet(_pageRefCache, this).clear();
if (this.hasOwnProperty("annotationStorage")) {
this.annotationStorage.resetModified();
}
const terminated = this.messageHandler.sendWithPromise("Terminate", null);
waitOn.push(terminated);
Promise.all(waitOn).then(() => {
this.commonObjs.clear();
this.fontLoader.clear();
api_classPrivateFieldGet(_methodPromises, this).clear();
this.filterFactory.destroy();
TextLayer.cleanup();
this._networkStream?.cancelAllRequests(new AbortException("Worker was terminated."));
this.messageHandler?.destroy();
this.messageHandler = null;
this.destroyCapability.resolve();
}, this.destroyCapability.reject);
return this.destroyCapability.promise;
}
setupMessageHandler() {
const {
messageHandler,
loadingTask
} = this;
messageHandler.on("GetReader", (data, sink) => {
assert(this._networkStream, "GetReader - no `IPDFStream` instance available.");
this._fullReader = this._networkStream.getFullReader();
this._fullReader.onProgress = evt => {
this._lastProgress = {
loaded: evt.loaded,
total: evt.total
};
};
sink.onPull = () => {
this._fullReader.read().then(function (_ref7) {
let {
value,
done
} = _ref7;
if (done) {
sink.close();
return;
}
assert(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer.");
sink.enqueue(new Uint8Array(value), 1, [value]);
}).catch(reason => {
sink.error(reason);
});
};
sink.onCancel = reason => {
this._fullReader.cancel(reason);
sink.ready.catch(readyReason => {
if (this.destroyed) {
return;
}
throw readyReason;
});
};
});
messageHandler.on("ReaderHeadersReady", async data => {
await this._fullReader.headersReady;
const {
isStreamingSupported,
isRangeSupported,
contentLength
} = this._fullReader;
if (!isStreamingSupported || !isRangeSupported) {
if (this._lastProgress) {
loadingTask.onProgress?.(this._lastProgress);
}
this._fullReader.onProgress = evt => {
loadingTask.onProgress?.({
loaded: evt.loaded,
total: evt.total
});
};
}
return {
isStreamingSupported,
isRangeSupported,
contentLength
};
});
messageHandler.on("GetRangeReader", (data, sink) => {
assert(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
if (!rangeReader) {
sink.close();
return;
}
sink.onPull = () => {
rangeReader.read().then(function (_ref8) {
let {
value,
done
} = _ref8;
if (done) {
sink.close();
return;
}
assert(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer.");
sink.enqueue(new Uint8Array(value), 1, [value]);
}).catch(reason => {
sink.error(reason);
});
};
sink.onCancel = reason => {
rangeReader.cancel(reason);
sink.ready.catch(readyReason => {
if (this.destroyed) {
return;
}
throw readyReason;
});
};
});
messageHandler.on("GetDoc", _ref9 => {
let {
pdfInfo
} = _ref9;
this._numPages = pdfInfo.numPages;
this._htmlForXfa = pdfInfo.htmlForXfa;
delete pdfInfo.htmlForXfa;
loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
});
messageHandler.on("DocException", ex => {
loadingTask._capability.reject(wrapReason(ex));
});
messageHandler.on("PasswordRequest", ex => {
api_classPrivateFieldSet(_passwordCapability, this, Promise.withResolvers());
try {
if (!loadingTask.onPassword) {
throw wrapReason(ex);
}
const updatePassword = password => {
if (password instanceof Error) {
api_classPrivateFieldGet(_passwordCapability, this).reject(password);
} else {
api_classPrivateFieldGet(_passwordCapability, this).resolve({
password
});
}
};
loadingTask.onPassword(updatePassword, ex.code);
} catch (err) {
api_classPrivateFieldGet(_passwordCapability, this).reject(err);
}
return api_classPrivateFieldGet(_passwordCapability, this).promise;
});
messageHandler.on("DataLoaded", data => {
loadingTask.onProgress?.({
loaded: data.length,
total: data.length
});
this.downloadInfoCapability.resolve(data);
});
messageHandler.on("StartRenderPage", data => {
if (this.destroyed) {
return;
}
const page = api_classPrivateFieldGet(_pageCache, this).get(data.pageIndex);
page._startRenderPage(data.transparency, data.cacheKey);
});
messageHandler.on("commonobj", _ref0 => {
let [id, type, exportedData] = _ref0;
if (this.destroyed) {
return null;
}
if (this.commonObjs.has(id)) {
return null;
}
switch (type) {
case "Font":
if ("error" in exportedData) {
const exportedError = exportedData.error;
warn(`Error during font loading: ${exportedError}`);
this.commonObjs.resolve(id, exportedError);
break;
}
const inspectFont = this._params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null;
const font = new FontFaceObject(exportedData, inspectFont);
this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", {
id
})).finally(() => {
if (!font.fontExtraProperties && font.data) {
font.data = null;
}
this.commonObjs.resolve(id, font);
});
break;
case "CopyLocalImage":
const {
imageRef
} = exportedData;
assert(imageRef, "The imageRef must be defined.");
for (const pageProxy of api_classPrivateFieldGet(_pageCache, this).values()) {
for (const [, data] of pageProxy.objs) {
if (data?.ref !== imageRef) {
continue;
}
if (!data.dataLen) {
return null;
}
this.commonObjs.resolve(id, structuredClone(data));
return data.dataLen;
}
}
break;
case "FontPath":
case "Image":
case "Pattern":
this.commonObjs.resolve(id, exportedData);
break;
default:
throw new Error(`Got unknown common object type ${type}`);
}
return null;
});
messageHandler.on("obj", _ref1 => {
let [id, pageIndex, type, imageData] = _ref1;
if (this.destroyed) {
return;
}
const pageProxy = api_classPrivateFieldGet(_pageCache, this).get(pageIndex);
if (pageProxy.objs.has(id)) {
return;
}
if (pageProxy._intentStates.size === 0) {
imageData?.bitmap?.close();
return;
}
switch (type) {
case "Image":
case "Pattern":
pageProxy.objs.resolve(id, imageData);
break;
default:
throw new Error(`Got unknown object type ${type}`);
}
});
messageHandler.on("DocProgress", data => {
if (this.destroyed) {
return;
}
loadingTask.onProgress?.({
loaded: data.loaded,
total: data.total
});
});
messageHandler.on("FetchBinaryData", async data => {
if (this.destroyed) {
throw new Error("Worker was destroyed.");
}
const factory = this[data.type];
if (!factory) {
throw new Error(`${data.type} not initialized, see the \`useWorkerFetch\` parameter.`);
}
return factory.fetch(data);
});
}
getData() {
return this.messageHandler.sendWithPromise("GetData", null);
}
saveDocument() {
let pageOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (this.annotationStorage.size <= 0) {
warn("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead.");
}
const {
map,
transfer
} = this.annotationStorage.serializable;
return this.messageHandler.sendWithPromise("SaveDocument", {
isPureXfa: !!this._htmlForXfa,
numPages: this._numPages,
annotationStorage: map,
filename: this._fullReader?.filename ?? null,
pageOrder: pageOrder
}, transfer).finally(() => {
this.annotationStorage.resetModified();
});
}
getPage(pageNumber) {
if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
return Promise.reject(new Error("Invalid page request."));
}
const pageIndex = pageNumber - 1,
cachedPromise = api_classPrivateFieldGet(_pagePromises, this).get(pageIndex);
if (cachedPromise) {
return cachedPromise;
}
const promise = this.messageHandler.sendWithPromise("GetPage", {
pageIndex
}).then(pageInfo => {
if (this.destroyed) {
throw new Error("Transport destroyed");
}
if (pageInfo.refStr) {
api_classPrivateFieldGet(_pageRefCache, this).set(pageInfo.refStr, pageNumber);
}
const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
api_classPrivateFieldGet(_pageCache, this).set(pageIndex, page);
return page;
});
api_classPrivateFieldGet(_pagePromises, this).set(pageIndex, promise);
return promise;
}
getPageIndex(ref) {
if (!isRefProxy(ref)) {
return Promise.reject(new Error("Invalid pageIndex request."));
}
return this.messageHandler.sendWithPromise("GetPageIndex", {
num: ref.num,
gen: ref.gen
});
}
getAnnotations(pageIndex, intent) {
return this.messageHandler.sendWithPromise("GetAnnotations", {
pageIndex,
intent
});
}
getFieldObjects() {
return api_assertClassBrand(_WorkerTransport_brand, this, _cacheSimpleMethod).call(this, "GetFieldObjects");
}
hasJSActions() {
return api_assertClassBrand(_WorkerTransport_brand, this, _cacheSimpleMethod).call(this, "HasJSActions");
}
getCalculationOrderIds() {
return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
}
getDestinations() {
return this.messageHandler.sendWithPromise("GetDestinations", null);
}
getDestination(id) {
if (typeof id !== "string") {
return Promise.reject(new Error("Invalid destination request."));
}
return this.messageHandler.sendWithPromise("GetDestination", {
id
});
}
getPageLabels() {
return this.messageHandler.sendWithPromise("GetPageLabels", null);
}
getPageLayout() {
return this.messageHandler.sendWithPromise("GetPageLayout", null);
}
getPageMode() {
return this.messageHandler.sendWithPromise("GetPageMode", null);
}
getViewerPreferences() {
return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
}
getOpenAction() {
return this.messageHandler.sendWithPromise("GetOpenAction", null);
}
getAttachments() {
return this.messageHandler.sendWithPromise("GetAttachments", null);
}
getDocJSActions() {
return api_assertClassBrand(_WorkerTransport_brand, this, _cacheSimpleMethod).call(this, "GetDocJSActions");
}
getPageJSActions(pageIndex) {
return this.messageHandler.sendWithPromise("GetPageJSActions", {
pageIndex
});
}
getStructTree(pageIndex) {
return this.messageHandler.sendWithPromise("GetStructTree", {
pageIndex
});
}
getOutline() {
return this.messageHandler.sendWithPromise("GetOutline", null);
}
getOptionalContentConfig(renderingIntent) {
return api_assertClassBrand(_WorkerTransport_brand, this, _cacheSimpleMethod).call(this, "GetOptionalContentConfig").then(data => new OptionalContentConfig(data, renderingIntent));
}
getPermissions() {
return this.messageHandler.sendWithPromise("GetPermissions", null);
}
getMetadata() {
const name = "GetMetadata",
cachedPromise = api_classPrivateFieldGet(_methodPromises, this).get(name);
if (cachedPromise) {
return cachedPromise;
}
const promise = this.messageHandler.sendWithPromise(name, null).then(results => ({
info: results[0],
metadata: results[1] ? new Metadata(results[1]) : null,
contentDispositionFilename: this._fullReader?.filename ?? null,
contentLength: this._fullReader?.contentLength ?? null
}));
api_classPrivateFieldGet(_methodPromises, this).set(name, promise);
return promise;
}
getMarkInfo() {
return this.messageHandler.sendWithPromise("GetMarkInfo", null);
}
async startCleanup() {
let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.destroyed) {
return;
}
await this.messageHandler.sendWithPromise("Cleanup", null);
for (const page of api_classPrivateFieldGet(_pageCache, this).values()) {
const cleanupSuccessful = page.cleanup();
if (!cleanupSuccessful) {
throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);
}
}
this.commonObjs.clear();
if (!keepLoadedFonts) {
this.fontLoader.clear();
}
api_classPrivateFieldGet(_methodPromises, this).clear();
this.filterFactory.destroy(true);
TextLayer.cleanup();
}
cachedPageNumber(ref) {
if (!isRefProxy(ref)) {
return null;
}
const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;
return api_classPrivateFieldGet(_pageRefCache, this).get(refStr) ?? null;
}
}
function _cacheSimpleMethod(name) {
let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
const cachedPromise = api_classPrivateFieldGet(_methodPromises, this).get(name);
if (cachedPromise) {
return cachedPromise;
}
const promise = this.messageHandler.sendWithPromise(name, data);
api_classPrivateFieldGet(_methodPromises, this).set(name, promise);
return promise;
}
var _internalRenderTask = /*#__PURE__*/new WeakMap();
class RenderTask {
constructor(internalRenderTask) {
api_classPrivateFieldInitSpec(this, _internalRenderTask, null);
api_defineProperty(this, "onContinue", null);
api_defineProperty(this, "onError", null);
api_classPrivateFieldSet(_internalRenderTask, this, internalRenderTask);
}
get promise() {
return api_classPrivateFieldGet(_internalRenderTask, this).capability.promise;
}
cancel() {
let extraDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
api_classPrivateFieldGet(_internalRenderTask, this).cancel(null, extraDelay);
}
get separateAnnots() {
const {
separateAnnots
} = api_classPrivateFieldGet(_internalRenderTask, this).operatorList;
if (!separateAnnots) {
return false;
}
const {
annotationCanvasMap
} = api_classPrivateFieldGet(_internalRenderTask, this);
return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0;
}
}
var _rAF = /*#__PURE__*/new WeakMap();
class InternalRenderTask {
constructor(_ref10) {
let {
callback,
params,
objs,
commonObjs,
annotationCanvasMap,
operatorList,
pageIndex,
canvasFactory,
filterFactory,
useRequestAnimationFrame = false,
pdfBug = false,
pageColors = null
} = _ref10;
api_classPrivateFieldInitSpec(this, _rAF, null);
this.callback = callback;
this.params = params;
this.objs = objs;
this.commonObjs = commonObjs;
this.annotationCanvasMap = annotationCanvasMap;
this.operatorListIdx = null;
this.operatorList = operatorList;
this._pageIndex = pageIndex;
this.canvasFactory = canvasFactory;
this.filterFactory = filterFactory;
this._pdfBug = pdfBug;
this.pageColors = pageColors;
this.running = false;
this.graphicsReadyCallback = null;
this.graphicsReady = false;
this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
this.cancelled = false;
this.capability = Promise.withResolvers();
this.task = new RenderTask(this);
this._cancelBound = this.cancel.bind(this);
this._continueBound = this._continue.bind(this);
this._scheduleNextBound = this._scheduleNext.bind(this);
this._nextBound = this._next.bind(this);
this._canvas = params.canvasContext.canvas;
}
get completed() {
return this.capability.promise.catch(function () {});
}
initializeGraphics(_ref11) {
let {
transparency = false,
optionalContentConfig
} = _ref11;
if (this.cancelled) {
return;
}
if (this._canvas) {
if (_canvasInUse._.has(this._canvas)) {
throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
}
_canvasInUse._.add(this._canvas);
}
if (this._pdfBug && globalThis.StepperManager?.enabled) {
this.stepper = globalThis.StepperManager.create(this._pageIndex);
this.stepper.init(this.operatorList);
this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
}
const {
canvasContext,
viewport,
transform,
background
} = this.params;
this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig
}, this.annotationCanvasMap, this.pageColors);
this.gfx.beginDrawing({
transform,
viewport,
transparency,
background
});
this.operatorListIdx = 0;
this.graphicsReady = true;
this.graphicsReadyCallback?.();
}
cancel() {
let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
this.running = false;
this.cancelled = true;
this.gfx?.endDrawing();
if (api_classPrivateFieldGet(_rAF, this)) {
window.cancelAnimationFrame(api_classPrivateFieldGet(_rAF, this));
api_classPrivateFieldSet(_rAF, this, null);
}
_canvasInUse._.delete(this._canvas);
error ||= new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay);
this.callback(error);
this.task.onError?.(error);
}
operatorListChanged() {
if (!this.graphicsReady) {
this.graphicsReadyCallback ||= this._continueBound;
return;
}
this.stepper?.updateOperatorList(this.operatorList);
if (this.running) {
return;
}
this._continue();
}
_continue() {
this.running = true;
if (this.cancelled) {
return;
}
if (this.task.onContinue) {
this.task.onContinue(this._scheduleNextBound);
} else {
this._scheduleNext();
}
}
_scheduleNext() {
if (this._useRequestAnimationFrame) {
api_classPrivateFieldSet(_rAF, this, window.requestAnimationFrame(() => {
api_classPrivateFieldSet(_rAF, this, null);
this._nextBound().catch(this._cancelBound);
}));
} else {
Promise.resolve().then(this._nextBound).catch(this._cancelBound);
}
}
async _next() {
if (this.cancelled) {
return;
}
this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
if (this.operatorListIdx === this.operatorList.argsArray.length) {
this.running = false;
if (this.operatorList.lastChunk) {
this.gfx.endDrawing();
_canvasInUse._.delete(this._canvas);
this.callback();
}
}
}
}
var _canvasInUse = {
_: new WeakSet()
};
const version = "5.3.754";
const build = "75bd8d739";
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.flat-map.js
var es_iterator_flat_map = __webpack_require__(531);
;// ./src/shared/scripting_utils.js
function makeColorComp(n) {
return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0");
}
function scaleAndClamp(x) {
return Math.max(0, Math.min(255, 255 * x));
}
class ColorConverters {
static CMYK_G(_ref) {
let [c, y, m, k] = _ref;
return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];
}
static G_CMYK(_ref2) {
let [g] = _ref2;
return ["CMYK", 0, 0, 0, 1 - g];
}
static G_RGB(_ref3) {
let [g] = _ref3;
return ["RGB", g, g, g];
}
static G_rgb(_ref4) {
let [g] = _ref4;
g = scaleAndClamp(g);
return [g, g, g];
}
static G_HTML(_ref5) {
let [g] = _ref5;
const G = makeColorComp(g);
return `#${G}${G}${G}`;
}
static RGB_G(_ref6) {
let [r, g, b] = _ref6;
return ["G", 0.3 * r + 0.59 * g + 0.11 * b];
}
static RGB_rgb(color) {
return color.map(scaleAndClamp);
}
static RGB_HTML(color) {
return `#${color.map(makeColorComp).join("")}`;
}
static T_HTML() {
return "#00000000";
}
static T_rgb() {
return [null];
}
static CMYK_RGB(_ref7) {
let [c, y, m, k] = _ref7;
return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];
}
static CMYK_rgb(_ref8) {
let [c, y, m, k] = _ref8;
return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))];
}
static CMYK_HTML(components) {
const rgb = this.CMYK_RGB(components).slice(1);
return this.RGB_HTML(rgb);
}
static RGB_CMYK(_ref9) {
let [r, g, b] = _ref9;
const c = 1 - r;
const m = 1 - g;
const y = 1 - b;
const k = Math.min(c, m, y);
return ["CMYK", c, m, y, k];
}
}
;// ./src/display/svg_factory.js
class BaseSVGFactory {
create(width, height) {
let skipDimensions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (width <= 0 || height <= 0) {
throw new Error("Invalid SVG dimensions");
}
const svg = this._createSVG("svg:svg");
svg.setAttribute("version", "1.1");
if (!skipDimensions) {
svg.setAttribute("width", `${width}px`);
svg.setAttribute("height", `${height}px`);
}
svg.setAttribute("preserveAspectRatio", "none");
svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
return svg;
}
createElement(type) {
if (typeof type !== "string") {
throw new Error("Invalid SVG element type");
}
return this._createSVG(type);
}
_createSVG(type) {
unreachable("Abstract method `_createSVG` called.");
}
}
class DOMSVGFactory extends BaseSVGFactory {
_createSVG(type) {
return document.createElementNS(SVG_NS, type);
}
}
;// ./src/display/xfa_layer.js
class XfaLayer {
static setupStorage(html, id, element, storage, intent) {
const angularData = window.getFormValueFromAngular(html);
if (angularData.value) {
storage.setValue(id, angularData);
}
const initialValue = storage.getValue(id, {
value: null
});
const storedData = angularData.value ? angularData : initialValue;
window.registerXFAField(html, storedData, initialValue);
html.addEventListener("updateFromAngular", value => storage.setValue(id, {
value: value.detail
}));
switch (element.name) {
case "textarea":
if (storedData.value !== null) {
html.textContent = storedData.value;
}
if (intent === "print") {
break;
}
html.addEventListener("input", event => {
window.updateAngularFormValue(html, {
value: event.target.value
});
storage.setValue(id, {
value: event.target.value
});
});
break;
case "input":
if (element.attributes.type === "radio" || element.attributes.type === "checkbox") {
if (storedData.value === element.attributes.xfaOn) {
html.setAttribute("checked", true);
} else {
html.removeAttribute("checked");
}
if (intent === "print") {
break;
}
html.addEventListener("change", event => {
window.updateAngularFormValue(html, {
value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff")
});
storage.setValue(id, {
value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff")
});
});
} else {
if (storedData.value !== null) {
html.setAttribute("value", storedData.value);
}
if (intent === "print") {
break;
}
html.addEventListener("input", event => {
window.updateAngularFormValue(html, {
value: event.target.value
});
storage.setValue(id, {
value: event.target.value
});
});
}
break;
case "select":
if (storedData.value !== null) {
html.setAttribute("value", storedData.value);
for (const option of element.children) {
if (option.attributes.value === storedData.value) {
option.attributes.selected = true;
} else if (option.attributes.hasOwnProperty("selected")) {
delete option.attributes.selected;
}
}
}
html.addEventListener("input", event => {
const options = event.target.options;
const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value;
window.updateAngularFormValue(html, {
value
});
storage.setValue(id, {
value
});
});
break;
}
}
static setAttributes(_ref) {
let {
html,
element,
storage = null,
intent,
linkService
} = _ref;
const {
attributes
} = element;
const isHTMLAnchorElement = html instanceof HTMLAnchorElement;
if (attributes.type === "radio") {
attributes.name = `${attributes.name}-${intent}`;
}
for (const [key, value] of Object.entries(attributes)) {
if (value === null || value === undefined) {
continue;
}
switch (key) {
case "class":
if (value.length) {
html.setAttribute(key, value.join(" "));
}
break;
case "dataId":
break;
case "id":
html.setAttribute("data-element-id", value);
break;
case "style":
Object.assign(html.style, value);
break;
case "textContent":
html.textContent = value;
break;
default:
if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") {
html.setAttribute(key, value);
}
}
}
if (isHTMLAnchorElement) {
linkService.addLinkAttributes(html, attributes.href, attributes.newWindow);
}
if (storage && attributes.dataId) {
this.setupStorage(html, attributes.dataId, element, storage);
}
}
static render(parameters) {
const storage = parameters.annotationStorage;
const linkService = parameters.linkService;
const root = parameters.xfaHtml;
const intent = parameters.intent || "display";
const rootHtml = document.createElement(root.name);
if (root.attributes) {
this.setAttributes({
html: rootHtml,
element: root,
intent,
linkService
});
}
const isNotForRichText = intent !== "richText";
const rootDiv = parameters.div;
rootDiv.append(rootHtml);
if (parameters.viewport) {
const transform = `matrix(${parameters.viewport.transform.join(",")})`;
rootDiv.style.transform = transform;
}
if (isNotForRichText) {
rootDiv.setAttribute("class", "xfaLayer xfaFont");
}
const textDivs = [];
if (root.children.length === 0) {
if (root.value) {
const node = document.createTextNode(root.value);
rootHtml.append(node);
if (isNotForRichText && XfaText.shouldBuildText(root.name)) {
textDivs.push(node);
}
}
return {
textDivs
};
}
const stack = [[root, -1, rootHtml]];
while (stack.length > 0) {
const [parent, i, html] = stack.at(-1);
if (i + 1 === parent.children.length) {
stack.pop();
continue;
}
const child = parent.children[++stack.at(-1)[1]];
if (child === null) {
continue;
}
const {
name
} = child;
if (name === "#text") {
const node = document.createTextNode(child.value);
textDivs.push(node);
html.append(node);
continue;
}
const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name);
html.append(childHtml);
if (child.attributes) {
this.setAttributes({
html: childHtml,
element: child,
storage,
intent,
linkService
});
}
if (child.children?.length > 0) {
stack.push([child, -1, childHtml]);
} else if (child.value) {
const node = document.createTextNode(child.value);
if (isNotForRichText && XfaText.shouldBuildText(name)) {
textDivs.push(node);
}
childHtml.append(node);
}
}
for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) {
el.setAttribute("readOnly", true);
}
return {
textDivs
};
}
static update(parameters) {
const transform = `matrix(${parameters.viewport.transform.join(",")})`;
parameters.div.style.transform = transform;
parameters.div.hidden = false;
}
}
;// ./src/display/annotation_layer.js
function _toSetter(t, e, n) { e || (e = []); var r = e.length++; return Object.defineProperty({}, "_", { set: function (o) { e[r] = o, t.apply(n, e); } }); }
function annotation_layer_classPrivateGetter(s, r, a) { return a(annotation_layer_assertClassBrand(s, r)); }
function annotation_layer_classPrivateMethodInitSpec(e, a) { annotation_layer_checkPrivateRedeclaration(e, a), a.add(e); }
function annotation_layer_classPrivateFieldInitSpec(e, t, a) { annotation_layer_checkPrivateRedeclaration(e, t), t.set(e, a); }
function annotation_layer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function annotation_layer_classPrivateFieldSet(s, a, r) { return s.set(annotation_layer_assertClassBrand(s, a), r), r; }
function annotation_layer_classPrivateFieldGet(s, a) { return s.get(annotation_layer_assertClassBrand(s, a)); }
function annotation_layer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DEFAULT_TAB_INDEX = 1000;
const annotation_layer_DEFAULT_FONT_SIZE = 9;
const GetElementsByNameSet = new WeakSet();
class AnnotationElementFactory {
static create(parameters) {
const subtype = parameters.data.annotationType;
switch (subtype) {
case AnnotationType.LINK:
return new LinkAnnotationElement(parameters);
case AnnotationType.TEXT:
return new TextAnnotationElement(parameters);
case AnnotationType.WIDGET:
const fieldType = parameters.data.fieldType;
switch (fieldType) {
case "Tx":
return new TextWidgetAnnotationElement(parameters);
case "Btn":
if (parameters.data.radioButton) {
return new RadioButtonWidgetAnnotationElement(parameters);
} else if (parameters.data.checkBox) {
return new CheckboxWidgetAnnotationElement(parameters);
}
return new PushButtonWidgetAnnotationElement(parameters);
case "Ch":
return new ChoiceWidgetAnnotationElement(parameters);
case "Sig":
return new SignatureWidgetAnnotationElement(parameters);
}
return new WidgetAnnotationElement(parameters);
case AnnotationType.POPUP:
return new PopupAnnotationElement(parameters);
case AnnotationType.FREETEXT:
return new FreeTextAnnotationElement(parameters);
case AnnotationType.LINE:
return new LineAnnotationElement(parameters);
case AnnotationType.SQUARE:
return new SquareAnnotationElement(parameters);
case AnnotationType.CIRCLE:
return new CircleAnnotationElement(parameters);
case AnnotationType.POLYLINE:
return new PolylineAnnotationElement(parameters);
case AnnotationType.CARET:
return new CaretAnnotationElement(parameters);
case AnnotationType.INK:
return new InkAnnotationElement(parameters);
case AnnotationType.POLYGON:
return new PolygonAnnotationElement(parameters);
case AnnotationType.HIGHLIGHT:
return new HighlightAnnotationElement(parameters);
case AnnotationType.UNDERLINE:
return new UnderlineAnnotationElement(parameters);
case AnnotationType.SQUIGGLY:
return new SquigglyAnnotationElement(parameters);
case AnnotationType.STRIKEOUT:
return new StrikeOutAnnotationElement(parameters);
case AnnotationType.STAMP:
return new StampAnnotationElement(parameters);
case AnnotationType.FILEATTACHMENT:
return new FileAttachmentAnnotationElement(parameters);
default:
return new AnnotationElement(parameters);
}
}
}
var _updates = /*#__PURE__*/new WeakMap();
var _hasBorder = /*#__PURE__*/new WeakMap();
var _popupElement = /*#__PURE__*/new WeakMap();
var _AnnotationElement_brand = /*#__PURE__*/new WeakSet();
class AnnotationElement {
constructor(parameters) {
let {
isRenderable = false,
ignoreBorder = false,
createQuadrilaterals = false
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
annotation_layer_classPrivateMethodInitSpec(this, _AnnotationElement_brand);
annotation_layer_classPrivateFieldInitSpec(this, _updates, null);
annotation_layer_classPrivateFieldInitSpec(this, _hasBorder, false);
annotation_layer_classPrivateFieldInitSpec(this, _popupElement, null);
this.isRenderable = isRenderable;
this.data = parameters.data;
this.layer = parameters.layer;
this.linkService = parameters.linkService;
this.downloadManager = parameters.downloadManager;
this.imageResourcesPath = parameters.imageResourcesPath;
this.renderForms = parameters.renderForms;
this.svgFactory = parameters.svgFactory;
this.annotationStorage = parameters.annotationStorage;
this.enableScripting = parameters.enableScripting;
this.hasJSActions = parameters.hasJSActions;
this._fieldObjects = parameters.fieldObjects;
this.parent = parameters.parent;
if (isRenderable) {
this.container = this._createContainer(ignoreBorder);
}
if (createQuadrilaterals) {
this._createQuadrilaterals();
}
}
static _hasPopupData(_ref) {
let {
titleObj,
contentsObj,
richText
} = _ref;
return !!(titleObj?.str || contentsObj?.str || richText?.str);
}
get _isEditable() {
return this.data.isEditable;
}
get hasPopupData() {
return AnnotationElement._hasPopupData(this.data);
}
updateEdited(params) {
if (!this.container) {
return;
}
annotation_layer_classPrivateFieldGet(_updates, this) || annotation_layer_classPrivateFieldSet(_updates, this, {
rect: this.data.rect.slice(0)
});
const {
rect
} = params;
if (rect) {
annotation_layer_assertClassBrand(_AnnotationElement_brand, this, _setRectEdited).call(this, rect);
}
annotation_layer_classPrivateFieldGet(_popupElement, this)?.popup.updateEdited(params);
}
resetEdited() {
if (!annotation_layer_classPrivateFieldGet(_updates, this)) {
return;
}
annotation_layer_assertClassBrand(_AnnotationElement_brand, this, _setRectEdited).call(this, annotation_layer_classPrivateFieldGet(_updates, this).rect);
annotation_layer_classPrivateFieldGet(_popupElement, this)?.popup.resetEdited();
annotation_layer_classPrivateFieldSet(_updates, this, null);
}
_createContainer(ignoreBorder) {
const {
data,
parent: {
page,
viewport
}
} = this;
const container = document.createElement("section");
container.setAttribute("data-annotation-id", data.id);
if (!(this instanceof WidgetAnnotationElement)) {
container.tabIndex = DEFAULT_TAB_INDEX;
}
const {
style
} = container;
style.zIndex = this.parent.zIndex++;
if (data.alternativeText) {
container.title = data.alternativeText;
}
if (data.noRotate) {
container.classList.add("norotate");
}
if (!data.rect || this instanceof PopupAnnotationElement) {
const {
rotation
} = data;
if (!data.hasOwnCanvas && rotation !== 0) {
this.setRotation(rotation, container);
}
return container;
}
const {
width,
height
} = this;
if (!ignoreBorder && data.borderStyle.width > 0) {
style.borderWidth = `${data.borderStyle.width}px`;
const horizontalRadius = data.borderStyle.horizontalCornerRadius;
const verticalRadius = data.borderStyle.verticalCornerRadius;
if (horizontalRadius > 0 || verticalRadius > 0) {
const radius = `calc(${horizontalRadius}px * var(--total-scale-factor)) / calc(${verticalRadius}px * var(--total-scale-factor))`;
style.borderRadius = radius;
} else if (this instanceof RadioButtonWidgetAnnotationElement) {
const radius = `calc(${width}px * var(--total-scale-factor)) / calc(${height}px * var(--total-scale-factor))`;
style.borderRadius = radius;
}
switch (data.borderStyle.style) {
case AnnotationBorderStyleType.SOLID:
style.borderStyle = "solid";
break;
case AnnotationBorderStyleType.DASHED:
style.borderStyle = "dashed";
break;
case AnnotationBorderStyleType.BEVELED:
warn("Unimplemented border style: beveled");
break;
case AnnotationBorderStyleType.INSET:
warn("Unimplemented border style: inset");
break;
case AnnotationBorderStyleType.UNDERLINE:
style.borderBottomStyle = "solid";
break;
default:
break;
}
const borderColor = data.borderColor || null;
if (borderColor) {
annotation_layer_classPrivateFieldSet(_hasBorder, this, true);
style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0);
} else {
style.borderWidth = 0;
}
}
const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
const {
pageWidth,
pageHeight,
pageX,
pageY
} = viewport.rawDims;
style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;
style.top = `${100 * (rect[1] - pageY) / pageHeight}%`;
const {
rotation
} = data;
if (data.hasOwnCanvas || rotation === 0) {
style.width = `${100 * width / pageWidth}%`;
style.height = `${100 * height / pageHeight}%`;
} else {
this.setRotation(rotation, container);
}
return container;
}
setRotation(angle) {
let container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.container;
if (!this.data.rect) {
return;
}
const {
pageWidth,
pageHeight
} = this.parent.viewport.rawDims;
let {
width,
height
} = this;
if (angle % 180 !== 0) {
[width, height] = [height, width];
}
container.style.width = `${100 * width / pageWidth}%`;
container.style.height = `${100 * height / pageHeight}%`;
container.setAttribute("data-main-rotation", (360 - angle) % 360);
}
get _commonActions() {
const setColor = (jsName, styleName, event) => {
const color = event.detail[jsName];
const colorType = color[0];
const colorArray = color.slice(1);
event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray);
this.annotationStorage.setValue(this.data.id, {
[styleName]: ColorConverters[`${colorType}_rgb`](colorArray)
});
};
return shadow(this, "_commonActions", {
display: event => {
const {
display
} = event.detail;
const hidden = display % 2 === 1;
this.container.style.visibility = hidden ? "hidden" : "visible";
this.annotationStorage.setValue(this.data.id, {
noView: hidden,
noPrint: display === 1 || display === 2
});
},
print: event => {
this.annotationStorage.setValue(this.data.id, {
noPrint: !event.detail.print
});
},
hidden: event => {
const {
hidden
} = event.detail;
this.container.style.visibility = hidden ? "hidden" : "visible";
this.annotationStorage.setValue(this.data.id, {
noPrint: hidden,
noView: hidden
});
},
focus: event => {
setTimeout(() => event.target.focus({
preventScroll: false
}), 0);
},
userName: event => {
event.target.title = event.detail.userName;
},
readonly: event => {
event.target.disabled = event.detail.readonly;
},
required: event => {
this._setRequired(event.target, event.detail.required);
},
bgColor: event => {
setColor("bgColor", "backgroundColor", event);
},
fillColor: event => {
setColor("fillColor", "backgroundColor", event);
},
fgColor: event => {
setColor("fgColor", "color", event);
},
textColor: event => {
setColor("textColor", "color", event);
},
borderColor: event => {
setColor("borderColor", "borderColor", event);
},
strokeColor: event => {
setColor("strokeColor", "borderColor", event);
},
rotation: event => {
const angle = event.detail.rotation;
this.setRotation(angle);
this.annotationStorage.setValue(this.data.id, {
rotation: angle
});
}
});
}
_dispatchEventFromSandbox(actions, jsEvent) {
const commonActions = this._commonActions;
for (const name of Object.keys(jsEvent.detail)) {
const action = actions[name] || commonActions[name];
action?.(jsEvent);
}
}
_setDefaultPropertiesFromJS(element) {
if (!this.enableScripting) {
return;
}
const storedData = this.annotationStorage.getRawValue(this.data.id);
if (!storedData) {
return;
}
const commonActions = this._commonActions;
for (const [actionName, detail] of Object.entries(storedData)) {
const action = commonActions[actionName];
if (action) {
const eventProxy = {
detail: {
[actionName]: detail
},
target: element
};
action(eventProxy);
delete storedData[actionName];
}
}
}
_createQuadrilaterals() {
if (!this.container) {
return;
}
const {
quadPoints
} = this.data;
if (!quadPoints) {
return;
}
const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map(x => Math.fround(x));
if (quadPoints.length === 8) {
const [trX, trY, blX, blY] = quadPoints.subarray(2, 6);
if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) {
return;
}
}
const {
style
} = this.container;
let svgBuffer;
if (annotation_layer_classPrivateFieldGet(_hasBorder, this)) {
const {
borderColor,
borderWidth
} = style;
style.borderWidth = 0;
svgBuffer = ["url('data:image/svg+xml;utf8,", `<svg xmlns="http://www.w3.org/2000/svg"`, ` preserveAspectRatio="none" viewBox="0 0 1 1">`, `<g fill="transparent" stroke="${borderColor}" stroke-width="${borderWidth}">`];
this.container.classList.add("hasBorder");
}
const width = rectTrX - rectBlX;
const height = rectTrY - rectBlY;
const {
svgFactory
} = this;
const svg = svgFactory.createElement("svg");
svg.classList.add("quadrilateralsContainer");
svg.setAttribute("width", 0);
svg.setAttribute("height", 0);
const defs = svgFactory.createElement("defs");
svg.append(defs);
const clipPath = svgFactory.createElement("clipPath");
const id = `clippath_${this.data.id}`;
clipPath.setAttribute("id", id);
clipPath.setAttribute("clipPathUnits", "objectBoundingBox");
defs.append(clipPath);
for (let i = 2, ii = quadPoints.length; i < ii; i += 8) {
const trX = quadPoints[i];
const trY = quadPoints[i + 1];
const blX = quadPoints[i + 2];
const blY = quadPoints[i + 3];
const rect = svgFactory.createElement("rect");
const x = (blX - rectBlX) / width;
const y = (rectTrY - trY) / height;
const rectWidth = (trX - blX) / width;
const rectHeight = (trY - blY) / height;
rect.setAttribute("x", x);
rect.setAttribute("y", y);
rect.setAttribute("width", rectWidth);
rect.setAttribute("height", rectHeight);
clipPath.append(rect);
svgBuffer?.push(`<rect vector-effect="non-scaling-stroke" x="${x}" y="${y}" width="${rectWidth}" height="${rectHeight}"/>`);
}
if (annotation_layer_classPrivateFieldGet(_hasBorder, this)) {
svgBuffer.push(`</g></svg>')`);
style.backgroundImage = svgBuffer.join("");
}
this.container.append(svg);
this.container.style.clipPath = `url(#${id})`;
}
_createPopup() {
const {
data
} = this;
const popup = annotation_layer_classPrivateFieldSet(_popupElement, this, new PopupAnnotationElement({
data: {
color: data.color,
titleObj: data.titleObj,
modificationDate: data.modificationDate,
contentsObj: data.contentsObj,
richText: data.richText,
parentRect: data.rect,
borderStyle: 0,
id: `popup_${data.id}`,
rotation: data.rotation
},
parent: this.parent,
elements: [this]
}));
this.parent.div.append(popup.render());
}
render() {
unreachable("Abstract method `AnnotationElement.render` called");
}
_getElementsByName(name) {
let skipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
const fields = [];
if (this._fieldObjects) {
const fieldObj = this._fieldObjects[name];
if (fieldObj) {
for (const {
page,
id,
exportValues
} of fieldObj) {
if (page === -1) {
continue;
}
if (id === skipId) {
continue;
}
const exportValue = typeof exportValues === "string" ? exportValues : null;
const domElement = document.querySelector(`[data-element-id="${id}"]`);
if (domElement && !GetElementsByNameSet.has(domElement)) {
warn(`_getElementsByName - element not allowed: ${id}`);
continue;
}
fields.push({
id,
exportValue,
domElement
});
}
}
return fields;
}
for (const domElement of document.getElementsByName(name)) {
const {
exportValue
} = domElement;
const id = domElement.getAttribute("data-element-id");
if (id === skipId) {
continue;
}
if (!GetElementsByNameSet.has(domElement)) {
continue;
}
fields.push({
id,
exportValue,
domElement
});
}
return fields;
}
show() {
if (this.container) {
this.container.hidden = false;
}
this.popup?.maybeShow();
}
hide() {
if (this.container) {
this.container.hidden = true;
}
this.popup?.forceHide();
}
getElementsToTriggerPopup() {
return this.container;
}
addHighlightArea() {
const triggers = this.getElementsToTriggerPopup();
if (Array.isArray(triggers)) {
for (const element of triggers) {
element.classList.add("highlightArea");
}
} else {
triggers.classList.add("highlightArea");
}
}
_editOnDoubleClick() {
if (!this._isEditable) {
return;
}
const {
annotationEditorType: mode,
data: {
id: editId
}
} = this;
this.container.addEventListener("dblclick", () => {
this.linkService.eventBus?.dispatch("switchannotationeditormode", {
source: this,
mode,
editId
});
});
}
get width() {
return this.data.rect[2] - this.data.rect[0];
}
get height() {
return this.data.rect[3] - this.data.rect[1];
}
}
function _setRectEdited(rect) {
const {
container: {
style
},
data: {
rect: currentRect,
rotation
},
parent: {
viewport: {
rawDims: {
pageWidth,
pageHeight,
pageX,
pageY
}
}
}
} = this;
currentRect?.splice(0, 4, ...rect);
style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;
style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`;
if (rotation === 0) {
style.width = `${100 * (rect[2] - rect[0]) / pageWidth}%`;
style.height = `${100 * (rect[3] - rect[1]) / pageHeight}%`;
} else {
this.setRotation(rotation);
}
}
var _LinkAnnotationElement_brand = /*#__PURE__*/new WeakSet();
class LinkAnnotationElement extends AnnotationElement {
constructor(parameters) {
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
super(parameters, {
isRenderable: true,
ignoreBorder: !!options?.ignoreBorder,
createQuadrilaterals: true
});
annotation_layer_classPrivateMethodInitSpec(this, _LinkAnnotationElement_brand);
this.isTooltipOnly = parameters.data.isTooltipOnly;
}
render() {
const {
data,
linkService
} = this;
const link = document.createElement("a");
link.setAttribute("data-element-id", data.id);
let isBound = false;
if (data.url) {
linkService.addLinkAttributes(link, data.url, data.newWindow);
isBound = true;
} else if (data.action) {
this._bindNamedAction(link, data.action);
isBound = true;
} else if (data.attachment) {
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _bindAttachment).call(this, link, data.attachment, data.attachmentDest);
isBound = true;
} else if (data.setOCGState) {
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _bindSetOCGState).call(this, link, data.setOCGState);
isBound = true;
} else if (data.dest) {
this._bindLink(link, data.dest);
isBound = true;
} else {
if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) {
this._bindJSAction(link, data);
isBound = true;
}
if (data.resetForm) {
this._bindResetFormAction(link, data.resetForm);
isBound = true;
} else if (this.isTooltipOnly && !isBound) {
this._bindLink(link, "");
isBound = true;
}
}
this.container.classList.add("linkAnnotation");
if (isBound) {
this.container.append(link);
}
return this.container;
}
_bindLink(link, destination) {
link.href = this.linkService.getDestinationHash(destination);
link.onclick = () => {
if (destination) {
this.linkService.goToDestination(destination);
}
return false;
};
if (destination || destination === "") {
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _setInternalLink).call(this);
}
}
_bindNamedAction(link, action) {
link.href = this.linkService.getAnchorUrl("");
link.onclick = () => {
this.linkService.executeNamedAction(action);
return false;
};
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _setInternalLink).call(this);
}
_bindJSAction(link, data) {
link.href = this.linkService.getAnchorUrl("");
const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
for (const name of Object.keys(data.actions)) {
const jsName = map.get(name);
if (!jsName) {
continue;
}
link[jsName] = () => {
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: data.id,
name
}
});
return false;
};
}
if (!link.onclick) {
link.onclick = () => false;
}
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _setInternalLink).call(this);
}
_bindResetFormAction(link, resetForm) {
const otherClickAction = link.onclick;
if (!otherClickAction) {
link.href = this.linkService.getAnchorUrl("");
}
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _setInternalLink).call(this);
if (!this._fieldObjects) {
warn(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided.");
if (!otherClickAction) {
link.onclick = () => false;
}
return;
}
link.onclick = () => {
otherClickAction?.();
const {
fields: resetFormFields,
refs: resetFormRefs,
include
} = resetForm;
const allFields = [];
if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {
const fieldIds = new Set(resetFormRefs);
for (const fieldName of resetFormFields) {
const fields = this._fieldObjects[fieldName] || [];
for (const {
id
} of fields) {
fieldIds.add(id);
}
}
for (const fields of Object.values(this._fieldObjects)) {
for (const field of fields) {
if (fieldIds.has(field.id) === include) {
allFields.push(field);
}
}
}
} else {
for (const fields of Object.values(this._fieldObjects)) {
allFields.push(...fields);
}
}
const storage = this.annotationStorage;
const allIds = [];
for (const field of allFields) {
const {
id
} = field;
allIds.push(id);
switch (field.type) {
case "text":
{
const value = field.defaultValue || "";
storage.setValue(id, {
value
});
window.updateAngularFormValue(id, {
value
});
break;
}
case "checkbox":
case "radiobutton":
{
const value = field.defaultValue === field.exportValues;
storage.setValue(id, {
value
});
window.updateAngularFormValue(id, {
value
});
break;
}
case "combobox":
case "listbox":
{
const value = field.defaultValue || "";
storage.setValue(id, {
value
});
window.updateAngularFormValue(id, {
value
});
break;
}
default:
continue;
}
const domElement = document.querySelector(`[data-element-id="${id}"]`);
if (!domElement) {
continue;
} else if (!GetElementsByNameSet.has(domElement)) {
warn(`_bindResetFormAction - element not allowed: ${id}`);
continue;
}
domElement.dispatchEvent(new Event("resetform"));
}
if (this.enableScripting) {
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: "app",
ids: allIds,
name: "ResetForm"
}
});
}
return false;
};
}
}
function _setInternalLink() {
this.container.setAttribute("data-internal-link", "");
}
function _bindAttachment(link, attachment) {
let dest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
link.href = this.linkService.getAnchorUrl("");
if (attachment.description) {
link.title = attachment.description;
}
link.onclick = () => {
this.downloadManager?.openOrDownloadData(attachment.content, attachment.filename, dest);
return false;
};
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _setInternalLink).call(this);
}
function _bindSetOCGState(link, action) {
link.href = this.linkService.getAnchorUrl("");
link.onclick = () => {
this.linkService.executeSetOCGState(action);
return false;
};
annotation_layer_assertClassBrand(_LinkAnnotationElement_brand, this, _setInternalLink).call(this);
}
class TextAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true
});
}
render() {
this.container.classList.add("textAnnotation");
const image = document.createElement("img");
image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type");
image.setAttribute("data-l10n-args", JSON.stringify({
type: this.data.name
}));
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this.container.append(image);
return this.container;
}
}
class WidgetAnnotationElement extends AnnotationElement {
render() {
return this.container;
}
showElementAndHideCanvas(element) {
if (this.data.hasOwnCanvas) {
if (element.previousSibling?.nodeName === "CANVAS") {
element.previousSibling.hidden = true;
}
element.hidden = false;
}
}
_getKeyModifier(event) {
return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;
}
_setEventListener(element, elementData, baseName, eventName, valueGetter) {
if (baseName.includes("mouse")) {
element.addEventListener(baseName, event => {
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: this.data.id,
name: eventName,
value: valueGetter(event),
shift: event.shiftKey,
modifier: this._getKeyModifier(event)
}
});
});
} else {
element.addEventListener(baseName, event => {
if (baseName === "blur") {
if (!elementData.focused) {
return;
}
elementData.focused = false;
} else if (baseName === "focus") {
if (elementData.focused) {
return;
}
elementData.focused = true;
}
if (!valueGetter) {
return;
}
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: this.data.id,
name: eventName,
value: valueGetter(event)
}
});
});
}
}
_setEventListeners(element, elementData, names, getter) {
for (const [baseName, eventName] of names) {
if (eventName === "Action" || this.data.actions?.[eventName]) {
if (eventName === "Focus" || eventName === "Blur") {
elementData ||= {
focused: false
};
}
this._setEventListener(element, elementData, baseName, eventName, getter);
if (eventName === "Focus" && !this.data.actions?.Blur) {
this._setEventListener(element, elementData, "blur", "Blur", null);
} else if (eventName === "Blur" && !this.data.actions?.Focus) {
this._setEventListener(element, elementData, "focus", "Focus", null);
}
}
}
}
_setBackgroundColor(element) {
const color = this.data.backgroundColor || null;
element.style.backgroundColor = color === null ? "transparent" : Util.makeHexColor(color[0], color[1], color[2]);
}
_setTextStyle(element) {
const TEXT_ALIGNMENT = ["left", "center", "right"];
const {
fontColor
} = this.data.defaultAppearanceData;
const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE;
const style = element.style;
let computedFontSize;
const BORDER_SIZE = 2;
const roundToOneDecimal = x => Math.round(10 * x) / 10;
if (this.data.multiLine) {
const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);
const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1;
const lineHeight = height / numberOfLines;
computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR));
} else {
const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE);
computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR));
}
style.fontSize = `calc(${computedFontSize}px * var(--total-scale-factor))`;
style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);
if (this.data.textAlignment !== null) {
style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
}
}
_setRequired(element, isRequired) {
if (isRequired) {
element.setAttribute("required", true);
} else {
element.removeAttribute("required");
}
element.setAttribute("aria-required", isRequired);
}
}
class TextWidgetAnnotationElement extends WidgetAnnotationElement {
constructor(parameters) {
const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
super(parameters, {
isRenderable
});
}
setPropertyOnSiblings(base, key, value, keyInStorage) {
const storage = this.annotationStorage;
for (const element of this._getElementsByName(base.name, base.id)) {
if (element.domElement) {
element.domElement[key] = value;
}
storage.setValue(element.id, {
[keyInStorage]: value
});
}
}
render() {
const storage = this.annotationStorage;
const id = this.data.id;
this.container.classList.add("textWidgetAnnotation");
let element = null;
if (this.renderForms) {
const angularData = window.getFormValueFromAngular(this.data.fieldName);
const formData = storage.getValue(id, {
value: this.data.fieldValue
});
const storedData = angularData.value ? angularData : formData;
if (angularData !== formData) {
storage.setValue(id, {
value: angularData.value
});
storedData.formattedValue = angularData.value;
}
let textContent = storedData.value || "";
const maxLen = storage.getValue(id, {
charLimit: this.data.maxLen
}).charLimit;
if (maxLen && textContent.length > maxLen) {
textContent = textContent.slice(0, maxLen);
}
let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null;
if (fieldFormattedValues && this.data.comb) {
fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, "");
}
const elementData = {
userValue: textContent,
formattedValue: fieldFormattedValues,
lastCommittedValue: null,
commitKey: 1,
focused: false
};
if (this.data.multiLine) {
element = document.createElement("textarea");
element.textContent = fieldFormattedValues ?? textContent;
if (this.data.doNotScroll) {
element.style.overflowY = "hidden";
}
} else {
element = document.createElement("input");
element.type = this.data.password ? "password" : "text";
element.setAttribute("value", fieldFormattedValues ?? textContent);
if (this.data.doNotScroll) {
element.style.overflowX = "hidden";
}
}
if (this.data.hasOwnCanvas) {
element.hidden = true;
}
GetElementsByNameSet.add(element);
element.setAttribute("data-element-id", id);
element.disabled = this.data.readOnly;
element.name = this.data.fieldName;
element.tabIndex = DEFAULT_TAB_INDEX;
this._setRequired(element, this.data.required);
if (maxLen) {
element.maxLength = maxLen;
}
element.addEventListener("input", event => {
storage.setValue(id, {
value: event.target.value
});
window.updateAngularFormValue(id, {
value: event.target.value
});
this.setPropertyOnSiblings(element, "value", event.target.value, "value");
elementData.formattedValue = null;
});
element.addEventListener("resetform", event => {
const defaultValue = this.data.defaultFieldValue ?? "";
element.value = elementData.userValue = defaultValue;
elementData.formattedValue = null;
});
let blurListener = event => {
const {
formattedValue
} = elementData;
if (formattedValue !== null && formattedValue !== undefined) {
event.target.value = formattedValue;
}
event.target.scrollLeft = 0;
};
window.registerAcroformField(id, element, storedData.value, undefined, this.data.fieldValue);
element.addEventListener("updateFromAngular", newvalue => {
elementData.formattedValue = null;
storage.setValue(id, {
value: newvalue.detail
});
});
if (this.enableScripting && this.hasJSActions) {
element.addEventListener("focus", event => {
if (elementData.focused) {
return;
}
const {
target
} = event;
if (elementData.userValue) {
target.value = elementData.userValue;
}
elementData.lastCommittedValue = target.value;
elementData.commitKey = 1;
if (!this.data.actions?.Focus) {
elementData.focused = true;
}
});
element.addEventListener("updatefromsandbox", jsEvent => {
this.showElementAndHideCanvas(jsEvent.target);
const actions = {
value(event) {
elementData.userValue = event.detail.value ?? "";
storage.setValue(id, {
value: elementData.userValue.toString()
});
window.updateAngularFormValue(id, {
value: elementData.userValue.toString()
});
event.target.value = elementData.userValue;
},
formattedValue(event) {
const {
formattedValue
} = event.detail;
elementData.formattedValue = formattedValue;
if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) {
event.target.value = formattedValue;
}
storage.setValue(id, {
formattedValue
});
window.updateAngularFormValue(id, {
formattedValue
});
},
selRange(event) {
event.target.setSelectionRange(...event.detail.selRange);
},
charLimit: event => {
const {
charLimit
} = event.detail;
const {
target
} = event;
if (charLimit === 0) {
target.removeAttribute("maxLength");
return;
}
target.setAttribute("maxLength", charLimit);
let value = elementData.userValue;
if (!value || value.length <= charLimit) {
return;
}
value = value.slice(0, charLimit);
target.value = elementData.userValue = value;
storage.setValue(id, {
value
});
window.updateAngularFormValue(id, {
value
});
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id,
name: "Keystroke",
value,
willCommit: true,
commitKey: 1,
selStart: target.selectionStart,
selEnd: target.selectionEnd
}
});
}
};
this._dispatchEventFromSandbox(actions, jsEvent);
});
element.addEventListener("keydown", event => {
elementData.commitKey = 1;
let commitKey = -1;
if (event.key === "Escape") {
commitKey = 0;
} else if (event.key === "Enter" && !this.data.multiLine) {
commitKey = 2;
} else if (event.key === "Tab") {
elementData.commitKey = 3;
}
if (commitKey === -1) {
return;
}
const {
value
} = event.target;
if (elementData.lastCommittedValue === value) {
return;
}
elementData.lastCommittedValue = value;
elementData.userValue = value;
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id,
name: "Keystroke",
value,
willCommit: true,
commitKey,
selStart: event.target.selectionStart,
selEnd: event.target.selectionEnd
}
});
});
const _blurListener = blurListener;
blurListener = null;
element.addEventListener("blur", event => {
if (!elementData.focused) {
return;
}
if (!this.data.actions?.Blur) {
elementData.focused = false;
}
const {
value
} = event.target;
elementData.userValue = value;
if (elementData.lastCommittedValue !== value) {
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id,
name: "Keystroke",
value,
willCommit: true,
commitKey: elementData.commitKey,
selStart: event.target.selectionStart,
selEnd: event.target.selectionEnd
}
});
}
_blurListener(event);
});
if (this.data.actions?.Keystroke) {
element.addEventListener("beforeinput", event => {
elementData.lastCommittedValue = null;
const {
data,
target
} = event;
const {
value,
selectionStart,
selectionEnd
} = target;
let selStart = selectionStart,
selEnd = selectionEnd;
switch (event.inputType) {
case "deleteWordBackward":
{
const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/);
if (match) {
selStart -= match[0].length;
}
break;
}
case "deleteWordForward":
{
const match = value.substring(selectionStart).match(/^[^\w]*\w*/);
if (match) {
selEnd += match[0].length;
}
break;
}
case "deleteContentBackward":
if (selectionStart === selectionEnd) {
selStart -= 1;
}
break;
case "deleteContentForward":
if (selectionStart === selectionEnd) {
selEnd += 1;
}
break;
}
event.preventDefault();
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id,
name: "Keystroke",
value,
change: data || "",
willCommit: false,
selStart,
selEnd
}
});
});
}
this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value);
}
if (blurListener) {
element.addEventListener("blur", blurListener);
}
if (this.data.comb) {
const fieldWidth = this.data.rect[2] - this.data.rect[0];
const combWidth = fieldWidth / maxLen;
element.classList.add("comb");
element.style.letterSpacing = `calc(${combWidth}px * var(--total-scale-factor) - 1ch)`;
}
} else {
element = document.createElement("div");
element.textContent = this.data.fieldValue;
element.style.verticalAlign = "middle";
element.style.display = "table-cell";
if (this.data.hasOwnCanvas) {
element.hidden = true;
}
}
this._setTextStyle(element);
this._setBackgroundColor(element);
this._setDefaultPropertiesFromJS(element);
this.container.append(element);
return this.container;
}
}
class SignatureWidgetAnnotationElement extends WidgetAnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: !!parameters.data.hasOwnCanvas
});
}
}
class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: parameters.renderForms
});
}
render() {
const storage = this.annotationStorage;
const data = this.data;
const id = data.id;
const angularData = window.getFormValueFromAngular(this.data.fieldName);
const formValue = storage.getValue(id, {
value: data.exportValue === data.fieldValue
}).value;
let angularValue = undefined;
if (angularData.value) {
angularValue = angularData.value === true || angularData.value === data.exportValue;
}
let value = angularValue !== undefined ? angularValue : formValue;
let updateAngularValueNecessary = false;
if (typeof value === "string") {
value = value === data.exportValue;
storage.setValue(id, {
value
});
updateAngularValueNecessary = true;
} else if (angularData?.value !== undefined && angularData.value !== formValue) {
const isChecked = angularData.value === true || angularData.value === data.exportValue;
value = isChecked ? data.exportValue : undefined;
storage.setValue(id, {
value
});
}
this.container.classList.add("buttonWidgetAnnotation", "checkBox");
const element = document.createElement("input");
GetElementsByNameSet.add(element);
element.setAttribute("data-element-id", id);
element.disabled = data.readOnly;
this._setRequired(element, this.data.required);
element.type = "checkbox";
element.name = data.fieldName;
if (value) {
element.setAttribute("checked", true);
}
element.setAttribute("exportValue", data.exportValue);
element.tabIndex = DEFAULT_TAB_INDEX;
element.addEventListener("change", event => {
const {
name,
checked
} = event.target;
for (const checkbox of this._getElementsByName(name, id)) {
const curChecked = checked && checkbox.exportValue === data.exportValue;
if (checkbox.domElement) {
checkbox.domElement.checked = curChecked;
}
storage.setValue(checkbox.id, {
value: curChecked
});
window.updateAngularFormValue(id, {
value: curChecked
});
}
storage.setValue(id, {
value: checked
});
window.updateAngularFormValue(id, {
value: checked
});
});
element.addEventListener("resetform", event => {
const defaultValue = data.defaultFieldValue || "Off";
event.target.checked = defaultValue === data.exportValue;
});
window.registerAcroformField(id, element, value ? data.exportValue : undefined, undefined, this.data.fieldValue);
element.addEventListener("updateFromAngular", newvalue => storage.setValue(id, {
value: newvalue.detail
}));
if (updateAngularValueNecessary) {
window.updateAngularFormValue(id, {
value
});
}
if (this.enableScripting && this.hasJSActions) {
element.addEventListener("updatefromsandbox", jsEvent => {
const actions = {
value(event) {
event.target.checked = event.detail.value !== "Off";
storage.setValue(id, {
value: event.target.checked
});
window.updateAngularFormValue(id, {
value: event.target.value
});
}
};
this._dispatchEventFromSandbox(actions, jsEvent);
});
this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
}
this._setBackgroundColor(element);
this._setDefaultPropertiesFromJS(element);
this.container.append(element);
return this.container;
}
}
class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: parameters.renderForms
});
}
render() {
this.container.classList.add("buttonWidgetAnnotation", "radioButton");
const storage = this.annotationStorage;
const data = this.data;
const id = data.id;
const angularData = window.getFormValueFromAngular(this.data.fieldName);
const defaultValue = data.fieldValue === data.buttonValue ? data.buttonValue : undefined;
const formValue = storage.getValue(id, {
value: defaultValue
}).value;
let value = angularData.value ?? formValue;
if (typeof value === "string" || angularData !== formValue) {
value = value === data.buttonValue;
storage.setValue(id, {
value
});
} else if (value) {
window.updateAngularFormValue(id, {
value: data.buttonValue
});
}
if (value) {
for (const radio of this._getElementsByName(data.fieldName, id)) {
storage.setValue(radio.id, {
value: false
});
}
}
const element = document.createElement("input");
GetElementsByNameSet.add(element);
element.setAttribute("data-element-id", id);
element.disabled = data.readOnly;
this._setRequired(element, this.data.required);
element.type = "radio";
element.name = data.fieldName;
if (value) {
element.setAttribute("checked", true);
}
element.tabIndex = DEFAULT_TAB_INDEX;
element.addEventListener("change", event => {
const {
name,
checked
} = event.target;
for (const radio of this._getElementsByName(name, id)) {
storage.setValue(radio.id, {
value: false
});
window.updateAngularFormValue(radio.id, {
value: false
});
}
storage.setValue(id, {
value: checked
});
window.updateAngularFormValue(id, {
value: checked
});
});
element.addEventListener("resetform", event => {
const defaultValue = data.defaultFieldValue;
event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;
});
window.registerAcroformField(id, element, value ? data.buttonValue : undefined, data.buttonValue, this.data.fieldValue);
element.addEventListener("updateFromAngular", newvalue => storage.setValue(id, {
value: newvalue.detail
}));
if (this.enableScripting && this.hasJSActions) {
const pdfButtonValue = data.buttonValue;
element.addEventListener("updatefromsandbox", jsEvent => {
const actions = {
value: event => {
const checked = pdfButtonValue === event.detail.value;
for (const radio of this._getElementsByName(event.target.name)) {
const curChecked = checked && radio.id === id;
if (radio.domElement) {
radio.domElement.checked = curChecked;
}
storage.setValue(radio.id, {
value: curChecked
});
window.updateAngularFormValue(id, {
value: curChecked
});
}
}
};
this._dispatchEventFromSandbox(actions, jsEvent);
});
this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
}
this._setBackgroundColor(element);
this._setDefaultPropertiesFromJS(element);
this.container.append(element);
return this.container;
}
}
class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
constructor(parameters) {
super(parameters, {
ignoreBorder: parameters.data.hasAppearance
});
}
render() {
const container = super.render();
container.classList.add("buttonWidgetAnnotation", "pushButton");
const linkElement = container.lastChild;
if (this.enableScripting && this.hasJSActions && linkElement) {
this._setDefaultPropertiesFromJS(linkElement);
linkElement.addEventListener("updatefromsandbox", jsEvent => {
this._dispatchEventFromSandbox({}, jsEvent);
});
}
return container;
}
}
class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: parameters.renderForms
});
}
render() {
this.container.classList.add("choiceWidgetAnnotation");
const storage = this.annotationStorage;
const id = this.data.id;
const angularData = window.getFormValueFromAngular(this.data.fieldName);
const formData = storage.getValue(id, {
value: this.data.fieldValue
});
const storedData = angularData.value ? angularData : formData;
if (angularData !== formData) {
storage.setValue(id, {
value: angularData.value
});
}
const selectElement = document.createElement("select");
GetElementsByNameSet.add(selectElement);
selectElement.setAttribute("data-element-id", id);
selectElement.disabled = this.data.readOnly;
this._setRequired(selectElement, this.data.required);
selectElement.name = this.data.fieldName;
selectElement.tabIndex = DEFAULT_TAB_INDEX;
let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;
if (!this.data.combo) {
selectElement.size = this.data.options.length;
if (this.data.multiSelect) {
selectElement.multiple = true;
}
}
selectElement.addEventListener("resetform", event => {
const defaultValue = this.data.defaultFieldValue;
for (const option of selectElement.options) {
option.selected = option.value === defaultValue;
}
});
for (const option of this.data.options) {
const optionElement = document.createElement("option");
optionElement.textContent = option.displayValue;
optionElement.value = option.exportValue;
if (storedData.value.includes(option.exportValue)) {
optionElement.setAttribute("selected", true);
addAnEmptyEntry = false;
}
selectElement.append(optionElement);
}
let removeEmptyEntry = null;
if (addAnEmptyEntry) {
const noneOptionElement = document.createElement("option");
noneOptionElement.value = " ";
noneOptionElement.setAttribute("hidden", true);
noneOptionElement.setAttribute("selected", true);
selectElement.prepend(noneOptionElement);
removeEmptyEntry = () => {
noneOptionElement.remove();
selectElement.removeEventListener("input", removeEmptyEntry);
removeEmptyEntry = null;
};
selectElement.addEventListener("input", removeEmptyEntry);
}
const getValue = isExport => {
const name = isExport ? "value" : "textContent";
const {
options,
multiple
} = selectElement;
if (!multiple) {
return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];
}
return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);
};
let selectedValues = getValue(false);
const getItems = event => {
const options = event.target.options;
return Array.prototype.map.call(options, option => ({
displayValue: option.textContent,
exportValue: option.value
}));
};
window.registerAcroformField(id, selectElement, selectedValues, undefined, this.data.fieldValue);
selectElement.addEventListener("updateFromAngular", newvalue => storage.setValue(id, {
value: newvalue.detail
}));
if (this.enableScripting && this.hasJSActions) {
selectElement.addEventListener("updatefromsandbox", jsEvent => {
const actions = {
value(event) {
removeEmptyEntry?.();
const value = event.detail.value;
const values = new Set(Array.isArray(value) ? value : [value]);
for (const option of selectElement.options) {
option.selected = values.has(option.value);
}
storage.setValue(id, {
value: getValue(true)
});
selectedValues = getValue(false);
window.updateAngularFormValue(id, {
value: selectedValues
});
},
multipleSelection(event) {
selectElement.multiple = true;
},
remove(event) {
const options = selectElement.options;
const index = event.detail.remove;
options[index].selected = false;
selectElement.remove(index);
if (options.length > 0) {
const i = Array.prototype.findIndex.call(options, option => option.selected);
if (i === -1) {
options[0].selected = true;
}
}
storage.setValue(id, {
value: getValue(true),
items: getItems(event)
});
selectedValues = getValue(false);
},
clear(event) {
while (selectElement.length !== 0) {
selectElement.remove(0);
}
storage.setValue(id, {
value: null,
items: []
});
selectedValues = getValue(false);
window.updateAngularFormValue(id, {
value: selectedValues
});
},
insert(event) {
const {
index,
displayValue,
exportValue
} = event.detail.insert;
const selectChild = selectElement.children[index];
const optionElement = document.createElement("option");
optionElement.textContent = displayValue;
optionElement.value = exportValue;
if (selectChild) {
selectChild.before(optionElement);
} else {
selectElement.append(optionElement);
}
storage.setValue(id, {
value: getValue(true),
items: getItems(event)
});
selectedValues = getValue(false);
window.updateAngularFormValue(id, {
value: selectedValues
});
},
items(event) {
const {
items
} = event.detail;
while (selectElement.length !== 0) {
selectElement.remove(0);
}
for (const item of items) {
const {
displayValue,
exportValue
} = item;
const optionElement = document.createElement("option");
optionElement.textContent = displayValue;
optionElement.value = exportValue;
selectElement.append(optionElement);
}
if (selectElement.options.length > 0) {
selectElement.options[0].selected = true;
}
storage.setValue(id, {
value: getValue(true),
items: getItems(event)
});
selectedValues = getValue(false);
window.updateAngularFormValue(id, {
value: selectedValues
});
},
indices(event) {
const indices = new Set(event.detail.indices);
for (const option of event.target.options) {
option.selected = indices.has(option.index);
}
storage.setValue(id, {
value: getValue(true)
});
selectedValues = getValue(false);
window.updateAngularFormValue(id, {
value: selectedValues
});
},
editable(event) {
event.target.disabled = !event.detail.editable;
}
};
this._dispatchEventFromSandbox(actions, jsEvent);
});
selectElement.addEventListener("input", event => {
const exportValue = getValue(true);
const change = getValue(false);
storage.setValue(id, {
value: exportValue
});
window.updateAngularFormValue(id, {
value: exportValue
});
event.preventDefault();
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id,
name: "Keystroke",
value: selectedValues,
change,
changeEx: exportValue,
willCommit: false,
commitKey: 1,
keyDown: false
}
});
});
this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value);
} else {
selectElement.addEventListener("input", function (event) {
storage.setValue(id, {
value: getValue(true)
});
window.updateAngularFormValue(id, {
value: getValue(true)
});
});
}
if (this.data.combo) {
this._setTextStyle(selectElement);
} else {}
this._setBackgroundColor(selectElement);
this._setDefaultPropertiesFromJS(selectElement);
this.container.append(selectElement);
return this.container;
}
}
class PopupAnnotationElement extends AnnotationElement {
constructor(parameters) {
const {
data,
elements
} = parameters;
super(parameters, {
isRenderable: AnnotationElement._hasPopupData(data)
});
this.elements = elements;
this.popup = null;
}
render() {
this.container.classList.add("popupAnnotation");
const popup = this.popup = new PopupElement({
container: this.container,
color: this.data.color,
titleObj: this.data.titleObj,
modificationDate: this.data.modificationDate,
contentsObj: this.data.contentsObj,
richText: this.data.richText,
rect: this.data.rect,
parentRect: this.data.parentRect || null,
parent: this.parent,
elements: this.elements,
open: this.data.open
});
const elementIds = [];
for (const element of this.elements) {
element.popup = popup;
element.container.ariaHasPopup = "dialog";
elementIds.push(element.data.id);
element.addHighlightArea();
}
this.container.setAttribute("aria-controls", elementIds.map(id => `${AnnotationPrefix}${id}`).join(","));
return this.container;
}
}
var _boundKeyDown = /*#__PURE__*/new WeakMap();
var _boundHide = /*#__PURE__*/new WeakMap();
var _boundShow = /*#__PURE__*/new WeakMap();
var _boundToggle = /*#__PURE__*/new WeakMap();
var _color = /*#__PURE__*/new WeakMap();
var annotation_layer_container = /*#__PURE__*/new WeakMap();
var _contentsObj = /*#__PURE__*/new WeakMap();
var _dateObj = /*#__PURE__*/new WeakMap();
var _elements = /*#__PURE__*/new WeakMap();
var _parent = /*#__PURE__*/new WeakMap();
var _parentRect = /*#__PURE__*/new WeakMap();
var _pinned = /*#__PURE__*/new WeakMap();
var _popup = /*#__PURE__*/new WeakMap();
var annotation_layer_position = /*#__PURE__*/new WeakMap();
var _rect = /*#__PURE__*/new WeakMap();
var _richText = /*#__PURE__*/new WeakMap();
var _titleObj = /*#__PURE__*/new WeakMap();
var _updates2 = /*#__PURE__*/new WeakMap();
var _wasVisible = /*#__PURE__*/new WeakMap();
var _PopupElement_brand = /*#__PURE__*/new WeakSet();
class PopupElement {
constructor(_ref2) {
let {
container,
color,
elements,
titleObj,
modificationDate,
contentsObj: _contentsObj2,
richText: _richText2,
parent,
rect: _rect2,
parentRect,
open
} = _ref2;
annotation_layer_classPrivateMethodInitSpec(this, _PopupElement_brand);
annotation_layer_classPrivateFieldInitSpec(this, _boundKeyDown, annotation_layer_assertClassBrand(_PopupElement_brand, this, _keyDown).bind(this));
annotation_layer_classPrivateFieldInitSpec(this, _boundHide, annotation_layer_assertClassBrand(_PopupElement_brand, this, _hide).bind(this));
annotation_layer_classPrivateFieldInitSpec(this, _boundShow, annotation_layer_assertClassBrand(_PopupElement_brand, this, _show).bind(this));
annotation_layer_classPrivateFieldInitSpec(this, _boundToggle, annotation_layer_assertClassBrand(_PopupElement_brand, this, _toggle).bind(this));
annotation_layer_classPrivateFieldInitSpec(this, _color, null);
annotation_layer_classPrivateFieldInitSpec(this, annotation_layer_container, null);
annotation_layer_classPrivateFieldInitSpec(this, _contentsObj, null);
annotation_layer_classPrivateFieldInitSpec(this, _dateObj, null);
annotation_layer_classPrivateFieldInitSpec(this, _elements, null);
annotation_layer_classPrivateFieldInitSpec(this, _parent, null);
annotation_layer_classPrivateFieldInitSpec(this, _parentRect, null);
annotation_layer_classPrivateFieldInitSpec(this, _pinned, false);
annotation_layer_classPrivateFieldInitSpec(this, _popup, null);
annotation_layer_classPrivateFieldInitSpec(this, annotation_layer_position, null);
annotation_layer_classPrivateFieldInitSpec(this, _rect, null);
annotation_layer_classPrivateFieldInitSpec(this, _richText, null);
annotation_layer_classPrivateFieldInitSpec(this, _titleObj, null);
annotation_layer_classPrivateFieldInitSpec(this, _updates2, null);
annotation_layer_classPrivateFieldInitSpec(this, _wasVisible, false);
annotation_layer_classPrivateFieldSet(annotation_layer_container, this, container);
annotation_layer_classPrivateFieldSet(_titleObj, this, titleObj);
annotation_layer_classPrivateFieldSet(_contentsObj, this, _contentsObj2);
annotation_layer_classPrivateFieldSet(_richText, this, _richText2);
annotation_layer_classPrivateFieldSet(_parent, this, parent);
annotation_layer_classPrivateFieldSet(_color, this, color);
annotation_layer_classPrivateFieldSet(_rect, this, _rect2);
annotation_layer_classPrivateFieldSet(_parentRect, this, parentRect);
annotation_layer_classPrivateFieldSet(_elements, this, elements);
annotation_layer_classPrivateFieldSet(_dateObj, this, PDFDateString.toDateObject(modificationDate));
this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup());
for (const element of this.trigger) {
element.addEventListener("click", annotation_layer_classPrivateFieldGet(_boundToggle, this));
element.addEventListener("mouseenter", annotation_layer_classPrivateFieldGet(_boundShow, this));
element.addEventListener("mouseleave", annotation_layer_classPrivateFieldGet(_boundHide, this));
element.classList.add("popupTriggerArea");
}
for (const element of elements) {
element.container?.addEventListener("keydown", annotation_layer_classPrivateFieldGet(_boundKeyDown, this));
}
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).hidden = true;
if (open) {
annotation_layer_assertClassBrand(_PopupElement_brand, this, _toggle).call(this);
}
}
render() {
if (annotation_layer_classPrivateFieldGet(_popup, this)) {
return;
}
const popup = annotation_layer_classPrivateFieldSet(_popup, this, document.createElement("div"));
popup.className = "popup";
if (annotation_layer_classPrivateFieldGet(_color, this)) {
const baseColor = popup.style.outlineColor = Util.makeHexColor(...annotation_layer_classPrivateFieldGet(_color, this));
popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;
}
const header = document.createElement("span");
header.className = "header";
const title = document.createElement("h1");
header.append(title);
({
dir: title.dir,
str: title.textContent
} = annotation_layer_classPrivateFieldGet(_titleObj, this));
popup.append(header);
if (annotation_layer_classPrivateFieldGet(_dateObj, this)) {
const modificationDate = document.createElement("span");
modificationDate.classList.add("popupDate");
modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string");
modificationDate.setAttribute("data-l10n-args", JSON.stringify({
dateObj: annotation_layer_classPrivateFieldGet(_dateObj, this).valueOf()
}));
header.append(modificationDate);
}
const html = annotation_layer_classPrivateGetter(_PopupElement_brand, this, _get_html);
if (html) {
XfaLayer.render({
xfaHtml: html,
intent: "richText",
div: popup
});
popup.lastChild.classList.add("richText", "popupContent");
} else {
const contents = this._formatContents(annotation_layer_classPrivateFieldGet(_contentsObj, this));
popup.append(contents);
}
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).append(popup);
}
_formatContents(_ref3) {
let {
str,
dir
} = _ref3;
const p = document.createElement("p");
p.classList.add("popupContent");
p.dir = dir;
const lines = str.split(/(?:\r\n?|\n)/);
for (let i = 0, ii = lines.length; i < ii; ++i) {
const line = lines[i];
p.append(document.createTextNode(line));
if (i < ii - 1) {
p.append(document.createElement("br"));
}
}
return p;
}
updateEdited(_ref4) {
let {
rect,
popupContent
} = _ref4;
annotation_layer_classPrivateFieldGet(_updates2, this) || annotation_layer_classPrivateFieldSet(_updates2, this, {
contentsObj: annotation_layer_classPrivateFieldGet(_contentsObj, this),
richText: annotation_layer_classPrivateFieldGet(_richText, this)
});
if (rect) {
annotation_layer_classPrivateFieldSet(annotation_layer_position, this, null);
}
if (popupContent) {
annotation_layer_classPrivateFieldSet(_richText, this, annotation_layer_assertClassBrand(_PopupElement_brand, this, _makePopupContent).call(this, popupContent));
annotation_layer_classPrivateFieldSet(_contentsObj, this, null);
}
annotation_layer_classPrivateFieldGet(_popup, this)?.remove();
annotation_layer_classPrivateFieldSet(_popup, this, null);
}
resetEdited() {
if (!annotation_layer_classPrivateFieldGet(_updates2, this)) {
return;
}
({
contentsObj: _toSetter(annotation_layer_classPrivateFieldSet, [_contentsObj, this])._,
richText: _toSetter(annotation_layer_classPrivateFieldSet, [_richText, this])._
} = annotation_layer_classPrivateFieldGet(_updates2, this));
annotation_layer_classPrivateFieldSet(_updates2, this, null);
annotation_layer_classPrivateFieldGet(_popup, this)?.remove();
annotation_layer_classPrivateFieldSet(_popup, this, null);
annotation_layer_classPrivateFieldSet(annotation_layer_position, this, null);
}
forceHide() {
annotation_layer_classPrivateFieldSet(_wasVisible, this, this.isVisible);
if (!annotation_layer_classPrivateFieldGet(_wasVisible, this)) {
return;
}
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).hidden = true;
}
maybeShow() {
if (!annotation_layer_classPrivateFieldGet(_wasVisible, this)) {
return;
}
if (!annotation_layer_classPrivateFieldGet(_popup, this)) {
annotation_layer_assertClassBrand(_PopupElement_brand, this, _show).call(this);
}
annotation_layer_classPrivateFieldSet(_wasVisible, this, false);
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).hidden = false;
}
get isVisible() {
return annotation_layer_classPrivateFieldGet(annotation_layer_container, this).hidden === false;
}
}
function _get_html(_this) {
const richText = annotation_layer_classPrivateFieldGet(_richText, _this);
const contentsObj = annotation_layer_classPrivateFieldGet(_contentsObj, _this);
if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) {
return annotation_layer_classPrivateFieldGet(_richText, _this).html || null;
}
return null;
}
function _get_fontSize(_this2) {
return annotation_layer_classPrivateGetter(_PopupElement_brand, _this2, _get_html)?.attributes?.style?.fontSize || 0;
}
function _get_fontColor(_this3) {
return annotation_layer_classPrivateGetter(_PopupElement_brand, _this3, _get_html)?.attributes?.style?.color || null;
}
function _makePopupContent(text) {
const popupLines = [];
const popupContent = {
str: text,
html: {
name: "div",
attributes: {
dir: "auto"
},
children: [{
name: "p",
children: popupLines
}]
}
};
const lineAttributes = {
style: {
color: annotation_layer_classPrivateGetter(_PopupElement_brand, this, _get_fontColor),
fontSize: annotation_layer_classPrivateGetter(_PopupElement_brand, this, _get_fontSize) ? `calc(${annotation_layer_classPrivateGetter(_PopupElement_brand, this, _get_fontSize)}px * var(--total-scale-factor))` : ""
}
};
for (const line of text.split("\n")) {
popupLines.push({
name: "span",
value: line,
attributes: lineAttributes
});
}
return popupContent;
}
function _keyDown(event) {
if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {
return;
}
if (event.key === "Enter" || event.key === "Escape" && annotation_layer_classPrivateFieldGet(_pinned, this)) {
annotation_layer_assertClassBrand(_PopupElement_brand, this, _toggle).call(this);
}
}
function _setPosition() {
if (annotation_layer_classPrivateFieldGet(annotation_layer_position, this) !== null) {
return;
}
const {
page: {
view
},
viewport: {
rawDims: {
pageWidth,
pageHeight,
pageX,
pageY
}
}
} = annotation_layer_classPrivateFieldGet(_parent, this);
let useParentRect = !!annotation_layer_classPrivateFieldGet(_parentRect, this);
let rect = useParentRect ? annotation_layer_classPrivateFieldGet(_parentRect, this) : annotation_layer_classPrivateFieldGet(_rect, this);
for (const element of annotation_layer_classPrivateFieldGet(_elements, this)) {
if (!rect || Util.intersect(element.data.rect, rect) !== null) {
rect = element.data.rect;
useParentRect = true;
break;
}
}
const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]);
const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5;
const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0;
const popupLeft = normalizedRect[0] + parentWidth;
const popupTop = normalizedRect[1];
annotation_layer_classPrivateFieldSet(annotation_layer_position, this, [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]);
const {
style
} = annotation_layer_classPrivateFieldGet(annotation_layer_container, this);
style.left = `${annotation_layer_classPrivateFieldGet(annotation_layer_position, this)[0]}%`;
style.top = `${annotation_layer_classPrivateFieldGet(annotation_layer_position, this)[1]}%`;
}
function _toggle() {
annotation_layer_classPrivateFieldSet(_pinned, this, !annotation_layer_classPrivateFieldGet(_pinned, this));
if (annotation_layer_classPrivateFieldGet(_pinned, this)) {
annotation_layer_assertClassBrand(_PopupElement_brand, this, _show).call(this);
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).addEventListener("click", annotation_layer_classPrivateFieldGet(_boundToggle, this));
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).addEventListener("keydown", annotation_layer_classPrivateFieldGet(_boundKeyDown, this));
} else {
annotation_layer_assertClassBrand(_PopupElement_brand, this, _hide).call(this);
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).removeEventListener("click", annotation_layer_classPrivateFieldGet(_boundToggle, this));
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).removeEventListener("keydown", annotation_layer_classPrivateFieldGet(_boundKeyDown, this));
}
}
function _show() {
if (!annotation_layer_classPrivateFieldGet(_popup, this)) {
this.render();
}
if (!this.isVisible) {
annotation_layer_assertClassBrand(_PopupElement_brand, this, _setPosition).call(this);
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).hidden = false;
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).style.zIndex = parseInt(annotation_layer_classPrivateFieldGet(annotation_layer_container, this).style.zIndex) + 1000;
const page = annotation_layer_classPrivateFieldGet(annotation_layer_container, this).closest(".page");
if (page) {
page.style.overflow = "visible";
}
} else if (annotation_layer_classPrivateFieldGet(_pinned, this)) {
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).classList.add("focused");
}
}
function _hide() {
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).classList.remove("focused");
if (annotation_layer_classPrivateFieldGet(_pinned, this) || !this.isVisible) {
return;
}
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).hidden = true;
annotation_layer_classPrivateFieldGet(annotation_layer_container, this).style.zIndex = parseInt(annotation_layer_classPrivateFieldGet(annotation_layer_container, this).style.zIndex) - 1000;
const page = annotation_layer_classPrivateFieldGet(annotation_layer_container, this).closest(".page");
if (page) {
page.style.overflow = "";
}
}
class FreeTextAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
this.textContent = parameters.data.textContent;
this.textPosition = parameters.data.textPosition;
this.annotationEditorType = AnnotationEditorType.FREETEXT;
}
render() {
this.container.classList.add("freeTextAnnotation");
if (this.textContent) {
const content = document.createElement("div");
content.classList.add("annotationTextContent");
content.setAttribute("role", "comment");
for (const line of this.textContent) {
const lineSpan = document.createElement("span");
lineSpan.textContent = line;
content.append(lineSpan);
}
this.container.append(content);
}
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this._editOnDoubleClick();
return this.container;
}
}
var _line = /*#__PURE__*/new WeakMap();
class LineAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
annotation_layer_classPrivateFieldInitSpec(this, _line, null);
}
render() {
this.container.classList.add("lineAnnotation");
const {
data,
width,
height
} = this;
const svg = this.svgFactory.create(width, height, true);
const line = annotation_layer_classPrivateFieldSet(_line, this, this.svgFactory.createElement("svg:line"));
line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]);
line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]);
line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]);
line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]);
line.setAttribute("stroke-width", data.borderStyle.width || 1);
line.setAttribute("stroke", "transparent");
line.setAttribute("fill", "transparent");
svg.append(line);
this.container.append(svg);
if (!data.popupRef && this.hasPopupData) {
this._createPopup();
}
return this.container;
}
getElementsToTriggerPopup() {
return annotation_layer_classPrivateFieldGet(_line, this);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
var _square = /*#__PURE__*/new WeakMap();
class SquareAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
annotation_layer_classPrivateFieldInitSpec(this, _square, null);
}
render() {
this.container.classList.add("squareAnnotation");
const {
data,
width,
height
} = this;
const svg = this.svgFactory.create(width, height, true);
const borderWidth = data.borderStyle.width;
const square = annotation_layer_classPrivateFieldSet(_square, this, this.svgFactory.createElement("svg:rect"));
square.setAttribute("x", borderWidth / 2);
square.setAttribute("y", borderWidth / 2);
square.setAttribute("width", width - borderWidth);
square.setAttribute("height", height - borderWidth);
square.setAttribute("stroke-width", borderWidth || 1);
square.setAttribute("stroke", "transparent");
square.setAttribute("fill", "transparent");
svg.append(square);
this.container.append(svg);
if (!data.popupRef && this.hasPopupData) {
this._createPopup();
}
return this.container;
}
getElementsToTriggerPopup() {
return annotation_layer_classPrivateFieldGet(_square, this);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
var _circle = /*#__PURE__*/new WeakMap();
class CircleAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
annotation_layer_classPrivateFieldInitSpec(this, _circle, null);
}
render() {
this.container.classList.add("circleAnnotation");
const {
data,
width,
height
} = this;
const svg = this.svgFactory.create(width, height, true);
const borderWidth = data.borderStyle.width;
const circle = annotation_layer_classPrivateFieldSet(_circle, this, this.svgFactory.createElement("svg:ellipse"));
circle.setAttribute("cx", width / 2);
circle.setAttribute("cy", height / 2);
circle.setAttribute("rx", width / 2 - borderWidth / 2);
circle.setAttribute("ry", height / 2 - borderWidth / 2);
circle.setAttribute("stroke-width", borderWidth || 1);
circle.setAttribute("stroke", "transparent");
circle.setAttribute("fill", "transparent");
svg.append(circle);
this.container.append(svg);
if (!data.popupRef && this.hasPopupData) {
this._createPopup();
}
return this.container;
}
getElementsToTriggerPopup() {
return annotation_layer_classPrivateFieldGet(_circle, this);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
var _polyline = /*#__PURE__*/new WeakMap();
class PolylineAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
annotation_layer_classPrivateFieldInitSpec(this, _polyline, null);
this.containerClassName = "polylineAnnotation";
this.svgElementName = "svg:polyline";
}
render() {
this.container.classList.add(this.containerClassName);
const {
data: {
rect,
vertices,
borderStyle,
popupRef
},
width,
height
} = this;
if (!vertices) {
return this.container;
}
const svg = this.svgFactory.create(width, height, true);
let points = [];
for (let i = 0, ii = vertices.length; i < ii; i += 2) {
const x = vertices[i] - rect[0];
const y = rect[3] - vertices[i + 1];
points.push(`${x},${y}`);
}
points = points.join(" ");
const polyline = annotation_layer_classPrivateFieldSet(_polyline, this, this.svgFactory.createElement(this.svgElementName));
polyline.setAttribute("points", points);
polyline.setAttribute("stroke-width", borderStyle.width || 1);
polyline.setAttribute("stroke", "transparent");
polyline.setAttribute("fill", "transparent");
svg.append(polyline);
this.container.append(svg);
if (!popupRef && this.hasPopupData) {
this._createPopup();
}
return this.container;
}
getElementsToTriggerPopup() {
return annotation_layer_classPrivateFieldGet(_polyline, this);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
class PolygonAnnotationElement extends PolylineAnnotationElement {
constructor(parameters) {
super(parameters);
this.containerClassName = "polygonAnnotation";
this.svgElementName = "svg:polygon";
}
}
class CaretAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
}
render() {
this.container.classList.add("caretAnnotation");
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
return this.container;
}
}
var _polylinesGroupElement = /*#__PURE__*/new WeakMap();
var _polylines = /*#__PURE__*/new WeakMap();
var _InkAnnotationElement_brand = /*#__PURE__*/new WeakSet();
class InkAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
annotation_layer_classPrivateMethodInitSpec(this, _InkAnnotationElement_brand);
annotation_layer_classPrivateFieldInitSpec(this, _polylinesGroupElement, null);
annotation_layer_classPrivateFieldInitSpec(this, _polylines, []);
this.containerClassName = "inkAnnotation";
this.svgElementName = "svg:polyline";
this.annotationEditorType = this.data.it === "InkHighlight" ? AnnotationEditorType.HIGHLIGHT : AnnotationEditorType.INK;
}
render() {
this.container.classList.add(this.containerClassName);
const {
data: {
rect,
rotation,
inkLists,
borderStyle,
popupRef
}
} = this;
const {
transform,
width,
height
} = annotation_layer_assertClassBrand(_InkAnnotationElement_brand, this, _getTransform).call(this, rotation, rect);
const svg = this.svgFactory.create(width, height, true);
const g = annotation_layer_classPrivateFieldSet(_polylinesGroupElement, this, this.svgFactory.createElement("svg:g"));
svg.append(g);
g.setAttribute("stroke-width", borderStyle.width || 1);
g.setAttribute("stroke-linecap", "round");
g.setAttribute("stroke-linejoin", "round");
g.setAttribute("stroke-miterlimit", 10);
g.setAttribute("stroke", "transparent");
g.setAttribute("fill", "transparent");
g.setAttribute("transform", transform);
for (let i = 0, ii = inkLists.length; i < ii; i++) {
const polyline = this.svgFactory.createElement(this.svgElementName);
annotation_layer_classPrivateFieldGet(_polylines, this).push(polyline);
polyline.setAttribute("points", inkLists[i].join(","));
g.append(polyline);
}
if (!popupRef && this.hasPopupData) {
this._createPopup();
}
this.container.append(svg);
this._editOnDoubleClick();
return this.container;
}
updateEdited(params) {
super.updateEdited(params);
const {
thickness,
points,
rect
} = params;
const g = annotation_layer_classPrivateFieldGet(_polylinesGroupElement, this);
if (thickness >= 0) {
g.setAttribute("stroke-width", thickness || 1);
}
if (points) {
for (let i = 0, ii = annotation_layer_classPrivateFieldGet(_polylines, this).length; i < ii; i++) {
annotation_layer_classPrivateFieldGet(_polylines, this)[i].setAttribute("points", points[i].join(","));
}
}
if (rect) {
const {
transform,
width,
height
} = annotation_layer_assertClassBrand(_InkAnnotationElement_brand, this, _getTransform).call(this, this.data.rotation, rect);
const root = g.parentElement;
root.setAttribute("viewBox", `0 0 ${width} ${height}`);
g.setAttribute("transform", transform);
}
}
getElementsToTriggerPopup() {
return annotation_layer_classPrivateFieldGet(_polylines, this);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
function _getTransform(rotation, rect) {
switch (rotation) {
case 90:
return {
transform: `rotate(90) translate(${-rect[0]},${rect[1]}) scale(1,-1)`,
width: rect[3] - rect[1],
height: rect[2] - rect[0]
};
case 180:
return {
transform: `rotate(180) translate(${-rect[2]},${rect[1]}) scale(1,-1)`,
width: rect[2] - rect[0],
height: rect[3] - rect[1]
};
case 270:
return {
transform: `rotate(270) translate(${-rect[2]},${rect[3]}) scale(1,-1)`,
width: rect[3] - rect[1],
height: rect[2] - rect[0]
};
default:
return {
transform: `translate(${-rect[0]},${rect[3]}) scale(1,-1)`,
width: rect[2] - rect[0],
height: rect[3] - rect[1]
};
}
}
class HighlightAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true,
createQuadrilaterals: true
});
this.annotationEditorType = AnnotationEditorType.HIGHLIGHT;
}
render() {
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this.container.classList.add("highlightAnnotation");
this._editOnDoubleClick();
return this.container;
}
}
class UnderlineAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true,
createQuadrilaterals: true
});
}
render() {
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this.container.classList.add("underlineAnnotation");
return this.container;
}
}
class SquigglyAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true,
createQuadrilaterals: true
});
}
render() {
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this.container.classList.add("squigglyAnnotation");
return this.container;
}
}
class StrikeOutAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true,
createQuadrilaterals: true
});
}
render() {
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this.container.classList.add("strikeoutAnnotation");
return this.container;
}
}
class StampAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true,
ignoreBorder: true
});
this.annotationEditorType = AnnotationEditorType.STAMP;
}
render() {
this.container.classList.add("stampAnnotation");
this.container.setAttribute("role", "img");
if (!this.data.popupRef && this.hasPopupData) {
this._createPopup();
}
this._editOnDoubleClick();
return this.container;
}
}
var _trigger = /*#__PURE__*/new WeakMap();
var _FileAttachmentAnnotationElement_brand = /*#__PURE__*/new WeakSet();
class FileAttachmentAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, {
isRenderable: true
});
annotation_layer_classPrivateMethodInitSpec(this, _FileAttachmentAnnotationElement_brand);
annotation_layer_classPrivateFieldInitSpec(this, _trigger, null);
const {
file
} = this.data;
this.filename = file.filename;
this.content = file.content;
this.linkService.eventBus?.dispatch("fileattachmentannotation", {
source: this,
...file
});
}
render() {
this.container.classList.add("fileAttachmentAnnotation");
const {
container,
data
} = this;
let trigger;
if (data.hasAppearance || data.fillAlpha === 0) {
trigger = document.createElement("div");
} else {
trigger = document.createElement("img");
trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`;
if (data.fillAlpha && data.fillAlpha < 1) {
trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`;
}
}
trigger.addEventListener("dblclick", annotation_layer_assertClassBrand(_FileAttachmentAnnotationElement_brand, this, _download).bind(this));
annotation_layer_classPrivateFieldSet(_trigger, this, trigger);
const {
isMac
} = util_FeatureTest.platform;
container.addEventListener("keydown", evt => {
if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) {
annotation_layer_assertClassBrand(_FileAttachmentAnnotationElement_brand, this, _download).call(this);
}
});
if (!data.popupRef && this.hasPopupData) {
this._createPopup();
} else {
trigger.classList.add("popupTriggerArea");
}
container.append(trigger);
return container;
}
getElementsToTriggerPopup() {
return annotation_layer_classPrivateFieldGet(_trigger, this);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
function _download() {
this.downloadManager?.openOrDownloadData(this.content, this.filename);
}
var _accessibilityManager = /*#__PURE__*/new WeakMap();
var _annotationCanvasMap = /*#__PURE__*/new WeakMap();
var _editableAnnotations = /*#__PURE__*/new WeakMap();
var _structTreeLayer = /*#__PURE__*/new WeakMap();
var _AnnotationLayer_brand = /*#__PURE__*/new WeakSet();
class AnnotationLayer {
constructor(_ref5) {
let {
div,
accessibilityManager,
annotationCanvasMap,
annotationEditorUIManager,
page,
viewport,
structTreeLayer
} = _ref5;
annotation_layer_classPrivateMethodInitSpec(this, _AnnotationLayer_brand);
annotation_layer_classPrivateFieldInitSpec(this, _accessibilityManager, null);
annotation_layer_classPrivateFieldInitSpec(this, _annotationCanvasMap, null);
annotation_layer_classPrivateFieldInitSpec(this, _editableAnnotations, new Map());
annotation_layer_classPrivateFieldInitSpec(this, _structTreeLayer, null);
this.div = div;
annotation_layer_classPrivateFieldSet(_accessibilityManager, this, accessibilityManager);
annotation_layer_classPrivateFieldSet(_annotationCanvasMap, this, annotationCanvasMap);
annotation_layer_classPrivateFieldSet(_structTreeLayer, this, structTreeLayer || null);
this.page = page;
this.viewport = viewport;
this.zIndex = 0;
this._annotationEditorUIManager = annotationEditorUIManager;
}
hasEditableAnnotations() {
return annotation_layer_classPrivateFieldGet(_editableAnnotations, this).size > 0;
}
async render(params) {
const {
annotations
} = params;
const layer = this.div;
setLayerDimensions(layer, this.viewport);
const popupToElements = new Map();
const elementParams = {
data: null,
layer,
linkService: params.linkService,
downloadManager: params.downloadManager,
imageResourcesPath: params.imageResourcesPath || "",
renderForms: params.renderForms !== false,
svgFactory: new DOMSVGFactory(),
annotationStorage: params.annotationStorage || new AnnotationStorage(),
enableScripting: params.enableScripting === true,
hasJSActions: params.hasJSActions,
fieldObjects: params.fieldObjects,
parent: this,
elements: null
};
for (const data of annotations) {
if (data.noHTML) {
continue;
}
const isPopupAnnotation = data.annotationType === AnnotationType.POPUP;
if (!isPopupAnnotation) {
if (data.rect[2] === data.rect[0] || data.rect[3] === data.rect[1]) {
continue;
}
} else {
const elements = popupToElements.get(data.id);
if (!elements) {
continue;
}
elementParams.elements = elements;
}
elementParams.data = data;
const element = AnnotationElementFactory.create(elementParams);
if (!element.isRenderable) {
continue;
}
if (!isPopupAnnotation && data.popupRef) {
const elements = popupToElements.get(data.popupRef);
if (!elements) {
popupToElements.set(data.popupRef, [element]);
} else {
elements.push(element);
}
}
const rendered = element.render();
if (data.hidden) {
rendered.style.visibility = "hidden";
}
await annotation_layer_assertClassBrand(_AnnotationLayer_brand, this, _appendElement).call(this, rendered, data.id);
if (element._isEditable) {
annotation_layer_classPrivateFieldGet(_editableAnnotations, this).set(element.data.id, element);
this._annotationEditorUIManager?.renderAnnotationElement(element);
}
}
annotation_layer_assertClassBrand(_AnnotationLayer_brand, this, _setAnnotationCanvasMap).call(this);
}
async addLinkAnnotations(annotations, linkService) {
const elementParams = {
data: null,
layer: this.div,
linkService,
svgFactory: new DOMSVGFactory(),
parent: this
};
for (const data of annotations) {
data.borderStyle ||= AnnotationLayer._defaultBorderStyle;
elementParams.data = data;
const element = AnnotationElementFactory.create(elementParams);
if (!element.isRenderable) {
continue;
}
const rendered = element.render();
await annotation_layer_assertClassBrand(_AnnotationLayer_brand, this, _appendElement).call(this, rendered, data.id);
}
}
update(_ref6) {
let {
viewport
} = _ref6;
const layer = this.div;
this.viewport = viewport;
setLayerDimensions(layer, {
rotation: viewport.rotation
});
annotation_layer_assertClassBrand(_AnnotationLayer_brand, this, _setAnnotationCanvasMap).call(this);
layer.hidden = false;
}
getEditableAnnotations() {
return Array.from(annotation_layer_classPrivateFieldGet(_editableAnnotations, this).values());
}
getEditableAnnotation(id) {
return annotation_layer_classPrivateFieldGet(_editableAnnotations, this).get(id);
}
static get _defaultBorderStyle() {
return shadow(this, "_defaultBorderStyle", Object.freeze({
width: 1,
rawWidth: 1,
style: AnnotationBorderStyleType.SOLID,
dashArray: [3],
horizontalCornerRadius: 0,
verticalCornerRadius: 0
}));
}
}
async function _appendElement(element, id) {
const contentElement = element.firstChild || element;
const annotationId = contentElement.id = `${AnnotationPrefix}${id}`;
const ariaAttributes = await annotation_layer_classPrivateFieldGet(_structTreeLayer, this)?.getAriaAttributes(annotationId);
if (ariaAttributes) {
for (const [key, value] of ariaAttributes) {
contentElement.setAttribute(key, value);
}
}
this.div.append(element);
annotation_layer_classPrivateFieldGet(_accessibilityManager, this)?.moveElementInDOM(this.div, element, contentElement, false);
}
function _setAnnotationCanvasMap() {
if (!annotation_layer_classPrivateFieldGet(_annotationCanvasMap, this)) {
return;
}
const layer = this.div;
for (const [id, canvas] of annotation_layer_classPrivateFieldGet(_annotationCanvasMap, this)) {
const element = layer.querySelector(`[data-annotation-id="${id}"]`);
if (!element) {
continue;
}
canvas.className = "annotationContent";
const {
firstChild
} = element;
if (!firstChild) {
element.append(canvas);
} else if (firstChild.nodeName === "CANVAS") {
firstChild.replaceWith(canvas);
} else if (!firstChild.classList.contains("annotationContent")) {
firstChild.before(canvas);
} else {
firstChild.after(canvas);
}
const editableAnnotation = annotation_layer_classPrivateFieldGet(_editableAnnotations, this).get(id);
if (!editableAnnotation) {
continue;
}
if (editableAnnotation._hasNoCanvas) {
this._annotationEditorUIManager?.setMissingCanvas(id, element.id, canvas);
editableAnnotation._hasNoCanvas = false;
} else {
editableAnnotation.canvas = canvas;
}
}
annotation_layer_classPrivateFieldGet(_annotationCanvasMap, this).clear();
}
;// ./src/display/editor/freetext.js
var _FreeTextEditor;
function freetext_classPrivateMethodInitSpec(e, a) { freetext_checkPrivateRedeclaration(e, a), a.add(e); }
function freetext_defineProperty(e, r, t) { return (r = freetext_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function freetext_toPropertyKey(t) { var i = freetext_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function freetext_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function freetext_classPrivateFieldInitSpec(e, t, a) { freetext_checkPrivateRedeclaration(e, t), t.set(e, a); }
function freetext_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function freetext_classPrivateFieldGet(s, a) { return s.get(freetext_assertClassBrand(s, a)); }
function freetext_classPrivateFieldSet(s, a, r) { return s.set(freetext_assertClassBrand(s, a), r), r; }
function freetext_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const EOL_PATTERN = /\r\n?|\n/g;
var freetext_color = /*#__PURE__*/new WeakMap();
var _content = /*#__PURE__*/new WeakMap();
var _editorDivId = /*#__PURE__*/new WeakMap();
var _editModeAC = /*#__PURE__*/new WeakMap();
var _fontSize = /*#__PURE__*/new WeakMap();
var _FreeTextEditor_brand = /*#__PURE__*/new WeakSet();
class FreeTextEditor extends AnnotationEditor {
static get _keyboardManager() {
const proto = FreeTextEditor.prototype;
const arrowChecker = self => self.isEmpty();
const small = AnnotationEditorUIManager.TRANSLATE_SMALL;
const big = AnnotationEditorUIManager.TRANSLATE_BIG;
return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, {
bubbles: true
}], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, {
args: [-small, 0],
checker: arrowChecker
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, {
args: [-big, 0],
checker: arrowChecker
}], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, {
args: [small, 0],
checker: arrowChecker
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, {
args: [big, 0],
checker: arrowChecker
}], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, {
args: [0, -small],
checker: arrowChecker
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, {
args: [0, -big],
checker: arrowChecker
}], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, {
args: [0, small],
checker: arrowChecker
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, {
args: [0, big],
checker: arrowChecker
}]]));
}
constructor(params) {
super({
...params,
name: "freeTextEditor"
});
freetext_classPrivateMethodInitSpec(this, _FreeTextEditor_brand);
freetext_classPrivateFieldInitSpec(this, freetext_color, void 0);
freetext_classPrivateFieldInitSpec(this, _content, "");
freetext_classPrivateFieldInitSpec(this, _editorDivId, `${this.id}-editor`);
freetext_classPrivateFieldInitSpec(this, _editModeAC, null);
freetext_classPrivateFieldInitSpec(this, _fontSize, void 0);
freetext_classPrivateFieldSet(freetext_color, this, params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor);
freetext_classPrivateFieldSet(_fontSize, this, params.fontSize || FreeTextEditor._defaultFontSize);
}
static initialize(l10n, uiManager) {
AnnotationEditor.initialize(l10n, uiManager);
const style = getComputedStyle(document.documentElement);
this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding"));
}
static updateDefaultParams(type, value) {
switch (type) {
case AnnotationEditorParamsType.FREETEXT_SIZE:
FreeTextEditor._defaultFontSize = value;
break;
case AnnotationEditorParamsType.FREETEXT_COLOR:
FreeTextEditor._defaultColor = value;
break;
}
}
updateParams(type, value) {
switch (type) {
case AnnotationEditorParamsType.FREETEXT_SIZE:
freetext_assertClassBrand(_FreeTextEditor_brand, this, _updateFontSize).call(this, value);
break;
case AnnotationEditorParamsType.FREETEXT_COLOR:
freetext_assertClassBrand(_FreeTextEditor_brand, this, _updateColor).call(this, value);
break;
}
}
static get defaultPropertiesToUpdate() {
return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]];
}
get propertiesToUpdate() {
return [[AnnotationEditorParamsType.FREETEXT_SIZE, freetext_classPrivateFieldGet(_fontSize, this)], [AnnotationEditorParamsType.FREETEXT_COLOR, freetext_classPrivateFieldGet(freetext_color, this)]];
}
_translateEmpty(x, y) {
this._uiManager.translateSelectedEditors(x, y, true);
}
getInitialTranslation() {
const scale = this.parentScale;
return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + freetext_classPrivateFieldGet(_fontSize, this)) * scale];
}
rebuild() {
if (!this.parent) {
return;
}
super.rebuild();
if (this.div === null) {
return;
}
if (!this.isAttachedToDOM) {
this.parent.add(this);
}
}
enableEditMode() {
if (!super.enableEditMode()) {
return false;
}
this.overlayDiv.classList.remove("enabled");
this.editorDiv.contentEditable = true;
this._isDraggable = false;
this.div.removeAttribute("aria-activedescendant");
freetext_classPrivateFieldSet(_editModeAC, this, new AbortController());
const signal = this._uiManager.combinedSignal(freetext_classPrivateFieldGet(_editModeAC, this));
this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), {
signal
});
this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), {
signal
});
this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), {
signal
});
this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), {
signal
});
this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), {
signal
});
return true;
}
disableEditMode() {
if (!super.disableEditMode()) {
return false;
}
this.overlayDiv.classList.add("enabled");
this.editorDiv.contentEditable = false;
this.div.setAttribute("aria-activedescendant", freetext_classPrivateFieldGet(_editorDivId, this));
this._isDraggable = true;
freetext_classPrivateFieldGet(_editModeAC, this)?.abort();
freetext_classPrivateFieldSet(_editModeAC, this, null);
this.div.focus({
preventScroll: true
});
this.isEditing = false;
this.parent.div.classList.add("freetextEditing");
return true;
}
focusin(event) {
if (!this._focusEventsAllowed) {
return;
}
super.focusin(event);
if (event.target !== this.editorDiv) {
this.editorDiv.focus();
}
}
onceAdded(focus) {
if (this.width) {
return;
}
this.enableEditMode();
if (focus) {
this.editorDiv.focus();
}
if (this._initialOptions?.isCentered) {
this.center();
}
this._initialOptions = null;
}
isEmpty() {
return !this.editorDiv || this.editorDiv.innerText.trim() === "";
}
remove() {
this.isEditing = false;
if (this.parent) {
this.parent.setEditingState(true);
this.parent.div.classList.add("freetextEditing");
}
super.remove();
}
commit() {
if (!this.isInEditMode()) {
return;
}
super.commit();
this.disableEditMode();
const savedText = freetext_classPrivateFieldGet(_content, this);
const newText = freetext_classPrivateFieldSet(_content, this, freetext_assertClassBrand(_FreeTextEditor_brand, this, _extractText).call(this).trimEnd());
if (savedText === newText) {
return;
}
const setText = text => {
freetext_classPrivateFieldSet(_content, this, text);
if (!text) {
this.remove();
return;
}
freetext_assertClassBrand(_FreeTextEditor_brand, this, _setContent).call(this);
this._uiManager.rebuild(this);
freetext_assertClassBrand(_FreeTextEditor_brand, this, _setEditorDimensions).call(this);
};
this.addCommands({
cmd: () => {
setText(newText);
},
undo: () => {
setText(savedText);
},
mustExec: false
});
freetext_assertClassBrand(_FreeTextEditor_brand, this, _setEditorDimensions).call(this);
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "commit",
page: this.pageIndex + 1,
value: newText,
previousValue: savedText
});
}
shouldGetKeyboardEvents() {
return this.isInEditMode();
}
enterInEditMode() {
this.enableEditMode();
this.editorDiv.focus();
}
keydown(event) {
if (event.target === this.div && event.key === "Enter") {
this.enterInEditMode();
event.preventDefault();
}
}
editorDivKeydown(event) {
FreeTextEditor._keyboardManager.exec(this, event);
}
editorDivFocus(event) {
this.isEditing = true;
}
editorDivBlur(event) {
this.isEditing = false;
}
editorDivInput(event) {
this.parent.div.classList.toggle("freetextEditing", this.isEmpty());
}
disableEditing() {
this.editorDiv.setAttribute("role", "comment");
this.editorDiv.removeAttribute("aria-multiline");
}
enableEditing() {
this.editorDiv.setAttribute("role", "textbox");
this.editorDiv.setAttribute("aria-multiline", true);
}
get canChangeContent() {
return true;
}
render() {
if (this.div) {
return this.div;
}
let baseX, baseY;
if (this._isCopy || this.annotationElementId) {
baseX = this.x;
baseY = this.y;
}
super.render();
this.editorDiv = document.createElement("div");
this.editorDiv.className = "internal";
this.editorDiv.setAttribute("id", freetext_classPrivateFieldGet(_editorDivId, this));
this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text2");
this.editorDiv.setAttribute("data-l10n-attrs", "default-content");
this.enableEditing();
this.editorDiv.contentEditable = true;
const {
style
} = this.editorDiv;
style.fontSize = `calc(${freetext_classPrivateFieldGet(_fontSize, this)}px * var(--total-scale-factor))`;
style.color = freetext_classPrivateFieldGet(freetext_color, this);
this.div.append(this.editorDiv);
this.overlayDiv = document.createElement("div");
this.overlayDiv.classList.add("overlay", "enabled");
this.div.append(this.overlayDiv);
if (this._isCopy || this.annotationElementId) {
const [parentWidth, parentHeight] = this.parentDimensions;
if (this.annotationElementId) {
const {
position
} = this._initialData;
let [tx, ty] = this.getInitialTranslation();
[tx, ty] = this.pageTranslationToScreen(tx, ty);
const [pageWidth, pageHeight] = this.pageDimensions;
const [pageX, pageY] = this.pageTranslation;
let posX, posY;
switch (this.rotation) {
case 0:
posX = baseX + (position[0] - pageX) / pageWidth;
posY = baseY + this.height - (position[1] - pageY) / pageHeight;
break;
case 90:
posX = baseX + (position[0] - pageX) / pageWidth;
posY = baseY - (position[1] - pageY) / pageHeight;
[tx, ty] = [ty, -tx];
break;
case 180:
posX = baseX - this.width + (position[0] - pageX) / pageWidth;
posY = baseY - (position[1] - pageY) / pageHeight;
[tx, ty] = [-tx, -ty];
break;
case 270:
posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth;
posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight;
[tx, ty] = [-ty, tx];
break;
}
this.setAt(posX * parentWidth, posY * parentHeight, tx, ty);
} else {
this._moveAfterPaste(baseX, baseY);
}
freetext_assertClassBrand(_FreeTextEditor_brand, this, _setContent).call(this);
this._isDraggable = true;
this.editorDiv.contentEditable = false;
} else {
this._isDraggable = false;
this.editorDiv.contentEditable = true;
}
return this.div;
}
editorDivPaste(event) {
const clipboardData = event.clipboardData || window.clipboardData;
const {
types
} = clipboardData;
if (types.length === 1 && types[0] === "text/plain") {
return;
}
event.preventDefault();
const paste = _deserializeContent.call(FreeTextEditor, clipboardData.getData("text") || "").replaceAll(EOL_PATTERN, "\n");
if (!paste) {
return;
}
const selection = window.getSelection();
if (!selection.rangeCount) {
return;
}
this.editorDiv.normalize();
selection.deleteFromDocument();
const range = selection.getRangeAt(0);
if (!paste.includes("\n")) {
range.insertNode(document.createTextNode(paste));
this.editorDiv.normalize();
selection.collapseToStart();
return;
}
const {
startContainer,
startOffset
} = range;
const bufferBefore = [];
const bufferAfter = [];
if (startContainer.nodeType === Node.TEXT_NODE) {
const parent = startContainer.parentElement;
bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, ""));
if (parent !== this.editorDiv) {
let buffer = bufferBefore;
for (const child of this.editorDiv.childNodes) {
if (child === parent) {
buffer = bufferAfter;
continue;
}
buffer.push(_getNodeContent.call(FreeTextEditor, child));
}
}
bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, ""));
} else if (startContainer === this.editorDiv) {
let buffer = bufferBefore;
let i = 0;
for (const child of this.editorDiv.childNodes) {
if (i++ === startOffset) {
buffer = bufferAfter;
}
buffer.push(_getNodeContent.call(FreeTextEditor, child));
}
}
freetext_classPrivateFieldSet(_content, this, `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`);
freetext_assertClassBrand(_FreeTextEditor_brand, this, _setContent).call(this);
const newRange = new Range();
let beforeLength = Math.sumPrecise(bufferBefore.map(line => line.length));
for (const {
firstChild
} of this.editorDiv.childNodes) {
if (firstChild.nodeType === Node.TEXT_NODE) {
const length = firstChild.nodeValue.length;
if (beforeLength <= length) {
newRange.setStart(firstChild, beforeLength);
newRange.setEnd(firstChild, beforeLength);
break;
}
beforeLength -= length;
}
}
selection.removeAllRanges();
selection.addRange(newRange);
}
get contentDiv() {
return this.editorDiv;
}
static async deserialize(data, parent, uiManager) {
let initialData = null;
if (data instanceof FreeTextAnnotationElement) {
const {
data: {
defaultAppearanceData: {
fontSize,
fontColor
},
rect,
rotation,
id,
popupRef
},
textContent,
textPosition,
parent: {
page: {
pageNumber
}
}
} = data;
if (!textContent || textContent.length === 0) {
return null;
}
initialData = data = {
annotationType: AnnotationEditorType.FREETEXT,
color: Array.from(fontColor),
fontSize,
value: textContent.join("\n"),
position: textPosition,
pageIndex: pageNumber - 1,
rect: rect.slice(0),
rotation,
id,
deleted: false,
popupRef
};
}
const editor = await super.deserialize(data, parent, uiManager);
freetext_classPrivateFieldSet(_fontSize, editor, data.fontSize);
freetext_classPrivateFieldSet(freetext_color, editor, Util.makeHexColor(...data.color));
freetext_classPrivateFieldSet(_content, editor, _deserializeContent.call(FreeTextEditor, data.value));
editor.annotationElementId = data.id || null;
editor._initialData = initialData;
return editor;
}
serialize() {
let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.isEmpty()) {
return null;
}
if (this.deleted) {
return this.serializeDeleted();
}
const padding = FreeTextEditor._internalPadding * this.parentScale;
const rect = this.getRect(padding, padding);
const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : freetext_classPrivateFieldGet(freetext_color, this));
const serialized = {
annotationType: AnnotationEditorType.FREETEXT,
color,
fontSize: freetext_classPrivateFieldGet(_fontSize, this),
value: freetext_assertClassBrand(_FreeTextEditor_brand, this, _serializeContent).call(this),
pageIndex: this.pageIndex,
rect,
rotation: this.rotation,
structTreeParentId: this._structTreeParentId
};
if (isForCopying) {
serialized.isCopy = true;
return serialized;
}
if (this.annotationElementId && !freetext_assertClassBrand(_FreeTextEditor_brand, this, _hasElementChanged).call(this, serialized)) {
return null;
}
serialized.id = this.annotationElementId;
return serialized;
}
renderAnnotationElement(annotation) {
const content = super.renderAnnotationElement(annotation);
if (this.deleted) {
return content;
}
const {
style
} = content;
style.fontSize = `calc(${freetext_classPrivateFieldGet(_fontSize, this)}px * var(--total-scale-factor))`;
style.color = freetext_classPrivateFieldGet(freetext_color, this);
content.replaceChildren();
for (const line of freetext_classPrivateFieldGet(_content, this).split("\n")) {
const div = document.createElement("div");
div.append(line ? document.createTextNode(line) : document.createElement("br"));
content.append(div);
}
const padding = FreeTextEditor._internalPadding * this.parentScale;
annotation.updateEdited({
rect: this.getRect(padding, padding),
popupContent: freetext_classPrivateFieldGet(_content, this)
});
return content;
}
resetAnnotationElement(annotation) {
super.resetAnnotationElement(annotation);
annotation.resetEdited();
}
}
_FreeTextEditor = FreeTextEditor;
function _updateFontSize(fontSize) {
const setFontsize = size => {
this.editorDiv.style.fontSize = `calc(${size}px * var(--total-scale-factor))`;
this.translate(0, -(size - freetext_classPrivateFieldGet(_fontSize, this)) * this.parentScale);
freetext_classPrivateFieldSet(_fontSize, this, size);
freetext_assertClassBrand(_FreeTextEditor_brand, this, _setEditorDimensions).call(this);
};
const savedFontsize = freetext_classPrivateFieldGet(_fontSize, this);
this.addCommands({
cmd: setFontsize.bind(this, fontSize),
undo: setFontsize.bind(this, savedFontsize),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: true,
type: AnnotationEditorParamsType.FREETEXT_SIZE,
overwriteIfSameType: true,
keepUndo: true
});
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "fontSizeChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: fontSize,
previousValue: freetext_classPrivateFieldGet(_fontSize, this)
});
}
function _updateColor(color) {
const setColor = col => {
freetext_classPrivateFieldSet(freetext_color, this, this.editorDiv.style.color = col);
};
const savedColor = freetext_classPrivateFieldGet(freetext_color, this);
this.addCommands({
cmd: setColor.bind(this, color),
undo: setColor.bind(this, savedColor),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: true,
type: AnnotationEditorParamsType.FREETEXT_COLOR,
overwriteIfSameType: true,
keepUndo: true
});
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "colorChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: color,
previousValue: freetext_classPrivateFieldGet(freetext_color, this)
});
}
function _extractText() {
const buffer = [];
this.editorDiv.normalize();
let prevChild = null;
for (const child of this.editorDiv.childNodes) {
if (prevChild?.nodeType === Node.TEXT_NODE && child.nodeName === "BR") {
continue;
}
buffer.push(_getNodeContent.call(_FreeTextEditor, child));
prevChild = child;
}
return buffer.join("\n");
}
function _setEditorDimensions() {
const [parentWidth, parentHeight] = this.parentDimensions;
let rect;
if (this.isAttachedToDOM) {
rect = this.div.getBoundingClientRect();
} else {
const {
currentLayer,
div
} = this;
const savedDisplay = div.style.display;
const savedVisibility = div.classList.contains("hidden");
div.classList.remove("hidden");
div.style.display = "hidden";
currentLayer.div.append(this.div);
rect = div.getBoundingClientRect();
div.remove();
div.style.display = savedDisplay;
div.classList.toggle("hidden", savedVisibility);
}
if (this.rotation % 180 === this.parentRotation % 180) {
this.width = rect.width / parentWidth;
this.height = rect.height / parentHeight;
} else {
this.width = rect.height / parentWidth;
this.height = rect.width / parentHeight;
}
this.fixAndSetPosition();
}
function _getNodeContent(node) {
return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, "");
}
function _setContent() {
this.editorDiv.replaceChildren();
if (!freetext_classPrivateFieldGet(_content, this)) {
return;
}
for (const line of freetext_classPrivateFieldGet(_content, this).split("\n")) {
const div = document.createElement("div");
div.append(line ? document.createTextNode(line) : document.createElement("br"));
this.editorDiv.append(div);
}
}
function _serializeContent() {
return freetext_classPrivateFieldGet(_content, this).replaceAll("\xa0", " ");
}
function _deserializeContent(content) {
return content.replaceAll(" ", "\xa0");
}
function _hasElementChanged(serialized) {
const {
value,
fontSize,
color,
pageIndex
} = this._initialData;
return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;
}
freetext_defineProperty(FreeTextEditor, "_freeTextDefaultContent", "");
freetext_defineProperty(FreeTextEditor, "_internalPadding", 0);
freetext_defineProperty(FreeTextEditor, "_defaultColor", null);
freetext_defineProperty(FreeTextEditor, "_defaultFontSize", 10);
freetext_defineProperty(FreeTextEditor, "_type", "freetext");
freetext_defineProperty(FreeTextEditor, "_editorType", AnnotationEditorType.FREETEXT);
;// ./src/display/editor/drawers/outline.js
function outline_defineProperty(e, r, t) { return (r = outline_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function outline_toPropertyKey(t) { var i = outline_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function outline_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class Outline {
toSVGPath() {
unreachable("Abstract method `toSVGPath` must be implemented.");
}
get box() {
unreachable("Abstract getter `box` must be implemented.");
}
serialize(_bbox, _rotation) {
unreachable("Abstract method `serialize` must be implemented.");
}
static _rescale(src, tx, ty, sx, sy, dest) {
dest ||= new Float32Array(src.length);
for (let i = 0, ii = src.length; i < ii; i += 2) {
dest[i] = tx + src[i] * sx;
dest[i + 1] = ty + src[i + 1] * sy;
}
return dest;
}
static _rescaleAndSwap(src, tx, ty, sx, sy, dest) {
dest ||= new Float32Array(src.length);
for (let i = 0, ii = src.length; i < ii; i += 2) {
dest[i] = tx + src[i + 1] * sx;
dest[i + 1] = ty + src[i] * sy;
}
return dest;
}
static _translate(src, tx, ty, dest) {
dest ||= new Float32Array(src.length);
for (let i = 0, ii = src.length; i < ii; i += 2) {
dest[i] = tx + src[i];
dest[i + 1] = ty + src[i + 1];
}
return dest;
}
static svgRound(x) {
return Math.round(x * 10000);
}
static _normalizePoint(x, y, parentWidth, parentHeight, rotation) {
switch (rotation) {
case 90:
return [1 - y / parentWidth, x / parentHeight];
case 180:
return [1 - x / parentWidth, 1 - y / parentHeight];
case 270:
return [y / parentWidth, 1 - x / parentHeight];
default:
return [x / parentWidth, y / parentHeight];
}
}
static _normalizePagePoint(x, y, rotation) {
switch (rotation) {
case 90:
return [1 - y, x];
case 180:
return [1 - x, 1 - y];
case 270:
return [y, 1 - x];
default:
return [x, y];
}
}
static createBezierPoints(x1, y1, x2, y2, x3, y3) {
return [(x1 + 5 * x2) / 6, (y1 + 5 * y2) / 6, (5 * x2 + x3) / 6, (5 * y2 + y3) / 6, (x2 + x3) / 2, (y2 + y3) / 2];
}
}
outline_defineProperty(Outline, "PRECISION", 1e-4);
;// ./src/display/editor/drawers/freedraw.js
function freedraw_classPrivateMethodInitSpec(e, a) { freedraw_checkPrivateRedeclaration(e, a), a.add(e); }
function freedraw_classPrivateFieldInitSpec(e, t, a) { freedraw_checkPrivateRedeclaration(e, t), t.set(e, a); }
function freedraw_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function freedraw_classPrivateFieldGet(s, a) { return s.get(freedraw_assertClassBrand(s, a)); }
function freedraw_classPrivateFieldSet(s, a, r) { return s.set(freedraw_assertClassBrand(s, a), r), r; }
function freedraw_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _box = /*#__PURE__*/new WeakMap();
var _bottom = /*#__PURE__*/new WeakMap();
var _innerMargin = /*#__PURE__*/new WeakMap();
var _isLTR = /*#__PURE__*/new WeakMap();
var _top = /*#__PURE__*/new WeakMap();
var _last = /*#__PURE__*/new WeakMap();
var _lastX = /*#__PURE__*/new WeakMap();
var _lastY = /*#__PURE__*/new WeakMap();
var _min = /*#__PURE__*/new WeakMap();
var _min_dist = /*#__PURE__*/new WeakMap();
var _scaleFactor = /*#__PURE__*/new WeakMap();
var _thickness = /*#__PURE__*/new WeakMap();
var _points = /*#__PURE__*/new WeakMap();
var _FreeDrawOutliner_brand = /*#__PURE__*/new WeakSet();
class FreeDrawOutliner {
constructor(_ref, box, scaleFactor, thickness, isLTR) {
let {
x: _x,
y: _y
} = _ref;
let innerMargin = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
freedraw_classPrivateMethodInitSpec(this, _FreeDrawOutliner_brand);
freedraw_classPrivateFieldInitSpec(this, _box, void 0);
freedraw_classPrivateFieldInitSpec(this, _bottom, []);
freedraw_classPrivateFieldInitSpec(this, _innerMargin, void 0);
freedraw_classPrivateFieldInitSpec(this, _isLTR, void 0);
freedraw_classPrivateFieldInitSpec(this, _top, []);
freedraw_classPrivateFieldInitSpec(this, _last, new Float32Array(18));
freedraw_classPrivateFieldInitSpec(this, _lastX, void 0);
freedraw_classPrivateFieldInitSpec(this, _lastY, void 0);
freedraw_classPrivateFieldInitSpec(this, _min, void 0);
freedraw_classPrivateFieldInitSpec(this, _min_dist, void 0);
freedraw_classPrivateFieldInitSpec(this, _scaleFactor, void 0);
freedraw_classPrivateFieldInitSpec(this, _thickness, void 0);
freedraw_classPrivateFieldInitSpec(this, _points, []);
freedraw_classPrivateFieldSet(_box, this, box);
freedraw_classPrivateFieldSet(_thickness, this, thickness * scaleFactor);
freedraw_classPrivateFieldSet(_isLTR, this, isLTR);
freedraw_classPrivateFieldGet(_last, this).set([NaN, NaN, NaN, NaN, _x, _y], 6);
freedraw_classPrivateFieldSet(_innerMargin, this, innerMargin);
freedraw_classPrivateFieldSet(_min_dist, this, _MIN_DIST._ * scaleFactor);
freedraw_classPrivateFieldSet(_min, this, _MIN._ * scaleFactor);
freedraw_classPrivateFieldSet(_scaleFactor, this, scaleFactor);
freedraw_classPrivateFieldGet(_points, this).push(_x, _y);
}
isEmpty() {
return isNaN(freedraw_classPrivateFieldGet(_last, this)[8]);
}
add(_ref2) {
let {
x,
y
} = _ref2;
freedraw_classPrivateFieldSet(_lastX, this, x);
freedraw_classPrivateFieldSet(_lastY, this, y);
const [layerX, layerY, layerWidth, layerHeight] = freedraw_classPrivateFieldGet(_box, this);
let [x1, y1, x2, y2] = freedraw_classPrivateFieldGet(_last, this).subarray(8, 12);
const diffX = x - x2;
const diffY = y - y2;
const d = Math.hypot(diffX, diffY);
if (d < freedraw_classPrivateFieldGet(_min, this)) {
return false;
}
const diffD = d - freedraw_classPrivateFieldGet(_min_dist, this);
const K = diffD / d;
const shiftX = K * diffX;
const shiftY = K * diffY;
let x0 = x1;
let y0 = y1;
x1 = x2;
y1 = y2;
x2 += shiftX;
y2 += shiftY;
freedraw_classPrivateFieldGet(_points, this)?.push(x, y);
const nX = -shiftY / diffD;
const nY = shiftX / diffD;
const thX = nX * freedraw_classPrivateFieldGet(_thickness, this);
const thY = nY * freedraw_classPrivateFieldGet(_thickness, this);
freedraw_classPrivateFieldGet(_last, this).set(freedraw_classPrivateFieldGet(_last, this).subarray(2, 8), 0);
freedraw_classPrivateFieldGet(_last, this).set([x2 + thX, y2 + thY], 4);
freedraw_classPrivateFieldGet(_last, this).set(freedraw_classPrivateFieldGet(_last, this).subarray(14, 18), 12);
freedraw_classPrivateFieldGet(_last, this).set([x2 - thX, y2 - thY], 16);
if (isNaN(freedraw_classPrivateFieldGet(_last, this)[6])) {
if (freedraw_classPrivateFieldGet(_top, this).length === 0) {
freedraw_classPrivateFieldGet(_last, this).set([x1 + thX, y1 + thY], 2);
freedraw_classPrivateFieldGet(_top, this).push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight);
freedraw_classPrivateFieldGet(_last, this).set([x1 - thX, y1 - thY], 14);
freedraw_classPrivateFieldGet(_bottom, this).push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight);
}
freedraw_classPrivateFieldGet(_last, this).set([x0, y0, x1, y1, x2, y2], 6);
return !this.isEmpty();
}
freedraw_classPrivateFieldGet(_last, this).set([x0, y0, x1, y1, x2, y2], 6);
const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX));
if (angle < Math.PI / 2) {
[x1, y1, x2, y2] = freedraw_classPrivateFieldGet(_last, this).subarray(2, 6);
freedraw_classPrivateFieldGet(_top, this).push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);
[x1, y1, x0, y0] = freedraw_classPrivateFieldGet(_last, this).subarray(14, 18);
freedraw_classPrivateFieldGet(_bottom, this).push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight);
return true;
}
[x0, y0, x1, y1, x2, y2] = freedraw_classPrivateFieldGet(_last, this).subarray(0, 6);
freedraw_classPrivateFieldGet(_top, this).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);
[x2, y2, x1, y1, x0, y0] = freedraw_classPrivateFieldGet(_last, this).subarray(12, 18);
freedraw_classPrivateFieldGet(_bottom, this).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);
return true;
}
toSVGPath() {
if (this.isEmpty()) {
return "";
}
const top = freedraw_classPrivateFieldGet(_top, this);
const bottom = freedraw_classPrivateFieldGet(_bottom, this);
if (isNaN(freedraw_classPrivateFieldGet(_last, this)[6]) && !this.isEmpty()) {
return freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _toSVGPathTwoPoints).call(this);
}
const buffer = [];
buffer.push(`M${top[4]} ${top[5]}`);
for (let i = 6; i < top.length; i += 6) {
if (isNaN(top[i])) {
buffer.push(`L${top[i + 4]} ${top[i + 5]}`);
} else {
buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`);
}
}
freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _toSVGPathEnd).call(this, buffer);
for (let i = bottom.length - 6; i >= 6; i -= 6) {
if (isNaN(bottom[i])) {
buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`);
} else {
buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`);
}
}
freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _toSVGPathStart).call(this, buffer);
return buffer.join(" ");
}
newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {
return new FreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR);
}
getOutlines() {
const top = freedraw_classPrivateFieldGet(_top, this);
const bottom = freedraw_classPrivateFieldGet(_bottom, this);
const last = freedraw_classPrivateFieldGet(_last, this);
const [layerX, layerY, layerWidth, layerHeight] = freedraw_classPrivateFieldGet(_box, this);
const points = new Float32Array((freedraw_classPrivateFieldGet(_points, this)?.length ?? 0) + 2);
for (let i = 0, ii = points.length - 2; i < ii; i += 2) {
points[i] = (freedraw_classPrivateFieldGet(_points, this)[i] - layerX) / layerWidth;
points[i + 1] = (freedraw_classPrivateFieldGet(_points, this)[i + 1] - layerY) / layerHeight;
}
points[points.length - 2] = (freedraw_classPrivateFieldGet(_lastX, this) - layerX) / layerWidth;
points[points.length - 1] = (freedraw_classPrivateFieldGet(_lastY, this) - layerY) / layerHeight;
if (isNaN(last[6]) && !this.isEmpty()) {
return freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getOutlineTwoPoints).call(this, points);
}
const outline = new Float32Array(freedraw_classPrivateFieldGet(_top, this).length + 24 + freedraw_classPrivateFieldGet(_bottom, this).length);
let N = top.length;
for (let i = 0; i < N; i += 2) {
if (isNaN(top[i])) {
outline[i] = outline[i + 1] = NaN;
continue;
}
outline[i] = top[i];
outline[i + 1] = top[i + 1];
}
N = freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getOutlineEnd).call(this, outline, N);
for (let i = bottom.length - 6; i >= 6; i -= 6) {
for (let j = 0; j < 6; j += 2) {
if (isNaN(bottom[i + j])) {
outline[N] = outline[N + 1] = NaN;
N += 2;
continue;
}
outline[N] = bottom[i + j];
outline[N + 1] = bottom[i + j + 1];
N += 2;
}
}
freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getOutlineStart).call(this, outline, N);
return this.newFreeDrawOutline(outline, points, freedraw_classPrivateFieldGet(_box, this), freedraw_classPrivateFieldGet(_scaleFactor, this), freedraw_classPrivateFieldGet(_innerMargin, this), freedraw_classPrivateFieldGet(_isLTR, this));
}
}
function _getLastCoords() {
const lastTop = freedraw_classPrivateFieldGet(_last, this).subarray(4, 6);
const lastBottom = freedraw_classPrivateFieldGet(_last, this).subarray(16, 18);
const [x, y, width, height] = freedraw_classPrivateFieldGet(_box, this);
return [(freedraw_classPrivateFieldGet(_lastX, this) + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (freedraw_classPrivateFieldGet(_lastY, this) + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (freedraw_classPrivateFieldGet(_lastX, this) + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (freedraw_classPrivateFieldGet(_lastY, this) + (lastBottom[1] - lastTop[1]) / 2 - y) / height];
}
function _toSVGPathTwoPoints() {
const [x, y, width, height] = freedraw_classPrivateFieldGet(_box, this);
const [lastTopX, lastTopY, lastBottomX, lastBottomY] = freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getLastCoords).call(this);
return `M${(freedraw_classPrivateFieldGet(_last, this)[2] - x) / width} ${(freedraw_classPrivateFieldGet(_last, this)[3] - y) / height} L${(freedraw_classPrivateFieldGet(_last, this)[4] - x) / width} ${(freedraw_classPrivateFieldGet(_last, this)[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(freedraw_classPrivateFieldGet(_last, this)[16] - x) / width} ${(freedraw_classPrivateFieldGet(_last, this)[17] - y) / height} L${(freedraw_classPrivateFieldGet(_last, this)[14] - x) / width} ${(freedraw_classPrivateFieldGet(_last, this)[15] - y) / height} Z`;
}
function _toSVGPathStart(buffer) {
const bottom = freedraw_classPrivateFieldGet(_bottom, this);
buffer.push(`L${bottom[4]} ${bottom[5]} Z`);
}
function _toSVGPathEnd(buffer) {
const [x, y, width, height] = freedraw_classPrivateFieldGet(_box, this);
const lastTop = freedraw_classPrivateFieldGet(_last, this).subarray(4, 6);
const lastBottom = freedraw_classPrivateFieldGet(_last, this).subarray(16, 18);
const [lastTopX, lastTopY, lastBottomX, lastBottomY] = freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getLastCoords).call(this);
buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`);
}
function _getOutlineTwoPoints(points) {
const last = freedraw_classPrivateFieldGet(_last, this);
const [layerX, layerY, layerWidth, layerHeight] = freedraw_classPrivateFieldGet(_box, this);
const [lastTopX, lastTopY, lastBottomX, lastBottomY] = freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getLastCoords).call(this);
const outline = new Float32Array(36);
outline.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0);
return this.newFreeDrawOutline(outline, points, freedraw_classPrivateFieldGet(_box, this), freedraw_classPrivateFieldGet(_scaleFactor, this), freedraw_classPrivateFieldGet(_innerMargin, this), freedraw_classPrivateFieldGet(_isLTR, this));
}
function _getOutlineStart(outline, pos) {
const bottom = freedraw_classPrivateFieldGet(_bottom, this);
outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], pos);
return pos += 6;
}
function _getOutlineEnd(outline, pos) {
const lastTop = freedraw_classPrivateFieldGet(_last, this).subarray(4, 6);
const lastBottom = freedraw_classPrivateFieldGet(_last, this).subarray(16, 18);
const [layerX, layerY, layerWidth, layerHeight] = freedraw_classPrivateFieldGet(_box, this);
const [lastTopX, lastTopY, lastBottomX, lastBottomY] = freedraw_assertClassBrand(_FreeDrawOutliner_brand, this, _getLastCoords).call(this);
outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], pos);
return pos += 24;
}
var _MIN_DIST = {
_: 8
};
var _MIN_DIFF = {
_: 2
};
var _MIN = {
_: _MIN_DIST._ + _MIN_DIFF._
};
var _box2 = /*#__PURE__*/new WeakMap();
var _bbox = /*#__PURE__*/new WeakMap();
var _innerMargin2 = /*#__PURE__*/new WeakMap();
var _isLTR2 = /*#__PURE__*/new WeakMap();
var _points2 = /*#__PURE__*/new WeakMap();
var _scaleFactor2 = /*#__PURE__*/new WeakMap();
var _outline = /*#__PURE__*/new WeakMap();
var _FreeDrawOutline_brand = /*#__PURE__*/new WeakSet();
class FreeDrawOutline extends Outline {
constructor(_outline2, points, box, scaleFactor, innerMargin, _isLTR3) {
super();
freedraw_classPrivateMethodInitSpec(this, _FreeDrawOutline_brand);
freedraw_classPrivateFieldInitSpec(this, _box2, void 0);
freedraw_classPrivateFieldInitSpec(this, _bbox, new Float32Array(4));
freedraw_classPrivateFieldInitSpec(this, _innerMargin2, void 0);
freedraw_classPrivateFieldInitSpec(this, _isLTR2, void 0);
freedraw_classPrivateFieldInitSpec(this, _points2, void 0);
freedraw_classPrivateFieldInitSpec(this, _scaleFactor2, void 0);
freedraw_classPrivateFieldInitSpec(this, _outline, void 0);
freedraw_classPrivateFieldSet(_outline, this, _outline2);
freedraw_classPrivateFieldSet(_points2, this, points);
freedraw_classPrivateFieldSet(_box2, this, box);
freedraw_classPrivateFieldSet(_scaleFactor2, this, scaleFactor);
freedraw_classPrivateFieldSet(_innerMargin2, this, innerMargin);
freedraw_classPrivateFieldSet(_isLTR2, this, _isLTR3);
this.lastPoint = [NaN, NaN];
freedraw_assertClassBrand(_FreeDrawOutline_brand, this, _computeMinMax).call(this, _isLTR3);
const [_x2, _y2, width, height] = freedraw_classPrivateFieldGet(_bbox, this);
for (let i = 0, ii = _outline2.length; i < ii; i += 2) {
_outline2[i] = (_outline2[i] - _x2) / width;
_outline2[i + 1] = (_outline2[i + 1] - _y2) / height;
}
for (let i = 0, ii = points.length; i < ii; i += 2) {
points[i] = (points[i] - _x2) / width;
points[i + 1] = (points[i + 1] - _y2) / height;
}
}
toSVGPath() {
const buffer = [`M${freedraw_classPrivateFieldGet(_outline, this)[4]} ${freedraw_classPrivateFieldGet(_outline, this)[5]}`];
for (let i = 6, ii = freedraw_classPrivateFieldGet(_outline, this).length; i < ii; i += 6) {
if (isNaN(freedraw_classPrivateFieldGet(_outline, this)[i])) {
buffer.push(`L${freedraw_classPrivateFieldGet(_outline, this)[i + 4]} ${freedraw_classPrivateFieldGet(_outline, this)[i + 5]}`);
continue;
}
buffer.push(`C${freedraw_classPrivateFieldGet(_outline, this)[i]} ${freedraw_classPrivateFieldGet(_outline, this)[i + 1]} ${freedraw_classPrivateFieldGet(_outline, this)[i + 2]} ${freedraw_classPrivateFieldGet(_outline, this)[i + 3]} ${freedraw_classPrivateFieldGet(_outline, this)[i + 4]} ${freedraw_classPrivateFieldGet(_outline, this)[i + 5]}`);
}
buffer.push("Z");
return buffer.join(" ");
}
serialize(_ref3, rotation) {
let [blX, blY, trX, trY] = _ref3;
const width = trX - blX;
const height = trY - blY;
let outline;
let points;
switch (rotation) {
case 0:
outline = Outline._rescale(freedraw_classPrivateFieldGet(_outline, this), blX, trY, width, -height);
points = Outline._rescale(freedraw_classPrivateFieldGet(_points2, this), blX, trY, width, -height);
break;
case 90:
outline = Outline._rescaleAndSwap(freedraw_classPrivateFieldGet(_outline, this), blX, blY, width, height);
points = Outline._rescaleAndSwap(freedraw_classPrivateFieldGet(_points2, this), blX, blY, width, height);
break;
case 180:
outline = Outline._rescale(freedraw_classPrivateFieldGet(_outline, this), trX, blY, -width, height);
points = Outline._rescale(freedraw_classPrivateFieldGet(_points2, this), trX, blY, -width, height);
break;
case 270:
outline = Outline._rescaleAndSwap(freedraw_classPrivateFieldGet(_outline, this), trX, trY, -width, -height);
points = Outline._rescaleAndSwap(freedraw_classPrivateFieldGet(_points2, this), trX, trY, -width, -height);
break;
}
return {
outline: Array.from(outline),
points: [Array.from(points)]
};
}
get box() {
return freedraw_classPrivateFieldGet(_bbox, this);
}
newOutliner(point, box, scaleFactor, thickness, isLTR) {
let innerMargin = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
return new FreeDrawOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin);
}
getNewOutline(thickness, innerMargin) {
const [x, y, width, height] = freedraw_classPrivateFieldGet(_bbox, this);
const [layerX, layerY, layerWidth, layerHeight] = freedraw_classPrivateFieldGet(_box2, this);
const sx = width * layerWidth;
const sy = height * layerHeight;
const tx = x * layerWidth + layerX;
const ty = y * layerHeight + layerY;
const outliner = this.newOutliner({
x: freedraw_classPrivateFieldGet(_points2, this)[0] * sx + tx,
y: freedraw_classPrivateFieldGet(_points2, this)[1] * sy + ty
}, freedraw_classPrivateFieldGet(_box2, this), freedraw_classPrivateFieldGet(_scaleFactor2, this), thickness, freedraw_classPrivateFieldGet(_isLTR2, this), innerMargin ?? freedraw_classPrivateFieldGet(_innerMargin2, this));
for (let i = 2; i < freedraw_classPrivateFieldGet(_points2, this).length; i += 2) {
outliner.add({
x: freedraw_classPrivateFieldGet(_points2, this)[i] * sx + tx,
y: freedraw_classPrivateFieldGet(_points2, this)[i + 1] * sy + ty
});
}
return outliner.getOutlines();
}
}
function _computeMinMax(isLTR) {
const outline = freedraw_classPrivateFieldGet(_outline, this);
let lastX = outline[4];
let lastY = outline[5];
const minMax = [lastX, lastY, lastX, lastY];
let lastPointX = lastX;
let lastPointY = lastY;
const ltrCallback = isLTR ? Math.max : Math.min;
for (let i = 6, ii = outline.length; i < ii; i += 6) {
const x = outline[i + 4],
y = outline[i + 5];
if (isNaN(outline[i])) {
Util.pointBoundingBox(x, y, minMax);
if (lastPointY < y) {
lastPointX = x;
lastPointY = y;
} else if (lastPointY === y) {
lastPointX = ltrCallback(lastPointX, x);
}
} else {
const bbox = [Infinity, Infinity, -Infinity, -Infinity];
Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6), bbox);
Util.rectBoundingBox(...bbox, minMax);
if (lastPointY < bbox[3]) {
lastPointX = bbox[2];
lastPointY = bbox[3];
} else if (lastPointY === bbox[3]) {
lastPointX = ltrCallback(lastPointX, bbox[2]);
}
}
lastX = x;
lastY = y;
}
const bbox = freedraw_classPrivateFieldGet(_bbox, this);
bbox[0] = minMax[0] - freedraw_classPrivateFieldGet(_innerMargin2, this);
bbox[1] = minMax[1] - freedraw_classPrivateFieldGet(_innerMargin2, this);
bbox[2] = minMax[2] - minMax[0] + 2 * freedraw_classPrivateFieldGet(_innerMargin2, this);
bbox[3] = minMax[3] - minMax[1] + 2 * freedraw_classPrivateFieldGet(_innerMargin2, this);
this.lastPoint = [lastPointX, lastPointY];
}
;// ./src/display/editor/drawers/highlight.js
function highlight_classPrivateMethodInitSpec(e, a) { highlight_checkPrivateRedeclaration(e, a), a.add(e); }
function highlight_classPrivateFieldInitSpec(e, t, a) { highlight_checkPrivateRedeclaration(e, t), t.set(e, a); }
function highlight_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function highlight_classPrivateFieldSet(s, a, r) { return s.set(highlight_assertClassBrand(s, a), r), r; }
function highlight_classPrivateFieldGet(s, a) { return s.get(highlight_assertClassBrand(s, a)); }
function highlight_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var highlight_box = /*#__PURE__*/new WeakMap();
var _lastPoint = /*#__PURE__*/new WeakMap();
var _verticalEdges = /*#__PURE__*/new WeakMap();
var _intervals = /*#__PURE__*/new WeakMap();
var _HighlightOutliner_brand = /*#__PURE__*/new WeakSet();
class HighlightOutliner {
constructor(boxes) {
let borderWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
let innerMargin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
let isLTR = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
highlight_classPrivateMethodInitSpec(this, _HighlightOutliner_brand);
highlight_classPrivateFieldInitSpec(this, highlight_box, void 0);
highlight_classPrivateFieldInitSpec(this, _lastPoint, void 0);
highlight_classPrivateFieldInitSpec(this, _verticalEdges, []);
highlight_classPrivateFieldInitSpec(this, _intervals, []);
const minMax = [Infinity, Infinity, -Infinity, -Infinity];
const NUMBER_OF_DIGITS = 4;
const EPSILON = 10 ** -NUMBER_OF_DIGITS;
for (const {
x,
y,
width,
height
} of boxes) {
const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON;
const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON;
const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON;
const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON;
const left = [x1, y1, y2, true];
const right = [x2, y1, y2, false];
highlight_classPrivateFieldGet(_verticalEdges, this).push(left, right);
Util.rectBoundingBox(x1, y1, x2, y2, minMax);
}
const bboxWidth = minMax[2] - minMax[0] + 2 * innerMargin;
const bboxHeight = minMax[3] - minMax[1] + 2 * innerMargin;
const shiftedMinX = minMax[0] - innerMargin;
const shiftedMinY = minMax[1] - innerMargin;
const lastEdge = highlight_classPrivateFieldGet(_verticalEdges, this).at(isLTR ? -1 : -2);
const lastPoint = [lastEdge[0], lastEdge[2]];
for (const edge of highlight_classPrivateFieldGet(_verticalEdges, this)) {
const [x, y1, y2] = edge;
edge[0] = (x - shiftedMinX) / bboxWidth;
edge[1] = (y1 - shiftedMinY) / bboxHeight;
edge[2] = (y2 - shiftedMinY) / bboxHeight;
}
highlight_classPrivateFieldSet(highlight_box, this, new Float32Array([shiftedMinX, shiftedMinY, bboxWidth, bboxHeight]));
highlight_classPrivateFieldSet(_lastPoint, this, lastPoint);
}
getOutlines() {
highlight_classPrivateFieldGet(_verticalEdges, this).sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);
const outlineVerticalEdges = [];
for (const edge of highlight_classPrivateFieldGet(_verticalEdges, this)) {
if (edge[3]) {
outlineVerticalEdges.push(...highlight_assertClassBrand(_HighlightOutliner_brand, this, _breakEdge).call(this, edge));
highlight_assertClassBrand(_HighlightOutliner_brand, this, _insert).call(this, edge);
} else {
highlight_assertClassBrand(_HighlightOutliner_brand, this, _remove).call(this, edge);
outlineVerticalEdges.push(...highlight_assertClassBrand(_HighlightOutliner_brand, this, _breakEdge).call(this, edge));
}
}
return highlight_assertClassBrand(_HighlightOutliner_brand, this, _getOutlines).call(this, outlineVerticalEdges);
}
}
function _getOutlines(outlineVerticalEdges) {
const edges = [];
const allEdges = new Set();
for (const edge of outlineVerticalEdges) {
const [x, y1, y2] = edge;
edges.push([x, y1, edge], [x, y2, edge]);
}
edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]);
for (let i = 0, ii = edges.length; i < ii; i += 2) {
const edge1 = edges[i][2];
const edge2 = edges[i + 1][2];
edge1.push(edge2);
edge2.push(edge1);
allEdges.add(edge1);
allEdges.add(edge2);
}
const outlines = [];
let outline;
while (allEdges.size > 0) {
const edge = allEdges.values().next().value;
let [x, y1, y2, edge1, edge2] = edge;
allEdges.delete(edge);
let lastPointX = x;
let lastPointY = y1;
outline = [x, y2];
outlines.push(outline);
while (true) {
let e;
if (allEdges.has(edge1)) {
e = edge1;
} else if (allEdges.has(edge2)) {
e = edge2;
} else {
break;
}
allEdges.delete(e);
[x, y1, y2, edge1, edge2] = e;
if (lastPointX !== x) {
outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2);
lastPointX = x;
}
lastPointY = lastPointY === y1 ? y2 : y1;
}
outline.push(lastPointX, lastPointY);
}
return new HighlightOutline(outlines, highlight_classPrivateFieldGet(highlight_box, this), highlight_classPrivateFieldGet(_lastPoint, this));
}
function _binarySearch(y) {
const array = highlight_classPrivateFieldGet(_intervals, this);
let start = 0;
let end = array.length - 1;
while (start <= end) {
const middle = start + end >> 1;
const y1 = array[middle][0];
if (y1 === y) {
return middle;
}
if (y1 < y) {
start = middle + 1;
} else {
end = middle - 1;
}
}
return end + 1;
}
function _insert(_ref2) {
let [, y1, y2] = _ref2;
const index = highlight_assertClassBrand(_HighlightOutliner_brand, this, _binarySearch).call(this, y1);
highlight_classPrivateFieldGet(_intervals, this).splice(index, 0, [y1, y2]);
}
function _remove(_ref3) {
let [, y1, y2] = _ref3;
const index = highlight_assertClassBrand(_HighlightOutliner_brand, this, _binarySearch).call(this, y1);
for (let i = index; i < highlight_classPrivateFieldGet(_intervals, this).length; i++) {
const [start, end] = highlight_classPrivateFieldGet(_intervals, this)[i];
if (start !== y1) {
break;
}
if (start === y1 && end === y2) {
highlight_classPrivateFieldGet(_intervals, this).splice(i, 1);
return;
}
}
for (let i = index - 1; i >= 0; i--) {
const [start, end] = highlight_classPrivateFieldGet(_intervals, this)[i];
if (start !== y1) {
break;
}
if (start === y1 && end === y2) {
highlight_classPrivateFieldGet(_intervals, this).splice(i, 1);
return;
}
}
}
function _breakEdge(edge) {
const [x, y1, y2] = edge;
const results = [[x, y1, y2]];
const index = highlight_assertClassBrand(_HighlightOutliner_brand, this, _binarySearch).call(this, y2);
for (let i = 0; i < index; i++) {
const [start, end] = highlight_classPrivateFieldGet(_intervals, this)[i];
for (let j = 0, jj = results.length; j < jj; j++) {
const [, y3, y4] = results[j];
if (end <= y3 || y4 <= start) {
continue;
}
if (y3 >= start) {
if (y4 > end) {
results[j][1] = end;
} else {
if (jj === 1) {
return [];
}
results.splice(j, 1);
j--;
jj--;
}
continue;
}
results[j][2] = start;
if (y4 > end) {
results.push([x, end, y4]);
}
}
}
return results;
}
var highlight_box2 = /*#__PURE__*/new WeakMap();
var _outlines = /*#__PURE__*/new WeakMap();
class HighlightOutline extends Outline {
constructor(outlines, box, lastPoint) {
super();
highlight_classPrivateFieldInitSpec(this, highlight_box2, void 0);
highlight_classPrivateFieldInitSpec(this, _outlines, void 0);
highlight_classPrivateFieldSet(_outlines, this, outlines);
highlight_classPrivateFieldSet(highlight_box2, this, box);
this.lastPoint = lastPoint;
}
toSVGPath() {
const buffer = [];
for (const polygon of highlight_classPrivateFieldGet(_outlines, this)) {
let [prevX, prevY] = polygon;
buffer.push(`M${prevX} ${prevY}`);
for (let i = 2; i < polygon.length; i += 2) {
const x = polygon[i];
const y = polygon[i + 1];
if (x === prevX) {
buffer.push(`V${y}`);
prevY = y;
} else if (y === prevY) {
buffer.push(`H${x}`);
prevX = x;
}
}
buffer.push("Z");
}
return buffer.join(" ");
}
serialize(_ref, _rotation) {
let [blX, blY, trX, trY] = _ref;
const outlines = [];
const width = trX - blX;
const height = trY - blY;
for (const outline of highlight_classPrivateFieldGet(_outlines, this)) {
const points = new Array(outline.length);
for (let i = 0; i < outline.length; i += 2) {
points[i] = blX + outline[i] * width;
points[i + 1] = trY - outline[i + 1] * height;
}
outlines.push(points);
}
return outlines;
}
get box() {
return highlight_classPrivateFieldGet(highlight_box2, this);
}
get classNamesForOutlining() {
return ["highlightOutline"];
}
}
class FreeHighlightOutliner extends FreeDrawOutliner {
newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) {
return new FreeHighlightOutline(outline, points, box, scaleFactor, innerMargin, isLTR);
}
}
class FreeHighlightOutline extends FreeDrawOutline {
newOutliner(point, box, scaleFactor, thickness, isLTR) {
let innerMargin = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
return new FreeHighlightOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin);
}
}
;// ./src/display/editor/color_picker.js
var _ColorPicker;
function color_picker_classPrivateMethodInitSpec(e, a) { color_picker_checkPrivateRedeclaration(e, a), a.add(e); }
function color_picker_classPrivateFieldInitSpec(e, t, a) { color_picker_checkPrivateRedeclaration(e, t), t.set(e, a); }
function color_picker_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function color_picker_classPrivateGetter(s, r, a) { return a(color_picker_assertClassBrand(s, r)); }
function color_picker_classPrivateFieldGet(s, a) { return s.get(color_picker_assertClassBrand(s, a)); }
function color_picker_classPrivateFieldSet(s, a, r) { return s.set(color_picker_assertClassBrand(s, a), r), r; }
function color_picker_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _button = /*#__PURE__*/new WeakMap();
var _buttonSwatch = /*#__PURE__*/new WeakMap();
var _defaultColor = /*#__PURE__*/new WeakMap();
var _dropdown = /*#__PURE__*/new WeakMap();
var _dropdownWasFromKeyboard = /*#__PURE__*/new WeakMap();
var _isMainColorPicker = /*#__PURE__*/new WeakMap();
var color_picker_editor = /*#__PURE__*/new WeakMap();
var _eventBus = /*#__PURE__*/new WeakMap();
var _openDropdownAC = /*#__PURE__*/new WeakMap();
var _uiManager = /*#__PURE__*/new WeakMap();
var _type = /*#__PURE__*/new WeakMap();
var _ColorPicker_brand = /*#__PURE__*/new WeakSet();
class ColorPicker {
static get _keyboardManager() {
return shadow(this, "_keyboardManager", new KeyboardManager([[["Escape", "mac+Escape"], ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], ColorPicker.prototype._moveToEnd]]));
}
constructor(_ref) {
let {
editor = null,
uiManager = null
} = _ref;
color_picker_classPrivateMethodInitSpec(this, _ColorPicker_brand);
color_picker_classPrivateFieldInitSpec(this, _button, null);
color_picker_classPrivateFieldInitSpec(this, _buttonSwatch, null);
color_picker_classPrivateFieldInitSpec(this, _defaultColor, void 0);
color_picker_classPrivateFieldInitSpec(this, _dropdown, null);
color_picker_classPrivateFieldInitSpec(this, _dropdownWasFromKeyboard, false);
color_picker_classPrivateFieldInitSpec(this, _isMainColorPicker, false);
color_picker_classPrivateFieldInitSpec(this, color_picker_editor, null);
color_picker_classPrivateFieldInitSpec(this, _eventBus, void 0);
color_picker_classPrivateFieldInitSpec(this, _openDropdownAC, null);
color_picker_classPrivateFieldInitSpec(this, _uiManager, null);
color_picker_classPrivateFieldInitSpec(this, _type, void 0);
if (editor) {
color_picker_classPrivateFieldSet(_isMainColorPicker, this, false);
color_picker_classPrivateFieldSet(_type, this, AnnotationEditorParamsType.HIGHLIGHT_COLOR);
color_picker_classPrivateFieldSet(color_picker_editor, this, editor);
} else {
color_picker_classPrivateFieldSet(_isMainColorPicker, this, true);
color_picker_classPrivateFieldSet(_type, this, AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR);
}
color_picker_classPrivateFieldSet(_uiManager, this, editor?._uiManager || uiManager);
color_picker_classPrivateFieldSet(_eventBus, this, color_picker_classPrivateFieldGet(_uiManager, this)._eventBus);
color_picker_classPrivateFieldSet(_defaultColor, this, editor?.color || color_picker_classPrivateFieldGet(_uiManager, this)?.highlightColors.values().next().value || "#FFFF98");
_l10nColor._ || (_l10nColor._ = Object.freeze({
blue: "pdfjs-editor-colorpicker-blue",
green: "pdfjs-editor-colorpicker-green",
pink: "pdfjs-editor-colorpicker-pink",
red: "pdfjs-editor-colorpicker-red",
yellow: "pdfjs-editor-colorpicker-yellow"
}));
}
renderButton() {
const button = color_picker_classPrivateFieldSet(_button, this, document.createElement("button"));
button.className = "colorPicker";
button.tabIndex = "0";
button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button");
button.setAttribute("aria-haspopup", true);
const signal = color_picker_classPrivateFieldGet(_uiManager, this)._signal;
button.addEventListener("click", color_picker_assertClassBrand(_ColorPicker_brand, this, _openDropdown).bind(this), {
signal
});
button.addEventListener("keydown", color_picker_assertClassBrand(_ColorPicker_brand, this, color_picker_keyDown).bind(this), {
signal
});
const swatch = color_picker_classPrivateFieldSet(_buttonSwatch, this, document.createElement("span"));
swatch.className = "swatch";
swatch.setAttribute("aria-hidden", true);
swatch.style.backgroundColor = color_picker_classPrivateFieldGet(_defaultColor, this);
button.append(swatch);
return button;
}
renderMainDropdown() {
const dropdown = color_picker_classPrivateFieldSet(_dropdown, this, color_picker_assertClassBrand(_ColorPicker_brand, this, _getDropdownRoot).call(this));
dropdown.setAttribute("aria-orientation", "horizontal");
dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel");
return dropdown;
}
_colorSelectFromKeyboard(event) {
if (event.target === color_picker_classPrivateFieldGet(_button, this)) {
color_picker_assertClassBrand(_ColorPicker_brand, this, _openDropdown).call(this, event);
return;
}
const color = event.target.getAttribute("data-color");
if (!color) {
return;
}
color_picker_assertClassBrand(_ColorPicker_brand, this, _colorSelect).call(this, color, event);
}
_moveToNext(event) {
if (!color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
color_picker_assertClassBrand(_ColorPicker_brand, this, _openDropdown).call(this, event);
return;
}
if (event.target === color_picker_classPrivateFieldGet(_button, this)) {
color_picker_classPrivateFieldGet(_dropdown, this).firstChild?.focus();
return;
}
event.target.nextSibling?.focus();
}
_moveToPrevious(event) {
if (event.target === color_picker_classPrivateFieldGet(_dropdown, this)?.firstChild || event.target === color_picker_classPrivateFieldGet(_button, this)) {
if (color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
this._hideDropdownFromKeyboard();
}
return;
}
if (!color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
color_picker_assertClassBrand(_ColorPicker_brand, this, _openDropdown).call(this, event);
}
event.target.previousSibling?.focus();
}
_moveToBeginning(event) {
if (!color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
color_picker_assertClassBrand(_ColorPicker_brand, this, _openDropdown).call(this, event);
return;
}
color_picker_classPrivateFieldGet(_dropdown, this).firstChild?.focus();
}
_moveToEnd(event) {
if (!color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
color_picker_assertClassBrand(_ColorPicker_brand, this, _openDropdown).call(this, event);
return;
}
color_picker_classPrivateFieldGet(_dropdown, this).lastChild?.focus();
}
hideDropdown() {
color_picker_classPrivateFieldGet(_dropdown, this)?.classList.add("hidden");
color_picker_classPrivateFieldGet(_openDropdownAC, this)?.abort();
color_picker_classPrivateFieldSet(_openDropdownAC, this, null);
}
_hideDropdownFromKeyboard() {
if (color_picker_classPrivateFieldGet(_isMainColorPicker, this)) {
return;
}
if (!color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
color_picker_classPrivateFieldGet(color_picker_editor, this)?.unselect();
return;
}
this.hideDropdown();
color_picker_classPrivateFieldGet(_button, this).focus({
preventScroll: true,
focusVisible: color_picker_classPrivateFieldGet(_dropdownWasFromKeyboard, this)
});
}
updateColor(color) {
if (color_picker_classPrivateFieldGet(_buttonSwatch, this)) {
color_picker_classPrivateFieldGet(_buttonSwatch, this).style.backgroundColor = color;
}
if (!color_picker_classPrivateFieldGet(_dropdown, this)) {
return;
}
const i = color_picker_classPrivateFieldGet(_uiManager, this).highlightColors.values();
for (const child of color_picker_classPrivateFieldGet(_dropdown, this).children) {
child.setAttribute("aria-selected", i.next().value === color);
}
}
destroy() {
color_picker_classPrivateFieldGet(_button, this)?.remove();
color_picker_classPrivateFieldSet(_button, this, null);
color_picker_classPrivateFieldSet(_buttonSwatch, this, null);
color_picker_classPrivateFieldGet(_dropdown, this)?.remove();
color_picker_classPrivateFieldSet(_dropdown, this, null);
}
}
_ColorPicker = ColorPicker;
function _getDropdownRoot() {
const div = document.createElement("div");
const signal = color_picker_classPrivateFieldGet(_uiManager, this)._signal;
div.addEventListener("contextmenu", noContextMenu, {
signal
});
div.className = "dropdown";
div.role = "listbox";
div.setAttribute("aria-multiselectable", false);
div.setAttribute("aria-orientation", "vertical");
div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown");
for (const [name, color] of color_picker_classPrivateFieldGet(_uiManager, this).highlightColors) {
const button = document.createElement("button");
button.tabIndex = "0";
button.role = "option";
button.setAttribute("data-color", color);
button.title = name;
button.setAttribute("data-l10n-id", _l10nColor._[name]);
const swatch = document.createElement("span");
button.append(swatch);
swatch.className = "swatch";
swatch.style.backgroundColor = color;
button.setAttribute("aria-selected", color === color_picker_classPrivateFieldGet(_defaultColor, this));
button.addEventListener("click", color_picker_assertClassBrand(_ColorPicker_brand, this, _colorSelect).bind(this, color), {
signal
});
div.append(button);
}
div.addEventListener("keydown", color_picker_assertClassBrand(_ColorPicker_brand, this, color_picker_keyDown).bind(this), {
signal
});
return div;
}
function _colorSelect(color, event) {
event.stopPropagation();
color_picker_classPrivateFieldGet(_eventBus, this).dispatch("switchannotationeditorparams", {
source: this,
type: color_picker_classPrivateFieldGet(_type, this),
value: color
});
}
function color_picker_keyDown(event) {
_ColorPicker._keyboardManager.exec(this, event);
}
function _openDropdown(event) {
if (color_picker_classPrivateGetter(_ColorPicker_brand, this, _get_isDropdownVisible)) {
this.hideDropdown();
return;
}
color_picker_classPrivateFieldSet(_dropdownWasFromKeyboard, this, event.detail === 0);
if (!color_picker_classPrivateFieldGet(_openDropdownAC, this)) {
color_picker_classPrivateFieldSet(_openDropdownAC, this, new AbortController());
window.addEventListener("pointerdown", color_picker_assertClassBrand(_ColorPicker_brand, this, color_picker_pointerDown).bind(this), {
signal: color_picker_classPrivateFieldGet(_uiManager, this).combinedSignal(color_picker_classPrivateFieldGet(_openDropdownAC, this))
});
}
if (color_picker_classPrivateFieldGet(_dropdown, this)) {
color_picker_classPrivateFieldGet(_dropdown, this).classList.remove("hidden");
return;
}
const root = color_picker_classPrivateFieldSet(_dropdown, this, color_picker_assertClassBrand(_ColorPicker_brand, this, _getDropdownRoot).call(this));
color_picker_classPrivateFieldGet(_button, this).append(root);
}
function color_picker_pointerDown(event) {
if (color_picker_classPrivateFieldGet(_dropdown, this)?.contains(event.target)) {
return;
}
this.hideDropdown();
}
function _get_isDropdownVisible(_this) {
return color_picker_classPrivateFieldGet(_dropdown, _this) && !color_picker_classPrivateFieldGet(_dropdown, _this).classList.contains("hidden");
}
var _l10nColor = {
_: null
};
;// ./src/display/editor/highlight.js
var _HighlightEditor;
function editor_highlight_classPrivateMethodInitSpec(e, a) { editor_highlight_checkPrivateRedeclaration(e, a), a.add(e); }
function highlight_defineProperty(e, r, t) { return (r = highlight_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function highlight_toPropertyKey(t) { var i = highlight_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function highlight_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function editor_highlight_classPrivateFieldInitSpec(e, t, a) { editor_highlight_checkPrivateRedeclaration(e, t), t.set(e, a); }
function editor_highlight_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function highlight_toSetter(t, e, n) { e || (e = []); var r = e.length++; return Object.defineProperty({}, "_", { set: function (o) { e[r] = o, t.apply(n, e); } }); }
function editor_highlight_classPrivateFieldGet(s, a) { return s.get(editor_highlight_assertClassBrand(s, a)); }
function editor_highlight_classPrivateFieldSet(s, a, r) { return s.set(editor_highlight_assertClassBrand(s, a), r), r; }
function editor_highlight_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _anchorNode = /*#__PURE__*/new WeakMap();
var _anchorOffset = /*#__PURE__*/new WeakMap();
var _boxes = /*#__PURE__*/new WeakMap();
var _clipPathId = /*#__PURE__*/new WeakMap();
var highlight_colorPicker = /*#__PURE__*/new WeakMap();
var _focusOutlines = /*#__PURE__*/new WeakMap();
var _focusNode = /*#__PURE__*/new WeakMap();
var _focusOffset = /*#__PURE__*/new WeakMap();
var _highlightDiv = /*#__PURE__*/new WeakMap();
var _highlightOutlines = /*#__PURE__*/new WeakMap();
var highlight_id = /*#__PURE__*/new WeakMap();
var _isFreeHighlight = /*#__PURE__*/new WeakMap();
var highlight_lastPoint = /*#__PURE__*/new WeakMap();
var _opacity = /*#__PURE__*/new WeakMap();
var _outlineId = /*#__PURE__*/new WeakMap();
var _text = /*#__PURE__*/new WeakMap();
var highlight_thickness = /*#__PURE__*/new WeakMap();
var _methodOfCreation = /*#__PURE__*/new WeakMap();
var _HighlightEditor_brand = /*#__PURE__*/new WeakSet();
class HighlightEditor extends AnnotationEditor {
static get _keyboardManager() {
const proto = HighlightEditor.prototype;
return shadow(this, "_keyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], proto._moveCaret, {
args: [0]
}], [["ArrowRight", "mac+ArrowRight"], proto._moveCaret, {
args: [1]
}], [["ArrowUp", "mac+ArrowUp"], proto._moveCaret, {
args: [2]
}], [["ArrowDown", "mac+ArrowDown"], proto._moveCaret, {
args: [3]
}]]));
}
constructor(params) {
super({
...params,
name: "highlightEditor"
});
editor_highlight_classPrivateMethodInitSpec(this, _HighlightEditor_brand);
editor_highlight_classPrivateFieldInitSpec(this, _anchorNode, null);
editor_highlight_classPrivateFieldInitSpec(this, _anchorOffset, 0);
editor_highlight_classPrivateFieldInitSpec(this, _boxes, void 0);
editor_highlight_classPrivateFieldInitSpec(this, _clipPathId, null);
editor_highlight_classPrivateFieldInitSpec(this, highlight_colorPicker, null);
editor_highlight_classPrivateFieldInitSpec(this, _focusOutlines, null);
editor_highlight_classPrivateFieldInitSpec(this, _focusNode, null);
editor_highlight_classPrivateFieldInitSpec(this, _focusOffset, 0);
editor_highlight_classPrivateFieldInitSpec(this, _highlightDiv, null);
editor_highlight_classPrivateFieldInitSpec(this, _highlightOutlines, null);
editor_highlight_classPrivateFieldInitSpec(this, highlight_id, null);
editor_highlight_classPrivateFieldInitSpec(this, _isFreeHighlight, false);
editor_highlight_classPrivateFieldInitSpec(this, highlight_lastPoint, null);
editor_highlight_classPrivateFieldInitSpec(this, _opacity, void 0);
editor_highlight_classPrivateFieldInitSpec(this, _outlineId, null);
editor_highlight_classPrivateFieldInitSpec(this, _text, "");
editor_highlight_classPrivateFieldInitSpec(this, highlight_thickness, void 0);
editor_highlight_classPrivateFieldInitSpec(this, _methodOfCreation, "");
this.color = params.color || HighlightEditor._defaultColor;
editor_highlight_classPrivateFieldSet(highlight_thickness, this, params.thickness || HighlightEditor._defaultThickness);
editor_highlight_classPrivateFieldSet(_opacity, this, params.opacity || HighlightEditor._defaultOpacity);
editor_highlight_classPrivateFieldSet(_boxes, this, params.boxes || null);
editor_highlight_classPrivateFieldSet(_methodOfCreation, this, params.methodOfCreation || "");
editor_highlight_classPrivateFieldSet(_text, this, params.text || "");
this._isDraggable = false;
this.defaultL10nId = "pdfjs-editor-highlight-editor";
if (params.highlightId > -1) {
editor_highlight_classPrivateFieldSet(_isFreeHighlight, this, true);
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _createFreeOutlines).call(this, params);
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _addToDrawLayer).call(this);
} else if (editor_highlight_classPrivateFieldGet(_boxes, this)) {
editor_highlight_classPrivateFieldSet(_anchorNode, this, params.anchorNode);
editor_highlight_classPrivateFieldSet(_anchorOffset, this, params.anchorOffset);
editor_highlight_classPrivateFieldSet(_focusNode, this, params.focusNode);
editor_highlight_classPrivateFieldSet(_focusOffset, this, params.focusOffset);
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _createOutlines).call(this);
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _addToDrawLayer).call(this);
this.rotate(this.rotation);
}
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "added",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: {
color: this.color,
thickness: editor_highlight_classPrivateFieldGet(highlight_thickness, this),
isFreeHighlight: editor_highlight_classPrivateFieldGet(_isFreeHighlight, this),
text: editor_highlight_classPrivateFieldGet(_text, this)
}
});
}
get telemetryInitialData() {
return {
action: "added",
type: editor_highlight_classPrivateFieldGet(_isFreeHighlight, this) ? "free_highlight" : "highlight",
color: this._uiManager.highlightColorNames.get(this.color),
thickness: editor_highlight_classPrivateFieldGet(highlight_thickness, this),
methodOfCreation: editor_highlight_classPrivateFieldGet(_methodOfCreation, this)
};
}
get telemetryFinalData() {
return {
type: "highlight",
color: this._uiManager.highlightColorNames.get(this.color)
};
}
static computeTelemetryFinalData(data) {
return {
numberOfColors: data.get("color").size
};
}
static initialize(l10n, uiManager) {
AnnotationEditor.initialize(l10n, uiManager);
HighlightEditor._defaultColor ||= uiManager.highlightColors?.values().next().value || "#fff066";
}
static updateDefaultParams(type, value) {
switch (type) {
case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:
HighlightEditor._defaultColor = value;
break;
case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:
HighlightEditor._defaultThickness = value;
break;
}
}
translateInPage(x, y) {}
get toolbarPosition() {
return editor_highlight_classPrivateFieldGet(highlight_lastPoint, this);
}
updateParams(type, value) {
switch (type) {
case AnnotationEditorParamsType.HIGHLIGHT_COLOR:
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, highlight_updateColor).call(this, value);
break;
case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _updateThickness).call(this, value);
break;
}
}
static get defaultPropertiesToUpdate() {
return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, HighlightEditor._defaultThickness]];
}
get propertiesToUpdate() {
return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, editor_highlight_classPrivateFieldGet(highlight_thickness, this) || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)]];
}
async addEditToolbar() {
const toolbar = await super.addEditToolbar();
if (!toolbar) {
return null;
}
if (this._uiManager.highlightColors) {
editor_highlight_classPrivateFieldSet(highlight_colorPicker, this, new ColorPicker({
editor: this
}));
toolbar.addColorPicker(editor_highlight_classPrivateFieldGet(highlight_colorPicker, this));
}
return toolbar;
}
disableEditing() {
super.disableEditing();
this.div.classList.toggle("disabled", true);
}
enableEditing() {
super.enableEditing();
this.div.classList.toggle("disabled", false);
}
fixAndSetPosition() {
return super.fixAndSetPosition(editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _getRotation).call(this));
}
getBaseTranslation() {
return [0, 0];
}
getRect(tx, ty) {
return super.getRect(tx, ty, editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _getRotation).call(this));
}
onceAdded(focus) {
if (!this.annotationElementId) {
this.parent.addUndoableEditor(this);
}
if (focus) {
this.div.focus();
}
}
remove() {
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _cleanDrawLayer).call(this);
this._reportTelemetry({
action: "deleted"
});
super.remove();
}
rebuild() {
if (!this.parent) {
return;
}
super.rebuild();
if (this.div === null) {
return;
}
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _addToDrawLayer).call(this);
if (!this.isAttachedToDOM) {
this.parent.add(this);
}
}
setParent(parent) {
let mustBeSelected = false;
if (this.parent && !parent) {
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _cleanDrawLayer).call(this);
} else if (parent) {
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _addToDrawLayer).call(this, parent);
mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor");
}
super.setParent(parent);
this.show(this._isVisible);
if (mustBeSelected) {
this.select();
}
}
rotate(angle) {
const {
drawLayer
} = this.parent;
let box;
if (editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)) {
angle = (angle - this.rotation + 360) % 360;
box = _rotateBbox.call(HighlightEditor, editor_highlight_classPrivateFieldGet(_highlightOutlines, this).box, angle);
} else {
box = _rotateBbox.call(HighlightEditor, [this.x, this.y, this.width, this.height], angle);
}
drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(highlight_id, this), {
bbox: box,
root: {
"data-main-rotation": angle
}
});
drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
bbox: _rotateBbox.call(HighlightEditor, editor_highlight_classPrivateFieldGet(_focusOutlines, this).box, angle),
root: {
"data-main-rotation": angle
}
});
}
render() {
if (this.div) {
return this.div;
}
const div = super.render();
if (editor_highlight_classPrivateFieldGet(_text, this)) {
div.setAttribute("aria-label", editor_highlight_classPrivateFieldGet(_text, this));
div.setAttribute("role", "mark");
}
if (editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)) {
div.classList.add("free");
} else {
this.div.addEventListener("keydown", editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _keydown).bind(this), {
signal: this._uiManager._signal
});
}
const highlightDiv = editor_highlight_classPrivateFieldSet(_highlightDiv, this, document.createElement("div"));
div.append(highlightDiv);
highlightDiv.setAttribute("aria-hidden", "true");
highlightDiv.className = "internal";
highlightDiv.style.clipPath = editor_highlight_classPrivateFieldGet(_clipPathId, this);
const [parentWidth, parentHeight] = this.parentDimensions;
this.setDims(this.width * parentWidth, this.height * parentHeight);
bindEvents(this, editor_highlight_classPrivateFieldGet(_highlightDiv, this), ["pointerover", "pointerleave"]);
this.enableEditing();
return div;
}
pointerover() {
if (!this.isSelected) {
this.parent?.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
rootClass: {
hovered: true
}
});
}
}
pointerleave() {
if (!this.isSelected) {
this.parent?.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
rootClass: {
hovered: false
}
});
}
}
_moveCaret(direction) {
this.parent.unselect(this);
switch (direction) {
case 0:
case 2:
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _setCaret).call(this, true);
break;
case 1:
case 3:
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _setCaret).call(this, false);
break;
}
}
select() {
super.select();
if (!editor_highlight_classPrivateFieldGet(_outlineId, this)) {
return;
}
this.parent?.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
rootClass: {
hovered: false,
selected: true
}
});
}
unselect() {
super.unselect();
if (!editor_highlight_classPrivateFieldGet(_outlineId, this)) {
return;
}
this.parent?.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
rootClass: {
selected: false
}
});
if (!editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)) {
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _setCaret).call(this, false);
}
}
get _mustFixPosition() {
return !editor_highlight_classPrivateFieldGet(_isFreeHighlight, this);
}
show() {
let visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._isVisible;
super.show(visible);
if (this.parent) {
this.parent.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(highlight_id, this), {
rootClass: {
hidden: !visible
}
});
this.parent.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
rootClass: {
hidden: !visible
}
});
}
}
static startHighlighting(parent, isLTR, _ref) {
let {
target: textLayer,
x,
y
} = _ref;
const {
x: layerX,
y: layerY,
width: parentWidth,
height: parentHeight
} = textLayer.getBoundingClientRect();
const ac = new AbortController();
const signal = parent.combinedSignal(ac);
const pointerUpCallback = e => {
ac.abort();
editor_highlight_assertClassBrand(HighlightEditor, this, _endHighlight).call(this, parent, e);
};
window.addEventListener("blur", pointerUpCallback, {
signal
});
window.addEventListener("pointerup", pointerUpCallback, {
signal
});
window.addEventListener("pointerdown", stopEvent, {
capture: true,
passive: false,
signal
});
window.addEventListener("contextmenu", noContextMenu, {
signal
});
textLayer.addEventListener("pointermove", editor_highlight_assertClassBrand(HighlightEditor, this, _highlightMove).bind(this, parent), {
signal
});
this._freeHighlight = new FreeHighlightOutliner({
x,
y
}, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 0.001);
({
id: this._freeHighlightId,
clipPathId: this._freeHighlightClipId
} = parent.drawLayer.draw({
bbox: [0, 0, 1, 1],
root: {
viewBox: "0 0 1 1",
fill: this._defaultColor,
"fill-opacity": this._defaultOpacity
},
rootClass: {
highlight: true,
free: true
},
path: {
d: this._freeHighlight.toSVGPath()
}
}, true, true));
}
static async deserialize(data, parent, uiManager) {
let initialData = null;
if (data instanceof HighlightAnnotationElement) {
const {
data: {
quadPoints,
rect,
rotation,
id,
color,
opacity,
popupRef
},
parent: {
page: {
pageNumber
}
}
} = data;
initialData = data = {
annotationType: AnnotationEditorType.HIGHLIGHT,
color: Array.from(color),
opacity,
quadPoints,
boxes: null,
pageIndex: pageNumber - 1,
rect: rect.slice(0),
rotation,
id,
deleted: false,
popupRef
};
} else if (data.annotationType && data.annotationType === AnnotationEditorType.HIGHLIGHT) {
let {
quadPoints,
outlines,
rect,
rotation,
id,
color,
opacity,
popupRef,
pageIndex,
thickness
} = data;
if (quadPoints) {
if (!Array.isArray(quadPoints)) {
quadPoints = Object.values(quadPoints);
}
}
let inkLists;
if (!quadPoints && outlines) {
if (Array.isArray(outlines)) {
inkLists = outlines.map(subArray => subArray);
} else if (typeof outlines === "object" && outlines.points) {
inkLists = [outlines.points.flat()];
} else {
console.error("Unexpected outlines format");
return null;
}
thickness = thickness || data.thickness || 1;
}
initialData = data = {
annotationType: AnnotationEditorType.HIGHLIGHT,
color: Array.from(color),
opacity,
quadPoints,
inkLists,
thickness,
boxes: null,
pageIndex,
rect: rect.slice(0),
rotation,
id,
deleted: false,
popupRef: popupRef || null
};
} else if (data instanceof InkAnnotationElement) {
const {
data: {
inkLists,
rect,
rotation,
id,
color,
borderStyle: {
rawWidth: thickness
},
popupRef
},
parent: {
page: {
pageNumber
}
}
} = data;
initialData = data = {
annotationType: AnnotationEditorType.HIGHLIGHT,
color: Array.from(color),
thickness,
inkLists,
boxes: null,
pageIndex: pageNumber - 1,
rect: rect.slice(0),
rotation,
id,
deleted: false,
popupRef
};
}
const {
color,
quadPoints,
inkLists,
opacity
} = data;
const editor = await super.deserialize(data, parent, uiManager);
editor.color = Util.makeHexColor(...color);
editor_highlight_classPrivateFieldSet(_opacity, editor, opacity || 1);
if (inkLists) {
editor_highlight_classPrivateFieldSet(highlight_thickness, editor, data.thickness);
}
editor.annotationElementId = data.id || null;
editor._initialData = initialData;
const [pageWidth, pageHeight] = editor.pageDimensions;
const [pageX, pageY] = editor.pageTranslation;
if (quadPoints) {
const boxes = editor_highlight_classPrivateFieldSet(_boxes, editor, []);
for (let i = 0; i < quadPoints.length; i += 8) {
boxes.push({
x: (quadPoints[i] - pageX) / pageWidth,
y: 1 - (quadPoints[i + 1] - pageY) / pageHeight,
width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth,
height: (quadPoints[i + 1] - quadPoints[i + 5]) / pageHeight
});
}
editor_highlight_assertClassBrand(_HighlightEditor_brand, editor, _createOutlines).call(editor);
editor_highlight_assertClassBrand(_HighlightEditor_brand, editor, _addToDrawLayer).call(editor);
editor.rotate(editor.rotation);
} else if (inkLists) {
editor_highlight_classPrivateFieldSet(_isFreeHighlight, editor, true);
const points = inkLists[0];
const point = {
x: points[0] - pageX,
y: pageHeight - (points[1] - pageY)
};
const outliner = new FreeHighlightOutliner(point, [0, 0, pageWidth, pageHeight], 1, editor_highlight_classPrivateFieldGet(highlight_thickness, editor) / 2, true, 0.001);
for (let i = 0, ii = points.length; i < ii; i += 2) {
point.x = points[i] - pageX;
point.y = pageHeight - (points[i + 1] - pageY);
outliner.add(point);
}
const {
id,
clipPathId
} = parent.drawLayer.draw({
bbox: [0, 0, 1, 1],
root: {
viewBox: "0 0 1 1",
fill: editor.color,
"fill-opacity": editor._defaultOpacity
},
rootClass: {
highlight: true,
free: true
},
path: {
d: outliner.toSVGPath()
}
}, true, true);
editor_highlight_assertClassBrand(_HighlightEditor_brand, editor, _createFreeOutlines).call(editor, {
highlightOutlines: outliner.getOutlines(),
highlightId: id,
clipPathId
});
editor_highlight_assertClassBrand(_HighlightEditor_brand, editor, _addToDrawLayer).call(editor);
editor.rotate(editor.parentRotation);
}
return editor;
}
serialize() {
let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.isEmpty() || isForCopying) {
return null;
}
if (this.deleted) {
return this.serializeDeleted();
}
const rect = this.getRect(0, 0);
const color = AnnotationEditor._colorManager.convert(this.color);
const serialized = {
annotationType: AnnotationEditorType.HIGHLIGHT,
color,
opacity: editor_highlight_classPrivateFieldGet(_opacity, this),
thickness: editor_highlight_classPrivateFieldGet(highlight_thickness, this),
quadPoints: editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _serializeBoxes).call(this),
outlines: editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _serializeOutlines).call(this, rect),
pageIndex: this.pageIndex,
rect,
rotation: editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _getRotation).call(this),
structTreeParentId: this._structTreeParentId
};
if (this.annotationElementId && !editor_highlight_assertClassBrand(_HighlightEditor_brand, this, highlight_hasElementChanged).call(this, serialized)) {
return null;
}
serialized.id = this.annotationElementId;
return serialized;
}
renderAnnotationElement(annotation) {
annotation.updateEdited({
rect: this.getRect(0, 0)
});
return null;
}
static canCreateNewEmptyEditor() {
return false;
}
}
_HighlightEditor = HighlightEditor;
function _createOutlines() {
const outliner = new HighlightOutliner(editor_highlight_classPrivateFieldGet(_boxes, this), 0.001);
editor_highlight_classPrivateFieldSet(_highlightOutlines, this, outliner.getOutlines());
[this.x, this.y, this.width, this.height] = editor_highlight_classPrivateFieldGet(_highlightOutlines, this).box;
const outlinerForOutline = new HighlightOutliner(editor_highlight_classPrivateFieldGet(_boxes, this), 0.0025, 0.001, this._uiManager.direction === "ltr");
editor_highlight_classPrivateFieldSet(_focusOutlines, this, outlinerForOutline.getOutlines());
const {
lastPoint
} = editor_highlight_classPrivateFieldGet(_focusOutlines, this);
editor_highlight_classPrivateFieldSet(highlight_lastPoint, this, [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]);
}
function _createFreeOutlines(_ref2) {
let {
highlightOutlines,
highlightId,
clipPathId
} = _ref2;
editor_highlight_classPrivateFieldSet(_highlightOutlines, this, highlightOutlines);
const extraThickness = 1.5;
editor_highlight_classPrivateFieldSet(_focusOutlines, this, highlightOutlines.getNewOutline(editor_highlight_classPrivateFieldGet(highlight_thickness, this) / 2 + extraThickness, 0.0025));
if (highlightId >= 0) {
editor_highlight_classPrivateFieldSet(highlight_id, this, highlightId);
editor_highlight_classPrivateFieldSet(_clipPathId, this, clipPathId);
this.parent.drawLayer.finalizeDraw(highlightId, {
bbox: highlightOutlines.box,
path: {
d: highlightOutlines.toSVGPath()
}
});
editor_highlight_classPrivateFieldSet(_outlineId, this, this.parent.drawLayer.drawOutline({
rootClass: {
highlightOutline: true,
free: true
},
bbox: editor_highlight_classPrivateFieldGet(_focusOutlines, this).box,
path: {
d: editor_highlight_classPrivateFieldGet(_focusOutlines, this).toSVGPath()
}
}, true));
} else if (this.parent) {
const angle = this.parent.viewport.rotation;
this.parent.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(highlight_id, this), {
bbox: _rotateBbox.call(_HighlightEditor, editor_highlight_classPrivateFieldGet(_highlightOutlines, this).box, (angle - this.rotation + 360) % 360),
path: {
d: highlightOutlines.toSVGPath()
}
});
this.parent.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(_outlineId, this), {
bbox: _rotateBbox.call(_HighlightEditor, editor_highlight_classPrivateFieldGet(_focusOutlines, this).box, angle),
path: {
d: editor_highlight_classPrivateFieldGet(_focusOutlines, this).toSVGPath()
}
});
}
const [x, y, width, height] = highlightOutlines.box;
switch (this.rotation) {
case 0:
this.x = x;
this.y = y;
this.width = width;
this.height = height;
break;
case 90:
{
const [pageWidth, pageHeight] = this.parentDimensions;
this.x = y;
this.y = 1 - x;
this.width = width * pageHeight / pageWidth;
this.height = height * pageWidth / pageHeight;
break;
}
case 180:
this.x = 1 - x;
this.y = 1 - y;
this.width = width;
this.height = height;
break;
case 270:
{
const [pageWidth, pageHeight] = this.parentDimensions;
this.x = 1 - y;
this.y = x;
this.width = width * pageHeight / pageWidth;
this.height = height * pageWidth / pageHeight;
break;
}
}
const {
lastPoint
} = editor_highlight_classPrivateFieldGet(_focusOutlines, this);
editor_highlight_classPrivateFieldSet(highlight_lastPoint, this, [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]);
}
function highlight_updateColor(color) {
const setColorAndOpacity = (col, opa) => {
this.color = col;
editor_highlight_classPrivateFieldSet(_opacity, this, opa);
this.parent?.drawLayer.updateProperties(editor_highlight_classPrivateFieldGet(highlight_id, this), {
root: {
fill: col,
"fill-opacity": opa
}
});
editor_highlight_classPrivateFieldGet(highlight_colorPicker, this)?.updateColor(col);
};
const savedColor = this.color;
const savedOpacity = editor_highlight_classPrivateFieldGet(_opacity, this);
this.addCommands({
cmd: setColorAndOpacity.bind(this, color, _HighlightEditor._defaultOpacity),
undo: setColorAndOpacity.bind(this, savedColor, savedOpacity),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: true,
type: AnnotationEditorParamsType.HIGHLIGHT_COLOR,
overwriteIfSameType: true,
keepUndo: true
});
this._reportTelemetry({
action: "color_changed",
color: this._uiManager.highlightColorNames.get(color)
}, true);
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "colorChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: color,
previousValue: savedColor
});
}
function _updateThickness(thickness) {
const savedThickness = editor_highlight_classPrivateFieldGet(highlight_thickness, this);
const setThickness = th => {
editor_highlight_classPrivateFieldSet(highlight_thickness, this, th);
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _changeThickness).call(this, th);
};
this.addCommands({
cmd: setThickness.bind(this, thickness),
undo: setThickness.bind(this, savedThickness),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: true,
type: AnnotationEditorParamsType.INK_THICKNESS,
overwriteIfSameType: true,
keepUndo: true
});
this._reportTelemetry({
action: "thickness_changed",
thickness
}, true);
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "thicknessChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: thickness,
previousValue: savedThickness
});
}
function _changeThickness(thickness) {
if (!editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)) {
return;
}
editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _createFreeOutlines).call(this, {
highlightOutlines: editor_highlight_classPrivateFieldGet(_highlightOutlines, this).getNewOutline(thickness / 2)
});
this.fixAndSetPosition();
const [parentWidth, parentHeight] = this.parentDimensions;
this.setDims(this.width * parentWidth, this.height * parentHeight);
}
function _cleanDrawLayer() {
if (editor_highlight_classPrivateFieldGet(highlight_id, this) === null || !this.parent) {
return;
}
this.parent.drawLayer.remove(editor_highlight_classPrivateFieldGet(highlight_id, this));
editor_highlight_classPrivateFieldSet(highlight_id, this, null);
this.parent.drawLayer.remove(editor_highlight_classPrivateFieldGet(_outlineId, this));
editor_highlight_classPrivateFieldSet(_outlineId, this, null);
}
function _addToDrawLayer() {
let parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.parent;
if (editor_highlight_classPrivateFieldGet(highlight_id, this) !== null) {
return;
}
({
id: highlight_toSetter(editor_highlight_classPrivateFieldSet, [highlight_id, this])._,
clipPathId: highlight_toSetter(editor_highlight_classPrivateFieldSet, [_clipPathId, this])._
} = parent.drawLayer.draw({
bbox: editor_highlight_classPrivateFieldGet(_highlightOutlines, this).box,
root: {
viewBox: "0 0 1 1",
fill: this.color,
"fill-opacity": editor_highlight_classPrivateFieldGet(_opacity, this)
},
rootClass: {
highlight: true,
free: editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)
},
path: {
d: editor_highlight_classPrivateFieldGet(_highlightOutlines, this).toSVGPath()
}
}, false, true));
editor_highlight_classPrivateFieldSet(_outlineId, this, parent.drawLayer.drawOutline({
rootClass: {
highlightOutline: true,
free: editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)
},
bbox: editor_highlight_classPrivateFieldGet(_focusOutlines, this).box,
path: {
d: editor_highlight_classPrivateFieldGet(_focusOutlines, this).toSVGPath()
}
}, editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)));
if (editor_highlight_classPrivateFieldGet(_highlightDiv, this)) {
editor_highlight_classPrivateFieldGet(_highlightDiv, this).style.clipPath = editor_highlight_classPrivateFieldGet(_clipPathId, this);
}
}
function _rotateBbox(_ref3, angle) {
let [x, y, width, height] = _ref3;
switch (angle) {
case 90:
return [1 - y - height, x, height, width];
case 180:
return [1 - x - width, 1 - y - height, width, height];
case 270:
return [y, 1 - x - width, height, width];
}
return [x, y, width, height];
}
function _keydown(event) {
_HighlightEditor._keyboardManager.exec(this, event);
}
function _setCaret(start) {
if (!editor_highlight_classPrivateFieldGet(_anchorNode, this)) {
return;
}
const selection = window.getSelection();
if (start) {
selection.setPosition(editor_highlight_classPrivateFieldGet(_anchorNode, this), editor_highlight_classPrivateFieldGet(_anchorOffset, this));
} else {
selection.setPosition(editor_highlight_classPrivateFieldGet(_focusNode, this), editor_highlight_classPrivateFieldGet(_focusOffset, this));
}
}
function _getRotation() {
return editor_highlight_classPrivateFieldGet(_isFreeHighlight, this) ? this.rotation : 0;
}
function _serializeBoxes() {
if (editor_highlight_classPrivateFieldGet(_isFreeHighlight, this)) {
return null;
}
const [pageWidth, pageHeight] = this.pageDimensions;
const [pageX, pageY] = this.pageTranslation;
const boxes = editor_highlight_classPrivateFieldGet(_boxes, this);
const quadPoints = new Float32Array(boxes.length * 8);
let i = 0;
for (const {
x,
y,
width,
height
} of boxes) {
const sx = x * pageWidth + pageX;
const sy = (1 - y) * pageHeight + pageY;
quadPoints[i] = quadPoints[i + 4] = sx;
quadPoints[i + 1] = quadPoints[i + 3] = sy;
quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth;
quadPoints[i + 5] = quadPoints[i + 7] = sy - height * pageHeight;
i += 8;
}
return quadPoints;
}
function _serializeOutlines(rect) {
return editor_highlight_classPrivateFieldGet(_highlightOutlines, this).serialize(rect, editor_highlight_assertClassBrand(_HighlightEditor_brand, this, _getRotation).call(this));
}
function _highlightMove(parent, event) {
if (this._freeHighlight.add(event)) {
parent.drawLayer.updateProperties(this._freeHighlightId, {
path: {
d: this._freeHighlight.toSVGPath()
}
});
}
}
function _endHighlight(parent, event) {
if (!this._freeHighlight.isEmpty()) {
parent.createAndAddNewEditor(event, false, {
highlightId: this._freeHighlightId,
highlightOutlines: this._freeHighlight.getOutlines(),
clipPathId: this._freeHighlightClipId,
methodOfCreation: "main_toolbar"
});
} else {
parent.drawLayer.remove(this._freeHighlightId);
}
this._freeHighlightId = -1;
this._freeHighlight = null;
this._freeHighlightClipId = "";
}
function highlight_hasElementChanged(serialized) {
const {
color
} = this._initialData;
return serialized.color.some((c, i) => c !== color[i]);
}
highlight_defineProperty(HighlightEditor, "_defaultColor", null);
highlight_defineProperty(HighlightEditor, "_defaultOpacity", 1);
highlight_defineProperty(HighlightEditor, "_defaultThickness", 12);
highlight_defineProperty(HighlightEditor, "_type", "highlight");
highlight_defineProperty(HighlightEditor, "_editorType", AnnotationEditorType.HIGHLIGHT);
highlight_defineProperty(HighlightEditor, "_freeHighlightId", -1);
highlight_defineProperty(HighlightEditor, "_freeHighlight", null);
highlight_defineProperty(HighlightEditor, "_freeHighlightClipId", "");
;// ./src/display/editor/draw.js
var _DrawingEditor;
function draw_classPrivateMethodInitSpec(e, a) { draw_checkPrivateRedeclaration(e, a), a.add(e); }
function draw_defineProperty(e, r, t) { return (r = draw_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function draw_toPropertyKey(t) { var i = draw_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function draw_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function draw_classPrivateFieldInitSpec(e, t, a) { draw_checkPrivateRedeclaration(e, t), t.set(e, a); }
function draw_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function draw_classPrivateFieldSet(s, a, r) { return s.set(draw_assertClassBrand(s, a), r), r; }
function draw_classPrivateFieldGet(s, a) { return s.get(draw_assertClassBrand(s, a)); }
function draw_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _svgProperties = /*#__PURE__*/new WeakMap();
class DrawingOptions {
constructor() {
draw_classPrivateFieldInitSpec(this, _svgProperties, Object.create(null));
}
updateProperty(name, value) {
this[name] = value;
this.updateSVGProperty(name, value);
}
updateProperties(properties) {
if (!properties) {
return;
}
for (const [name, value] of Object.entries(properties)) {
if (!name.startsWith("_")) {
this.updateProperty(name, value);
}
}
}
updateSVGProperty(name, value) {
draw_classPrivateFieldGet(_svgProperties, this)[name] = value;
}
toSVGProperties() {
const root = draw_classPrivateFieldGet(_svgProperties, this);
draw_classPrivateFieldSet(_svgProperties, this, Object.create(null));
return {
root
};
}
reset() {
draw_classPrivateFieldSet(_svgProperties, this, Object.create(null));
}
updateAll() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this;
this.updateProperties(options);
}
clone() {
unreachable("Not implemented");
}
}
var _drawOutlines = /*#__PURE__*/new WeakMap();
var _mustBeCommitted = /*#__PURE__*/new WeakMap();
var _DrawingEditor_brand = /*#__PURE__*/new WeakSet();
class DrawingEditor extends AnnotationEditor {
constructor(params) {
super(params);
draw_classPrivateMethodInitSpec(this, _DrawingEditor_brand);
draw_classPrivateFieldInitSpec(this, _drawOutlines, null);
draw_classPrivateFieldInitSpec(this, _mustBeCommitted, void 0);
draw_defineProperty(this, "_drawId", null);
draw_classPrivateFieldSet(_mustBeCommitted, this, params.mustBeCommitted || false);
this._addOutlines(params);
}
_addOutlines(params) {
if (params.drawOutlines) {
draw_assertClassBrand(_DrawingEditor_brand, this, _createDrawOutlines).call(this, params);
draw_assertClassBrand(_DrawingEditor_brand, this, draw_addToDrawLayer).call(this);
}
}
static _mergeSVGProperties(p1, p2) {
const p1Keys = new Set(Object.keys(p1));
for (const [key, value] of Object.entries(p2)) {
if (p1Keys.has(key)) {
Object.assign(p1[key], value);
} else {
p1[key] = value;
}
}
return p1;
}
static getDefaultDrawingOptions(_options) {
unreachable("Not implemented");
}
static get typesMap() {
unreachable("Not implemented");
}
static get isDrawer() {
return true;
}
static get supportMultipleDrawings() {
return false;
}
static updateDefaultParams(type, value) {
const propertyName = this.typesMap.get(type);
if (propertyName) {
this._defaultDrawingOptions.updateProperty(propertyName, value);
}
if (this._currentParent) {
_currentDraw._.updateProperty(propertyName, value);
this._currentParent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties());
}
}
updateParams(type, value) {
const propertyName = this.constructor.typesMap.get(type);
if (propertyName) {
this._updateProperty(type, propertyName, value);
}
}
static get defaultPropertiesToUpdate() {
const properties = [];
const options = this._defaultDrawingOptions;
for (const [type, name] of this.typesMap) {
properties.push([type, options[name]]);
}
return properties;
}
get propertiesToUpdate() {
const properties = [];
const {
_drawingOptions
} = this;
for (const [type, name] of this.constructor.typesMap) {
properties.push([type, _drawingOptions[name]]);
}
return properties;
}
_updateProperty(type, name, value) {
const options = this._drawingOptions;
const savedValue = options[name];
const setter = val => {
options.updateProperty(name, val);
const bbox = draw_classPrivateFieldGet(_drawOutlines, this).updateProperty(name, val);
if (bbox) {
draw_assertClassBrand(_DrawingEditor_brand, this, _updateBbox).call(this, bbox);
}
this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties());
if (name === "stroke") {
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "colorChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value
});
} else if (name === "stroke-width") {
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "thicknessChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value
});
} else if (name === "stroke-opacity") {
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "opacityChanged",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value
});
}
};
this.addCommands({
cmd: setter.bind(this, value),
undo: setter.bind(this, savedValue),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: true,
type,
overwriteIfSameType: true,
keepUndo: true
});
}
_onResizing() {
this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(draw_classPrivateFieldGet(_drawOutlines, this).getPathResizingSVGProperties(draw_assertClassBrand(_DrawingEditor_brand, this, _convertToDrawSpace).call(this)), {
bbox: draw_assertClassBrand(_DrawingEditor_brand, this, _rotateBox).call(this)
}));
}
_onResized() {
this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(draw_classPrivateFieldGet(_drawOutlines, this).getPathResizedSVGProperties(draw_assertClassBrand(_DrawingEditor_brand, this, _convertToDrawSpace).call(this)), {
bbox: draw_assertClassBrand(_DrawingEditor_brand, this, _rotateBox).call(this)
}));
}
_onTranslating(_x, _y) {
this.parent?.drawLayer.updateProperties(this._drawId, {
bbox: draw_assertClassBrand(_DrawingEditor_brand, this, _rotateBox).call(this)
});
}
_onTranslated() {
this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(draw_classPrivateFieldGet(_drawOutlines, this).getPathTranslatedSVGProperties(draw_assertClassBrand(_DrawingEditor_brand, this, _convertToDrawSpace).call(this), this.parentDimensions), {
bbox: draw_assertClassBrand(_DrawingEditor_brand, this, _rotateBox).call(this)
}));
}
_onStartDragging() {
this.parent?.drawLayer.updateProperties(this._drawId, {
rootClass: {
moving: true
}
});
}
_onStopDragging() {
this.parent?.drawLayer.updateProperties(this._drawId, {
rootClass: {
moving: false
}
});
}
commit() {
super.commit();
this.disableEditMode();
this.disableEditing();
}
disableEditing() {
super.disableEditing();
this.div.classList.toggle("disabled", true);
}
enableEditing() {
super.enableEditing();
this.div.classList.toggle("disabled", false);
}
getBaseTranslation() {
return [0, 0];
}
get isResizable() {
return true;
}
onceAdded(focus) {
if (!this.annotationElementId) {
this.parent.addUndoableEditor(this);
}
this._isDraggable = true;
if (draw_classPrivateFieldGet(_mustBeCommitted, this)) {
draw_classPrivateFieldSet(_mustBeCommitted, this, false);
this.commit();
this.parent.setSelected(this);
if (focus && this.isOnScreen) {
this.div.focus();
}
}
}
remove() {
draw_assertClassBrand(_DrawingEditor_brand, this, draw_cleanDrawLayer).call(this);
super.remove();
}
rebuild() {
if (!this.parent) {
return;
}
super.rebuild();
if (this.div === null) {
return;
}
draw_assertClassBrand(_DrawingEditor_brand, this, draw_addToDrawLayer).call(this);
draw_assertClassBrand(_DrawingEditor_brand, this, _updateBbox).call(this, draw_classPrivateFieldGet(_drawOutlines, this).box);
if (!this.isAttachedToDOM) {
this.parent.add(this);
}
}
setParent(parent) {
let mustBeSelected = false;
if (this.parent && !parent) {
this._uiManager.removeShouldRescale(this);
draw_assertClassBrand(_DrawingEditor_brand, this, draw_cleanDrawLayer).call(this);
} else if (parent) {
this._uiManager.addShouldRescale(this);
draw_assertClassBrand(_DrawingEditor_brand, this, draw_addToDrawLayer).call(this, parent);
mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor");
}
super.setParent(parent);
if (mustBeSelected) {
this.select();
}
}
rotate() {
if (!this.parent) {
return;
}
this.parent.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties({
bbox: draw_assertClassBrand(_DrawingEditor_brand, this, _rotateBox).call(this)
}, draw_classPrivateFieldGet(_drawOutlines, this).updateRotation((this.parentRotation - this.rotation + 360) % 360)));
}
onScaleChanging() {
if (!this.parent) {
return;
}
draw_assertClassBrand(_DrawingEditor_brand, this, _updateBbox).call(this, draw_classPrivateFieldGet(_drawOutlines, this).updateParentDimensions(this.parentDimensions, this.parent.scale));
}
static onScaleChangingWhenDrawing() {}
render() {
if (this.div) {
return this.div;
}
let baseX, baseY;
if (this._isCopy) {
baseX = this.x;
baseY = this.y;
}
const div = super.render();
div.classList.add("draw");
const drawDiv = document.createElement("div");
div.append(drawDiv);
drawDiv.setAttribute("aria-hidden", "true");
drawDiv.className = "internal";
const [parentWidth, parentHeight] = this.parentDimensions;
this.setDims(this.width * parentWidth, this.height * parentHeight);
this._uiManager.addShouldRescale(this);
this.disableEditing();
if (this._isCopy) {
this._moveAfterPaste(baseX, baseY);
}
return div;
}
static createDrawerInstance(_x, _y, _parentWidth, _parentHeight, _rotation) {
unreachable("Not implemented");
}
static startDrawing(parent, uiManager, _isLTR, event) {
const {
target,
offsetX: x,
offsetY: y,
pointerId,
pointerType
} = event;
if (_currentPointerType._ && _currentPointerType._ !== pointerType) {
return;
}
const {
viewport: {
rotation
}
} = parent;
const {
width: parentWidth,
height: parentHeight
} = target.getBoundingClientRect();
const ac = _currentDrawingAC._ = new AbortController();
const signal = parent.combinedSignal(ac);
_currentPointerId._ || (_currentPointerId._ = pointerId);
_currentPointerType._ ?? (_currentPointerType._ = pointerType);
window.addEventListener("pointerup", e => {
if (_currentPointerId._ === e.pointerId) {
this._endDraw(e);
} else {
_currentPointerIds._?.delete(e.pointerId);
}
}, {
signal
});
window.addEventListener("pointercancel", e => {
if (_currentPointerId._ === e.pointerId) {
this._currentParent.endDrawingSession();
} else {
_currentPointerIds._?.delete(e.pointerId);
}
}, {
signal
});
window.addEventListener("pointerdown", e => {
if (_currentPointerType._ !== e.pointerType) {
return;
}
(_currentPointerIds._ || (_currentPointerIds._ = new Set())).add(e.pointerId);
if (_currentDraw._.isCancellable()) {
_currentDraw._.removeLastElement();
if (_currentDraw._.isEmpty()) {
this._currentParent.endDrawingSession(true);
} else {
this._endDraw(null);
}
}
}, {
capture: true,
passive: false,
signal
});
window.addEventListener("contextmenu", noContextMenu, {
signal
});
target.addEventListener("pointermove", this._drawMove.bind(this), {
signal
});
target.addEventListener("touchmove", e => {
if (e.timeStamp === _currentMoveTimestamp._) {
stopEvent(e);
}
}, {
signal
});
parent.toggleDrawing();
uiManager._editorUndoBar?.hide();
if (_currentDraw._) {
parent.drawLayer.updateProperties(this._currentDrawId, _currentDraw._.startNew(x, y, parentWidth, parentHeight, rotation));
return;
}
uiManager.updateUIForDefaultProperties(this);
_currentDraw._ = this.createDrawerInstance(x, y, parentWidth, parentHeight, rotation);
_currentDrawingOptions._ = this.getDefaultDrawingOptions();
this._currentParent = parent;
({
id: this._currentDrawId
} = parent.drawLayer.draw(this._mergeSVGProperties(_currentDrawingOptions._.toSVGProperties(), _currentDraw._.defaultSVGProperties), true, false));
}
static _drawMove(event) {
_currentMoveTimestamp._ = -1;
if (!_currentDraw._) {
return;
}
const {
offsetX,
offsetY,
pointerId
} = event;
if (_currentPointerId._ !== pointerId) {
return;
}
if (_currentPointerIds._?.size >= 1) {
this._endDraw(event);
return;
}
this._currentParent.drawLayer.updateProperties(this._currentDrawId, _currentDraw._.add(offsetX, offsetY));
_currentMoveTimestamp._ = event.timeStamp;
stopEvent(event);
}
static _cleanup(all) {
if (all) {
this._currentDrawId = -1;
this._currentParent = null;
_currentDraw._ = null;
_currentDrawingOptions._ = null;
_currentPointerType._ = null;
_currentMoveTimestamp._ = NaN;
}
if (_currentDrawingAC._) {
_currentDrawingAC._.abort();
_currentDrawingAC._ = null;
_currentPointerId._ = NaN;
_currentPointerIds._ = null;
}
}
static _endDraw(event) {
const parent = this._currentParent;
if (!parent) {
return;
}
parent.toggleDrawing(true);
this._cleanup(false);
if (event?.target === parent.div) {
parent.drawLayer.updateProperties(this._currentDrawId, _currentDraw._.end(event.offsetX, event.offsetY));
}
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "bezierPathChanged",
page: this._currentParent ? this._currentParent.pageIndex + 1 : NaN,
editorType: this.name
});
if (this.supportMultipleDrawings) {
const draw = _currentDraw._;
const drawId = this._currentDrawId;
const lastElement = draw.getLastElement();
parent.addCommands({
cmd: () => {
parent.drawLayer.updateProperties(drawId, draw.setLastElement(lastElement));
},
undo: () => {
parent.drawLayer.updateProperties(drawId, draw.removeLastElement());
},
mustExec: false,
type: AnnotationEditorParamsType.DRAW_STEP
});
return;
}
this.endDrawing(false);
}
static endDrawing(isAborted) {
const parent = this._currentParent;
if (!parent) {
return null;
}
parent.toggleDrawing(true);
parent.cleanUndoStack(AnnotationEditorParamsType.DRAW_STEP);
if (!_currentDraw._.isEmpty()) {
const {
pageDimensions: [pageWidth, pageHeight],
scale
} = parent;
const editor = parent.createAndAddNewEditor({
offsetX: 0,
offsetY: 0
}, false, {
drawId: this._currentDrawId,
drawOutlines: _currentDraw._.getOutlines(pageWidth * scale, pageHeight * scale, scale, this._INNER_MARGIN),
drawingOptions: _currentDrawingOptions._,
mustBeCommitted: !isAborted
});
this._cleanup(true);
return editor;
}
parent.drawLayer.remove(this._currentDrawId);
this._cleanup(true);
return null;
}
createDrawingOptions(_data) {}
static deserializeDraw(_pageX, _pageY, _pageWidth, _pageHeight, _innerWidth, _data) {
unreachable("Not implemented");
}
static async deserialize(data, parent, uiManager) {
const {
rawDims: {
pageWidth,
pageHeight,
pageX,
pageY
}
} = parent.viewport;
const drawOutlines = this.deserializeDraw(pageX, pageY, pageWidth, pageHeight, this._INNER_MARGIN, data);
const editor = await super.deserialize(data, parent, uiManager);
editor.createDrawingOptions(data);
draw_assertClassBrand(_DrawingEditor_brand, editor, _createDrawOutlines).call(editor, {
drawOutlines
});
draw_assertClassBrand(_DrawingEditor_brand, editor, draw_addToDrawLayer).call(editor);
editor.onScaleChanging();
editor.rotate();
return editor;
}
serializeDraw(isForCopying) {
const [pageX, pageY] = this.pageTranslation;
const [pageWidth, pageHeight] = this.pageDimensions;
return draw_classPrivateFieldGet(_drawOutlines, this).serialize([pageX, pageY, pageWidth, pageHeight], isForCopying);
}
renderAnnotationElement(annotation) {
annotation.updateEdited({
rect: this.getRect(0, 0)
});
return null;
}
static canCreateNewEmptyEditor() {
return false;
}
}
_DrawingEditor = DrawingEditor;
function _createDrawOutlines(_ref) {
let {
drawOutlines,
drawId,
drawingOptions
} = _ref;
draw_classPrivateFieldSet(_drawOutlines, this, drawOutlines);
this._drawingOptions ||= drawingOptions;
if (drawId >= 0) {
this._drawId = drawId;
this.parent.drawLayer.finalizeDraw(drawId, drawOutlines.defaultProperties);
} else {
this._drawId = draw_assertClassBrand(_DrawingEditor_brand, this, _createDrawing).call(this, drawOutlines, this.parent);
}
draw_assertClassBrand(_DrawingEditor_brand, this, _updateBbox).call(this, drawOutlines.box);
}
function _createDrawing(drawOutlines, parent) {
const {
id
} = parent.drawLayer.draw(_DrawingEditor._mergeSVGProperties(this._drawingOptions.toSVGProperties(), drawOutlines.defaultSVGProperties), false, false);
return id;
}
function draw_cleanDrawLayer() {
if (this._drawId === null || !this.parent) {
return;
}
this.parent.drawLayer.remove(this._drawId);
this._drawId = null;
this._drawingOptions.reset();
}
function draw_addToDrawLayer() {
let parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.parent;
if (this._drawId !== null && this.parent === parent) {
return;
}
if (this._drawId !== null) {
this.parent.drawLayer.updateParent(this._drawId, parent.drawLayer);
return;
}
this._drawingOptions.updateAll();
this._drawId = draw_assertClassBrand(_DrawingEditor_brand, this, _createDrawing).call(this, draw_classPrivateFieldGet(_drawOutlines, this), parent);
}
function _convertToParentSpace(_ref2) {
let [x, y, width, height] = _ref2;
const {
parentDimensions: [pW, pH],
rotation
} = this;
switch (rotation) {
case 90:
return [y, 1 - x, width * (pH / pW), height * (pW / pH)];
case 180:
return [1 - x, 1 - y, width, height];
case 270:
return [1 - y, x, width * (pH / pW), height * (pW / pH)];
default:
return [x, y, width, height];
}
}
function _convertToDrawSpace() {
const {
x,
y,
width,
height,
parentDimensions: [pW, pH],
rotation
} = this;
switch (rotation) {
case 90:
return [1 - y, x, width * (pW / pH), height * (pH / pW)];
case 180:
return [1 - x, 1 - y, width, height];
case 270:
return [y, 1 - x, width * (pW / pH), height * (pH / pW)];
default:
return [x, y, width, height];
}
}
function _updateBbox(bbox) {
[this.x, this.y, this.width, this.height] = draw_assertClassBrand(_DrawingEditor_brand, this, _convertToParentSpace).call(this, bbox);
if (this.div) {
this.fixAndSetPosition();
const [parentWidth, parentHeight] = this.parentDimensions;
this.setDims(this.width * parentWidth, this.height * parentHeight);
}
this._onResized();
}
function _rotateBox() {
const {
x,
y,
width,
height,
rotation,
parentRotation,
parentDimensions: [pW, pH]
} = this;
switch ((rotation * 4 + parentRotation) / 90) {
case 1:
return [1 - y - height, x, height, width];
case 2:
return [1 - x - width, 1 - y - height, width, height];
case 3:
return [y, 1 - x - width, height, width];
case 4:
return [x, y - width * (pW / pH), height * (pH / pW), width * (pW / pH)];
case 5:
return [1 - y, x, width * (pW / pH), height * (pH / pW)];
case 6:
return [1 - x - height * (pH / pW), 1 - y, height * (pH / pW), width * (pW / pH)];
case 7:
return [y - width * (pW / pH), 1 - x - height * (pH / pW), width * (pW / pH), height * (pH / pW)];
case 8:
return [x - width, y - height, width, height];
case 9:
return [1 - y, x - width, height, width];
case 10:
return [1 - x, 1 - y, width, height];
case 11:
return [y - height, 1 - x, height, width];
case 12:
return [x - height * (pH / pW), y, height * (pH / pW), width * (pW / pH)];
case 13:
return [1 - y - width * (pW / pH), x - height * (pH / pW), width * (pW / pH), height * (pH / pW)];
case 14:
return [1 - x, 1 - y - width * (pW / pH), height * (pH / pW), width * (pW / pH)];
case 15:
return [y, 1 - x, width * (pW / pH), height * (pH / pW)];
default:
return [x, y, width, height];
}
}
draw_defineProperty(DrawingEditor, "_currentDrawId", -1);
draw_defineProperty(DrawingEditor, "_currentParent", null);
var _currentDraw = {
_: null
};
var _currentDrawingAC = {
_: null
};
var _currentDrawingOptions = {
_: null
};
var _currentPointerId = {
_: NaN
};
var _currentPointerType = {
_: null
};
var _currentPointerIds = {
_: null
};
var _currentMoveTimestamp = {
_: NaN
};
draw_defineProperty(DrawingEditor, "_INNER_MARGIN", 3);
;// ./src/display/editor/drawers/inkdraw.js
function inkdraw_classPrivateMethodInitSpec(e, a) { inkdraw_checkPrivateRedeclaration(e, a), a.add(e); }
function inkdraw_classPrivateFieldInitSpec(e, t, a) { inkdraw_checkPrivateRedeclaration(e, t), t.set(e, a); }
function inkdraw_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function inkdraw_classPrivateFieldGet(s, a) { return s.get(inkdraw_assertClassBrand(s, a)); }
function inkdraw_classPrivateFieldSet(s, a, r) { return s.set(inkdraw_assertClassBrand(s, a), r), r; }
function inkdraw_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var inkdraw_last = /*#__PURE__*/new WeakMap();
var inkdraw_line = /*#__PURE__*/new WeakMap();
var _lines = /*#__PURE__*/new WeakMap();
var inkdraw_rotation = /*#__PURE__*/new WeakMap();
var inkdraw_thickness = /*#__PURE__*/new WeakMap();
var inkdraw_points = /*#__PURE__*/new WeakMap();
var _lastSVGPath = /*#__PURE__*/new WeakMap();
var _lastIndex = /*#__PURE__*/new WeakMap();
var inkdraw_outlines = /*#__PURE__*/new WeakMap();
var _parentWidth = /*#__PURE__*/new WeakMap();
var _parentHeight = /*#__PURE__*/new WeakMap();
var _InkDrawOutliner_brand = /*#__PURE__*/new WeakSet();
class InkDrawOutliner {
constructor(_x, _y, parentWidth, parentHeight, rotation, thickness) {
inkdraw_classPrivateMethodInitSpec(this, _InkDrawOutliner_brand);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_last, new Float64Array(6));
inkdraw_classPrivateFieldInitSpec(this, inkdraw_line, void 0);
inkdraw_classPrivateFieldInitSpec(this, _lines, void 0);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_rotation, void 0);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_thickness, void 0);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_points, void 0);
inkdraw_classPrivateFieldInitSpec(this, _lastSVGPath, "");
inkdraw_classPrivateFieldInitSpec(this, _lastIndex, 0);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_outlines, new InkDrawOutline());
inkdraw_classPrivateFieldInitSpec(this, _parentWidth, void 0);
inkdraw_classPrivateFieldInitSpec(this, _parentHeight, void 0);
inkdraw_classPrivateFieldSet(_parentWidth, this, parentWidth);
inkdraw_classPrivateFieldSet(_parentHeight, this, parentHeight);
inkdraw_classPrivateFieldSet(inkdraw_rotation, this, rotation);
inkdraw_classPrivateFieldSet(inkdraw_thickness, this, thickness);
[_x, _y] = inkdraw_assertClassBrand(_InkDrawOutliner_brand, this, _normalizePoint).call(this, _x, _y);
const line = inkdraw_classPrivateFieldSet(inkdraw_line, this, [NaN, NaN, NaN, NaN, _x, _y]);
inkdraw_classPrivateFieldSet(inkdraw_points, this, [_x, _y]);
inkdraw_classPrivateFieldSet(_lines, this, [{
line,
points: inkdraw_classPrivateFieldGet(inkdraw_points, this)
}]);
inkdraw_classPrivateFieldGet(inkdraw_last, this).set(line, 0);
}
updateProperty(name, value) {
if (name === "stroke-width") {
inkdraw_classPrivateFieldSet(inkdraw_thickness, this, value);
}
}
isEmpty() {
return !inkdraw_classPrivateFieldGet(_lines, this) || inkdraw_classPrivateFieldGet(_lines, this).length === 0;
}
isCancellable() {
return inkdraw_classPrivateFieldGet(inkdraw_points, this).length <= 10;
}
add(x, y) {
[x, y] = inkdraw_assertClassBrand(_InkDrawOutliner_brand, this, _normalizePoint).call(this, x, y);
const [x1, y1, x2, y2] = inkdraw_classPrivateFieldGet(inkdraw_last, this).subarray(2, 6);
const diffX = x - x2;
const diffY = y - y2;
const d = Math.hypot(inkdraw_classPrivateFieldGet(_parentWidth, this) * diffX, inkdraw_classPrivateFieldGet(_parentHeight, this) * diffY);
if (d <= 2) {
return null;
}
inkdraw_classPrivateFieldGet(inkdraw_points, this).push(x, y);
if (isNaN(x1)) {
inkdraw_classPrivateFieldGet(inkdraw_last, this).set([x2, y2, x, y], 2);
inkdraw_classPrivateFieldGet(inkdraw_line, this).push(NaN, NaN, NaN, NaN, x, y);
return {
path: {
d: this.toSVGPath()
}
};
}
if (isNaN(inkdraw_classPrivateFieldGet(inkdraw_last, this)[0])) {
inkdraw_classPrivateFieldGet(inkdraw_line, this).splice(6, 6);
}
inkdraw_classPrivateFieldGet(inkdraw_last, this).set([x1, y1, x2, y2, x, y], 0);
inkdraw_classPrivateFieldGet(inkdraw_line, this).push(...Outline.createBezierPoints(x1, y1, x2, y2, x, y));
return {
path: {
d: this.toSVGPath()
}
};
}
end(x, y) {
const change = this.add(x, y);
if (change) {
return change;
}
if (inkdraw_classPrivateFieldGet(inkdraw_points, this).length === 2) {
return {
path: {
d: this.toSVGPath()
}
};
}
return null;
}
startNew(x, y, parentWidth, parentHeight, rotation) {
inkdraw_classPrivateFieldSet(_parentWidth, this, parentWidth);
inkdraw_classPrivateFieldSet(_parentHeight, this, parentHeight);
inkdraw_classPrivateFieldSet(inkdraw_rotation, this, rotation);
[x, y] = inkdraw_assertClassBrand(_InkDrawOutliner_brand, this, _normalizePoint).call(this, x, y);
const line = inkdraw_classPrivateFieldSet(inkdraw_line, this, [NaN, NaN, NaN, NaN, x, y]);
inkdraw_classPrivateFieldSet(inkdraw_points, this, [x, y]);
const last = inkdraw_classPrivateFieldGet(_lines, this).at(-1);
if (last) {
last.line = new Float32Array(last.line);
last.points = new Float32Array(last.points);
}
inkdraw_classPrivateFieldGet(_lines, this).push({
line,
points: inkdraw_classPrivateFieldGet(inkdraw_points, this)
});
inkdraw_classPrivateFieldGet(inkdraw_last, this).set(line, 0);
inkdraw_classPrivateFieldSet(_lastIndex, this, 0);
this.toSVGPath();
return null;
}
getLastElement() {
return inkdraw_classPrivateFieldGet(_lines, this).at(-1);
}
setLastElement(element) {
if (!inkdraw_classPrivateFieldGet(_lines, this)) {
return inkdraw_classPrivateFieldGet(inkdraw_outlines, this).setLastElement(element);
}
inkdraw_classPrivateFieldGet(_lines, this).push(element);
inkdraw_classPrivateFieldSet(inkdraw_line, this, element.line);
inkdraw_classPrivateFieldSet(inkdraw_points, this, element.points);
inkdraw_classPrivateFieldSet(_lastIndex, this, 0);
return {
path: {
d: this.toSVGPath()
}
};
}
removeLastElement() {
if (!inkdraw_classPrivateFieldGet(_lines, this)) {
return inkdraw_classPrivateFieldGet(inkdraw_outlines, this).removeLastElement();
}
inkdraw_classPrivateFieldGet(_lines, this).pop();
inkdraw_classPrivateFieldSet(_lastSVGPath, this, "");
for (let i = 0, ii = inkdraw_classPrivateFieldGet(_lines, this).length; i < ii; i++) {
const {
line,
points
} = inkdraw_classPrivateFieldGet(_lines, this)[i];
inkdraw_classPrivateFieldSet(inkdraw_line, this, line);
inkdraw_classPrivateFieldSet(inkdraw_points, this, points);
inkdraw_classPrivateFieldSet(_lastIndex, this, 0);
this.toSVGPath();
}
return {
path: {
d: inkdraw_classPrivateFieldGet(_lastSVGPath, this)
}
};
}
toSVGPath() {
const firstX = Outline.svgRound(inkdraw_classPrivateFieldGet(inkdraw_line, this)[4]);
const firstY = Outline.svgRound(inkdraw_classPrivateFieldGet(inkdraw_line, this)[5]);
if (inkdraw_classPrivateFieldGet(inkdraw_points, this).length === 2) {
inkdraw_classPrivateFieldSet(_lastSVGPath, this, `${inkdraw_classPrivateFieldGet(_lastSVGPath, this)} M ${firstX} ${firstY} Z`);
return inkdraw_classPrivateFieldGet(_lastSVGPath, this);
}
if (inkdraw_classPrivateFieldGet(inkdraw_points, this).length <= 6) {
const i = inkdraw_classPrivateFieldGet(_lastSVGPath, this).lastIndexOf("M");
inkdraw_classPrivateFieldSet(_lastSVGPath, this, `${inkdraw_classPrivateFieldGet(_lastSVGPath, this).slice(0, i)} M ${firstX} ${firstY}`);
inkdraw_classPrivateFieldSet(_lastIndex, this, 6);
}
if (inkdraw_classPrivateFieldGet(inkdraw_points, this).length === 4) {
const secondX = Outline.svgRound(inkdraw_classPrivateFieldGet(inkdraw_line, this)[10]);
const secondY = Outline.svgRound(inkdraw_classPrivateFieldGet(inkdraw_line, this)[11]);
inkdraw_classPrivateFieldSet(_lastSVGPath, this, `${inkdraw_classPrivateFieldGet(_lastSVGPath, this)} L ${secondX} ${secondY}`);
inkdraw_classPrivateFieldSet(_lastIndex, this, 12);
return inkdraw_classPrivateFieldGet(_lastSVGPath, this);
}
const buffer = [];
if (inkdraw_classPrivateFieldGet(_lastIndex, this) === 0) {
buffer.push(`M ${firstX} ${firstY}`);
inkdraw_classPrivateFieldSet(_lastIndex, this, 6);
}
for (let i = inkdraw_classPrivateFieldGet(_lastIndex, this), ii = inkdraw_classPrivateFieldGet(inkdraw_line, this).length; i < ii; i += 6) {
const [c1x, c1y, c2x, c2y, x, y] = inkdraw_classPrivateFieldGet(inkdraw_line, this).slice(i, i + 6).map(Outline.svgRound);
buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);
}
inkdraw_classPrivateFieldSet(_lastSVGPath, this, inkdraw_classPrivateFieldGet(_lastSVGPath, this) + buffer.join(" "));
inkdraw_classPrivateFieldSet(_lastIndex, this, inkdraw_classPrivateFieldGet(inkdraw_line, this).length);
return inkdraw_classPrivateFieldGet(_lastSVGPath, this);
}
getOutlines(parentWidth, parentHeight, scale, innerMargin) {
const last = inkdraw_classPrivateFieldGet(_lines, this).at(-1);
last.line = new Float32Array(last.line);
last.points = new Float32Array(last.points);
inkdraw_classPrivateFieldGet(inkdraw_outlines, this).build(inkdraw_classPrivateFieldGet(_lines, this), parentWidth, parentHeight, scale, inkdraw_classPrivateFieldGet(inkdraw_rotation, this), inkdraw_classPrivateFieldGet(inkdraw_thickness, this), innerMargin);
inkdraw_classPrivateFieldSet(inkdraw_last, this, null);
inkdraw_classPrivateFieldSet(inkdraw_line, this, null);
inkdraw_classPrivateFieldSet(_lines, this, null);
inkdraw_classPrivateFieldSet(_lastSVGPath, this, null);
return inkdraw_classPrivateFieldGet(inkdraw_outlines, this);
}
get defaultSVGProperties() {
return {
root: {
viewBox: "0 0 10000 10000"
},
rootClass: {
draw: true
},
bbox: [0, 0, 1, 1]
};
}
}
function _normalizePoint(x, y) {
return Outline._normalizePoint(x, y, inkdraw_classPrivateFieldGet(_parentWidth, this), inkdraw_classPrivateFieldGet(_parentHeight, this), inkdraw_classPrivateFieldGet(inkdraw_rotation, this));
}
var inkdraw_bbox = /*#__PURE__*/new WeakMap();
var _currentRotation = /*#__PURE__*/new WeakMap();
var inkdraw_innerMargin = /*#__PURE__*/new WeakMap();
var _lines2 = /*#__PURE__*/new WeakMap();
var _parentWidth2 = /*#__PURE__*/new WeakMap();
var _parentHeight2 = /*#__PURE__*/new WeakMap();
var _parentScale = /*#__PURE__*/new WeakMap();
var _rotation2 = /*#__PURE__*/new WeakMap();
var _thickness2 = /*#__PURE__*/new WeakMap();
var _InkDrawOutline_brand = /*#__PURE__*/new WeakSet();
class InkDrawOutline extends Outline {
constructor() {
super(...arguments);
inkdraw_classPrivateMethodInitSpec(this, _InkDrawOutline_brand);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_bbox, void 0);
inkdraw_classPrivateFieldInitSpec(this, _currentRotation, 0);
inkdraw_classPrivateFieldInitSpec(this, inkdraw_innerMargin, void 0);
inkdraw_classPrivateFieldInitSpec(this, _lines2, void 0);
inkdraw_classPrivateFieldInitSpec(this, _parentWidth2, void 0);
inkdraw_classPrivateFieldInitSpec(this, _parentHeight2, void 0);
inkdraw_classPrivateFieldInitSpec(this, _parentScale, void 0);
inkdraw_classPrivateFieldInitSpec(this, _rotation2, void 0);
inkdraw_classPrivateFieldInitSpec(this, _thickness2, void 0);
}
build(lines, parentWidth, parentHeight, parentScale, rotation, thickness, innerMargin) {
inkdraw_classPrivateFieldSet(_parentWidth2, this, parentWidth);
inkdraw_classPrivateFieldSet(_parentHeight2, this, parentHeight);
inkdraw_classPrivateFieldSet(_parentScale, this, parentScale);
inkdraw_classPrivateFieldSet(_rotation2, this, rotation);
inkdraw_classPrivateFieldSet(_thickness2, this, thickness);
inkdraw_classPrivateFieldSet(inkdraw_innerMargin, this, innerMargin ?? 0);
inkdraw_classPrivateFieldSet(_lines2, this, lines);
inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _computeBbox).call(this);
}
get thickness() {
return inkdraw_classPrivateFieldGet(_thickness2, this);
}
setLastElement(element) {
inkdraw_classPrivateFieldGet(_lines2, this).push(element);
return {
path: {
d: this.toSVGPath()
}
};
}
removeLastElement() {
inkdraw_classPrivateFieldGet(_lines2, this).pop();
return {
path: {
d: this.toSVGPath()
}
};
}
toSVGPath() {
const buffer = [];
for (const {
line
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
buffer.push(`M${Outline.svgRound(line[4])} ${Outline.svgRound(line[5])}`);
if (line.length === 6) {
buffer.push("Z");
continue;
}
if (line.length === 12 && isNaN(line[6])) {
buffer.push(`L${Outline.svgRound(line[10])} ${Outline.svgRound(line[11])}`);
continue;
}
for (let i = 6, ii = line.length; i < ii; i += 6) {
const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6).map(Outline.svgRound);
buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`);
}
}
return buffer.join("");
}
serialize(_ref, isForCopying) {
let [pageX, pageY, pageWidth, pageHeight] = _ref;
const serializedLines = [];
const serializedPoints = [];
const [x, y, width, height] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getBBoxWithNoMargin).call(this);
let tx, ty, sx, sy, x1, y1, x2, y2, rescaleFn;
switch (inkdraw_classPrivateFieldGet(_rotation2, this)) {
case 0:
rescaleFn = Outline._rescale;
tx = pageX;
ty = pageY + pageHeight;
sx = pageWidth;
sy = -pageHeight;
x1 = pageX + x * pageWidth;
y1 = pageY + (1 - y - height) * pageHeight;
x2 = pageX + (x + width) * pageWidth;
y2 = pageY + (1 - y) * pageHeight;
break;
case 90:
rescaleFn = Outline._rescaleAndSwap;
tx = pageX;
ty = pageY;
sx = pageWidth;
sy = pageHeight;
x1 = pageX + y * pageWidth;
y1 = pageY + x * pageHeight;
x2 = pageX + (y + height) * pageWidth;
y2 = pageY + (x + width) * pageHeight;
break;
case 180:
rescaleFn = Outline._rescale;
tx = pageX + pageWidth;
ty = pageY;
sx = -pageWidth;
sy = pageHeight;
x1 = pageX + (1 - x - width) * pageWidth;
y1 = pageY + y * pageHeight;
x2 = pageX + (1 - x) * pageWidth;
y2 = pageY + (y + height) * pageHeight;
break;
case 270:
rescaleFn = Outline._rescaleAndSwap;
tx = pageX + pageWidth;
ty = pageY + pageHeight;
sx = -pageWidth;
sy = -pageHeight;
x1 = pageX + (1 - y - height) * pageWidth;
y1 = pageY + (1 - x - width) * pageHeight;
x2 = pageX + (1 - y) * pageWidth;
y2 = pageY + (1 - x) * pageHeight;
break;
}
for (const {
line,
points
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
serializedLines.push(rescaleFn(line, tx, ty, sx, sy, isForCopying ? new Array(line.length) : null));
serializedPoints.push(rescaleFn(points, tx, ty, sx, sy, isForCopying ? new Array(points.length) : null));
}
return {
lines: serializedLines,
points: serializedPoints,
rect: [x1, y1, x2, y2]
};
}
static deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, _ref2) {
let {
paths: {
lines,
points
},
rotation,
thickness
} = _ref2;
const newLines = [];
let tx, ty, sx, sy, rescaleFn;
switch (rotation) {
case 0:
rescaleFn = Outline._rescale;
tx = -pageX / pageWidth;
ty = pageY / pageHeight + 1;
sx = 1 / pageWidth;
sy = -1 / pageHeight;
break;
case 90:
rescaleFn = Outline._rescaleAndSwap;
tx = -pageY / pageHeight;
ty = -pageX / pageWidth;
sx = 1 / pageHeight;
sy = 1 / pageWidth;
break;
case 180:
rescaleFn = Outline._rescale;
tx = pageX / pageWidth + 1;
ty = -pageY / pageHeight;
sx = -1 / pageWidth;
sy = 1 / pageHeight;
break;
case 270:
rescaleFn = Outline._rescaleAndSwap;
tx = pageY / pageHeight + 1;
ty = pageX / pageWidth + 1;
sx = -1 / pageHeight;
sy = -1 / pageWidth;
break;
}
if (!lines) {
lines = [];
for (const point of points) {
const len = point.length;
if (len === 2) {
lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1]]));
continue;
}
if (len === 4) {
lines.push(new Float32Array([NaN, NaN, NaN, NaN, point[0], point[1], NaN, NaN, NaN, NaN, point[2], point[3]]));
continue;
}
const line = new Float32Array(3 * (len - 2));
lines.push(line);
let [x1, y1, x2, y2] = point.subarray(0, 4);
line.set([NaN, NaN, NaN, NaN, x1, y1], 0);
for (let i = 4; i < len; i += 2) {
const x = point[i];
const y = point[i + 1];
line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);
[x1, y1, x2, y2] = [x2, y2, x, y];
}
}
}
for (let i = 0, ii = lines.length; i < ii; i++) {
newLines.push({
line: rescaleFn(lines[i].map(x => x ?? NaN), tx, ty, sx, sy),
points: rescaleFn(points[i].map(x => x ?? NaN), tx, ty, sx, sy)
});
}
const outlines = new this.prototype.constructor();
outlines.build(newLines, pageWidth, pageHeight, 1, rotation, thickness, innerMargin);
return outlines;
}
get box() {
return inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
}
updateProperty(name, value) {
if (name === "stroke-width") {
return inkdraw_assertClassBrand(_InkDrawOutline_brand, this, inkdraw_updateThickness).call(this, value);
}
return null;
}
updateParentDimensions(_ref3, scale) {
let [width, height] = _ref3;
const [oldMarginX, oldMarginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
inkdraw_classPrivateFieldSet(_parentWidth2, this, width);
inkdraw_classPrivateFieldSet(_parentHeight2, this, height);
inkdraw_classPrivateFieldSet(_parentScale, this, scale);
const [newMarginX, newMarginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
const diffMarginX = newMarginX - oldMarginX;
const diffMarginY = newMarginY - oldMarginY;
const bbox = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
bbox[0] -= diffMarginX;
bbox[1] -= diffMarginY;
bbox[2] += 2 * diffMarginX;
bbox[3] += 2 * diffMarginY;
return bbox;
}
updateRotation(rotation) {
inkdraw_classPrivateFieldSet(_currentRotation, this, rotation);
return {
path: {
transform: this.rotationTransform
}
};
}
get viewBox() {
return inkdraw_classPrivateFieldGet(inkdraw_bbox, this).map(Outline.svgRound).join(" ");
}
get defaultProperties() {
const [x, y] = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`
}
};
}
get rotationTransform() {
const [,, width, height] = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
let a = 0,
b = 0,
c = 0,
d = 0,
e = 0,
f = 0;
switch (inkdraw_classPrivateFieldGet(_currentRotation, this)) {
case 90:
b = height / width;
c = -width / height;
e = width;
break;
case 180:
a = -1;
d = -1;
e = width;
f = height;
break;
case 270:
b = -height / width;
c = width / height;
f = height;
break;
default:
return "";
}
return `matrix(${a} ${b} ${c} ${d} ${Outline.svgRound(e)} ${Outline.svgRound(f)})`;
}
getPathResizingSVGProperties(_ref4) {
let [newX, newY, newWidth, newHeight] = _ref4;
const [marginX, marginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
const [x, y, width, height] = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) {
const tx = newX + newWidth / 2 - (x + width / 2);
const ty = newY + newHeight / 2 - (y + height / 2);
return {
path: {
"transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,
transform: `${this.rotationTransform} translate(${tx} ${ty})`
}
};
}
const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);
const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);
const s2x = width / newWidth;
const s2y = height / newHeight;
return {
path: {
"transform-origin": `${Outline.svgRound(x)} ${Outline.svgRound(y)}`,
transform: `${this.rotationTransform} scale(${s2x} ${s2y}) ` + `translate(${Outline.svgRound(marginX)} ${Outline.svgRound(marginY)}) scale(${s1x} ${s1y}) ` + `translate(${Outline.svgRound(-marginX)} ${Outline.svgRound(-marginY)})`
}
};
}
getPathResizedSVGProperties(_ref5) {
let [newX, newY, newWidth, newHeight] = _ref5;
const [marginX, marginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
const bbox = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
const [x, y, width, height] = bbox;
bbox[0] = newX;
bbox[1] = newY;
bbox[2] = newWidth;
bbox[3] = newHeight;
if (Math.abs(width - marginX) <= Outline.PRECISION || Math.abs(height - marginY) <= Outline.PRECISION) {
const tx = newX + newWidth / 2 - (x + width / 2);
const ty = newY + newHeight / 2 - (y + height / 2);
for (const {
line,
points
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
Outline._translate(line, tx, ty, line);
Outline._translate(points, tx, ty, points);
}
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,
transform: this.rotationTransform || null,
d: this.toSVGPath()
}
};
}
const s1x = (newWidth - 2 * marginX) / (width - 2 * marginX);
const s1y = (newHeight - 2 * marginY) / (height - 2 * marginY);
const tx = -s1x * (x + marginX) + newX + marginX;
const ty = -s1y * (y + marginY) + newY + marginY;
if (s1x !== 1 || s1y !== 1 || tx !== 0 || ty !== 0) {
for (const {
line,
points
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
Outline._rescale(line, tx, ty, s1x, s1y, line);
Outline._rescale(points, tx, ty, s1x, s1y, points);
}
}
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`,
transform: this.rotationTransform || null,
d: this.toSVGPath()
}
};
}
getPathTranslatedSVGProperties(_ref6, parentDimensions) {
let [newX, newY] = _ref6;
const [newParentWidth, newParentHeight] = parentDimensions;
const bbox = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
const tx = newX - bbox[0];
const ty = newY - bbox[1];
if (inkdraw_classPrivateFieldGet(_parentWidth2, this) === newParentWidth && inkdraw_classPrivateFieldGet(_parentHeight2, this) === newParentHeight) {
for (const {
line,
points
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
Outline._translate(line, tx, ty, line);
Outline._translate(points, tx, ty, points);
}
} else {
const sx = inkdraw_classPrivateFieldGet(_parentWidth2, this) / newParentWidth;
const sy = inkdraw_classPrivateFieldGet(_parentHeight2, this) / newParentHeight;
inkdraw_classPrivateFieldSet(_parentWidth2, this, newParentWidth);
inkdraw_classPrivateFieldSet(_parentHeight2, this, newParentHeight);
for (const {
line,
points
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
Outline._rescale(line, tx, ty, sx, sy, line);
Outline._rescale(points, tx, ty, sx, sy, points);
}
bbox[2] *= sx;
bbox[3] *= sy;
}
bbox[0] = newX;
bbox[1] = newY;
return {
root: {
viewBox: this.viewBox
},
path: {
d: this.toSVGPath(),
"transform-origin": `${Outline.svgRound(newX)} ${Outline.svgRound(newY)}`
}
};
}
get defaultSVGProperties() {
const bbox = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
return {
root: {
viewBox: this.viewBox
},
rootClass: {
draw: true
},
path: {
d: this.toSVGPath(),
"transform-origin": `${Outline.svgRound(bbox[0])} ${Outline.svgRound(bbox[1])}`,
transform: this.rotationTransform || null
},
bbox
};
}
}
function _getMarginComponents() {
let thickness = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : inkdraw_classPrivateFieldGet(_thickness2, this);
const margin = inkdraw_classPrivateFieldGet(inkdraw_innerMargin, this) + thickness / 2 * inkdraw_classPrivateFieldGet(_parentScale, this);
return inkdraw_classPrivateFieldGet(_rotation2, this) % 180 === 0 ? [margin / inkdraw_classPrivateFieldGet(_parentWidth2, this), margin / inkdraw_classPrivateFieldGet(_parentHeight2, this)] : [margin / inkdraw_classPrivateFieldGet(_parentHeight2, this), margin / inkdraw_classPrivateFieldGet(_parentWidth2, this)];
}
function _getBBoxWithNoMargin() {
const [x, y, width, height] = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
const [marginX, marginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this, 0);
return [x + marginX, y + marginY, width - 2 * marginX, height - 2 * marginY];
}
function _computeBbox() {
const bbox = inkdraw_classPrivateFieldSet(inkdraw_bbox, this, new Float32Array([Infinity, Infinity, -Infinity, -Infinity]));
for (const {
line
} of inkdraw_classPrivateFieldGet(_lines2, this)) {
if (line.length <= 12) {
for (let i = 4, ii = line.length; i < ii; i += 6) {
Util.pointBoundingBox(line[i], line[i + 1], bbox);
}
continue;
}
let lastX = line[4],
lastY = line[5];
for (let i = 6, ii = line.length; i < ii; i += 6) {
const [c1x, c1y, c2x, c2y, x, y] = line.subarray(i, i + 6);
Util.bezierBoundingBox(lastX, lastY, c1x, c1y, c2x, c2y, x, y, bbox);
lastX = x;
lastY = y;
}
}
const [marginX, marginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
bbox[0] = MathClamp(bbox[0] - marginX, 0, 1);
bbox[1] = MathClamp(bbox[1] - marginY, 0, 1);
bbox[2] = MathClamp(bbox[2] + marginX, 0, 1);
bbox[3] = MathClamp(bbox[3] + marginY, 0, 1);
bbox[2] -= bbox[0];
bbox[3] -= bbox[1];
}
function inkdraw_updateThickness(thickness) {
const [oldMarginX, oldMarginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
inkdraw_classPrivateFieldSet(_thickness2, this, thickness);
const [newMarginX, newMarginY] = inkdraw_assertClassBrand(_InkDrawOutline_brand, this, _getMarginComponents).call(this);
const [diffMarginX, diffMarginY] = [newMarginX - oldMarginX, newMarginY - oldMarginY];
const bbox = inkdraw_classPrivateFieldGet(inkdraw_bbox, this);
bbox[0] -= diffMarginX;
bbox[1] -= diffMarginY;
bbox[2] += 2 * diffMarginX;
bbox[3] += 2 * diffMarginY;
return bbox;
}
;// ./src/display/editor/ink.js
function ink_classPrivateMethodInitSpec(e, a) { ink_checkPrivateRedeclaration(e, a), a.add(e); }
function ink_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function ink_defineProperty(e, r, t) { return (r = ink_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function ink_toPropertyKey(t) { var i = ink_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function ink_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function ink_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
class InkDrawingOptions extends DrawingOptions {
constructor(viewerParameters) {
super();
this._viewParameters = viewerParameters;
super.updateProperties({
fill: "none",
stroke: AnnotationEditor._defaultLineColor,
"stroke-opacity": 1,
"stroke-width": 1,
"stroke-linecap": "round",
"stroke-linejoin": "round",
"stroke-miterlimit": 10
});
}
updateSVGProperty(name, value) {
if (name === "stroke-width") {
value ??= this["stroke-width"];
value *= this._viewParameters.realScale;
}
super.updateSVGProperty(name, value);
}
clone() {
const clone = new InkDrawingOptions(this._viewParameters);
clone.updateAll(this);
return clone;
}
}
var _InkEditor_brand = /*#__PURE__*/new WeakSet();
class InkEditor extends DrawingEditor {
constructor(params) {
super({
...params,
name: "inkEditor"
});
ink_classPrivateMethodInitSpec(this, _InkEditor_brand);
this._willKeepAspectRatio = true;
this.defaultL10nId = "pdfjs-editor-ink-editor";
}
static initialize(l10n, uiManager) {
AnnotationEditor.initialize(l10n, uiManager);
this._defaultDrawingOptions = new InkDrawingOptions(uiManager.viewParameters);
}
static getDefaultDrawingOptions(options) {
const clone = this._defaultDrawingOptions.clone();
clone.updateProperties(options);
return clone;
}
static get supportMultipleDrawings() {
return true;
}
static get typesMap() {
return shadow(this, "typesMap", new Map([[AnnotationEditorParamsType.INK_THICKNESS, "stroke-width"], [AnnotationEditorParamsType.INK_COLOR, "stroke"], [AnnotationEditorParamsType.INK_OPACITY, "stroke-opacity"]]));
}
static createDrawerInstance(x, y, parentWidth, parentHeight, rotation) {
return new InkDrawOutliner(x, y, parentWidth, parentHeight, rotation, this._defaultDrawingOptions["stroke-width"]);
}
static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) {
return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);
}
static async deserialize(data, parent, uiManager) {
let initialData = null;
if (data instanceof InkAnnotationElement) {
const {
data: {
inkLists,
rect,
rotation,
id,
color,
opacity,
borderStyle: {
rawWidth: thickness
},
popupRef
},
parent: {
page: {
pageNumber
}
}
} = data;
initialData = data = {
annotationType: AnnotationEditorType.INK,
color: Array.from(color),
thickness,
opacity,
paths: {
points: inkLists
},
boxes: null,
pageIndex: pageNumber - 1,
rect: rect.slice(0),
rotation,
id,
deleted: false,
popupRef
};
}
const editor = await super.deserialize(data, parent, uiManager);
editor.annotationElementId = data.id || null;
editor._initialData = initialData;
return editor;
}
onScaleChanging() {
if (!this.parent) {
return;
}
super.onScaleChanging();
const {
_drawId,
_drawingOptions,
parent
} = this;
_drawingOptions.updateSVGProperty("stroke-width");
parent.drawLayer.updateProperties(_drawId, _drawingOptions.toSVGProperties());
}
static onScaleChangingWhenDrawing() {
const parent = this._currentParent;
if (!parent) {
return;
}
super.onScaleChangingWhenDrawing();
this._defaultDrawingOptions.updateSVGProperty("stroke-width");
parent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties());
}
createDrawingOptions(_ref) {
let {
color,
thickness,
opacity
} = _ref;
this._drawingOptions = InkEditor.getDefaultDrawingOptions({
stroke: Util.makeHexColor(...color),
"stroke-width": thickness,
"stroke-opacity": opacity
});
}
serialize() {
let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.isEmpty()) {
return null;
}
if (this.deleted) {
return this.serializeDeleted();
}
const {
lines,
points,
rect
} = this.serializeDraw(isForCopying);
const {
_drawingOptions: {
stroke,
"stroke-opacity": opacity,
"stroke-width": thickness
}
} = this;
const serialized = {
annotationType: AnnotationEditorType.INK,
color: AnnotationEditor._colorManager.convert(stroke),
opacity,
thickness,
paths: {
lines,
points
},
pageIndex: this.pageIndex,
rect,
rotation: this.rotation,
structTreeParentId: this._structTreeParentId
};
if (isForCopying) {
serialized.isCopy = true;
return serialized;
}
if (this.annotationElementId && !ink_assertClassBrand(_InkEditor_brand, this, ink_hasElementChanged).call(this, serialized)) {
return null;
}
serialized.id = this.annotationElementId;
return serialized;
}
renderAnnotationElement(annotation) {
const {
points,
rect
} = this.serializeDraw(false);
annotation.updateEdited({
rect,
thickness: this._drawingOptions["stroke-width"],
points
});
return null;
}
}
function ink_hasElementChanged(serialized) {
const {
color,
thickness,
opacity,
pageIndex
} = this._initialData;
return this._hasBeenMoved || this._hasBeenResized || serialized.color.some((c, i) => c !== color[i]) || serialized.thickness !== thickness || serialized.opacity !== opacity || serialized.pageIndex !== pageIndex;
}
ink_defineProperty(InkEditor, "_type", "ink");
ink_defineProperty(InkEditor, "_editorType", AnnotationEditorType.INK);
ink_defineProperty(InkEditor, "_defaultDrawingOptions", null);
;// ./src/display/editor/drawers/contour.js
class ContourDrawOutline extends InkDrawOutline {
toSVGPath() {
let path = super.toSVGPath();
if (!path.endsWith("Z")) {
path += "Z";
}
return path;
}
}
;// ./src/display/editor/drawers/signaturedraw.js
var _SignatureExtractor;
function signaturedraw_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const BASE_HEADER_LENGTH = 8;
const POINTS_PROPERTIES_NUMBER = 3;
class SignatureExtractor {
static extractContoursFromText(text, _ref, pageWidth, pageHeight, rotation, innerMargin) {
let {
fontFamily,
fontStyle,
fontWeight
} = _ref;
let canvas = new OffscreenCanvas(1, 1);
let ctx = canvas.getContext("2d", {
alpha: false
});
const fontSize = 200;
const font = ctx.font = `${fontStyle} ${fontWeight} ${fontSize}px ${fontFamily}`;
const {
actualBoundingBoxLeft,
actualBoundingBoxRight,
actualBoundingBoxAscent,
actualBoundingBoxDescent,
fontBoundingBoxAscent,
fontBoundingBoxDescent,
width
} = ctx.measureText(text);
const SCALE = 1.5;
const canvasWidth = Math.ceil(Math.max(Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0, width) * SCALE);
const canvasHeight = Math.ceil(Math.max(Math.abs(actualBoundingBoxAscent) + Math.abs(actualBoundingBoxDescent) || fontSize, Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) || fontSize) * SCALE);
canvas = new OffscreenCanvas(canvasWidth, canvasHeight);
ctx = canvas.getContext("2d", {
alpha: true,
willReadFrequently: true
});
ctx.font = font;
ctx.filter = "grayscale(1)";
ctx.fillStyle = "white";
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
ctx.fillStyle = "black";
ctx.fillText(text, canvasWidth * (SCALE - 1) / 2, canvasHeight * (3 - SCALE) / 2);
const uint8Buf = signaturedraw_assertClassBrand(SignatureExtractor, this, _toUint).call(this, ctx.getImageData(0, 0, canvasWidth, canvasHeight).data);
const histogram = signaturedraw_assertClassBrand(SignatureExtractor, this, _getHistogram).call(this, uint8Buf);
const threshold = signaturedraw_assertClassBrand(SignatureExtractor, this, _guessThreshold).call(this, histogram);
const contourList = signaturedraw_assertClassBrand(SignatureExtractor, this, _findContours).call(this, uint8Buf, canvasWidth, canvasHeight, threshold);
return this.processDrawnLines({
lines: {
curves: contourList,
width: canvasWidth,
height: canvasHeight
},
pageWidth,
pageHeight,
rotation,
innerMargin,
mustSmooth: true,
areContours: true
});
}
static process(bitmap, pageWidth, pageHeight, rotation, innerMargin) {
const [uint8Buf, width, height] = signaturedraw_assertClassBrand(SignatureExtractor, this, _getGrayPixels).call(this, bitmap);
const [buffer, histogram] = signaturedraw_assertClassBrand(SignatureExtractor, this, _bilateralFilter).call(this, uint8Buf, width, height, Math.hypot(width, height) * signaturedraw_assertClassBrand(SignatureExtractor, this, _PARAMETERS)._.sigmaSFactor, signaturedraw_assertClassBrand(SignatureExtractor, this, _PARAMETERS)._.sigmaR, signaturedraw_assertClassBrand(SignatureExtractor, this, _PARAMETERS)._.kernelSize);
const threshold = signaturedraw_assertClassBrand(SignatureExtractor, this, _guessThreshold).call(this, histogram);
const contourList = signaturedraw_assertClassBrand(SignatureExtractor, this, _findContours).call(this, buffer, width, height, threshold);
return this.processDrawnLines({
lines: {
curves: contourList,
width,
height
},
pageWidth,
pageHeight,
rotation,
innerMargin,
mustSmooth: true,
areContours: true
});
}
static processDrawnLines(_ref2) {
let {
lines,
pageWidth,
pageHeight,
rotation,
innerMargin,
mustSmooth,
areContours
} = _ref2;
if (rotation % 180 !== 0) {
[pageWidth, pageHeight] = [pageHeight, pageWidth];
}
const {
curves,
width,
height
} = lines;
const thickness = lines.thickness ?? 0;
const linesAndPoints = [];
const ratio = Math.min(pageWidth / width, pageHeight / height);
const xScale = ratio / pageWidth;
const yScale = ratio / pageHeight;
const newCurves = [];
for (const {
points
} of curves) {
const reducedPoints = mustSmooth ? signaturedraw_assertClassBrand(SignatureExtractor, this, _douglasPeucker).call(this, points) : points;
if (!reducedPoints) {
continue;
}
newCurves.push(reducedPoints);
const len = reducedPoints.length;
const newPoints = new Float32Array(len);
const line = new Float32Array(3 * (len === 2 ? 2 : len - 2));
linesAndPoints.push({
line,
points: newPoints
});
if (len === 2) {
newPoints[0] = reducedPoints[0] * xScale;
newPoints[1] = reducedPoints[1] * yScale;
line.set([NaN, NaN, NaN, NaN, newPoints[0], newPoints[1]], 0);
continue;
}
let [x1, y1, x2, y2] = reducedPoints;
x1 *= xScale;
y1 *= yScale;
x2 *= xScale;
y2 *= yScale;
newPoints.set([x1, y1, x2, y2], 0);
line.set([NaN, NaN, NaN, NaN, x1, y1], 0);
for (let i = 4; i < len; i += 2) {
const x = newPoints[i] = reducedPoints[i] * xScale;
const y = newPoints[i + 1] = reducedPoints[i + 1] * yScale;
line.set(Outline.createBezierPoints(x1, y1, x2, y2, x, y), (i - 2) * 3);
[x1, y1, x2, y2] = [x2, y2, x, y];
}
}
if (linesAndPoints.length === 0) {
return null;
}
const outline = areContours ? new ContourDrawOutline() : new InkDrawOutline();
outline.build(linesAndPoints, pageWidth, pageHeight, 1, rotation, areContours ? 0 : thickness, innerMargin);
return {
outline,
newCurves,
areContours,
thickness,
width,
height
};
}
static async compressSignature(_ref3) {
let {
outlines,
areContours,
thickness,
width,
height
} = _ref3;
let minDiff = Infinity;
let maxDiff = -Infinity;
let outlinesLength = 0;
for (const points of outlines) {
outlinesLength += points.length;
for (let i = 2, ii = points.length; i < ii; i++) {
const dx = points[i] - points[i - 2];
minDiff = Math.min(minDiff, dx);
maxDiff = Math.max(maxDiff, dx);
}
}
let bufferType;
if (minDiff >= -128 && maxDiff <= 127) {
bufferType = Int8Array;
} else if (minDiff >= -32768 && maxDiff <= 32767) {
bufferType = Int16Array;
} else {
bufferType = Int32Array;
}
const len = outlines.length;
const headerLength = BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * len;
const header = new Uint32Array(headerLength);
let offset = 0;
header[offset++] = headerLength * Uint32Array.BYTES_PER_ELEMENT + (outlinesLength - 2 * len) * bufferType.BYTES_PER_ELEMENT;
header[offset++] = 0;
header[offset++] = width;
header[offset++] = height;
header[offset++] = areContours ? 0 : 1;
header[offset++] = Math.max(0, Math.floor(thickness ?? 0));
header[offset++] = len;
header[offset++] = bufferType.BYTES_PER_ELEMENT;
for (const points of outlines) {
header[offset++] = points.length - 2;
header[offset++] = points[0];
header[offset++] = points[1];
}
const cs = new CompressionStream("deflate-raw");
const writer = cs.writable.getWriter();
await writer.ready;
writer.write(header);
const BufferCtor = bufferType.prototype.constructor;
for (const points of outlines) {
const diffs = new BufferCtor(points.length - 2);
for (let i = 2, ii = points.length; i < ii; i++) {
diffs[i - 2] = points[i] - points[i - 2];
}
writer.write(diffs);
}
writer.close();
const buf = await new Response(cs.readable).arrayBuffer();
const bytes = new Uint8Array(buf);
return toBase64Util(bytes);
}
static async decompressSignature(signatureData) {
try {
const bytes = fromBase64Util(signatureData);
const {
readable,
writable
} = new DecompressionStream("deflate-raw");
const writer = writable.getWriter();
await writer.ready;
writer.write(bytes).then(async () => {
await writer.ready;
await writer.close();
}).catch(() => {});
let data = null;
let offset = 0;
for await (const chunk of readable) {
data ||= new Uint8Array(new Uint32Array(chunk.buffer, 0, 4)[0]);
data.set(chunk, offset);
offset += chunk.length;
}
const header = new Uint32Array(data.buffer, 0, data.length >> 2);
const version = header[1];
if (version !== 0) {
throw new Error(`Invalid version: ${version}`);
}
const width = header[2];
const height = header[3];
const areContours = header[4] === 0;
const thickness = header[5];
const numberOfDrawings = header[6];
const bufferType = header[7];
const outlines = [];
const diffsOffset = (BASE_HEADER_LENGTH + POINTS_PROPERTIES_NUMBER * numberOfDrawings) * Uint32Array.BYTES_PER_ELEMENT;
let diffs;
switch (bufferType) {
case Int8Array.BYTES_PER_ELEMENT:
diffs = new Int8Array(data.buffer, diffsOffset);
break;
case Int16Array.BYTES_PER_ELEMENT:
diffs = new Int16Array(data.buffer, diffsOffset);
break;
case Int32Array.BYTES_PER_ELEMENT:
diffs = new Int32Array(data.buffer, diffsOffset);
break;
}
offset = 0;
for (let i = 0; i < numberOfDrawings; i++) {
const len = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH];
const points = new Float32Array(len + 2);
outlines.push(points);
for (let j = 0; j < POINTS_PROPERTIES_NUMBER - 1; j++) {
points[j] = header[POINTS_PROPERTIES_NUMBER * i + BASE_HEADER_LENGTH + j + 1];
}
for (let j = 0; j < len; j++) {
points[j + 2] = points[j] + diffs[offset++];
}
}
return {
areContours,
thickness,
outlines,
width,
height
};
} catch (e) {
warn(`decompressSignature: ${e}`);
return null;
}
}
}
_SignatureExtractor = SignatureExtractor;
function _neighborIndexToId(i0, j0, i, j) {
i -= i0;
j -= j0;
if (i === 0) {
return j > 0 ? 0 : 4;
}
if (i === 1) {
return j + 6;
}
return 2 - j;
}
function _clockwiseNonZero(buf, width, i0, j0, i, j, offset) {
const id = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIndexToId).call(this, i0, j0, i, j);
for (let k = 0; k < 8; k++) {
const kk = (-k + id - offset + 16) % 8;
const shiftI = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * kk];
const shiftJ = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * kk + 1];
if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {
return kk;
}
}
return -1;
}
function _counterClockwiseNonZero(buf, width, i0, j0, i, j, offset) {
const id = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIndexToId).call(this, i0, j0, i, j);
for (let k = 0; k < 8; k++) {
const kk = (k + id + offset + 16) % 8;
const shiftI = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * kk];
const shiftJ = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * kk + 1];
if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) {
return kk;
}
}
return -1;
}
function _findContours(buf, width, height, threshold) {
const N = buf.length;
const types = new Int32Array(N);
for (let i = 0; i < N; i++) {
types[i] = buf[i] <= threshold ? 1 : 0;
}
for (let i = 1; i < height - 1; i++) {
types[i * width] = types[i * width + width - 1] = 0;
}
for (let i = 0; i < width; i++) {
types[i] = types[width * height - 1 - i] = 0;
}
let nbd = 1;
let lnbd;
const contours = [];
for (let i = 1; i < height - 1; i++) {
lnbd = 1;
for (let j = 1; j < width - 1; j++) {
const ij = i * width + j;
const pix = types[ij];
if (pix === 0) {
continue;
}
let i2 = i;
let j2 = j;
if (pix === 1 && types[ij - 1] === 0) {
nbd += 1;
j2 -= 1;
} else if (pix >= 1 && types[ij + 1] === 0) {
nbd += 1;
j2 += 1;
if (pix > 1) {
lnbd = pix;
}
} else {
if (pix !== 1) {
lnbd = Math.abs(pix);
}
continue;
}
const points = [j, i];
const isHole = j2 === j + 1;
const contour = {
isHole,
points,
id: nbd,
parent: 0
};
contours.push(contour);
let contour0;
for (const c of contours) {
if (c.id === lnbd) {
contour0 = c;
break;
}
}
if (!contour0) {
contour.parent = isHole ? lnbd : 0;
} else if (contour0.isHole) {
contour.parent = isHole ? contour0.parent : lnbd;
} else {
contour.parent = isHole ? lnbd : contour0.parent;
}
const k = signaturedraw_assertClassBrand(_SignatureExtractor, this, _clockwiseNonZero).call(this, types, width, i, j, i2, j2, 0);
if (k === -1) {
types[ij] = -nbd;
if (types[ij] !== 1) {
lnbd = Math.abs(types[ij]);
}
continue;
}
let shiftI = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * k];
let shiftJ = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * k + 1];
const i1 = i + shiftI;
const j1 = j + shiftJ;
i2 = i1;
j2 = j1;
let i3 = i;
let j3 = j;
while (true) {
const kk = signaturedraw_assertClassBrand(_SignatureExtractor, this, _counterClockwiseNonZero).call(this, types, width, i3, j3, i2, j2, 1);
shiftI = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * kk];
shiftJ = signaturedraw_assertClassBrand(_SignatureExtractor, this, _neighborIdToIndex)._[2 * kk + 1];
const i4 = i3 + shiftI;
const j4 = j3 + shiftJ;
points.push(j4, i4);
const ij3 = i3 * width + j3;
if (types[ij3 + 1] === 0) {
types[ij3] = -nbd;
} else if (types[ij3] === 1) {
types[ij3] = nbd;
}
if (i4 === i && j4 === j && i3 === i1 && j3 === j1) {
if (types[ij] !== 1) {
lnbd = Math.abs(types[ij]);
}
break;
} else {
i2 = i3;
j2 = j3;
i3 = i4;
j3 = j4;
}
}
}
}
return contours;
}
function _douglasPeuckerHelper(points, start, end, output) {
if (end - start <= 4) {
for (let i = start; i < end - 2; i += 2) {
output.push(points[i], points[i + 1]);
}
return;
}
const ax = points[start];
const ay = points[start + 1];
const abx = points[end - 4] - ax;
const aby = points[end - 3] - ay;
const dist = Math.hypot(abx, aby);
const nabx = abx / dist;
const naby = aby / dist;
const aa = nabx * ay - naby * ax;
const m = aby / abx;
const invS = 1 / dist;
const phi = Math.atan(m);
const cosPhi = Math.cos(phi);
const sinPhi = Math.sin(phi);
const tmax = invS * (Math.abs(cosPhi) + Math.abs(sinPhi));
const poly = invS * (1 - tmax + tmax ** 2);
const partialPhi = Math.max(Math.atan(Math.abs(sinPhi + cosPhi) * poly), Math.atan(Math.abs(sinPhi - cosPhi) * poly));
let dmax = 0;
let index = start;
for (let i = start + 2; i < end - 2; i += 2) {
const d = Math.abs(aa - nabx * points[i + 1] + naby * points[i]);
if (d > dmax) {
index = i;
dmax = d;
}
}
if (dmax > (dist * partialPhi) ** 2) {
signaturedraw_assertClassBrand(_SignatureExtractor, this, _douglasPeuckerHelper).call(this, points, start, index + 2, output);
signaturedraw_assertClassBrand(_SignatureExtractor, this, _douglasPeuckerHelper).call(this, points, index, end, output);
} else {
output.push(ax, ay);
}
}
function _douglasPeucker(points) {
const output = [];
const len = points.length;
signaturedraw_assertClassBrand(_SignatureExtractor, this, _douglasPeuckerHelper).call(this, points, 0, len, output);
output.push(points[len - 2], points[len - 1]);
return output.length <= 4 ? null : output;
}
function _bilateralFilter(buf, width, height, sigmaS, sigmaR, kernelSize) {
const kernel = new Float32Array(kernelSize ** 2);
const sigmaS2 = -2 * sigmaS ** 2;
const halfSize = kernelSize >> 1;
for (let i = 0; i < kernelSize; i++) {
const x = (i - halfSize) ** 2;
for (let j = 0; j < kernelSize; j++) {
kernel[i * kernelSize + j] = Math.exp((x + (j - halfSize) ** 2) / sigmaS2);
}
}
const rangeValues = new Float32Array(256);
const sigmaR2 = -2 * sigmaR ** 2;
for (let i = 0; i < 256; i++) {
rangeValues[i] = Math.exp(i ** 2 / sigmaR2);
}
const N = buf.length;
const out = new Uint8Array(N);
const histogram = new Uint32Array(256);
for (let i = 0; i < height; i++) {
for (let j = 0; j < width; j++) {
const ij = i * width + j;
const center = buf[ij];
let sum = 0;
let norm = 0;
for (let k = 0; k < kernelSize; k++) {
const y = i + k - halfSize;
if (y < 0 || y >= height) {
continue;
}
for (let l = 0; l < kernelSize; l++) {
const x = j + l - halfSize;
if (x < 0 || x >= width) {
continue;
}
const neighbour = buf[y * width + x];
const w = kernel[k * kernelSize + l] * rangeValues[Math.abs(neighbour - center)];
sum += neighbour * w;
norm += w;
}
}
const pix = out[ij] = Math.round(sum / norm);
histogram[pix]++;
}
}
return [out, histogram];
}
function _getHistogram(buf) {
const histogram = new Uint32Array(256);
for (const g of buf) {
histogram[g]++;
}
return histogram;
}
function _toUint(buf) {
const N = buf.length;
const out = new Uint8ClampedArray(N >> 2);
let max = -Infinity;
let min = Infinity;
for (let i = 0, ii = out.length; i < ii; i++) {
const A = buf[(i << 2) + 3];
if (A === 0) {
max = out[i] = 0xff;
continue;
}
const pix = out[i] = buf[i << 2];
if (pix > max) {
max = pix;
}
if (pix < min) {
min = pix;
}
}
const ratio = 255 / (max - min);
for (let i = 0; i < N; i++) {
out[i] = (out[i] - min) * ratio;
}
return out;
}
function _guessThreshold(histogram) {
let i;
let M = -Infinity;
let L = -Infinity;
const min = histogram.findIndex(v => v !== 0);
let pos = min;
let spos = min;
for (i = min; i < 256; i++) {
const v = histogram[i];
if (v > M) {
if (i - pos > L) {
L = i - pos;
spos = i - 1;
}
M = v;
pos = i;
}
}
for (i = spos - 1; i >= 0; i--) {
if (histogram[i] > histogram[i + 1]) {
break;
}
}
return i;
}
function _getGrayPixels(bitmap) {
const originalBitmap = bitmap;
const {
width,
height
} = bitmap;
const {
maxDim
} = signaturedraw_assertClassBrand(_SignatureExtractor, this, _PARAMETERS)._;
let newWidth = width;
let newHeight = height;
if (width > maxDim || height > maxDim) {
let prevWidth = width;
let prevHeight = height;
let steps = Math.log2(Math.max(width, height) / maxDim);
const isteps = Math.floor(steps);
steps = steps === isteps ? isteps - 1 : isteps;
for (let i = 0; i < steps; i++) {
newWidth = Math.ceil(prevWidth / 2);
newHeight = Math.ceil(prevHeight / 2);
const offscreen = new OffscreenCanvas(newWidth, newHeight);
const ctx = offscreen.getContext("2d");
ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);
prevWidth = newWidth;
prevHeight = newHeight;
if (bitmap !== originalBitmap) {
bitmap.close();
}
bitmap = offscreen.transferToImageBitmap();
}
const ratio = Math.min(maxDim / newWidth, maxDim / newHeight);
newWidth = Math.round(newWidth * ratio);
newHeight = Math.round(newHeight * ratio);
}
const offscreen = new OffscreenCanvas(newWidth, newHeight);
const ctx = offscreen.getContext("2d", {
willReadFrequently: true
});
ctx.filter = "grayscale(1)";
ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, newWidth, newHeight);
const grayImage = ctx.getImageData(0, 0, newWidth, newHeight).data;
const uint8Buf = signaturedraw_assertClassBrand(_SignatureExtractor, this, _toUint).call(this, grayImage);
return [uint8Buf, newWidth, newHeight];
}
var _PARAMETERS = {
_: {
maxDim: 512,
sigmaSFactor: 0.02,
sigmaR: 25,
kernelSize: 16
}
};
var _neighborIdToIndex = {
_: new Int32Array([0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1])
};
;// ./src/display/editor/signature.js
function signature_defineProperty(e, r, t) { return (r = signature_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function signature_toPropertyKey(t) { var i = signature_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function signature_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function signature_classPrivateFieldInitSpec(e, t, a) { signature_checkPrivateRedeclaration(e, t), t.set(e, a); }
function signature_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function signature_classPrivateFieldGet(s, a) { return s.get(signature_assertClassBrand(s, a)); }
function signature_classPrivateFieldSet(s, a, r) { return s.set(signature_assertClassBrand(s, a), r), r; }
function signature_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
class SignatureOptions extends DrawingOptions {
constructor() {
super();
super.updateProperties({
fill: AnnotationEditor._defaultLineColor,
"stroke-width": 0
});
}
clone() {
const clone = new SignatureOptions();
clone.updateAll(this);
return clone;
}
}
class DrawnSignatureOptions extends InkDrawingOptions {
constructor(viewerParameters) {
super(viewerParameters);
super.updateProperties({
stroke: AnnotationEditor._defaultLineColor,
"stroke-width": 1
});
}
clone() {
const clone = new DrawnSignatureOptions(this._viewParameters);
clone.updateAll(this);
return clone;
}
}
var _isExtracted = /*#__PURE__*/new WeakMap();
var _description = /*#__PURE__*/new WeakMap();
var _signatureData = /*#__PURE__*/new WeakMap();
var _signatureUUID = /*#__PURE__*/new WeakMap();
class SignatureEditor extends DrawingEditor {
constructor(params) {
super({
...params,
mustBeCommitted: true,
name: "signatureEditor"
});
signature_classPrivateFieldInitSpec(this, _isExtracted, false);
signature_classPrivateFieldInitSpec(this, _description, null);
signature_classPrivateFieldInitSpec(this, _signatureData, null);
signature_classPrivateFieldInitSpec(this, _signatureUUID, null);
this._willKeepAspectRatio = true;
signature_classPrivateFieldSet(_signatureData, this, params.signatureData || null);
signature_classPrivateFieldSet(_description, this, null);
this.defaultL10nId = "pdfjs-editor-signature-editor1";
}
static initialize(l10n, uiManager) {
AnnotationEditor.initialize(l10n, uiManager);
this._defaultDrawingOptions = new SignatureOptions();
this._defaultDrawnSignatureOptions = new DrawnSignatureOptions(uiManager.viewParameters);
}
static getDefaultDrawingOptions(options) {
const clone = this._defaultDrawingOptions.clone();
clone.updateProperties(options);
return clone;
}
static get supportMultipleDrawings() {
return false;
}
static get typesMap() {
return shadow(this, "typesMap", new Map());
}
static get isDrawer() {
return false;
}
get telemetryFinalData() {
return {
type: "signature",
hasDescription: !!signature_classPrivateFieldGet(_description, this)
};
}
static computeTelemetryFinalData(data) {
const hasDescriptionStats = data.get("hasDescription");
return {
hasAltText: hasDescriptionStats.get(true) ?? 0,
hasNoAltText: hasDescriptionStats.get(false) ?? 0
};
}
get isResizable() {
return true;
}
onScaleChanging() {
if (this._drawId === null) {
return;
}
super.onScaleChanging();
}
render() {
if (this.div) {
return this.div;
}
let baseX, baseY;
const {
_isCopy
} = this;
if (_isCopy) {
this._isCopy = false;
baseX = this.x;
baseY = this.y;
}
super.render();
if (this._drawId === null) {
if (signature_classPrivateFieldGet(_signatureData, this)) {
const {
lines,
mustSmooth,
areContours,
description,
uuid,
heightInPage
} = signature_classPrivateFieldGet(_signatureData, this);
const {
rawDims: {
pageWidth,
pageHeight
},
rotation
} = this.parent.viewport;
const outline = SignatureExtractor.processDrawnLines({
lines,
pageWidth,
pageHeight,
rotation,
innerMargin: SignatureEditor._INNER_MARGIN,
mustSmooth,
areContours
});
this.addSignature(outline, heightInPage, description, uuid);
} else {
this.div.setAttribute("data-l10n-args", JSON.stringify({
description: ""
}));
this.div.hidden = true;
this._uiManager.getSignature(this);
}
}
if (_isCopy) {
this._isCopy = true;
this._moveAfterPaste(baseX, baseY);
}
return this.div;
}
setUuid(uuid) {
signature_classPrivateFieldSet(_signatureUUID, this, uuid);
this.addEditToolbar();
}
getUuid() {
return signature_classPrivateFieldGet(_signatureUUID, this);
}
get description() {
return signature_classPrivateFieldGet(_description, this);
}
set description(description) {
signature_classPrivateFieldSet(_description, this, description);
super.addEditToolbar().then(toolbar => {
toolbar?.updateEditSignatureButton(description);
});
}
getSignaturePreview() {
const {
newCurves,
areContours,
thickness,
width,
height
} = signature_classPrivateFieldGet(_signatureData, this);
const maxDim = Math.max(width, height);
const outlineData = SignatureExtractor.processDrawnLines({
lines: {
curves: newCurves.map(points => ({
points
})),
thickness,
width,
height
},
pageWidth: maxDim,
pageHeight: maxDim,
rotation: 0,
innerMargin: 0,
mustSmooth: false,
areContours
});
return {
areContours,
outline: outlineData.outline
};
}
async addEditToolbar() {
const toolbar = await super.addEditToolbar();
if (!toolbar) {
return null;
}
if (this._uiManager.signatureManager && signature_classPrivateFieldGet(_description, this) !== null) {
await toolbar.addEditSignatureButton(this._uiManager.signatureManager, signature_classPrivateFieldGet(_signatureUUID, this), signature_classPrivateFieldGet(_description, this));
toolbar.show();
}
return toolbar;
}
addSignature(data, heightInPage, description, uuid) {
const {
x: savedX,
y: savedY
} = this;
const {
outline
} = signature_classPrivateFieldSet(_signatureData, this, data);
signature_classPrivateFieldSet(_isExtracted, this, outline instanceof ContourDrawOutline);
signature_classPrivateFieldSet(_description, this, description);
this.div.setAttribute("data-l10n-args", JSON.stringify({
description
}));
let drawingOptions;
if (signature_classPrivateFieldGet(_isExtracted, this)) {
drawingOptions = SignatureEditor.getDefaultDrawingOptions();
} else {
drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();
drawingOptions.updateProperties({
"stroke-width": outline.thickness
});
}
this._addOutlines({
drawOutlines: outline,
drawingOptions
});
const [parentWidth, parentHeight] = this.parentDimensions;
const [, pageHeight] = this.pageDimensions;
let newHeight = heightInPage / pageHeight;
newHeight = newHeight >= 1 ? 0.5 : newHeight;
this.width *= newHeight / this.height;
if (this.width >= 1) {
newHeight *= 0.9 / this.width;
this.width = 0.9;
}
this.height = newHeight;
this.setDims(parentWidth * this.width, parentHeight * this.height);
this.x = savedX;
this.y = savedY;
this.center();
this._onResized();
this.onScaleChanging();
this.rotate();
this._uiManager.addToAnnotationStorage(this);
this.setUuid(uuid);
this._reportTelemetry({
action: "pdfjs.signature.inserted",
data: {
hasBeenSaved: !!uuid,
hasDescription: !!description
}
});
this.div.hidden = false;
}
getFromImage(bitmap) {
const {
rawDims: {
pageWidth,
pageHeight
},
rotation
} = this.parent.viewport;
return SignatureExtractor.process(bitmap, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN);
}
getFromText(text, fontInfo) {
const {
rawDims: {
pageWidth,
pageHeight
},
rotation
} = this.parent.viewport;
return SignatureExtractor.extractContoursFromText(text, fontInfo, pageWidth, pageHeight, rotation, SignatureEditor._INNER_MARGIN);
}
getDrawnSignature(curves) {
const {
rawDims: {
pageWidth,
pageHeight
},
rotation
} = this.parent.viewport;
return SignatureExtractor.processDrawnLines({
lines: curves,
pageWidth,
pageHeight,
rotation,
innerMargin: SignatureEditor._INNER_MARGIN,
mustSmooth: false,
areContours: false
});
}
createDrawingOptions(_ref) {
let {
areContours,
thickness
} = _ref;
if (areContours) {
this._drawingOptions = SignatureEditor.getDefaultDrawingOptions();
} else {
this._drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone();
this._drawingOptions.updateProperties({
"stroke-width": thickness
});
}
}
serialize() {
let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.isEmpty()) {
return null;
}
const {
lines,
points,
rect
} = this.serializeDraw(isForCopying);
const {
_drawingOptions: {
"stroke-width": thickness
}
} = this;
const serialized = {
annotationType: AnnotationEditorType.SIGNATURE,
isSignature: true,
areContours: signature_classPrivateFieldGet(_isExtracted, this),
color: [0, 0, 0],
thickness: signature_classPrivateFieldGet(_isExtracted, this) ? 0 : thickness,
pageIndex: this.pageIndex,
rect,
rotation: this.rotation,
structTreeParentId: this._structTreeParentId
};
if (isForCopying) {
serialized.paths = {
lines,
points
};
serialized.uuid = signature_classPrivateFieldGet(_signatureUUID, this);
serialized.isCopy = true;
} else {
serialized.lines = lines;
}
if (signature_classPrivateFieldGet(_description, this)) {
serialized.accessibilityData = {
type: "Figure",
alt: signature_classPrivateFieldGet(_description, this)
};
}
return serialized;
}
static deserializeDraw(pageX, pageY, pageWidth, pageHeight, innerMargin, data) {
if (data.areContours) {
return ContourDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);
}
return InkDrawOutline.deserialize(pageX, pageY, pageWidth, pageHeight, innerMargin, data);
}
static async deserialize(data, parent, uiManager) {
const editor = await super.deserialize(data, parent, uiManager);
signature_classPrivateFieldSet(_isExtracted, editor, data.areContours);
signature_classPrivateFieldSet(_description, editor, data.accessibilityData?.alt || "");
signature_classPrivateFieldSet(_signatureUUID, editor, data.uuid);
return editor;
}
}
signature_defineProperty(SignatureEditor, "_type", "signature");
signature_defineProperty(SignatureEditor, "_editorType", AnnotationEditorType.SIGNATURE);
signature_defineProperty(SignatureEditor, "_defaultDrawingOptions", null);
;// ./src/display/editor/stamp.js
function stamp_classPrivateMethodInitSpec(e, a) { stamp_checkPrivateRedeclaration(e, a), a.add(e); }
function stamp_defineProperty(e, r, t) { return (r = stamp_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function stamp_toPropertyKey(t) { var i = stamp_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function stamp_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function stamp_classPrivateFieldInitSpec(e, t, a) { stamp_checkPrivateRedeclaration(e, t), t.set(e, a); }
function stamp_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function stamp_classPrivateFieldGet(s, a) { return s.get(stamp_assertClassBrand(s, a)); }
function stamp_classPrivateFieldSet(s, a, r) { return s.set(stamp_assertClassBrand(s, a), r), r; }
function stamp_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _bitmap = /*#__PURE__*/new WeakMap();
var _bitmapId = /*#__PURE__*/new WeakMap();
var _bitmapPromise = /*#__PURE__*/new WeakMap();
var _bitmapUrl = /*#__PURE__*/new WeakMap();
var _bitmapFile = /*#__PURE__*/new WeakMap();
var _bitmapFileName = /*#__PURE__*/new WeakMap();
var _canvas = /*#__PURE__*/new WeakMap();
var _missingCanvas = /*#__PURE__*/new WeakMap();
var _resizeTimeoutId = /*#__PURE__*/new WeakMap();
var _isSvg = /*#__PURE__*/new WeakMap();
var _hasBeenAddedInUndoStack = /*#__PURE__*/new WeakMap();
var _StampEditor_brand = /*#__PURE__*/new WeakSet();
class StampEditor extends AnnotationEditor {
constructor(params) {
super({
...params,
name: "stampEditor"
});
stamp_classPrivateMethodInitSpec(this, _StampEditor_brand);
stamp_classPrivateFieldInitSpec(this, _bitmap, null);
stamp_classPrivateFieldInitSpec(this, _bitmapId, null);
stamp_classPrivateFieldInitSpec(this, _bitmapPromise, null);
stamp_classPrivateFieldInitSpec(this, _bitmapUrl, null);
stamp_classPrivateFieldInitSpec(this, _bitmapFile, null);
stamp_classPrivateFieldInitSpec(this, _bitmapFileName, "");
stamp_classPrivateFieldInitSpec(this, _canvas, null);
stamp_classPrivateFieldInitSpec(this, _missingCanvas, false);
stamp_classPrivateFieldInitSpec(this, _resizeTimeoutId, null);
stamp_classPrivateFieldInitSpec(this, _isSvg, false);
stamp_classPrivateFieldInitSpec(this, _hasBeenAddedInUndoStack, false);
stamp_classPrivateFieldSet(_bitmapUrl, this, params.bitmapUrl);
stamp_classPrivateFieldSet(_bitmapFile, this, params.bitmapFile);
this.defaultL10nId = "pdfjs-editor-stamp-editor";
}
static initialize(l10n, uiManager) {
AnnotationEditor.initialize(l10n, uiManager);
}
static isHandlingMimeForPasting(mime) {
return SupportedImageMimeTypes.includes(mime);
}
static paste(item, parent) {
parent.pasteEditor({
mode: AnnotationEditorType.STAMP
}, {
bitmapFile: item.getAsFile()
});
}
altTextFinish() {
if (this._uiManager.useNewAltTextFlow) {
this.div.hidden = false;
}
super.altTextFinish();
}
get telemetryFinalData() {
return {
type: "stamp",
hasAltText: !!this.altTextData?.altText
};
}
static computeTelemetryFinalData(data) {
const hasAltTextStats = data.get("hasAltText");
return {
hasAltText: hasAltTextStats.get(true) ?? 0,
hasNoAltText: hasAltTextStats.get(false) ?? 0
};
}
async mlGuessAltText() {
let imageData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let updateAltTextData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
if (this.hasAltTextData()) {
return null;
}
const {
mlManager
} = this._uiManager;
if (!mlManager) {
throw new Error("No ML.");
}
if (!(await mlManager.isEnabledFor("altText"))) {
throw new Error("ML isn't enabled for alt text.");
}
const {
data,
width,
height
} = imageData || this.copyCanvas(null, null, true).imageData;
const response = await mlManager.guess({
name: "altText",
request: {
data,
width,
height,
channels: data.length / (width * height)
}
});
if (!response) {
throw new Error("No response from the AI service.");
}
if (response.error) {
throw new Error("Error from the AI service.");
}
if (response.cancel) {
return null;
}
if (!response.output) {
throw new Error("No valid response from the AI service.");
}
const altText = response.output;
await this.setGuessedAltText(altText);
if (updateAltTextData && !this.hasAltTextData()) {
this.altTextData = {
alt: altText,
decorative: false
};
}
return altText;
}
remove() {
if (stamp_classPrivateFieldGet(_bitmapId, this)) {
stamp_classPrivateFieldSet(_bitmap, this, null);
this._uiManager.imageManager.deleteId(stamp_classPrivateFieldGet(_bitmapId, this));
stamp_classPrivateFieldGet(_canvas, this)?.remove();
stamp_classPrivateFieldSet(_canvas, this, null);
if (stamp_classPrivateFieldGet(_resizeTimeoutId, this)) {
clearTimeout(stamp_classPrivateFieldGet(_resizeTimeoutId, this));
stamp_classPrivateFieldSet(_resizeTimeoutId, this, null);
}
}
super.remove();
}
rebuild() {
if (!this.parent) {
if (stamp_classPrivateFieldGet(_bitmapId, this)) {
stamp_assertClassBrand(_StampEditor_brand, this, _getBitmap).call(this);
}
return;
}
super.rebuild();
if (this.div === null) {
return;
}
if (stamp_classPrivateFieldGet(_bitmapId, this) && stamp_classPrivateFieldGet(_canvas, this) === null) {
stamp_assertClassBrand(_StampEditor_brand, this, _getBitmap).call(this);
}
if (!this.isAttachedToDOM) {
this.parent.add(this);
}
}
onceAdded(focus) {
this._isDraggable = true;
if (focus) {
this.div.focus();
}
}
isEmpty() {
return !(stamp_classPrivateFieldGet(_bitmapPromise, this) || stamp_classPrivateFieldGet(_bitmap, this) || stamp_classPrivateFieldGet(_bitmapUrl, this) || stamp_classPrivateFieldGet(_bitmapFile, this) || stamp_classPrivateFieldGet(_bitmapId, this) || stamp_classPrivateFieldGet(_missingCanvas, this));
}
get isResizable() {
return true;
}
render() {
if (this.div) {
return this.div;
}
let baseX, baseY;
if (this._isCopy) {
baseX = this.x;
baseY = this.y;
}
super.render();
this.div.hidden = true;
this.addAltTextButton();
if (!stamp_classPrivateFieldGet(_missingCanvas, this)) {
if (stamp_classPrivateFieldGet(_bitmap, this)) {
stamp_assertClassBrand(_StampEditor_brand, this, _createCanvas).call(this);
} else {
stamp_assertClassBrand(_StampEditor_brand, this, _getBitmap).call(this);
}
}
if (this._isCopy) {
this._moveAfterPaste(baseX, baseY);
}
this._uiManager.addShouldRescale(this);
return this.div;
}
setCanvas(annotationElementId, canvas) {
const {
id: bitmapId,
bitmap
} = this._uiManager.imageManager.getFromCanvas(annotationElementId, canvas);
canvas.remove();
if (bitmapId && this._uiManager.imageManager.isValidId(bitmapId)) {
stamp_classPrivateFieldSet(_bitmapId, this, bitmapId);
if (bitmap) {
stamp_classPrivateFieldSet(_bitmap, this, bitmap);
}
stamp_classPrivateFieldSet(_missingCanvas, this, false);
stamp_assertClassBrand(_StampEditor_brand, this, _createCanvas).call(this);
}
}
_onResized() {
this.onScaleChanging();
}
onScaleChanging() {
if (!this.parent) {
return;
}
if (stamp_classPrivateFieldGet(_resizeTimeoutId, this) !== null) {
clearTimeout(stamp_classPrivateFieldGet(_resizeTimeoutId, this));
}
const TIME_TO_WAIT = 200;
stamp_classPrivateFieldSet(_resizeTimeoutId, this, setTimeout(() => {
stamp_classPrivateFieldSet(_resizeTimeoutId, this, null);
stamp_assertClassBrand(_StampEditor_brand, this, _drawBitmap).call(this);
}, TIME_TO_WAIT));
}
copyCanvas(maxDataDimension, maxPreviewDimension) {
let createImageData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (!maxDataDimension) {
maxDataDimension = 224;
}
const {
width: bitmapWidth,
height: bitmapHeight
} = stamp_classPrivateFieldGet(_bitmap, this);
const outputScale = new OutputScale();
let bitmap = stamp_classPrivateFieldGet(_bitmap, this);
let width = bitmapWidth,
height = bitmapHeight;
let canvas = null;
if (maxPreviewDimension) {
if (bitmapWidth > maxPreviewDimension || bitmapHeight > maxPreviewDimension) {
const ratio = Math.min(maxPreviewDimension / bitmapWidth, maxPreviewDimension / bitmapHeight);
width = Math.floor(bitmapWidth * ratio);
height = Math.floor(bitmapHeight * ratio);
}
canvas = document.createElement("canvas");
const scaledWidth = canvas.width = Math.ceil(width * outputScale.sx);
const scaledHeight = canvas.height = Math.ceil(height * outputScale.sy);
if (!stamp_classPrivateFieldGet(_isSvg, this)) {
bitmap = stamp_assertClassBrand(_StampEditor_brand, this, _scaleBitmap).call(this, scaledWidth, scaledHeight);
}
const ctx = canvas.getContext("2d");
ctx.filter = this._uiManager.hcmFilter;
let white = "white",
black = "#cfcfd8";
if (this._uiManager.hcmFilter !== "none") {
black = "black";
} else if (window.matchMedia?.("(prefers-color-scheme: dark)").matches) {
white = "#8f8f9d";
black = "#42414d";
}
const boxDim = 15;
const boxDimWidth = boxDim * outputScale.sx;
const boxDimHeight = boxDim * outputScale.sy;
const pattern = new OffscreenCanvas(boxDimWidth * 2, boxDimHeight * 2);
const patternCtx = pattern.getContext("2d");
patternCtx.fillStyle = white;
patternCtx.fillRect(0, 0, boxDimWidth * 2, boxDimHeight * 2);
patternCtx.fillStyle = black;
patternCtx.fillRect(0, 0, boxDimWidth, boxDimHeight);
patternCtx.fillRect(boxDimWidth, boxDimHeight, boxDimWidth, boxDimHeight);
ctx.fillStyle = ctx.createPattern(pattern, "repeat");
ctx.fillRect(0, 0, scaledWidth, scaledHeight);
ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight);
}
let imageData = null;
if (createImageData) {
let dataWidth, dataHeight;
if (outputScale.symmetric && bitmap.width < maxDataDimension && bitmap.height < maxDataDimension) {
dataWidth = bitmap.width;
dataHeight = bitmap.height;
} else {
bitmap = stamp_classPrivateFieldGet(_bitmap, this);
if (bitmapWidth > maxDataDimension || bitmapHeight > maxDataDimension) {
const ratio = Math.min(maxDataDimension / bitmapWidth, maxDataDimension / bitmapHeight);
dataWidth = Math.floor(bitmapWidth * ratio);
dataHeight = Math.floor(bitmapHeight * ratio);
if (!stamp_classPrivateFieldGet(_isSvg, this)) {
bitmap = stamp_assertClassBrand(_StampEditor_brand, this, _scaleBitmap).call(this, dataWidth, dataHeight);
}
}
}
const offscreen = new OffscreenCanvas(dataWidth, dataHeight);
const offscreenCtx = offscreen.getContext("2d", {
willReadFrequently: true
});
offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, dataWidth, dataHeight);
imageData = {
width: dataWidth,
height: dataHeight,
data: offscreenCtx.getImageData(0, 0, dataWidth, dataHeight).data
};
}
return {
canvas,
width,
height,
imageData
};
}
static async deserialize(data, parent, uiManager) {
let initialData = null;
let missingCanvas = false;
if (data instanceof StampAnnotationElement) {
const {
data: {
rect,
rotation,
id,
structParent,
popupRef
},
container,
parent: {
page: {
pageNumber
}
},
canvas
} = data;
let bitmapId, bitmap;
if (canvas) {
delete data.canvas;
({
id: bitmapId,
bitmap
} = uiManager.imageManager.getFromCanvas(container.id, canvas));
canvas.remove();
} else {
missingCanvas = true;
data._hasNoCanvas = true;
}
const altText = (await parent._structTree.getAriaAttributes(`${AnnotationPrefix}${id}`))?.get("aria-label") || "";
initialData = data = {
annotationType: AnnotationEditorType.STAMP,
bitmapId,
bitmap,
pageIndex: pageNumber - 1,
rect: rect.slice(0),
rotation,
id,
deleted: false,
accessibilityData: {
decorative: false,
altText
},
isSvg: false,
structParent,
popupRef
};
}
const editor = await super.deserialize(data, parent, uiManager);
const {
rect,
bitmap,
bitmapUrl,
bitmapId,
isSvg,
accessibilityData
} = data;
if (missingCanvas) {
uiManager.addMissingCanvas(data.id, editor);
stamp_classPrivateFieldSet(_missingCanvas, editor, true);
} else if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {
stamp_classPrivateFieldSet(_bitmapId, editor, bitmapId);
if (bitmap) {
stamp_classPrivateFieldSet(_bitmap, editor, bitmap);
}
} else {
stamp_classPrivateFieldSet(_bitmapUrl, editor, bitmapUrl);
}
stamp_classPrivateFieldSet(_isSvg, editor, isSvg);
const [parentWidth, parentHeight] = editor.pageDimensions;
editor.width = (rect[2] - rect[0]) / parentWidth;
editor.height = (rect[3] - rect[1]) / parentHeight;
editor.annotationElementId = data.id || null;
if (accessibilityData) {
editor.altTextData = accessibilityData;
}
editor._initialData = initialData;
stamp_classPrivateFieldSet(_hasBeenAddedInUndoStack, editor, !!initialData);
return editor;
}
serialize() {
let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (this.isEmpty()) {
return null;
}
if (this.deleted) {
return this.serializeDeleted();
}
const serialized = {
annotationType: AnnotationEditorType.STAMP,
bitmapId: stamp_classPrivateFieldGet(_bitmapId, this),
pageIndex: this.pageIndex,
rect: this.getRect(0, 0),
rotation: this.rotation,
isSvg: stamp_classPrivateFieldGet(_isSvg, this),
structTreeParentId: this._structTreeParentId
};
if (isForCopying) {
serialized.bitmapUrl = stamp_assertClassBrand(_StampEditor_brand, this, _serializeBitmap).call(this, true);
serialized.accessibilityData = this.serializeAltText(true);
serialized.isCopy = true;
return serialized;
}
const {
decorative,
altText
} = this.serializeAltText(false);
if (!decorative && altText) {
serialized.accessibilityData = {
type: "Figure",
alt: altText
};
}
if (this.annotationElementId) {
const changes = stamp_assertClassBrand(_StampEditor_brand, this, stamp_hasElementChanged).call(this, serialized);
if (changes.isSame) {
return null;
}
if (changes.isSameAltText) {
delete serialized.accessibilityData;
} else {
serialized.accessibilityData.structParent = this._initialData.structParent ?? -1;
}
}
serialized.id = this.annotationElementId;
if (context === null) {
return serialized;
}
context.stamps ||= new Map();
const area = stamp_classPrivateFieldGet(_isSvg, this) ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;
if (!context.stamps.has(stamp_classPrivateFieldGet(_bitmapId, this))) {
context.stamps.set(stamp_classPrivateFieldGet(_bitmapId, this), {
area,
serialized
});
serialized.bitmap = stamp_assertClassBrand(_StampEditor_brand, this, _serializeBitmap).call(this, false);
} else if (stamp_classPrivateFieldGet(_isSvg, this)) {
const prevData = context.stamps.get(stamp_classPrivateFieldGet(_bitmapId, this));
if (area > prevData.area) {
prevData.area = area;
prevData.serialized.bitmap.close();
prevData.serialized.bitmap = stamp_assertClassBrand(_StampEditor_brand, this, _serializeBitmap).call(this, false);
}
}
return serialized;
}
renderAnnotationElement(annotation) {
annotation.updateEdited({
rect: this.getRect(0, 0)
});
return null;
}
}
function _getBitmapFetched(data) {
let fromId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!data) {
this.remove();
return;
}
stamp_classPrivateFieldSet(_bitmap, this, data.bitmap);
if (!fromId) {
stamp_classPrivateFieldSet(_bitmapId, this, data.id);
stamp_classPrivateFieldSet(_isSvg, this, data.isSvg);
}
if (data.file) {
stamp_classPrivateFieldSet(_bitmapFileName, this, data.file.name);
}
stamp_assertClassBrand(_StampEditor_brand, this, _createCanvas).call(this);
}
function _getBitmapDone() {
stamp_classPrivateFieldSet(_bitmapPromise, this, null);
this._uiManager.enableWaiting(false);
if (!stamp_classPrivateFieldGet(_canvas, this)) {
return;
}
if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && stamp_classPrivateFieldGet(_bitmap, this)) {
this._editToolbar.hide();
this._uiManager.editAltText(this, true);
return;
}
if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && stamp_classPrivateFieldGet(_bitmap, this)) {
this._reportTelemetry({
action: "pdfjs.image.image_added",
data: {
alt_text_modal: false,
alt_text_type: "empty"
}
});
try {
this.mlGuessAltText();
} catch {}
}
this.div.focus();
}
function _getBitmap() {
if (stamp_classPrivateFieldGet(_bitmapId, this)) {
this._uiManager.enableWaiting(true);
this._uiManager.imageManager.getFromId(stamp_classPrivateFieldGet(_bitmapId, this)).then(data => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapFetched).call(this, data, true)).finally(() => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapDone).call(this));
return;
}
if (stamp_classPrivateFieldGet(_bitmapUrl, this)) {
const url = stamp_classPrivateFieldGet(_bitmapUrl, this);
stamp_classPrivateFieldSet(_bitmapUrl, this, null);
this._uiManager.enableWaiting(true);
stamp_classPrivateFieldSet(_bitmapPromise, this, this._uiManager.imageManager.getFromUrl(url).then(data => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapFetched).call(this, data)).finally(() => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapDone).call(this)));
return;
}
if (stamp_classPrivateFieldGet(_bitmapFile, this)) {
const file = stamp_classPrivateFieldGet(_bitmapFile, this);
stamp_classPrivateFieldSet(_bitmapFile, this, null);
this._uiManager.enableWaiting(true);
stamp_classPrivateFieldSet(_bitmapPromise, this, this._uiManager.imageManager.getFromFile(file).then(data => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapFetched).call(this, data)).finally(() => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapDone).call(this)));
return;
}
const input = document.createElement("input");
input.type = "file";
input.accept = SupportedImageMimeTypes.join(",");
const signal = this._uiManager._signal;
stamp_classPrivateFieldSet(_bitmapPromise, this, new Promise(resolve => {
input.addEventListener("change", async () => {
if (!input.files || input.files.length === 0) {
this.remove();
} else {
this._uiManager.enableWaiting(true);
const data = await this._uiManager.imageManager.getFromFile(input.files[0]);
this._reportTelemetry({
action: "pdfjs.image.image_selected",
data: {
alt_text_modal: this._uiManager.useNewAltTextFlow
}
});
stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapFetched).call(this, data);
}
resolve();
}, {
signal
});
input.addEventListener("cancel", () => {
this.remove();
resolve();
}, {
signal
});
}).finally(() => stamp_assertClassBrand(_StampEditor_brand, this, _getBitmapDone).call(this)));
input.click();
}
function _createCanvas() {
const {
div
} = this;
let {
width,
height
} = stamp_classPrivateFieldGet(_bitmap, this);
const [pageWidth, pageHeight] = this.pageDimensions;
const MAX_RATIO = 0.75;
if (this.width) {
width = this.width * pageWidth;
height = this.height * pageHeight;
} else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) {
const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height);
width *= factor;
height *= factor;
}
const [parentWidth, parentHeight] = this.parentDimensions;
this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight);
this._uiManager.enableWaiting(false);
const canvas = stamp_classPrivateFieldSet(_canvas, this, document.createElement("canvas"));
canvas.setAttribute("role", "img");
this.addContainer(canvas);
this.width = width / pageWidth;
this.height = height / pageHeight;
if (this._initialOptions?.isCentered) {
this.center();
} else {
this.fixAndSetPosition();
}
this._initialOptions = null;
if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) {
div.hidden = false;
}
stamp_assertClassBrand(_StampEditor_brand, this, _drawBitmap).call(this);
if (!stamp_classPrivateFieldGet(_hasBeenAddedInUndoStack, this)) {
this.parent.addUndoableEditor(this);
stamp_classPrivateFieldSet(_hasBeenAddedInUndoStack, this, true);
}
this._reportTelemetry({
action: "inserted_image"
});
this.eventBus?.dispatch("annotation-editor-event", {
source: this,
type: "imageAdded",
page: this.pageIndex + 1,
editorType: this.constructor.name,
value: canvas,
width,
height,
fileName: stamp_classPrivateFieldGet(_bitmapFileName, this)
});
if (stamp_classPrivateFieldGet(_bitmapFileName, this)) {
this.div.setAttribute("aria-description", stamp_classPrivateFieldGet(_bitmapFileName, this));
}
}
function _scaleBitmap(width, height) {
const {
width: bitmapWidth,
height: bitmapHeight
} = stamp_classPrivateFieldGet(_bitmap, this);
let newWidth = bitmapWidth;
let newHeight = bitmapHeight;
let bitmap = stamp_classPrivateFieldGet(_bitmap, this);
while (newWidth > 2 * width || newHeight > 2 * height) {
const prevWidth = newWidth;
const prevHeight = newHeight;
if (newWidth > 2 * width) {
newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2);
}
if (newHeight > 2 * height) {
newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2);
}
const offscreen = new OffscreenCanvas(newWidth, newHeight);
const ctx = offscreen.getContext("2d");
ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight);
bitmap = offscreen.transferToImageBitmap();
}
return bitmap;
}
function _drawBitmap() {
const [parentWidth, parentHeight] = this.parentDimensions;
const {
width,
height
} = this;
const outputScale = new OutputScale();
const scaledWidth = Math.ceil(width * parentWidth * outputScale.sx);
const scaledHeight = Math.ceil(height * parentHeight * outputScale.sy);
const canvas = stamp_classPrivateFieldGet(_canvas, this);
if (!canvas || canvas.width === scaledWidth && canvas.height === scaledHeight) {
return;
}
canvas.width = scaledWidth;
canvas.height = scaledHeight;
const bitmap = stamp_classPrivateFieldGet(_isSvg, this) ? stamp_classPrivateFieldGet(_bitmap, this) : stamp_assertClassBrand(_StampEditor_brand, this, _scaleBitmap).call(this, scaledWidth, scaledHeight);
const ctx = canvas.getContext("2d");
ctx.filter = this._uiManager.hcmFilter;
ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, scaledWidth, scaledHeight);
}
function _serializeBitmap(toUrl) {
if (toUrl) {
if (stamp_classPrivateFieldGet(_isSvg, this)) {
const url = this._uiManager.imageManager.getSvgUrl(stamp_classPrivateFieldGet(_bitmapId, this));
if (url) {
return url;
}
}
const canvas = document.createElement("canvas");
({
width: canvas.width,
height: canvas.height
} = stamp_classPrivateFieldGet(_bitmap, this));
const ctx = canvas.getContext("2d");
ctx.drawImage(stamp_classPrivateFieldGet(_bitmap, this), 0, 0);
return canvas.toDataURL();
}
if (stamp_classPrivateFieldGet(_isSvg, this)) {
const [pageWidth, pageHeight] = this.pageDimensions;
const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS);
const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS);
const offscreen = new OffscreenCanvas(width, height);
const ctx = offscreen.getContext("2d");
ctx.drawImage(stamp_classPrivateFieldGet(_bitmap, this), 0, 0, stamp_classPrivateFieldGet(_bitmap, this).width, stamp_classPrivateFieldGet(_bitmap, this).height, 0, 0, width, height);
return offscreen.transferToImageBitmap();
}
return structuredClone(stamp_classPrivateFieldGet(_bitmap, this));
}
function stamp_hasElementChanged(serialized) {
const {
pageIndex,
accessibilityData: {
altText
}
} = this._initialData;
const isSamePageIndex = serialized.pageIndex === pageIndex;
const isSameAltText = (serialized.accessibilityData?.alt || "") === altText;
return {
isSame: !this._hasBeenMoved && !this._hasBeenResized && isSamePageIndex && isSameAltText,
isSameAltText
};
}
stamp_defineProperty(StampEditor, "_type", "stamp");
stamp_defineProperty(StampEditor, "_editorType", AnnotationEditorType.STAMP);
;// ./src/display/editor/annotation_editor_layer.js
function annotation_editor_layer_classPrivateMethodInitSpec(e, a) { annotation_editor_layer_checkPrivateRedeclaration(e, a), a.add(e); }
function annotation_editor_layer_classPrivateFieldInitSpec(e, t, a) { annotation_editor_layer_checkPrivateRedeclaration(e, t), t.set(e, a); }
function annotation_editor_layer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function annotation_editor_layer_classPrivateGetter(s, r, a) { return a(annotation_editor_layer_assertClassBrand(s, r)); }
function annotation_editor_layer_classPrivateFieldGet(s, a) { return s.get(annotation_editor_layer_assertClassBrand(s, a)); }
function annotation_editor_layer_classPrivateFieldSet(s, a, r) { return s.set(annotation_editor_layer_assertClassBrand(s, a), r), r; }
function annotation_editor_layer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function annotation_editor_layer_defineProperty(e, r, t) { return (r = annotation_editor_layer_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function annotation_editor_layer_toPropertyKey(t) { var i = annotation_editor_layer_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function annotation_editor_layer_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class PointerType {
constructor(t) {
if (PointerType.current === null) {
PointerType.current = "";
window.addEventListener("pointerdown", this.windowPointerDown, !0);
}
}
destroy() {
if (PointerType.current !== null) {
window.removeEventListener("pointerdown", this.windowPointerDown, !0);
PointerType.current = null;
}
}
windowPointerDown(t) {
PointerType.current = t.pointerType;
return !0;
}
static initializeEditor() {
setTimeout(() => PointerType.editor = PointerType.current);
}
static sameAsEditor() {
let pointerType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
if (pointerType) {
return PointerType.editor == pointerType;
}
return PointerType.editor == PointerType.current;
}
}
annotation_editor_layer_defineProperty(PointerType, "current", null);
annotation_editor_layer_defineProperty(PointerType, "editor", null);
new PointerType();
var annotation_editor_layer_accessibilityManager = /*#__PURE__*/new WeakMap();
var _allowClick = /*#__PURE__*/new WeakMap();
var _annotationLayer = /*#__PURE__*/new WeakMap();
var _clickAC = /*#__PURE__*/new WeakMap();
var _editorFocusTimeoutId = /*#__PURE__*/new WeakMap();
var _editors = /*#__PURE__*/new WeakMap();
var _hadPointerDown = /*#__PURE__*/new WeakMap();
var _isDisabling = /*#__PURE__*/new WeakMap();
var _isEnabling = /*#__PURE__*/new WeakMap();
var _drawingAC = /*#__PURE__*/new WeakMap();
var _focusedElement = /*#__PURE__*/new WeakMap();
var _textLayer = /*#__PURE__*/new WeakMap();
var _textSelectionAC = /*#__PURE__*/new WeakMap();
var annotation_editor_layer_uiManager = /*#__PURE__*/new WeakMap();
var _AnnotationEditorLayer_brand = /*#__PURE__*/new WeakSet();
class AnnotationEditorLayer {
constructor(_ref) {
let {
uiManager,
pageIndex,
div,
structTreeLayer,
accessibilityManager,
annotationLayer,
drawLayer,
textLayer,
viewport,
l10n,
eventBus
} = _ref;
annotation_editor_layer_classPrivateMethodInitSpec(this, _AnnotationEditorLayer_brand);
annotation_editor_layer_classPrivateFieldInitSpec(this, annotation_editor_layer_accessibilityManager, void 0);
annotation_editor_layer_classPrivateFieldInitSpec(this, _allowClick, false);
annotation_editor_layer_classPrivateFieldInitSpec(this, _annotationLayer, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, _clickAC, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, _editorFocusTimeoutId, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, _editors, new Map());
annotation_editor_layer_classPrivateFieldInitSpec(this, _hadPointerDown, false);
annotation_editor_layer_classPrivateFieldInitSpec(this, _isDisabling, false);
annotation_editor_layer_classPrivateFieldInitSpec(this, _isEnabling, false);
annotation_editor_layer_classPrivateFieldInitSpec(this, _drawingAC, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, _focusedElement, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, _textLayer, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, _textSelectionAC, null);
annotation_editor_layer_classPrivateFieldInitSpec(this, annotation_editor_layer_uiManager, void 0);
const editorTypes = [...annotation_editor_layer_editorTypes._.values()];
if (!AnnotationEditorLayer._initialized) {
AnnotationEditorLayer._initialized = true;
for (const editorType of editorTypes) {
editorType.eventBus = eventBus;
editorType.initialize(l10n, uiManager);
}
}
uiManager.registerEditorTypes(editorTypes);
annotation_editor_layer_classPrivateFieldSet(annotation_editor_layer_uiManager, this, uiManager);
this.pageIndex = pageIndex;
this.div = div;
annotation_editor_layer_classPrivateFieldSet(annotation_editor_layer_accessibilityManager, this, accessibilityManager);
annotation_editor_layer_classPrivateFieldSet(_annotationLayer, this, annotationLayer);
this.viewport = viewport;
annotation_editor_layer_classPrivateFieldSet(_textLayer, this, textLayer);
this.drawLayer = drawLayer;
this._structTree = structTreeLayer;
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addLayer(this);
this.eventBus = eventBus;
}
get isEmpty() {
return annotation_editor_layer_classPrivateFieldGet(_editors, this).size === 0;
}
get isInvisible() {
return this.isEmpty && annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getMode() === AnnotationEditorType.NONE;
}
updateToolbar(options) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).updateToolbar(options);
}
updateMode() {
let mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getMode();
annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _cleanup).call(this);
switch (mode) {
case AnnotationEditorType.NONE:
this.disableTextSelection();
this.togglePointerEvents(false);
this.toggleAnnotationLayerPointerEvents(true);
this.disableClick();
return;
case AnnotationEditorType.INK:
this.disableTextSelection();
this.togglePointerEvents(true);
this.enableClick();
break;
case AnnotationEditorType.HIGHLIGHT:
this.enableTextSelection();
this.togglePointerEvents(false);
this.disableClick();
break;
default:
this.disableTextSelection();
this.togglePointerEvents(true);
this.enableClick();
}
PointerType.initializeEditor();
this.toggleAnnotationLayerPointerEvents(false);
const {
classList
} = this.div;
for (const editorType of annotation_editor_layer_editorTypes._.values()) {
classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType);
}
this.div.hidden = false;
}
hasTextLayer(textLayer) {
return textLayer === annotation_editor_layer_classPrivateFieldGet(_textLayer, this)?.div;
}
setEditingState(isEditing) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).setEditingState(isEditing);
}
addCommands(params) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addCommands(params);
}
cleanUndoStack(type) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).cleanUndoStack(type);
}
toggleDrawing() {
let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
this.div.classList.toggle("drawing", !enabled);
}
togglePointerEvents() {
let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
this.div.classList.toggle("disabled", !enabled);
}
toggleAnnotationLayerPointerEvents() {
let enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
annotation_editor_layer_classPrivateFieldGet(_annotationLayer, this)?.div.classList.toggle("disabled", !enabled);
}
async enable() {
annotation_editor_layer_classPrivateFieldSet(_isEnabling, this, true);
this.div.tabIndex = 0;
this.togglePointerEvents(true);
const annotationElementIds = new Set();
for (const editor of annotation_editor_layer_classPrivateFieldGet(_editors, this).values()) {
editor.enableEditing();
editor.show(true);
if (editor.annotationElementId) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).removeChangedExistingAnnotation(editor);
annotationElementIds.add(editor.annotationElementId);
}
}
if (!annotation_editor_layer_classPrivateFieldGet(_annotationLayer, this)) {
annotation_editor_layer_classPrivateFieldSet(_isEnabling, this, false);
return;
}
const editables = annotation_editor_layer_classPrivateFieldGet(_annotationLayer, this).getEditableAnnotations();
for (const editable of editables) {
editable.hide();
if (annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).isDeletedAnnotationElement(editable.data.id)) {
continue;
}
if (annotationElementIds.has(editable.data.id)) {
continue;
}
const editor = await this.deserialize(editable);
if (!editor) {
continue;
}
this.addOrRebuild(editor);
editor.enableEditing();
}
annotation_editor_layer_classPrivateFieldSet(_isEnabling, this, false);
}
disable() {
annotation_editor_layer_classPrivateFieldSet(_isDisabling, this, true);
this.div.tabIndex = -1;
this.togglePointerEvents(false);
const changedAnnotations = new Map();
const resetAnnotations = new Map();
for (const editor of annotation_editor_layer_classPrivateFieldGet(_editors, this).values()) {
editor.disableEditing();
if (!editor.annotationElementId) {
continue;
}
if (editor.serialize() !== null) {
changedAnnotations.set(editor.annotationElementId, editor);
continue;
} else {
resetAnnotations.set(editor.annotationElementId, editor);
}
this.getEditableAnnotation(editor.annotationElementId)?.show();
editor.remove();
}
if (annotation_editor_layer_classPrivateFieldGet(_annotationLayer, this)) {
const editables = annotation_editor_layer_classPrivateFieldGet(_annotationLayer, this).getEditableAnnotations();
for (const editable of editables) {
const {
id
} = editable.data;
if (annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).isDeletedAnnotationElement(id)) {
continue;
}
let editor = resetAnnotations.get(id);
if (editor) {
editor.resetAnnotationElement(editable);
editor.show(false);
editable.show();
continue;
}
editor = changedAnnotations.get(id);
if (editor) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addChangedExistingAnnotation(editor);
if (editor.renderAnnotationElement(editable)) {
editor.show(false);
}
}
editable.show();
}
}
annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _cleanup).call(this);
if (this.isEmpty) {
this.div.hidden = true;
}
const {
classList
} = this.div;
for (const editorType of annotation_editor_layer_editorTypes._.values()) {
classList.remove(`${editorType._type}Editing`);
}
this.disableTextSelection();
this.toggleAnnotationLayerPointerEvents(true);
annotation_editor_layer_classPrivateFieldSet(_isDisabling, this, false);
}
getEditableAnnotation(id) {
return annotation_editor_layer_classPrivateFieldGet(_annotationLayer, this)?.getEditableAnnotation(id) || null;
}
setActiveEditor(editor) {
const currentActive = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getActive();
if (currentActive === editor) {
return;
}
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).setActiveEditor(editor);
}
enableTextSelection() {
this.div.tabIndex = -1;
if (annotation_editor_layer_classPrivateFieldGet(_textLayer, this)?.div && !annotation_editor_layer_classPrivateFieldGet(_textSelectionAC, this)) {
annotation_editor_layer_classPrivateFieldSet(_textSelectionAC, this, new AbortController());
const signal = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).combinedSignal(annotation_editor_layer_classPrivateFieldGet(_textSelectionAC, this));
annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.addEventListener("pointerdown", annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _textLayerPointerDown).bind(this), {
signal
});
annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.classList.add("highlighting");
}
}
disableTextSelection() {
this.div.tabIndex = 0;
if (annotation_editor_layer_classPrivateFieldGet(_textLayer, this)?.div && annotation_editor_layer_classPrivateFieldGet(_textSelectionAC, this)) {
annotation_editor_layer_classPrivateFieldGet(_textSelectionAC, this).abort();
annotation_editor_layer_classPrivateFieldSet(_textSelectionAC, this, null);
annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.classList.remove("highlighting");
}
}
enableClick() {
if (annotation_editor_layer_classPrivateFieldGet(_clickAC, this)) {
return;
}
annotation_editor_layer_classPrivateFieldSet(_clickAC, this, new AbortController());
const signal = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).combinedSignal(annotation_editor_layer_classPrivateFieldGet(_clickAC, this));
this.div.addEventListener("pointerdown", this.pointerdown.bind(this), {
signal
});
const pointerup = this.pointerup.bind(this);
this.div.addEventListener("pointerup", pointerup, {
signal
});
this.div.addEventListener("pointercancel", pointerup, {
signal
});
}
disableClick() {
annotation_editor_layer_classPrivateFieldGet(_clickAC, this)?.abort();
annotation_editor_layer_classPrivateFieldSet(_clickAC, this, null);
}
attach(editor) {
annotation_editor_layer_classPrivateFieldGet(_editors, this).set(editor.id, editor);
const {
annotationElementId
} = editor;
if (annotationElementId && annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).isDeletedAnnotationElement(annotationElementId)) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).removeDeletedAnnotationElement(editor);
}
}
detach(editor) {
annotation_editor_layer_classPrivateFieldGet(_editors, this).delete(editor.id);
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_accessibilityManager, this)?.removePointerInTextLayer(editor.contentDiv);
if (!annotation_editor_layer_classPrivateFieldGet(_isDisabling, this) && editor.annotationElementId) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addDeletedAnnotationElement(editor);
}
}
remove(editor) {
this.detach(editor);
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).removeEditor(editor);
editor.div.remove();
editor.isAttachedToDOM = false;
}
changeParent(editor) {
if (editor.parent === this) {
return;
}
if (editor.parent && editor.annotationElementId) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addDeletedAnnotationElement(editor.annotationElementId);
AnnotationEditor.deleteAnnotationElement(editor);
editor.annotationElementId = null;
}
this.attach(editor);
editor.parent?.detach(editor);
editor.setParent(this);
if (editor.div && editor.isAttachedToDOM) {
editor.div.remove();
this.div.append(editor.div);
}
}
add(editor) {
if (editor.parent === this && editor.isAttachedToDOM) {
return;
}
this.changeParent(editor);
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addEditor(editor);
this.attach(editor);
if (!editor.isAttachedToDOM) {
const div = editor.render();
this.div.append(div);
editor.isAttachedToDOM = true;
}
editor.fixAndSetPosition();
editor.onceAdded(!annotation_editor_layer_classPrivateFieldGet(_isEnabling, this));
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).addToAnnotationStorage(editor);
editor._reportTelemetry(editor.telemetryInitialData);
}
moveEditorInDOM(editor) {
if (!editor.isAttachedToDOM) {
return;
}
const {
activeElement
} = document;
if (editor.div.contains(activeElement) && !annotation_editor_layer_classPrivateFieldGet(_editorFocusTimeoutId, this)) {
editor._focusEventsAllowed = false;
annotation_editor_layer_classPrivateFieldSet(_editorFocusTimeoutId, this, setTimeout(() => {
annotation_editor_layer_classPrivateFieldSet(_editorFocusTimeoutId, this, null);
if (!editor.div.contains(document.activeElement)) {
editor.div.addEventListener("focusin", () => {
editor._focusEventsAllowed = true;
}, {
once: true,
signal: annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this)._signal
});
activeElement.focus();
} else {
editor._focusEventsAllowed = true;
}
}, 0));
}
editor._structTreeParentId = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_accessibilityManager, this)?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);
}
addOrRebuild(editor) {
if (editor.needsToBeRebuilt()) {
editor.parent ||= this;
editor.rebuild();
editor.show();
} else {
this.add(editor);
}
}
addUndoableEditor(editor) {
const cmd = () => editor._uiManager.rebuild(editor);
const undo = () => {
editor.remove();
};
this.addCommands({
cmd,
undo,
mustExec: false
});
}
getNextId() {
return annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getId();
}
combinedSignal(ac) {
return annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).combinedSignal(ac);
}
canCreateNewEmptyEditor() {
return annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType)?.canCreateNewEmptyEditor();
}
async pasteEditor(options, params) {
this.updateToolbar(options);
await annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).updateMode(options.mode);
const {
offsetX,
offsetY
} = annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _getCenterPoint).call(this);
const id = this.getNextId();
const editor = annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _createNewEditor).call(this, {
parent: this,
id,
x: offsetX,
y: offsetY,
uiManager: annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this),
isCentered: true,
...params
});
if (editor) {
this.add(editor);
}
}
async deserialize(data) {
return (await annotation_editor_layer_editorTypes._.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this))) || null;
}
createAndAddNewEditor(event, isCentered) {
let data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
const id = this.getNextId();
const editor = annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _createNewEditor).call(this, {
parent: this,
id,
x: event.offsetX,
y: event.offsetY,
uiManager: annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this),
isCentered,
eventBus: this.eventBus,
...data
});
if (editor) {
this.add(editor);
}
return editor;
}
addNewEditor() {
let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.createAndAddNewEditor(annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _getCenterPoint).call(this), true, data);
}
setSelected(editor) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).setSelected(editor);
}
toggleSelected(editor) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).toggleSelected(editor);
}
unselect(editor) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).unselect(editor);
}
pointerup(event) {
const {
isMac
} = util_FeatureTest.platform;
if (event.button !== 0 || event.ctrlKey && isMac) {
return;
}
if (event.target !== this.div) {
return;
}
if (!annotation_editor_layer_classPrivateFieldGet(_hadPointerDown, this)) {
return;
}
annotation_editor_layer_classPrivateFieldSet(_hadPointerDown, this, false);
if (annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType)?.isDrawer && annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType).supportMultipleDrawings) {
return;
}
if (!annotation_editor_layer_classPrivateFieldGet(_allowClick, this)) {
annotation_editor_layer_classPrivateFieldSet(_allowClick, this, true);
return;
}
const currentMode = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getMode();
if (currentMode === AnnotationEditorType.STAMP || currentMode === AnnotationEditorType.SIGNATURE) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).unselectAll();
return;
}
this.createAndAddNewEditor(event, false);
}
pointerdown(event) {
if (annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getMode() === AnnotationEditorType.HIGHLIGHT) {
if (!PointerType.sameAsEditor(event.pointerType)) {
return;
}
this.enableTextSelection();
} else if (annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getMode() === AnnotationEditorType.INK && !PointerType.sameAsEditor(event.pointerType)) {
return;
}
if (annotation_editor_layer_classPrivateFieldGet(_hadPointerDown, this)) {
annotation_editor_layer_classPrivateFieldSet(_hadPointerDown, this, false);
return;
}
const {
isMac
} = util_FeatureTest.platform;
if (event.button !== 0 || event.ctrlKey && isMac) {
return;
}
if (event.target !== this.div) {
return;
}
annotation_editor_layer_classPrivateFieldSet(_hadPointerDown, this, true);
if (annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType)?.isDrawer) {
this.startDrawingSession(event);
return;
}
const editor = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getActive();
annotation_editor_layer_classPrivateFieldSet(_allowClick, this, !editor || editor.isEmpty());
}
startDrawingSession(event) {
this.div.focus({
preventScroll: true
});
if (annotation_editor_layer_classPrivateFieldGet(_drawingAC, this)) {
annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType).startDrawing(this, annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this), false, event);
return;
}
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).setCurrentDrawingSession(this);
annotation_editor_layer_classPrivateFieldSet(_drawingAC, this, new AbortController());
const signal = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).combinedSignal(annotation_editor_layer_classPrivateFieldGet(_drawingAC, this));
this.div.addEventListener("blur", _ref2 => {
let {
relatedTarget
} = _ref2;
if (relatedTarget && !this.div.contains(relatedTarget)) {
annotation_editor_layer_classPrivateFieldSet(_focusedElement, this, null);
this.commitOrRemove();
}
}, {
signal
});
annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType).startDrawing(this, annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this), false, event);
}
pause(on) {
if (on) {
const {
activeElement
} = document;
if (this.div.contains(activeElement)) {
annotation_editor_layer_classPrivateFieldSet(_focusedElement, this, activeElement);
}
return;
}
if (annotation_editor_layer_classPrivateFieldGet(_focusedElement, this)) {
setTimeout(() => {
annotation_editor_layer_classPrivateFieldGet(_focusedElement, this)?.focus();
annotation_editor_layer_classPrivateFieldSet(_focusedElement, this, null);
}, 0);
}
}
endDrawingSession() {
let isAborted = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!annotation_editor_layer_classPrivateFieldGet(_drawingAC, this)) {
return null;
}
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).setCurrentDrawingSession(null);
annotation_editor_layer_classPrivateFieldGet(_drawingAC, this).abort();
annotation_editor_layer_classPrivateFieldSet(_drawingAC, this, null);
annotation_editor_layer_classPrivateFieldSet(_focusedElement, this, null);
return annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType).endDrawing(isAborted);
}
findNewParent(editor, x, y) {
const layer = annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).findParent(x, y);
if (layer === null || layer === this) {
return false;
}
layer.changeParent(editor);
return true;
}
commitOrRemove() {
if (annotation_editor_layer_classPrivateFieldGet(_drawingAC, this)) {
this.endDrawingSession();
return true;
}
return false;
}
onScaleChanging() {
if (!annotation_editor_layer_classPrivateFieldGet(_drawingAC, this)) {
return;
}
annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType).onScaleChangingWhenDrawing(this);
}
destroy() {
this.commitOrRemove();
if (annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getActive()?.parent === this) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).commitOrRemove();
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).setActiveEditor(null);
}
if (annotation_editor_layer_classPrivateFieldGet(_editorFocusTimeoutId, this)) {
clearTimeout(annotation_editor_layer_classPrivateFieldGet(_editorFocusTimeoutId, this));
annotation_editor_layer_classPrivateFieldSet(_editorFocusTimeoutId, this, null);
}
for (const editor of annotation_editor_layer_classPrivateFieldGet(_editors, this).values()) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_accessibilityManager, this)?.removePointerInTextLayer(editor.contentDiv);
editor.setParent(null);
editor.isAttachedToDOM = false;
editor.div.remove();
}
this.div = null;
annotation_editor_layer_classPrivateFieldGet(_editors, this).clear();
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).removeLayer(this);
}
render(_ref3) {
let {
viewport
} = _ref3;
this.viewport = viewport;
setLayerDimensions(this.div, viewport);
for (const editor of annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).getEditors(this.pageIndex)) {
this.add(editor);
editor.rebuild();
}
this.updateMode();
}
update(_ref4) {
let {
viewport
} = _ref4;
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).commitOrRemove();
annotation_editor_layer_assertClassBrand(_AnnotationEditorLayer_brand, this, _cleanup).call(this);
const oldRotation = this.viewport.rotation;
const rotation = viewport.rotation;
this.viewport = viewport;
setLayerDimensions(this.div, {
rotation
});
if (oldRotation !== rotation) {
for (const editor of annotation_editor_layer_classPrivateFieldGet(_editors, this).values()) {
editor.rotate(rotation);
}
}
}
get pageDimensions() {
const {
pageWidth,
pageHeight
} = this.viewport.rawDims;
return [pageWidth, pageHeight];
}
get scale() {
return annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).viewParameters.realScale;
}
}
function _textLayerPointerDown(event) {
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).unselectAll();
const {
target
} = event;
if (target === annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div || (target.getAttribute("role") === "img" || target.classList.contains("endOfContent")) && annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.contains(target)) {
const {
isMac
} = util_FeatureTest.platform;
if (event.button !== 0 || event.ctrlKey && isMac) {
return;
}
annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).showAllEditors("highlight", true, true);
annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.classList.add("free");
this.toggleDrawing();
HighlightEditor.startHighlighting(this, annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this).direction === "ltr", {
target: annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div,
x: event.x,
y: event.y
});
annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.addEventListener("pointerup", () => {
annotation_editor_layer_classPrivateFieldGet(_textLayer, this).div.classList.remove("free");
this.toggleDrawing(true);
}, {
once: true,
signal: annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, this)._signal
});
event.preventDefault();
}
}
function _get_currentEditorType(_this) {
return annotation_editor_layer_editorTypes._.get(annotation_editor_layer_classPrivateFieldGet(annotation_editor_layer_uiManager, _this).getMode());
}
function _createNewEditor(params) {
const editorType = annotation_editor_layer_classPrivateGetter(_AnnotationEditorLayer_brand, this, _get_currentEditorType);
return editorType ? new editorType.prototype.constructor(params) : null;
}
function _getCenterPoint() {
const {
x,
y,
width,
height
} = this.div.getBoundingClientRect();
const tlX = Math.max(0, x);
const tlY = Math.max(0, y);
const brX = Math.min(window.innerWidth, x + width);
const brY = Math.min(window.innerHeight, y + height);
const centerX = (tlX + brX) / 2 - x;
const centerY = (tlY + brY) / 2 - y;
const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX];
return {
offsetX,
offsetY
};
}
function _cleanup() {
for (const editor of annotation_editor_layer_classPrivateFieldGet(_editors, this).values()) {
if (editor.isEmpty()) {
editor.remove();
}
}
}
annotation_editor_layer_defineProperty(AnnotationEditorLayer, "_initialized", false);
var annotation_editor_layer_editorTypes = {
_: new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor, SignatureEditor].map(type => [type._editorType, type]))
};
;// ./src/display/draw_layer.js
var _DrawLayer;
function draw_layer_classPrivateMethodInitSpec(e, a) { draw_layer_checkPrivateRedeclaration(e, a), a.add(e); }
function draw_layer_classPrivateFieldInitSpec(e, t, a) { draw_layer_checkPrivateRedeclaration(e, t), t.set(e, a); }
function draw_layer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function draw_layer_classPrivateFieldSet(s, a, r) { return s.set(draw_layer_assertClassBrand(s, a), r), r; }
function draw_layer_classPrivateFieldGet(s, a) { return s.get(draw_layer_assertClassBrand(s, a)); }
function draw_layer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var draw_layer_parent = /*#__PURE__*/new WeakMap();
var _mapping = /*#__PURE__*/new WeakMap();
var _toUpdate = /*#__PURE__*/new WeakMap();
var _DrawLayer_brand = /*#__PURE__*/new WeakSet();
class DrawLayer {
constructor(_ref) {
let {
pageIndex
} = _ref;
draw_layer_classPrivateMethodInitSpec(this, _DrawLayer_brand);
draw_layer_classPrivateFieldInitSpec(this, draw_layer_parent, null);
draw_layer_classPrivateFieldInitSpec(this, _mapping, new Map());
draw_layer_classPrivateFieldInitSpec(this, _toUpdate, new Map());
this.pageIndex = pageIndex;
}
setParent(parent) {
if (!draw_layer_classPrivateFieldGet(draw_layer_parent, this)) {
draw_layer_classPrivateFieldSet(draw_layer_parent, this, parent);
return;
}
if (draw_layer_classPrivateFieldGet(draw_layer_parent, this) !== parent) {
if (draw_layer_classPrivateFieldGet(_mapping, this).size > 0) {
for (const root of draw_layer_classPrivateFieldGet(_mapping, this).values()) {
root.remove();
parent.append(root);
}
}
draw_layer_classPrivateFieldSet(draw_layer_parent, this, parent);
}
}
static get _svgFactory() {
return shadow(this, "_svgFactory", new DOMSVGFactory());
}
draw(properties) {
var _DrawLayer$id, _DrawLayer$id2;
let isPathUpdatable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
let hasClip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
const id = (draw_layer_id._ = (_DrawLayer$id = draw_layer_id._, _DrawLayer$id2 = _DrawLayer$id++, _DrawLayer$id), _DrawLayer$id2);
const root = draw_layer_assertClassBrand(_DrawLayer_brand, this, _createSVG).call(this);
const defs = DrawLayer._svgFactory.createElement("defs");
root.append(defs);
const path = DrawLayer._svgFactory.createElement("path");
defs.append(path);
const pathId = `path_p${this.pageIndex}_${id}`;
path.setAttribute("id", pathId);
path.setAttribute("vector-effect", "non-scaling-stroke");
if (isPathUpdatable) {
draw_layer_classPrivateFieldGet(_toUpdate, this).set(id, path);
}
const clipPathId = hasClip ? draw_layer_assertClassBrand(_DrawLayer_brand, this, _createClipPath).call(this, defs, pathId) : null;
const use = DrawLayer._svgFactory.createElement("use");
root.append(use);
use.setAttribute("href", `#${pathId}`);
this.updateProperties(root, properties);
draw_layer_classPrivateFieldGet(_mapping, this).set(id, root);
return {
id,
clipPathId: `url(#${clipPathId})`
};
}
drawOutline(properties, mustRemoveSelfIntersections) {
var _DrawLayer$id3, _DrawLayer$id4;
const id = (draw_layer_id._ = (_DrawLayer$id3 = draw_layer_id._, _DrawLayer$id4 = _DrawLayer$id3++, _DrawLayer$id3), _DrawLayer$id4);
const root = draw_layer_assertClassBrand(_DrawLayer_brand, this, _createSVG).call(this);
const defs = DrawLayer._svgFactory.createElement("defs");
root.append(defs);
const path = DrawLayer._svgFactory.createElement("path");
defs.append(path);
const pathId = `path_p${this.pageIndex}_${id}`;
path.setAttribute("id", pathId);
path.setAttribute("vector-effect", "non-scaling-stroke");
let maskId;
if (mustRemoveSelfIntersections) {
const mask = DrawLayer._svgFactory.createElement("mask");
defs.append(mask);
maskId = `mask_p${this.pageIndex}_${id}`;
mask.setAttribute("id", maskId);
mask.setAttribute("maskUnits", "objectBoundingBox");
const rect = DrawLayer._svgFactory.createElement("rect");
mask.append(rect);
rect.setAttribute("width", "1");
rect.setAttribute("height", "1");
rect.setAttribute("fill", "white");
const use = DrawLayer._svgFactory.createElement("use");
mask.append(use);
use.setAttribute("href", `#${pathId}`);
use.setAttribute("stroke", "none");
use.setAttribute("fill", "black");
use.setAttribute("fill-rule", "nonzero");
use.classList.add("mask");
}
const use1 = DrawLayer._svgFactory.createElement("use");
root.append(use1);
use1.setAttribute("href", `#${pathId}`);
if (maskId) {
use1.setAttribute("mask", `url(#${maskId})`);
}
const use2 = use1.cloneNode();
root.append(use2);
use1.classList.add("mainOutline");
use2.classList.add("secondaryOutline");
this.updateProperties(root, properties);
draw_layer_classPrivateFieldGet(_mapping, this).set(id, root);
return id;
}
finalizeDraw(id, properties) {
draw_layer_classPrivateFieldGet(_toUpdate, this).delete(id);
this.updateProperties(id, properties);
}
updateProperties(elementOrId, properties) {
if (!properties) {
return;
}
const {
root,
bbox,
rootClass,
path
} = properties;
const element = typeof elementOrId === "number" ? draw_layer_classPrivateFieldGet(_mapping, this).get(elementOrId) : elementOrId;
if (!element) {
return;
}
if (root) {
draw_layer_assertClassBrand(_DrawLayer_brand, this, _updateProperties).call(this, element, root);
}
if (bbox) {
_setBox.call(DrawLayer, element, bbox);
}
if (rootClass) {
const {
classList
} = element;
for (const [className, value] of Object.entries(rootClass)) {
classList.toggle(className, value);
}
}
if (path) {
const defs = element.firstChild;
const pathElement = defs.firstChild;
draw_layer_assertClassBrand(_DrawLayer_brand, this, _updateProperties).call(this, pathElement, path);
}
}
updateParent(id, layer) {
if (layer === this) {
return;
}
const root = draw_layer_classPrivateFieldGet(_mapping, this).get(id);
if (!root) {
return;
}
draw_layer_classPrivateFieldGet(draw_layer_parent, layer).append(root);
draw_layer_classPrivateFieldGet(_mapping, this).delete(id);
draw_layer_classPrivateFieldGet(_mapping, layer).set(id, root);
}
remove(id) {
draw_layer_classPrivateFieldGet(_toUpdate, this).delete(id);
if (draw_layer_classPrivateFieldGet(draw_layer_parent, this) === null) {
return;
}
draw_layer_classPrivateFieldGet(_mapping, this).get(id).remove();
draw_layer_classPrivateFieldGet(_mapping, this).delete(id);
}
destroy() {
draw_layer_classPrivateFieldSet(draw_layer_parent, this, null);
for (const root of draw_layer_classPrivateFieldGet(_mapping, this).values()) {
root.remove();
}
draw_layer_classPrivateFieldGet(_mapping, this).clear();
draw_layer_classPrivateFieldGet(_toUpdate, this).clear();
}
}
_DrawLayer = DrawLayer;
function _setBox(element, _ref2) {
let [x, y, width, height] = _ref2;
const {
style
} = element;
style.top = `${100 * y}%`;
style.left = `${100 * x}%`;
style.width = `${100 * width}%`;
style.height = `${100 * height}%`;
}
function _createSVG() {
const svg = _DrawLayer._svgFactory.create(1, 1, true);
draw_layer_classPrivateFieldGet(draw_layer_parent, this).append(svg);
svg.setAttribute("aria-hidden", true);
return svg;
}
function _createClipPath(defs, pathId) {
const clipPath = _DrawLayer._svgFactory.createElement("clipPath");
defs.append(clipPath);
const clipPathId = `clip_${pathId}`;
clipPath.setAttribute("id", clipPathId);
clipPath.setAttribute("clipPathUnits", "objectBoundingBox");
const clipPathUse = _DrawLayer._svgFactory.createElement("use");
clipPath.append(clipPathUse);
clipPathUse.setAttribute("href", `#${pathId}`);
clipPathUse.classList.add("clip");
return clipPathId;
}
function _updateProperties(element, properties) {
for (const [key, value] of Object.entries(properties)) {
if (value === null) {
element.removeAttribute(key);
} else {
element.setAttribute(key, value);
}
}
}
var draw_layer_id = {
_: 0
};
;// ./src/pdf.js
{
globalThis._pdfjsTestingUtils = {
HighlightOutliner: HighlightOutliner
};
}
globalThis.pdfjsLib = {
AbortException: AbortException,
AnnotationEditorLayer: AnnotationEditorLayer,
AnnotationEditorParamsType: AnnotationEditorParamsType,
AnnotationEditorType: AnnotationEditorType,
AnnotationEditorUIManager: AnnotationEditorUIManager,
AnnotationLayer: AnnotationLayer,
AnnotationMode: AnnotationMode,
AnnotationType: AnnotationType,
build: build,
ColorPicker: ColorPicker,
createValidAbsoluteUrl: createValidAbsoluteUrl,
DOMSVGFactory: DOMSVGFactory,
DrawLayer: DrawLayer,
FeatureTest: util_FeatureTest,
fetchData: fetchData,
getDocument: getDocument,
getFilenameFromUrl: getFilenameFromUrl,
getPdfFilenameFromUrl: display_utils_getPdfFilenameFromUrl,
getUuid: getUuid,
getXfaPageViewport: getXfaPageViewport,
GlobalWorkerOptions: GlobalWorkerOptions,
ImageKind: util_ImageKind,
InvalidPDFException: InvalidPDFException,
isDataScheme: isDataScheme,
isPdfFile: isPdfFile,
isValidExplicitDest: isValidExplicitDest,
MathClamp: MathClamp,
noContextMenu: noContextMenu,
normalizeUnicode: normalizeUnicode,
OPS: OPS,
OutputScale: OutputScale,
PasswordResponses: PasswordResponses,
PDFDataRangeTransport: PDFDataRangeTransport,
PDFDateString: PDFDateString,
PDFWorker: PDFWorker,
PermissionFlag: PermissionFlag,
PixelsPerInch: PixelsPerInch,
RenderingCancelledException: RenderingCancelledException,
ResponseException: ResponseException,
setLayerDimensions: setLayerDimensions,
shadow: shadow,
SignatureExtractor: SignatureExtractor,
stopEvent: stopEvent,
SupportedImageMimeTypes: SupportedImageMimeTypes,
TextLayer: TextLayer,
TouchManager: TouchManager,
updateUrlHash: updateUrlHash,
Util: Util,
VerbosityLevel: VerbosityLevel,
version: version,
XfaLayer: XfaLayer
};
;// ./web/pdfjs.js
;// ./web/ui_utils.js
function ui_utils_classPrivateFieldInitSpec(e, t, a) { ui_utils_checkPrivateRedeclaration(e, t), t.set(e, a); }
function ui_utils_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function ui_utils_classPrivateFieldGet(s, a) { return s.get(ui_utils_assertClassBrand(s, a)); }
function ui_utils_classPrivateFieldSet(s, a, r) { return s.set(ui_utils_assertClassBrand(s, a), r), r; }
function ui_utils_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DEFAULT_SCALE_VALUE = "auto";
const DEFAULT_SCALE = 1.0;
const DEFAULT_SCALE_DELTA = 1.1;
const MIN_SCALE = 0.1;
const MAX_SCALE = 10.0;
const UNKNOWN_SCALE = 0;
const MAX_AUTO_SCALE = 1.25;
const SCROLLBAR_PADDING = 40;
const VERTICAL_PADDING = 5;
const RenderingStates = {
INITIAL: 0,
RUNNING: 1,
PAUSED: 2,
FINISHED: 3
};
const PresentationModeState = {
UNKNOWN: 0,
NORMAL: 1,
CHANGING: 2,
FULLSCREEN: 3
};
const SidebarView = {
UNKNOWN: -1,
NONE: 0,
THUMBS: 1,
OUTLINE: 2,
ATTACHMENTS: 3,
LAYERS: 4
};
const TextLayerMode = {
DISABLE: 0,
ENABLE: 1,
ENABLE_PERMISSIONS: 2
};
const ScrollMode = {
UNKNOWN: -1,
VERTICAL: 0,
HORIZONTAL: 1,
WRAPPED: 2,
PAGE: 3
};
const SpreadMode = {
UNKNOWN: -1,
NONE: 0,
ODD: 1,
EVEN: 2
};
const CursorTool = {
SELECT: 0,
HAND: 1,
ZOOM: 2
};
const AutoPrintRegExp = /\bprint\s*\(/;
function scrollIntoView(element, spot) {
let scrollMatches = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
let infiniteScroll = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
if (element.classList.contains("stf__item") || element.parentElement?.classList.contains("stf__item") || element.parentElement?.parentElement?.classList.contains("stf__item")) {
return;
}
let parent = element.offsetParent;
if (!parent) {
NgxConsole.error("offsetParent is not set -- cannot scroll");
return;
}
let offsetY = element.offsetTop + element.clientTop;
let offsetX = element.offsetLeft + element.clientLeft;
while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains("markedContent") || getComputedStyle(parent).overflow === "hidden")) {
offsetY += parent.offsetTop;
offsetX += parent.offsetLeft;
parent = parent.offsetParent;
if (!parent) {
if (infiniteScroll) {
if (document.body.clientHeight > offsetY) {
offsetY -= 32;
window.scrollTo(window.scrollX, offsetY);
}
}
return;
}
}
if (spot) {
if (spot.top !== undefined) {
offsetY += spot.top;
}
if (spot.left !== undefined) {
offsetX += spot.left;
parent.scrollLeft = offsetX;
}
} else if (isDivInViewport(element)) {
return;
}
parent.scrollTop = offsetY;
}
function isDivInViewport(element) {
const rect = element.getBoundingClientRect();
return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
}
function watchScroll(viewAreaElement, callback) {
let abortSignal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
const debounceScroll = function (evt) {
if (rAF) {
return;
}
rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {
rAF = null;
const currentX = viewAreaElement.scrollLeft;
const lastX = state.lastX;
if (currentX !== lastX) {
state.right = currentX > lastX;
}
state.lastX = currentX;
const currentY = viewAreaElement.scrollTop;
const lastY = state.lastY;
if (currentY !== lastY) {
state.down = currentY > lastY;
}
state.lastY = currentY;
callback(state);
});
};
const state = {
right: true,
down: true,
lastX: viewAreaElement.scrollLeft,
lastY: viewAreaElement.scrollTop,
_eventHandler: debounceScroll
};
let rAF = null;
viewAreaElement.addEventListener("scroll", debounceScroll, {
useCapture: true,
signal: abortSignal
});
abortSignal?.addEventListener("abort", () => window.cancelAnimationFrame(rAF), {
once: true
});
return state;
}
function parseQueryString(query) {
const params = new Map();
for (const [key, value] of new URLSearchParams(query)) {
params.set(key.toLowerCase(), value);
}
return params;
}
const InvisibleCharsRegExp = /[\x00-\x1F]/g;
function removeNullCharacters(str) {
let replaceInvisible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!InvisibleCharsRegExp.test(str)) {
return str;
}
if (replaceInvisible) {
return str.replaceAll(InvisibleCharsRegExp, m => m === "\x00" ? "" : " ");
}
return str.replaceAll("\x00", "");
}
function binarySearchFirstItem(items, condition) {
let start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
let minIndex = start;
let maxIndex = items.length - 1;
if (maxIndex < 0 || !condition(items[maxIndex])) {
return items.length;
}
if (condition(items[minIndex])) {
return minIndex;
}
while (minIndex < maxIndex) {
const currentIndex = minIndex + maxIndex >> 1;
const currentItem = items[currentIndex];
if (condition(currentItem)) {
maxIndex = currentIndex;
} else {
minIndex = currentIndex + 1;
}
}
return minIndex;
}
function approximateFraction(x) {
if (Math.floor(x) === x) {
return [x, 1];
}
const xinv = 1 / x;
const limit = 8;
if (xinv > limit) {
return [1, limit];
} else if (Math.floor(xinv) === xinv) {
return [1, xinv];
}
const x_ = x > 1 ? xinv : x;
let a = 0,
b = 1,
c = 1,
d = 1;
while (true) {
const p = a + c,
q = b + d;
if (q > limit) {
break;
}
if (x_ <= p / q) {
c = p;
d = q;
} else {
a = p;
b = q;
}
}
let result;
if (x_ - a / b < c / d - x_) {
result = x_ === x ? [a, b] : [b, a];
} else {
result = x_ === x ? [c, d] : [d, c];
}
return result;
}
function floorToDivide(x, div) {
return x - x % div;
}
function getPageSizeInches(_ref) {
let {
view,
userUnit,
rotate
} = _ref;
const [x1, y1, x2, y2] = view;
const changeOrientation = rotate % 180 !== 0;
const width = (x2 - x1) / 72 * userUnit;
const height = (y2 - y1) / 72 * userUnit;
return {
width: changeOrientation ? height : width,
height: changeOrientation ? width : height
};
}
function backtrackBeforeAllVisibleElements(index, views, top) {
if (index < 2) {
return index;
}
let elt = views[index].div;
let pageTop = elt.offsetTop + elt.clientTop;
if (pageTop >= top) {
elt = views[index - 1].div;
pageTop = elt.offsetTop + elt.clientTop;
}
for (let i = index - 2; i >= 0; --i) {
elt = views[i].div;
if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {
break;
}
index = i;
}
return index;
}
function getVisibleElements(_ref2) {
let {
scrollEl,
views,
sortByVisibility = false,
horizontal = false,
rtl = false
} = _ref2;
const top = scrollEl.scrollTop,
bottom = top + scrollEl.clientHeight;
const left = scrollEl.scrollLeft,
right = left + scrollEl.clientWidth;
function isElementBottomAfterViewTop(view) {
const element = view.div;
const elementBottom = element.offsetTop + element.clientTop + element.clientHeight;
return elementBottom > top;
}
function isElementNextAfterViewHorizontally(view) {
const element = view.div;
const elementLeft = element.offsetLeft + element.clientLeft;
const elementRight = elementLeft + element.clientWidth;
return rtl ? elementLeft < right : elementRight > left;
}
const visible = [],
ids = new Set(),
numViews = views.length;
let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop);
if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {
firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);
}
let lastEdge = horizontal ? right : -1;
for (let i = firstVisibleElementInd; i < numViews; i++) {
const view = views[i],
element = view.div;
const currentWidth = element.offsetLeft + element.clientLeft;
const currentHeight = element.offsetTop + element.clientTop;
const viewWidth = element.clientWidth,
viewHeight = element.clientHeight;
const viewRight = currentWidth + viewWidth;
const viewBottom = currentHeight + viewHeight;
if (lastEdge === -1) {
if (viewBottom >= bottom) {
lastEdge = viewBottom;
}
} else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {
break;
}
if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {
continue;
}
const minY = Math.max(0, top - currentHeight);
const minX = Math.max(0, left - currentWidth);
const hiddenHeight = minY + Math.max(0, viewBottom - bottom);
const hiddenWidth = minX + Math.max(0, viewRight - right);
const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,
fractionWidth = (viewWidth - hiddenWidth) / viewWidth;
const percent = fractionHeight * fractionWidth * 100 | 0;
visible.push({
id: view.id,
x: currentWidth,
y: currentHeight,
visibleArea: percent === 100 ? null : {
minX,
minY,
maxX: Math.min(viewRight, right) - currentWidth,
maxY: Math.min(viewBottom, bottom) - currentHeight
},
view,
percent,
widthPercent: fractionWidth * 100 | 0
});
ids.add(view.id);
}
const first = visible[0],
last = visible.at(-1);
if (sortByVisibility) {
visible.sort(function (a, b) {
const pc = a.percent - b.percent;
if (Math.abs(pc) > 0.001) {
return -pc;
}
return a.id - b.id;
});
}
return {
first,
last,
views: visible,
ids
};
}
function normalizeWheelEventDirection(evt) {
let delta = Math.hypot(evt.deltaX, evt.deltaY);
const angle = Math.atan2(evt.deltaY, evt.deltaX);
if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {
delta = -delta;
}
return delta;
}
function normalizeWheelEventDelta(evt) {
const deltaMode = evt.deltaMode;
let delta = normalizeWheelEventDirection(evt);
const MOUSE_PIXELS_PER_LINE = 30;
const MOUSE_LINES_PER_PAGE = 30;
if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {
delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;
} else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {
delta /= MOUSE_LINES_PER_PAGE;
}
return delta;
}
function isValidRotation(angle) {
return Number.isInteger(angle) && angle % 90 === 0;
}
function isValidScrollMode(mode) {
return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;
}
function isValidSpreadMode(mode) {
return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;
}
function isPortraitOrientation(size) {
return size.width <= size.height;
}
const animationStarted = new Promise(function (resolve) {
window.requestAnimationFrame(resolve);
});
const docStyle = document.documentElement.style;
var _classList = /*#__PURE__*/new WeakMap();
var _disableAutoFetchTimeout = /*#__PURE__*/new WeakMap();
var _percent = /*#__PURE__*/new WeakMap();
var _style = /*#__PURE__*/new WeakMap();
var ui_utils_visible = /*#__PURE__*/new WeakMap();
class ProgressBar {
constructor(bar) {
ui_utils_classPrivateFieldInitSpec(this, _classList, null);
ui_utils_classPrivateFieldInitSpec(this, _disableAutoFetchTimeout, null);
ui_utils_classPrivateFieldInitSpec(this, _percent, 0);
ui_utils_classPrivateFieldInitSpec(this, _style, null);
ui_utils_classPrivateFieldInitSpec(this, ui_utils_visible, true);
ui_utils_classPrivateFieldSet(_classList, this, bar.classList);
ui_utils_classPrivateFieldSet(_style, this, bar.style);
}
get percent() {
return ui_utils_classPrivateFieldGet(_percent, this);
}
set percent(val) {
ui_utils_classPrivateFieldSet(_percent, this, MathClamp(val, 0, 100));
if (isNaN(val)) {
ui_utils_classPrivateFieldGet(_classList, this).add("indeterminate");
return;
}
ui_utils_classPrivateFieldGet(_classList, this).remove("indeterminate");
ui_utils_classPrivateFieldGet(_style, this).setProperty("--progressBar-percent", `${ui_utils_classPrivateFieldGet(_percent, this)}%`);
}
setWidth(viewer) {
if (!viewer) {
return;
}
const container = viewer.parentNode;
const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;
if (scrollbarWidth > 0) {
ui_utils_classPrivateFieldGet(_style, this).setProperty("--progressBar-end-offset", `${scrollbarWidth}px`);
}
}
setDisableAutoFetch() {
let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;
if (ui_utils_classPrivateFieldGet(_percent, this) === 100 || isNaN(ui_utils_classPrivateFieldGet(_percent, this))) {
return;
}
if (ui_utils_classPrivateFieldGet(_disableAutoFetchTimeout, this)) {
clearTimeout(ui_utils_classPrivateFieldGet(_disableAutoFetchTimeout, this));
}
this.show();
ui_utils_classPrivateFieldSet(_disableAutoFetchTimeout, this, setTimeout(() => {
ui_utils_classPrivateFieldSet(_disableAutoFetchTimeout, this, null);
this.hide();
}, delay));
}
hide() {
if (!ui_utils_classPrivateFieldGet(ui_utils_visible, this)) {
return;
}
ui_utils_classPrivateFieldSet(ui_utils_visible, this, false);
ui_utils_classPrivateFieldGet(_classList, this).add("hidden");
}
show() {
if (ui_utils_classPrivateFieldGet(ui_utils_visible, this)) {
return;
}
ui_utils_classPrivateFieldSet(ui_utils_visible, this, true);
ui_utils_classPrivateFieldGet(_classList, this).remove("hidden");
}
}
function getActiveOrFocusedElement() {
let curRoot = document;
let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus");
while (curActiveOrFocused?.shadowRoot) {
curRoot = curActiveOrFocused.shadowRoot;
curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus");
}
return curActiveOrFocused;
}
function apiPageLayoutToViewerModes(layout) {
let scrollMode = ScrollMode.VERTICAL,
spreadMode = SpreadMode.NONE;
switch (layout) {
case "SinglePage":
scrollMode = ScrollMode.PAGE;
break;
case "OneColumn":
break;
case "TwoPageLeft":
scrollMode = ScrollMode.PAGE;
case "TwoColumnLeft":
spreadMode = SpreadMode.ODD;
break;
case "TwoPageRight":
scrollMode = ScrollMode.PAGE;
case "TwoColumnRight":
spreadMode = SpreadMode.EVEN;
break;
}
return {
scrollMode,
spreadMode
};
}
function apiPageModeToSidebarView(mode) {
switch (mode) {
case "UseNone":
return SidebarView.NONE;
case "UseThumbs":
return SidebarView.THUMBS;
case "UseOutlines":
return SidebarView.OUTLINE;
case "UseAttachments":
return SidebarView.ATTACHMENTS;
case "UseOC":
return SidebarView.LAYERS;
}
return SidebarView.NONE;
}
function toggleCheckedBtn(button, toggle) {
let view = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
button.classList.toggle("toggled", toggle);
button.setAttribute("aria-checked", toggle);
view?.classList.toggle("hidden", !toggle);
}
function toggleExpandedBtn(button, toggle) {
let view = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
button?.classList.toggle("toggled", toggle);
button?.setAttribute("aria-expanded", toggle);
view?.classList.toggle("hidden", !toggle);
if (view && !view.classList.contains("hidden")) {
const rect = button.getBoundingClientRect();
const container = button.closest("#toolbarViewer");
if (container) {
const containerRect = container.getBoundingClientRect();
const distanceFromRight = containerRect.right - rect.right;
view.style.removeProperty("inset-inline-end");
view.style.setProperty("inset-inline-end", distanceFromRight + "px");
}
}
}
const calcRound = function () {
const e = document.createElement("div");
e.style.width = "round(down, calc(1.6666666666666665 * 792px), 1px)";
return e.style.width === "calc(1320px)" ? Math.fround : x => x;
}();
function isInsideNgxExtendedPdfViewer(element) {
let currentElement = element;
while (currentElement) {
if (currentElement.tagName.toLowerCase() === 'ngx-extended-pdf-viewer') {
return true;
}
currentElement = currentElement.parentElement;
}
return false;
}
;// ./web/app_options.js
var _AppOptions;
function app_options_defineProperty(e, r, t) { return (r = app_options_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function app_options_toPropertyKey(t) { var i = app_options_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function app_options_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function app_options_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
{
var compatParams = new Map();
const {
maxTouchPoints,
platform,
userAgent
} = navigator;
const isAndroid = /Android/.test(userAgent);
const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
(function () {
if (isIOS || isAndroid) {
compatParams.set("maxCanvasPixels", 5242880);
}
})();
(function () {
if (isAndroid) {
compatParams.set("useSystemFonts", false);
}
})();
}
const OptionKind = {
BROWSER: 0x01,
VIEWER: 0x02,
API: 0x04,
WORKER: 0x08,
EVENT_DISPATCH: 0x10,
PREFERENCE: 0x80
};
const Type = {
BOOLEAN: 0x01,
NUMBER: 0x02,
OBJECT: 0x04,
STRING: 0x08,
UNDEFINED: 0x10
};
const defaultOptions = {
defaultCacheSize: {
value: 50,
kind: OptionKind.VIEWER
},
passwordPrompt: {
value: null,
kind: OptionKind.VIEWER
},
enableDragAndDrop: {
value: true,
kind: OptionKind.VIEWER
},
pageViewMode: {
value: "multiple",
kind: OptionKind.VIEWER
},
findController: {
value: null,
kind: OptionKind.VIEWER
},
secondaryFindController: {
value: null,
kind: OptionKind.VIEWER
},
allowedGlobalEvents: {
value: null,
kind: OptionKind.BROWSER
},
canvasMaxAreaInBytes: {
value: -1,
kind: OptionKind.BROWSER + OptionKind.API
},
isInAutomation: {
value: false,
kind: OptionKind.BROWSER
},
localeProperties: {
value: {
lang: navigator.language || "en-US"
},
kind: OptionKind.BROWSER
},
maxCanvasDim: {
value: 32767,
kind: OptionKind.BROWSER + OptionKind.VIEWER
},
nimbusDataStr: {
value: "",
kind: OptionKind.BROWSER
},
supportsCaretBrowsingMode: {
value: false,
kind: OptionKind.BROWSER
},
supportsDocumentFonts: {
value: true,
kind: OptionKind.BROWSER
},
supportsIntegratedFind: {
value: false,
kind: OptionKind.BROWSER
},
supportsMouseWheelZoomCtrlKey: {
value: true,
kind: OptionKind.BROWSER
},
supportsMouseWheelZoomMetaKey: {
value: true,
kind: OptionKind.BROWSER
},
supportsPinchToZoom: {
value: true,
kind: OptionKind.BROWSER
},
supportsPrinting: {
value: true,
kind: OptionKind.BROWSER
},
toolbarDensity: {
value: 0,
kind: OptionKind.BROWSER + OptionKind.EVENT_DISPATCH
},
altTextLearnMoreUrl: {
value: "",
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
annotationEditorMode: {
value: 0,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
annotationMode: {
value: 2,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
capCanvasAreaFactor: {
value: 200,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
cursorToolOnLoad: {
value: 0,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
debuggerSrc: {
value: "./debugger.mjs",
kind: OptionKind.VIEWER
},
defaultZoomDelay: {
value: 400,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
defaultZoomValue: {
value: "auto",
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
disableHistory: {
value: false,
kind: OptionKind.VIEWER
},
disablePageLabels: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableAltText: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableAltTextModelDownload: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH
},
enableAutoLinking: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableDetailCanvas: {
value: true,
kind: OptionKind.VIEWER
},
enableGuessAltText: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH
},
enableHighlightFloatingButton: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableNewAltTextWhenAddingImage: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enablePermissions: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enablePrintAutoRotate: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableScripting: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableSignatureEditor: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enablePageReordering: {
value: true,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableUpdatedAddImage: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
externalLinkRel: {
value: "noopener noreferrer nofollow",
kind: OptionKind.VIEWER
},
externalLinkTarget: {
value: 0,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
highlightEditorColors: {
value: "yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F",
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
historyUpdateUrl: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
ignoreDestinationZoom: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
imageResourcesPath: {
value: "./images/",
kind: OptionKind.VIEWER
},
maxCanvasPixels: {
value: 2 ** 25,
kind: OptionKind.VIEWER
},
minDurationToUpdateCanvas: {
value: 500,
kind: OptionKind.VIEWER
},
forcePageColors: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
pageColorsBackground: {
value: "Canvas",
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
pageColorsForeground: {
value: "CanvasText",
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
pdfBugEnabled: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
printResolution: {
value: 150,
kind: OptionKind.VIEWER
},
removePageBorders: {
value: false,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
sidebarViewOnLoad: {
value: -1,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
scrollModeOnLoad: {
value: -1,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
spreadModeOnLoad: {
value: -1,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
textLayerMode: {
value: 1,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
viewerCssTheme: {
value: 0,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
viewOnLoad: {
value: 0,
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
cMapPacked: {
value: true,
kind: OptionKind.API
},
cMapUrl: {
value: "../web/cmaps/",
kind: OptionKind.API
},
disableAutoFetch: {
value: false,
kind: OptionKind.API + OptionKind.PREFERENCE
},
disableFontFace: {
value: false,
kind: OptionKind.API + OptionKind.PREFERENCE
},
disableRange: {
value: false,
kind: OptionKind.API + OptionKind.PREFERENCE
},
disableStream: {
value: false,
kind: OptionKind.API + OptionKind.PREFERENCE
},
docBaseUrl: {
value: "",
kind: OptionKind.API
},
enableHWA: {
value: true,
kind: OptionKind.API + OptionKind.VIEWER + OptionKind.PREFERENCE
},
enableXfa: {
value: true,
kind: OptionKind.API + OptionKind.PREFERENCE
},
fontExtraProperties: {
value: false,
kind: OptionKind.API
},
iccUrl: {
value: "../web/iccs/",
kind: OptionKind.API
},
isEvalSupported: {
value: true,
kind: OptionKind.API
},
isOffscreenCanvasSupported: {
value: true,
kind: OptionKind.API
},
maxZoom: {
value: 10,
kind: OptionKind.VIEWER
},
minZoom: {
value: 0.1,
kind: OptionKind.VIEWER
},
maxImageSize: {
value: -1,
kind: OptionKind.API
},
pdfBug: {
value: false,
kind: OptionKind.API
},
standardFontDataUrl: {
value: "../web/standard_fonts/",
kind: OptionKind.API
},
useSystemFonts: {
value: undefined,
kind: OptionKind.API,
type: Type.BOOLEAN + Type.UNDEFINED
},
verbosity: {
value: 1,
kind: OptionKind.API
},
wasmUrl: {
value: "../web/wasm/",
kind: OptionKind.API
},
workerPort: {
value: null,
kind: OptionKind.WORKER
},
workerSrc: {
value: "./assets/pdf.worker.mjs",
kind: OptionKind.WORKER
}
};
{
defaultOptions.defaultUrl = {
value: "compressed.tracemonkey-pldi-09.pdf",
kind: OptionKind.VIEWER
};
defaultOptions.sandboxBundleSrc = {
value: "../build/pdf.sandbox.mjs",
kind: OptionKind.VIEWER
};
defaultOptions.enableFakeMLManager = {
value: true,
kind: OptionKind.VIEWER
};
}
{
defaultOptions.disablePreferences = {
value: false,
kind: OptionKind.VIEWER
};
}
class AppOptions {
static get(name) {
return app_options_assertClassBrand(AppOptions, this, _opts)._.get(name);
}
static getAll() {
let kind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let defaultOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
const options = Object.create(null);
for (const name in defaultOptions) {
const defaultOpt = defaultOptions[name];
if (kind && !(kind & defaultOpt.kind)) {
continue;
}
options[name] = !defaultOnly ? app_options_assertClassBrand(AppOptions, this, _opts)._.get(name) : defaultOpt.value;
}
return options;
}
static set(name, value) {
this.setAll({
[name]: value
});
}
static setAll(options) {
let prefs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
this._hasInvokedSet ||= true;
let events;
for (const name in options) {
if (name === "positionPopupDialogsWithJavaScript") {
continue;
}
const defaultOpt = defaultOptions[name];
let userOpt = options[name];
if (!defaultOpt || !(typeof userOpt === typeof defaultOpt.value || Type[(typeof userOpt).toUpperCase()] & defaultOpt.type)) {
if (typeof defaultOpt?.value === "number" && typeof userOpt === "string") {
if (!Number.isNaN(Number(userOpt))) {
userOpt = Number(userOpt);
}
}
if (!(typeof userOpt === typeof defaultOpt.value || Type[(typeof userOpt).toUpperCase()] & defaultOpt.type)) {
if (!["maxZoom", "minZoom", "passwordPrompt", "defaultZoomValue", "findController"].includes(name)) {
console.error("Invalid AppOptions value: " + name + " = " + userOpt);
continue;
}
}
}
const {
kind
} = defaultOpt;
if (prefs && !(kind & OptionKind.BROWSER || kind & OptionKind.PREFERENCE)) {
console.error("Invalid AppOptions parameter: " + name + " = " + userOpt);
continue;
}
if (this.eventBus && kind & OptionKind.EVENT_DISPATCH) {
(events ||= new Map()).set(name, userOpt);
}
app_options_assertClassBrand(AppOptions, this, _opts)._.set(name, userOpt);
}
if (events) {
for (const [name, value] of events) {
this.eventBus.dispatch(name.toLowerCase(), {
source: this,
value
});
}
}
}
}
_AppOptions = AppOptions;
app_options_defineProperty(AppOptions, "eventBus", void 0);
var _opts = {
_: new Map()
};
(() => {
for (const name in defaultOptions) {
app_options_assertClassBrand(_AppOptions, _AppOptions, _opts)._.set(name, defaultOptions[name].value);
}
for (const [name, value] of compatParams) {
app_options_assertClassBrand(_AppOptions, _AppOptions, _opts)._.set(name, value);
}
_AppOptions._hasInvokedSet = false;
_AppOptions._checkDisablePreferences = () => {
if (_AppOptions.get("disablePreferences")) {
return true;
}
if (_AppOptions._hasInvokedSet) {
console.warn("The Preferences may override manually set AppOptions; " + 'please use the "disablePreferences"-option to prevent that.');
}
return false;
};
})();
;// ./web/pdf_link_service.js
function pdf_link_service_defineProperty(e, r, t) { return (r = pdf_link_service_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function pdf_link_service_toPropertyKey(t) { var i = pdf_link_service_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function pdf_link_service_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
const DEFAULT_LINK_REL = "noopener noreferrer nofollow";
const LinkTarget = {
NONE: 0,
SELF: 1,
BLANK: 2,
PARENT: 3,
TOP: 4
};
class PDFLinkService {
constructor() {
let {
eventBus,
externalLinkTarget = null,
externalLinkRel = null,
ignoreDestinationZoom = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
pdf_link_service_defineProperty(this, "externalLinkEnabled", true);
this.eventBus = eventBus;
this.externalLinkTarget = externalLinkTarget;
this.externalLinkRel = externalLinkRel;
this._ignoreDestinationZoom = ignoreDestinationZoom;
this.baseUrl = null;
this.pdfDocument = null;
this.pdfViewer = null;
this.pdfHistory = null;
}
setDocument(pdfDocument) {
let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
this.baseUrl = baseUrl;
this.pdfDocument = pdfDocument;
}
setViewer(pdfViewer) {
this.pdfViewer = pdfViewer;
}
setHistory(pdfHistory) {
this.pdfHistory = pdfHistory;
}
get pagesCount() {
return this.pdfDocument ? this.pdfDocument.numPages : 0;
}
get page() {
return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;
}
set page(value) {
if (this.pdfDocument) {
this.pdfViewer.currentPageNumber = value;
}
}
get rotation() {
return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;
}
set rotation(value) {
if (this.pdfDocument) {
this.pdfViewer.pagesRotation = value;
}
}
get isInPresentationMode() {
return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false;
}
async goToDestination(dest) {
if (!this.pdfDocument) {
return;
}
let namedDest, explicitDest, pageNumber;
if (typeof dest === "string") {
namedDest = dest;
explicitDest = await this.pdfDocument.getDestination(dest);
} else {
namedDest = null;
explicitDest = await dest;
}
if (!Array.isArray(explicitDest)) {
console.error(`goToDestination: "${explicitDest}" is not a valid destination array, for dest="${dest}".`);
return;
}
const [destRef] = explicitDest;
if (destRef && typeof destRef === "object") {
pageNumber = this.pdfDocument.cachedPageNumber(destRef);
if (!pageNumber) {
try {
pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;
} catch {
NgxConsole.error(`goToDestination: "${destRef}" is not a valid page reference, for dest="${dest}".`);
return;
}
}
} else if (Number.isInteger(destRef)) {
pageNumber = destRef + 1;
}
if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
NgxConsole.error(`goToDestination: "${pageNumber}" is not a valid page number, for dest="${dest}".`);
return;
}
if (this.pdfHistory) {
this.pdfHistory.pushCurrentPosition();
this.pdfHistory.push({
namedDest,
explicitDest,
pageNumber
});
}
this.pdfViewer.scrollPageIntoView({
pageNumber,
destArray: explicitDest,
ignoreDestinationZoom: this._ignoreDestinationZoom
});
}
goToPage(val) {
if (!this.pdfDocument) {
return;
}
const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;
if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
NgxConsole.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`);
return;
}
if (this.pdfHistory) {
this.pdfHistory.pushCurrentPosition();
this.pdfHistory.pushPage(pageNumber);
}
if (this.pdfViewer.pageViewMode === "book") {
if (this.pdfViewer.pageFlip) {
this.pdfViewer.ensureAdjacentPagesAreLoaded();
const evenPage = this.pdfViewer.currentPageNumber - this.pdfViewer.currentPageNumber % 2;
const evenTargetPage = pageNumber - pageNumber % 2;
if (evenPage === evenTargetPage - 2) {
this.pdfViewer.pageFlip.flipNext();
} else if (evenPage === evenTargetPage + 2) {
this.pdfViewer.pageFlip.flipPrev();
} else {
this.pdfViewer.pageFlip.turnToPage(pageNumber - 1);
}
}
} else {
this.pdfViewer.scrollPageIntoView({
pageNumber
});
}
}
addLinkAttributes(link, url) {
let newWindow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (!url || typeof url !== "string") {
throw new Error('A valid "url" parameter must provided.');
}
const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,
rel = this.externalLinkRel;
if (this.externalLinkEnabled) {
link.href = link.title = url;
} else {
link.href = "";
link.title = `Disabled: ${url}`;
link.onclick = () => false;
}
let targetStr = "";
switch (target) {
case LinkTarget.NONE:
break;
case LinkTarget.SELF:
targetStr = "_self";
break;
case LinkTarget.BLANK:
targetStr = "_blank";
break;
case LinkTarget.PARENT:
targetStr = "_parent";
break;
case LinkTarget.TOP:
targetStr = "_top";
break;
}
link.target = targetStr;
link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL;
}
getDestinationHash(dest) {
if (typeof dest === "string") {
if (dest.length > 0) {
return this.getAnchorUrl("#" + escape(dest));
}
} else if (Array.isArray(dest)) {
const str = JSON.stringify(dest);
if (str.length > 0) {
return this.getAnchorUrl("#" + escape(str));
}
}
return this.getAnchorUrl("");
}
getAnchorUrl(anchor) {
return this.baseUrl ? this.baseUrl + anchor : anchor;
}
setHash(hash) {
if (!this.pdfDocument) {
return;
}
let pageNumber, dest;
if (hash.includes("=")) {
const params = parseQueryString(hash);
if (params.has("search")) {
const query = params.get("search").replaceAll('"', ""),
phrase = params.get("phrase") === "true";
this.eventBus.dispatch("findfromurlhash", {
source: this,
query: phrase ? query : query.match(/\S+/g)
});
}
if (params.has("page")) {
pageNumber = params.get("page") | 0 || 1;
}
if (params.has("zoom")) {
const zoomArgs = params.get("zoom").split(",");
const zoomArg = zoomArgs[0];
const zoomArgNumber = parseFloat(zoomArg);
if (!zoomArg.includes("Fit")) {
dest = [null, {
name: "XYZ"
}, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
} else if (zoomArg === "Fit" || zoomArg === "FitB") {
dest = [null, {
name: zoomArg
}];
} else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") {
dest = [null, {
name: zoomArg
}, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
} else if (zoomArg === "FitR") {
if (zoomArgs.length !== 5) {
NgxConsole.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
} else {
dest = [null, {
name: zoomArg
}, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
}
} else {
NgxConsole.error(`PDFLinkService.setHash: "${zoomArg}" is not a valid zoom value.`);
}
}
if (dest) {
this.pdfViewer.scrollPageIntoView({
pageNumber: pageNumber || this.page,
destArray: dest,
allowNegativeOffset: true
});
} else if (pageNumber) {
this.page = pageNumber;
}
if (params.has("pagemode")) {
this.eventBus.dispatch("pagemode", {
source: this,
mode: params.get("pagemode")
});
}
if (params.has("nameddest")) {
this.goToDestination(params.get("nameddest"));
}
return;
}
dest = unescape(hash);
try {
dest = JSON.parse(dest);
if (!Array.isArray(dest)) {
dest = dest.toString();
}
} catch {}
if (typeof dest === "string" || isValidExplicitDest(dest)) {
this.goToDestination(dest);
return;
}
console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not a valid destination.`);
}
executeNamedAction(action) {
if (!this.pdfDocument) {
return;
}
switch (action) {
case "GoBack":
this.pdfHistory?.back();
break;
case "GoForward":
this.pdfHistory?.forward();
break;
case "NextPage":
this.pdfViewer.nextPage();
break;
case "PrevPage":
this.pdfViewer.previousPage();
break;
case "LastPage":
this.page = this.pagesCount;
break;
case "FirstPage":
this.page = 1;
break;
default:
break;
}
this.eventBus.dispatch("namedaction", {
source: this,
action
});
}
async executeSetOCGState(action) {
if (!this.pdfDocument) {
return;
}
const pdfDocument = this.pdfDocument,
optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;
if (pdfDocument !== this.pdfDocument) {
return;
}
optionalContentConfig.setOCGState(action);
this.pdfViewer.optionalContentConfigPromise = Promise.resolve(optionalContentConfig);
}
}
class SimpleLinkService extends PDFLinkService {
setDocument(pdfDocument) {
let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
}
}
;// ./web/ngx-extended-pdf-viewer-version.js
const ngxExtendedPdfViewerVersion = '24.2.5';
;// ./web/event_utils.js
function event_utils_classPrivateFieldSet(s, a, r) { return s.set(event_utils_assertClassBrand(s, a), r), r; }
function event_utils_classPrivateFieldInitSpec(e, t, a) { event_utils_checkPrivateRedeclaration(e, t), t.set(e, a); }
function event_utils_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function event_utils_classPrivateFieldGet(s, a) { return s.get(event_utils_assertClassBrand(s, a)); }
function event_utils_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const WaitOnType = {
EVENT: "event",
TIMEOUT: "timeout"
};
async function waitOnEventOrTimeout(_ref) {
let {
target,
name,
delay = 0
} = _ref;
if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) {
throw new Error("waitOnEventOrTimeout - invalid parameters.");
}
const {
promise,
resolve
} = Promise.withResolvers();
const ac = new AbortController();
function handler(type) {
ac.abort();
clearTimeout(timeout);
resolve(type);
}
const evtMethod = target instanceof EventBus ? "_on" : "addEventListener";
target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {
signal: ac.signal
});
const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);
return promise;
}
var event_utils_listeners = /*#__PURE__*/new WeakMap();
class EventBus {
constructor() {
event_utils_classPrivateFieldInitSpec(this, event_utils_listeners, Object.create(null));
}
on(eventName, listener) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
this._on(eventName, listener, {
external: true,
once: options?.once,
signal: options?.signal
});
}
off(eventName, listener) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
this._off(eventName, listener);
}
dispatch(eventName, data) {
const eventListeners = event_utils_classPrivateFieldGet(event_utils_listeners, this)[eventName];
if (!eventListeners || eventListeners.length === 0) {
return;
}
let externalListeners;
for (const {
listener,
external,
once
} of eventListeners.slice(0)) {
if (once) {
this._off(eventName, listener);
}
if (external) {
(externalListeners ||= []).push(listener);
continue;
}
listener(data);
}
if (externalListeners) {
for (const listener of externalListeners) {
listener(data);
}
externalListeners = null;
}
}
_on(eventName, listener) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
let rmAbort = null;
if (options?.signal instanceof AbortSignal) {
const {
signal
} = options;
if (signal.aborted) {
console.error("Cannot use an `aborted` signal.");
return;
}
const onAbort = () => this._off(eventName, listener);
rmAbort = () => signal.removeEventListener("abort", onAbort);
signal.addEventListener("abort", onAbort);
}
const eventListeners = event_utils_classPrivateFieldGet(event_utils_listeners, this)[eventName] ||= [];
eventListeners.push({
listener,
external: options?.external === true,
once: options?.once === true,
rmAbort
});
}
_off(eventName, listener) {
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
const eventListeners = event_utils_classPrivateFieldGet(event_utils_listeners, this)[eventName];
if (!eventListeners) {
return;
}
for (let i = 0, ii = eventListeners.length; i < ii; i++) {
const evt = eventListeners[i];
if (evt.listener === listener) {
evt.rmAbort?.();
eventListeners.splice(i, 1);
return;
}
}
}
destroy() {
let eventName;
for (eventName in event_utils_classPrivateFieldGet(event_utils_listeners, this)) {
event_utils_classPrivateFieldGet(event_utils_listeners, this)[eventName].length = 0;
}
}
}
var _externalServices = /*#__PURE__*/new WeakMap();
var _globalEventNames = /*#__PURE__*/new WeakMap();
var _isInAutomation = /*#__PURE__*/new WeakMap();
class FirefoxEventBus extends EventBus {
constructor(globalEventNames, externalServices, isInAutomation) {
super();
event_utils_classPrivateFieldInitSpec(this, _externalServices, void 0);
event_utils_classPrivateFieldInitSpec(this, _globalEventNames, void 0);
event_utils_classPrivateFieldInitSpec(this, _isInAutomation, void 0);
event_utils_classPrivateFieldSet(_globalEventNames, this, globalEventNames);
event_utils_classPrivateFieldSet(_externalServices, this, externalServices);
event_utils_classPrivateFieldSet(_isInAutomation, this, isInAutomation);
}
dispatch(eventName, data) {
throw new Error("Not implemented: FirefoxEventBus.dispatch");
}
}
;// ./web/external_services.js
class BaseExternalServices {
updateFindControlState(data) {}
updateFindMatchesCount(data) {}
initPassiveLoading() {}
reportTelemetry(data) {}
async createL10n() {
throw new Error("Not implemented: createL10n");
}
createScripting() {
throw new Error("Not implemented: createScripting");
}
createSignatureStorage() {
throw new Error("Not implemented: createSignatureStorage");
}
updateEditorStates(data) {
throw new Error("Not implemented: updateEditorStates");
}
dispatchGlobalEvent(_event) {}
}
;// ./web/preferences.js
function preferences_classPrivateFieldInitSpec(e, t, a) { preferences_checkPrivateRedeclaration(e, t), t.set(e, a); }
function preferences_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function preferences_classPrivateFieldSet(s, a, r) { return s.set(preferences_assertClassBrand(s, a), r), r; }
function preferences_classPrivateFieldGet(s, a) { return s.get(preferences_assertClassBrand(s, a)); }
function preferences_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _defaults = /*#__PURE__*/new WeakMap();
var _initializedPromise = /*#__PURE__*/new WeakMap();
class BasePreferences {
constructor() {
preferences_classPrivateFieldInitSpec(this, _defaults, Object.freeze({
altTextLearnMoreUrl: "",
annotationEditorMode: 0,
annotationMode: 2,
capCanvasAreaFactor: 200,
cursorToolOnLoad: 0,
defaultZoomDelay: 400,
defaultZoomValue: "auto",
disablePageLabels: false,
enableAltText: false,
enableAltTextModelDownload: true,
enableAutoLinking: true,
enableGuessAltText: true,
enableHighlightFloatingButton: false,
enableNewAltTextWhenAddingImage: true,
enablePermissions: false,
enablePrintAutoRotate: true,
enableScripting: true,
enableSignatureEditor: false,
enablePageReordering: true,
enableUpdatedAddImage: false,
externalLinkTarget: 0,
highlightEditorColors: "yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F",
historyUpdateUrl: false,
ignoreDestinationZoom: false,
forcePageColors: false,
pageColorsBackground: "Canvas",
pageColorsForeground: "CanvasText",
pdfBugEnabled: false,
removePageBorders: false,
sidebarViewOnLoad: -1,
scrollModeOnLoad: -1,
spreadModeOnLoad: -1,
textLayerMode: 1,
viewerCssTheme: 0,
viewOnLoad: 0,
disableAutoFetch: false,
disableFontFace: false,
disableRange: false,
disableStream: false,
enableHWA: true,
enableXfa: true
}));
preferences_classPrivateFieldInitSpec(this, _initializedPromise, null);
preferences_classPrivateFieldSet(_initializedPromise, this, this._readFromStorage(preferences_classPrivateFieldGet(_defaults, this)).then(_ref => {
let {
browserPrefs,
prefs
} = _ref;
if (AppOptions._checkDisablePreferences()) {
return;
}
AppOptions.setAll({
...browserPrefs,
...prefs
}, true);
}));
}
async _writeToStorage(prefObj) {
throw new Error("Not implemented: _writeToStorage");
}
async _readFromStorage(prefObj) {
throw new Error("Not implemented: _readFromStorage");
}
async reset() {
await preferences_classPrivateFieldGet(_initializedPromise, this);
AppOptions.setAll(preferences_classPrivateFieldGet(_defaults, this), true);
await this._writeToStorage(preferences_classPrivateFieldGet(_defaults, this));
}
async set(name, value) {
await preferences_classPrivateFieldGet(_initializedPromise, this);
AppOptions.setAll({
[name]: value
}, true);
await this._writeToStorage(AppOptions.getAll(OptionKind.PREFERENCE));
}
async get(name) {
await preferences_classPrivateFieldGet(_initializedPromise, this);
return AppOptions.get(name);
}
get initializedPromise() {
return preferences_classPrivateFieldGet(_initializedPromise, this);
}
}
;// ./node_modules/@fluent/bundle/esm/types.js
class FluentType {
constructor(value) {
this.value = value;
}
valueOf() {
return this.value;
}
}
class FluentNone extends FluentType {
constructor() {
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "???";
super(value);
}
toString(scope) {
return `{${this.value}}`;
}
}
class FluentNumber extends FluentType {
constructor(value) {
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
super(value);
this.opts = opts;
}
toString(scope) {
if (scope) {
try {
const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);
return nf.format(this.value);
} catch (err) {
scope.reportError(err);
}
}
return this.value.toString(10);
}
}
class FluentDateTime extends FluentType {
static supportsValue(value) {
if (typeof value === "number") return true;
if (value instanceof Date) return true;
if (value instanceof FluentType) return FluentDateTime.supportsValue(value.valueOf());
if ("Temporal" in globalThis) {
const _Temporal = globalThis.Temporal;
if (value instanceof _Temporal.Instant || value instanceof _Temporal.PlainDateTime || value instanceof _Temporal.PlainDate || value instanceof _Temporal.PlainMonthDay || value instanceof _Temporal.PlainTime || value instanceof _Temporal.PlainYearMonth) {
return true;
}
}
return false;
}
constructor(value) {
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (value instanceof FluentDateTime) {
opts = {
...value.opts,
...opts
};
value = value.value;
} else if (value instanceof FluentType) {
value = value.valueOf();
}
if (typeof value === "object" && "calendarId" in value && opts.calendar === undefined) {
opts = {
...opts,
calendar: value.calendarId
};
}
super(value);
this.opts = opts;
}
[Symbol.toPrimitive](hint) {
return hint === "string" ? this.toString() : this.toNumber();
}
toNumber() {
const value = this.value;
if (typeof value === "number") return value;
if (value instanceof Date) return value.getTime();
if ("epochMilliseconds" in value) {
return value.epochMilliseconds;
}
if ("toZonedDateTime" in value) {
return value.toZonedDateTime("UTC").epochMilliseconds;
}
throw new TypeError("Unwrapping a non-number value as a number");
}
toString(scope) {
if (scope) {
try {
const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);
return dtf.format(this.value);
} catch (err) {
scope.reportError(err);
}
}
if (typeof this.value === "number" || this.value instanceof Date) {
return new Date(this.value).toISOString();
}
return this.value.toString();
}
}
;// ./node_modules/@fluent/bundle/esm/resolver.js
const MAX_PLACEABLES = 100;
const FSI = "\u2068";
const PDI = "\u2069";
function match(scope, selector, key) {
if (key === selector) {
return true;
}
if (key instanceof FluentNumber && selector instanceof FluentNumber && key.value === selector.value) {
return true;
}
if (selector instanceof FluentNumber && typeof key === "string") {
let category = scope.memoizeIntlObject(Intl.PluralRules, selector.opts).select(selector.value);
if (key === category) {
return true;
}
}
return false;
}
function getDefault(scope, variants, star) {
if (variants[star]) {
return resolvePattern(scope, variants[star].value);
}
scope.reportError(new RangeError("No default"));
return new FluentNone();
}
function getArguments(scope, args) {
const positional = [];
const named = Object.create(null);
for (const arg of args) {
if (arg.type === "narg") {
named[arg.name] = resolveExpression(scope, arg.value);
} else {
positional.push(resolveExpression(scope, arg));
}
}
return {
positional,
named
};
}
function resolveExpression(scope, expr) {
switch (expr.type) {
case "str":
return expr.value;
case "num":
return new FluentNumber(expr.value, {
minimumFractionDigits: expr.precision
});
case "var":
return resolveVariableReference(scope, expr);
case "mesg":
return resolveMessageReference(scope, expr);
case "term":
return resolveTermReference(scope, expr);
case "func":
return resolveFunctionReference(scope, expr);
case "select":
return resolveSelectExpression(scope, expr);
default:
return new FluentNone();
}
}
function resolveVariableReference(scope, _ref) {
let {
name
} = _ref;
let arg;
if (scope.params) {
if (Object.prototype.hasOwnProperty.call(scope.params, name)) {
arg = scope.params[name];
} else {
return new FluentNone(`$${name}`);
}
} else if (scope.args && Object.prototype.hasOwnProperty.call(scope.args, name)) {
arg = scope.args[name];
} else {
scope.reportError(new ReferenceError(`Unknown variable: $${name}`));
return new FluentNone(`$${name}`);
}
if (arg instanceof FluentType) {
return arg;
}
switch (typeof arg) {
case "string":
return arg;
case "number":
return new FluentNumber(arg);
case "object":
if (FluentDateTime.supportsValue(arg)) {
return new FluentDateTime(arg);
}
default:
scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));
return new FluentNone(`$${name}`);
}
}
function resolveMessageReference(scope, _ref2) {
let {
name,
attr
} = _ref2;
const message = scope.bundle._messages.get(name);
if (!message) {
scope.reportError(new ReferenceError(`Unknown message: ${name}`));
return new FluentNone(name);
}
if (attr) {
const attribute = message.attributes[attr];
if (attribute) {
return resolvePattern(scope, attribute);
}
scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));
return new FluentNone(`${name}.${attr}`);
}
if (message.value) {
return resolvePattern(scope, message.value);
}
scope.reportError(new ReferenceError(`No value: ${name}`));
return new FluentNone(name);
}
function resolveTermReference(scope, _ref3) {
let {
name,
attr,
args
} = _ref3;
const id = `-${name}`;
const term = scope.bundle._terms.get(id);
if (!term) {
scope.reportError(new ReferenceError(`Unknown term: ${id}`));
return new FluentNone(id);
}
if (attr) {
const attribute = term.attributes[attr];
if (attribute) {
scope.params = getArguments(scope, args).named;
const resolved = resolvePattern(scope, attribute);
scope.params = null;
return resolved;
}
scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));
return new FluentNone(`${id}.${attr}`);
}
scope.params = getArguments(scope, args).named;
const resolved = resolvePattern(scope, term.value);
scope.params = null;
return resolved;
}
function resolveFunctionReference(scope, _ref4) {
let {
name,
args
} = _ref4;
let func = scope.bundle._functions[name];
if (!func) {
scope.reportError(new ReferenceError(`Unknown function: ${name}()`));
return new FluentNone(`${name}()`);
}
if (typeof func !== "function") {
scope.reportError(new TypeError(`Function ${name}() is not callable`));
return new FluentNone(`${name}()`);
}
try {
let resolved = getArguments(scope, args);
return func(resolved.positional, resolved.named);
} catch (err) {
scope.reportError(err);
return new FluentNone(`${name}()`);
}
}
function resolveSelectExpression(scope, _ref5) {
let {
selector,
variants,
star
} = _ref5;
let sel = resolveExpression(scope, selector);
if (sel instanceof FluentNone) {
return getDefault(scope, variants, star);
}
for (const variant of variants) {
const key = resolveExpression(scope, variant.key);
if (match(scope, sel, key)) {
return resolvePattern(scope, variant.value);
}
}
return getDefault(scope, variants, star);
}
function resolveComplexPattern(scope, ptn) {
if (scope.dirty.has(ptn)) {
scope.reportError(new RangeError("Cyclic reference"));
return new FluentNone();
}
scope.dirty.add(ptn);
const result = [];
const useIsolating = scope.bundle._useIsolating && ptn.length > 1;
for (const elem of ptn) {
if (typeof elem === "string") {
result.push(scope.bundle._transform(elem));
continue;
}
scope.placeables++;
if (scope.placeables > MAX_PLACEABLES) {
scope.dirty.delete(ptn);
throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` + `max allowed is ${MAX_PLACEABLES}`);
}
if (useIsolating) {
result.push(FSI);
}
result.push(resolveExpression(scope, elem).toString(scope));
if (useIsolating) {
result.push(PDI);
}
}
scope.dirty.delete(ptn);
return result.join("");
}
function resolvePattern(scope, value) {
if (typeof value === "string") {
return scope.bundle._transform(value);
}
return resolveComplexPattern(scope, value);
}
;// ./node_modules/@fluent/bundle/esm/scope.js
class Scope {
constructor(bundle, errors, args) {
this.dirty = new WeakSet();
this.params = null;
this.placeables = 0;
this.bundle = bundle;
this.errors = errors;
this.args = args;
}
reportError(error) {
if (!this.errors || !(error instanceof Error)) {
throw error;
}
this.errors.push(error);
}
memoizeIntlObject(ctor, opts) {
let cache = this.bundle._intls.get(ctor);
if (!cache) {
cache = {};
this.bundle._intls.set(ctor, cache);
}
let id = JSON.stringify(opts);
if (!cache[id]) {
cache[id] = new ctor(this.bundle.locales, opts);
}
return cache[id];
}
}
;// ./node_modules/@fluent/bundle/esm/builtins.js
function values(opts, allowed) {
const unwrapped = Object.create(null);
for (const [name, opt] of Object.entries(opts)) {
if (allowed.includes(name)) {
unwrapped[name] = opt.valueOf();
}
}
return unwrapped;
}
const NUMBER_ALLOWED = ["unitDisplay", "currencyDisplay", "useGrouping", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits"];
function NUMBER(args, opts) {
let arg = args[0];
if (arg instanceof FluentNone) {
return new FluentNone(`NUMBER(${arg.valueOf()})`);
}
if (arg instanceof FluentNumber) {
return new FluentNumber(arg.valueOf(), {
...arg.opts,
...values(opts, NUMBER_ALLOWED)
});
}
if (arg instanceof FluentDateTime) {
return new FluentNumber(arg.toNumber(), {
...values(opts, NUMBER_ALLOWED)
});
}
throw new TypeError("Invalid argument to NUMBER");
}
const DATETIME_ALLOWED = ["dateStyle", "timeStyle", "fractionalSecondDigits", "dayPeriod", "hour12", "weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"];
function DATETIME(args, opts) {
let arg = args[0];
if (arg instanceof FluentNone) {
return new FluentNone(`DATETIME(${arg.valueOf()})`);
}
if (arg instanceof FluentDateTime || arg instanceof FluentNumber) {
return new FluentDateTime(arg, values(opts, DATETIME_ALLOWED));
}
throw new TypeError("Invalid argument to DATETIME");
}
;// ./node_modules/@fluent/bundle/esm/memoizer.js
const cache = new Map();
function getMemoizerForLocale(locales) {
const stringLocale = Array.isArray(locales) ? locales.join(" ") : locales;
let memoizer = cache.get(stringLocale);
if (memoizer === undefined) {
memoizer = new Map();
cache.set(stringLocale, memoizer);
}
return memoizer;
}
;// ./node_modules/@fluent/bundle/esm/bundle.js
class FluentBundle {
constructor(locales) {
let {
functions,
useIsolating = true,
transform = v => v
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this._terms = new Map();
this._messages = new Map();
this.locales = Array.isArray(locales) ? locales : [locales];
this._functions = {
NUMBER: NUMBER,
DATETIME: DATETIME,
...functions
};
this._useIsolating = useIsolating;
this._transform = transform;
this._intls = getMemoizerForLocale(locales);
}
hasMessage(id) {
return this._messages.has(id);
}
getMessage(id) {
return this._messages.get(id);
}
addResource(res) {
let {
allowOverrides = false
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const errors = [];
for (let i = 0; i < res.body.length; i++) {
let entry = res.body[i];
if (entry.id.startsWith("-")) {
if (allowOverrides === false && this._terms.has(entry.id)) {
errors.push(new Error(`Attempt to override an existing term: "${entry.id}"`));
continue;
}
this._terms.set(entry.id, entry);
} else {
if (allowOverrides === false && this._messages.has(entry.id)) {
errors.push(new Error(`Attempt to override an existing message: "${entry.id}"`));
continue;
}
this._messages.set(entry.id, entry);
}
}
return errors;
}
formatPattern(pattern) {
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let errors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (typeof pattern === "string") {
return this._transform(pattern);
}
let scope = new Scope(this, errors, args);
try {
let value = resolveComplexPattern(scope, pattern);
return value.toString(scope);
} catch (err) {
if (scope.errors && err instanceof Error) {
scope.errors.push(err);
return new FluentNone().toString(scope);
}
throw err;
}
}
}
;// ./node_modules/@fluent/bundle/esm/resource.js
const RE_MESSAGE_START = /^(-?[a-zA-Z][\w-]*) *= */gm;
const RE_ATTRIBUTE_START = /\.([a-zA-Z][\w-]*) *= */y;
const RE_VARIANT_START = /\*?\[/y;
const RE_NUMBER_LITERAL = /(-?[0-9]+(?:\.([0-9]+))?)/y;
const RE_IDENTIFIER = /([a-zA-Z][\w-]*)/y;
const RE_REFERENCE = /([$-])?([a-zA-Z][\w-]*)(?:\.([a-zA-Z][\w-]*))?/y;
const RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;
const RE_TEXT_RUN = /([^{}\n\r]+)/y;
const RE_STRING_RUN = /([^\\"\n\r]*)/y;
const RE_STRING_ESCAPE = /\\([\\"])/y;
const RE_UNICODE_ESCAPE = /\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{6})/y;
const RE_LEADING_NEWLINES = /^\n+/;
const RE_TRAILING_SPACES = / +$/;
const RE_BLANK_LINES = / *\r?\n/g;
const RE_INDENT = /( *)$/;
const TOKEN_BRACE_OPEN = /{\s*/y;
const TOKEN_BRACE_CLOSE = /\s*}/y;
const TOKEN_BRACKET_OPEN = /\[\s*/y;
const TOKEN_BRACKET_CLOSE = /\s*] */y;
const TOKEN_PAREN_OPEN = /\s*\(\s*/y;
const TOKEN_ARROW = /\s*->\s*/y;
const TOKEN_COLON = /\s*:\s*/y;
const TOKEN_COMMA = /\s*,?\s*/y;
const TOKEN_BLANK = /\s+/y;
class FluentResource {
constructor(source) {
this.body = [];
RE_MESSAGE_START.lastIndex = 0;
let cursor = 0;
while (true) {
let next = RE_MESSAGE_START.exec(source);
if (next === null) {
break;
}
cursor = RE_MESSAGE_START.lastIndex;
try {
this.body.push(parseMessage(next[1]));
} catch (err) {
if (err instanceof SyntaxError) {
continue;
}
throw err;
}
}
function test(re) {
re.lastIndex = cursor;
return re.test(source);
}
function consumeChar(char, errorClass) {
if (source[cursor] === char) {
cursor++;
return true;
}
if (errorClass) {
throw new errorClass(`Expected ${char}`);
}
return false;
}
function consumeToken(re, errorClass) {
if (test(re)) {
cursor = re.lastIndex;
return true;
}
if (errorClass) {
throw new errorClass(`Expected ${re.toString()}`);
}
return false;
}
function match(re) {
re.lastIndex = cursor;
let result = re.exec(source);
if (result === null) {
throw new SyntaxError(`Expected ${re.toString()}`);
}
cursor = re.lastIndex;
return result;
}
function match1(re) {
return match(re)[1];
}
function parseMessage(id) {
let value = parsePattern();
let attributes = parseAttributes();
if (value === null && Object.keys(attributes).length === 0) {
throw new SyntaxError("Expected message value or attributes");
}
return {
id,
value,
attributes
};
}
function parseAttributes() {
let attrs = Object.create(null);
while (test(RE_ATTRIBUTE_START)) {
let name = match1(RE_ATTRIBUTE_START);
let value = parsePattern();
if (value === null) {
throw new SyntaxError("Expected attribute value");
}
attrs[name] = value;
}
return attrs;
}
function parsePattern() {
let first;
if (test(RE_TEXT_RUN)) {
first = match1(RE_TEXT_RUN);
}
if (source[cursor] === "{" || source[cursor] === "}") {
return parsePatternElements(first ? [first] : [], Infinity);
}
let indent = parseIndent();
if (indent) {
if (first) {
return parsePatternElements([first, indent], indent.length);
}
indent.value = trim(indent.value, RE_LEADING_NEWLINES);
return parsePatternElements([indent], indent.length);
}
if (first) {
return trim(first, RE_TRAILING_SPACES);
}
return null;
}
function parsePatternElements() {
let elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
let commonIndent = arguments.length > 1 ? arguments[1] : undefined;
while (true) {
if (test(RE_TEXT_RUN)) {
elements.push(match1(RE_TEXT_RUN));
continue;
}
if (source[cursor] === "{") {
elements.push(parsePlaceable());
continue;
}
if (source[cursor] === "}") {
throw new SyntaxError("Unbalanced closing brace");
}
let indent = parseIndent();
if (indent) {
elements.push(indent);
commonIndent = Math.min(commonIndent, indent.length);
continue;
}
break;
}
let lastIndex = elements.length - 1;
let lastElement = elements[lastIndex];
if (typeof lastElement === "string") {
elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);
}
let baked = [];
for (let element of elements) {
if (element instanceof Indent) {
element = element.value.slice(0, element.value.length - commonIndent);
}
if (element) {
baked.push(element);
}
}
return baked;
}
function parsePlaceable() {
consumeToken(TOKEN_BRACE_OPEN, SyntaxError);
let selector = parseInlineExpression();
if (consumeToken(TOKEN_BRACE_CLOSE)) {
return selector;
}
if (consumeToken(TOKEN_ARROW)) {
let variants = parseVariants();
consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);
return {
type: "select",
selector,
...variants
};
}
throw new SyntaxError("Unclosed placeable");
}
function parseInlineExpression() {
if (source[cursor] === "{") {
return parsePlaceable();
}
if (test(RE_REFERENCE)) {
let [, sigil, name, attr = null] = match(RE_REFERENCE);
if (sigil === "$") {
return {
type: "var",
name
};
}
if (consumeToken(TOKEN_PAREN_OPEN)) {
let args = parseArguments();
if (sigil === "-") {
return {
type: "term",
name,
attr,
args
};
}
if (RE_FUNCTION_NAME.test(name)) {
return {
type: "func",
name,
args
};
}
throw new SyntaxError("Function names must be all upper-case");
}
if (sigil === "-") {
return {
type: "term",
name,
attr,
args: []
};
}
return {
type: "mesg",
name,
attr
};
}
return parseLiteral();
}
function parseArguments() {
let args = [];
while (true) {
switch (source[cursor]) {
case ")":
cursor++;
return args;
case undefined:
throw new SyntaxError("Unclosed argument list");
}
args.push(parseArgument());
consumeToken(TOKEN_COMMA);
}
}
function parseArgument() {
let expr = parseInlineExpression();
if (expr.type !== "mesg") {
return expr;
}
if (consumeToken(TOKEN_COLON)) {
return {
type: "narg",
name: expr.name,
value: parseLiteral()
};
}
return expr;
}
function parseVariants() {
let variants = [];
let count = 0;
let star;
while (test(RE_VARIANT_START)) {
if (consumeChar("*")) {
star = count;
}
let key = parseVariantKey();
let value = parsePattern();
if (value === null) {
throw new SyntaxError("Expected variant value");
}
variants[count++] = {
key,
value
};
}
if (count === 0) {
return null;
}
if (star === undefined) {
throw new SyntaxError("Expected default variant");
}
return {
variants,
star
};
}
function parseVariantKey() {
consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);
let key;
if (test(RE_NUMBER_LITERAL)) {
key = parseNumberLiteral();
} else {
key = {
type: "str",
value: match1(RE_IDENTIFIER)
};
}
consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);
return key;
}
function parseLiteral() {
if (test(RE_NUMBER_LITERAL)) {
return parseNumberLiteral();
}
if (source[cursor] === '"') {
return parseStringLiteral();
}
throw new SyntaxError("Invalid expression");
}
function parseNumberLiteral() {
let [, value, fraction = ""] = match(RE_NUMBER_LITERAL);
let precision = fraction.length;
return {
type: "num",
value: parseFloat(value),
precision
};
}
function parseStringLiteral() {
consumeChar('"', SyntaxError);
let value = "";
while (true) {
value += match1(RE_STRING_RUN);
if (source[cursor] === "\\") {
value += parseEscapeSequence();
continue;
}
if (consumeChar('"')) {
return {
type: "str",
value
};
}
throw new SyntaxError("Unclosed string literal");
}
}
function parseEscapeSequence() {
if (test(RE_STRING_ESCAPE)) {
return match1(RE_STRING_ESCAPE);
}
if (test(RE_UNICODE_ESCAPE)) {
let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);
let codepoint = parseInt(codepoint4 || codepoint6, 16);
return codepoint <= 0xd7ff || 0xe000 <= codepoint ? String.fromCodePoint(codepoint) : "�";
}
throw new SyntaxError("Unknown escape sequence");
}
function parseIndent() {
let start = cursor;
consumeToken(TOKEN_BLANK);
switch (source[cursor]) {
case ".":
case "[":
case "*":
case "}":
case undefined:
return false;
case "{":
return makeIndent(source.slice(start, cursor));
}
if (source[cursor - 1] === " ") {
return makeIndent(source.slice(start, cursor));
}
return false;
}
function trim(text, re) {
return text.replace(re, "");
}
function makeIndent(blank) {
let value = blank.replace(RE_BLANK_LINES, "\n");
let length = RE_INDENT.exec(blank)[1].length;
return new Indent(value, length);
}
}
}
class Indent {
constructor(value, length) {
this.value = value;
this.length = length;
}
}
;// ./node_modules/@fluent/bundle/esm/index.js
;// ./node_modules/@fluent/dom/esm/overlay.js
const reOverlay = /<|&#?\w+;/;
const TEXT_LEVEL_ELEMENTS = {
"http://www.w3.org/1999/xhtml": ["em", "strong", "small", "s", "cite", "q", "dfn", "abbr", "data", "time", "code", "var", "samp", "kbd", "sub", "sup", "i", "b", "u", "mark", "bdi", "bdo", "span", "br", "wbr"]
};
const LOCALIZABLE_ATTRIBUTES = {
"http://www.w3.org/1999/xhtml": {
global: ["title", "aria-description", "aria-label", "aria-valuetext"],
a: ["download"],
area: ["download", "alt"],
input: ["alt", "placeholder"],
menuitem: ["label"],
menu: ["label"],
optgroup: ["label"],
option: ["label"],
track: ["label"],
img: ["alt"],
textarea: ["placeholder"],
th: ["abbr"]
},
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul": {
global: ["accesskey", "aria-label", "aria-valuetext", "label", "title", "tooltiptext"],
description: ["value"],
key: ["key", "keycode"],
label: ["value"],
textbox: ["placeholder", "value"]
}
};
function translateElement(element, translation) {
const {
value
} = translation;
if (typeof value === "string") {
if (element.localName === "title" && element.namespaceURI === "http://www.w3.org/1999/xhtml") {
element.textContent = value;
} else if (!reOverlay.test(value)) {
element.textContent = value;
} else {
const templateElement = element.ownerDocument.createElementNS("http://www.w3.org/1999/xhtml", "template");
templateElement.innerHTML = value;
overlayChildNodes(templateElement.content, element);
}
}
overlayAttributes(translation, element);
}
function overlayChildNodes(fromFragment, toElement) {
for (const childNode of fromFragment.childNodes) {
if (childNode.nodeType === childNode.TEXT_NODE) {
continue;
}
if (childNode.hasAttribute("data-l10n-name")) {
const sanitized = getNodeForNamedElement(toElement, childNode);
fromFragment.replaceChild(sanitized, childNode);
continue;
}
if (isElementAllowed(childNode)) {
const sanitized = createSanitizedElement(childNode);
fromFragment.replaceChild(sanitized, childNode);
continue;
}
console.warn(`An element of forbidden type "${childNode.localName}" was found in ` + "the translation. Only safe text-level elements and elements with " + "data-l10n-name are allowed.");
fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);
}
toElement.textContent = "";
toElement.appendChild(fromFragment);
}
function hasAttribute(attributes, name) {
if (!attributes) {
return false;
}
for (let attr of attributes) {
if (attr.name === name) {
return true;
}
}
return false;
}
function overlayAttributes(fromElement, toElement) {
const explicitlyAllowed = toElement.hasAttribute("data-l10n-attrs") ? toElement.getAttribute("data-l10n-attrs").split(",").map(i => i.trim()) : null;
for (const attr of Array.from(toElement.attributes)) {
if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && !hasAttribute(fromElement.attributes, attr.name)) {
toElement.removeAttribute(attr.name);
}
}
if (!fromElement.attributes) {
return;
}
for (const attr of Array.from(fromElement.attributes)) {
if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) && toElement.getAttribute(attr.name) !== attr.value) {
toElement.setAttribute(attr.name, attr.value);
}
}
}
function getNodeForNamedElement(sourceElement, translatedChild) {
const childName = translatedChild.getAttribute("data-l10n-name");
const sourceChild = sourceElement.querySelector(`[data-l10n-name="${childName}"]`);
if (!sourceChild) {
console.warn(`An element named "${childName}" wasn't found in the source.`);
return createTextNodeFromTextContent(translatedChild);
}
if (sourceChild.localName !== translatedChild.localName) {
console.warn(`An element named "${childName}" was found in the translation ` + `but its type ${translatedChild.localName} didn't match the ` + `element found in the source (${sourceChild.localName}).`);
return createTextNodeFromTextContent(translatedChild);
}
sourceElement.removeChild(sourceChild);
const clone = sourceChild.cloneNode(false);
return shallowPopulateUsing(translatedChild, clone);
}
function createSanitizedElement(element) {
const clone = element.ownerDocument.createElement(element.localName);
return shallowPopulateUsing(element, clone);
}
function createTextNodeFromTextContent(element) {
return element.ownerDocument.createTextNode(element.textContent);
}
function isElementAllowed(element) {
const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];
return allowed && allowed.includes(element.localName);
}
function isAttrNameLocalizable(name, element) {
let explicitlyAllowed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (explicitlyAllowed && explicitlyAllowed.includes(name)) {
return true;
}
const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];
if (!allowed) {
return false;
}
const attrName = name.toLowerCase();
const elemName = element.localName;
if (allowed.global.includes(attrName)) {
return true;
}
if (!allowed[elemName]) {
return false;
}
if (allowed[elemName].includes(attrName)) {
return true;
}
if (element.namespaceURI === "http://www.w3.org/1999/xhtml" && elemName === "input" && attrName === "value") {
const type = element.type.toLowerCase();
if (type === "submit" || type === "button" || type === "reset") {
return true;
}
}
return false;
}
function shallowPopulateUsing(fromElement, toElement) {
toElement.textContent = fromElement.textContent;
overlayAttributes(fromElement, toElement);
return toElement;
}
;// ./node_modules/cached-iterable/src/cached_iterable.mjs
class CachedIterable extends Array {
static from(iterable) {
if (iterable instanceof this) {
return iterable;
}
return new this(iterable);
}
}
;// ./node_modules/cached-iterable/src/cached_sync_iterable.mjs
class CachedSyncIterable extends CachedIterable {
constructor(iterable) {
super();
if (Symbol.iterator in Object(iterable)) {
this.iterator = iterable[Symbol.iterator]();
} else {
throw new TypeError("Argument must implement the iteration protocol.");
}
}
[Symbol.iterator]() {
const cached = this;
let cur = 0;
return {
next() {
if (cached.length <= cur) {
cached.push(cached.iterator.next());
}
return cached[cur++];
}
};
}
touchNext() {
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
let idx = 0;
while (idx++ < count) {
const last = this[this.length - 1];
if (last && last.done) {
break;
}
this.push(this.iterator.next());
}
return this[this.length - 1];
}
}
;// ./node_modules/cached-iterable/src/cached_async_iterable.mjs
class CachedAsyncIterable extends CachedIterable {
constructor(iterable) {
super();
if (Symbol.asyncIterator in Object(iterable)) {
this.iterator = iterable[Symbol.asyncIterator]();
} else if (Symbol.iterator in Object(iterable)) {
this.iterator = iterable[Symbol.iterator]();
} else {
throw new TypeError("Argument must implement the iteration protocol.");
}
}
[Symbol.asyncIterator]() {
const cached = this;
let cur = 0;
return {
async next() {
if (cached.length <= cur) {
cached.push(cached.iterator.next());
}
return cached[cur++];
}
};
}
async touchNext() {
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
let idx = 0;
while (idx++ < count) {
const last = this[this.length - 1];
if (last && (await last).done) {
break;
}
this.push(this.iterator.next());
}
return this[this.length - 1];
}
}
;// ./node_modules/cached-iterable/src/index.mjs
;// ./node_modules/@fluent/dom/esm/localization.js
class Localization {
constructor() {
let resourceIds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
let generateBundles = arguments.length > 1 ? arguments[1] : undefined;
this.resourceIds = resourceIds;
this.generateBundles = generateBundles;
this.onChange(true);
}
addResourceIds(resourceIds) {
let eager = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
this.resourceIds.push(...resourceIds);
this.onChange(eager);
return this.resourceIds.length;
}
removeResourceIds(resourceIds) {
this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));
this.onChange();
return this.resourceIds.length;
}
async formatWithFallback(keys, method) {
const translations = [];
let hasAtLeastOneBundle = false;
for await (const bundle of this.bundles) {
hasAtLeastOneBundle = true;
const missingIds = keysFromBundle(method, bundle, keys, translations);
if (missingIds.size === 0) {
break;
}
if (typeof console !== "undefined") {
const locale = bundle.locales[0];
const ids = Array.from(missingIds).join(", ");
console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);
}
}
if (!hasAtLeastOneBundle && typeof console !== "undefined") {
console.warn(`[fluent] Request for keys failed because no resource bundles got generated.
keys: ${JSON.stringify(keys)}.
resourceIds: ${JSON.stringify(this.resourceIds)}.`);
}
return translations;
}
formatMessages(keys) {
return this.formatWithFallback(keys, messageFromBundle);
}
formatValues(keys) {
return this.formatWithFallback(keys, valueFromBundle);
}
async formatValue(id, args) {
const [val] = await this.formatValues([{
id,
args
}]);
return val;
}
handleEvent() {
this.onChange();
}
onChange() {
let eager = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));
if (eager) {
this.bundles.touchNext(2);
}
}
}
function valueFromBundle(bundle, errors, message, args) {
if (message.value) {
return bundle.formatPattern(message.value, args, errors);
}
return null;
}
function messageFromBundle(bundle, errors, message, args) {
const formatted = {
value: null,
attributes: null
};
if (message.value) {
formatted.value = bundle.formatPattern(message.value, args, errors);
}
let attrNames = Object.keys(message.attributes);
if (attrNames.length > 0) {
formatted.attributes = new Array(attrNames.length);
for (let [i, name] of attrNames.entries()) {
let value = bundle.formatPattern(message.attributes[name], args, errors);
formatted.attributes[i] = {
name,
value
};
}
}
return formatted;
}
function keysFromBundle(method, bundle, keys, translations) {
const messageErrors = [];
const missingIds = new Set();
keys.forEach((_ref, i) => {
let {
id,
args
} = _ref;
if (translations[i] !== undefined) {
return;
}
let message = bundle.getMessage(id);
if (message) {
messageErrors.length = 0;
translations[i] = method(bundle, messageErrors, message, args);
if (messageErrors.length > 0 && typeof console !== "undefined") {
const locale = bundle.locales[0];
const errors = messageErrors.join(", ");
console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);
}
} else {
missingIds.add(id);
}
});
return missingIds;
}
;// ./node_modules/@fluent/dom/esm/dom_localization.js
const L10NID_ATTR_NAME = "data-l10n-id";
const L10NARGS_ATTR_NAME = "data-l10n-args";
const L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;
class DOMLocalization extends Localization {
constructor(resourceIds, generateBundles) {
super(resourceIds, generateBundles);
this.roots = new Set();
this.pendingrAF = null;
this.pendingElements = new Set();
this.windowElement = null;
this.mutationObserver = null;
this.observerConfig = {
attributes: true,
characterData: false,
childList: true,
subtree: true,
attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME]
};
}
onChange() {
let eager = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
super.onChange(eager);
if (this.roots) {
this.translateRoots();
}
}
setAttributes(element, id, args) {
element.setAttribute(L10NID_ATTR_NAME, id);
if (args) {
element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));
} else {
element.removeAttribute(L10NARGS_ATTR_NAME);
}
return element;
}
getAttributes(element) {
return {
id: element.getAttribute(L10NID_ATTR_NAME),
args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null)
};
}
connectRoot(newRoot) {
for (const root of this.roots) {
if (root === newRoot || root.contains(newRoot) || newRoot.contains(root)) {
throw new Error("Cannot add a root that overlaps with existing root.");
}
}
if (this.windowElement) {
if (this.windowElement !== newRoot.ownerDocument.defaultView) {
throw new Error(`Cannot connect a root:
DOMLocalization already has a root from a different window.`);
}
} else {
this.windowElement = newRoot.ownerDocument.defaultView;
this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));
}
this.roots.add(newRoot);
this.mutationObserver.observe(newRoot, this.observerConfig);
}
disconnectRoot(root) {
this.roots.delete(root);
this.pauseObserving();
if (this.roots.size === 0) {
this.mutationObserver = null;
if (this.windowElement && this.pendingrAF) {
this.windowElement.cancelAnimationFrame(this.pendingrAF);
}
this.windowElement = null;
this.pendingrAF = null;
this.pendingElements.clear();
return true;
}
this.resumeObserving();
return false;
}
translateRoots() {
const roots = Array.from(this.roots);
return Promise.all(roots.map(root => this.translateFragment(root)));
}
pauseObserving() {
if (!this.mutationObserver) {
return;
}
this.translateMutations(this.mutationObserver.takeRecords());
this.mutationObserver.disconnect();
}
resumeObserving() {
if (!this.mutationObserver) {
return;
}
for (const root of this.roots) {
this.mutationObserver.observe(root, this.observerConfig);
}
}
translateMutations(mutations) {
for (const mutation of mutations) {
switch (mutation.type) {
case "attributes":
if (mutation.target.hasAttribute("data-l10n-id")) {
this.pendingElements.add(mutation.target);
}
break;
case "childList":
for (const addedNode of mutation.addedNodes) {
if (addedNode.nodeType === addedNode.ELEMENT_NODE) {
if (addedNode.childElementCount) {
for (const element of this.getTranslatables(addedNode)) {
this.pendingElements.add(element);
}
} else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {
this.pendingElements.add(addedNode);
}
}
}
break;
}
}
if (this.pendingElements.size > 0) {
if (this.pendingrAF === null) {
this.pendingrAF = this.windowElement.requestAnimationFrame(() => {
this.translateElements(Array.from(this.pendingElements));
this.pendingElements.clear();
this.pendingrAF = null;
});
}
}
}
translateFragment(frag) {
return this.translateElements(this.getTranslatables(frag));
}
async translateElements(elements) {
if (!elements.length) {
return undefined;
}
const keys = elements.map(this.getKeysForElement);
const translations = await this.formatMessages(keys);
return this.applyTranslations(elements, translations);
}
applyTranslations(elements, translations) {
this.pauseObserving();
for (let i = 0; i < elements.length; i++) {
if (translations[i] !== undefined) {
translateElement(elements[i], translations[i]);
}
}
this.resumeObserving();
}
getTranslatables(element) {
const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));
if (typeof element.hasAttribute === "function" && element.hasAttribute(L10NID_ATTR_NAME)) {
nodes.push(element);
}
return nodes;
}
getKeysForElement(element) {
return {
id: element.getAttribute(L10NID_ATTR_NAME),
args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null)
};
}
}
;// ./node_modules/@fluent/dom/esm/index.js
;// ./web/l10n.js
function l10n_classPrivateFieldInitSpec(e, t, a) { l10n_checkPrivateRedeclaration(e, t), t.set(e, a); }
function l10n_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function l10n_classPrivateFieldGet(s, a) { return s.get(l10n_assertClassBrand(s, a)); }
function l10n_classPrivateFieldSet(s, a, r) { return s.set(l10n_assertClassBrand(s, a), r), r; }
function l10n_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _dir = /*#__PURE__*/new WeakMap();
var l10n_elements = /*#__PURE__*/new WeakMap();
var l10n_lang = /*#__PURE__*/new WeakMap();
var _l10n = /*#__PURE__*/new WeakMap();
class L10n {
constructor(_ref) {
let {
lang,
isRTL
} = _ref;
let l10n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
l10n_classPrivateFieldInitSpec(this, _dir, void 0);
l10n_classPrivateFieldInitSpec(this, l10n_elements, void 0);
l10n_classPrivateFieldInitSpec(this, l10n_lang, void 0);
l10n_classPrivateFieldInitSpec(this, _l10n, void 0);
l10n_classPrivateFieldSet(l10n_lang, this, _fixupLangCode.call(L10n, lang));
l10n_classPrivateFieldSet(_l10n, this, l10n);
l10n_classPrivateFieldSet(_dir, this, isRTL ?? _isRTL.call(L10n, l10n_classPrivateFieldGet(l10n_lang, this)) ? "rtl" : "ltr");
}
_setL10n(l10n) {
l10n_classPrivateFieldSet(_l10n, this, l10n);
}
getLanguage() {
return l10n_classPrivateFieldGet(l10n_lang, this);
}
getDirection() {
return l10n_classPrivateFieldGet(_dir, this);
}
async get(ids) {
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
let fallback = arguments.length > 2 ? arguments[2] : undefined;
if (Array.isArray(ids)) {
ids = ids.map(id => ({
id
}));
const messages = await l10n_classPrivateFieldGet(_l10n, this).formatMessages(ids);
return messages.map(message => message.value);
}
const messages = await l10n_classPrivateFieldGet(_l10n, this).formatMessages([{
id: ids,
args
}]);
return messages[0]?.value || fallback;
}
async translate(element) {
(l10n_classPrivateFieldGet(l10n_elements, this) || l10n_classPrivateFieldSet(l10n_elements, this, new Set())).add(element);
try {
l10n_classPrivateFieldGet(_l10n, this).connectRoot(element);
} catch {}
await l10n_classPrivateFieldGet(_l10n, this).translateRoots();
}
async translateOnce(element) {
try {
await l10n_classPrivateFieldGet(_l10n, this).translateElements([element]);
} catch (ex) {
console.error("translateOnce:", ex);
}
}
async destroy() {
if (l10n_classPrivateFieldGet(l10n_elements, this)) {
for (const element of l10n_classPrivateFieldGet(l10n_elements, this)) {
l10n_classPrivateFieldGet(_l10n, this).disconnectRoot(element);
}
l10n_classPrivateFieldGet(l10n_elements, this).clear();
l10n_classPrivateFieldSet(l10n_elements, this, null);
}
l10n_classPrivateFieldGet(_l10n, this).pauseObserving();
}
pause() {
l10n_classPrivateFieldGet(_l10n, this).pauseObserving();
}
resume() {
l10n_classPrivateFieldGet(_l10n, this).resumeObserving();
}
}
function _fixupLangCode(langCode) {
langCode = langCode?.toLowerCase() || "en-us";
const PARTIAL_LANG_CODES = {
en: "en-us",
es: "es-es",
fy: "fy-nl",
ga: "ga-ie",
gu: "gu-in",
hi: "hi-in",
hy: "hy-am",
nb: "nb-no",
ne: "ne-np",
nn: "nn-no",
pa: "pa-in",
pt: "pt-pt",
sv: "sv-se",
zh: "zh-cn"
};
return PARTIAL_LANG_CODES[langCode] || langCode;
}
function _isRTL(lang) {
const shortCode = lang.split("-", 1)[0];
return ["ar", "he", "fa", "ps", "ur"].includes(shortCode);
}
const GenericL10n = null;
;// ./web/genericl10n.js
var _GenericL10n;
function genericl10n_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function PLATFORM() {
const {
isAndroid,
isLinux,
isMac,
isWindows
} = util_FeatureTest.platform;
if (isLinux) {
return "linux";
}
if (isWindows) {
return "windows";
}
if (isMac) {
return "macos";
}
if (isAndroid) {
return "android";
}
return "other";
}
function createBundle(lang, text) {
const resource = new FluentResource(text);
const bundle = new FluentBundle(lang, {
functions: {
PLATFORM
}
});
const errors = bundle.addResource(resource);
if (errors.length) {
console.error("L10n errors", errors);
}
return bundle;
}
class genericl10n_GenericL10n extends L10n {
constructor(lang) {
super({
lang
});
const generateBundles = !lang ? _generateBundlesFallback.bind(genericl10n_GenericL10n, this.getLanguage()) : _generateBundles.bind(genericl10n_GenericL10n, "en-us", this.getLanguage());
this._setL10n(new DOMLocalization([], generateBundles));
}
}
_GenericL10n = genericl10n_GenericL10n;
async function* _generateBundles(defaultLang, baseLang) {
const {
baseURL,
paths
} = await genericl10n_assertClassBrand(_GenericL10n, this, _getPaths).call(this);
const langs = [baseLang];
if (defaultLang !== baseLang) {
const shortLang = baseLang.split("-", 1)[0];
if (shortLang !== baseLang) {
langs.push(shortLang);
}
langs.push(defaultLang);
}
const bundles = langs.map(lang => [lang, genericl10n_assertClassBrand(_GenericL10n, this, _createBundle).call(this, lang, baseURL, paths)]);
for (const [lang, bundlePromise] of bundles) {
const bundle = await bundlePromise;
if (bundle) {
yield bundle;
} else if (lang === "en-us") {
yield genericl10n_assertClassBrand(_GenericL10n, this, _createBundleFallback).call(this, lang);
}
}
}
async function _createBundle(lang, baseURL, paths) {
const path = paths[lang];
if (!path) {
return null;
}
const url = new URL(path, baseURL);
const text = await fetchData(url, "text");
return createBundle(lang, text);
}
async function _getPaths() {
try {
const {
href
} = document.querySelector(`link[type="application/l10n"]`);
const paths = await fetchData(href, "json");
return {
baseURL: href.substring(0, href.lastIndexOf("/") + 1) || "./",
paths
};
} catch {}
return {
baseURL: "./",
paths: Object.create(null)
};
}
async function* _generateBundlesFallback(lang) {
yield genericl10n_assertClassBrand(_GenericL10n, this, _createBundleFallback).call(this, lang);
}
async function _createBundleFallback(lang) {
const text = "pdfjs-previous-button =\n .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n .title = Next Page\npdfjs-next-button-label = Next\npdfjs-page-input =\n .title = Page\npdfjs-of-pages = of { $pagesCount }\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n .title = Zoom\npdfjs-presentation-mode-button =\n .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n .title = Save\npdfjs-save-button-label = Save\npdfjs-download-button =\n .title = Download\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\npdfjs-tools-button =\n .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\npdfjs-document-properties-button =\n .title = Document Properties\u2026\npdfjs-document-properties-button-label = Document Properties\u2026\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\npdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes)\npdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\npdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\npdfjs-document-properties-page-size-dimension-string = { $width } \xD7 { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } \xD7 { $height } { $unit } ({ $name }, { $orientation })\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\npdfjs-print-progress-message = Preparing document for printing\u2026\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\npdfjs-toggle-sidebar-button =\n .title = Toggle Sidebar\npdfjs-toggle-sidebar-notification-button =\n .title = Toggle Sidebar (document contains outline/attachments/layers)\npdfjs-toggle-sidebar-button-label = Toggle Sidebar\npdfjs-document-outline-button =\n .title = Show Document Outline (double-click to expand/collapse all items)\npdfjs-document-outline-button-label = Document Outline\npdfjs-attachments-button =\n .title = Show Attachments\npdfjs-attachments-button-label = Attachments\npdfjs-layers-button =\n .title = Show Layers (double-click to reset all layers to the default state)\npdfjs-layers-button-label = Layers\npdfjs-thumbs-button =\n .title = Show Thumbnails\npdfjs-thumbs-button-label = Thumbnails\npdfjs-current-outline-item-button =\n .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\npdfjs-thumb-page-title =\n .title = Page { $page }\npdfjs-thumb-page-canvas =\n .aria-label = Thumbnail of Page { $page }\npdfjs-find-input =\n .title = Find\n .placeholder = Find in document\u2026\npdfjs-find-previous-button =\n .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-match-count =\n { $total ->\n [one] { $current } of { $total } match\n *[other] { $current } of { $total } matches\n }\npdfjs-find-match-count-limit =\n { $limit ->\n [one] More than { $limit } match\n *[other] More than { $limit } matches\n }\npdfjs-find-not-found = Phrase not found\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\npdfjs-page-scale-percent = { $scale }%\npdfjs-page-landmark =\n .aria-label = Page { $page }\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\npdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-text-annotation-type =\n .alt = [{ $type } Annotation]\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\npdfjs-editor-free-text-button =\n .title = Text\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n .title = Draw\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button1 =\n .title = Highlight\n .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\npdfjs-editor-signature-button =\n .title = Add signature\npdfjs-editor-signature-button-label = Add signature\npdfjs-editor-highlight-editor =\n .aria-label = Highlight editor\npdfjs-editor-ink-editor =\n .aria-label = Drawing editor\npdfjs-editor-signature-editor1 =\n .aria-description = Signature editor: { $description }\npdfjs-editor-stamp-editor =\n .aria-label = Image editor\npdfjs-editor-remove-ink-button =\n .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n .title = Remove text\npdfjs-editor-remove-stamp-button =\n .title = Remove image\npdfjs-editor-remove-highlight-button =\n .title = Remove highlight\npdfjs-editor-remove-signature-button =\n .title = Remove signature\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n .title = Change thickness when highlighting items other than text\npdfjs-editor-add-signature-container =\n .aria-label = Signature controls and saved signatures\npdfjs-editor-signature-add-signature-button =\n .title = Add new signature\npdfjs-editor-signature-add-signature-button-label = Add new signature\npdfjs-editor-add-saved-signature-button =\n .title = Saved signature: { $description }\npdfjs-free-text2 =\n .aria-label = Text Editor\n .default-content = Start typing\u2026\npdfjs-editor-alt-text-button =\n .aria-label = Alt text\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button =\n .aria-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can\u2019t see the image or when it doesn\u2019t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\npdfjs-editor-alt-text-textarea =\n .placeholder = For example, \u201CA young man sits down at a table to eat a meal\u201D\npdfjs-editor-resizer-top-left =\n .aria-label = Top left corner \u2014 resize\npdfjs-editor-resizer-top-middle =\n .aria-label = Top middle \u2014 resize\npdfjs-editor-resizer-top-right =\n .aria-label = Top right corner \u2014 resize\npdfjs-editor-resizer-middle-right =\n .aria-label = Middle right \u2014 resize\npdfjs-editor-resizer-bottom-right =\n .aria-label = Bottom right corner \u2014 resize\npdfjs-editor-resizer-bottom-middle =\n .aria-label = Bottom middle \u2014 resize\npdfjs-editor-resizer-bottom-left =\n .aria-label = Bottom left corner \u2014 resize\npdfjs-editor-resizer-middle-left =\n .aria-label = Middle left \u2014 resize\npdfjs-editor-highlight-colorpicker-label = Highlight color\npdfjs-editor-colorpicker-button =\n .title = Change color\npdfjs-editor-colorpicker-dropdown =\n .aria-label = Color choices\npdfjs-editor-colorpicker-yellow =\n .title = Yellow\npdfjs-editor-colorpicker-green =\n .title = Green\npdfjs-editor-colorpicker-blue =\n .title = Blue\npdfjs-editor-colorpicker-pink =\n .title = Pink\npdfjs-editor-colorpicker-red =\n .title = Red\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n .title = Show all\npdfjs-editor-new-alt-text-dialog-edit-label = Edit alt text (image description)\npdfjs-editor-new-alt-text-dialog-add-label = Add alt text (image description)\npdfjs-editor-new-alt-text-textarea =\n .placeholder = Write your description here\u2026\npdfjs-editor-new-alt-text-description = Short description for people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate.\npdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more\npdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically\npdfjs-editor-new-alt-text-not-now-button = Not now\npdfjs-editor-new-alt-text-error-title = Couldn\u2019t create alt text automatically\npdfjs-editor-new-alt-text-error-description = Please write your own alt text or try again later.\npdfjs-editor-new-alt-text-error-close-button = Close\npdfjs-editor-new-alt-text-ai-model-downloading-progress = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\n .aria-valuetext = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\npdfjs-editor-new-alt-text-added-button =\n .aria-label = Alt text added\npdfjs-editor-new-alt-text-added-button-label = Alt text added\npdfjs-editor-new-alt-text-missing-button =\n .aria-label = Missing alt text\npdfjs-editor-new-alt-text-missing-button-label = Missing alt text\npdfjs-editor-new-alt-text-to-review-button =\n .aria-label = Review alt text\npdfjs-editor-new-alt-text-to-review-button-label = Review alt text\npdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Created automatically: { $generatedAltText }\npdfjs-image-alt-text-settings-button =\n .title = Image alt text settings\npdfjs-image-alt-text-settings-button-label = Image alt text settings\npdfjs-editor-alt-text-settings-dialog-label = Image alt text settings\npdfjs-editor-alt-text-settings-automatic-title = Automatic alt text\npdfjs-editor-alt-text-settings-create-model-button-label = Create alt text automatically\npdfjs-editor-alt-text-settings-create-model-description = Suggests descriptions to help people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-alt-text-settings-download-model-label = Alt text AI model ({ $totalSize } MB)\npdfjs-editor-alt-text-settings-ai-model-description = Runs locally on your device so your data stays private. Required for automatic alt text.\npdfjs-editor-alt-text-settings-delete-model-button = Delete\npdfjs-editor-alt-text-settings-download-model-button = Download\npdfjs-editor-alt-text-settings-downloading-model-button = Downloading\u2026\npdfjs-editor-alt-text-settings-editor-title = Alt text editor\npdfjs-editor-alt-text-settings-show-dialog-button-label = Show alt text editor right away when adding an image\npdfjs-editor-alt-text-settings-show-dialog-description = Helps you make sure all your images have alt text.\npdfjs-editor-alt-text-settings-close-button = Close\npdfjs-editor-undo-bar-message-highlight = Highlight removed\npdfjs-editor-undo-bar-message-freetext = Text removed\npdfjs-editor-undo-bar-message-ink = Drawing removed\npdfjs-editor-undo-bar-message-stamp = Image removed\npdfjs-editor-undo-bar-message-signature = Signature removed\npdfjs-editor-undo-bar-message-multiple =\n { $count ->\n [one] { $count } annotation removed\n *[other] { $count } annotations removed\n }\npdfjs-editor-undo-bar-undo-button =\n .title = Undo\npdfjs-editor-undo-bar-undo-button-label = Undo\npdfjs-editor-undo-bar-close-button =\n .title = Close\npdfjs-editor-undo-bar-close-button-label = Close\npdfjs-editor-add-signature-dialog-label = This modal allows the user to create a signature to add to a PDF document. The user can edit the name (which also serves as the alt text), and optionally save the signature for repeated use.\npdfjs-editor-add-signature-dialog-title = Add a signature\npdfjs-editor-add-signature-type-button = Type\n .title = Type\npdfjs-editor-add-signature-draw-button = Draw\n .title = Draw\npdfjs-editor-add-signature-image-button = Image\n .title = Image\npdfjs-editor-add-signature-type-input =\n .aria-label = Type your signature\n .placeholder = Type your signature\npdfjs-editor-add-signature-draw-placeholder = Draw your signature\npdfjs-editor-add-signature-draw-thickness-range-label = Thickness\npdfjs-editor-add-signature-draw-thickness-range =\n .title = Drawing thickness: { $thickness }\npdfjs-editor-add-signature-image-placeholder = Drag a file here to upload\npdfjs-editor-add-signature-image-browse-link =\n { PLATFORM() ->\n [macos] Or choose image files\n *[other] Or browse image files\n }\npdfjs-editor-add-signature-description-label = Description (alt text)\npdfjs-editor-add-signature-description-input =\n .title = Description (alt text)\npdfjs-editor-add-signature-description-default-when-drawing = Signature\npdfjs-editor-add-signature-clear-button-label = Clear signature\npdfjs-editor-add-signature-clear-button =\n .title = Clear signature\npdfjs-editor-add-signature-save-checkbox = Save signature\npdfjs-editor-add-signature-save-warning-message = You\u2019ve reached the limit of 5 saved signatures. Remove one to save more.\npdfjs-editor-add-signature-image-upload-error-title = Couldn\u2019t upload image\npdfjs-editor-add-signature-image-upload-error-description = Check your network connection or try another image.\npdfjs-editor-add-signature-error-close-button = Close\npdfjs-editor-add-signature-cancel-button = Cancel\npdfjs-editor-add-signature-add-button = Add\npdfjs-editor-delete-signature-button1 =\n .title = Remove saved signature\npdfjs-editor-delete-signature-button-label1 = Remove saved signature\npdfjs-editor-add-signature-edit-button-label = Edit description\npdfjs-editor-edit-signature-dialog-title = Edit description\npdfjs-editor-edit-signature-update-button = Update";
return createBundle(lang, text);
}
;// ./web/generic_scripting.js
async function docProperties(pdfDocument) {
const url = "",
baseUrl = "";
const {
info,
metadata,
contentDispositionFilename,
contentLength
} = await pdfDocument.getMetadata();
return {
...info,
baseURL: baseUrl,
filesize: contentLength || (await pdfDocument.getDownloadInfo()).length,
filename: contentDispositionFilename || getPdfFilenameFromUrl(url),
metadata: metadata?.getRaw(),
authors: metadata?.get("dc:creator"),
numPages: pdfDocument.numPages,
URL: url
};
}
class GenericScripting {
constructor(sandboxBundleSrc) {
if (sandboxBundleSrc?.constructor?.name === "Function") {
sandboxBundleSrc = sandboxBundleSrc();
}
this._ready = new Promise((resolve, reject) => {
const sandbox = import(
/*webpackIgnore: true*/
/*@vite-ignore*/
sandboxBundleSrc);
sandbox.then(pdfjsSandbox => {
resolve(pdfjsSandbox.QuickJSSandbox());
}).catch(reject);
});
}
async createSandbox(data) {
const sandbox = await this._ready;
sandbox.create(data);
}
async dispatchEventInSandbox(event) {
const sandbox = await this._ready;
setTimeout(() => sandbox.dispatchEvent(event), 0);
}
async destroySandbox() {
const sandbox = await this._ready;
sandbox.nukeSandbox();
}
}
;// ./web/generic_signature_storage.js
function generic_signature_storage_classPrivateMethodInitSpec(e, a) { generic_signature_storage_checkPrivateRedeclaration(e, a), a.add(e); }
function generic_signature_storage_classPrivateFieldInitSpec(e, t, a) { generic_signature_storage_checkPrivateRedeclaration(e, t), t.set(e, a); }
function generic_signature_storage_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function generic_signature_storage_classPrivateFieldGet(s, a) { return s.get(generic_signature_storage_assertClassBrand(s, a)); }
function generic_signature_storage_classPrivateFieldSet(s, a, r) { return s.set(generic_signature_storage_assertClassBrand(s, a), r), r; }
function generic_signature_storage_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const KEY_STORAGE = "pdfjs.signature";
var generic_signature_storage_eventBus = /*#__PURE__*/new WeakMap();
var _signatures = /*#__PURE__*/new WeakMap();
var generic_signature_storage_signal = /*#__PURE__*/new WeakMap();
var _SignatureStorage_brand = /*#__PURE__*/new WeakSet();
class SignatureStorage {
constructor(eventBus, signal) {
generic_signature_storage_classPrivateMethodInitSpec(this, _SignatureStorage_brand);
generic_signature_storage_classPrivateFieldInitSpec(this, generic_signature_storage_eventBus, void 0);
generic_signature_storage_classPrivateFieldInitSpec(this, _signatures, null);
generic_signature_storage_classPrivateFieldInitSpec(this, generic_signature_storage_signal, null);
generic_signature_storage_classPrivateFieldSet(generic_signature_storage_eventBus, this, eventBus);
generic_signature_storage_classPrivateFieldSet(generic_signature_storage_signal, this, signal);
}
async getAll() {
if (generic_signature_storage_classPrivateFieldGet(generic_signature_storage_signal, this)) {
window.addEventListener("storage", _ref => {
let {
key
} = _ref;
if (key === KEY_STORAGE) {
generic_signature_storage_classPrivateFieldSet(_signatures, this, null);
generic_signature_storage_classPrivateFieldGet(generic_signature_storage_eventBus, this)?.dispatch("storedsignatureschanged", {
source: this
});
}
}, {
signal: generic_signature_storage_classPrivateFieldGet(generic_signature_storage_signal, this)
});
generic_signature_storage_classPrivateFieldSet(generic_signature_storage_signal, this, null);
}
if (!generic_signature_storage_classPrivateFieldGet(_signatures, this)) {
generic_signature_storage_classPrivateFieldSet(_signatures, this, new Map());
const data = localStorage.getItem(KEY_STORAGE);
if (data) {
for (const [key, value] of Object.entries(JSON.parse(data))) {
generic_signature_storage_classPrivateFieldGet(_signatures, this).set(key, value);
}
}
}
return generic_signature_storage_classPrivateFieldGet(_signatures, this);
}
async isFull() {
return (await this.size()) === 5;
}
async size() {
return (await this.getAll()).size;
}
async create(data) {
if (await this.isFull()) {
return null;
}
const uuid = getUuid();
generic_signature_storage_classPrivateFieldGet(_signatures, this).set(uuid, data);
generic_signature_storage_assertClassBrand(_SignatureStorage_brand, this, _save).call(this);
return uuid;
}
async delete(uuid) {
const signatures = await this.getAll();
if (!signatures.has(uuid)) {
return false;
}
signatures.delete(uuid);
generic_signature_storage_assertClassBrand(_SignatureStorage_brand, this, _save).call(this);
return true;
}
}
function _save() {
localStorage.setItem(KEY_STORAGE, JSON.stringify(Object.fromEntries(generic_signature_storage_classPrivateFieldGet(_signatures, this))));
}
;// ./web/genericcom.js
var _MLManager;
function initCom(app) {}
class Preferences extends BasePreferences {
async _writeToStorage(prefObj) {
try {
localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj));
} catch (safariSecurityException) {}
}
async _readFromStorage(prefObj) {
try {
return {
prefs: JSON.parse(localStorage.getItem("pdfjs.preferences"))
};
} catch (safariSecurityException) {
return {};
}
}
}
class ExternalServices extends BaseExternalServices {
async createL10n() {
return new genericl10n_GenericL10n(AppOptions.get("localeProperties")?.lang);
}
createScripting() {
return new GenericScripting(AppOptions.get("sandboxBundleSrc"));
}
createSignatureStorage(eventBus, signal) {
return new SignatureStorage(eventBus, signal);
}
}
class MLManager {
async isEnabledFor(_name) {
return false;
}
async deleteModel(_service) {
return null;
}
isReady(_name) {
return false;
}
guess(_data) {}
toggleService(_name, _enabled) {}
}
_MLManager = MLManager;
(() => {})();
;// ./web/new_alt_text_manager.js
function new_alt_text_manager_classPrivateMethodInitSpec(e, a) { new_alt_text_manager_checkPrivateRedeclaration(e, a), a.add(e); }
function new_alt_text_manager_classPrivateFieldInitSpec(e, t, a) { new_alt_text_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function new_alt_text_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function new_alt_text_manager_toSetter(t, e, n) { e || (e = []); var r = e.length++; return Object.defineProperty({}, "_", { set: function (o) { e[r] = o, t.apply(n, e); } }); }
function new_alt_text_manager_classPrivateFieldGet(s, a) { return s.get(new_alt_text_manager_assertClassBrand(s, a)); }
function new_alt_text_manager_classPrivateFieldSet(s, a, r) { return s.set(new_alt_text_manager_assertClassBrand(s, a), r), r; }
function new_alt_text_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _boundCancel = /*#__PURE__*/new WeakMap();
var _createAutomaticallyButton = /*#__PURE__*/new WeakMap();
var _currentEditor = /*#__PURE__*/new WeakMap();
var _cancelButton = /*#__PURE__*/new WeakMap();
var _descriptionContainer = /*#__PURE__*/new WeakMap();
var _dialog = /*#__PURE__*/new WeakMap();
var _disclaimer = /*#__PURE__*/new WeakMap();
var _downloadModel = /*#__PURE__*/new WeakMap();
var _downloadModelDescription = /*#__PURE__*/new WeakMap();
var new_alt_text_manager_eventBus = /*#__PURE__*/new WeakMap();
var _firstTime = /*#__PURE__*/new WeakMap();
var _guessedAltText = /*#__PURE__*/new WeakMap();
var _hasAI = /*#__PURE__*/new WeakMap();
var new_alt_text_manager_isEditing = /*#__PURE__*/new WeakMap();
var _imagePreview = /*#__PURE__*/new WeakMap();
var _imageData = /*#__PURE__*/new WeakMap();
var _isAILoading = /*#__PURE__*/new WeakMap();
var _wasAILoading = /*#__PURE__*/new WeakMap();
var _learnMore = /*#__PURE__*/new WeakMap();
var _notNowButton = /*#__PURE__*/new WeakMap();
var _overlayManager = /*#__PURE__*/new WeakMap();
var _textarea = /*#__PURE__*/new WeakMap();
var _title = /*#__PURE__*/new WeakMap();
var new_alt_text_manager_uiManager = /*#__PURE__*/new WeakMap();
var _previousAltText = /*#__PURE__*/new WeakMap();
var _NewAltTextManager_brand = /*#__PURE__*/new WeakSet();
class NewAltTextManager {
constructor(_ref, overlayManager, eventBus) {
let {
descriptionContainer,
dialog,
imagePreview,
cancelButton,
disclaimer,
notNowButton,
saveButton,
textarea,
learnMore,
errorCloseButton,
createAutomaticallyButton,
downloadModel,
downloadModelDescription,
title
} = _ref;
new_alt_text_manager_classPrivateMethodInitSpec(this, _NewAltTextManager_brand);
new_alt_text_manager_classPrivateFieldInitSpec(this, _boundCancel, new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _cancel).bind(this));
new_alt_text_manager_classPrivateFieldInitSpec(this, _createAutomaticallyButton, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _currentEditor, null);
new_alt_text_manager_classPrivateFieldInitSpec(this, _cancelButton, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _descriptionContainer, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _dialog, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _disclaimer, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _downloadModel, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _downloadModelDescription, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, new_alt_text_manager_eventBus, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _firstTime, false);
new_alt_text_manager_classPrivateFieldInitSpec(this, _guessedAltText, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _hasAI, null);
new_alt_text_manager_classPrivateFieldInitSpec(this, new_alt_text_manager_isEditing, null);
new_alt_text_manager_classPrivateFieldInitSpec(this, _imagePreview, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _imageData, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _isAILoading, false);
new_alt_text_manager_classPrivateFieldInitSpec(this, _wasAILoading, false);
new_alt_text_manager_classPrivateFieldInitSpec(this, _learnMore, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _notNowButton, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _overlayManager, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _textarea, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _title, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, new_alt_text_manager_uiManager, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _previousAltText, null);
new_alt_text_manager_classPrivateFieldSet(_cancelButton, this, cancelButton);
new_alt_text_manager_classPrivateFieldSet(_createAutomaticallyButton, this, createAutomaticallyButton);
new_alt_text_manager_classPrivateFieldSet(_descriptionContainer, this, descriptionContainer);
new_alt_text_manager_classPrivateFieldSet(_dialog, this, dialog);
new_alt_text_manager_classPrivateFieldSet(_disclaimer, this, disclaimer);
new_alt_text_manager_classPrivateFieldSet(_notNowButton, this, notNowButton);
new_alt_text_manager_classPrivateFieldSet(_imagePreview, this, imagePreview);
new_alt_text_manager_classPrivateFieldSet(_textarea, this, textarea);
new_alt_text_manager_classPrivateFieldSet(_learnMore, this, learnMore);
new_alt_text_manager_classPrivateFieldSet(_title, this, title);
new_alt_text_manager_classPrivateFieldSet(_downloadModel, this, downloadModel);
new_alt_text_manager_classPrivateFieldSet(_downloadModelDescription, this, downloadModelDescription);
new_alt_text_manager_classPrivateFieldSet(_overlayManager, this, overlayManager);
new_alt_text_manager_classPrivateFieldSet(new_alt_text_manager_eventBus, this, eventBus);
dialog.addEventListener("close", new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _close).bind(this));
dialog.addEventListener("contextmenu", event => {
if (event.target !== new_alt_text_manager_classPrivateFieldGet(_textarea, this)) {
event.preventDefault();
}
});
cancelButton.addEventListener("click", new_alt_text_manager_classPrivateFieldGet(_boundCancel, this));
notNowButton.addEventListener("click", new_alt_text_manager_classPrivateFieldGet(_boundCancel, this));
saveButton.addEventListener("click", new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, new_alt_text_manager_save).bind(this));
errorCloseButton.addEventListener("click", () => {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleError).call(this, false);
});
createAutomaticallyButton.addEventListener("click", async () => {
const checked = createAutomaticallyButton.getAttribute("aria-pressed") !== "true";
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.ai_generation_check",
data: {
status: checked
}
});
if (new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)) {
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this).setPreference("enableGuessAltText", checked);
await new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this).mlManager.toggleService("altText", checked);
}
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleGuessAltText).call(this, checked, false);
});
textarea.addEventListener("focus", () => {
new_alt_text_manager_classPrivateFieldSet(_wasAILoading, this, new_alt_text_manager_classPrivateFieldGet(_isAILoading, this));
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleLoading).call(this, false);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
});
textarea.addEventListener("blur", () => {
if (!textarea.value) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleLoading).call(this, new_alt_text_manager_classPrivateFieldGet(_wasAILoading, this));
}
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
});
textarea.addEventListener("input", () => {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
});
eventBus._on("enableguessalttext", _ref2 => {
let {
value
} = _ref2;
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleGuessAltText).call(this, value, false);
});
new_alt_text_manager_classPrivateFieldGet(_overlayManager, this).register(dialog);
new_alt_text_manager_classPrivateFieldGet(_learnMore, this).addEventListener("click", () => {
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.info",
data: {
topic: "alt_text"
}
});
});
}
async editAltText(uiManager, editor, firstTime) {
if (new_alt_text_manager_classPrivateFieldGet(_currentEditor, this) || !editor) {
return;
}
if (firstTime && editor.hasAltTextData()) {
editor.altTextFinish();
return;
}
new_alt_text_manager_classPrivateFieldSet(_firstTime, this, firstTime);
let {
mlManager
} = uiManager;
let hasAI = !!mlManager;
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
if (mlManager && !mlManager.isReady("altText")) {
hasAI = false;
if (mlManager.hasProgress) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _setProgress).call(this);
} else {
mlManager = null;
}
} else {
new_alt_text_manager_classPrivateFieldGet(_downloadModel, this).classList.toggle("hidden", true);
}
const isAltTextEnabledPromise = mlManager?.isEnabledFor("altText");
new_alt_text_manager_classPrivateFieldSet(_currentEditor, this, editor);
new_alt_text_manager_classPrivateFieldSet(new_alt_text_manager_uiManager, this, uiManager);
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this).removeEditListeners();
({
altText: new_alt_text_manager_toSetter(new_alt_text_manager_classPrivateFieldSet, [_previousAltText, this])._
} = editor.altTextData);
new_alt_text_manager_classPrivateFieldGet(_textarea, this).value = new_alt_text_manager_classPrivateFieldGet(_previousAltText, this) ?? "";
const AI_MAX_IMAGE_DIMENSION = 224;
const MAX_PREVIEW_DIMENSION = 180;
let canvas, width, height;
if (mlManager) {
({
canvas,
width,
height,
imageData: new_alt_text_manager_toSetter(new_alt_text_manager_classPrivateFieldSet, [_imageData, this])._
} = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, true));
if (hasAI) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleGuessAltText).call(this, await isAltTextEnabledPromise, true);
}
} else {
({
canvas,
width,
height
} = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, false));
}
canvas.setAttribute("role", "presentation");
const {
style
} = canvas;
style.width = `${width}px`;
style.height = `${height}px`;
new_alt_text_manager_classPrivateFieldGet(_imagePreview, this).append(canvas);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleNotNow).call(this);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleAI).call(this, hasAI);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleError).call(this, false);
try {
await new_alt_text_manager_classPrivateFieldGet(_overlayManager, this).open(new_alt_text_manager_classPrivateFieldGet(_dialog, this));
} catch (ex) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _close).call(this);
throw ex;
}
}
destroy() {
new_alt_text_manager_classPrivateFieldSet(new_alt_text_manager_uiManager, this, null);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _finish).call(this);
}
}
function _toggleLoading(value) {
if (!new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this) || new_alt_text_manager_classPrivateFieldGet(_isAILoading, this) === value) {
return;
}
new_alt_text_manager_classPrivateFieldSet(_isAILoading, this, value);
new_alt_text_manager_classPrivateFieldGet(_descriptionContainer, this).classList.toggle("loading", value);
}
function _toggleError(value) {
if (!new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)) {
return;
}
new_alt_text_manager_classPrivateFieldGet(_dialog, this).classList.toggle("error", value);
}
async function _toggleGuessAltText(value) {
let isInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)) {
return;
}
new_alt_text_manager_classPrivateFieldGet(_dialog, this).classList.toggle("aiDisabled", !value);
new_alt_text_manager_classPrivateFieldGet(_createAutomaticallyButton, this).setAttribute("aria-pressed", value);
if (value) {
const {
altTextLearnMoreUrl
} = new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this).mlManager;
if (altTextLearnMoreUrl) {
new_alt_text_manager_classPrivateFieldGet(_learnMore, this).href = altTextLearnMoreUrl;
}
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _mlGuessAltText).call(this, isInitial);
} else {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleLoading).call(this, false);
new_alt_text_manager_classPrivateFieldSet(_isAILoading, this, false);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
}
}
function _toggleNotNow() {
new_alt_text_manager_classPrivateFieldGet(_notNowButton, this).classList.toggle("hidden", !new_alt_text_manager_classPrivateFieldGet(_firstTime, this));
new_alt_text_manager_classPrivateFieldGet(_cancelButton, this).classList.toggle("hidden", new_alt_text_manager_classPrivateFieldGet(_firstTime, this));
}
function _toggleAI(value) {
if (!new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this) || new_alt_text_manager_classPrivateFieldGet(_hasAI, this) === value) {
return;
}
new_alt_text_manager_classPrivateFieldSet(_hasAI, this, value);
new_alt_text_manager_classPrivateFieldGet(_dialog, this).classList.toggle("noAi", !value);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
}
function _toggleTitleAndDisclaimer() {
const visible = new_alt_text_manager_classPrivateFieldGet(_isAILoading, this) || new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this) && new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this) === new_alt_text_manager_classPrivateFieldGet(_textarea, this).value;
new_alt_text_manager_classPrivateFieldGet(_disclaimer, this).hidden = !visible;
const isEditing = new_alt_text_manager_classPrivateFieldGet(_isAILoading, this) || !!new_alt_text_manager_classPrivateFieldGet(_textarea, this).value;
if (new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_isEditing, this) === isEditing) {
return;
}
new_alt_text_manager_classPrivateFieldSet(new_alt_text_manager_isEditing, this, isEditing);
new_alt_text_manager_classPrivateFieldGet(_title, this).setAttribute("data-l10n-id", isEditing ? "pdfjs-editor-new-alt-text-dialog-edit-label" : "pdfjs-editor-new-alt-text-dialog-add-label");
}
async function _mlGuessAltText(isInitial) {
if (new_alt_text_manager_classPrivateFieldGet(_isAILoading, this)) {
return;
}
if (new_alt_text_manager_classPrivateFieldGet(_textarea, this).value) {
return;
}
if (isInitial && new_alt_text_manager_classPrivateFieldGet(_previousAltText, this) !== null) {
return;
}
new_alt_text_manager_classPrivateFieldSet(_guessedAltText, this, new_alt_text_manager_classPrivateFieldGet(_currentEditor, this).guessedAltText);
if (new_alt_text_manager_classPrivateFieldGet(_previousAltText, this) === null && new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this)) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _addAltText).call(this, new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this));
return;
}
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleLoading).call(this, true);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
let hasError = false;
try {
const altText = await new_alt_text_manager_classPrivateFieldGet(_currentEditor, this).mlGuessAltText(new_alt_text_manager_classPrivateFieldGet(_imageData, this), false);
if (altText) {
new_alt_text_manager_classPrivateFieldSet(_guessedAltText, this, altText);
new_alt_text_manager_classPrivateFieldSet(_wasAILoading, this, new_alt_text_manager_classPrivateFieldGet(_isAILoading, this));
if (new_alt_text_manager_classPrivateFieldGet(_isAILoading, this)) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _addAltText).call(this, altText);
}
}
} catch (e) {
console.error(e);
hasError = true;
}
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleLoading).call(this, false);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
if (hasError && new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)) {
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleError).call(this, true);
}
}
function _addAltText(altText) {
if (!new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this) || new_alt_text_manager_classPrivateFieldGet(_textarea, this).value) {
return;
}
new_alt_text_manager_classPrivateFieldGet(_textarea, this).value = altText;
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleTitleAndDisclaimer).call(this);
}
function _setProgress() {
new_alt_text_manager_classPrivateFieldGet(_downloadModel, this).classList.toggle("hidden", false);
const callback = async _ref6 => {
let {
detail: {
finished,
total,
totalLoaded
}
} = _ref6;
const ONE_MEGA_BYTES = 1e6;
totalLoaded = Math.min(0.99 * total, totalLoaded);
const totalSize = new_alt_text_manager_classPrivateFieldGet(_downloadModelDescription, this).ariaValueMax = Math.round(total / ONE_MEGA_BYTES);
const downloadedSize = new_alt_text_manager_classPrivateFieldGet(_downloadModelDescription, this).ariaValueNow = Math.round(totalLoaded / ONE_MEGA_BYTES);
new_alt_text_manager_classPrivateFieldGet(_downloadModelDescription, this).setAttribute("data-l10n-args", JSON.stringify({
totalSize,
downloadedSize
}));
if (!finished) {
return;
}
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_eventBus, this)._off("loadaiengineprogress", callback);
new_alt_text_manager_classPrivateFieldGet(_downloadModel, this).classList.toggle("hidden", true);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleAI).call(this, true);
if (!new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)) {
return;
}
const {
mlManager
} = new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this);
mlManager.toggleService("altText", true);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleGuessAltText).call(this, await mlManager.isEnabledFor("altText"), true);
};
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_eventBus, this)._on("loadaiengineprogress", callback);
}
function _cancel() {
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this).altTextData = {
cancel: true
};
const altText = new_alt_text_manager_classPrivateFieldGet(_textarea, this).value.trim();
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.dismiss",
data: {
alt_text_type: altText ? "present" : "empty",
flow: new_alt_text_manager_classPrivateFieldGet(_firstTime, this) ? "image_add" : "alt_text_edit"
}
});
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.image_added",
data: {
alt_text_modal: true,
alt_text_type: "skipped"
}
});
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _finish).call(this);
}
function _finish() {
new_alt_text_manager_classPrivateFieldGet(_overlayManager, this).closeIfActive(new_alt_text_manager_classPrivateFieldGet(_dialog, this));
}
function _close() {
const canvas = new_alt_text_manager_classPrivateFieldGet(_imagePreview, this).firstChild;
canvas.remove();
canvas.width = canvas.height = 0;
new_alt_text_manager_classPrivateFieldSet(_imageData, this, null);
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _toggleLoading).call(this, false);
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)?.addEditListeners();
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this).altTextFinish();
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_uiManager, this)?.setSelected(new_alt_text_manager_classPrivateFieldGet(_currentEditor, this));
new_alt_text_manager_classPrivateFieldSet(_currentEditor, this, null);
new_alt_text_manager_classPrivateFieldSet(new_alt_text_manager_uiManager, this, null);
}
function _extractWords(text) {
return new Set(text.toLowerCase().split(/[^\p{L}\p{N}]+/gu).filter(x => !!x));
}
function new_alt_text_manager_save() {
const altText = new_alt_text_manager_classPrivateFieldGet(_textarea, this).value.trim();
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this).altTextData = {
altText,
decorative: false
};
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this).altTextData.guessedAltText = new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this);
if (new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this) && new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this) !== altText) {
const guessedWords = new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _extractWords).call(this, new_alt_text_manager_classPrivateFieldGet(_guessedAltText, this));
const words = new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _extractWords).call(this, altText);
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.user_edit",
data: {
total_words: guessedWords.size,
words_removed: guessedWords.difference(words).size,
words_added: words.difference(guessedWords).size
}
});
}
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.image_added",
data: {
alt_text_modal: true,
alt_text_type: altText ? "present" : "empty"
}
});
new_alt_text_manager_classPrivateFieldGet(_currentEditor, this)._reportTelemetry({
action: "pdfjs.image.alt_text.save",
data: {
alt_text_type: altText ? "present" : "empty",
flow: new_alt_text_manager_classPrivateFieldGet(_firstTime, this) ? "image_add" : "alt_text_edit"
}
});
new_alt_text_manager_assertClassBrand(_NewAltTextManager_brand, this, _finish).call(this);
}
var _aiModelSettings = /*#__PURE__*/new WeakMap();
var _createModelButton = /*#__PURE__*/new WeakMap();
var _downloadModelButton = /*#__PURE__*/new WeakMap();
var _dialog2 = /*#__PURE__*/new WeakMap();
var _eventBus2 = /*#__PURE__*/new WeakMap();
var new_alt_text_manager_mlManager = /*#__PURE__*/new WeakMap();
var _overlayManager2 = /*#__PURE__*/new WeakMap();
var _showAltTextDialogButton = /*#__PURE__*/new WeakMap();
var _ImageAltTextSettings_brand = /*#__PURE__*/new WeakSet();
class ImageAltTextSettings {
constructor(_ref3, overlayManager, eventBus, mlManager) {
let {
dialog,
createModelButton,
aiModelSettings,
learnMore,
closeButton,
deleteModelButton,
downloadModelButton,
showAltTextDialogButton
} = _ref3;
new_alt_text_manager_classPrivateMethodInitSpec(this, _ImageAltTextSettings_brand);
new_alt_text_manager_classPrivateFieldInitSpec(this, _aiModelSettings, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _createModelButton, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _downloadModelButton, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _dialog2, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _eventBus2, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, new_alt_text_manager_mlManager, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _overlayManager2, void 0);
new_alt_text_manager_classPrivateFieldInitSpec(this, _showAltTextDialogButton, void 0);
new_alt_text_manager_classPrivateFieldSet(_dialog2, this, dialog);
new_alt_text_manager_classPrivateFieldSet(_aiModelSettings, this, aiModelSettings);
new_alt_text_manager_classPrivateFieldSet(_createModelButton, this, createModelButton);
new_alt_text_manager_classPrivateFieldSet(_downloadModelButton, this, downloadModelButton);
new_alt_text_manager_classPrivateFieldSet(_showAltTextDialogButton, this, showAltTextDialogButton);
new_alt_text_manager_classPrivateFieldSet(_overlayManager2, this, overlayManager);
new_alt_text_manager_classPrivateFieldSet(_eventBus2, this, eventBus);
new_alt_text_manager_classPrivateFieldSet(new_alt_text_manager_mlManager, this, mlManager);
const {
altTextLearnMoreUrl
} = mlManager;
if (altTextLearnMoreUrl) {
learnMore.href = altTextLearnMoreUrl;
}
dialog.addEventListener("contextmenu", noContextMenu);
createModelButton.addEventListener("click", async e => {
const checked = new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _togglePref).call(this, "enableGuessAltText", e);
await mlManager.toggleService("altText", checked);
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _reportTelemetry).call(this, {
type: "stamp",
action: "pdfjs.image.alt_text.settings_ai_generation_check",
data: {
status: checked
}
});
});
showAltTextDialogButton.addEventListener("click", e => {
const checked = new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _togglePref).call(this, "enableNewAltTextWhenAddingImage", e);
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _reportTelemetry).call(this, {
type: "stamp",
action: "pdfjs.image.alt_text.settings_edit_alt_text_check",
data: {
status: checked
}
});
});
deleteModelButton.addEventListener("click", new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _delete).bind(this, true));
downloadModelButton.addEventListener("click", new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, new_alt_text_manager_download).bind(this, true));
closeButton.addEventListener("click", new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _finish2).bind(this));
learnMore.addEventListener("click", () => {
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _reportTelemetry).call(this, {
type: "stamp",
action: "pdfjs.image.alt_text.info",
data: {
topic: "ai_generation"
}
});
});
eventBus._on("enablealttextmodeldownload", _ref4 => {
let {
value
} = _ref4;
if (value) {
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, new_alt_text_manager_download).call(this, false);
} else {
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _delete).call(this, false);
}
});
new_alt_text_manager_classPrivateFieldGet(_overlayManager2, this).register(dialog);
}
async open(_ref5) {
let {
enableGuessAltText,
enableNewAltTextWhenAddingImage
} = _ref5;
const {
enableAltTextModelDownload
} = new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_mlManager, this);
new_alt_text_manager_classPrivateFieldGet(_createModelButton, this).disabled = !enableAltTextModelDownload;
new_alt_text_manager_classPrivateFieldGet(_createModelButton, this).setAttribute("aria-pressed", enableAltTextModelDownload && enableGuessAltText);
new_alt_text_manager_classPrivateFieldGet(_showAltTextDialogButton, this).setAttribute("aria-pressed", enableNewAltTextWhenAddingImage);
new_alt_text_manager_classPrivateFieldGet(_aiModelSettings, this).classList.toggle("download", !enableAltTextModelDownload);
await new_alt_text_manager_classPrivateFieldGet(_overlayManager2, this).open(new_alt_text_manager_classPrivateFieldGet(_dialog2, this));
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _reportTelemetry).call(this, {
type: "stamp",
action: "pdfjs.image.alt_text.settings_displayed"
});
}
}
function _reportTelemetry(data) {
new_alt_text_manager_classPrivateFieldGet(_eventBus2, this).dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data
}
});
}
async function new_alt_text_manager_download() {
let isFromUI = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (isFromUI) {
new_alt_text_manager_classPrivateFieldGet(_downloadModelButton, this).disabled = true;
const span = new_alt_text_manager_classPrivateFieldGet(_downloadModelButton, this).firstChild;
span.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-settings-downloading-model-button");
await new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_mlManager, this).downloadModel("altText");
span.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-settings-download-model-button");
new_alt_text_manager_classPrivateFieldGet(_createModelButton, this).disabled = false;
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _setPref).call(this, "enableGuessAltText", true);
new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_mlManager, this).toggleService("altText", true);
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _setPref).call(this, "enableAltTextModelDownload", true);
new_alt_text_manager_classPrivateFieldGet(_downloadModelButton, this).disabled = false;
}
new_alt_text_manager_classPrivateFieldGet(_aiModelSettings, this).classList.toggle("download", false);
new_alt_text_manager_classPrivateFieldGet(_createModelButton, this).setAttribute("aria-pressed", true);
}
async function _delete() {
let isFromUI = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (isFromUI) {
await new_alt_text_manager_classPrivateFieldGet(new_alt_text_manager_mlManager, this).deleteModel("altText");
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _setPref).call(this, "enableGuessAltText", false);
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _setPref).call(this, "enableAltTextModelDownload", false);
}
new_alt_text_manager_classPrivateFieldGet(_aiModelSettings, this).classList.toggle("download", true);
new_alt_text_manager_classPrivateFieldGet(_createModelButton, this).disabled = true;
new_alt_text_manager_classPrivateFieldGet(_createModelButton, this).setAttribute("aria-pressed", false);
}
function _togglePref(name, _ref7) {
let {
target
} = _ref7;
const checked = target.getAttribute("aria-pressed") !== "true";
new_alt_text_manager_assertClassBrand(_ImageAltTextSettings_brand, this, _setPref).call(this, name, checked);
target.setAttribute("aria-pressed", checked);
return checked;
}
function _setPref(name, value) {
new_alt_text_manager_classPrivateFieldGet(_eventBus2, this).dispatch("setpreference", {
source: this,
name,
value
});
}
function _finish2() {
new_alt_text_manager_classPrivateFieldGet(_overlayManager2, this).closeIfActive(new_alt_text_manager_classPrivateFieldGet(_dialog2, this));
}
;// ./web/alt_text_manager.js
function alt_text_manager_classPrivateMethodInitSpec(e, a) { alt_text_manager_checkPrivateRedeclaration(e, a), a.add(e); }
function alt_text_manager_classPrivateFieldInitSpec(e, t, a) { alt_text_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function alt_text_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function alt_text_manager_classPrivateFieldGet(s, a) { return s.get(alt_text_manager_assertClassBrand(s, a)); }
function alt_text_manager_classPrivateFieldSet(s, a, r) { return s.set(alt_text_manager_assertClassBrand(s, a), r), r; }
function alt_text_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var alt_text_manager_clickAC = /*#__PURE__*/new WeakMap();
var alt_text_manager_currentEditor = /*#__PURE__*/new WeakMap();
var alt_text_manager_cancelButton = /*#__PURE__*/new WeakMap();
var alt_text_manager_dialog = /*#__PURE__*/new WeakMap();
var alt_text_manager_eventBus = /*#__PURE__*/new WeakMap();
var _hasUsedPointer = /*#__PURE__*/new WeakMap();
var _optionDescription = /*#__PURE__*/new WeakMap();
var _optionDecorative = /*#__PURE__*/new WeakMap();
var alt_text_manager_overlayManager = /*#__PURE__*/new WeakMap();
var _saveButton = /*#__PURE__*/new WeakMap();
var alt_text_manager_textarea = /*#__PURE__*/new WeakMap();
var alt_text_manager_uiManager = /*#__PURE__*/new WeakMap();
var alt_text_manager_previousAltText = /*#__PURE__*/new WeakMap();
var _resizeAC = /*#__PURE__*/new WeakMap();
var _svgElement = /*#__PURE__*/new WeakMap();
var _rectElement = /*#__PURE__*/new WeakMap();
var alt_text_manager_container = /*#__PURE__*/new WeakMap();
var _telemetryData = /*#__PURE__*/new WeakMap();
var _AltTextManager_brand = /*#__PURE__*/new WeakSet();
class AltTextManager {
constructor(_ref, container, overlayManager, eventBus) {
let {
dialog: _dialog2,
optionDescription,
optionDecorative,
textarea,
cancelButton,
saveButton
} = _ref;
alt_text_manager_classPrivateMethodInitSpec(this, _AltTextManager_brand);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_clickAC, null);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_currentEditor, null);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_cancelButton, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_dialog, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_eventBus, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, _hasUsedPointer, false);
alt_text_manager_classPrivateFieldInitSpec(this, _optionDescription, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, _optionDecorative, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_overlayManager, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, _saveButton, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_textarea, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_uiManager, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_previousAltText, null);
alt_text_manager_classPrivateFieldInitSpec(this, _resizeAC, null);
alt_text_manager_classPrivateFieldInitSpec(this, _svgElement, null);
alt_text_manager_classPrivateFieldInitSpec(this, _rectElement, null);
alt_text_manager_classPrivateFieldInitSpec(this, alt_text_manager_container, void 0);
alt_text_manager_classPrivateFieldInitSpec(this, _telemetryData, null);
alt_text_manager_classPrivateFieldSet(alt_text_manager_dialog, this, _dialog2);
alt_text_manager_classPrivateFieldSet(_optionDescription, this, optionDescription);
alt_text_manager_classPrivateFieldSet(_optionDecorative, this, optionDecorative);
alt_text_manager_classPrivateFieldSet(alt_text_manager_textarea, this, textarea);
alt_text_manager_classPrivateFieldSet(alt_text_manager_cancelButton, this, cancelButton);
alt_text_manager_classPrivateFieldSet(_saveButton, this, saveButton);
alt_text_manager_classPrivateFieldSet(alt_text_manager_overlayManager, this, overlayManager);
alt_text_manager_classPrivateFieldSet(alt_text_manager_eventBus, this, eventBus);
alt_text_manager_classPrivateFieldSet(alt_text_manager_container, this, container);
const onUpdateUIState = alt_text_manager_assertClassBrand(_AltTextManager_brand, this, _updateUIState).bind(this);
_dialog2.addEventListener("close", alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_close).bind(this));
_dialog2.addEventListener("contextmenu", event => {
if (event.target !== alt_text_manager_classPrivateFieldGet(alt_text_manager_textarea, this)) {
event.preventDefault();
}
});
cancelButton.addEventListener("click", alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_finish).bind(this));
saveButton.addEventListener("click", alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_save).bind(this));
optionDescription.addEventListener("change", onUpdateUIState);
optionDecorative.addEventListener("change", onUpdateUIState);
alt_text_manager_classPrivateFieldGet(alt_text_manager_overlayManager, this).register(_dialog2);
}
async editAltText(uiManager, editor) {
if (alt_text_manager_classPrivateFieldGet(alt_text_manager_currentEditor, this) || !editor) {
return;
}
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, _createSVGElement).call(this);
alt_text_manager_classPrivateFieldSet(_hasUsedPointer, this, false);
alt_text_manager_classPrivateFieldSet(alt_text_manager_clickAC, this, new AbortController());
const clickOpts = {
signal: alt_text_manager_classPrivateFieldGet(alt_text_manager_clickAC, this).signal
},
onClick = alt_text_manager_assertClassBrand(_AltTextManager_brand, this, _onClick).bind(this);
for (const element of [alt_text_manager_classPrivateFieldGet(_optionDescription, this), alt_text_manager_classPrivateFieldGet(_optionDecorative, this), alt_text_manager_classPrivateFieldGet(alt_text_manager_textarea, this), alt_text_manager_classPrivateFieldGet(_saveButton, this), alt_text_manager_classPrivateFieldGet(alt_text_manager_cancelButton, this)]) {
element.addEventListener("click", onClick, clickOpts);
}
const {
altText,
decorative
} = editor.altTextData;
if (decorative === true) {
alt_text_manager_classPrivateFieldGet(_optionDecorative, this).checked = true;
alt_text_manager_classPrivateFieldGet(_optionDescription, this).checked = false;
} else {
alt_text_manager_classPrivateFieldGet(_optionDecorative, this).checked = false;
alt_text_manager_classPrivateFieldGet(_optionDescription, this).checked = true;
}
alt_text_manager_classPrivateFieldSet(alt_text_manager_previousAltText, this, alt_text_manager_classPrivateFieldGet(alt_text_manager_textarea, this).value = altText?.trim() || "");
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, _updateUIState).call(this);
alt_text_manager_classPrivateFieldSet(alt_text_manager_currentEditor, this, editor);
alt_text_manager_classPrivateFieldSet(alt_text_manager_uiManager, this, uiManager);
alt_text_manager_classPrivateFieldGet(alt_text_manager_uiManager, this).removeEditListeners();
alt_text_manager_classPrivateFieldSet(_resizeAC, this, new AbortController());
alt_text_manager_classPrivateFieldGet(alt_text_manager_eventBus, this)._on("resize", alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_setPosition).bind(this), {
signal: alt_text_manager_classPrivateFieldGet(_resizeAC, this).signal
});
try {
await alt_text_manager_classPrivateFieldGet(alt_text_manager_overlayManager, this).open(alt_text_manager_classPrivateFieldGet(alt_text_manager_dialog, this));
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_setPosition).call(this);
} catch (ex) {
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_close).call(this);
throw ex;
}
}
destroy() {
alt_text_manager_classPrivateFieldSet(alt_text_manager_uiManager, this, null);
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_finish).call(this);
alt_text_manager_classPrivateFieldGet(_svgElement, this)?.remove();
alt_text_manager_classPrivateFieldSet(_svgElement, this, alt_text_manager_classPrivateFieldSet(_rectElement, this, null));
}
}
function _createSVGElement() {
if (alt_text_manager_classPrivateFieldGet(_svgElement, this)) {
return;
}
const svgFactory = new DOMSVGFactory();
const svg = alt_text_manager_classPrivateFieldSet(_svgElement, this, svgFactory.createElement("svg"));
svg.setAttribute("width", "0");
svg.setAttribute("height", "0");
const defs = svgFactory.createElement("defs");
svg.append(defs);
const mask = svgFactory.createElement("mask");
defs.append(mask);
mask.setAttribute("id", "alttext-manager-mask");
mask.setAttribute("maskContentUnits", "objectBoundingBox");
let rect = svgFactory.createElement("rect");
mask.append(rect);
rect.setAttribute("fill", "white");
rect.setAttribute("width", "1");
rect.setAttribute("height", "1");
rect.setAttribute("x", "0");
rect.setAttribute("y", "0");
rect = alt_text_manager_classPrivateFieldSet(_rectElement, this, svgFactory.createElement("rect"));
mask.append(rect);
rect.setAttribute("fill", "black");
alt_text_manager_classPrivateFieldGet(alt_text_manager_dialog, this).append(svg);
}
function alt_text_manager_setPosition() {
if (!alt_text_manager_classPrivateFieldGet(alt_text_manager_currentEditor, this)) {
return;
}
const dialog = alt_text_manager_classPrivateFieldGet(alt_text_manager_dialog, this);
const {
style
} = dialog;
const {
x: containerX,
y: containerY,
width: containerW,
height: containerH
} = alt_text_manager_classPrivateFieldGet(alt_text_manager_container, this).getBoundingClientRect();
const {
innerWidth: windowW,
innerHeight: windowH
} = window;
const {
width: dialogW,
height: dialogH
} = dialog.getBoundingClientRect();
const {
x,
y,
width,
height
} = alt_text_manager_classPrivateFieldGet(alt_text_manager_currentEditor, this).getClientDimensions();
const MARGIN = 10;
const isLTR = alt_text_manager_classPrivateFieldGet(alt_text_manager_uiManager, this).direction === "ltr";
const xs = Math.max(x, containerX);
const xe = Math.min(x + width, containerX + containerW);
const ys = Math.max(y, containerY);
const ye = Math.min(y + height, containerY + containerH);
alt_text_manager_classPrivateFieldGet(_rectElement, this).setAttribute("width", `${(xe - xs) / windowW}`);
alt_text_manager_classPrivateFieldGet(_rectElement, this).setAttribute("height", `${(ye - ys) / windowH}`);
alt_text_manager_classPrivateFieldGet(_rectElement, this).setAttribute("x", `${xs / windowW}`);
alt_text_manager_classPrivateFieldGet(_rectElement, this).setAttribute("y", `${ys / windowH}`);
let left = null;
let top = Math.max(y, 0);
top += Math.min(windowH - (top + dialogH), 0);
if (isLTR) {
if (x + width + MARGIN + dialogW < windowW) {
left = x + width + MARGIN;
} else if (x > dialogW + MARGIN) {
left = x - dialogW - MARGIN;
}
} else if (x > dialogW + MARGIN) {
left = x - dialogW - MARGIN;
} else if (x + width + MARGIN + dialogW < windowW) {
left = x + width + MARGIN;
}
if (left === null) {
top = null;
left = Math.max(x, 0);
left += Math.min(windowW - (left + dialogW), 0);
if (y > dialogH + MARGIN) {
top = y - dialogH - MARGIN;
} else if (y + height + MARGIN + dialogH < windowH) {
top = y + height + MARGIN;
}
}
if (top !== null) {
dialog.classList.add("positioned");
if (isLTR) {
style.left = `${left}px`;
} else {
style.right = `${windowW - left - dialogW}px`;
}
style.top = `${top}px`;
} else {
dialog.classList.remove("positioned");
style.left = "";
style.top = "";
}
}
function alt_text_manager_finish() {
alt_text_manager_classPrivateFieldGet(alt_text_manager_overlayManager, this).closeIfActive(alt_text_manager_classPrivateFieldGet(alt_text_manager_dialog, this));
}
function alt_text_manager_close() {
alt_text_manager_classPrivateFieldGet(alt_text_manager_currentEditor, this)._reportTelemetry(alt_text_manager_classPrivateFieldGet(_telemetryData, this) || {
action: "alt_text_cancel",
alt_text_keyboard: !alt_text_manager_classPrivateFieldGet(_hasUsedPointer, this)
});
alt_text_manager_classPrivateFieldSet(_telemetryData, this, null);
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, _removeOnClickListeners).call(this);
alt_text_manager_classPrivateFieldGet(alt_text_manager_uiManager, this)?.addEditListeners();
alt_text_manager_classPrivateFieldGet(_resizeAC, this)?.abort();
alt_text_manager_classPrivateFieldSet(_resizeAC, this, null);
alt_text_manager_classPrivateFieldGet(alt_text_manager_currentEditor, this).altTextFinish();
alt_text_manager_classPrivateFieldSet(alt_text_manager_currentEditor, this, null);
alt_text_manager_classPrivateFieldSet(alt_text_manager_uiManager, this, null);
}
function _updateUIState() {
alt_text_manager_classPrivateFieldGet(alt_text_manager_textarea, this).disabled = alt_text_manager_classPrivateFieldGet(_optionDecorative, this).checked;
}
function alt_text_manager_save() {
const altText = alt_text_manager_classPrivateFieldGet(alt_text_manager_textarea, this).value.trim();
const decorative = alt_text_manager_classPrivateFieldGet(_optionDecorative, this).checked;
alt_text_manager_classPrivateFieldGet(alt_text_manager_currentEditor, this).altTextData = {
altText,
decorative
};
alt_text_manager_classPrivateFieldSet(_telemetryData, this, {
action: "alt_text_save",
alt_text_description: !!altText,
alt_text_edit: !!alt_text_manager_classPrivateFieldGet(alt_text_manager_previousAltText, this) && alt_text_manager_classPrivateFieldGet(alt_text_manager_previousAltText, this) !== altText,
alt_text_decorative: decorative,
alt_text_keyboard: !alt_text_manager_classPrivateFieldGet(_hasUsedPointer, this)
});
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, alt_text_manager_finish).call(this);
}
function _onClick(evt) {
if (evt.detail === 0) {
return;
}
alt_text_manager_classPrivateFieldSet(_hasUsedPointer, this, true);
alt_text_manager_assertClassBrand(_AltTextManager_brand, this, _removeOnClickListeners).call(this);
}
function _removeOnClickListeners() {
alt_text_manager_classPrivateFieldGet(alt_text_manager_clickAC, this)?.abort();
alt_text_manager_classPrivateFieldSet(alt_text_manager_clickAC, this, null);
}
;// ./web/annotation_editor_params.js
function annotation_editor_params_classPrivateMethodInitSpec(e, a) { annotation_editor_params_checkPrivateRedeclaration(e, a), a.add(e); }
function annotation_editor_params_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function annotation_editor_params_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _AnnotationEditorParams_brand = /*#__PURE__*/new WeakSet();
class AnnotationEditorParams {
constructor(options, _eventBus) {
annotation_editor_params_classPrivateMethodInitSpec(this, _AnnotationEditorParams_brand);
this.eventBus = _eventBus;
annotation_editor_params_assertClassBrand(_AnnotationEditorParams_brand, this, _bindListeners).call(this, options);
}
}
function _bindListeners(_ref) {
let {
editorFreeTextFontSize,
editorFreeTextColor,
editorInkColor,
editorInkThickness,
editorInkOpacity,
editorStampAddImage,
editorFreeHighlightThickness,
editorHighlightShowAll,
editorSignatureAddSignature
} = _ref;
const {
eventBus
} = this;
const dispatchEvent = (typeStr, value) => {
eventBus.dispatch("switchannotationeditorparams", {
source: this,
type: AnnotationEditorParamsType[typeStr],
value
});
};
editorFreeTextFontSize.addEventListener("input", function () {
dispatchEvent("FREETEXT_SIZE", this.valueAsNumber);
});
editorFreeTextColor.addEventListener("input", function () {
dispatchEvent("FREETEXT_COLOR", this.value);
});
editorInkColor.addEventListener("input", function () {
dispatchEvent("INK_COLOR", this.value);
});
editorInkThickness.addEventListener("input", function () {
dispatchEvent("INK_THICKNESS", this.valueAsNumber);
});
editorInkOpacity.addEventListener("input", function () {
dispatchEvent("INK_OPACITY", this.valueAsNumber);
});
editorStampAddImage.addEventListener("click", () => {
eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data: {
action: "pdfjs.image.add_image_click"
}
}
});
dispatchEvent("CREATE");
});
editorFreeHighlightThickness.addEventListener("input", function () {
dispatchEvent("HIGHLIGHT_THICKNESS", this.valueAsNumber);
});
editorHighlightShowAll.addEventListener("click", function () {
const checked = this.getAttribute("aria-pressed") === "true";
this.setAttribute("aria-pressed", !checked);
dispatchEvent("HIGHLIGHT_SHOW_ALL", !checked);
});
editorSignatureAddSignature?.addEventListener("click", () => {
dispatchEvent("CREATE");
});
eventBus._on("annotationeditorparamschanged", evt => {
for (const [type, value] of evt.details) {
switch (type) {
case AnnotationEditorParamsType.FREETEXT_SIZE:
editorFreeTextFontSize.value = value;
break;
case AnnotationEditorParamsType.FREETEXT_COLOR:
editorFreeTextColor.value = value;
break;
case AnnotationEditorParamsType.INK_COLOR:
editorInkColor.value = value;
break;
case AnnotationEditorParamsType.INK_THICKNESS:
editorInkThickness.value = value;
break;
case AnnotationEditorParamsType.INK_OPACITY:
editorInkOpacity.value = value;
break;
case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:
eventBus.dispatch("mainhighlightcolorpickerupdatecolor", {
source: this,
value
});
break;
case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:
editorFreeHighlightThickness.value = value;
break;
case AnnotationEditorParamsType.HIGHLIGHT_FREE:
editorFreeHighlightThickness.disabled = !value;
break;
case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:
editorHighlightShowAll.setAttribute("aria-pressed", value);
break;
}
}
});
}
;// ./web/caret_browsing.js
var _CaretBrowsingMode;
function caret_browsing_classPrivateMethodInitSpec(e, a) { caret_browsing_checkPrivateRedeclaration(e, a), a.add(e); }
function caret_browsing_classPrivateFieldInitSpec(e, t, a) { caret_browsing_checkPrivateRedeclaration(e, t), t.set(e, a); }
function caret_browsing_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function caret_browsing_classPrivateFieldGet(s, a) { return s.get(caret_browsing_assertClassBrand(s, a)); }
function caret_browsing_classPrivateFieldSet(s, a, r) { return s.set(caret_browsing_assertClassBrand(s, a), r), r; }
function caret_browsing_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const PRECISION = 1e-1;
var _mainContainer = /*#__PURE__*/new WeakMap();
var _toolBarHeight = /*#__PURE__*/new WeakMap();
var _viewerContainer = /*#__PURE__*/new WeakMap();
var _CaretBrowsingMode_brand = /*#__PURE__*/new WeakSet();
class CaretBrowsingMode {
constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) {
caret_browsing_classPrivateMethodInitSpec(this, _CaretBrowsingMode_brand);
caret_browsing_classPrivateFieldInitSpec(this, _mainContainer, void 0);
caret_browsing_classPrivateFieldInitSpec(this, _toolBarHeight, 0);
caret_browsing_classPrivateFieldInitSpec(this, _viewerContainer, void 0);
caret_browsing_classPrivateFieldSet(_mainContainer, this, mainContainer);
caret_browsing_classPrivateFieldSet(_viewerContainer, this, viewerContainer);
if (!toolbarContainer) {
return;
}
caret_browsing_classPrivateFieldSet(_toolBarHeight, this, toolbarContainer.getBoundingClientRect().height);
const toolbarObserver = new ResizeObserver(entries => {
for (const entry of entries) {
if (entry.target === toolbarContainer) {
caret_browsing_classPrivateFieldSet(_toolBarHeight, this, Math.floor(entry.borderBoxSize[0].blockSize));
break;
}
}
});
toolbarObserver.observe(toolbarContainer);
abortSignal.addEventListener("abort", () => toolbarObserver.disconnect(), {
once: true
});
}
moveCaret(isUp, select) {
const selection = document.getSelection();
if (selection.rangeCount === 0) {
return;
}
const {
focusNode
} = selection;
const focusElement = focusNode.nodeType !== Node.ELEMENT_NODE ? focusNode.parentElement : focusNode;
const root = focusElement.closest(".textLayer");
if (!root) {
return;
}
const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
walker.currentNode = focusNode;
const focusRect = focusElement.getBoundingClientRect();
let newLineElement = null;
const nodeIterator = (isUp ? walker.previousSibling : walker.nextSibling).bind(walker);
while (nodeIterator()) {
const element = walker.currentNode.parentElement;
if (!caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _isOnSameLine).call(this, focusRect, element.getBoundingClientRect())) {
newLineElement = element;
break;
}
}
if (!newLineElement) {
const node = caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _getNodeOnNextPage).call(this, root, isUp);
if (!node) {
return;
}
if (select) {
const lastNode = (isUp ? walker.firstChild() : walker.lastChild()) || focusNode;
selection.extend(lastNode, isUp ? 0 : lastNode.length);
const range = document.createRange();
range.setStart(node, isUp ? node.length : 0);
range.setEnd(node, isUp ? node.length : 0);
selection.addRange(range);
return;
}
const [caretX] = caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _getCaretPosition).call(this, selection, isUp);
const {
parentElement
} = node;
caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _setCaretPosition).call(this, select, selection, parentElement, parentElement.getBoundingClientRect(), caretX);
return;
}
const [caretX, caretY] = caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _getCaretPosition).call(this, selection, isUp);
const newLineElementRect = newLineElement.getBoundingClientRect();
if (caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _isUnderOver).call(this, newLineElementRect, caretX, caretY, isUp)) {
caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _setCaretPosition).call(this, select, selection, newLineElement, newLineElementRect, caretX);
return;
}
while (nodeIterator()) {
const element = walker.currentNode.parentElement;
const elementRect = element.getBoundingClientRect();
if (!caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _isOnSameLine).call(this, newLineElementRect, elementRect)) {
break;
}
if (caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _isUnderOver).call(this, elementRect, caretX, caretY, isUp)) {
caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _setCaretPosition).call(this, select, selection, element, elementRect, caretX);
return;
}
}
caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _setCaretPosition).call(this, select, selection, newLineElement, newLineElementRect, caretX);
}
}
_CaretBrowsingMode = CaretBrowsingMode;
function _isOnSameLine(rect1, rect2) {
const top1 = rect1.y;
const bot1 = rect1.bottom;
const mid1 = rect1.y + rect1.height / 2;
const top2 = rect2.y;
const bot2 = rect2.bottom;
const mid2 = rect2.y + rect2.height / 2;
return top1 <= mid2 && mid2 <= bot1 || top2 <= mid1 && mid1 <= bot2;
}
function _isUnderOver(rect, x, y, isUp) {
const midY = rect.y + rect.height / 2;
return (isUp ? y >= midY : y <= midY) && rect.x - PRECISION <= x && x <= rect.right + PRECISION;
}
function _isVisible(rect) {
return rect.top >= caret_browsing_classPrivateFieldGet(_toolBarHeight, this) && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
}
function _getCaretPosition(selection, isUp) {
const {
focusNode,
focusOffset
} = selection;
const range = document.createRange();
range.setStart(focusNode, focusOffset);
range.setEnd(focusNode, focusOffset);
const rect = range.getBoundingClientRect();
return [rect.x, isUp ? rect.top : rect.bottom];
}
function _caretPositionFromPoint(x, y) {
if (!document.caretPositionFromPoint) {
const {
startContainer: offsetNode,
startOffset: offset
} = document.caretRangeFromPoint(x, y);
return {
offsetNode,
offset
};
}
return document.caretPositionFromPoint(x, y);
}
function _setCaretPositionHelper(selection, caretX, select, element, rect) {
rect ||= element.getBoundingClientRect();
if (caretX <= rect.x + PRECISION) {
if (select) {
selection.extend(element.firstChild, 0);
} else {
selection.setPosition(element.firstChild, 0);
}
return;
}
if (rect.right - PRECISION <= caretX) {
const {
lastChild
} = element;
if (select) {
selection.extend(lastChild, lastChild.length);
} else {
selection.setPosition(lastChild, lastChild.length);
}
return;
}
const midY = rect.y + rect.height / 2;
let caretPosition = _caretPositionFromPoint.call(_CaretBrowsingMode, caretX, midY);
let parentElement = caretPosition.offsetNode?.parentElement;
if (parentElement && parentElement !== element) {
const elementsAtPoint = document.elementsFromPoint(caretX, midY);
const savedVisibilities = [];
for (const el of elementsAtPoint) {
if (el === element) {
break;
}
const {
style
} = el;
savedVisibilities.push([el, style.visibility]);
style.visibility = "hidden";
}
caretPosition = _caretPositionFromPoint.call(_CaretBrowsingMode, caretX, midY);
parentElement = caretPosition.offsetNode?.parentElement;
for (const [el, visibility] of savedVisibilities) {
el.style.visibility = visibility;
}
}
if (parentElement !== element) {
if (select) {
selection.extend(element.firstChild, 0);
} else {
selection.setPosition(element.firstChild, 0);
}
return;
}
if (select) {
selection.extend(caretPosition.offsetNode, caretPosition.offset);
} else {
selection.setPosition(caretPosition.offsetNode, caretPosition.offset);
}
}
function _setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX) {
if (caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _isVisible).call(this, newLineElementRect)) {
caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _setCaretPositionHelper).call(this, selection, caretX, select, newLineElement, newLineElementRect);
return;
}
caret_browsing_classPrivateFieldGet(_mainContainer, this).addEventListener("scrollend", caret_browsing_assertClassBrand(_CaretBrowsingMode_brand, this, _setCaretPositionHelper).bind(this, selection, caretX, select, newLineElement, null), {
once: true
});
newLineElement.scrollIntoView();
}
function _getNodeOnNextPage(textLayer, isUp) {
while (true) {
const page = textLayer.closest(".page");
const pageNumber = parseInt(page.getAttribute("data-page-number"));
const nextPage = isUp ? pageNumber - 1 : pageNumber + 1;
textLayer = caret_browsing_classPrivateFieldGet(_viewerContainer, this).querySelector(`.page[data-page-number="${nextPage}"] .textLayer`);
if (!textLayer) {
return null;
}
const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT);
const node = isUp ? walker.lastChild() : walker.firstChild();
if (node) {
return node;
}
}
}
;// ./web/download_manager.js
function download_manager_classPrivateFieldInitSpec(e, t, a) { download_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function download_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function download_manager_classPrivateFieldGet(s, a) { return s.get(download_manager_assertClassBrand(s, a)); }
function download_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function download(blobUrl, filename) {
const a = document.createElement("a");
if (!a.click) {
throw new Error('DownloadManager: "a.click()" is not supported.');
}
a.href = blobUrl;
a.target = "_parent";
if ("download" in a) {
a.download = filename;
}
(document.body || document.documentElement).append(a);
a.click();
a.remove();
}
var _openBlobUrls = /*#__PURE__*/new WeakMap();
class DownloadManager {
constructor() {
download_manager_classPrivateFieldInitSpec(this, _openBlobUrls, new WeakMap());
}
downloadData(data, filename, contentType) {
const blobUrl = URL.createObjectURL(new Blob([data], {
type: contentType
}));
download(blobUrl, filename);
}
openOrDownloadData(data, filename) {
let dest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
const isPdfData = isPdfFile(filename);
const contentType = isPdfData ? "application/pdf" : "";
if (isPdfData) {
let blobUrl = download_manager_classPrivateFieldGet(_openBlobUrls, this).get(data);
if (!blobUrl) {
blobUrl = URL.createObjectURL(new Blob([data], {
type: contentType
}));
download_manager_classPrivateFieldGet(_openBlobUrls, this).set(data, blobUrl);
}
try {
window.open(blobUrl);
return true;
} catch (ex) {
NgxConsole.error("openOrDownloadData:", ex);
URL.revokeObjectURL(blobUrl);
download_manager_classPrivateFieldGet(_openBlobUrls, this).delete(data);
}
}
this.downloadData(data, filename, contentType);
return false;
}
download(data, url, filename) {
let blobUrl;
if (data) {
blobUrl = URL.createObjectURL(new Blob([data], {
type: "application/pdf"
}));
} else {
if (!createValidAbsoluteUrl(url, "http://example.com")) {
console.error(`download - not a valid URL: ${url}`);
return;
}
blobUrl = url + "#pdfjs.action=download";
}
download(blobUrl, filename);
}
}
;// ./web/editor_undo_bar.js
function editor_undo_bar_defineProperty(e, r, t) { return (r = editor_undo_bar_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function editor_undo_bar_toPropertyKey(t) { var i = editor_undo_bar_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function editor_undo_bar_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function editor_undo_bar_classPrivateFieldInitSpec(e, t, a) { editor_undo_bar_checkPrivateRedeclaration(e, t), t.set(e, a); }
function editor_undo_bar_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function editor_undo_bar_classPrivateFieldGet(s, a) { return s.get(editor_undo_bar_assertClassBrand(s, a)); }
function editor_undo_bar_classPrivateFieldSet(s, a, r) { return s.set(editor_undo_bar_assertClassBrand(s, a), r), r; }
function editor_undo_bar_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _closeButton = /*#__PURE__*/new WeakMap();
var editor_undo_bar_container = /*#__PURE__*/new WeakMap();
var editor_undo_bar_eventBus = /*#__PURE__*/new WeakMap();
var _focusTimeout = /*#__PURE__*/new WeakMap();
var _initController = /*#__PURE__*/new WeakMap();
var _message = /*#__PURE__*/new WeakMap();
var _showController = /*#__PURE__*/new WeakMap();
var _undoButton = /*#__PURE__*/new WeakMap();
class EditorUndoBar {
constructor(_ref, eventBus) {
let {
container,
message,
undoButton,
closeButton
} = _ref;
editor_undo_bar_classPrivateFieldInitSpec(this, _closeButton, null);
editor_undo_bar_classPrivateFieldInitSpec(this, editor_undo_bar_container, void 0);
editor_undo_bar_classPrivateFieldInitSpec(this, editor_undo_bar_eventBus, null);
editor_undo_bar_classPrivateFieldInitSpec(this, _focusTimeout, null);
editor_undo_bar_classPrivateFieldInitSpec(this, _initController, null);
editor_undo_bar_defineProperty(this, "isOpen", false);
editor_undo_bar_classPrivateFieldInitSpec(this, _message, void 0);
editor_undo_bar_classPrivateFieldInitSpec(this, _showController, null);
editor_undo_bar_classPrivateFieldInitSpec(this, _undoButton, void 0);
editor_undo_bar_classPrivateFieldSet(editor_undo_bar_container, this, container);
editor_undo_bar_classPrivateFieldSet(_message, this, message);
editor_undo_bar_classPrivateFieldSet(_undoButton, this, undoButton);
editor_undo_bar_classPrivateFieldSet(_closeButton, this, closeButton);
editor_undo_bar_classPrivateFieldSet(editor_undo_bar_eventBus, this, eventBus);
}
destroy() {
editor_undo_bar_classPrivateFieldGet(_initController, this)?.abort();
editor_undo_bar_classPrivateFieldSet(_initController, this, null);
this.hide();
}
show(undoAction, messageData) {
if (!editor_undo_bar_classPrivateFieldGet(_initController, this)) {
editor_undo_bar_classPrivateFieldSet(_initController, this, new AbortController());
const opts = {
signal: editor_undo_bar_classPrivateFieldGet(_initController, this).signal
};
const boundHide = this.hide.bind(this);
editor_undo_bar_classPrivateFieldGet(editor_undo_bar_container, this).addEventListener("contextmenu", noContextMenu, opts);
editor_undo_bar_classPrivateFieldGet(_closeButton, this).addEventListener("click", boundHide, opts);
editor_undo_bar_classPrivateFieldGet(editor_undo_bar_eventBus, this)._on("beforeprint", boundHide, opts);
editor_undo_bar_classPrivateFieldGet(editor_undo_bar_eventBus, this)._on("download", boundHide, opts);
}
this.hide();
if (typeof messageData === "string") {
editor_undo_bar_classPrivateFieldGet(_message, this).setAttribute("data-l10n-id", _l10nMessages._[messageData]);
} else {
editor_undo_bar_classPrivateFieldGet(_message, this).setAttribute("data-l10n-id", _l10nMessages._._multiple);
editor_undo_bar_classPrivateFieldGet(_message, this).setAttribute("data-l10n-args", JSON.stringify({
count: messageData
}));
}
this.isOpen = true;
editor_undo_bar_classPrivateFieldGet(editor_undo_bar_container, this).hidden = false;
editor_undo_bar_classPrivateFieldSet(_showController, this, new AbortController());
editor_undo_bar_classPrivateFieldGet(_undoButton, this).addEventListener("click", () => {
undoAction();
this.hide();
}, {
signal: editor_undo_bar_classPrivateFieldGet(_showController, this).signal
});
editor_undo_bar_classPrivateFieldSet(_focusTimeout, this, setTimeout(() => {
editor_undo_bar_classPrivateFieldGet(editor_undo_bar_container, this).focus();
editor_undo_bar_classPrivateFieldSet(_focusTimeout, this, null);
}, 100));
}
hide() {
if (!this.isOpen) {
return;
}
this.isOpen = false;
editor_undo_bar_classPrivateFieldGet(editor_undo_bar_container, this).hidden = true;
editor_undo_bar_classPrivateFieldGet(_showController, this)?.abort();
editor_undo_bar_classPrivateFieldSet(_showController, this, null);
if (editor_undo_bar_classPrivateFieldGet(_focusTimeout, this)) {
clearTimeout(editor_undo_bar_classPrivateFieldGet(_focusTimeout, this));
editor_undo_bar_classPrivateFieldSet(_focusTimeout, this, null);
}
}
}
var _l10nMessages = {
_: Object.freeze({
highlight: "pdfjs-editor-undo-bar-message-highlight",
freetext: "pdfjs-editor-undo-bar-message-freetext",
stamp: "pdfjs-editor-undo-bar-message-stamp",
ink: "pdfjs-editor-undo-bar-message-ink",
signature: "pdfjs-editor-undo-bar-message-signature",
_multiple: "pdfjs-editor-undo-bar-message-multiple"
})
};
;// ./web/overlay_manager.js
function overlay_manager_classPrivateFieldInitSpec(e, t, a) { overlay_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function overlay_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function overlay_manager_classPrivateFieldSet(s, a, r) { return s.set(overlay_manager_assertClassBrand(s, a), r), r; }
function overlay_manager_classPrivateFieldGet(s, a) { return s.get(overlay_manager_assertClassBrand(s, a)); }
function overlay_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _overlays = /*#__PURE__*/new WeakMap();
var _active = /*#__PURE__*/new WeakMap();
class OverlayManager {
constructor() {
overlay_manager_classPrivateFieldInitSpec(this, _overlays, new WeakMap());
overlay_manager_classPrivateFieldInitSpec(this, _active, null);
}
get active() {
return overlay_manager_classPrivateFieldGet(_active, this);
}
async register(dialog) {
let canForceClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (typeof dialog !== "object") {
throw new Error("Not enough parameters.");
} else if (overlay_manager_classPrivateFieldGet(_overlays, this).has(dialog)) {
throw new Error("The overlay is already registered.");
}
overlay_manager_classPrivateFieldGet(_overlays, this).set(dialog, {
canForceClose
});
dialog.addEventListener("cancel", _ref => {
let {
target
} = _ref;
if (overlay_manager_classPrivateFieldGet(_active, this) === target) {
overlay_manager_classPrivateFieldSet(_active, this, null);
}
});
}
unregister(dialog) {
if (!overlay_manager_classPrivateFieldGet(_overlays, this).has(dialog)) {
throw new Error("The overlay does not exist.");
}
overlay_manager_classPrivateFieldGet(_overlays, this).delete(dialog);
}
async open(dialog) {
if (!overlay_manager_classPrivateFieldGet(_overlays, this).has(dialog)) {
throw new Error("The overlay does not exist.");
} else if (overlay_manager_classPrivateFieldGet(_active, this)) {
if (overlay_manager_classPrivateFieldGet(_active, this) === dialog) {
throw new Error("The overlay is already active.");
} else if (overlay_manager_classPrivateFieldGet(_overlays, this).get(dialog).canForceClose) {
await this.close();
} else {
throw new Error("Another overlay is currently active.");
}
}
overlay_manager_classPrivateFieldSet(_active, this, dialog);
dialog.showModal();
dialog.classList.remove("hidden");
}
async close() {
let dialog = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : overlay_manager_classPrivateFieldGet(_active, this);
let silent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!overlay_manager_classPrivateFieldGet(_overlays, this).has(dialog)) {
if (silent) {
return;
}
throw new Error("The overlay does not exist.");
} else if (!overlay_manager_classPrivateFieldGet(_active, this)) {
if (silent) {
return;
}
throw new Error("The overlay is currently not active.");
} else if (overlay_manager_classPrivateFieldGet(_active, this) !== dialog) {
if (silent) {
return;
}
throw new Error("Another overlay is currently active.");
}
dialog.close();
overlay_manager_classPrivateFieldSet(_active, this, null);
}
async closeIfActive(dialog) {
if (overlay_manager_classPrivateFieldGet(_active, this) === dialog) {
await this.close(dialog);
}
}
}
;// ./web/password_prompt.js
function password_prompt_classPrivateMethodInitSpec(e, a) { password_prompt_checkPrivateRedeclaration(e, a), a.add(e); }
function password_prompt_classPrivateFieldInitSpec(e, t, a) { password_prompt_checkPrivateRedeclaration(e, t), t.set(e, a); }
function password_prompt_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function password_prompt_classPrivateFieldSet(s, a, r) { return s.set(password_prompt_assertClassBrand(s, a), r), r; }
function password_prompt_classPrivateFieldGet(s, a) { return s.get(password_prompt_assertClassBrand(s, a)); }
function password_prompt_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _activeCapability = /*#__PURE__*/new WeakMap();
var _updateCallback = /*#__PURE__*/new WeakMap();
var _reason = /*#__PURE__*/new WeakMap();
var _PasswordPrompt_brand = /*#__PURE__*/new WeakSet();
class PasswordPrompt {
constructor(options, overlayManager) {
let isViewerEmbedded = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
password_prompt_classPrivateMethodInitSpec(this, _PasswordPrompt_brand);
password_prompt_classPrivateFieldInitSpec(this, _activeCapability, null);
password_prompt_classPrivateFieldInitSpec(this, _updateCallback, null);
password_prompt_classPrivateFieldInitSpec(this, _reason, null);
this.dialog = options.dialog;
this.label = options.label;
this.input = options.input;
this.submitButton = options.submitButton;
this.cancelButton = options.cancelButton;
this.overlayManager = overlayManager;
this._isViewerEmbedded = isViewerEmbedded;
this.submitButton.addEventListener("click", password_prompt_assertClassBrand(_PasswordPrompt_brand, this, _verify).bind(this));
this.cancelButton.addEventListener("click", this.close.bind(this));
this.input.addEventListener("keydown", e => {
if (e.keyCode === 13) {
password_prompt_assertClassBrand(_PasswordPrompt_brand, this, _verify).call(this);
}
});
this.overlayManager.register(this.dialog, true);
this.dialog.addEventListener("close", password_prompt_assertClassBrand(_PasswordPrompt_brand, this, password_prompt_cancel).bind(this));
}
async open() {
await password_prompt_classPrivateFieldGet(_activeCapability, this)?.promise;
password_prompt_classPrivateFieldSet(_activeCapability, this, Promise.withResolvers());
try {
await this.overlayManager.open(this.dialog);
this.input.type = "password";
this.input.focus();
} catch (ex) {
password_prompt_classPrivateFieldGet(_activeCapability, this).resolve();
throw ex;
}
const passwordIncorrect = password_prompt_classPrivateFieldGet(_reason, this) === PasswordResponses.INCORRECT_PASSWORD;
if (!this._isViewerEmbedded || passwordIncorrect) {
this.input.focus();
}
this.label.setAttribute("data-l10n-id", passwordIncorrect ? "pdfjs-password-invalid" : "pdfjs-password-label");
}
async close() {
this.overlayManager.closeIfActive(this.dialog);
this.input.value = "";
this.input.type = "text";
}
async setUpdateCallback(updateCallback, reason) {
if (password_prompt_classPrivateFieldGet(_activeCapability, this)) {
await password_prompt_classPrivateFieldGet(_activeCapability, this).promise;
}
password_prompt_classPrivateFieldSet(_updateCallback, this, updateCallback);
password_prompt_classPrivateFieldSet(_reason, this, reason);
}
}
function _verify() {
const password = this.input.value;
if (password?.length > 0) {
password_prompt_assertClassBrand(_PasswordPrompt_brand, this, _invokeCallback).call(this, password);
}
}
function password_prompt_cancel() {
password_prompt_assertClassBrand(_PasswordPrompt_brand, this, _invokeCallback).call(this, new Error("PasswordPrompt cancelled."));
password_prompt_classPrivateFieldGet(_activeCapability, this).resolve();
}
function _invokeCallback(password) {
if (!password_prompt_classPrivateFieldGet(_updateCallback, this)) {
return;
}
this.close();
this.input.value = "";
password_prompt_classPrivateFieldGet(_updateCallback, this).call(this, password);
password_prompt_classPrivateFieldSet(_updateCallback, this, null);
}
;// ./web/base_tree_viewer.js
const TREEITEM_OFFSET_TOP = -100;
const TREEITEM_SELECTED_CLASS = "selected";
class BaseTreeViewer {
constructor(options) {
this.container = options.container;
this.eventBus = options.eventBus;
this._l10n = options.l10n;
this.reset();
}
reset() {
this._pdfDocument = null;
this._lastToggleIsShow = true;
this._currentTreeItem = null;
this.container.textContent = "";
this.container.classList.remove("treeWithDeepNesting");
}
_dispatchEvent(count) {
throw new Error("Not implemented: _dispatchEvent");
}
_bindLink(element, params) {
throw new Error("Not implemented: _bindLink");
}
_normalizeTextContent(str) {
return removeNullCharacters(str, true) || "\u2013";
}
_addToggleButton(div) {
let hidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
const toggler = document.createElement("div");
toggler.className = "treeItemToggler";
if (hidden) {
toggler.classList.add("treeItemsHidden");
}
toggler.onclick = evt => {
evt.stopPropagation();
toggler.classList.toggle("treeItemsHidden");
if (evt.shiftKey) {
const shouldShowAll = !toggler.classList.contains("treeItemsHidden");
this._toggleTreeItem(div, shouldShowAll);
}
};
div.prepend(toggler);
}
_toggleTreeItem(root) {
let show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
this._l10n.pause();
this._lastToggleIsShow = show;
for (const toggler of root.querySelectorAll(".treeItemToggler")) {
toggler.classList.toggle("treeItemsHidden", !show);
}
this._l10n.resume();
}
_toggleAllTreeItems() {
this._toggleTreeItem(this.container, !this._lastToggleIsShow);
}
_finishRendering(fragment, count) {
let hasAnyNesting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (hasAnyNesting) {
this.container.classList.add("treeWithDeepNesting");
this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden");
}
this._l10n.pause();
this.container.append(fragment);
this._l10n.resume();
this._dispatchEvent(count);
}
render(params) {
throw new Error("Not implemented: render");
}
_updateCurrentTreeItem() {
let treeItem = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (this._currentTreeItem) {
this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);
this._currentTreeItem = null;
}
if (treeItem) {
treeItem.classList.add(TREEITEM_SELECTED_CLASS);
this._currentTreeItem = treeItem;
}
}
_scrollToCurrentTreeItem(treeItem) {
if (!treeItem) {
return;
}
this._l10n.pause();
let currentNode = treeItem.parentNode;
while (currentNode && currentNode !== this.container) {
if (currentNode.classList.contains("treeItem")) {
const toggler = currentNode.firstElementChild;
toggler?.classList.remove("treeItemsHidden");
}
currentNode = currentNode.parentNode;
}
this._l10n.resume();
this._updateCurrentTreeItem(treeItem);
this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);
}
}
;// ./web/pdf_attachment_viewer.js
function pdf_attachment_viewer_classPrivateMethodInitSpec(e, a) { pdf_attachment_viewer_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_attachment_viewer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_attachment_viewer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _PDFAttachmentViewer_brand = /*#__PURE__*/new WeakSet();
class PDFAttachmentViewer extends BaseTreeViewer {
constructor(options) {
super(options);
pdf_attachment_viewer_classPrivateMethodInitSpec(this, _PDFAttachmentViewer_brand);
this.downloadManager = options.downloadManager;
this.eventBus._on("fileattachmentannotation", pdf_attachment_viewer_assertClassBrand(_PDFAttachmentViewer_brand, this, _appendAttachment).bind(this));
}
reset() {
let keepRenderedCapability = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
super.reset();
this._attachments = null;
if (!keepRenderedCapability) {
this._renderedCapability = Promise.withResolvers();
}
this._pendingDispatchEvent = false;
}
async _dispatchEvent(attachmentsCount) {
this._renderedCapability.resolve();
if (attachmentsCount === 0 && !this._pendingDispatchEvent) {
this._pendingDispatchEvent = true;
await waitOnEventOrTimeout({
target: this.eventBus,
name: "annotationlayerrendered",
delay: 1000
});
if (!this._pendingDispatchEvent) {
return;
}
}
this._pendingDispatchEvent = false;
this.eventBus.dispatch("attachmentsloaded", {
source: this,
attachmentsCount
});
}
_bindLink(element, _ref) {
let {
content,
description,
filename
} = _ref;
if (description) {
element.title = description;
}
element.onclick = () => {
this.downloadManager.openOrDownloadData(content, filename);
return false;
};
}
render(_ref2) {
let {
attachments,
keepRenderedCapability = false
} = _ref2;
if (this._attachments) {
this.reset(keepRenderedCapability);
}
this._attachments = attachments || null;
if (!attachments) {
this._dispatchEvent(0);
return;
}
const fragment = document.createDocumentFragment();
let attachmentsCount = 0;
for (const name in attachments) {
const item = attachments[name];
const div = document.createElement("div");
div.className = "treeItem";
const element = document.createElement("a");
this._bindLink(element, item);
element.textContent = this._normalizeTextContent(item.filename);
div.append(element);
fragment.append(div);
attachmentsCount++;
}
this._finishRendering(fragment, attachmentsCount);
}
}
function _appendAttachment(item) {
const renderedPromise = this._renderedCapability.promise;
renderedPromise.then(() => {
if (renderedPromise !== this._renderedCapability.promise) {
return;
}
const attachments = this._attachments || Object.create(null);
for (const name in attachments) {
if (item.filename === name) {
return;
}
}
attachments[item.filename] = item;
this.render({
attachments,
keepRenderedCapability: true
});
});
}
;// ./web/grab_to_pan.js
function grab_to_pan_classPrivateMethodInitSpec(e, a) { grab_to_pan_checkPrivateRedeclaration(e, a), a.add(e); }
function grab_to_pan_classPrivateFieldInitSpec(e, t, a) { grab_to_pan_checkPrivateRedeclaration(e, t), t.set(e, a); }
function grab_to_pan_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function grab_to_pan_classPrivateFieldSet(s, a, r) { return s.set(grab_to_pan_assertClassBrand(s, a), r), r; }
function grab_to_pan_classPrivateFieldGet(s, a) { return s.get(grab_to_pan_assertClassBrand(s, a)); }
function grab_to_pan_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const CSS_CLASS_GRAB = "grab-to-pan-grab";
var _activateAC = /*#__PURE__*/new WeakMap();
var _mouseDownAC = /*#__PURE__*/new WeakMap();
var _scrollAC = /*#__PURE__*/new WeakMap();
var _GrabToPan_brand = /*#__PURE__*/new WeakSet();
class GrabToPan {
constructor(_ref) {
let {
element
} = _ref;
grab_to_pan_classPrivateMethodInitSpec(this, _GrabToPan_brand);
grab_to_pan_classPrivateFieldInitSpec(this, _activateAC, null);
grab_to_pan_classPrivateFieldInitSpec(this, _mouseDownAC, null);
grab_to_pan_classPrivateFieldInitSpec(this, _scrollAC, null);
this.element = element;
this.document = element.ownerDocument;
const overlay = this.overlay = document.createElement("div");
overlay.className = "grab-to-pan-grabbing";
}
activate() {
if (!grab_to_pan_classPrivateFieldGet(_activateAC, this)) {
grab_to_pan_classPrivateFieldSet(_activateAC, this, new AbortController());
this.element.addEventListener("mousedown", grab_to_pan_assertClassBrand(_GrabToPan_brand, this, _onMouseDown).bind(this), {
capture: true,
signal: grab_to_pan_classPrivateFieldGet(_activateAC, this).signal
});
this.element.classList.add(CSS_CLASS_GRAB);
}
}
deactivate() {
if (grab_to_pan_classPrivateFieldGet(_activateAC, this)) {
grab_to_pan_classPrivateFieldGet(_activateAC, this).abort();
grab_to_pan_classPrivateFieldSet(_activateAC, this, null);
grab_to_pan_assertClassBrand(_GrabToPan_brand, this, _endPan).call(this);
this.element.classList.remove(CSS_CLASS_GRAB);
}
}
toggle() {
if (grab_to_pan_classPrivateFieldGet(_activateAC, this)) {
this.deactivate();
} else {
this.activate();
}
}
ignoreTarget(node) {
if (document.querySelector(".stf__item")) {
return true;
}
return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option");
}
}
function _onMouseDown(event) {
if (event.button !== 0 || this.ignoreTarget(event.target)) {
return;
}
if (event.originalTarget) {
try {
event.originalTarget.tagName;
} catch {
return;
}
}
this.scrollLeftStart = this.element.scrollLeft;
this.scrollTopStart = this.element.scrollTop;
this.clientXStart = event.clientX;
this.clientYStart = event.clientY;
if (isOverPerfectScrollbar(this.clientXStart, this.clientYStart, "ps__rail-x")) {
return;
}
if (isOverPerfectScrollbar(this.clientXStart, this.clientYStart, "ps__rail-y")) {
return;
}
grab_to_pan_classPrivateFieldSet(_mouseDownAC, this, new AbortController());
const boundEndPan = grab_to_pan_assertClassBrand(_GrabToPan_brand, this, _endPan).bind(this),
mouseOpts = {
capture: true,
signal: grab_to_pan_classPrivateFieldGet(_mouseDownAC, this).signal
};
this.document.addEventListener("mousemove", grab_to_pan_assertClassBrand(_GrabToPan_brand, this, _onMouseMove).bind(this), mouseOpts);
this.document.addEventListener("mouseup", boundEndPan, mouseOpts);
grab_to_pan_classPrivateFieldSet(_scrollAC, this, new AbortController());
this.element.addEventListener("scroll", boundEndPan, {
capture: true,
signal: grab_to_pan_classPrivateFieldGet(_scrollAC, this).signal
});
stopEvent(event);
const focusedElement = document.activeElement;
if (focusedElement && !focusedElement.contains(event.target)) {
focusedElement.blur();
}
}
function _onMouseMove(event) {
grab_to_pan_classPrivateFieldGet(_scrollAC, this)?.abort();
grab_to_pan_classPrivateFieldSet(_scrollAC, this, null);
if (!(event.buttons & 1)) {
grab_to_pan_assertClassBrand(_GrabToPan_brand, this, _endPan).call(this);
return;
}
const xDiff = event.clientX - this.clientXStart;
const yDiff = event.clientY - this.clientYStart;
this.element.scrollTo({
top: this.scrollTopStart - yDiff,
left: this.scrollLeftStart - xDiff,
behavior: "instant"
});
if (!this.overlay.parentNode) {
document.body.append(this.overlay);
}
}
function _endPan() {
grab_to_pan_classPrivateFieldGet(_mouseDownAC, this)?.abort();
grab_to_pan_classPrivateFieldSet(_mouseDownAC, this, null);
grab_to_pan_classPrivateFieldGet(_scrollAC, this)?.abort();
grab_to_pan_classPrivateFieldSet(_scrollAC, this, null);
this.overlay.remove();
}
function isOverPerfectScrollbar(x, y, divName) {
const perfectScrollbar = document.getElementsByClassName(divName);
if (perfectScrollbar && perfectScrollbar.length === 1) {
var {
top,
right,
bottom,
left
} = perfectScrollbar[0].getBoundingClientRect();
if (y >= top && y <= bottom) {
if (x <= right && x >= left) {
return true;
}
}
}
return false;
}
;// ./web/pdf_cursor_tools.js
function pdf_cursor_tools_classPrivateMethodInitSpec(e, a) { pdf_cursor_tools_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_cursor_tools_classPrivateFieldInitSpec(e, t, a) { pdf_cursor_tools_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_cursor_tools_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_cursor_tools_classPrivateFieldSet(s, a, r) { return s.set(pdf_cursor_tools_assertClassBrand(s, a), r), r; }
function pdf_cursor_tools_classPrivateFieldGet(s, a) { return s.get(pdf_cursor_tools_assertClassBrand(s, a)); }
function pdf_cursor_tools_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var pdf_cursor_tools_active = /*#__PURE__*/new WeakMap();
var _prevActive = /*#__PURE__*/new WeakMap();
var _PDFCursorTools_brand = /*#__PURE__*/new WeakSet();
class PDFCursorTools {
constructor(_ref) {
let {
container,
eventBus,
cursorToolOnLoad = CursorTool.SELECT
} = _ref;
pdf_cursor_tools_classPrivateMethodInitSpec(this, _PDFCursorTools_brand);
pdf_cursor_tools_classPrivateFieldInitSpec(this, pdf_cursor_tools_active, CursorTool.SELECT);
pdf_cursor_tools_classPrivateFieldInitSpec(this, _prevActive, null);
this.container = container;
this.eventBus = eventBus;
pdf_cursor_tools_assertClassBrand(_PDFCursorTools_brand, this, _addEventListeners).call(this);
Promise.resolve().then(() => {
this.switchTool(cursorToolOnLoad);
});
}
get activeTool() {
return pdf_cursor_tools_classPrivateFieldGet(pdf_cursor_tools_active, this);
}
switchTool(tool) {
if (pdf_cursor_tools_classPrivateFieldGet(_prevActive, this) !== null) {
return;
}
pdf_cursor_tools_assertClassBrand(_PDFCursorTools_brand, this, _switchTool).call(this, tool);
}
get _handTool() {
return shadow(this, "_handTool", new GrabToPan({
element: this.container
}));
}
}
function _switchTool(tool) {
let disabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (tool === pdf_cursor_tools_classPrivateFieldGet(pdf_cursor_tools_active, this)) {
if (pdf_cursor_tools_classPrivateFieldGet(_prevActive, this) !== null) {
this.eventBus.dispatch("cursortoolchanged", {
source: this,
tool,
disabled
});
}
return;
}
const disableActiveTool = () => {
switch (pdf_cursor_tools_classPrivateFieldGet(pdf_cursor_tools_active, this)) {
case CursorTool.SELECT:
break;
case CursorTool.HAND:
this._handTool.deactivate();
break;
case CursorTool.ZOOM:
}
};
switch (tool) {
case CursorTool.SELECT:
disableActiveTool();
break;
case CursorTool.HAND:
disableActiveTool();
this._handTool.activate();
break;
case CursorTool.ZOOM:
default:
NgxConsole.error(`switchTool: "${tool}" is an unsupported value.`);
return;
}
pdf_cursor_tools_classPrivateFieldSet(pdf_cursor_tools_active, this, tool);
this.eventBus.dispatch("cursortoolchanged", {
source: this,
tool,
disabled
});
}
function _addEventListeners() {
this.eventBus._on("switchcursortool", evt => {
if (!evt.reset) {
this.switchTool(evt.tool);
} else if (pdf_cursor_tools_classPrivateFieldGet(_prevActive, this) !== null) {
annotationEditorMode = AnnotationEditorType.NONE;
presentationModeState = PresentationModeState.NORMAL;
enableActive();
}
});
let annotationEditorMode = AnnotationEditorType.NONE,
presentationModeState = PresentationModeState.NORMAL;
const disableActive = () => {
pdf_cursor_tools_classPrivateFieldGet(_prevActive, this) ?? pdf_cursor_tools_classPrivateFieldSet(_prevActive, this, pdf_cursor_tools_classPrivateFieldGet(pdf_cursor_tools_active, this));
pdf_cursor_tools_assertClassBrand(_PDFCursorTools_brand, this, _switchTool).call(this, CursorTool.SELECT, true);
};
const enableActive = () => {
if (pdf_cursor_tools_classPrivateFieldGet(_prevActive, this) !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) {
pdf_cursor_tools_assertClassBrand(_PDFCursorTools_brand, this, _switchTool).call(this, pdf_cursor_tools_classPrivateFieldGet(_prevActive, this));
pdf_cursor_tools_classPrivateFieldSet(_prevActive, this, null);
}
};
this.eventBus._on("annotationeditormodechanged", _ref2 => {
let {
mode
} = _ref2;
annotationEditorMode = mode;
if (mode === AnnotationEditorType.NONE) {
enableActive();
} else {
disableActive();
}
});
this.eventBus._on("presentationmodechanged", _ref3 => {
let {
state
} = _ref3;
presentationModeState = state;
if (state === PresentationModeState.NORMAL) {
enableActive();
} else if (state === PresentationModeState.FULLSCREEN) {
disableActive();
}
});
}
;// ./web/pdf_document_properties.js
function pdf_document_properties_classPrivateMethodInitSpec(e, a) { pdf_document_properties_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_document_properties_classPrivateFieldInitSpec(e, t, a) { pdf_document_properties_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_document_properties_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_document_properties_classPrivateFieldSet(s, a, r) { return s.set(pdf_document_properties_assertClassBrand(s, a), r), r; }
function pdf_document_properties_classPrivateFieldGet(s, a) { return s.get(pdf_document_properties_assertClassBrand(s, a)); }
function pdf_document_properties_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"];
const US_PAGE_NAMES = {
"8.5x11": "pdfjs-document-properties-page-size-name-letter",
"8.5x14": "pdfjs-document-properties-page-size-name-legal"
};
const METRIC_PAGE_NAMES = {
"297x420": "pdfjs-document-properties-page-size-name-a-three",
"210x297": "pdfjs-document-properties-page-size-name-a-four"
};
function getPageName(size, isPortrait, pageNames) {
const width = isPortrait ? size.width : size.height;
const height = isPortrait ? size.height : size.width;
return pageNames[`${width}x${height}`];
}
var _fieldData = /*#__PURE__*/new WeakMap();
var _PDFDocumentProperties_brand = /*#__PURE__*/new WeakSet();
class PDFDocumentProperties {
constructor(_ref, overlayManager, eventBus, l10n, fileNameLookup, titleLookup) {
let {
dialog,
fields,
closeButton
} = _ref;
pdf_document_properties_classPrivateMethodInitSpec(this, _PDFDocumentProperties_brand);
pdf_document_properties_classPrivateFieldInitSpec(this, _fieldData, null);
this.dialog = dialog;
this.fields = fields;
this.overlayManager = overlayManager;
this.l10n = l10n;
this._fileNameLookup = fileNameLookup;
this.eventBus = eventBus;
this._titleLookup = titleLookup;
pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _reset).call(this);
closeButton.addEventListener("click", this.close.bind(this));
this.overlayManager.register(this.dialog);
eventBus._on("pagechanging", evt => {
this._currentPageNumber = evt.pageNumber;
});
eventBus._on("rotationchanging", evt => {
this._pagesRotation = evt.pagesRotation;
});
}
async open() {
await Promise.all([this.overlayManager.open(this.dialog), this._dataAvailableCapability.promise]);
this.eventBus.dispatch("propertiesdialogopen", this);
const currentPageNumber = this._currentPageNumber;
const pagesRotation = this._pagesRotation;
if (pdf_document_properties_classPrivateFieldGet(_fieldData, this) && currentPageNumber === pdf_document_properties_classPrivateFieldGet(_fieldData, this)._currentPageNumber && pagesRotation === pdf_document_properties_classPrivateFieldGet(_fieldData, this)._pagesRotation) {
pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _updateUI).call(this);
return;
}
const [{
info,
metadata,
contentLength
}, pdfPage] = await Promise.all([this.pdfDocument.getMetadata(), this.pdfDocument.getPage(currentPageNumber)]);
const [fileName, fileSize, title, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _parseFileSize).call(this, contentLength), this._titleLookup(), pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _parseDate).call(this, metadata?.get("xmp:createdate"), info.CreationDate), pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _parseDate).call(this, metadata?.get("xmp:modifydate"), info.ModDate), pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _parsePageSize).call(this, getPageSizeInches(pdfPage), pagesRotation), pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _parseLinearization).call(this, info.IsLinearized)]);
pdf_document_properties_classPrivateFieldSet(_fieldData, this, Object.freeze({
fileName,
fileSize,
title,
author: metadata?.get("dc:creator")?.join("\n") || info.Author,
subject: metadata?.get("dc:subject")?.join("\n") || info.Subject,
keywords: metadata?.get("pdf:keywords") || info.Keywords,
creationDate,
modificationDate,
creator: metadata?.get("xmp:creatortool") || info.Creator,
producer: metadata?.get("pdf:producer") || info.Producer,
version: info.PDFFormatVersion,
pageCount: this.pdfDocument.numPages,
pageSize,
linearized: isLinearized,
_currentPageNumber: currentPageNumber,
_pagesRotation: pagesRotation
}));
pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _updateUI).call(this);
const {
length
} = await this.pdfDocument.getDownloadInfo();
if (contentLength === length) {
return;
}
const data = Object.assign(Object.create(null), pdf_document_properties_classPrivateFieldGet(_fieldData, this));
data.fileSize = await pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _parseFileSize).call(this, length);
pdf_document_properties_classPrivateFieldSet(_fieldData, this, Object.freeze(data));
pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _updateUI).call(this);
}
async close() {
this.overlayManager.close(this.dialog, true);
this.eventBus.dispatch("propertiesdialogclose", this);
}
setDocument(pdfDocument) {
if (this.pdfDocument) {
pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _reset).call(this);
pdf_document_properties_assertClassBrand(_PDFDocumentProperties_brand, this, _updateUI).call(this);
}
if (!pdfDocument) {
return;
}
this.pdfDocument = pdfDocument;
this._dataAvailableCapability.resolve();
}
}
function _reset() {
this.pdfDocument = null;
pdf_document_properties_classPrivateFieldSet(_fieldData, this, null);
this._dataAvailableCapability = Promise.withResolvers();
this._currentPageNumber = 1;
this._pagesRotation = 0;
}
function _updateUI() {
if (pdf_document_properties_classPrivateFieldGet(_fieldData, this) && this.overlayManager.active !== this.dialog) {
return;
}
for (const id in this.fields) {
const content = pdf_document_properties_classPrivateFieldGet(_fieldData, this)?.[id];
this.fields[id].textContent = content || content === 0 ? content : "-";
}
}
async function _parseFileSize() {
let b = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
const kb = b / 1024,
mb = kb / 1024;
return kb ? this.l10n.get(mb >= 1 ? "pdfjs-document-properties-size-mb" : "pdfjs-document-properties-size-kb", {
mb,
kb,
b
}) : undefined;
}
async function _parsePageSize(pageSizeInches, pagesRotation) {
if (!pageSizeInches) {
return undefined;
}
if (pagesRotation % 180 !== 0) {
pageSizeInches = {
width: pageSizeInches.height,
height: pageSizeInches.width
};
}
const isPortrait = isPortraitOrientation(pageSizeInches),
nonMetric = NON_METRIC_LOCALES.includes(this.l10n.getLanguage());
let sizeInches = {
width: Math.round(pageSizeInches.width * 100) / 100,
height: Math.round(pageSizeInches.height * 100) / 100
};
let sizeMillimeters = {
width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,
height: Math.round(pageSizeInches.height * 25.4 * 10) / 10
};
let nameId = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);
if (!nameId && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {
const exactMillimeters = {
width: pageSizeInches.width * 25.4,
height: pageSizeInches.height * 25.4
};
const intMillimeters = {
width: Math.round(sizeMillimeters.width),
height: Math.round(sizeMillimeters.height)
};
if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {
nameId = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);
if (nameId) {
sizeInches = {
width: Math.round(intMillimeters.width / 25.4 * 100) / 100,
height: Math.round(intMillimeters.height / 25.4 * 100) / 100
};
sizeMillimeters = intMillimeters;
}
}
}
const [{
width,
height
}, unit, name, orientation] = await Promise.all([nonMetric ? sizeInches : sizeMillimeters, this.l10n.get(nonMetric ? "pdfjs-document-properties-page-size-unit-inches" : "pdfjs-document-properties-page-size-unit-millimeters"), nameId && this.l10n.get(nameId), this.l10n.get(isPortrait ? "pdfjs-document-properties-page-size-orientation-portrait" : "pdfjs-document-properties-page-size-orientation-landscape")]);
return this.l10n.get(name ? "pdfjs-document-properties-page-size-dimension-name-string" : "pdfjs-document-properties-page-size-dimension-string", {
width,
height,
unit,
name,
orientation
});
}
async function _parseDate(metadataDate, infoDate) {
const dateObj = Date.parse(metadataDate) || PDFDateString.toDateObject(infoDate);
return dateObj ? this.l10n.get("pdfjs-document-properties-date-time-string", {
dateObj: dateObj.valueOf()
}) : undefined;
}
function _parseLinearization(isLinearized) {
return this.l10n.get(isLinearized ? "pdfjs-document-properties-linearized-yes" : "pdfjs-document-properties-linearized-no");
}
;// ./web/pdf_find_utils.js
const CharacterType = {
SPACE: 0,
ALPHA_LETTER: 1,
PUNCT: 2,
HAN_LETTER: 3,
KATAKANA_LETTER: 4,
HIRAGANA_LETTER: 5,
HALFWIDTH_KATAKANA_LETTER: 6,
THAI_LETTER: 7
};
function isAlphabeticalScript(charCode) {
return charCode < 0x2e80;
}
function isAscii(charCode) {
return (charCode & 0xff80) === 0;
}
function isAsciiAlpha(charCode) {
return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;
}
function isAsciiDigit(charCode) {
return charCode >= 0x30 && charCode <= 0x39;
}
function isAsciiSpace(charCode) {
return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;
}
function isHan(charCode) {
return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;
}
function isKatakana(charCode) {
return charCode >= 0x30a0 && charCode <= 0x30ff;
}
function isHiragana(charCode) {
return charCode >= 0x3040 && charCode <= 0x309f;
}
function isHalfwidthKatakana(charCode) {
return charCode >= 0xff60 && charCode <= 0xff9f;
}
function isThai(charCode) {
return (charCode & 0xff80) === 0x0e00;
}
function getCharacterType(charCode) {
if (isAlphabeticalScript(charCode)) {
if (isAscii(charCode)) {
if (isAsciiSpace(charCode)) {
return CharacterType.SPACE;
} else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {
return CharacterType.ALPHA_LETTER;
}
return CharacterType.PUNCT;
} else if (isThai(charCode)) {
return CharacterType.THAI_LETTER;
} else if (charCode === 0xa0) {
return CharacterType.SPACE;
}
return CharacterType.ALPHA_LETTER;
}
if (isHan(charCode)) {
return CharacterType.HAN_LETTER;
} else if (isKatakana(charCode)) {
return CharacterType.KATAKANA_LETTER;
} else if (isHiragana(charCode)) {
return CharacterType.HIRAGANA_LETTER;
} else if (isHalfwidthKatakana(charCode)) {
return CharacterType.HALFWIDTH_KATAKANA_LETTER;
}
return CharacterType.ALPHA_LETTER;
}
let NormalizeWithNFKC;
function getNormalizeWithNFKC() {
NormalizeWithNFKC ||= ` ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩`;
return NormalizeWithNFKC;
}
;// ./web/pdf_find_controller.js
function pdf_find_controller_classPrivateMethodInitSpec(e, a) { pdf_find_controller_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_find_controller_classPrivateFieldInitSpec(e, t, a) { pdf_find_controller_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_find_controller_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_find_controller_classPrivateGetter(s, r, a) { return a(pdf_find_controller_assertClassBrand(s, r)); }
function pdf_find_controller_classPrivateFieldGet(s, a) { return s.get(pdf_find_controller_assertClassBrand(s, a)); }
function pdf_find_controller_classPrivateFieldSet(s, a, r) { return s.set(pdf_find_controller_assertClassBrand(s, a), r), r; }
function pdf_find_controller_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const FindState = {
FOUND: 0,
NOT_FOUND: 1,
WRAPPED: 2,
PENDING: 3
};
const FIND_TIMEOUT = 250;
const MATCH_SCROLL_OFFSET_TOP = -50;
const MATCH_SCROLL_OFFSET_LEFT = -400;
const CHARACTERS_TO_NORMALIZE = {
"\u2010": "-",
"\u2018": "'",
"\u2019": "'",
"\u201A": "'",
"\u201B": "'",
"\u201C": '"',
"\u201D": '"',
"\u201E": '"',
"\u201F": '"',
"\u00BC": "1/4",
"\u00BD": "1/2",
"\u00BE": "3/4"
};
const DIACRITICS_EXCEPTION = new Set([0x3099, 0x309a, 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b, 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714, 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f, 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed, 0x0c56, 0x0f71, 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80, 0x0f74]);
let DIACRITICS_EXCEPTION_STR;
const DIACRITICS_REG_EXP = /\p{M}+/gu;
const SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[\]\\])|(\p{P})|(\s+)|(\p{M})|(\p{L})/gu;
const NOT_DIACRITIC_FROM_END_REG_EXP = /([^\p{M}])\p{M}*$/u;
const NOT_DIACRITIC_FROM_START_REG_EXP = /^\p{M}*([^\p{M}])/u;
const SYLLABLES_REG_EXP = /[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g;
const SYLLABLES_LENGTHS = new Map();
const FIRST_CHAR_SYLLABLES_REG_EXP = "[\\u1100-\\u1112\\ud7a4-\\ud7af\\ud84a\\ud84c\\ud850\\ud854\\ud857\\ud85f]";
const NFKC_CHARS_TO_NORMALIZE = new Map();
let noSyllablesRegExp = null;
let withSyllablesRegExp = null;
function normalize(text) {
const syllablePositions = [];
let m;
while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) {
let {
index
} = m;
for (const char of m[0]) {
let len = SYLLABLES_LENGTHS.get(char);
if (!len) {
len = char.normalize("NFD").length;
SYLLABLES_LENGTHS.set(char, len);
}
syllablePositions.push([len, index++]);
}
}
const hasSyllables = syllablePositions.length > 0;
let normalizationRegex;
if (!hasSyllables && noSyllablesRegExp) {
normalizationRegex = noSyllablesRegExp;
} else if (hasSyllables && withSyllablesRegExp) {
normalizationRegex = withSyllablesRegExp;
} else {
const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join("");
const toNormalizeWithNFKC = getNormalizeWithNFKC();
const CJK = "(?:\\p{Ideographic}|[\u3040-\u30FF])";
const HKDiacritics = "(?:\u3099|\u309A)";
const BrokenWord = `\\p{Ll}-\\n(?=\\p{Ll})|\\p{Lu}-\\n(?=\\p{L})`;
const regexps = [`[${replace}]`, `[${toNormalizeWithNFKC}]`, `${HKDiacritics}\\n`, "\\p{M}+(?:-\\n)?", `${BrokenWord}`, "\\S-\\n", `${CJK}\\n`, "\\n", hasSyllables ? FIRST_CHAR_SYLLABLES_REG_EXP : "\\u0000"];
normalizationRegex = new RegExp(regexps.map(r => `(${r})`).join("|"), "gum");
if (hasSyllables) {
withSyllablesRegExp = normalizationRegex;
} else {
noSyllablesRegExp = normalizationRegex;
}
}
const rawDiacriticsPositions = [];
while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) {
rawDiacriticsPositions.push([m[0].length, m.index]);
}
let normalized = text.normalize("NFD");
const positions = [0, 0];
let rawDiacriticsIndex = 0;
let syllableIndex = 0;
let shift = 0;
let shiftOrigin = 0;
let eol = 0;
let hasDiacritics = false;
normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, p9, i) => {
i -= shiftOrigin;
if (p1) {
const replacement = CHARACTERS_TO_NORMALIZE[p1];
const jj = replacement.length;
for (let j = 1; j < jj; j++) {
positions.push(i - shift + j, shift - j);
}
shift -= jj - 1;
return replacement;
}
if (p2) {
let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2);
if (!replacement) {
replacement = p2.normalize("NFKC");
NFKC_CHARS_TO_NORMALIZE.set(p2, replacement);
}
const jj = replacement.length;
for (let j = 1; j < jj; j++) {
positions.push(i - shift + j, shift - j);
}
shift -= jj - 1;
return replacement;
}
if (p3) {
hasDiacritics = true;
if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {
++rawDiacriticsIndex;
} else {
positions.push(i - 1 - shift + 1, shift - 1);
shift -= 1;
shiftOrigin += 1;
}
positions.push(i - shift + 1, shift);
shiftOrigin += 1;
eol += 1;
return p3.charAt(0);
}
if (p4) {
const hasTrailingDashEOL = p4.endsWith("\n");
const len = hasTrailingDashEOL ? p4.length - 2 : p4.length;
hasDiacritics = true;
let jj = len;
if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {
jj -= rawDiacriticsPositions[rawDiacriticsIndex][0];
++rawDiacriticsIndex;
}
for (let j = 1; j <= jj; j++) {
positions.push(i - 1 - shift + j, shift - j);
}
shift -= jj;
shiftOrigin += jj;
if (hasTrailingDashEOL) {
i += len - 1;
positions.push(i - shift + 1, 1 + shift);
shift += 1;
shiftOrigin += 1;
eol += 1;
return p4.slice(0, len);
}
return p4;
}
if (p5) {
const len = p5.length - 2;
positions.push(i - shift + len, 1 + shift);
shift += 1;
shiftOrigin += 1;
eol += 1;
return p5.slice(0, -2);
}
if (p6) {
shiftOrigin += 1;
eol += 1;
return p6.slice(0, -1);
}
if (p7) {
const len = p7.length - 1;
positions.push(i - shift + len, shift);
shiftOrigin += 1;
eol += 1;
return p7.slice(0, -1);
}
if (p8) {
positions.push(i - shift + 1, shift - 1);
shift -= 1;
shiftOrigin += 1;
eol += 1;
return " ";
}
if (i + eol === syllablePositions[syllableIndex]?.[1]) {
const newCharLen = syllablePositions[syllableIndex][0] - 1;
++syllableIndex;
for (let j = 1; j <= newCharLen; j++) {
positions.push(i - (shift - j), shift - j);
}
shift -= newCharLen;
shiftOrigin += newCharLen;
}
return p9;
});
positions.push(normalized.length, shift);
const starts = new Uint32Array(positions.length >> 1);
const shifts = new Int32Array(positions.length >> 1);
for (let i = 0, ii = positions.length; i < ii; i += 2) {
starts[i >> 1] = positions[i];
shifts[i >> 1] = positions[i + 1];
}
return [normalized, [starts, shifts], hasDiacritics];
}
function getOriginalIndex(diffs, pos, len) {
if (!diffs) {
return [pos, len];
}
const [starts, shifts] = diffs;
const start = pos;
const end = pos + len - 1;
let i = binarySearchFirstItem(starts, x => x >= start);
if (starts[i] > start) {
--i;
}
let j = binarySearchFirstItem(starts, x => x >= end, i);
if (starts[j] > end) {
--j;
}
const oldStart = start + shifts[i];
const oldEnd = end + shifts[j];
const oldLen = oldEnd + 1 - oldStart;
return [oldStart, oldLen];
}
var _state = /*#__PURE__*/new WeakMap();
var _updateMatchesCountOnProgress = /*#__PURE__*/new WeakMap();
var _visitedPagesCount = /*#__PURE__*/new WeakMap();
var _PDFFindController_brand = /*#__PURE__*/new WeakSet();
class PDFFindController {
constructor(_ref) {
let {
linkService: _linkService,
eventBus,
updateMatchesCountOnProgress = true,
pageViewMode,
listenToEventBus
} = _ref;
pdf_find_controller_classPrivateMethodInitSpec(this, _PDFFindController_brand);
pdf_find_controller_classPrivateFieldInitSpec(this, _state, null);
pdf_find_controller_classPrivateFieldInitSpec(this, _updateMatchesCountOnProgress, true);
pdf_find_controller_classPrivateFieldInitSpec(this, _visitedPagesCount, 0);
this._linkService = _linkService;
this._eventBus = eventBus;
pdf_find_controller_classPrivateFieldSet(_updateMatchesCountOnProgress, this, updateMatchesCountOnProgress);
this._pageViewMode = pageViewMode;
this.onIsPageVisible = null;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_reset).call(this);
this._eventBus.on("pageviewmodechanged", _ref2 => {
let {
pageViewMode
} = _ref2;
this._pageViewMode = pageViewMode;
});
if (listenToEventBus) {
eventBus._on("find", pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _onFind).bind(this));
eventBus._on("findbarclose", pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _onFindBarClose).bind(this));
}
}
get highlightMatches() {
return this._highlightMatches;
}
get pageMatches() {
return this._pageMatches;
}
get pageMatchesLength() {
return this._pageMatchesLength;
}
get selected() {
return this._selected;
}
get state() {
return pdf_find_controller_classPrivateFieldGet(_state, this);
}
setDocument(pdfDocument) {
if (this._pdfDocument) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_reset).call(this);
}
if (!pdfDocument) {
return;
}
this._pdfDocument = pdfDocument;
this._firstPageCapability.resolve();
}
ngxFind(pdfFindParameters) {
const findResultPromises = [];
this._findResultResolvers = [];
for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
const {
promise,
resolve
} = Promise.withResolvers();
findResultPromises[i] = promise;
this._findResultResolvers[i] = resolve;
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _onFind).call(this, pdfFindParameters);
return findResultPromises;
}
ngxFindNext() {
const state = {
...pdf_find_controller_classPrivateFieldGet(_state, this),
type: "again",
findPrevious: false
};
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _onFind).call(this, state);
}
ngxFindPrevious() {
const state = {
...pdf_find_controller_classPrivateFieldGet(_state, this),
type: "again",
findPrevious: true
};
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _onFind).call(this, state);
}
scrollMatchIntoView(_ref3) {
let {
element = null,
selectedLeft = 0,
pageIndex = -1,
matchIndex = -1
} = _ref3;
if (pdf_find_controller_classPrivateFieldGet(_state, this)?.dontScrollIntoView) {
return;
}
if (!this._scrollMatches || !element) {
return;
}
this._scrollMatches = false;
const spot = {
top: MATCH_SCROLL_OFFSET_TOP,
left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT
};
scrollIntoView(element, spot, true, this._pageViewMode === "infinite-scroll");
}
_convertToRegExpString(query, hasDiacritics) {
const {
matchDiacritics
} = pdf_find_controller_classPrivateFieldGet(_state, this);
let isUnicode = false;
query = query.replaceAll(SPECIAL_CHARS_REG_EXP, (match, p1, p2, p3, p4, p5) => {
if (p1) {
return `[ ]*\\${p1}[ ]*`;
}
if (p2) {
return `[ ]*${p2}[ ]*`;
}
if (p3) {
return "[ ]+";
}
if (matchDiacritics) {
return p4 || p5;
}
if (p4) {
return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : "";
}
if (hasDiacritics) {
isUnicode = true;
return `${p5}\\p{M}*`;
}
return p5;
});
const trailingSpaces = "[ ]*";
if (query.endsWith(trailingSpaces)) {
query = query.slice(0, query.length - trailingSpaces.length);
}
if (matchDiacritics) {
if (hasDiacritics) {
DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(...DIACRITICS_EXCEPTION);
isUnicode = true;
query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\p{M}]|$)`;
}
}
return [isUnicode, query];
}
_calculateMatch(pageIndex) {
var _this$visitedPagesCou;
if (!pdf_find_controller_classPrivateFieldGet(_state, this)) {
return;
}
const query = pdf_find_controller_classPrivateGetter(_PDFFindController_brand, this, _get_query);
if (query.length === 0) {
return;
}
const pageContent = this._pageContents[pageIndex];
const matcherResult = this.match(query, pageContent, pageIndex);
const matches = this._pageMatches[pageIndex] = [];
const matchesLength = this._pageMatchesLength[pageIndex] = [];
const diffs = this._pageDiffs[pageIndex];
matcherResult?.forEach(_ref4 => {
let {
index,
length
} = _ref4;
const [matchPos, matchLen] = getOriginalIndex(diffs, index, length);
if (matchLen) {
matches.push(matchPos);
matchesLength.push(matchLen);
}
});
if (pdf_find_controller_classPrivateFieldGet(_state, this).highlightAll) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updatePage).call(this, pageIndex);
}
if (this._resumePageIdx === pageIndex) {
this._resumePageIdx = null;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextPageMatch).call(this);
}
const pageMatchesCount = matches.length;
this._matchesCountTotal += pageMatchesCount;
if (pdf_find_controller_classPrivateFieldGet(_updateMatchesCountOnProgress, this)) {
if (pageMatchesCount > 0) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateUIResultsCount).call(this, pageIndex);
}
} else if (pdf_find_controller_classPrivateFieldSet(_visitedPagesCount, this, (_this$visitedPagesCou = pdf_find_controller_classPrivateFieldGet(_visitedPagesCount, this), ++_this$visitedPagesCou)) === this._linkService.pagesCount) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateUIResultsCount).call(this, pageIndex);
}
}
match(query, pageContent, pageIndex) {
const hasDiacritics = this._hasDiacritics[pageIndex];
let isUnicode = false;
const {
caseSensitive,
findMultiple,
matchRegExp
} = pdf_find_controller_classPrivateFieldGet(_state, this);
if (findMultiple && typeof query === "string") {
query = query.trim().split(/\s+/);
}
if (matchRegExp && typeof query === "string") {
query = new RegExp(query, caseSensitive ? "g" : "gi");
isUnicode = hasDiacritics;
} else if (typeof query === "string") {
[isUnicode, query] = this._convertToRegExpString(query, hasDiacritics);
} else {
query = query.sort().reverse().map(q => {
const [isUnicodePart, queryPart] = this._convertToRegExpString(q, hasDiacritics);
isUnicode ||= isUnicodePart;
return `(${queryPart})`;
}).join("|");
}
if (!query) {
return undefined;
}
const {
entireWord
} = pdf_find_controller_classPrivateFieldGet(_state, this);
const flags = `g${isUnicode ? "u" : ""}${caseSensitive ? "" : "i"}`;
query = new RegExp(query, flags);
const matches = [];
let match;
while ((match = query.exec(pageContent)) !== null) {
if (entireWord && !pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _isEntireWord).call(this, pageContent, match.index, match[0].length)) {
continue;
}
matches.push({
index: match.index,
length: match[0].length
});
}
return matches;
}
}
function _onFind(state) {
if (!state) {
return;
}
const pdfDocument = this._pdfDocument;
const {
type
} = state;
if (pdf_find_controller_classPrivateFieldGet(_state, this) === null || pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _shouldDirtyMatch).call(this, state)) {
this._dirtyMatch = true;
}
pdf_find_controller_classPrivateFieldSet(_state, this, state);
if (type !== "highlightallchange") {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_updateUIState).call(this, FindState.PENDING);
} else {
const hasMatches = this._pageMatches.some(matches => matches.length > 0);
const emptyQuery = !this.state?.query;
const reportAsFound = emptyQuery || hasMatches;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_updateUIState).call(this, reportAsFound ? FindState.FOUND : FindState.NOT_FOUND);
}
this._firstPageCapability.promise.then(() => {
if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
return;
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_extractText).call(this);
const findbarClosed = !this._highlightMatches;
const pendingTimeout = !!this._findTimeout;
if (this._findTimeout) {
clearTimeout(this._findTimeout);
this._findTimeout = null;
}
if (!type) {
this._findTimeout = setTimeout(() => {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextMatch).call(this);
this._findTimeout = null;
}, FIND_TIMEOUT);
} else if (this._dirtyMatch) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextMatch).call(this);
} else if (type === "again") {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextMatch).call(this);
if (findbarClosed && pdf_find_controller_classPrivateFieldGet(_state, this).highlightAll) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateAllPages).call(this);
}
} else if (type === "highlightallchange") {
if (pendingTimeout) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextMatch).call(this);
} else {
this._highlightMatches = true;
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateAllPages).call(this);
} else {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextMatch).call(this);
}
});
}
function pdf_find_controller_reset() {
this._highlightMatches = false;
this._scrollMatches = false;
this._pdfDocument = null;
this._pageMatches = [];
this._pageMatchesLength = [];
pdf_find_controller_classPrivateFieldSet(_visitedPagesCount, this, 0);
pdf_find_controller_classPrivateFieldSet(_state, this, null);
this._selected = {
pageIdx: -1,
matchIdx: -1
};
this._offset = {
pageIdx: null,
matchIdx: null,
wrapped: false
};
this._extractTextPromises = [];
this._findResultResolvers = [];
this._pageContents = [];
this._pageDiffs = [];
this._hasDiacritics = [];
this._matchesCountTotal = 0;
this._pagesToSearch = null;
this._pendingFindMatches = new Set();
this._resumePageIdx = null;
this._dirtyMatch = false;
clearTimeout(this._findTimeout);
this._findTimeout = null;
this._firstPageCapability = Promise.withResolvers();
}
function _get_query(_this) {
const {
query
} = pdf_find_controller_classPrivateFieldGet(_state, _this);
if (typeof query === "string") {
if (query !== _this._rawQuery) {
_this._rawQuery = query;
[_this._normalizedQuery] = normalize(query);
}
return _this._normalizedQuery;
}
return (query || []).filter(q => !!q).map(q => normalize(q)[0]);
}
function _shouldDirtyMatch(state) {
const newQuery = state.query,
prevQuery = pdf_find_controller_classPrivateFieldGet(_state, this).query;
const newType = typeof newQuery,
prevType = typeof prevQuery;
if (newType !== prevType) {
return true;
}
if (newType === "string") {
if (newQuery !== prevQuery) {
return true;
}
} else if (JSON.stringify(newQuery) !== JSON.stringify(prevQuery)) {
return true;
}
switch (state.type) {
case "again":
const pageNumber = this._selected.pageIdx + 1;
const linkService = this._linkService;
return pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !(this.onIsPageVisible?.(pageNumber) ?? true);
case "highlightallchange":
return false;
}
return true;
}
function _isEntireWord(content, startIdx, length) {
let match = content.slice(0, startIdx).match(NOT_DIACRITIC_FROM_END_REG_EXP);
if (match) {
const first = content.charCodeAt(startIdx);
const limit = match[1].charCodeAt(0);
if (getCharacterType(first) === getCharacterType(limit)) {
return false;
}
}
match = content.slice(startIdx + length).match(NOT_DIACRITIC_FROM_START_REG_EXP);
if (match) {
const last = content.charCodeAt(startIdx + length - 1);
const limit = match[1].charCodeAt(0);
if (getCharacterType(last) === getCharacterType(limit)) {
return false;
}
}
return true;
}
function pdf_find_controller_extractText() {
if (this._extractTextPromises.length > 0) {
return;
}
let deferred = Promise.resolve();
const textOptions = {
disableNormalization: true
};
const pdfDoc = this._pdfDocument;
for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
const {
promise,
resolve
} = Promise.withResolvers();
this._extractTextPromises[i] = promise;
deferred = deferred.then(async () => {
if (pdfDoc !== this._pdfDocument) {
resolve();
return;
}
await pdfDoc.getPage(i + 1).then(pdfPage => pdfPage.getTextContent(textOptions)).then(textContent => {
const strBuf = [];
for (const textItem of textContent.items) {
strBuf.push(textItem.str);
if (textItem.hasEOL) {
strBuf.push("\n");
}
}
[this._pageContents[i], this._pageDiffs[i], this._hasDiacritics[i]] = normalize(strBuf.join(""));
resolve();
}, reason => {
NgxConsole.error(`Unable to get text content for page ${i + 1}`, reason);
this._pageContents[i] = "";
this._pageDiffs[i] = null;
this._hasDiacritics[i] = false;
resolve();
});
});
}
}
function _updatePage(index) {
if (this._scrollMatches && this._selected.pageIdx === index) {
if (!this.state.dontScrollIntoView) {
this._linkService.page = index + 1;
}
}
this._eventBus.dispatch("updatetextlayermatches", {
source: this,
pageIndex: index
});
}
function _updateAllPages() {
this._eventBus.dispatch("updatetextlayermatches", {
source: this,
pageIndex: -1
});
}
function _nextMatch() {
const previous = pdf_find_controller_classPrivateFieldGet(_state, this).findPrevious;
const currentPageIndex = this._linkService.page - 1;
const numPages = this._linkService.pagesCount;
this._highlightMatches = true;
if (this._dirtyMatch) {
this._dirtyMatch = false;
this._selected.pageIdx = this._selected.matchIdx = -1;
this._offset.pageIdx = currentPageIndex;
this._offset.matchIdx = null;
this._offset.wrapped = false;
this._resumePageIdx = null;
this._pageMatches.length = 0;
this._pageMatchesLength.length = 0;
pdf_find_controller_classPrivateFieldSet(_visitedPagesCount, this, 0);
this._matchesCountTotal = 0;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateAllPages).call(this);
for (let i = 0; i < numPages; i++) {
if (this._pendingFindMatches.has(i)) {
continue;
}
this._pendingFindMatches.add(i);
this._extractTextPromises[i].then(() => {
this._pendingFindMatches.delete(i);
this._calculateMatch(i);
});
}
}
const query = pdf_find_controller_classPrivateGetter(_PDFFindController_brand, this, _get_query);
if (query.length === 0) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_updateUIState).call(this, FindState.FOUND);
return;
}
if (this._resumePageIdx) {
return;
}
const offset = this._offset;
this._pagesToSearch = numPages;
if (offset.matchIdx !== null) {
const numPageMatches = this._pageMatches[offset.pageIdx].length;
if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {
offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateMatch).call(this, true);
return;
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _advanceOffsetPage).call(this, previous);
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _nextPageMatch).call(this);
}
function _matchesReady(matches) {
const offset = this._offset;
const numMatches = matches.length;
const previous = pdf_find_controller_classPrivateFieldGet(_state, this).findPrevious;
if (numMatches) {
offset.matchIdx = previous ? numMatches - 1 : 0;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateMatch).call(this, true);
return true;
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _advanceOffsetPage).call(this, previous);
if (offset.wrapped) {
offset.matchIdx = null;
if (this._pagesToSearch < 0) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateMatch).call(this, false);
return true;
}
}
return false;
}
function _nextPageMatch() {
if (this._resumePageIdx !== null) {
NgxConsole.error("There can only be one pending page.");
}
let matches = null;
do {
const pageIdx = this._offset.pageIdx;
matches = this._pageMatches[pageIdx];
if (!matches) {
this._resumePageIdx = pageIdx;
break;
}
} while (!pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _matchesReady).call(this, matches));
}
function _advanceOffsetPage(previous) {
const offset = this._offset;
const numPages = this._linkService.pagesCount;
offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;
offset.matchIdx = null;
this._pagesToSearch--;
if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
offset.pageIdx = previous ? numPages - 1 : 0;
offset.wrapped = true;
}
}
function _updateMatch() {
let found = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
let state = FindState.NOT_FOUND;
const wrapped = this._offset.wrapped;
this._offset.wrapped = false;
if (found) {
const previousPage = this._selected.pageIdx;
this._selected.pageIdx = this._offset.pageIdx;
this._selected.matchIdx = this._offset.matchIdx;
state = wrapped ? FindState.WRAPPED : FindState.FOUND;
if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updatePage).call(this, previousPage);
}
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_updateUIState).call(this, state, pdf_find_controller_classPrivateFieldGet(_state, this).findPrevious);
if (this._selected.pageIdx !== -1) {
this._scrollMatches = true;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updatePage).call(this, this._selected.pageIdx);
}
}
function _onFindBarClose(evt) {
const pdfDocument = this._pdfDocument;
this._firstPageCapability.promise.then(() => {
if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
return;
}
if (this._findTimeout) {
clearTimeout(this._findTimeout);
this._findTimeout = null;
}
if (this._resumePageIdx) {
this._resumePageIdx = null;
this._dirtyMatch = true;
}
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, pdf_find_controller_updateUIState).call(this, FindState.FOUND);
this._highlightMatches = false;
pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _updateAllPages).call(this);
});
}
function _requestMatchesCount() {
const {
pageIdx,
matchIdx
} = this._selected;
let current = 0,
total = this._matchesCountTotal;
if (matchIdx !== -1) {
for (let i = 0; i < pageIdx; i++) {
current += this._pageMatches[i]?.length || 0;
}
current += matchIdx + 1;
}
if (current < 1 || current > total) {
current = total = 0;
}
return {
current,
total
};
}
function _updateUIResultsCount(pageIndex) {
this._eventBus.dispatch("updatefindmatchescount", {
source: this,
matchesCount: pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _requestMatchesCount).call(this)
});
const pageMatchesCount = this._pageMatches[pageIndex].length;
if (this._findResultResolvers && this._findResultResolvers[pageIndex]) {
this._findResultResolvers[pageIndex](pageMatchesCount);
this._findResultResolvers[pageIndex] = null;
}
}
function pdf_find_controller_updateUIState(state) {
let previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!pdf_find_controller_classPrivateFieldGet(_updateMatchesCountOnProgress, this) && (pdf_find_controller_classPrivateFieldGet(_visitedPagesCount, this) !== this._linkService.pagesCount || state === FindState.PENDING)) {
return;
}
this._eventBus.dispatch("updatefindcontrolstate", {
source: this,
state,
previous,
entireWord: pdf_find_controller_classPrivateFieldGet(_state, this)?.entireWord ?? null,
matchesCount: pdf_find_controller_assertClassBrand(_PDFFindController_brand, this, _requestMatchesCount).call(this),
rawQuery: pdf_find_controller_classPrivateFieldGet(_state, this)?.query ?? null
});
}
;// ./web/pdf_find_bar.js
function pdf_find_bar_classPrivateMethodInitSpec(e, a) { pdf_find_bar_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_find_bar_classPrivateFieldInitSpec(e, t, a) { pdf_find_bar_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_find_bar_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_find_bar_classPrivateFieldGet(s, a) { return s.get(pdf_find_bar_assertClassBrand(s, a)); }
function pdf_find_bar_classPrivateFieldSet(s, a, r) { return s.set(pdf_find_bar_assertClassBrand(s, a), r), r; }
function pdf_find_bar_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const MATCHES_COUNT_LIMIT = 1000;
var pdf_find_bar_mainContainer = /*#__PURE__*/new WeakMap();
var _resizeObserver = /*#__PURE__*/new WeakMap();
var _PDFFindBar_brand = /*#__PURE__*/new WeakSet();
class PDFFindBar {
constructor(options, mainContainer, eventBus) {
pdf_find_bar_classPrivateMethodInitSpec(this, _PDFFindBar_brand);
pdf_find_bar_classPrivateFieldInitSpec(this, pdf_find_bar_mainContainer, void 0);
pdf_find_bar_classPrivateFieldInitSpec(this, _resizeObserver, new ResizeObserver(pdf_find_bar_assertClassBrand(_PDFFindBar_brand, this, _resizeObserverCallback).bind(this)));
this.opened = false;
this.bar = options.bar;
this.toggleButton = options.toggleButton;
this.findField = options.findField;
this.highlightAll = options.highlightAllCheckbox;
this.currentPage = options.findCurrentPageCheckbox;
this.pageRange = options.findPageRangeField;
this.caseSensitive = options.caseSensitiveCheckbox;
this.findMultipleCheckbox = options.findMultipleCheckbox;
this.matchRegExpCheckbox = options.matchRegExpCheckbox;
this.matchDiacritics = options.matchDiacriticsCheckbox;
this.entireWord = options.entireWordCheckbox;
this.findMsg = options.findMsg;
this.findResultsCount = options.findResultsCount;
this.findPreviousButton = options.findPreviousButton;
this.findNextButton = options.findNextButton;
this.eventBus = eventBus;
pdf_find_bar_classPrivateFieldSet(pdf_find_bar_mainContainer, this, mainContainer);
const checkedInputs = new Map(Array.from([[this.highlightAll, "highlightallchange"], [this.caseSensitive, "casesensitivitychange"], [this.entireWord, "entirewordchange"], [this.matchDiacritics, "diacriticmatchingchange"], [this.findMultipleCheckbox, "findmultiplechange"]]).filter(_ref => {
let [elem] = _ref;
return elem && elem instanceof Element;
}));
if (this.toggleButton) {
if (!isInsideNgxExtendedPdfViewer(this.toggleButton)) {
this.toggleButton.addEventListener("click", () => {
this.toggle();
});
}
}
this.findField.addEventListener("input", () => {
this.dispatchEvent("");
});
this.findField.parentElement.addEventListener("keydown", event => {
const {
keyCode
} = event;
if (keyCode !== 13 && keyCode !== 27) {
event.stopPropagation();
}
if (event.metaKey && event.key === "ArrowDown") {
event.preventDefault();
}
if (event.metaKey && event.key === "ArrowUp") {
event.preventDefault();
}
});
this.bar.addEventListener("keydown", event => {
const {
keyCode,
shiftKey,
target
} = event;
switch (keyCode) {
case 13:
if (target === this.findField) {
this.dispatchEvent("again", shiftKey);
} else if (checkedInputs.has(target)) {
target.checked = !target.checked;
this.dispatchEvent(checkedInputs.get(target));
}
break;
case 27:
this.close();
event.stopPropagation();
break;
}
});
this.findPreviousButton.addEventListener("click", () => {
this.dispatchEvent("again", true);
});
this.findNextButton.addEventListener("click", () => {
this.dispatchEvent("again", false);
});
for (const [elem, evtName] of checkedInputs) {
elem.addEventListener("click", () => {
this.dispatchEvent(evtName);
});
}
this.matchRegExpCheckbox?.addEventListener("click", () => {
if (this.matchRegExpCheckbox.checked) {
this.findMultipleCheckbox.checked = false;
this.findMultipleCheckbox.disabled = true;
this.matchDiacritics.checked = false;
this.matchDiacritics.disabled = true;
this.entireWord.checked = false;
this.entireWord.disabled = true;
} else {
this.findMultipleCheckbox.disabled = false;
this.matchDiacritics.disabled = false;
this.entireWord.disabled = false;
}
this.dispatchEvent("findregexpchange");
});
}
reset() {
this.updateUIState();
}
dispatchEvent(type) {
let findPrev = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
this.eventBus.dispatch("find", {
source: this,
type,
query: this.findField.value,
caseSensitive: this.caseSensitive.checked,
findMultiple: this.findMultipleCheckbox?.checked,
matchRegExp: this.matchRegExpCheckbox?.checked,
entireWord: this.entireWord.checked,
highlightAll: this.highlightAll.checked,
findPrevious: findPrev,
matchDiacritics: this.matchDiacritics.checked
});
}
updateUIState(state, previous, matchesCount) {
const {
findField,
findMsg
} = this;
let findMsgId = "",
status = "";
switch (state) {
case FindState.FOUND:
break;
case FindState.PENDING:
status = "pending";
break;
case FindState.NOT_FOUND:
findMsgId = "pdfjs-find-not-found";
status = "notFound";
break;
case FindState.WRAPPED:
findMsgId = previous ? "pdfjs-find-reached-top" : "pdfjs-find-reached-bottom";
break;
}
findField.setAttribute("data-status", status);
findField.setAttribute("aria-invalid", state === FindState.NOT_FOUND);
findMsg.setAttribute("data-status", status);
if (findMsgId) {
findMsg.setAttribute("data-l10n-id", findMsgId);
} else {
findMsg.removeAttribute("data-l10n-id");
findMsg.textContent = "";
}
this.updateResultsCount(matchesCount);
}
updateResultsCount() {
let {
current = 0,
total = 0
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const {
findResultsCount
} = this;
if (total > 0) {
const limit = MATCHES_COUNT_LIMIT;
findResultsCount.setAttribute("data-l10n-id", total > limit ? "pdfjs-find-match-count-limit" : "pdfjs-find-match-count");
findResultsCount.setAttribute("data-l10n-args", JSON.stringify({
limit,
current,
total
}));
} else {
findResultsCount.removeAttribute("data-l10n-id");
findResultsCount.textContent = "";
}
}
open() {
if (!this.opened) {
pdf_find_bar_classPrivateFieldGet(_resizeObserver, this).observe(pdf_find_bar_classPrivateFieldGet(pdf_find_bar_mainContainer, this));
pdf_find_bar_classPrivateFieldGet(_resizeObserver, this).observe(this.bar);
this.opened = true;
toggleExpandedBtn(this.toggleButton, true, this.bar);
}
this.findField.select();
this.findField.focus();
this.dispatchEvent("");
this.eventBus.dispatch("findbaropen", {
source: this
});
}
close() {
if (!this.opened) {
return;
}
pdf_find_bar_classPrivateFieldGet(_resizeObserver, this).disconnect();
this.opened = false;
toggleExpandedBtn(this.toggleButton, false, this.bar);
this.eventBus.dispatch("findbarclose", {
source: this
});
}
toggle() {
if (this.opened) {
this.close();
} else {
this.open();
}
}
}
function _resizeObserverCallback() {
const {
bar
} = this;
bar.classList.remove("wrapContainers");
const findbarHeight = bar.clientHeight;
const inputContainerHeight = bar.firstElementChild.clientHeight;
if (findbarHeight > inputContainerHeight) {
bar.classList.add("wrapContainers");
}
}
;// ./web/pdf_history.js
function pdf_history_classPrivateMethodInitSpec(e, a) { pdf_history_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_history_classPrivateFieldInitSpec(e, t, a) { pdf_history_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_history_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_history_classPrivateFieldSet(s, a, r) { return s.set(pdf_history_assertClassBrand(s, a), r), r; }
function pdf_history_classPrivateFieldGet(s, a) { return s.get(pdf_history_assertClassBrand(s, a)); }
function pdf_history_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const HASH_CHANGE_TIMEOUT = 1000;
const POSITION_UPDATED_THRESHOLD = 50;
const UPDATE_VIEWAREA_TIMEOUT = 1000;
function getCurrentHash() {
return document.location.hash;
}
var _eventAbortController = /*#__PURE__*/new WeakMap();
var _PDFHistory_brand = /*#__PURE__*/new WeakSet();
class PDFHistory {
constructor(_ref) {
let {
linkService,
eventBus
} = _ref;
pdf_history_classPrivateMethodInitSpec(this, _PDFHistory_brand);
pdf_history_classPrivateFieldInitSpec(this, _eventAbortController, null);
this.linkService = linkService;
this.eventBus = eventBus;
this._initialized = false;
this._fingerprint = "";
this.reset();
this.eventBus._on("pagesinit", () => {
this._isPagesLoaded = false;
this.eventBus._on("pagesloaded", evt => {
this._isPagesLoaded = !!evt.pagesCount;
}, {
once: true
});
});
}
initialize(_ref2) {
let {
fingerprint,
resetHistory = false,
updateUrl = false
} = _ref2;
if (!fingerprint || typeof fingerprint !== "string") {
NgxConsole.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
return;
}
if (this._initialized) {
this.reset();
}
const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint;
this._fingerprint = fingerprint;
this._updateUrl = updateUrl === true;
this._initialized = true;
pdf_history_assertClassBrand(_PDFHistory_brand, this, _bindEvents).call(this);
const state = window.history.state;
this._popStateInProgress = false;
this._blockHashChange = 0;
this._currentHash = getCurrentHash();
this._numPositionUpdates = 0;
this._uid = this._maxUid = 0;
this._destination = null;
this._position = null;
if (!pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidState).call(this, state, true) || resetHistory) {
const {
hash,
page,
rotation
} = pdf_history_assertClassBrand(_PDFHistory_brand, this, _parseCurrentHash).call(this, true);
if (!hash || reInitialized || resetHistory) {
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, null, true);
return;
}
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, {
hash,
page,
rotation
}, true);
return;
}
const destination = state.destination;
pdf_history_assertClassBrand(_PDFHistory_brand, this, _updateInternalState).call(this, destination, state.uid, true);
if (destination.rotation !== undefined) {
this._initialRotation = destination.rotation;
}
if (destination.dest) {
this._initialBookmark = JSON.stringify(destination.dest);
this._destination.page = null;
} else if (destination.hash) {
this._initialBookmark = destination.hash;
} else if (destination.page) {
this._initialBookmark = `page=${destination.page}`;
}
}
reset() {
if (this._initialized) {
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pageHide).call(this);
this._initialized = false;
pdf_history_assertClassBrand(_PDFHistory_brand, this, _unbindEvents).call(this);
}
if (this._updateViewareaTimeout) {
clearTimeout(this._updateViewareaTimeout);
this._updateViewareaTimeout = null;
}
this._initialBookmark = null;
this._initialRotation = null;
}
push(_ref3) {
let {
namedDest = null,
explicitDest,
pageNumber
} = _ref3;
if (!this._initialized) {
return;
}
if (namedDest && typeof namedDest !== "string") {
NgxConsole.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`);
return;
} else if (!Array.isArray(explicitDest)) {
NgxConsole.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`);
return;
} else if (!pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidPage).call(this, pageNumber)) {
if (pageNumber !== null || this._destination) {
NgxConsole.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`);
return;
}
}
const hash = namedDest || JSON.stringify(explicitDest);
if (!hash) {
return;
}
let forceReplace = false;
if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {
if (this._destination.page) {
return;
}
forceReplace = true;
}
if (this._popStateInProgress && !forceReplace) {
return;
}
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, {
dest: explicitDest,
hash,
page: pageNumber,
rotation: this.linkService.rotation
}, forceReplace);
if (!this._popStateInProgress) {
this._popStateInProgress = true;
Promise.resolve().then(() => {
this._popStateInProgress = false;
});
}
}
pushPage(pageNumber) {
if (!this._initialized) {
return;
}
if (!pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidPage).call(this, pageNumber)) {
NgxConsole.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`);
return;
}
if (this._destination?.page === pageNumber) {
return;
}
if (this._popStateInProgress) {
return;
}
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, {
dest: null,
hash: `page=${pageNumber}`,
page: pageNumber,
rotation: this.linkService.rotation
});
if (!this._popStateInProgress) {
this._popStateInProgress = true;
Promise.resolve().then(() => {
this._popStateInProgress = false;
});
}
}
pushCurrentPosition() {
if (!this._initialized || this._popStateInProgress) {
return;
}
pdf_history_assertClassBrand(_PDFHistory_brand, this, _tryPushCurrentPosition).call(this);
}
back() {
if (!this._initialized || this._popStateInProgress) {
return;
}
const state = window.history.state;
if (pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidState).call(this, state) && state.uid > 0) {
window.history.back();
}
}
forward() {
if (!this._initialized || this._popStateInProgress) {
return;
}
const state = window.history.state;
if (pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidState).call(this, state) && state.uid < this._maxUid) {
window.history.forward();
}
}
get popStateInProgress() {
return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
}
get initialBookmark() {
return this._initialized ? this._initialBookmark : null;
}
get initialRotation() {
return this._initialized ? this._initialRotation : null;
}
}
function _pushOrReplaceState(destination) {
let forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
const shouldReplace = forceReplace || !this._destination;
const newState = {
fingerprint: this._fingerprint,
uid: shouldReplace ? this._uid : this._uid + 1,
destination
};
pdf_history_assertClassBrand(_PDFHistory_brand, this, _updateInternalState).call(this, destination, newState.uid);
let newUrl;
if (this._updateUrl && destination?.hash) {
const {
href,
protocol
} = document.location;
if (protocol !== "file:") {
newUrl = updateUrlHash(href, destination.hash);
}
}
if (shouldReplace) {
window.history.replaceState(newState, "", newUrl);
} else {
window.history.pushState(newState, "", newUrl);
}
}
function _tryPushCurrentPosition() {
let temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!this._position) {
return;
}
let position = this._position;
if (temporary) {
position = Object.assign(Object.create(null), this._position);
position.temporary = true;
}
if (!this._destination) {
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, position);
return;
}
if (this._destination.temporary) {
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, position, true);
return;
}
if (this._destination.hash === position.hash) {
return;
}
if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
return;
}
let forceReplace = false;
if (this._destination.page >= position.first && this._destination.page <= position.page) {
if (this._destination.dest !== undefined || !this._destination.first) {
return;
}
forceReplace = true;
}
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, position, forceReplace);
}
function _isValidPage(val) {
return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount;
}
function _isValidState(state) {
let checkReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!state) {
return false;
}
if (state.fingerprint !== this._fingerprint) {
if (checkReload) {
if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) {
return false;
}
const [perfEntry] = performance.getEntriesByType("navigation");
if (perfEntry?.type !== "reload") {
return false;
}
} else {
return false;
}
}
if (!Number.isInteger(state.uid) || state.uid < 0) {
return false;
}
if (state.destination === null || typeof state.destination !== "object") {
return false;
}
return true;
}
function _updateInternalState(destination, uid) {
let removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (this._updateViewareaTimeout) {
clearTimeout(this._updateViewareaTimeout);
this._updateViewareaTimeout = null;
}
if (removeTemporary && destination?.temporary) {
delete destination.temporary;
}
this._destination = destination;
this._uid = uid;
this._maxUid = Math.max(this._maxUid, uid);
this._numPositionUpdates = 0;
}
function _parseCurrentHash() {
let checkNameddest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
const hash = unescape(getCurrentHash()).substring(1);
const params = parseQueryString(hash);
const nameddest = params.get("nameddest") || "";
let page = params.get("page") | 0;
if (!pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidPage).call(this, page) || checkNameddest && nameddest.length > 0) {
page = null;
}
return {
hash,
page,
rotation: this.linkService.rotation
};
}
function _updateViewarea(_ref4) {
let {
location
} = _ref4;
if (this._updateViewareaTimeout) {
clearTimeout(this._updateViewareaTimeout);
this._updateViewareaTimeout = null;
}
this._position = {
hash: location.pdfOpenParams.substring(1),
page: this.linkService.page,
first: location.pageNumber,
rotation: location.rotation
};
if (this._popStateInProgress) {
return;
}
if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
this._numPositionUpdates++;
}
if (UPDATE_VIEWAREA_TIMEOUT > 0) {
this._updateViewareaTimeout = setTimeout(() => {
if (!this._popStateInProgress) {
pdf_history_assertClassBrand(_PDFHistory_brand, this, _tryPushCurrentPosition).call(this, true);
}
this._updateViewareaTimeout = null;
}, UPDATE_VIEWAREA_TIMEOUT);
}
}
function _popState(_ref5) {
let {
state
} = _ref5;
const newHash = getCurrentHash(),
hashChanged = this._currentHash !== newHash;
this._currentHash = newHash;
if (!state) {
this._uid++;
const {
hash,
page,
rotation
} = pdf_history_assertClassBrand(_PDFHistory_brand, this, _parseCurrentHash).call(this);
pdf_history_assertClassBrand(_PDFHistory_brand, this, _pushOrReplaceState).call(this, {
hash,
page,
rotation
}, true);
return;
}
if (!pdf_history_assertClassBrand(_PDFHistory_brand, this, _isValidState).call(this, state)) {
return;
}
this._popStateInProgress = true;
if (hashChanged) {
this._blockHashChange++;
waitOnEventOrTimeout({
target: window,
name: "hashchange",
delay: HASH_CHANGE_TIMEOUT
}).then(() => {
this._blockHashChange--;
});
}
const destination = state.destination;
pdf_history_assertClassBrand(_PDFHistory_brand, this, _updateInternalState).call(this, destination, state.uid, true);
if (isValidRotation(destination.rotation)) {
this.linkService.rotation = destination.rotation;
}
if (destination.dest) {
this.linkService.goToDestination(destination.dest);
} else if (destination.hash) {
if (this.linkService.setHash) {
this.linkService.setHash(destination.hash);
}
} else if (destination.page) {
this.linkService.page = destination.page;
}
Promise.resolve().then(() => {
this._popStateInProgress = false;
});
}
function _pageHide() {
if (!this._destination || this._destination.temporary) {
pdf_history_assertClassBrand(_PDFHistory_brand, this, _tryPushCurrentPosition).call(this);
}
}
function _bindEvents() {
if (pdf_history_classPrivateFieldGet(_eventAbortController, this)) {
return;
}
pdf_history_classPrivateFieldSet(_eventAbortController, this, new AbortController());
const {
signal
} = pdf_history_classPrivateFieldGet(_eventAbortController, this);
this.eventBus._on("updateviewarea", pdf_history_assertClassBrand(_PDFHistory_brand, this, _updateViewarea).bind(this), {
signal
});
window.addEventListener("popstate", pdf_history_assertClassBrand(_PDFHistory_brand, this, _popState).bind(this), {
signal
});
window.addEventListener("pagehide", pdf_history_assertClassBrand(_PDFHistory_brand, this, _pageHide).bind(this), {
signal
});
}
function _unbindEvents() {
pdf_history_classPrivateFieldGet(_eventAbortController, this)?.abort();
pdf_history_classPrivateFieldSet(_eventAbortController, this, null);
}
function isDestHashesEqual(destHash, pushHash) {
if (typeof destHash !== "string" || typeof pushHash !== "string") {
return false;
}
if (destHash === pushHash) {
return true;
}
const nameddest = parseQueryString(destHash).get("nameddest");
if (nameddest === pushHash) {
return true;
}
return false;
}
function isDestArraysEqual(firstDest, secondDest) {
function isEntryEqual(first, second) {
if (typeof first !== typeof second) {
return false;
}
if (Array.isArray(first) || Array.isArray(second)) {
return false;
}
if (first !== null && typeof first === "object" && second !== null) {
if (Object.keys(first).length !== Object.keys(second).length) {
return false;
}
for (const key in first) {
if (!isEntryEqual(first[key], second[key])) {
return false;
}
}
return true;
}
return first === second || Number.isNaN(first) && Number.isNaN(second);
}
if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
return false;
}
if (firstDest.length !== secondDest.length) {
return false;
}
for (let i = 0, ii = firstDest.length; i < ii; i++) {
if (!isEntryEqual(firstDest[i], secondDest[i])) {
return false;
}
}
return true;
}
;// ./web/pdf_layer_viewer.js
function pdf_layer_viewer_classPrivateMethodInitSpec(e, a) { pdf_layer_viewer_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_layer_viewer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_layer_viewer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _PDFLayerViewer_brand = /*#__PURE__*/new WeakSet();
class PDFLayerViewer extends BaseTreeViewer {
constructor(options) {
super(options);
pdf_layer_viewer_classPrivateMethodInitSpec(this, _PDFLayerViewer_brand);
this.eventBus._on("optionalcontentconfigchanged", evt => {
pdf_layer_viewer_assertClassBrand(_PDFLayerViewer_brand, this, _updateLayers).call(this, evt.promise);
});
this.eventBus._on("resetlayers", () => {
pdf_layer_viewer_assertClassBrand(_PDFLayerViewer_brand, this, _updateLayers).call(this);
});
this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this));
}
reset() {
super.reset();
this._optionalContentConfig = null;
this._optionalContentVisibility?.clear();
this._optionalContentVisibility = null;
}
_dispatchEvent(layersCount) {
this.eventBus.dispatch("layersloaded", {
source: this,
layersCount
});
}
_bindLink(element, _ref) {
let {
groupId,
input
} = _ref;
const setVisibility = () => {
const visible = input.checked;
this._optionalContentConfig.setVisibility(groupId, visible);
const cached = this._optionalContentVisibility.get(groupId);
if (cached) {
cached.visible = visible;
}
this.eventBus.dispatch("optionalcontentconfig", {
source: this,
promise: Promise.resolve(this._optionalContentConfig)
});
};
element.onclick = evt => {
if (evt.target === input) {
setVisibility();
return true;
} else if (evt.target !== element) {
return true;
}
input.checked = !input.checked;
setVisibility();
return false;
};
}
_setNestedName(element, _ref2) {
let {
name = null
} = _ref2;
if (typeof name === "string") {
element.textContent = this._normalizeTextContent(name);
return;
}
element.setAttribute("data-l10n-id", "pdfjs-additional-layers");
element.style.fontStyle = "italic";
this._l10n.translateOnce(element);
}
_addToggleButton(div, _ref3) {
let {
name = null
} = _ref3;
super._addToggleButton(div, name === null);
}
_toggleAllTreeItems() {
if (!this._optionalContentConfig) {
return;
}
super._toggleAllTreeItems();
}
render(_ref4) {
let {
optionalContentConfig,
pdfDocument
} = _ref4;
if (this._optionalContentConfig) {
this.reset();
}
this._optionalContentConfig = optionalContentConfig || null;
this._pdfDocument = pdfDocument || null;
const groups = optionalContentConfig?.getOrder();
if (!groups) {
this._dispatchEvent(0);
return;
}
this._optionalContentVisibility = new Map();
const fragment = document.createDocumentFragment(),
queue = [{
parent: fragment,
groups
}];
let layersCount = 0,
hasAnyNesting = false;
while (queue.length > 0) {
const levelData = queue.shift();
for (const groupId of levelData.groups) {
const div = document.createElement("div");
div.className = "treeItem";
const element = document.createElement("a");
div.append(element);
if (typeof groupId === "object") {
hasAnyNesting = true;
this._addToggleButton(div, groupId);
this._setNestedName(element, groupId);
const itemsDiv = document.createElement("div");
itemsDiv.className = "treeItems";
div.append(itemsDiv);
queue.push({
parent: itemsDiv,
groups: groupId.order
});
} else {
const group = optionalContentConfig.getGroup(groupId);
const input = document.createElement("input");
this._bindLink(element, {
groupId,
input
});
input.type = "checkbox";
input.checked = group.visible;
this._optionalContentVisibility.set(groupId, {
input,
visible: input.checked
});
const label = document.createElement("label");
label.textContent = this._normalizeTextContent(group.name);
label.append(input);
element.append(label);
layersCount++;
}
levelData.parent.append(div);
}
}
this._finishRendering(fragment, layersCount, hasAnyNesting);
}
}
async function _updateLayers() {
let promise = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (!this._optionalContentConfig) {
return;
}
const pdfDocument = this._pdfDocument;
const optionalContentConfig = await (promise || pdfDocument.getOptionalContentConfig({
intent: "display"
}));
if (pdfDocument !== this._pdfDocument) {
return;
}
if (promise) {
for (const [groupId, cached] of this._optionalContentVisibility) {
const group = optionalContentConfig.getGroup(groupId);
if (group && cached.visible !== group.visible) {
cached.input.checked = cached.visible = !cached.visible;
}
}
return;
}
this.eventBus.dispatch("optionalcontentconfig", {
source: this,
promise: Promise.resolve(optionalContentConfig)
});
this.render({
optionalContentConfig,
pdfDocument: this._pdfDocument
});
}
;// ./web/pdf_outline_viewer.js
class PDFOutlineViewer extends BaseTreeViewer {
constructor(options) {
super(options);
this.linkService = options.linkService;
this.downloadManager = options.downloadManager;
this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this));
this.eventBus._on("currentoutlineitem", this._currentOutlineItem.bind(this));
this.eventBus._on("pagechanging", evt => {
this._currentPageNumber = evt.pageNumber;
});
this.eventBus._on("pagesloaded", evt => {
this._isPagesLoaded = !!evt.pagesCount;
this._currentOutlineItemCapability?.resolve(this._isPagesLoaded);
});
this.eventBus._on("sidebarviewchanged", evt => {
this._sidebarView = evt.view;
});
}
reset() {
super.reset();
this._outline = null;
this._pageNumberToDestHashCapability = null;
this._currentPageNumber = 1;
this._isPagesLoaded = null;
this._currentOutlineItemCapability?.resolve(false);
this._currentOutlineItemCapability = null;
}
_dispatchEvent(outlineCount) {
this._currentOutlineItemCapability = Promise.withResolvers();
if (outlineCount === 0 || this._pdfDocument?.loadingParams.disableAutoFetch) {
this._currentOutlineItemCapability.resolve(false);
} else if (this._isPagesLoaded !== null) {
this._currentOutlineItemCapability.resolve(this._isPagesLoaded);
}
this.eventBus.dispatch("outlineloaded", {
source: this,
outlineCount,
currentOutlineItemPromise: this._currentOutlineItemCapability.promise
});
}
_bindLink(element, _ref) {
let {
url,
newWindow,
action,
attachment,
dest,
setOCGState
} = _ref;
const {
linkService
} = this;
if (url) {
linkService.addLinkAttributes(element, url, newWindow);
return;
}
if (action) {
element.href = linkService.getAnchorUrl("");
element.onclick = () => {
linkService.executeNamedAction(action);
return false;
};
return;
}
if (attachment) {
element.href = linkService.getAnchorUrl("");
element.onclick = () => {
this.downloadManager.openOrDownloadData(attachment.content, attachment.filename);
return false;
};
return;
}
if (setOCGState) {
element.href = linkService.getAnchorUrl("");
element.onclick = () => {
linkService.executeSetOCGState(setOCGState);
return false;
};
return;
}
element.href = linkService.getDestinationHash(dest);
element.onclick = evt => {
this._updateCurrentTreeItem(evt.target.parentNode);
if (dest) {
linkService.goToDestination(dest);
}
return false;
};
}
_setStyles(element, _ref2) {
let {
bold,
italic
} = _ref2;
if (bold) {
element.style.fontWeight = "bold";
}
if (italic) {
element.style.fontStyle = "italic";
}
}
_addToggleButton(div, _ref3) {
let {
count,
items
} = _ref3;
let hidden = false;
if (count < 0) {
let totalCount = items.length;
if (totalCount > 0) {
const queue = [...items];
while (queue.length > 0) {
const {
count: nestedCount,
items: nestedItems
} = queue.shift();
if (nestedCount > 0 && nestedItems.length > 0) {
totalCount += nestedItems.length;
queue.push(...nestedItems);
}
}
}
if (Math.abs(count) === totalCount) {
hidden = true;
}
}
super._addToggleButton(div, hidden);
}
_toggleAllTreeItems() {
if (!this._outline) {
return;
}
super._toggleAllTreeItems();
}
render(_ref4) {
let {
outline,
pdfDocument
} = _ref4;
if (this._outline) {
this.reset();
}
this._outline = outline || null;
this._pdfDocument = pdfDocument || null;
if (!outline) {
this._dispatchEvent(0);
return;
}
const fragment = document.createDocumentFragment();
const queue = [{
parent: fragment,
items: outline
}];
let outlineCount = 0,
hasAnyNesting = false;
while (queue.length > 0) {
const levelData = queue.shift();
for (const item of levelData.items) {
const div = document.createElement("div");
div.className = "treeItem";
const element = document.createElement("a");
this._bindLink(element, item);
this._setStyles(element, item);
element.textContent = this._normalizeTextContent(item.title);
div.append(element);
if (item.items.length > 0) {
hasAnyNesting = true;
this._addToggleButton(div, item);
const itemsDiv = document.createElement("div");
itemsDiv.className = "treeItems";
div.append(itemsDiv);
queue.push({
parent: itemsDiv,
items: item.items
});
}
levelData.parent.append(div);
outlineCount++;
}
}
this._finishRendering(fragment, outlineCount, hasAnyNesting);
}
async _currentOutlineItem() {
if (!this._isPagesLoaded) {
throw new Error("_currentOutlineItem: All pages have not been loaded.");
}
if (!this._outline || !this._pdfDocument) {
return;
}
const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument);
if (!pageNumberToDestHash) {
return;
}
this._updateCurrentTreeItem(null);
if (this._sidebarView !== SidebarView.OUTLINE) {
return;
}
for (let i = this._currentPageNumber; i > 0; i--) {
const destHash = pageNumberToDestHash.get(i);
if (!destHash) {
continue;
}
const linkElement = this.container.querySelector(`a[href="${destHash}"]`);
if (!linkElement) {
continue;
}
this._scrollToCurrentTreeItem(linkElement.parentNode);
break;
}
}
async _getPageNumberToDestHash(pdfDocument) {
if (this._pageNumberToDestHashCapability) {
return this._pageNumberToDestHashCapability.promise;
}
this._pageNumberToDestHashCapability = Promise.withResolvers();
const pageNumberToDestHash = new Map(),
pageNumberNesting = new Map();
const queue = [{
nesting: 0,
items: this._outline
}];
while (queue.length > 0) {
const levelData = queue.shift(),
currentNesting = levelData.nesting;
for (const {
dest,
items
} of levelData.items) {
let explicitDest, pageNumber;
if (typeof dest === "string") {
explicitDest = await pdfDocument.getDestination(dest);
if (pdfDocument !== this._pdfDocument) {
return null;
}
} else {
explicitDest = dest;
}
if (Array.isArray(explicitDest)) {
const [destRef] = explicitDest;
if (destRef && typeof destRef === "object") {
pageNumber = pdfDocument.cachedPageNumber(destRef);
} else if (Number.isInteger(destRef)) {
pageNumber = destRef + 1;
}
if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) {
const destHash = this.linkService.getDestinationHash(dest);
pageNumberToDestHash.set(pageNumber, destHash);
pageNumberNesting.set(pageNumber, currentNesting);
}
}
if (items.length > 0) {
queue.push({
nesting: currentNesting + 1,
items
});
}
}
}
this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null);
return this._pageNumberToDestHashCapability.promise;
}
}
;// ./web/pdf_presentation_mode.js
function pdf_presentation_mode_classPrivateMethodInitSpec(e, a) { pdf_presentation_mode_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_presentation_mode_classPrivateFieldInitSpec(e, t, a) { pdf_presentation_mode_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_presentation_mode_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_presentation_mode_classPrivateFieldGet(s, a) { return s.get(pdf_presentation_mode_assertClassBrand(s, a)); }
function pdf_presentation_mode_classPrivateFieldSet(s, a, r) { return s.set(pdf_presentation_mode_assertClassBrand(s, a), r), r; }
function pdf_presentation_mode_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DELAY_BEFORE_HIDING_CONTROLS = 3000;
const ACTIVE_SELECTOR = "pdfPresentationMode";
const CONTROLS_SELECTOR = "pdfPresentationModeControls";
const MOUSE_SCROLL_COOLDOWN_TIME = 50;
const PAGE_SWITCH_THRESHOLD = 0.1;
const SWIPE_MIN_DISTANCE_THRESHOLD = 50;
const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
var pdf_presentation_mode_state = /*#__PURE__*/new WeakMap();
var _args = /*#__PURE__*/new WeakMap();
var _fullscreenChangeAbortController = /*#__PURE__*/new WeakMap();
var _windowAbortController = /*#__PURE__*/new WeakMap();
var _PDFPresentationMode_brand = /*#__PURE__*/new WeakSet();
class PDFPresentationMode {
constructor(_ref) {
let {
container,
pdfViewer,
eventBus
} = _ref;
pdf_presentation_mode_classPrivateMethodInitSpec(this, _PDFPresentationMode_brand);
pdf_presentation_mode_classPrivateFieldInitSpec(this, pdf_presentation_mode_state, PresentationModeState.UNKNOWN);
pdf_presentation_mode_classPrivateFieldInitSpec(this, _args, null);
pdf_presentation_mode_classPrivateFieldInitSpec(this, _fullscreenChangeAbortController, null);
pdf_presentation_mode_classPrivateFieldInitSpec(this, _windowAbortController, null);
this.container = container;
this.pdfViewer = pdfViewer;
this.eventBus = eventBus;
this.contextMenuOpen = false;
this.mouseScrollTimeStamp = 0;
this.mouseScrollDelta = 0;
this.touchSwipeState = null;
}
async request() {
const {
container,
pdfViewer
} = this;
if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) {
return false;
}
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _addFullscreenChangeListeners).call(this);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _notifyStateChange).call(this, PresentationModeState.CHANGING);
const promise = container.requestFullscreen();
pdf_presentation_mode_classPrivateFieldSet(_args, this, {
pageNumber: pdfViewer.currentPageNumber,
scaleValue: pdfViewer.currentScaleValue,
scrollMode: pdfViewer.scrollMode,
spreadMode: null,
annotationEditorMode: null
});
if (pdfViewer.spreadMode !== SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) {
console.warn("Ignoring Spread modes when entering PresentationMode, " + "since the document may contain varying page sizes.");
pdf_presentation_mode_classPrivateFieldGet(_args, this).spreadMode = pdfViewer.spreadMode;
}
if (pdfViewer.annotationEditorMode !== AnnotationEditorType.DISABLE) {
pdf_presentation_mode_classPrivateFieldGet(_args, this).annotationEditorMode = pdfViewer.annotationEditorMode;
}
try {
await promise;
pdfViewer.focus();
return true;
} catch {
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _removeFullscreenChangeListeners).call(this);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _notifyStateChange).call(this, PresentationModeState.NORMAL);
}
return false;
}
get active() {
return pdf_presentation_mode_classPrivateFieldGet(pdf_presentation_mode_state, this) === PresentationModeState.CHANGING || pdf_presentation_mode_classPrivateFieldGet(pdf_presentation_mode_state, this) === PresentationModeState.FULLSCREEN;
}
_prepareFullscreenMode() {
const domElement = document.getElementsByClassName("zoom")[0].parentElement;
const parent = domElement.parentElement;
this.ngxContainer = parent;
for (let i = 0; i < parent.childElementCount; i++) {
if (parent.children.item(i) === domElement) {
this.ngxContainerIndex = i;
}
}
parent.removeChild(domElement);
document.body.append(domElement);
const siblings = document.body.children;
for (let i = 0; i < siblings.length; i++) {
const s = siblings.item(i);
if (s !== domElement && s instanceof HTMLElement) {
s.classList.add("hidden-by-fullscreen");
}
}
document.getElementById("sidebarContainer").classList.add("hidden-by-fullscreen");
document.getElementsByClassName("toolbar")[0].classList.add("hidden-by-fullscreen");
}
_tidyUpFullscreenMode() {
if (this.ngxContainer) {
const domElement = document.getElementsByClassName("zoom")[0].parentElement;
document.body.removeChild(domElement);
if (this.ngxContainerIndex >= this.ngxContainer.childElementCount) {
this.ngxContainer.append(domElement);
} else {
this.ngxContainer.insertBefore(domElement, this.ngxContainer.children.item(this.ngxContainerIndex));
}
this.ngxContainer = undefined;
const siblings = document.body.children;
for (let i = 0; i < siblings.length; i++) {
const s = siblings.item(i);
if (s !== domElement && s instanceof HTMLElement) {
if (s.classList.contains("hidden-by-fullscreen")) {
s.classList.remove("hidden-by-fullscreen");
}
}
}
document.getElementById("sidebarContainer").classList.remove("hidden-by-fullscreen");
document.getElementsByClassName("toolbar")[0].classList.remove("hidden-by-fullscreen");
}
}
}
function _mouseWheel(evt) {
if (!this.active) {
return;
}
evt.preventDefault();
const delta = normalizeWheelEventDelta(evt);
const currentTime = Date.now();
const storedTime = this.mouseScrollTimeStamp;
if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
return;
}
if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _resetMouseScrollState).call(this);
}
this.mouseScrollDelta += delta;
if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {
const totalDelta = this.mouseScrollDelta;
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _resetMouseScrollState).call(this);
const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage();
if (success) {
this.mouseScrollTimeStamp = currentTime;
}
}
}
function _notifyStateChange(state) {
pdf_presentation_mode_classPrivateFieldSet(pdf_presentation_mode_state, this, state);
this.eventBus.dispatch("presentationmodechanged", {
source: this,
state
});
}
function _enter() {
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _notifyStateChange).call(this, PresentationModeState.FULLSCREEN);
this.container.classList.add(ACTIVE_SELECTOR);
setTimeout(() => {
this.pdfViewer.scrollMode = ScrollMode.PAGE;
if (pdf_presentation_mode_classPrivateFieldGet(_args, this).spreadMode !== null) {
this.pdfViewer.spreadMode = SpreadMode.NONE;
}
this.pdfViewer.currentPageNumber = pdf_presentation_mode_classPrivateFieldGet(_args, this).pageNumber;
this.pdfViewer.currentScaleValue = "page-fit";
if (pdf_presentation_mode_classPrivateFieldGet(_args, this).annotationEditorMode !== null) {
this.pdfViewer.annotationEditorMode = {
mode: AnnotationEditorType.NONE
};
}
}, 0);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _addWindowListeners).call(this);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _showControls).call(this);
this.contextMenuOpen = false;
document.getSelection().empty();
}
function _exit() {
const pageNumber = this.pdfViewer.currentPageNumber;
this.container.classList.remove(ACTIVE_SELECTOR);
setTimeout(() => {
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _removeFullscreenChangeListeners).call(this);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _notifyStateChange).call(this, PresentationModeState.NORMAL);
this.pdfViewer.scrollMode = pdf_presentation_mode_classPrivateFieldGet(_args, this).scrollMode;
if (pdf_presentation_mode_classPrivateFieldGet(_args, this).spreadMode !== null) {
this.pdfViewer.spreadMode = pdf_presentation_mode_classPrivateFieldGet(_args, this).spreadMode;
}
this.pdfViewer.currentScaleValue = pdf_presentation_mode_classPrivateFieldGet(_args, this).scaleValue;
this.pdfViewer.currentPageNumber = pageNumber;
if (pdf_presentation_mode_classPrivateFieldGet(_args, this).annotationEditorMode !== null) {
this.pdfViewer.annotationEditorMode = {
mode: pdf_presentation_mode_classPrivateFieldGet(_args, this).annotationEditorMode
};
}
pdf_presentation_mode_classPrivateFieldSet(_args, this, null);
}, 0);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _removeWindowListeners).call(this);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _hideControls).call(this);
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _resetMouseScrollState).call(this);
this.contextMenuOpen = false;
}
function _mouseDown(evt) {
if (this.contextMenuOpen) {
this.contextMenuOpen = false;
evt.preventDefault();
return;
}
if (evt.button !== 0) {
return;
}
if (evt.target.href && evt.target.parentNode?.hasAttribute("data-internal-link")) {
return;
}
evt.preventDefault();
if (evt.shiftKey) {
this.pdfViewer.previousPage();
} else {
this.pdfViewer.nextPage();
}
}
function _contextMenu() {
this.contextMenuOpen = true;
}
function _showControls() {
if (this.controlsTimeout) {
clearTimeout(this.controlsTimeout);
} else {
this.container.classList.add(CONTROLS_SELECTOR);
}
this.controlsTimeout = setTimeout(() => {
this.container.classList.remove(CONTROLS_SELECTOR);
delete this.controlsTimeout;
}, DELAY_BEFORE_HIDING_CONTROLS);
}
function _hideControls() {
if (!this.controlsTimeout) {
return;
}
clearTimeout(this.controlsTimeout);
this.container.classList.remove(CONTROLS_SELECTOR);
delete this.controlsTimeout;
}
function _resetMouseScrollState() {
this.mouseScrollTimeStamp = 0;
this.mouseScrollDelta = 0;
}
function _touchSwipe(evt) {
if (!this.active) {
return;
}
if (evt.touches.length > 1) {
this.touchSwipeState = null;
return;
}
switch (evt.type) {
case "touchstart":
this.touchSwipeState = {
startX: evt.touches[0].pageX,
startY: evt.touches[0].pageY,
endX: evt.touches[0].pageX,
endY: evt.touches[0].pageY
};
break;
case "touchmove":
if (this.touchSwipeState === null) {
return;
}
this.touchSwipeState.endX = evt.touches[0].pageX;
this.touchSwipeState.endY = evt.touches[0].pageY;
evt.preventDefault();
break;
case "touchend":
if (this.touchSwipeState === null) {
return;
}
let delta = 0;
const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;
const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;
const absAngle = Math.abs(Math.atan2(dy, dx));
if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {
delta = dx;
} else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {
delta = dy;
}
if (delta > 0) {
this.pdfViewer.previousPage();
} else if (delta < 0) {
this.pdfViewer.nextPage();
}
break;
}
}
function _addWindowListeners() {
if (pdf_presentation_mode_classPrivateFieldGet(_windowAbortController, this)) {
return;
}
pdf_presentation_mode_classPrivateFieldSet(_windowAbortController, this, new AbortController());
const {
signal
} = pdf_presentation_mode_classPrivateFieldGet(_windowAbortController, this);
const touchSwipeBind = pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _touchSwipe).bind(this);
window.addEventListener("mousemove", pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _showControls).bind(this), {
signal
});
window.addEventListener("mousedown", pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _mouseDown).bind(this), {
signal
});
window.addEventListener("wheel", pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _mouseWheel).bind(this), {
passive: false,
signal
});
window.addEventListener("keydown", pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _resetMouseScrollState).bind(this), {
signal
});
window.addEventListener("contextmenu", pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _contextMenu).bind(this), {
signal
});
window.addEventListener("touchstart", touchSwipeBind, {
signal
});
window.addEventListener("touchmove", touchSwipeBind, {
signal
});
window.addEventListener("touchend", touchSwipeBind, {
signal
});
}
function _removeWindowListeners() {
pdf_presentation_mode_classPrivateFieldGet(_windowAbortController, this)?.abort();
pdf_presentation_mode_classPrivateFieldSet(_windowAbortController, this, null);
}
function _addFullscreenChangeListeners() {
if (pdf_presentation_mode_classPrivateFieldGet(_fullscreenChangeAbortController, this)) {
return;
}
pdf_presentation_mode_classPrivateFieldSet(_fullscreenChangeAbortController, this, new AbortController());
window.addEventListener("fullscreenchange", () => {
if (document.fullscreenElement) {
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _enter).call(this);
} else {
pdf_presentation_mode_assertClassBrand(_PDFPresentationMode_brand, this, _exit).call(this);
}
}, {
signal: pdf_presentation_mode_classPrivateFieldGet(_fullscreenChangeAbortController, this).signal
});
}
function _removeFullscreenChangeListeners() {
pdf_presentation_mode_classPrivateFieldGet(_fullscreenChangeAbortController, this)?.abort();
pdf_presentation_mode_classPrivateFieldSet(_fullscreenChangeAbortController, this, null);
}
;// ./web/xfa_layer_builder.js
class XfaLayerBuilder {
constructor(_ref) {
let {
pdfPage,
annotationStorage = null,
linkService,
xfaHtml = null
} = _ref;
this.pdfPage = pdfPage;
this.annotationStorage = annotationStorage;
this.linkService = linkService;
this.xfaHtml = xfaHtml;
this.div = null;
this._cancelled = false;
}
async render(_ref2) {
let {
viewport,
intent = "display"
} = _ref2;
if (intent === "print") {
const parameters = {
viewport: viewport.clone({
dontFlip: true
}),
div: this.div,
xfaHtml: this.xfaHtml,
annotationStorage: this.annotationStorage,
linkService: this.linkService,
intent
};
this.div = document.createElement("div");
parameters.div = this.div;
return XfaLayer.render(parameters);
}
const xfaHtml = await this.pdfPage.getXfa();
if (this._cancelled || !xfaHtml) {
return {
textDivs: []
};
}
const parameters = {
viewport: viewport.clone({
dontFlip: true
}),
div: this.div,
xfaHtml,
annotationStorage: this.annotationStorage,
linkService: this.linkService,
intent
};
if (this.div) {
return XfaLayer.update(parameters);
}
this.div = document.createElement("div");
parameters.div = this.div;
return XfaLayer.render(parameters);
}
cancel() {
this._cancelled = true;
}
hide() {
if (!this.div) {
return;
}
this.div.hidden = true;
}
}
;// ./web/print_utils.js
function getXfaHtmlForPrinting(printContainer, pdfDocument) {
const xfaHtml = pdfDocument.allXfaHtml;
const linkService = new SimpleLinkService();
const scale = Math.round(PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100;
for (const xfaPage of xfaHtml.children) {
const page = document.createElement("div");
page.className = "xfaPrintedPage";
printContainer.append(page);
const builder = new XfaLayerBuilder({
pdfPage: null,
annotationStorage: pdfDocument.annotationStorage,
linkService,
xfaHtml: xfaPage
});
const viewport = getXfaPageViewport(xfaPage, {
scale
});
builder.render({
viewport,
intent: "print"
});
page.append(builder.div);
}
}
;// ./node_modules/canvas-size/dist/canvas-size.esm.js
function canvasTest(settings) {
const size = settings.sizes.shift();
const width = Math.max(Math.ceil(size[0]), 1);
const height = Math.max(Math.ceil(size[1]), 1);
const fill = [width - 1, height - 1, 1, 1];
const testTimeStart = performance.now();
const isWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
let cropCvs, testCvs;
if (isWorker) {
cropCvs = new OffscreenCanvas(1, 1);
testCvs = new OffscreenCanvas(width, height);
} else {
cropCvs = document.createElement("canvas");
cropCvs.width = 1;
cropCvs.height = 1;
testCvs = document.createElement("canvas");
testCvs.width = width;
testCvs.height = height;
}
const cropCtx = cropCvs.getContext("2d");
const testCtx = testCvs.getContext("2d");
if (testCtx) {
testCtx.fillRect.apply(testCtx, fill);
cropCtx.drawImage(testCvs, width - 1, height - 1, 1, 1, 0, 0, 1, 1);
}
const isTestPass = cropCtx && cropCtx.getImageData(0, 0, 1, 1).data[3] !== 0;
const testTime = parseInt(performance.now() - testTimeStart);
[cropCvs, testCvs].forEach(cvs => {
cvs.height = 0;
cvs.width = 0;
});
if (isWorker) {
postMessage({
width: width,
height: height,
testTime: testTime,
isTestPass: isTestPass
});
if (!isTestPass && settings.sizes.length) {
setTimeout(() => {
canvasTest(settings);
}, 0);
}
} else if (isTestPass) {
settings.onSuccess({
width: width,
height: height,
testTime: testTime
});
} else {
settings.onError({
width: width,
height: height,
testTime: testTime
});
if (settings.sizes.length) {
setTimeout(() => {
canvasTest(settings);
}, 0);
}
}
return isTestPass;
}
const testSizes = {
area: [16384, 14188, 11402, 11180, 10836, 8192, 4096, 1],
height: [8388607, 65535, 32767, 16384, 8192, 4096, 1],
width: [4194303, 65535, 32767, 16384, 8192, 4096, 1]
};
const defaults = {
max: null,
min: 1,
sizes: [],
step: 1024,
useWorker: false,
onError: Function.prototype,
onSuccess: Function.prototype
};
const workerJobs = {};
function createSizesArray(settings) {
const isArea = settings.width === settings.height;
const isWidth = settings.height === 1;
const isHeight = settings.width === 1;
const sizes = [];
if (!settings.width || !settings.height) {
settings.sizes.forEach(testSize => {
const width = isArea || isWidth ? testSize : 1;
const height = isArea || isHeight ? testSize : 1;
sizes.push([width, height]);
});
} else {
const testMin = settings.min || defaults.min;
const testStep = settings.step || defaults.step;
let testSize = Math.max(settings.width, settings.height);
while (testSize >= testMin) {
const width = isArea || isWidth ? testSize : 1;
const height = isArea || isHeight ? testSize : 1;
sizes.push([width, height]);
testSize -= testStep;
}
}
return sizes;
}
function handleMethod(settings) {
const isBrowser = typeof window !== "undefined";
const hasPromiseSupport = isBrowser && "Promise" in window;
const hasCanvasSupport = isBrowser && "HTMLCanvasElement" in window;
const hasOffscreenCanvasSupport = isBrowser && "OffscreenCanvas" in window;
const jobID = URL.createObjectURL(new Blob([])).slice(-36);
const totalTimeStart = performance.now();
const {
onError: onError,
onSuccess: onSuccess,
...settingsWithoutCallbacks
} = settings;
const getTotalTime = () => parseInt(performance.now() - totalTimeStart);
let worker = null;
if (!hasCanvasSupport) {
return false;
}
if (settings.useWorker && hasOffscreenCanvasSupport) {
const js = `\n var canvasTest = ${canvasTest.toString()};\n onmessage = function(e) {\n canvasTest(e.data);\n };\n `;
const blob = new Blob([js], {
type: "application/javascript"
});
const blobURL = URL.createObjectURL(blob);
worker = new Worker(blobURL);
URL.revokeObjectURL(blobURL);
worker.onmessage = function (e) {
const {
width: width,
height: height,
testTime: testTime,
isTestPass: isTestPass
} = e.data;
const results = {
width: width,
height: height,
testTime: testTime,
totalTime: getTotalTime()
};
if (isTestPass) {
workerJobs[jobID].onSuccess(results);
delete workerJobs[jobID];
} else {
workerJobs[jobID].onError(results);
}
};
}
if (hasPromiseSupport) {
return new Promise(resolve => {
const promiseSettings = {
...settings,
onError(_ref) {
let {
width: width,
height: height,
testTime: testTime
} = _ref;
const results = {
width: width,
height: height,
testTime: testTime,
totalTime: getTotalTime()
};
let isLastTest;
if (settings.sizes.length === 0) {
isLastTest = true;
} else {
const [[lastWidth, lastHeight]] = settings.sizes.slice(-1);
isLastTest = width === lastWidth && height === lastHeight;
}
onError(results);
if (isLastTest) {
resolve({
...results,
success: false
});
}
},
onSuccess(_ref2) {
let {
width: width,
height: height,
testTime: testTime
} = _ref2;
const results = {
width: width,
height: height,
testTime: testTime,
totalTime: getTotalTime()
};
onSuccess(results);
resolve({
...results,
success: true
});
}
};
if (worker) {
const {
onError: onError,
onSuccess: onSuccess
} = promiseSettings;
workerJobs[jobID] = {
onError: onError,
onSuccess: onSuccess
};
worker.postMessage(settingsWithoutCallbacks);
} else {
canvasTest(promiseSettings);
}
});
} else {
if (worker) {
workerJobs[jobID] = {
onError: onError,
onSuccess: onSuccess
};
worker.postMessage(settingsWithoutCallbacks);
} else {
return canvasTest(settings);
}
}
}
const canvasSize = {
maxArea() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const sizes = createSizesArray({
width: options.max,
height: options.max,
min: options.min,
step: options.step,
sizes: [...testSizes.area]
});
const settings = {
...defaults,
...options,
sizes: sizes
};
return handleMethod(settings);
},
maxHeight() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const sizes = createSizesArray({
width: 1,
height: options.max,
min: options.min,
step: options.step,
sizes: [...testSizes.height]
});
const settings = {
...defaults,
...options,
sizes: sizes
};
return handleMethod(settings);
},
maxWidth() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const sizes = createSizesArray({
width: options.max,
height: 1,
min: options.min,
step: options.step,
sizes: [...testSizes.width]
});
const settings = {
...defaults,
...options,
sizes: sizes
};
return handleMethod(settings);
},
test() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const settings = {
...defaults,
...options
};
settings.sizes = [...settings.sizes];
if (settings.width && settings.height) {
settings.sizes = [[settings.width, settings.height]];
}
return handleMethod(settings);
}
};
;// ./web/max_canvas_size.js
function max_canvas_size_defineProperty(e, r, t) { return (r = max_canvas_size_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function max_canvas_size_toPropertyKey(t) { var i = max_canvas_size_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function max_canvas_size_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class MaxCanvasSize {
static async determineMaxArea() {
const {
success,
width,
height
} = await canvasSize.maxArea({
useWorker: true
});
if (!success) {
MaxCanvasSize.maxWidth = 4096;
MaxCanvasSize.maxArea = 16777216;
return 4096;
}
MaxCanvasSize.maxArea = width * height;
return MaxCanvasSize.maxArea;
}
static async determineMaxWidth() {
const {
width
} = await canvasSize.maxWidth({
useWorker: true
});
MaxCanvasSize.maxWidth = width;
return MaxCanvasSize.maxWidth;
}
static async determineMaxHeight() {
const {
height
} = await canvasSize.maxHeight({
useWorker: true
});
MaxCanvasSize.maxHeight = height;
return MaxCanvasSize.maxHeight;
}
static async determineMaxDimensions() {
if (MaxCanvasSize.maxWidth) {
return MaxCanvasSize.maxWidth;
}
await this.determineMaxArea();
await this.determineMaxHeight();
await this.determineMaxWidth();
return MaxCanvasSize.maxWidth;
}
static async reduceToMaxCanvasSize(width, height) {
let divisor = 1;
if (width >= 4096 || height >= 4096) {
await this.determineMaxDimensions();
divisor = Math.max(width / MaxCanvasSize.maxWidth, height / MaxCanvasSize.maxHeight, Math.sqrt(width * height / MaxCanvasSize.maxArea));
if (divisor > 1) {
divisor = Math.ceil(1 + 100 * divisor) / 100;
}
}
return divisor;
}
}
max_canvas_size_defineProperty(MaxCanvasSize, "maxWidth", null);
max_canvas_size_defineProperty(MaxCanvasSize, "maxHeight", null);
max_canvas_size_defineProperty(MaxCanvasSize, "maxArea", null);
;// ./web/pdf_print_service.js
function pdf_print_service_defineProperty(e, r, t) { return (r = pdf_print_service_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function pdf_print_service_toPropertyKey(t) { var i = pdf_print_service_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function pdf_print_service_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
let activeService = null;
let dialog = null;
let overlayManager = null;
let viewerApp = {
initialized: false
};
async function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) {
const scratchCanvas = activeService.scratchCanvas;
let PRINT_UNITS = printResolution / PixelsPerInch.PDF;
const canvasWidth = Math.floor(size.width * PRINT_UNITS);
const canvasHeight = Math.floor(size.height * PRINT_UNITS);
const divisor = await MaxCanvasSize.reduceToMaxCanvasSize(canvasWidth, canvasHeight);
if (divisor > 1) {
const reduction = Math.round((divisor - 1) * 100);
PRINT_UNITS = Math.ceil(0.95 * PRINT_UNITS / divisor);
const dpi = PRINT_UNITS * PixelsPerInch.PDF;
warn(`Page ${pageNumber}: Reduced the maximum resolution by ${reduction}% because the browser can't render larger canvases. The resolution is now ${dpi} DPI.`);
}
scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
const ctx = scratchCanvas.getContext("2d");
ctx.save();
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);
ctx.restore();
return Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function (_ref) {
let [pdfPage, printAnnotationStorage] = _ref;
const renderContext = {
canvasContext: ctx,
transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
viewport: pdfPage.getViewport({
scale: 1,
rotation: size.rotation
}),
intent: "print",
annotationMode: AnnotationMode.ENABLE_STORAGE,
optionalContentConfigPromise,
printAnnotationStorage
};
const renderTask = pdfPage.render(renderContext);
return renderTask.promise.catch(reason => {
if (!(reason instanceof RenderingCancelledException)) {
console.error(reason);
}
throw reason;
});
});
}
class PDFPrintService {
constructor(_ref2, isInPDFPrintRange, filteredPageCount) {
let {
pdfDocument,
pagesOverview,
printResolution,
printAnnotationStoragePromise = null,
eventBus,
cspPolicyService,
pageOrder = null
} = _ref2;
this.pdfDocument = pdfDocument;
this.pagesOverview = pagesOverview;
this._printResolution = printResolution || 150;
this.pageOrder = pageOrder || Array.from({
length: pdfDocument.numPages
}, (_, i) => i + 1);
this._optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({
intent: "print"
});
this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve();
this.currentPage = -1;
this.scratchCanvas = document.createElement("canvas");
this.eventBus = eventBus;
this.filteredPageCount = filteredPageCount;
this.isInPDFPrintRange = isInPDFPrintRange;
this.cspPolicyService = cspPolicyService;
}
layout() {
this.throwIfInactive();
const body = document.querySelector("body");
body.setAttribute("data-pdfjsprinting", true);
const html = document.querySelector("html");
html.setAttribute("data-pdfjsprinting", true);
const {
width,
height
} = this.pagesOverview[0];
const hasEqualPageSizes = this.pagesOverview.every(size => size.width === width && size.height === height);
if (!hasEqualPageSizes) {
NgxConsole.warn("Not all pages have the same size. The printed result may be incorrect!");
}
this.pageStyleSheet = document.createElement("style");
const textContent = `@page { size: ${width}pt ${height}pt;}`;
if (this.cspPolicyService) {
this.cspPolicyService.addTrustedCSS(this.pageStyleSheet, textContent);
} else {
this.pageStyleSheet.textContent = textContent;
}
body.append(this.pageStyleSheet);
}
destroy() {
if (activeService !== this) {
return;
}
this.printContainer.remove();
this.printContainer = null;
const body = document.querySelector("body");
body.removeAttribute("data-pdfjsprinting");
const html = document.querySelector("html");
html.removeAttribute("data-pdfjsprinting");
if (this.pageStyleSheet) {
this.pageStyleSheet.remove();
this.pageStyleSheet = null;
}
this.scratchCanvas.width = this.scratchCanvas.height = 0;
this.scratchCanvas = null;
activeService = null;
ensureOverlay().then(function () {
overlayManager.closeIfActive(dialog);
overlayManager.unregister(dialog);
overlayPromise = undefined;
});
}
renderPages() {
if (this.pdfDocument.isPureXfa) {
getXfaHtmlForPrinting(this.printContainer, this.pdfDocument);
return Promise.resolve();
}
const pageCount = this.pagesOverview.length;
const renderNextPage = (resolve, reject) => {
this.throwIfInactive();
while (true) {
++this.currentPage;
if (this.currentPage >= pageCount) {
break;
}
if (!this.isInPDFPrintRange || this.isInPDFPrintRange(this.currentPage)) {
break;
}
}
if (this.currentPage >= pageCount) {
renderProgress(this.filteredPageCount ?? pageCount, this.filteredPageCount ?? pageCount, this.eventBus);
resolve();
return;
}
const index = this.currentPage;
renderProgress(index, this.filteredPageCount ?? pageCount, this.eventBus);
renderPage(this, this.pdfDocument, this.pageOrder[index], this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise, this._printAnnotationStoragePromise).then(this.useRenderedPage.bind(this)).then(function () {
renderNextPage(resolve, reject);
}, reject);
};
return new Promise(renderNextPage);
}
useRenderedPage() {
this.throwIfInactive();
const img = document.createElement("img");
this.scratchCanvas.toBlob(blob => {
img.src = URL.createObjectURL(blob);
});
const wrapper = document.createElement("div");
wrapper.className = "printedPage";
wrapper.append(img);
this.printContainer.append(wrapper);
const {
promise,
resolve,
reject
} = Promise.withResolvers();
img.onload = resolve;
img.onerror = reject;
promise.catch(() => {}).then(() => {
URL.revokeObjectURL(img.src);
});
return promise;
}
performPrint() {
this.throwIfInactive();
return new Promise(resolve => {
setTimeout(() => {
if (!this.active) {
resolve();
return;
}
print.call(window);
const isIOS = navigator.platform && ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes(navigator.platform) || navigator.userAgent.includes("Mac") && "ontouchend" in document;
const isAndroid = /Android/i.test(navigator.userAgent);
const optimalTimeout = isIOS || isAndroid ? 1500 : 100;
setTimeout(resolve, optimalTimeout);
}, 0);
});
}
get active() {
return this === activeService;
}
throwIfInactive() {
if (!this.active) {
throw new Error("This print request was cancelled or completed.");
}
}
}
const print = window.print;
function printPdf() {
if (!this.enablePrint) {
return;
}
if (activeService) {
NgxConsole.warn("Ignored this.printPDF() because of a pending print job.");
return;
}
ensureOverlay().then(function () {
if (activeService) {
overlayManager.open(dialog);
}
});
try {
dispatchEvent("beforeprint");
} finally {
if (!activeService) {
NgxConsole.error("Expected print service to be initialized.");
ensureOverlay().then(function () {
overlayManager.closeIfActive(dialog);
});
} else {
const activeServiceOnEntry = activeService;
const printContainer = document.createElement("div");
printContainer.id = "printContainer";
document.body.append(printContainer);
activeServiceOnEntry.printContainer = printContainer;
activeService.renderPages().then(function () {
const progressIndicator = document.getElementById("printServiceDialog");
if (progressIndicator) {
progressIndicator.classList.add("hidden");
}
return activeServiceOnEntry.performPrint();
}).catch(() => {}).then(() => {
if (activeServiceOnEntry.active) {
abort();
}
});
}
}
}
;
function dispatchEvent(eventType) {
const event = new CustomEvent(eventType, {
bubbles: false,
cancelable: false,
detail: "custom"
});
window.dispatchEvent(event);
}
function abort() {
if (activeService) {
activeService.destroy();
dispatchEvent("afterprint");
}
}
function renderProgress(index, total, eventBus) {
dialog = document.getElementById("printServiceDialog");
const progress = Math.round(100 * index / total);
const progressBar = dialog.querySelector("progress");
const progressPerc = dialog.querySelector(".relative-progress");
progressBar.value = progress;
progressPerc.setAttribute("data-l10n-args", JSON.stringify({
progress
}));
eventBus.dispatch("progress", {
source: this,
type: "print",
total,
page: index,
percent: 100 * index / total
});
}
window.addEventListener("keydown", function (event) {
if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
window.print();
event.preventDefault();
event.stopImmediatePropagation();
}
}, true);
if ("onbeforeprint" in window) {
const stopPropagationIfNeeded = function (event) {
if (event.detail !== "custom") {
event.stopImmediatePropagation();
}
};
window.addEventListener("beforeprint", stopPropagationIfNeeded);
window.addEventListener("afterprint", stopPropagationIfNeeded);
}
let overlayPromise;
function ensureOverlay() {
if (!overlayPromise) {
overlayManager = viewerApp.overlayManager;
if (!overlayManager) {
throw new Error("The overlay manager has not yet been initialized.");
}
dialog = document.getElementById("printServiceDialog");
overlayPromise = overlayManager.register(dialog, true);
document.getElementById("printCancel").onclick = abort;
dialog.addEventListener("close", abort);
}
return overlayPromise;
}
class PDFPrintServiceFactory {
static initGlobals(app) {
viewerApp = app;
}
static get supportsPrinting() {
return shadow(this, "supportsPrinting", true);
}
static createPrintService(params) {
if (activeService) {
throw new Error("The print service is created and active.");
}
if (!PDFPrintServiceFactory.enablePrint) {
console.debug("The print service is disabled.");
}
return activeService = new PDFPrintService(params, PDFPrintServiceFactory.isInPDFPrintRange, PDFPrintServiceFactory.filteredPageCount);
}
}
pdf_print_service_defineProperty(PDFPrintServiceFactory, "enablePrint", true);
;// ./web/pdf_rendering_queue.js
const CLEANUP_TIMEOUT = 30000;
class PDFRenderingQueue {
constructor() {
this.pdfViewer = null;
this.pdfThumbnailViewer = null;
this.onIdle = null;
this.highestPriorityPage = null;
this.idleTimeout = null;
this.printing = false;
this.isThumbnailViewEnabled = false;
Object.defineProperty(this, "hasViewer", {
value: () => !!this.pdfViewer
});
}
setViewer(pdfViewer) {
this.pdfViewer = pdfViewer;
}
setThumbnailViewer(pdfThumbnailViewer) {
this.pdfThumbnailViewer = pdfThumbnailViewer;
}
isHighestPriority(view) {
return this.highestPriorityPage === view.renderingId;
}
renderHighestPriority(currentlyVisiblePages) {
if (this.idleTimeout) {
clearTimeout(this.idleTimeout);
this.idleTimeout = null;
}
if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {
return;
}
if (this.isThumbnailViewEnabled && this.pdfThumbnailViewer?.forceRendering()) {
return;
}
if (this.printing) {
return;
}
if (this.onIdle) {
this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);
}
}
getHighestPriority(visible, views, scrolledDown) {
let preRenderExtra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
let ignoreDetailViews = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
const visibleViews = visible.views,
numVisible = visibleViews.length;
if (numVisible === 0) {
return null;
}
for (let i = 0; i < numVisible; i++) {
const view = visibleViews[i].view;
if (!this.isViewFinished(view)) {
return view;
}
}
if (!ignoreDetailViews) {
for (let i = 0; i < numVisible; i++) {
const {
detailView
} = visibleViews[i].view;
if (detailView && !this.isViewFinished(detailView)) {
return detailView;
}
}
}
const firstId = visible.first.id,
lastId = visible.last.id;
if (lastId - firstId + 1 > numVisible) {
const visibleIds = visible.ids;
for (let i = 1, ii = lastId - firstId; i < ii; i++) {
const holeId = scrolledDown ? firstId + i : lastId - i;
if (visibleIds.has(holeId)) {
continue;
}
const holeView = views[holeId - 1];
if (!this.isViewFinished(holeView)) {
return holeView;
}
}
}
let preRenderIndex = scrolledDown ? lastId : firstId - 2;
let preRenderView = views[preRenderIndex];
if (preRenderView && !this.isViewFinished(preRenderView)) {
return preRenderView;
}
if (preRenderExtra) {
preRenderIndex += scrolledDown ? 1 : -1;
preRenderView = views[preRenderIndex];
if (preRenderView && !this.isViewFinished(preRenderView)) {
return preRenderView;
}
}
return null;
}
isViewFinished(view) {
return view.renderingState === RenderingStates.FINISHED;
}
renderView(view) {
switch (view.renderingState) {
case RenderingStates.FINISHED:
return false;
case RenderingStates.PAUSED:
this.highestPriorityPage = view.renderingId;
view.resume();
break;
case RenderingStates.RUNNING:
this.highestPriorityPage = view.renderingId;
break;
case RenderingStates.INITIAL:
this.highestPriorityPage = view.renderingId;
view.draw().finally(() => {
this.renderHighestPriority();
}).catch(reason => {
if (reason instanceof RenderingCancelledException) {
return;
}
NgxConsole.error("renderView:", reason);
});
break;
}
return true;
}
}
;// ./web/pdf_scripting_manager.js
function pdf_scripting_manager_classPrivateMethodInitSpec(e, a) { pdf_scripting_manager_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_scripting_manager_classPrivateFieldInitSpec(e, t, a) { pdf_scripting_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_scripting_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_scripting_manager_classPrivateFieldGet(s, a) { return s.get(pdf_scripting_manager_assertClassBrand(s, a)); }
function pdf_scripting_manager_classPrivateFieldSet(s, a, r) { return s.set(pdf_scripting_manager_assertClassBrand(s, a), r), r; }
function pdf_scripting_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _closeCapability = /*#__PURE__*/new WeakMap();
var _destroyCapability = /*#__PURE__*/new WeakMap();
var _docProperties = /*#__PURE__*/new WeakMap();
var pdf_scripting_manager_eventAbortController = /*#__PURE__*/new WeakMap();
var pdf_scripting_manager_eventBus = /*#__PURE__*/new WeakMap();
var pdf_scripting_manager_externalServices = /*#__PURE__*/new WeakMap();
var _pdfDocument = /*#__PURE__*/new WeakMap();
var _pdfViewer = /*#__PURE__*/new WeakMap();
var _ready = /*#__PURE__*/new WeakMap();
var _scripting = /*#__PURE__*/new WeakMap();
var _willPrintCapability = /*#__PURE__*/new WeakMap();
var _PDFScriptingManager_brand = /*#__PURE__*/new WeakSet();
class PDFScriptingManager {
constructor(_ref) {
let {
eventBus,
externalServices = null,
docProperties = null
} = _ref;
pdf_scripting_manager_classPrivateMethodInitSpec(this, _PDFScriptingManager_brand);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _closeCapability, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _destroyCapability, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _docProperties, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, pdf_scripting_manager_eventAbortController, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, pdf_scripting_manager_eventBus, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, pdf_scripting_manager_externalServices, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _pdfDocument, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _pdfViewer, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _ready, false);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _scripting, null);
pdf_scripting_manager_classPrivateFieldInitSpec(this, _willPrintCapability, null);
pdf_scripting_manager_classPrivateFieldSet(pdf_scripting_manager_eventBus, this, eventBus);
pdf_scripting_manager_classPrivateFieldSet(pdf_scripting_manager_externalServices, this, externalServices);
pdf_scripting_manager_classPrivateFieldSet(_docProperties, this, docProperties);
}
setViewer(pdfViewer) {
pdf_scripting_manager_classPrivateFieldSet(_pdfViewer, this, pdfViewer);
}
async setDocument(pdfDocument) {
if (pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)) {
await pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _destroyScripting).call(this);
}
pdf_scripting_manager_classPrivateFieldSet(_pdfDocument, this, pdfDocument);
if (!pdfDocument) {
return;
}
const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]);
if (!objects && !docActions) {
await pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _destroyScripting).call(this);
return;
}
if (pdfDocument !== pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)) {
return;
}
try {
pdf_scripting_manager_classPrivateFieldSet(_scripting, this, pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _initScripting).call(this));
} catch (error) {
NgxConsole.error("setDocument:", error);
await pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _destroyScripting).call(this);
return;
}
const eventBus = pdf_scripting_manager_classPrivateFieldGet(pdf_scripting_manager_eventBus, this);
pdf_scripting_manager_classPrivateFieldSet(pdf_scripting_manager_eventAbortController, this, new AbortController());
const {
signal
} = pdf_scripting_manager_classPrivateFieldGet(pdf_scripting_manager_eventAbortController, this);
eventBus._on("updatefromsandbox", event => {
if (event?.source === window) {
pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _updateFromSandbox).call(this, event.detail);
}
}, {
signal
});
eventBus._on("dispatcheventinsandbox", event => {
pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox(event.detail);
}, {
signal
});
eventBus._on("pagechanging", _ref2 => {
let {
pageNumber,
previous
} = _ref2;
if (pageNumber === previous) {
return;
}
pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _dispatchPageClose).call(this, previous);
pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _dispatchPageOpen).call(this, pageNumber);
}, {
signal
});
eventBus._on("pagerendered", _ref3 => {
let {
pageNumber
} = _ref3;
if (!this._pageOpenPending.has(pageNumber)) {
return;
}
if (pageNumber !== pdf_scripting_manager_classPrivateFieldGet(_pdfViewer, this).currentPageNumber) {
return;
}
pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _dispatchPageOpen).call(this, pageNumber);
}, {
signal
});
eventBus._on("pagesdestroy", async () => {
await pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _dispatchPageClose).call(this, pdf_scripting_manager_classPrivateFieldGet(_pdfViewer, this).currentPageNumber);
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "doc",
name: "WillClose"
});
pdf_scripting_manager_classPrivateFieldGet(_closeCapability, this)?.resolve();
}, {
signal
});
try {
const docProperties = await pdf_scripting_manager_classPrivateFieldGet(_docProperties, this).call(this, pdfDocument);
if (pdfDocument !== pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)) {
return;
}
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this).createSandbox({
objects,
calculationOrder,
appInfo: {
platform: navigator.platform,
language: navigator.language
},
docInfo: {
...docProperties,
actions: docActions
}
});
eventBus.dispatch("sandboxcreated", {
source: this
});
} catch (error) {
NgxConsole.error("setDocument:", error);
await pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _destroyScripting).call(this);
return;
}
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "doc",
name: "Open"
});
await pdf_scripting_manager_assertClassBrand(_PDFScriptingManager_brand, this, _dispatchPageOpen).call(this, pdf_scripting_manager_classPrivateFieldGet(_pdfViewer, this).currentPageNumber, true);
Promise.resolve().then(() => {
if (pdfDocument === pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)) {
pdf_scripting_manager_classPrivateFieldSet(_ready, this, true);
}
});
}
async dispatchWillSave() {
return pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "doc",
name: "WillSave"
});
}
async dispatchDidSave() {
return pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "doc",
name: "DidSave"
});
}
async dispatchWillPrint() {
if (!pdf_scripting_manager_classPrivateFieldGet(_scripting, this)) {
return;
}
await pdf_scripting_manager_classPrivateFieldGet(_willPrintCapability, this)?.promise;
pdf_scripting_manager_classPrivateFieldSet(_willPrintCapability, this, Promise.withResolvers());
try {
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this).dispatchEventInSandbox({
id: "doc",
name: "WillPrint"
});
} catch (ex) {
pdf_scripting_manager_classPrivateFieldGet(_willPrintCapability, this).resolve();
pdf_scripting_manager_classPrivateFieldSet(_willPrintCapability, this, null);
throw ex;
}
await pdf_scripting_manager_classPrivateFieldGet(_willPrintCapability, this).promise;
}
async dispatchDidPrint() {
return pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "doc",
name: "DidPrint"
});
}
get destroyPromise() {
return pdf_scripting_manager_classPrivateFieldGet(_destroyCapability, this)?.promise || null;
}
get ready() {
return pdf_scripting_manager_classPrivateFieldGet(_ready, this);
}
get _pageOpenPending() {
return shadow(this, "_pageOpenPending", new Set());
}
get _visitedPages() {
return shadow(this, "_visitedPages", new Map());
}
}
async function _updateFromSandbox(detail) {
const pdfViewer = pdf_scripting_manager_classPrivateFieldGet(_pdfViewer, this);
const isInPresentationMode = pdfViewer.isInPresentationMode || pdfViewer.isChangingPresentationMode;
const {
id,
siblings,
command,
value
} = detail;
if (!id) {
switch (command) {
case "clear":
NgxConsole.clear();
break;
case "error":
NgxConsole.error(value);
break;
case "layout":
if (!isInPresentationMode) {
const modes = apiPageLayoutToViewerModes(value);
pdfViewer.spreadMode = modes.spreadMode;
}
break;
case "page-num":
pdfViewer.currentPageNumber = value + 1;
break;
case "print":
await pdfViewer.pagesPromise;
pdf_scripting_manager_classPrivateFieldGet(pdf_scripting_manager_eventBus, this).dispatch("print", {
source: this
});
break;
case "println":
NgxConsole.log(value);
break;
case "zoom":
if (!isInPresentationMode) {
pdfViewer.currentScaleValue = value;
}
break;
case "SaveAs":
pdf_scripting_manager_classPrivateFieldGet(pdf_scripting_manager_eventBus, this).dispatch("download", {
source: this
});
break;
case "FirstPage":
pdfViewer.currentPageNumber = 1;
break;
case "LastPage":
pdfViewer.currentPageNumber = pdfViewer.pagesCount;
break;
case "NextPage":
pdfViewer.nextPage();
break;
case "PrevPage":
pdfViewer.previousPage();
break;
case "ZoomViewIn":
if (!isInPresentationMode) {
pdfViewer.increaseScale();
}
break;
case "ZoomViewOut":
if (!isInPresentationMode) {
pdfViewer.decreaseScale();
}
break;
case "WillPrintFinished":
pdf_scripting_manager_classPrivateFieldGet(_willPrintCapability, this)?.resolve();
pdf_scripting_manager_classPrivateFieldSet(_willPrintCapability, this, null);
break;
}
return;
}
if (isInPresentationMode && detail.focus) {
return;
}
delete detail.id;
delete detail.siblings;
const ids = siblings ? [id, ...siblings] : [id];
for (const elementId of ids) {
const element = document.querySelector(`[data-element-id="${elementId}"]`);
if (element) {
element.dispatchEvent(new CustomEvent("updatefromsandbox", {
detail
}));
} else {
pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)?.annotationStorage.setValue(elementId, detail);
}
}
}
async function _dispatchPageOpen(pageNumber) {
let initialize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
const pdfDocument = pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this),
visitedPages = this._visitedPages;
if (initialize) {
pdf_scripting_manager_classPrivateFieldSet(_closeCapability, this, Promise.withResolvers());
}
if (!pdf_scripting_manager_classPrivateFieldGet(_closeCapability, this)) {
return;
}
const pageView = pdf_scripting_manager_classPrivateFieldGet(_pdfViewer, this).getPageView(pageNumber - 1);
if (pageView?.renderingState !== RenderingStates.FINISHED) {
this._pageOpenPending.add(pageNumber);
return;
}
this._pageOpenPending.delete(pageNumber);
const actionsPromise = (async () => {
const actions = await (!visitedPages.has(pageNumber) ? pageView.pdfPage?.getJSActions() : null);
if (pdfDocument !== pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)) {
return;
}
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "page",
name: "PageOpen",
pageNumber,
actions
});
})();
visitedPages.set(pageNumber, actionsPromise);
}
async function _dispatchPageClose(pageNumber) {
const pdfDocument = pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this),
visitedPages = this._visitedPages;
if (!pdf_scripting_manager_classPrivateFieldGet(_closeCapability, this)) {
return;
}
if (this._pageOpenPending.has(pageNumber)) {
return;
}
const actionsPromise = visitedPages.get(pageNumber);
if (!actionsPromise) {
return;
}
visitedPages.set(pageNumber, null);
await actionsPromise;
if (pdfDocument !== pdf_scripting_manager_classPrivateFieldGet(_pdfDocument, this)) {
return;
}
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this)?.dispatchEventInSandbox({
id: "page",
name: "PageClose",
pageNumber
});
}
function _initScripting() {
pdf_scripting_manager_classPrivateFieldSet(_destroyCapability, this, Promise.withResolvers());
if (pdf_scripting_manager_classPrivateFieldGet(_scripting, this)) {
throw new Error("#initScripting: Scripting already exists.");
}
return pdf_scripting_manager_classPrivateFieldGet(pdf_scripting_manager_externalServices, this).createScripting();
}
async function _destroyScripting() {
if (!pdf_scripting_manager_classPrivateFieldGet(_scripting, this)) {
pdf_scripting_manager_classPrivateFieldSet(_pdfDocument, this, null);
pdf_scripting_manager_classPrivateFieldGet(_destroyCapability, this)?.resolve();
return;
}
if (pdf_scripting_manager_classPrivateFieldGet(_closeCapability, this)) {
await Promise.race([pdf_scripting_manager_classPrivateFieldGet(_closeCapability, this).promise, new Promise(resolve => {
setTimeout(resolve, 1000);
})]).catch(() => {});
pdf_scripting_manager_classPrivateFieldSet(_closeCapability, this, null);
}
pdf_scripting_manager_classPrivateFieldSet(_pdfDocument, this, null);
try {
await pdf_scripting_manager_classPrivateFieldGet(_scripting, this).destroySandbox();
} catch {}
pdf_scripting_manager_classPrivateFieldGet(_willPrintCapability, this)?.reject(new Error("Scripting destroyed."));
pdf_scripting_manager_classPrivateFieldSet(_willPrintCapability, this, null);
pdf_scripting_manager_classPrivateFieldGet(pdf_scripting_manager_eventAbortController, this)?.abort();
pdf_scripting_manager_classPrivateFieldSet(pdf_scripting_manager_eventAbortController, this, null);
this._pageOpenPending.clear();
this._visitedPages.clear();
pdf_scripting_manager_classPrivateFieldSet(_scripting, this, null);
pdf_scripting_manager_classPrivateFieldSet(_ready, this, false);
pdf_scripting_manager_classPrivateFieldGet(_destroyCapability, this)?.resolve();
}
;// ./web/pdf_sidebar.js
function pdf_sidebar_classPrivateMethodInitSpec(e, a) { pdf_sidebar_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_sidebar_classPrivateFieldInitSpec(e, t, a) { pdf_sidebar_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_sidebar_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_sidebar_classPrivateFieldGet(s, a) { return s.get(pdf_sidebar_assertClassBrand(s, a)); }
function pdf_sidebar_classPrivateFieldSet(s, a, r) { return s.set(pdf_sidebar_assertClassBrand(s, a), r), r; }
function pdf_sidebar_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const SIDEBAR_WIDTH_VAR = "--sidebar-width";
const SIDEBAR_MIN_WIDTH = 200;
const SIDEBAR_RESIZING_CLASS = "sidebarResizing";
const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
var pdf_sidebar_isRTL = /*#__PURE__*/new WeakMap();
var _mouseAC = /*#__PURE__*/new WeakMap();
var _outerContainerWidth = /*#__PURE__*/new WeakMap();
var _width = /*#__PURE__*/new WeakMap();
var _PDFSidebar_brand = /*#__PURE__*/new WeakSet();
class PDFSidebar {
constructor(_ref) {
let {
elements,
eventBus: _eventBus,
l10n
} = _ref;
pdf_sidebar_classPrivateMethodInitSpec(this, _PDFSidebar_brand);
pdf_sidebar_classPrivateFieldInitSpec(this, pdf_sidebar_isRTL, false);
pdf_sidebar_classPrivateFieldInitSpec(this, _mouseAC, null);
pdf_sidebar_classPrivateFieldInitSpec(this, _outerContainerWidth, null);
pdf_sidebar_classPrivateFieldInitSpec(this, _width, null);
this.isOpen = false;
this.active = SidebarView.THUMBS;
this.isInitialViewSet = false;
this.isInitialEventDispatched = false;
this.onToggled = null;
this.onUpdateThumbnails = null;
this.outerContainer = elements.outerContainer;
this.sidebarContainer = elements.sidebarContainer;
this.toggleButton = elements.toggleButton;
this.resizer = elements.resizer;
this.thumbnailButton = elements.thumbnailButton;
this.outlineButton = elements.outlineButton;
this.attachmentsButton = elements.attachmentsButton;
this.layersButton = elements.layersButton;
this.thumbnailView = elements.thumbnailView;
this.outlineView = elements.outlineView;
this.attachmentsView = elements.attachmentsView;
this.layersView = elements.layersView;
this._currentOutlineItemButton = elements.currentOutlineItemButton;
this.eventBus = _eventBus;
pdf_sidebar_classPrivateFieldSet(pdf_sidebar_isRTL, this, l10n.getDirection() === "rtl");
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, pdf_sidebar_addEventListeners).call(this);
}
reset() {
this.isInitialViewSet = false;
this.isInitialEventDispatched = false;
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _hideUINotification).call(this, true);
this.switchView(SidebarView.THUMBS);
this.outlineButton.disabled = false;
this.attachmentsButton.disabled = false;
this.layersButton.disabled = false;
this.outlineButton.hidden = false;
this.attachmentsButton.hidden = false;
this.layersButton.hidden = false;
this._currentOutlineItemButton.disabled = true;
}
get visibleView() {
return this.isOpen ? this.active : SidebarView.NONE;
}
setInitialView() {
let view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : SidebarView.NONE;
if (this.isInitialViewSet) {
return;
}
this.isInitialViewSet = true;
if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) {
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _dispatchEvent).call(this);
return;
}
this.switchView(view, true);
if (!this.isInitialEventDispatched) {
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _dispatchEvent).call(this);
}
}
switchView(view) {
let forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
const isViewChanged = view !== this.active;
let forceRendering = false;
switch (view) {
case SidebarView.NONE:
if (this.isOpen) {
this.close();
}
return;
case SidebarView.THUMBS:
if (this.isOpen && isViewChanged) {
forceRendering = true;
}
break;
case SidebarView.OUTLINE:
if (this.outlineButton.disabled) {
return;
}
break;
case SidebarView.ATTACHMENTS:
if (this.attachmentsButton.disabled) {
return;
}
break;
case SidebarView.LAYERS:
if (this.layersButton.disabled) {
return;
}
break;
default:
NgxConsole.error(`PDFSidebar.switchView: "${view}" is not a valid view.`);
return;
}
this.active = view;
toggleCheckedBtn(this.thumbnailButton, view === SidebarView.THUMBS, this.thumbnailView);
toggleCheckedBtn(this.outlineButton, view === SidebarView.OUTLINE, this.outlineView);
toggleCheckedBtn(this.attachmentsButton, view === SidebarView.ATTACHMENTS, this.attachmentsView);
toggleCheckedBtn(this.layersButton, view === SidebarView.LAYERS, this.layersView);
if (forceOpen && !this.isOpen) {
this.open();
return;
}
if (forceRendering) {
this.onUpdateThumbnails();
this.onToggled();
}
if (isViewChanged) {
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _dispatchEvent).call(this);
}
}
open() {
if (this.isOpen) {
return;
}
this.isOpen = true;
toggleExpandedBtn(this.toggleButton, true);
this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
if (this.active === SidebarView.THUMBS) {
this.onUpdateThumbnails();
}
this.onToggled();
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _dispatchEvent).call(this);
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _hideUINotification).call(this);
}
close() {
let evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (!this.isOpen) {
return;
}
this.isOpen = false;
toggleExpandedBtn(this.toggleButton, false);
this.outerContainer.classList.add("sidebarMoving");
this.outerContainer.classList.remove("sidebarOpen");
this.onToggled();
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _dispatchEvent).call(this);
if (evt?.detail > 0) {
this.toggleButton.blur();
}
}
toggle() {
let evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (this.isOpen) {
this.close(evt);
} else {
this.open();
}
}
get outerContainerWidth() {
return pdf_sidebar_classPrivateFieldGet(_outerContainerWidth, this) || pdf_sidebar_classPrivateFieldSet(_outerContainerWidth, this, this.outerContainer.clientWidth);
}
}
function _dispatchEvent() {
if (this.isInitialViewSet) {
this.isInitialEventDispatched ||= true;
}
this.eventBus.dispatch("sidebarviewchanged", {
source: this,
view: this.visibleView
});
}
function _showUINotification() {
this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-notification-button");
if (!this.isOpen) {
this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);
}
}
function _hideUINotification() {
let reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.isOpen || reset) {
this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);
}
if (reset) {
this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-button");
}
}
function pdf_sidebar_addEventListeners() {
const {
eventBus,
outerContainer
} = this;
this.sidebarContainer.addEventListener("transitionend", evt => {
if (evt.target === this.sidebarContainer) {
outerContainer.classList.remove("sidebarMoving");
eventBus.dispatch("resize", {
source: this
});
}
});
if (!isInsideNgxExtendedPdfViewer(this.toggleButton)) {
this.toggleButton.addEventListener("click", evt => {
this.toggle(evt);
});
}
this.thumbnailButton.addEventListener("click", () => {
this.switchView(SidebarView.THUMBS);
});
this.outlineButton.addEventListener("click", () => {
this.switchView(SidebarView.OUTLINE);
});
this.outlineButton.addEventListener("dblclick", () => {
eventBus.dispatch("toggleoutlinetree", {
source: this
});
});
this.attachmentsButton.addEventListener("click", () => {
this.switchView(SidebarView.ATTACHMENTS);
});
this.layersButton.addEventListener("click", () => {
this.switchView(SidebarView.LAYERS);
});
this.layersButton.addEventListener("dblclick", () => {
eventBus.dispatch("resetlayers", {
source: this
});
});
this._currentOutlineItemButton.addEventListener("click", () => {
eventBus.dispatch("currentoutlineitem", {
source: this
});
});
const onTreeLoaded = (count, button, view) => {
button.disabled = !count;
button.hidden = !count;
if (count) {
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _showUINotification).call(this);
} else if (this.active === view) {
this.switchView(SidebarView.THUMBS);
}
};
eventBus._on("outlineloaded", evt => {
onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE);
if (evt.enableCurrentOutlineItemButton) {
if (evt.currentOutlineItemPromise) {
evt.currentOutlineItemPromise.then(enabled => {
if (!this.isInitialViewSet) {
return;
}
this._currentOutlineItemButton.disabled = !enabled;
});
}
}
});
eventBus._on("attachmentsloaded", evt => {
onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, SidebarView.ATTACHMENTS);
});
eventBus._on("layersloaded", evt => {
onTreeLoaded(evt.layersCount, this.layersButton, SidebarView.LAYERS);
});
eventBus._on("presentationmodechanged", evt => {
if (evt.state === PresentationModeState.NORMAL && this.visibleView === SidebarView.THUMBS) {
this.onUpdateThumbnails();
}
});
this.resizer.addEventListener("mousedown", evt => {
if (evt.button !== 0) {
return;
}
outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
pdf_sidebar_classPrivateFieldSet(_mouseAC, this, new AbortController());
const opts = {
signal: pdf_sidebar_classPrivateFieldGet(_mouseAC, this).signal
};
window.addEventListener("mousemove", pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _mouseMove).bind(this), opts);
window.addEventListener("mouseup", pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _mouseUp).bind(this), opts);
window.addEventListener("blur", pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _mouseUp).bind(this), opts);
});
eventBus._on("resize", evt => {
if (evt.source !== window) {
return;
}
pdf_sidebar_classPrivateFieldSet(_outerContainerWidth, this, null);
if (!pdf_sidebar_classPrivateFieldGet(_width, this)) {
return;
}
if (!this.isOpen) {
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _updateWidth).call(this, pdf_sidebar_classPrivateFieldGet(_width, this));
return;
}
outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
const updated = pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _updateWidth).call(this, pdf_sidebar_classPrivateFieldGet(_width, this));
Promise.resolve().then(() => {
outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
if (updated) {
eventBus.dispatch("resize", {
source: this
});
}
});
});
}
function _updateWidth() {
let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
const maxWidth = Math.floor(this.outerContainerWidth / 2);
if (width > maxWidth) {
width = maxWidth;
}
if (width < SIDEBAR_MIN_WIDTH) {
width = SIDEBAR_MIN_WIDTH;
}
if (width === pdf_sidebar_classPrivateFieldGet(_width, this)) {
return false;
}
pdf_sidebar_classPrivateFieldSet(_width, this, width);
docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`);
return true;
}
function _mouseMove(evt) {
let width = evt.clientX;
if (pdf_sidebar_classPrivateFieldGet(pdf_sidebar_isRTL, this)) {
width = this.outerContainerWidth - width;
}
pdf_sidebar_assertClassBrand(_PDFSidebar_brand, this, _updateWidth).call(this, width);
}
function _mouseUp(evt) {
this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
this.eventBus.dispatch("resize", {
source: this
});
pdf_sidebar_classPrivateFieldGet(_mouseAC, this)?.abort();
pdf_sidebar_classPrivateFieldSet(_mouseAC, this, null);
}
;// ./web/pdf_thumbnail_view.js
function pdf_thumbnail_view_classPrivateMethodInitSpec(e, a) { pdf_thumbnail_view_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_thumbnail_view_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_thumbnail_view_classPrivateGetter(s, r, a) { return a(pdf_thumbnail_view_assertClassBrand(s, r)); }
function pdf_thumbnail_view_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DRAW_UPSCALE_FACTOR = 2;
const MAX_NUM_SCALING_STEPS = 3;
const THUMBNAIL_WIDTH = 98;
let initialDragY = 0;
function zeroCanvas(c) {
c.width = 0;
c.height = 0;
}
class TempImageFactory {
static getCanvas(width, height) {
const tempCanvas = pdf_thumbnail_view_assertClassBrand(TempImageFactory, this, _tempCanvas)._ || (_tempCanvas._ = pdf_thumbnail_view_assertClassBrand(TempImageFactory, this, document.createElement("canvas")));
tempCanvas.width = width;
tempCanvas.height = height;
const ctx = tempCanvas.getContext("2d", {
alpha: false
});
ctx.save();
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.fillRect(0, 0, width, height);
ctx.restore();
return [tempCanvas, tempCanvas.getContext("2d")];
}
static destroyCanvas() {
if (pdf_thumbnail_view_assertClassBrand(TempImageFactory, this, _tempCanvas)._) {
zeroCanvas(pdf_thumbnail_view_assertClassBrand(TempImageFactory, this, _tempCanvas)._);
}
_tempCanvas._ = pdf_thumbnail_view_assertClassBrand(TempImageFactory, this, null);
}
}
var _tempCanvas = {
_: null
};
var _PDFThumbnailView_brand = /*#__PURE__*/new WeakSet();
class PDFThumbnailView {
constructor(_ref) {
let {
container,
eventBus,
id,
defaultViewport,
optionalContentConfigPromise,
linkService,
renderingQueue,
maxCanvasPixels,
maxCanvasDim,
pageColors,
enableHWA: _enableHWA
} = _ref;
pdf_thumbnail_view_classPrivateMethodInitSpec(this, _PDFThumbnailView_brand);
this.id = id;
this.renderingId = "thumbnail" + id;
this.pageLabel = null;
this.pdfPage = null;
this.rotation = 0;
this.viewport = defaultViewport;
this.pdfPageRotate = defaultViewport.rotation;
this._optionalContentConfigPromise = optionalContentConfigPromise || null;
this.maxCanvasPixels = maxCanvasPixels ?? AppOptions.get("maxCanvasPixels");
this.maxCanvasDim = maxCanvasDim || AppOptions.get("maxCanvasDim");
this.pageColors = pageColors || null;
this.enableHWA = _enableHWA || false;
this.eventBus = eventBus;
this.linkService = linkService;
this.renderingQueue = renderingQueue;
this.eventBus = eventBus;
this.renderTask = null;
this.renderingState = RenderingStates.INITIAL;
this.resume = null;
eventBus.dispatch("rendercustomthumbnail", {
pdfThumbnailView: this,
linkService,
id,
container,
thumbPageTitlePromiseOrPageL10nArgs: pdf_thumbnail_view_classPrivateGetter(_PDFThumbnailView_brand, this, _get_pageL10nArgs)
});
if (container.querySelector(`.${this.renderingId}`)) {
this._placeholderImg = container.querySelector(`.${this.renderingId} .thumbnailImage`);
} else {
this.createThumbnail(this, linkService, id, container, pdf_thumbnail_view_classPrivateGetter(_PDFThumbnailView_brand, this, _get_pageL10nArgs));
}
if (AppOptions.get("enablePageReordering")) {
this.div.addEventListener('dragstart', this._dragStartHandler.bind(this));
this.div.addEventListener('dragover', this._dragOverHandler.bind(this));
this.div.addEventListener('drop', this._dropHandler.bind(this));
this.div.addEventListener('mousedown', this._mouseDownHandler.bind(this));
}
}
_dragStartHandler(event) {
event.dataTransfer.setData('text/plain', this.id.toString());
}
_dragOverHandler(event) {
event.preventDefault();
event.dataTransfer.dropEffect = "move";
const target = event.currentTarget;
const bounding = target.getBoundingClientRect();
this._removeDottedLine();
if (bounding.top < initialDragY && bounding.bottom > initialDragY) {
return;
}
this._showDottedLine(target, bounding.height, initialDragY > event.clientY);
}
_dropHandler(event) {
event.preventDefault();
event.stopPropagation();
const draggedId = parseInt(event.dataTransfer.getData('text/plain'), 10);
const targetId = this.id;
this._removeDottedLine();
if (draggedId !== targetId) {
this._movePage(draggedId, targetId);
}
}
_mouseDownHandler(event) {
initialDragY = event.clientY;
}
_showDottedLine(target, height, insertAbove) {
const dottedLine = document.createElement('div');
dottedLine.className = 'dotted-line';
if (insertAbove) {
dottedLine.style.setProperty("--dotted-line-margin-x", `${-height}px`);
} else {
dottedLine.style.setProperty("--dotted-line-margin-x", "6px");
}
target.appendChild(dottedLine);
}
_removeDottedLine() {
const existingLine = document.querySelector('.dotted-line');
if (existingLine) {
existingLine.parentNode.removeChild(existingLine);
}
}
_movePage(draggedId, targetId) {
const thumbnailsContainer = this.div.parentNode.parentNode;
const draggedThumbnail = thumbnailsContainer.children[draggedId - 1];
const targetThumbnail = thumbnailsContainer.children[targetId - 1];
if (draggedThumbnail && targetThumbnail) {
PDFViewerApplication.movePage(draggedId, targetId);
}
}
createThumbnail(pdfThumbnailView, linkService, id, container, pageL10nArgs) {
const anchor = document.createElement("a");
anchor.href = linkService.getAnchorUrl("#page=" + id);
anchor.setAttribute("data-l10n-id", "pdfjs-thumb-page-title");
anchor.setAttribute("data-l10n-args", pdf_thumbnail_view_classPrivateGetter(_PDFThumbnailView_brand, this, _get_pageL10nArgs));
anchor.className = this.renderingId;
anchor.onclick = function () {
linkService.goToPage(id);
return false;
};
this.anchor = anchor;
const div = document.createElement("div");
div.className = "thumbnail";
div.setAttribute("data-page-number", this.id);
if (AppOptions.get("enablePageReordering")) {
div.draggable = true;
}
this.div = div;
pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _updateDims).call(this);
const img = document.createElement("div");
img.className = "thumbnailImage";
this._placeholderImg = img;
div.append(img);
anchor.append(div);
container.append(anchor);
}
setPdfPage(pdfPage) {
this.pdfPage = pdfPage;
this.pdfPageRotate = pdfPage.rotate;
const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = pdfPage.getViewport({
scale: 1,
rotation: totalRotation
});
this.reset();
}
reset() {
this.cancelRendering();
this.renderingState = RenderingStates.INITIAL;
this.div.removeAttribute("data-loaded");
this.image?.replaceWith(this._placeholderImg);
pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _updateDims).call(this);
if (this.image) {
this.image.removeAttribute("src");
delete this.image;
}
}
update(_ref2) {
let {
rotation = null
} = _ref2;
if (typeof rotation === "number") {
this.rotation = rotation;
}
const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = this.viewport.clone({
scale: 1,
rotation: totalRotation
});
this.reset();
}
cancelRendering() {
if (this.renderTask) {
this.renderTask.cancel();
this.renderTask = null;
}
this.resume = null;
}
async draw() {
if (this.renderingState !== RenderingStates.INITIAL) {
NgxConsole.error("Must be in new state before drawing");
return;
}
const {
pageColors,
pdfPage
} = this;
if (!pdfPage) {
this.renderingState = RenderingStates.FINISHED;
throw new Error("pdfPage is not loaded");
}
this.renderingState = RenderingStates.RUNNING;
const {
ctx,
canvas,
transform
} = pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _getPageDrawContext).call(this, DRAW_UPSCALE_FACTOR);
const drawViewport = this.viewport.clone({
scale: DRAW_UPSCALE_FACTOR * this.scale
});
const renderContinueCallback = cont => {
if (!this.renderingQueue.isHighestPriority(this)) {
this.renderingState = RenderingStates.PAUSED;
this.resume = () => {
this.renderingState = RenderingStates.RUNNING;
cont();
};
return;
}
cont();
};
const renderContext = {
canvasContext: ctx,
transform,
viewport: drawViewport,
optionalContentConfigPromise: this._optionalContentConfigPromise,
pageColors
};
const renderTask = this.renderTask = pdfPage.render(renderContext);
renderTask.onContinue = renderContinueCallback;
let error = null;
try {
await renderTask.promise;
} catch (e) {
if (e instanceof RenderingCancelledException) {
zeroCanvas(canvas);
return;
}
error = e;
} finally {
if (renderTask === this.renderTask) {
this.renderTask = null;
}
}
this.renderingState = RenderingStates.FINISHED;
pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _convertCanvasToImage).call(this, canvas);
zeroCanvas(canvas);
this.eventBus.dispatch("thumbnailrendered", {
source: this,
pageNumber: this.id,
pdfPage
});
if (error) {
throw error;
}
}
setImage(pageView) {
if (this.renderingState !== RenderingStates.INITIAL) {
return;
}
const {
thumbnailCanvas: canvas,
pdfPage,
scale
} = pageView;
if (!canvas) {
return;
}
if (!this.pdfPage) {
this.setPdfPage(pdfPage);
}
if (scale < this.scale) {
return;
}
this.renderingState = RenderingStates.FINISHED;
pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _convertCanvasToImage).call(this, canvas);
}
setPageLabel(label) {
this.pageLabel = typeof label === "string" ? label : null;
this.anchor.setAttribute("data-l10n-args", pdf_thumbnail_view_classPrivateGetter(_PDFThumbnailView_brand, this, _get_pageL10nArgs));
if (this.renderingState !== RenderingStates.FINISHED) {
return;
}
this.image?.setAttribute("data-l10n-args", pdf_thumbnail_view_classPrivateGetter(_PDFThumbnailView_brand, this, _get_pageL10nArgs));
}
}
function _updateDims() {
const {
width,
height
} = this.viewport;
const ratio = width / height;
this.canvasWidth = THUMBNAIL_WIDTH;
this.canvasHeight = this.canvasWidth / ratio | 0;
this.scale = this.canvasWidth / width;
const {
style
} = this.div;
style.setProperty("--thumbnail-width", `${this.canvasWidth}px`);
style.setProperty("--thumbnail-height", `${this.canvasHeight}px`);
}
function _getPageDrawContext() {
let upscaleFactor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
let enableHWA = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.enableHWA;
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d", {
alpha: false,
willReadFrequently: !enableHWA
});
const outputScale = new OutputScale();
const width = upscaleFactor * this.canvasWidth,
height = upscaleFactor * this.canvasHeight;
outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim);
canvas.width = width * outputScale.sx | 0;
canvas.height = height * outputScale.sy | 0;
const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;
return {
ctx,
canvas,
transform
};
}
function _convertCanvasToImage(canvas) {
if (this.renderingState !== RenderingStates.FINISHED) {
throw new Error("#convertCanvasToImage: Rendering has not finished.");
}
const reducedCanvas = pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _reduceImage).call(this, canvas);
const image = document.createElement("img");
image.className = "thumbnailImage";
image.setAttribute("data-l10n-id", "pdfjs-thumb-page-canvas");
image.setAttribute("data-l10n-args", pdf_thumbnail_view_classPrivateGetter(_PDFThumbnailView_brand, this, _get_pageL10nArgs));
image.src = reducedCanvas.toDataURL();
this.image = image;
this.div.setAttribute("data-loaded", true);
this._placeholderImg.replaceWith(image);
zeroCanvas(reducedCanvas);
this.eventBus.dispatch("thumbnailRendered", this.id);
}
function _getReducedImageDims(canvas) {
const width = canvas.width << MAX_NUM_SCALING_STEPS,
height = canvas.height << MAX_NUM_SCALING_STEPS;
const outputScale = new OutputScale();
outputScale.sx = outputScale.sy = 1;
outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim);
return [width * outputScale.sx | 0, height * outputScale.sy | 0];
}
function _reduceImage(img) {
const {
ctx,
canvas
} = pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _getPageDrawContext).call(this, 1, true);
if (img.width <= 2 * canvas.width) {
ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);
return canvas;
}
let [reducedWidth, reducedHeight] = pdf_thumbnail_view_assertClassBrand(_PDFThumbnailView_brand, this, _getReducedImageDims).call(this, canvas);
const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(reducedWidth, reducedHeight);
while (reducedWidth > img.width || reducedHeight > img.height) {
reducedWidth >>= 1;
reducedHeight >>= 1;
}
reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);
while (reducedWidth > 2 * canvas.width) {
reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);
reducedWidth >>= 1;
reducedHeight >>= 1;
}
ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);
return canvas;
}
function _get_pageL10nArgs(_this) {
return JSON.stringify({
page: _this.pageLabel ?? _this.id
});
}
;// ./web/pdf_thumbnail_viewer.js
function pdf_thumbnail_viewer_classPrivateMethodInitSpec(e, a) { pdf_thumbnail_viewer_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_thumbnail_viewer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_thumbnail_viewer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const THUMBNAIL_SCROLL_MARGIN = -19;
const THUMBNAIL_SELECTED_CLASS = "selected";
var _PDFThumbnailViewer_brand = /*#__PURE__*/new WeakSet();
class PDFThumbnailViewer {
constructor(_ref) {
let {
container,
eventBus,
linkService,
renderingQueue,
maxCanvasPixels,
maxCanvasDim,
pageColors,
abortSignal,
enableHWA
} = _ref;
pdf_thumbnail_viewer_classPrivateMethodInitSpec(this, _PDFThumbnailViewer_brand);
this.container = container;
this.eventBus = eventBus;
this.linkService = linkService;
this.renderingQueue = renderingQueue;
this.maxCanvasPixels = maxCanvasPixels;
this.maxCanvasDim = maxCanvasDim;
this.pageColors = pageColors || null;
this.enableHWA = enableHWA || false;
this.scroll = watchScroll(this.container, pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _scrollUpdated).bind(this), abortSignal);
pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _resetView).call(this);
}
getThumbnail(index) {
return this._thumbnails[index];
}
scrollThumbnailIntoView(pageNumber) {
if (!this.pdfDocument) {
return;
}
const thumbnailView = this._thumbnails[pageNumber - 1];
if (!thumbnailView) {
NgxConsole.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.');
return;
}
if (pageNumber !== this._currentPageNumber) {
const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];
prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);
thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
}
const {
first,
last,
views
} = pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _getVisibleThumbs).call(this);
if (views.length > 0) {
let shouldScroll = false;
if (pageNumber <= first.id || pageNumber >= last.id) {
shouldScroll = true;
} else {
for (const {
id,
percent
} of views) {
if (id !== pageNumber) {
continue;
}
shouldScroll = percent < 100;
break;
}
}
if (shouldScroll) {
scrollIntoView(thumbnailView.div, {
top: THUMBNAIL_SCROLL_MARGIN
});
}
}
this._currentPageNumber = pageNumber;
}
get pagesRotation() {
return this._pagesRotation;
}
set pagesRotation(rotation) {
if (!isValidRotation(rotation)) {
throw new Error("Invalid thumbnails rotation angle.");
}
if (!this.pdfDocument) {
return;
}
if (this._pagesRotation === rotation) {
return;
}
this._pagesRotation = rotation;
const updateArgs = {
rotation
};
for (const thumbnail of this._thumbnails) {
thumbnail.update(updateArgs);
}
}
swapThumbnails(prevIndex, newIndex) {
let prevIndexPage = this._thumbnails[prevIndex].pdfPage;
this._thumbnails[prevIndex].setPdfPage(this._thumbnails[newIndex].pdfPage);
this._thumbnails[newIndex].setPdfPage(prevIndexPage);
}
cleanup() {
for (const thumbnail of this._thumbnails) {
if (thumbnail.renderingState !== RenderingStates.FINISHED) {
thumbnail.reset();
}
}
TempImageFactory.destroyCanvas();
}
setDocument(pdfDocument) {
this.initialized = false;
if (this.pdfDocument) {
pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _cancelRendering).call(this);
pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _resetView).call(this);
}
this.pdfDocument = pdfDocument;
if (!pdfDocument) {
return;
}
if (this.initialized) {
return;
}
this.initialized = true;
const firstPagePromise = pdfDocument.getPage(1);
const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({
intent: "display"
});
firstPagePromise.then(firstPdfPage => {
const pagesCount = pdfDocument.numPages;
const viewport = firstPdfPage.getViewport({
scale: 1
});
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
const thumbnail = new PDFThumbnailView({
container: this.container,
id: pageNum,
defaultViewport: viewport.clone(),
optionalContentConfigPromise,
linkService: this.linkService,
renderingQueue: this.renderingQueue,
maxCanvasPixels: this.maxCanvasPixels,
maxCanvasDim: this.maxCanvasDim,
pageColors: this.pageColors,
eventBus: this.eventBus,
enableHWA: this.enableHWA
});
this._thumbnails.push(thumbnail);
}
this._thumbnails[0]?.setPdfPage(firstPdfPage);
const thumbnailView = this._thumbnails[this._currentPageNumber - 1];
thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
}).catch(reason => {
NgxConsole.error("Unable to initialize thumbnail viewer", reason);
});
}
setPageLabels(labels) {
if (!this.pdfDocument) {
return;
}
if (!labels) {
this._pageLabels = null;
} else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
this._pageLabels = null;
NgxConsole.error("PDFThumbnailViewer_setPageLabels: Invalid page labels.");
} else {
this._pageLabels = labels;
}
for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null);
}
}
forceRendering() {
const visibleThumbs = pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _getVisibleThumbs).call(this);
const scrollAhead = pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _getScrollAhead).call(this, visibleThumbs);
const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead, false, true);
if (thumbView) {
pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _ensurePdfPageLoaded).call(this, thumbView).then(() => {
this.renderingQueue.renderView(thumbView);
});
return true;
}
return false;
}
stopRendering() {
pdf_thumbnail_viewer_assertClassBrand(_PDFThumbnailViewer_brand, this, _cancelRendering).call(this);
}
}
function _scrollUpdated() {
this.renderingQueue.renderHighestPriority();
}
function _getVisibleThumbs() {
return getVisibleElements({
scrollEl: this.container,
views: this._thumbnails
});
}
function _resetView() {
this._thumbnails = [];
this._currentPageNumber = 1;
this._pageLabels = null;
this._pagesRotation = 0;
this.container.textContent = "";
}
function _cancelRendering() {
for (const thumbnail of this._thumbnails) {
thumbnail.cancelRendering();
}
}
async function _ensurePdfPageLoaded(thumbView) {
if (thumbView.pdfPage) {
return thumbView.pdfPage;
}
try {
const pdfPage = await this.pdfDocument.getPage(thumbView.id);
if (!thumbView.pdfPage) {
thumbView.setPdfPage(pdfPage);
}
return pdfPage;
} catch (reason) {
NgxConsole.error("Unable to get page for thumb view", reason);
return null;
}
}
function _getScrollAhead(visible) {
if (visible.first?.id === 1) {
return true;
} else if (visible.last?.id === this._thumbnails.length) {
return false;
}
return this.scroll.down;
}
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.find.js
var es_iterator_find = __webpack_require__(116);
;// ./web/page-flip.module.js
class Page {
constructor(render, density) {
this.state = {
angle: 0,
area: [],
position: {
x: 0,
y: 0
},
hardAngle: 0,
hardDrawingAngle: 0
};
this.createdDensity = density;
this.nowDrawingDensity = this.createdDensity;
this.render = render;
}
setDensity(density) {
this.createdDensity = density;
this.nowDrawingDensity = density;
}
setDrawingDensity(density) {
this.nowDrawingDensity = density;
}
setPosition(pagePos) {
this.state.position = pagePos;
}
setAngle(angle) {
this.state.angle = angle;
}
setArea(area) {
this.state.area = area;
}
setHardDrawingAngle(angle) {
this.state.hardDrawingAngle = angle;
}
setHardAngle(angle) {
this.state.hardAngle = angle;
this.state.hardDrawingAngle = angle;
}
setOrientation(orientation) {
this.orientation = orientation;
}
getDrawingDensity() {
return this.nowDrawingDensity;
}
getDensity() {
return this.createdDensity;
}
getHardAngle() {
return this.state.hardAngle;
}
}
class PageCollection {
constructor(app, render) {
this.pages = [];
this.currentPageIndex = 0;
this.currentSpreadIndex = 0;
this.landscapeSpread = [];
this.portraitSpread = [];
this.render = render;
this.app = app;
this.currentPageIndex = 0;
this.isShowCover = this.app.getSettings().showCover;
}
destroy() {
this.pages = [];
}
createSpread() {
this.landscapeSpread = [];
this.portraitSpread = [];
for (let i = 0; i < this.pages.length; i++) {
this.portraitSpread.push([i]);
}
let start = 0;
if (this.isShowCover) {
this.pages[0].setDensity("hard");
this.landscapeSpread.push([start]);
start++;
}
for (let i = start; i < this.pages.length; i += 2) {
if (i < this.pages.length - 1) this.landscapeSpread.push([i, i + 1]);else {
this.landscapeSpread.push([i]);
this.pages[i].setDensity("hard");
}
}
}
getSpread() {
return this.render.getOrientation() === "landscape" ? this.landscapeSpread : this.portraitSpread;
}
getSpreadIndexByPage(pageNum) {
const spread = this.getSpread();
for (let i = 0; i < spread.length; i++) if (pageNum === spread[i][0] || pageNum === spread[i][1]) return i;
return null;
}
getPageCount() {
return this.pages.length;
}
getPages() {
return this.pages;
}
getPage(pageIndex) {
if (pageIndex >= 0 && pageIndex < this.pages.length) {
return this.pages[pageIndex];
}
throw new Error('Invalid page number');
}
nextBy(current) {
const idx = this.pages.indexOf(current);
if (idx < this.pages.length - 1) return this.pages[idx + 1];
return null;
}
prevBy(current) {
const idx = this.pages.indexOf(current);
if (idx > 0) return this.pages[idx - 1];
return null;
}
getFlippingPage(direction) {
const current = this.currentSpreadIndex;
if (this.render.getOrientation() === "portrait") {
return direction === 0 ? this.pages[current].newTemporaryCopy() : this.pages[current - 1];
} else {
const spread = direction === 0 ? this.getSpread()[current + 1] : this.getSpread()[current - 1];
if (spread.length === 1) return this.pages[spread[0]];
return direction === 0 ? this.pages[spread[0]] : this.pages[spread[1]];
}
}
getBottomPage(direction) {
const current = this.currentSpreadIndex;
if (this.render.getOrientation() === "portrait") {
return direction === 0 ? this.pages[current + 1] : this.pages[current - 1];
} else {
const spread = direction === 0 ? this.getSpread()[current + 1] : this.getSpread()[current - 1];
if (spread.length === 1) return this.pages[spread[0]];
return direction === 0 ? this.pages[spread[1]] : this.pages[spread[0]];
}
}
showNext() {
if (this.currentSpreadIndex < this.getSpread().length) {
this.currentSpreadIndex++;
this.showSpread();
}
}
showPrev() {
if (this.currentSpreadIndex > 0) {
this.currentSpreadIndex--;
this.showSpread();
}
}
getCurrentPageIndex() {
return this.currentPageIndex;
}
show() {
let pageNum = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (pageNum === null) pageNum = this.currentPageIndex;
if (pageNum < 0 || pageNum >= this.pages.length) return;
const spreadIndex = this.getSpreadIndexByPage(pageNum);
if (spreadIndex !== null) {
this.currentSpreadIndex = spreadIndex;
this.showSpread();
}
}
getCurrentSpreadIndex() {
return this.currentSpreadIndex;
}
setCurrentSpreadIndex(newIndex) {
if (newIndex >= 0 && newIndex < this.getSpread().length) {
this.currentSpreadIndex = newIndex;
} else {
throw new Error('Invalid page');
}
}
showSpread() {
const spread = this.getSpread()[this.currentSpreadIndex];
if (spread.length === 2) {
this.render.setLeftPage(this.pages[spread[0]]);
this.render.setRightPage(this.pages[spread[1]]);
} else {
if (this.render.getOrientation() === "landscape") {
if (spread[0] === this.pages.length - 1) {
this.render.setLeftPage(this.pages[spread[0]]);
this.render.setRightPage(null);
} else {
this.render.setLeftPage(null);
this.render.setRightPage(this.pages[spread[0]]);
}
} else {
this.render.setLeftPage(null);
this.render.setRightPage(this.pages[spread[0]]);
}
}
this.currentPageIndex = spread[0];
this.app.updatePageIndex(this.currentPageIndex);
}
}
class Helper {
static GetDistanceBetweenTwoPoint(point1, point2) {
if (point1 === null || point2 === null) {
return Infinity;
}
return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
}
static GetSegmentLength(segment) {
return Helper.GetDistanceBetweenTwoPoint(segment[0], segment[1]);
}
static GetAngleBetweenTwoLine(line1, line2) {
const A1 = line1[0].y - line1[1].y;
const A2 = line2[0].y - line2[1].y;
const B1 = line1[1].x - line1[0].x;
const B2 = line2[1].x - line2[0].x;
return Math.acos((A1 * A2 + B1 * B2) / (Math.sqrt(A1 * A1 + B1 * B1) * Math.sqrt(A2 * A2 + B2 * B2)));
}
static PointInRect(rect, pos) {
if (pos === null) {
return null;
}
if (pos.x >= rect.left && pos.x <= rect.width + rect.left && pos.y >= rect.top && pos.y <= rect.top + rect.height) {
return pos;
}
return null;
}
static GetRotatedPoint(transformedPoint, startPoint, angle) {
return {
x: transformedPoint.x * Math.cos(angle) + transformedPoint.y * Math.sin(angle) + startPoint.x,
y: transformedPoint.y * Math.cos(angle) - transformedPoint.x * Math.sin(angle) + startPoint.y
};
}
static LimitPointToCircle(startPoint, radius, limitedPoint) {
if (Helper.GetDistanceBetweenTwoPoint(startPoint, limitedPoint) <= radius) {
return limitedPoint;
}
const a = startPoint.x;
const b = startPoint.y;
const n = limitedPoint.x;
const m = limitedPoint.y;
let x = Math.sqrt(Math.pow(radius, 2) * Math.pow(a - n, 2) / (Math.pow(a - n, 2) + Math.pow(b - m, 2))) + a;
if (limitedPoint.x < 0) {
x *= -1;
}
let y = (x - a) * (b - m) / (a - n) + b;
if (a - n + b === 0) {
y = radius;
}
return {
x,
y
};
}
static GetIntersectBetweenTwoSegment(rectBorder, one, two) {
return Helper.PointInRect(rectBorder, Helper.GetIntersectBeetwenTwoLine(one, two));
}
static GetIntersectBeetwenTwoLine(one, two) {
const A1 = one[0].y - one[1].y;
const A2 = two[0].y - two[1].y;
const B1 = one[1].x - one[0].x;
const B2 = two[1].x - two[0].x;
const C1 = one[0].x * one[1].y - one[1].x * one[0].y;
const C2 = two[0].x * two[1].y - two[1].x * two[0].y;
const det1 = A1 * C2 - A2 * C1;
const det2 = B1 * C2 - B2 * C1;
const x = -((C1 * B2 - C2 * B1) / (A1 * B2 - A2 * B1));
const y = -((A1 * C2 - A2 * C1) / (A1 * B2 - A2 * B1));
if (isFinite(x) && isFinite(y)) {
return {
x,
y
};
} else {
if (Math.abs(det1 - det2) < 0.1) throw new Error('Segment included');
}
return null;
}
static GetCordsFromTwoPoint(pointOne, pointTwo) {
const sizeX = Math.abs(pointOne.x - pointTwo.x);
const sizeY = Math.abs(pointOne.y - pointTwo.y);
const lengthLine = Math.max(sizeX, sizeY);
const result = [pointOne];
function getCord(c1, c2, size, length, index) {
if (c2 > c1) {
return c1 + index * (size / length);
} else if (c2 < c1) {
return c1 - index * (size / length);
}
return c1;
}
for (let i = 1; i <= lengthLine; i += 1) {
result.push({
x: getCord(pointOne.x, pointTwo.x, sizeX, lengthLine, i),
y: getCord(pointOne.y, pointTwo.y, sizeY, lengthLine, i)
});
}
return result;
}
}
class HTMLPage extends Page {
constructor(render, element, density) {
super(render, density);
this.copiedElement = null;
this.temporaryCopy = null;
this.isLoad = false;
this.element = element;
this.element.classList.add('stf__item');
this.element.classList.add('--' + density);
}
newTemporaryCopy() {
if (this.nowDrawingDensity === "hard") {
return this;
}
if (this.temporaryCopy === null) {
this.copiedElement = this.element.cloneNode(true);
this.element.parentElement.appendChild(this.copiedElement);
this.temporaryCopy = new HTMLPage(this.render, this.copiedElement, this.nowDrawingDensity);
}
return this.getTemporaryCopy();
}
getTemporaryCopy() {
return this.temporaryCopy;
}
hideTemporaryCopy() {
if (this.temporaryCopy !== null) {
this.copiedElement.remove();
this.copiedElement = null;
this.temporaryCopy = null;
}
}
draw(tempDensity) {
const density = tempDensity ? tempDensity : this.nowDrawingDensity;
const pagePos = this.render.convertToGlobal(this.state.position);
const pageWidth = this.render.getRect().pageWidth;
const pageHeight = this.render.getRect().height;
this.element.classList.remove('--simple');
const commonStyle = `
position: absolute;
display: block;
z-index: ${this.element.style.zIndex};
left: 0;
top: 0;
width: ${pageWidth}px;
height: ${pageHeight}px;
`;
density === "hard" ? this.drawHard(commonStyle) : this.drawSoft(pagePos, commonStyle);
}
drawHard() {
let commonStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
const pos = this.render.getRect().left + this.render.getRect().width / 2;
const angle = this.state.hardDrawingAngle;
const newStyle = commonStyle + `
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
clip-path: none;
-webkit-clip-path: none;
` + (this.orientation === 0 ? `transform-origin: ${this.render.getRect().pageWidth}px 0;
transform: translate3d(0, 0, 0) rotateY(${angle}deg);` : `transform-origin: 0 0;
transform: translate3d(${pos}px, 0, 0) rotateY(${angle}deg);`);
this.element.style.cssText = newStyle;
}
drawSoft(position) {
let commonStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
let polygon = 'polygon( ';
for (const p of this.state.area) {
if (p !== null) {
let g = this.render.getDirection() === 1 ? {
x: -p.x + this.state.position.x,
y: p.y - this.state.position.y
} : {
x: p.x - this.state.position.x,
y: p.y - this.state.position.y
};
g = Helper.GetRotatedPoint(g, {
x: 0,
y: 0
}, this.state.angle);
polygon += g.x + 'px ' + g.y + 'px, ';
}
}
polygon = polygon.slice(0, -2);
polygon += ')';
const newStyle = commonStyle + `transform-origin: 0 0; clip-path: ${polygon}; -webkit-clip-path: ${polygon};` + (this.render.isSafari() && this.state.angle === 0 ? `transform: translate(${position.x}px, ${position.y}px);` : `transform: translate3d(${position.x}px, ${position.y}px, 0) rotate(${this.state.angle}rad);`);
this.element.style.cssText = newStyle;
}
simpleDraw(orient) {
const rect = this.render.getRect();
const pageWidth = rect.pageWidth;
const pageHeight = rect.height;
const x = orient === 1 ? rect.left + rect.pageWidth : rect.left;
const y = rect.top;
this.element.classList.add('--simple');
this.element.style.cssText = `
position: absolute;
display: block;
height: ${pageHeight}px;
left: ${x}px;
top: ${y}px;
width: ${pageWidth}px;
z-index: ${this.render.getSettings().startZIndex + 1};`;
}
getElement() {
return this.element;
}
load() {
this.isLoad = true;
}
setOrientation(orientation) {
super.setOrientation(orientation);
this.element.classList.remove('--left', '--right');
this.element.classList.add(orientation === 1 ? '--right' : '--left');
}
setDrawingDensity(density) {
this.element.classList.remove('--soft', '--hard');
this.element.classList.add('--' + density);
super.setDrawingDensity(density);
}
}
class HTMLPageCollection extends PageCollection {
constructor(app, render, element, items) {
super(app, render);
this.element = element;
this.pagesElement = items;
}
load() {
for (const pageElement of this.pagesElement) {
const page = new HTMLPage(this.render, pageElement, pageElement.dataset['density'] === 'hard' ? "hard" : "soft");
page.load();
this.pages.push(page);
}
this.createSpread();
}
}
class FlipCalculation {
constructor(direction, corner, pageWidth, pageHeight) {
this.direction = direction;
this.corner = corner;
this.topIntersectPoint = null;
this.sideIntersectPoint = null;
this.bottomIntersectPoint = null;
this.pageWidth = parseInt(pageWidth, 10);
this.pageHeight = parseInt(pageHeight, 10);
}
calc(localPos) {
try {
this.position = this.calcAngleAndPosition(localPos);
this.calculateIntersectPoint(this.position);
return true;
} catch (e) {
return false;
}
}
getFlippingClipArea() {
const result = [];
let clipBottom = false;
result.push(this.rect.topLeft);
result.push(this.topIntersectPoint);
if (this.sideIntersectPoint === null) {
clipBottom = true;
} else {
result.push(this.sideIntersectPoint);
if (this.bottomIntersectPoint === null) clipBottom = false;
}
result.push(this.bottomIntersectPoint);
if (clipBottom || this.corner === "bottom") {
result.push(this.rect.bottomLeft);
}
return result;
}
getBottomClipArea() {
const result = [];
result.push(this.topIntersectPoint);
if (this.corner === "top") {
result.push({
x: this.pageWidth,
y: 0
});
} else {
if (this.topIntersectPoint !== null) {
result.push({
x: this.pageWidth,
y: 0
});
}
result.push({
x: this.pageWidth,
y: this.pageHeight
});
}
if (this.sideIntersectPoint !== null) {
if (Helper.GetDistanceBetweenTwoPoint(this.sideIntersectPoint, this.topIntersectPoint) >= 10) result.push(this.sideIntersectPoint);
} else {
if (this.corner === "top") {
result.push({
x: this.pageWidth,
y: this.pageHeight
});
}
}
result.push(this.bottomIntersectPoint);
result.push(this.topIntersectPoint);
return result;
}
getAngle() {
if (this.direction === 0) {
return -this.angle;
}
return this.angle;
}
getRect() {
return this.rect;
}
getPosition() {
return this.position;
}
getActiveCorner() {
if (this.direction === 0) {
return this.rect.topLeft;
}
return this.rect.topRight;
}
getDirection() {
return this.direction;
}
getFlippingProgress() {
return Math.abs((this.position.x - this.pageWidth) / (2 * this.pageWidth) * 100);
}
getCorner() {
return this.corner;
}
getBottomPagePosition() {
if (this.direction === 1) {
return {
x: this.pageWidth,
y: 0
};
}
return {
x: 0,
y: 0
};
}
getShadowStartPoint() {
if (this.corner === "top") {
return this.topIntersectPoint;
} else {
if (this.sideIntersectPoint !== null) return this.sideIntersectPoint;
return this.topIntersectPoint;
}
}
getShadowAngle() {
const angle = Helper.GetAngleBetweenTwoLine(this.getSegmentToShadowLine(), [{
x: 0,
y: 0
}, {
x: this.pageWidth,
y: 0
}]);
if (this.direction === 0) {
return angle;
}
return Math.PI - angle;
}
calcAngleAndPosition(pos) {
let result = pos;
this.updateAngleAndGeometry(result);
if (this.corner === "top") {
result = this.checkPositionAtCenterLine(result, {
x: 0,
y: 0
}, {
x: 0,
y: this.pageHeight
});
} else {
result = this.checkPositionAtCenterLine(result, {
x: 0,
y: this.pageHeight
}, {
x: 0,
y: 0
});
}
if (Math.abs(result.x - this.pageWidth) < 1 && Math.abs(result.y) < 1) {
throw new Error('Point is too small');
}
return result;
}
updateAngleAndGeometry(pos) {
this.angle = this.calculateAngle(pos);
this.rect = this.getPageRect(pos);
}
calculateAngle(pos) {
const left = this.pageWidth - pos.x + 1;
const top = this.corner === "bottom" ? this.pageHeight - pos.y : pos.y;
let angle = 2 * Math.acos(left / Math.sqrt(top * top + left * left));
if (top < 0) angle = -angle;
const da = Math.PI - angle;
if (!isFinite(angle) || da >= 0 && da < 0.003) throw new Error('The G point is too small');
if (this.corner === "bottom") angle = -angle;
return angle;
}
getPageRect(localPos) {
if (this.corner === "top") {
return this.getRectFromBasePoint([{
x: 0,
y: 0
}, {
x: this.pageWidth,
y: 0
}, {
x: 0,
y: this.pageHeight
}, {
x: this.pageWidth,
y: this.pageHeight
}], localPos);
}
return this.getRectFromBasePoint([{
x: 0,
y: -this.pageHeight
}, {
x: this.pageWidth,
y: -this.pageHeight
}, {
x: 0,
y: 0
}, {
x: this.pageWidth,
y: 0
}], localPos);
}
getRectFromBasePoint(points, localPos) {
return {
topLeft: this.getRotatedPoint(points[0], localPos),
topRight: this.getRotatedPoint(points[1], localPos),
bottomLeft: this.getRotatedPoint(points[2], localPos),
bottomRight: this.getRotatedPoint(points[3], localPos)
};
}
getRotatedPoint(transformedPoint, startPoint) {
return {
x: transformedPoint.x * Math.cos(this.angle) + transformedPoint.y * Math.sin(this.angle) + startPoint.x,
y: transformedPoint.y * Math.cos(this.angle) - transformedPoint.x * Math.sin(this.angle) + startPoint.y
};
}
calculateIntersectPoint(pos) {
const boundRect = {
left: -1,
top: -1,
width: this.pageWidth + 2,
height: this.pageHeight + 2
};
if (this.corner === "top") {
this.topIntersectPoint = Helper.GetIntersectBetweenTwoSegment(boundRect, [pos, this.rect.topRight], [{
x: 0,
y: 0
}, {
x: this.pageWidth,
y: 0
}]);
this.sideIntersectPoint = Helper.GetIntersectBetweenTwoSegment(boundRect, [pos, this.rect.bottomLeft], [{
x: this.pageWidth,
y: 0
}, {
x: this.pageWidth,
y: this.pageHeight
}]);
this.bottomIntersectPoint = Helper.GetIntersectBetweenTwoSegment(boundRect, [this.rect.bottomLeft, this.rect.bottomRight], [{
x: 0,
y: this.pageHeight
}, {
x: this.pageWidth,
y: this.pageHeight
}]);
} else {
this.topIntersectPoint = Helper.GetIntersectBetweenTwoSegment(boundRect, [this.rect.topLeft, this.rect.topRight], [{
x: 0,
y: 0
}, {
x: this.pageWidth,
y: 0
}]);
this.sideIntersectPoint = Helper.GetIntersectBetweenTwoSegment(boundRect, [pos, this.rect.topLeft], [{
x: this.pageWidth,
y: 0
}, {
x: this.pageWidth,
y: this.pageHeight
}]);
this.bottomIntersectPoint = Helper.GetIntersectBetweenTwoSegment(boundRect, [this.rect.bottomLeft, this.rect.bottomRight], [{
x: 0,
y: this.pageHeight
}, {
x: this.pageWidth,
y: this.pageHeight
}]);
}
}
checkPositionAtCenterLine(checkedPos, centerOne, centerTwo) {
let result = checkedPos;
const tmp = Helper.LimitPointToCircle(centerOne, this.pageWidth, result);
if (result !== tmp) {
result = tmp;
this.updateAngleAndGeometry(result);
}
const rad = Math.sqrt(Math.pow(this.pageWidth, 2) + Math.pow(this.pageHeight, 2));
let checkPointOne = this.rect.bottomRight;
let checkPointTwo = this.rect.topLeft;
if (this.corner === "bottom") {
checkPointOne = this.rect.topRight;
checkPointTwo = this.rect.bottomLeft;
}
if (checkPointOne.x <= 0) {
const bottomPoint = Helper.LimitPointToCircle(centerTwo, rad, checkPointTwo);
if (bottomPoint !== result) {
result = bottomPoint;
this.updateAngleAndGeometry(result);
}
}
return result;
}
getSegmentToShadowLine() {
const first = this.getShadowStartPoint();
const second = first !== this.sideIntersectPoint && this.sideIntersectPoint !== null ? this.sideIntersectPoint : this.bottomIntersectPoint;
return [first, second];
}
}
class Flip {
constructor(render, app) {
this.flippingPage = null;
this.bottomPage = null;
this.calc = null;
this.state = "read";
this.render = render;
this.app = app;
}
fold(globalPos) {
this.setState("user_fold");
if (this.calc === null) this.start(globalPos);
this.do(this.render.convertToPage(globalPos));
}
flip(globalPos) {
if (this.app.getSettings().disableFlipByClick && !this.isPointOnCorners(globalPos)) return;
if (this.calc !== null) this.render.finishAnimation();
if (!this.start(globalPos)) return;
const rect = this.getBoundsRect();
this.setState("flipping");
const topMargins = rect.height / 10;
const yStart = this.calc.getCorner() === "bottom" ? rect.height - topMargins : topMargins;
const yDest = this.calc.getCorner() === "bottom" ? rect.height : 0;
this.calc.calc({
x: rect.pageWidth - topMargins,
y: yStart
});
this.animateFlippingTo({
x: rect.pageWidth - topMargins,
y: yStart
}, {
x: -rect.pageWidth,
y: yDest
}, true);
}
start(globalPos) {
this.reset();
const bookPos = this.render.convertToBook(globalPos);
const rect = this.getBoundsRect();
const direction = this.getDirectionByPoint(bookPos);
const flipCorner = bookPos.y >= rect.height / 2 ? "bottom" : "top";
if (!this.checkDirection(direction)) return false;
try {
this.flippingPage = this.app.getPageCollection().getFlippingPage(direction);
this.bottomPage = this.app.getPageCollection().getBottomPage(direction);
if (this.render.getOrientation() === "landscape") {
if (direction === 1) {
const nextPage = this.app.getPageCollection().nextBy(this.flippingPage);
if (nextPage !== null) {
if (this.flippingPage.getDensity() !== nextPage.getDensity()) {
this.flippingPage.setDrawingDensity("hard");
nextPage.setDrawingDensity("hard");
}
}
} else {
const prevPage = this.app.getPageCollection().prevBy(this.flippingPage);
if (prevPage !== null) {
if (this.flippingPage.getDensity() !== prevPage.getDensity()) {
this.flippingPage.setDrawingDensity("hard");
prevPage.setDrawingDensity("hard");
}
}
}
}
this.render.setDirection(direction);
this.calc = new FlipCalculation(direction, flipCorner, rect.pageWidth.toString(10), rect.height.toString(10));
return true;
} catch (e) {
return false;
}
}
do(pagePos) {
if (this.calc === null) return;
if (this.calc.calc(pagePos)) {
const progress = this.calc.getFlippingProgress();
this.bottomPage.setArea(this.calc.getBottomClipArea());
this.bottomPage.setPosition(this.calc.getBottomPagePosition());
this.bottomPage.setAngle(0);
this.bottomPage.setHardAngle(0);
this.flippingPage.setArea(this.calc.getFlippingClipArea());
this.flippingPage.setPosition(this.calc.getActiveCorner());
this.flippingPage.setAngle(this.calc.getAngle());
if (this.calc.getDirection() === 0) {
this.flippingPage.setHardAngle(90 * (200 - progress * 2) / 100);
} else {
this.flippingPage.setHardAngle(-90 * (200 - progress * 2) / 100);
}
this.render.setPageRect(this.calc.getRect());
this.render.setBottomPage(this.bottomPage);
this.render.setFlippingPage(this.flippingPage);
this.render.setShadowData(this.calc.getShadowStartPoint(), this.calc.getShadowAngle(), progress, this.calc.getDirection());
}
}
flipToPage(page, corner) {
const current = this.app.getPageCollection().getCurrentSpreadIndex();
const next = this.app.getPageCollection().getSpreadIndexByPage(page);
try {
if (next > current) {
this.app.getPageCollection().setCurrentSpreadIndex(next - 1);
this.flipNext(corner);
}
if (next < current) {
this.app.getPageCollection().setCurrentSpreadIndex(next + 1);
this.flipPrev(corner);
}
} catch (e) {}
}
flipNext(corner) {
this.flip({
x: this.render.getRect().left + this.render.getRect().pageWidth * 2 - 10,
y: corner === "top" ? 1 : this.render.getRect().height - 2
});
}
flipPrev(corner) {
this.flip({
x: 10,
y: corner === "top" ? 1 : this.render.getRect().height - 2
});
}
stopMove() {
if (this.calc === null) return;
const pos = this.calc.getPosition();
const rect = this.getBoundsRect();
const y = this.calc.getCorner() === "bottom" ? rect.height : 0;
if (pos.x <= 0) this.animateFlippingTo(pos, {
x: -rect.pageWidth,
y
}, true);else this.animateFlippingTo(pos, {
x: rect.pageWidth,
y
}, false);
}
showCorner(globalPos) {
if (!this.checkState("read", "fold_corner")) return;
const rect = this.getBoundsRect();
const pageWidth = rect.pageWidth;
if (this.isPointOnCorners(globalPos)) {
if (this.calc === null) {
if (!this.start(globalPos)) return;
this.setState("fold_corner");
this.calc.calc({
x: pageWidth - 1,
y: 1
});
const fixedCornerSize = 50;
const yStart = this.calc.getCorner() === "bottom" ? rect.height - 1 : 1;
const yDest = this.calc.getCorner() === "bottom" ? rect.height - fixedCornerSize : fixedCornerSize;
this.animateFlippingTo({
x: pageWidth - 1,
y: yStart
}, {
x: pageWidth - fixedCornerSize,
y: yDest
}, false, false);
} else {
this.do(this.render.convertToPage(globalPos));
}
} else {
this.setState("read");
this.render.finishAnimation();
this.stopMove();
}
}
animateFlippingTo(start, dest, isTurned) {
let needReset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
const points = Helper.GetCordsFromTwoPoint(start, dest);
const frames = [];
for (const p of points) frames.push(() => this.do(p));
const duration = this.getAnimationDuration(points.length);
this.render.startAnimation(frames, duration, () => {
if (!this.calc) return;
if (isTurned) {
if (this.calc.getDirection() === 1) this.app.turnToPrevPage();else this.app.turnToNextPage();
}
if (needReset) {
this.render.setBottomPage(null);
this.render.setFlippingPage(null);
this.render.clearShadow();
this.setState("read");
this.reset();
}
});
}
getCalculation() {
return this.calc;
}
getState() {
return this.state;
}
setState(newState) {
if (this.state !== newState) {
this.app.updateState(newState);
this.state = newState;
}
}
getDirectionByPoint(touchPos) {
const rect = this.getBoundsRect();
if (this.render.getOrientation() === "portrait") {
if (touchPos.x - rect.pageWidth <= rect.width / 5) {
return 1;
}
} else if (touchPos.x < rect.width / 2) {
return 1;
}
return 0;
}
getAnimationDuration(size) {
const defaultTime = this.app.getSettings().flippingTime;
if (size >= 1000) return defaultTime;
return size / 1000 * defaultTime;
}
checkDirection(direction) {
if (direction === 0) return this.app.getCurrentPageIndex() < this.app.getPageCount() - 1;
return this.app.getCurrentPageIndex() >= 1;
}
reset() {
this.calc = null;
this.flippingPage = null;
this.bottomPage = null;
}
getBoundsRect() {
return this.render.getRect();
}
checkState() {
for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {
states[_key] = arguments[_key];
}
for (const state of states) {
if (this.state === state) return true;
}
return false;
}
isPointOnCorners(globalPos) {
const rect = this.getBoundsRect();
const pageWidth = rect.pageWidth;
const operatingDistance = Math.sqrt(Math.pow(pageWidth, 2) + Math.pow(rect.height, 2)) / 5;
const bookPos = this.render.convertToBook(globalPos);
return bookPos.x > 0 && bookPos.y > 0 && bookPos.x < rect.width && bookPos.y < rect.height && (bookPos.x < operatingDistance || bookPos.x > rect.width - operatingDistance) && (bookPos.y < operatingDistance || bookPos.y > rect.height - operatingDistance);
}
}
class Render {
constructor(app, setting) {
this.leftPage = null;
this.rightPage = null;
this.flippingPage = null;
this.bottomPage = null;
this.direction = null;
this.orientation = null;
this.shadow = null;
this.animation = null;
this.pageRect = null;
this.boundsRect = null;
this.timer = 0;
this.safari = false;
this.setting = setting;
this.app = app;
const regex = new RegExp('Version\\/[\\d\\.]+.*Safari/');
this.safari = regex.exec(window.navigator.userAgent) !== null;
}
render(timer) {
if (this.animation !== null) {
const frameIndex = Math.round((timer - this.animation.startedAt) / this.animation.durationFrame);
if (frameIndex < this.animation.frames.length) {
this.animation.frames[frameIndex]();
} else {
this.animation.onAnimateEnd();
this.animation = null;
}
}
this.timer = timer;
this.drawFrame();
}
start() {
this.update();
const loop = timer => {
this.render(timer);
requestAnimationFrame(loop);
};
requestAnimationFrame(loop);
}
startAnimation(frames, duration, onAnimateEnd) {
this.finishAnimation();
this.animation = {
frames,
duration,
durationFrame: duration / frames.length,
onAnimateEnd,
startedAt: this.timer
};
}
finishAnimation() {
if (this.animation !== null) {
this.animation.frames[this.animation.frames.length - 1]();
if (this.animation.onAnimateEnd !== null) {
this.animation.onAnimateEnd();
}
}
this.animation = null;
}
update() {
this.boundsRect = null;
const orientation = this.calculateBoundsRect();
if (this.orientation !== orientation) {
this.orientation = orientation;
this.app.updateOrientation(orientation);
}
}
calculateBoundsRect() {
let orientation = "landscape";
const blockWidth = this.getBlockWidth();
const middlePoint = {
x: blockWidth / 2,
y: this.getBlockHeight() / 2
};
const ratio = this.setting.width / this.setting.height;
let pageWidth = this.setting.width;
let pageHeight = this.setting.height;
let left = middlePoint.x - pageWidth;
if (this.setting.size === "stretch") {
if (blockWidth < this.setting.minWidth * 2 && this.app.getSettings().usePortrait) orientation = "portrait";
pageWidth = orientation === "portrait" ? this.getBlockWidth() : this.getBlockWidth() / 2;
if (pageWidth > this.setting.maxWidth) pageWidth = this.setting.maxWidth;
pageHeight = pageWidth / ratio;
if (pageHeight > this.getBlockHeight()) {
pageHeight = this.getBlockHeight();
pageWidth = pageHeight * ratio;
}
left = orientation === "portrait" ? middlePoint.x - pageWidth / 2 - pageWidth : middlePoint.x - pageWidth;
} else {
if (blockWidth < pageWidth * 2) {
if (this.app.getSettings().usePortrait) {
orientation = "portrait";
left = middlePoint.x - pageWidth / 2 - pageWidth;
}
}
}
this.boundsRect = {
left,
top: middlePoint.y - pageHeight / 2,
width: pageWidth * 2,
height: pageHeight,
pageWidth: pageWidth
};
return orientation;
}
setShadowData(pos, angle, progress, direction) {
if (!this.app.getSettings().drawShadow) return;
const maxShadowOpacity = 100 * this.getSettings().maxShadowOpacity;
this.shadow = {
pos,
angle,
width: this.getRect().pageWidth * 3 / 4 * progress / 100,
opacity: (100 - progress) * maxShadowOpacity / 100 / 100,
direction,
progress: progress * 2
};
}
clearShadow() {
this.shadow = null;
}
getBlockWidth() {
return this.app.getUI().getDistElement().offsetWidth;
}
getBlockHeight() {
return this.app.getUI().getDistElement().offsetHeight;
}
getDirection() {
return this.direction;
}
getRect() {
if (this.boundsRect === null) this.calculateBoundsRect();
return this.boundsRect;
}
getSettings() {
return this.app.getSettings();
}
getOrientation() {
return this.orientation;
}
setPageRect(pageRect) {
this.pageRect = pageRect;
}
setDirection(direction) {
this.direction = direction;
}
setRightPage(page) {
if (page !== null) page.setOrientation(1);
this.rightPage = page;
}
setLeftPage(page) {
if (page !== null) page.setOrientation(0);
this.leftPage = page;
}
setBottomPage(page) {
if (page !== null) page.setOrientation(this.direction === 1 ? 0 : 1);
this.bottomPage = page;
}
setFlippingPage(page) {
if (page !== null) page.setOrientation(this.direction === 0 && this.orientation !== "portrait" ? 0 : 1);
this.flippingPage = page;
}
convertToBook(pos) {
const rect = this.getRect();
return {
x: pos.x - rect.left,
y: pos.y - rect.top
};
}
isSafari() {
return this.safari;
}
convertToPage(pos, direction) {
if (!direction) direction = this.direction;
const rect = this.getRect();
const x = direction === 0 ? pos.x - rect.left - rect.width / 2 : rect.width / 2 - pos.x + rect.left;
return {
x,
y: pos.y - rect.top
};
}
convertToGlobal(pos, direction) {
if (!direction) direction = this.direction;
if (pos == null) return null;
const rect = this.getRect();
const x = direction === 0 ? pos.x + rect.left + rect.width / 2 : rect.width / 2 - pos.x + rect.left;
return {
x,
y: pos.y + rect.top
};
}
convertRectToGlobal(rect, direction) {
if (!direction) direction = this.direction;
return {
topLeft: this.convertToGlobal(rect.topLeft, direction),
topRight: this.convertToGlobal(rect.topRight, direction),
bottomLeft: this.convertToGlobal(rect.bottomLeft, direction),
bottomRight: this.convertToGlobal(rect.bottomRight, direction)
};
}
}
class CanvasRender extends Render {
constructor(app, setting, inCanvas) {
super(app, setting);
this.canvas = inCanvas;
const ctx = canvas.getContext("2d");
}
getContext() {
return this.ctx;
}
reload() {}
drawFrame() {
this.clear();
if (this.orientation !== "portrait") if (this.leftPage != null) this.leftPage.simpleDraw(0);
if (this.rightPage != null) this.rightPage.simpleDraw(1);
if (this.bottomPage != null) this.bottomPage.draw();
this.drawBookShadow();
if (this.flippingPage != null) this.flippingPage.draw();
if (this.shadow != null) {
this.drawOuterShadow();
this.drawInnerShadow();
}
const rect = this.getRect();
if (this.orientation === "portrait") {
this.ctx.beginPath();
this.ctx.rect(rect.left + rect.pageWidth, rect.top, rect.width, rect.height);
this.ctx.clip();
}
}
drawBookShadow() {
const rect = this.getRect();
this.ctx.save();
this.ctx.beginPath();
const shadowSize = rect.width / 20;
this.ctx.rect(rect.left, rect.top, rect.width, rect.height);
const shadowPos = {
x: rect.left + rect.width / 2 - shadowSize / 2,
y: 0
};
this.ctx.translate(shadowPos.x, shadowPos.y);
const outerGradient = this.ctx.createLinearGradient(0, 0, shadowSize, 0);
outerGradient.addColorStop(0, 'rgba(0, 0, 0, 0)');
outerGradient.addColorStop(0.4, 'rgba(0, 0, 0, 0.2)');
outerGradient.addColorStop(0.49, 'rgba(0, 0, 0, 0.1)');
outerGradient.addColorStop(0.5, 'rgba(0, 0, 0, 0.5)');
outerGradient.addColorStop(0.51, 'rgba(0, 0, 0, 0.4)');
outerGradient.addColorStop(1, 'rgba(0, 0, 0, 0)');
this.ctx.clip();
this.ctx.fillStyle = outerGradient;
this.ctx.fillRect(0, 0, shadowSize, rect.height * 2);
this.ctx.restore();
}
drawOuterShadow() {
const rect = this.getRect();
this.ctx.save();
this.ctx.beginPath();
this.ctx.rect(rect.left, rect.top, rect.width, rect.height);
const shadowPos = this.convertToGlobal({
x: this.shadow.pos.x,
y: this.shadow.pos.y
});
this.ctx.translate(shadowPos.x, shadowPos.y);
this.ctx.rotate(Math.PI + this.shadow.angle + Math.PI / 2);
const outerGradient = this.ctx.createLinearGradient(0, 0, this.shadow.width, 0);
if (this.shadow.direction === 0) {
this.ctx.translate(0, -100);
outerGradient.addColorStop(0, 'rgba(0, 0, 0, ' + this.shadow.opacity + ')');
outerGradient.addColorStop(1, 'rgba(0, 0, 0, 0)');
} else {
this.ctx.translate(-this.shadow.width, -100);
outerGradient.addColorStop(0, 'rgba(0, 0, 0, 0)');
outerGradient.addColorStop(1, 'rgba(0, 0, 0, ' + this.shadow.opacity + ')');
}
this.ctx.clip();
this.ctx.fillStyle = outerGradient;
this.ctx.fillRect(0, 0, this.shadow.width, rect.height * 2);
this.ctx.restore();
}
drawInnerShadow() {
const rect = this.getRect();
this.ctx.save();
this.ctx.beginPath();
const shadowPos = this.convertToGlobal({
x: this.shadow.pos.x,
y: this.shadow.pos.y
});
const pageRect = this.convertRectToGlobal(this.pageRect);
this.ctx.moveTo(pageRect.topLeft.x, pageRect.topLeft.y);
this.ctx.lineTo(pageRect.topRight.x, pageRect.topRight.y);
this.ctx.lineTo(pageRect.bottomRight.x, pageRect.bottomRight.y);
this.ctx.lineTo(pageRect.bottomLeft.x, pageRect.bottomLeft.y);
this.ctx.translate(shadowPos.x, shadowPos.y);
this.ctx.rotate(Math.PI + this.shadow.angle + Math.PI / 2);
const isw = this.shadow.width * 3 / 4;
const innerGradient = this.ctx.createLinearGradient(0, 0, isw, 0);
if (this.shadow.direction === 0) {
this.ctx.translate(-isw, -100);
innerGradient.addColorStop(1, 'rgba(0, 0, 0, ' + this.shadow.opacity + ')');
innerGradient.addColorStop(0.9, 'rgba(0, 0, 0, 0.05)');
innerGradient.addColorStop(0.7, 'rgba(0, 0, 0, ' + this.shadow.opacity + ')');
innerGradient.addColorStop(0, 'rgba(0, 0, 0, 0)');
} else {
this.ctx.translate(0, -100);
innerGradient.addColorStop(0, 'rgba(0, 0, 0, ' + this.shadow.opacity + ')');
innerGradient.addColorStop(0.1, 'rgba(0, 0, 0, 0.05)');
innerGradient.addColorStop(0.3, 'rgba(0, 0, 0, ' + this.shadow.opacity + ')');
innerGradient.addColorStop(1, 'rgba(0, 0, 0, 0)');
}
this.ctx.clip();
this.ctx.fillStyle = innerGradient;
this.ctx.fillRect(0, 0, isw, rect.height * 2);
this.ctx.restore();
}
clear() {
this.ctx.fillStyle = 'white';
this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
}
}
class UI {
constructor(inBlock, app, setting) {
this.cspPolicyService = app.cspPolicyService;
this.touchPoint = null;
this.swipeTimeout = 250;
this.onResize = () => {
this.update();
};
this.onMouseDown = e => {
if (this.checkTarget(e.target)) {
const pos = this.getMousePos(e.clientX, e.clientY);
this.app.startUserTouch(pos);
e.preventDefault();
}
};
this.onTouchStart = e => {
if (this.checkTarget(e.target)) {
if (e.changedTouches.length > 0) {
const t = e.changedTouches[0];
const pos = this.getMousePos(t.clientX, t.clientY);
this.touchPoint = {
point: pos,
time: Date.now()
};
setTimeout(() => {
if (this.touchPoint !== null) {
this.app.startUserTouch(pos);
}
}, this.swipeTimeout);
if (!this.app.getSettings().mobileScrollSupport) e.preventDefault();
}
}
};
this.onMouseUp = e => {
const pos = this.getMousePos(e.clientX, e.clientY);
this.app.userStop(pos);
};
this.onMouseMove = e => {
const pos = this.getMousePos(e.clientX, e.clientY);
this.app.userMove(pos, false);
};
this.onTouchMove = e => {
if (e.changedTouches.length > 0) {
const t = e.changedTouches[0];
const pos = this.getMousePos(t.clientX, t.clientY);
if (this.app.getSettings().mobileScrollSupport) {
if (this.touchPoint !== null) {
if (Math.abs(this.touchPoint.point.x - pos.x) > 10 || this.app.getState() !== "read") {
if (e.cancelable) this.app.userMove(pos, true);
}
}
if (this.app.getState() !== "read") {
e.preventDefault();
}
} else {
this.app.userMove(pos, true);
}
}
};
this.onTouchEnd = e => {
if (e.changedTouches.length > 0) {
const t = e.changedTouches[0];
const pos = this.getMousePos(t.clientX, t.clientY);
let isSwipe = false;
if (this.touchPoint !== null) {
const dx = pos.x - this.touchPoint.point.x;
const distY = Math.abs(pos.y - this.touchPoint.point.y);
if (Math.abs(dx) > this.swipeDistance && distY < this.swipeDistance * 2 && Date.now() - this.touchPoint.time < this.swipeTimeout) {
if (dx > 0) {
this.app.flipPrev(this.touchPoint.point.y < this.app.getRender().getRect().height / 2 ? "top" : "bottom");
} else {
this.app.flipNext(this.touchPoint.point.y < this.app.getRender().getRect().height / 2 ? "top" : "bottom");
}
isSwipe = true;
}
this.touchPoint = null;
}
this.app.userStop(pos, isSwipe);
}
};
this.parentElement = inBlock;
inBlock.classList.add('stf__parent');
const wrapperHtml = this.cspPolicyService.createTrustedHTML('<div class="stf__wrapper"></div>');
inBlock.insertAdjacentHTML('afterbegin', wrapperHtml);
this.wrapper = inBlock.querySelector('.stf__wrapper');
this.app = app;
const k = this.app.getSettings().usePortrait ? 1 : 2;
inBlock.style.minWidth = setting.minWidth * k + 'px';
inBlock.style.minHeight = setting.minHeight + 'px';
if (setting.size === "fixed") {
inBlock.style.minWidth = setting.width * k + 'px';
inBlock.style.minHeight = setting.height + 'px';
}
if (setting.autoSize) {
inBlock.style.width = '100%';
inBlock.style.maxWidth = setting.maxWidth * 2 + 'px';
}
inBlock.style.display = 'block';
window.addEventListener('resize', this.onResize, false);
this.swipeDistance = setting.swipeDistance;
}
destroy() {
if (this.app.getSettings().useMouseEvents) this.removeHandlers();
this.distElement.remove();
this.wrapper.remove();
}
getDistElement() {
return this.distElement;
}
getWrapper() {
return this.wrapper;
}
setOrientationStyle(orientation) {
this.wrapper.classList.remove('--portrait', '--landscape');
if (orientation === "portrait") {
if (this.app.getSettings().autoSize) this.wrapper.style.paddingBottom = this.app.getSettings().height / this.app.getSettings().width * 100 + '%';
this.wrapper.classList.add('--portrait');
} else {
if (this.app.getSettings().autoSize) this.wrapper.style.paddingBottom = this.app.getSettings().height / (this.app.getSettings().width * 2) * 100 + '%';
this.wrapper.classList.add('--landscape');
}
this.update();
}
removeHandlers() {
window.removeEventListener('resize', this.onResize);
this.distElement.removeEventListener('mousedown', this.onMouseDown);
this.distElement.removeEventListener('touchstart', this.onTouchStart);
window.removeEventListener('mousemove', this.onMouseMove);
window.removeEventListener('touchmove', this.onTouchMove);
window.removeEventListener('mouseup', this.onMouseUp);
window.removeEventListener('touchend', this.onTouchEnd);
}
setHandlers() {
window.addEventListener('resize', this.onResize, false);
if (!this.app.getSettings().useMouseEvents) return;
this.distElement.addEventListener('mousedown', this.onMouseDown);
this.distElement.addEventListener('touchstart', this.onTouchStart);
window.addEventListener('mousemove', this.onMouseMove);
window.addEventListener('touchmove', this.onTouchMove, {
passive: !this.app.getSettings().mobileScrollSupport
});
window.addEventListener('mouseup', this.onMouseUp);
window.addEventListener('touchend', this.onTouchEnd);
}
getMousePos(x, y) {
const rect = this.distElement.getBoundingClientRect();
return {
x: x - rect.left,
y: y - rect.top
};
}
checkTarget(targer) {
if (!this.app.getSettings().clickEventForward) return true;
if (['a', 'button'].includes(targer.tagName.toLowerCase())) {
return false;
}
return true;
}
}
class HTMLUI extends UI {
constructor(inBlock, app, setting, items, cspPolicyService) {
super(inBlock, app, setting);
this.cspPolicyService = cspPolicyService;
const wrapperHtml = this.cspPolicyService.createTrustedHTML('<div class="stf__block"></div>');
this.wrapper.insertAdjacentHTML('afterbegin', wrapperHtml);
this.distElement = inBlock.querySelector('.stf__block');
this.items = items;
for (const item of items) {
this.distElement.appendChild(item);
}
this.setHandlers();
}
clear() {
for (const item of this.items) {
this.parentElement.appendChild(item);
}
}
updateItems(items) {
this.removeHandlers();
this.distElement.innerHTML = '';
for (const item of items) {
this.distElement.appendChild(item);
}
this.items = items;
this.setHandlers();
}
update() {
this.app.getRender().update();
}
}
class CanvasUI extends UI {
constructor(inBlock, app, setting) {
super(inBlock, app, setting);
this.wrapper.innerHTML = '<canvas class="stf__canvas"></canvas>';
this.canvas = inBlock.querySelectorAll('canvas')[0];
this.distElement = this.canvas;
this.resizeCanvas();
this.setHandlers();
}
resizeCanvas() {
const cs = getComputedStyle(this.canvas);
const width = parseInt(cs.getPropertyValue('width'), 10);
const height = parseInt(cs.getPropertyValue('height'), 10);
this.canvas.width = width;
this.canvas.height = height;
}
getCanvas() {
return this.canvas;
}
update() {
this.resizeCanvas();
this.app.getRender().update();
}
}
class EventObject {
constructor() {
this.events = new Map();
}
on(eventName, callback) {
if (!this.events.has(eventName)) {
this.events.set(eventName, [callback]);
} else {
this.events.get(eventName).push(callback);
}
return this;
}
off(event) {
this.events.delete(event);
}
trigger(eventName, app) {
let data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!this.events.has(eventName)) return;
for (const callback of this.events.get(eventName)) {
callback({
data,
object: app
});
}
}
}
class HTMLRender extends Render {
constructor(app, setting, element) {
super(app, setting);
this.outerShadow = null;
this.innerShadow = null;
this.hardShadow = null;
this.hardInnerShadow = null;
this.element = element;
this.createShadows();
}
createShadows() {
const shadowHtml = this.app.cspPolicyService.createTrustedHTML(`<div class="stf__outerShadow"></div>
<div class="stf__innerShadow"></div>
<div class="stf__hardShadow"></div>
<div class="stf__hardInnerShadow"></div>`);
this.element.insertAdjacentHTML('beforeend', shadowHtml);
this.outerShadow = this.element.querySelector('.stf__outerShadow');
this.innerShadow = this.element.querySelector('.stf__innerShadow');
this.hardShadow = this.element.querySelector('.stf__hardShadow');
this.hardInnerShadow = this.element.querySelector('.stf__hardInnerShadow');
}
clearShadow() {
super.clearShadow();
this.outerShadow.style.cssText = 'display: none';
this.innerShadow.style.cssText = 'display: none';
this.hardShadow.style.cssText = 'display: none';
this.hardInnerShadow.style.cssText = 'display: none';
}
reload() {
const testShadow = this.element.querySelector('.stf__outerShadow');
if (!testShadow) {
this.createShadows();
}
}
drawHardInnerShadow() {
const rect = this.getRect();
const progress = this.shadow.progress > 100 ? 200 - this.shadow.progress : this.shadow.progress;
let innerShadowSize = (100 - progress) * (2.5 * rect.pageWidth) / 100 + 20;
if (innerShadowSize > rect.pageWidth) innerShadowSize = rect.pageWidth;
let newStyle = `
display: block;
z-index: ${(this.getSettings().startZIndex + 5).toString(10)};
width: ${innerShadowSize}px;
height: ${rect.height}px;
background: linear-gradient(to right,
rgba(0, 0, 0, ${this.shadow.opacity * progress / 100}) 5%,
rgba(0, 0, 0, 0) 100%);
left: ${rect.left + rect.width / 2}px;
transform-origin: 0 0;
`;
newStyle += this.getDirection() === 0 && this.shadow.progress > 100 || this.getDirection() === 1 && this.shadow.progress <= 100 ? `transform: translate3d(0, 0, 0);` : `transform: translate3d(0, 0, 0) rotateY(180deg);`;
this.hardInnerShadow.style.cssText = newStyle;
}
drawHardOuterShadow() {
const rect = this.getRect();
const progress = this.shadow.progress > 100 ? 200 - this.shadow.progress : this.shadow.progress;
let shadowSize = (100 - progress) * (2.5 * rect.pageWidth) / 100 + 20;
if (shadowSize > rect.pageWidth) shadowSize = rect.pageWidth;
let newStyle = `
display: block;
z-index: ${(this.getSettings().startZIndex + 4).toString(10)};
width: ${shadowSize}px;
height: ${rect.height}px;
background: linear-gradient(to left, rgba(0, 0, 0, ${this.shadow.opacity}) 5%, rgba(0, 0, 0, 0) 100%);
left: ${rect.left + rect.width / 2}px;
transform-origin: 0 0;
`;
newStyle += this.getDirection() === 0 && this.shadow.progress > 100 || this.getDirection() === 1 && this.shadow.progress <= 100 ? `transform: translate3d(0, 0, 0) rotateY(180deg);` : `transform: translate3d(0, 0, 0);`;
this.hardShadow.style.cssText = newStyle;
}
drawInnerShadow() {
const rect = this.getRect();
const innerShadowSize = this.shadow.width * 3 / 4;
const shadowTranslate = this.getDirection() === 0 ? innerShadowSize : 0;
const shadowDirection = this.getDirection() === 0 ? 'to left' : 'to right';
const shadowPos = this.convertToGlobal(this.shadow.pos);
const angle = this.shadow.angle + 3 * Math.PI / 2;
const clip = [this.pageRect.topLeft, this.pageRect.topRight, this.pageRect.bottomRight, this.pageRect.bottomLeft];
let polygon = 'polygon( ';
for (const p of clip) {
let g = this.getDirection() === 1 ? {
x: -p.x + this.shadow.pos.x,
y: p.y - this.shadow.pos.y
} : {
x: p.x - this.shadow.pos.x,
y: p.y - this.shadow.pos.y
};
g = Helper.GetRotatedPoint(g, {
x: shadowTranslate,
y: 100
}, angle);
polygon += g.x + 'px ' + g.y + 'px, ';
}
polygon = polygon.slice(0, -2);
polygon += ')';
const newStyle = `
display: block;
z-index: ${(this.getSettings().startZIndex + 10).toString(10)};
width: ${innerShadowSize}px;
height: ${rect.height * 2}px;
background: linear-gradient(${shadowDirection},
rgba(0, 0, 0, ${this.shadow.opacity}) 5%,
rgba(0, 0, 0, 0.05) 15%,
rgba(0, 0, 0, ${this.shadow.opacity}) 35%,
rgba(0, 0, 0, 0) 100%);
transform-origin: ${shadowTranslate}px 100px;
transform: translate3d(${shadowPos.x - shadowTranslate}px, ${shadowPos.y - 100}px, 0) rotate(${angle}rad);
clip-path: ${polygon};
-webkit-clip-path: ${polygon};
`;
this.innerShadow.style.cssText = newStyle;
}
drawOuterShadow() {
const rect = this.getRect();
const shadowPos = this.convertToGlobal({
x: this.shadow.pos.x,
y: this.shadow.pos.y
});
const angle = this.shadow.angle + 3 * Math.PI / 2;
const shadowTranslate = this.getDirection() === 1 ? this.shadow.width : 0;
const shadowDirection = this.getDirection() === 0 ? 'to right' : 'to left';
const clip = [{
x: 0,
y: 0
}, {
x: rect.pageWidth,
y: 0
}, {
x: rect.pageWidth,
y: rect.height
}, {
x: 0,
y: rect.height
}];
let polygon = 'polygon( ';
for (const p of clip) {
if (p !== null) {
let g = this.getDirection() === 1 ? {
x: -p.x + this.shadow.pos.x,
y: p.y - this.shadow.pos.y
} : {
x: p.x - this.shadow.pos.x,
y: p.y - this.shadow.pos.y
};
g = Helper.GetRotatedPoint(g, {
x: shadowTranslate,
y: 100
}, angle);
polygon += g.x + 'px ' + g.y + 'px, ';
}
}
polygon = polygon.slice(0, -2);
polygon += ')';
const newStyle = `
display: block;
z-index: ${(this.getSettings().startZIndex + 10).toString(10)};
width: ${this.shadow.width}px;
height: ${rect.height * 2}px;
background: linear-gradient(${shadowDirection}, rgba(0, 0, 0, ${this.shadow.opacity}), rgba(0, 0, 0, 0));
transform-origin: ${shadowTranslate}px 100px;
transform: translate3d(${shadowPos.x - shadowTranslate}px, ${shadowPos.y - 100}px, 0) rotate(${angle}rad);
clip-path: ${polygon};
-webkit-clip-path: ${polygon};
`;
this.outerShadow.style.cssText = newStyle;
}
drawLeftPage() {
if (this.orientation === "portrait" || this.leftPage === null) return;
if (this.direction === 1 && this.flippingPage !== null && this.flippingPage.getDrawingDensity() === "hard") {
const angle = this.flippingPage.getHardAngle();
if (angle < -90) {
this.leftPage.getElement().style.zIndex = (this.getSettings().startZIndex + 5).toString(10);
this.leftPage.setHardDrawingAngle(180 + this.flippingPage.getHardAngle());
this.leftPage.draw(this.flippingPage.getDrawingDensity());
} else {
this.leftPage.getElement().style.display = "none";
}
} else {
this.leftPage.simpleDraw(0);
}
}
drawRightPage() {
if (this.rightPage === null) return;
if (this.direction === 0 && this.flippingPage !== null && this.flippingPage.getDrawingDensity() === "hard") {
const angle = this.flippingPage.getHardAngle();
if (angle > 90) {
this.rightPage.getElement().style.zIndex = (this.getSettings().startZIndex + 5).toString(10);
this.rightPage.setHardDrawingAngle(180 + this.flippingPage.getHardAngle());
this.rightPage.draw(this.flippingPage.getDrawingDensity());
} else {
this.rightPage.getElement().style.display = "none";
}
} else {
this.rightPage.simpleDraw(1);
}
}
drawBottomPage() {
if (this.bottomPage === null) return;
const tempDensity = this.flippingPage != null ? this.flippingPage.getDrawingDensity() : null;
if (!(this.orientation === "portrait" && this.direction === 1)) {
this.bottomPage.getElement().style.zIndex = (this.getSettings().startZIndex + 3).toString(10);
this.bottomPage.draw(tempDensity);
}
}
drawFrame() {
if (this.flippingPage !== null) {
if (this.flippingPage.getHardAngle() === this.lastAngle) {
return;
}
this.lastAngle = this.flippingPage.getHardAngle();
} else {
this.lastAngle = -1234;
}
this.clear();
this.drawLeftPage();
this.drawRightPage();
this.drawBottomPage();
if (this.flippingPage != null) {
const angle = this.flippingPage.state.hardDrawingAngle;
if (angle <= 90) {
this.flippingPage.getElement().style.zIndex = (this.getSettings().startZIndex + 5).toString(10);
this.flippingPage.draw();
} else {
this.flippingPage.getElement().style.display = "none";
}
}
if (this.shadow != null && this.flippingPage !== null) {
if (this.flippingPage.getDrawingDensity() === "soft") {
this.drawOuterShadow();
this.drawInnerShadow();
} else {
this.drawHardOuterShadow();
this.drawHardInnerShadow();
}
}
}
clear() {
for (const page of this.app.getPageCollection().getPages()) {
if (page !== this.leftPage && page !== this.rightPage && page !== this.flippingPage && page !== this.bottomPage) {
const style = page.getElement().style;
if (style.display !== 'none') {
style.cssText = 'display: none';
}
}
if (page.getTemporaryCopy() !== this.flippingPage) {
page.hideTemporaryCopy();
}
}
}
update() {
super.update();
if (this.rightPage !== null) {
this.rightPage.setOrientation(1);
}
if (this.leftPage !== null) {
this.leftPage.setOrientation(0);
}
}
}
class Settings {
constructor() {
this._default = {
startPage: 0,
size: "fixed",
width: 0,
height: 0,
minWidth: 0,
maxWidth: 0,
minHeight: 0,
maxHeight: 0,
drawShadow: true,
flippingTime: 1000,
usePortrait: true,
startZIndex: 0,
autoSize: true,
maxShadowOpacity: 1,
showCover: false,
mobileScrollSupport: true,
swipeDistance: 30,
clickEventForward: true,
useMouseEvents: true,
showPageCorners: true,
disableFlipByClick: false
};
}
getSettings(userSetting) {
const result = this._default;
Object.assign(result, userSetting);
if (result.size !== "stretch" && result.size !== "fixed") throw new Error('Invalid size type. Available only "fixed" and "stretch" value');
if (result.width <= 0 || result.height <= 0) throw new Error('Invalid width or height');
if (result.flippingTime <= 0) throw new Error('Invalid flipping time');
if (result.size === "stretch") {
if (result.minWidth <= 0) result.minWidth = 100;
if (result.maxWidth < result.minWidth) result.maxWidth = 2000;
if (result.minHeight <= 0) result.minHeight = 100;
if (result.maxHeight < result.minHeight) result.maxHeight = 2000;
} else {
result.minWidth = result.width;
result.maxWidth = result.width;
result.minHeight = result.height;
result.maxHeight = result.height;
}
return result;
}
}
class PageFlip extends EventObject {
constructor(inBlock, setting, cspPolicyService) {
super();
this.isUserTouch = false;
this.isUserMove = false;
this.setting = null;
this.pages = null;
this.setting = new Settings().getSettings(setting);
this.block = inBlock;
this.cspPolicyService = cspPolicyService;
}
destroy() {
this.ui.destroy();
this.render = undefined;
}
update() {
this.render.update();
this.pages.show();
}
loadFromHTML(items) {
this.ui = new HTMLUI(this.block, this, this.setting, items, this.cspPolicyService);
this.render = new HTMLRender(this, this.setting, this.ui.getDistElement());
this.flipController = new Flip(this.render, this);
this.pages = new HTMLPageCollection(this, this.render, this.ui.getDistElement(), items);
this.pages.load();
this.render.start();
this.pages.show(this.setting.startPage);
setTimeout(() => {
this.ui.update();
this.trigger('init', this, {
page: this.setting.startPage,
mode: this.render.getOrientation()
});
}, 1);
}
updateFromHtml(items) {
const current = this.pages.getCurrentPageIndex();
this.pages.destroy();
this.pages = new HTMLPageCollection(this, this.render, this.ui.getDistElement(), items);
this.pages.load();
this.ui.updateItems(items);
this.render.reload();
this.pages.show(current);
this.trigger('update', this, {
page: current,
mode: this.render.getOrientation()
});
}
clear() {
this.pages.destroy();
this.ui.clear();
}
turnToPrevPage() {
this.pages.showPrev();
}
turnToNextPage() {
this.pages.showNext();
}
turnToPage(page) {
this.pages.show(page);
}
flipNext() {
let corner = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "top";
this.flipController.flipNext(corner);
}
flipPrev() {
let corner = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "top";
this.flipController.flipPrev(corner);
}
flip(page) {
let corner = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "top";
this.flipController.flipToPage(page, corner);
}
updateState(newState) {
this.trigger('changeState', this, newState);
}
updatePageIndex(newPage) {
this.trigger('flip', this, newPage);
}
updateOrientation(newOrientation) {
this.ui.setOrientationStyle(newOrientation);
this.update();
this.trigger('changeOrientation', this, newOrientation);
}
getPageCount() {
return this.pages.getPageCount();
}
getCurrentPageIndex() {
return this.pages.getCurrentPageIndex();
}
getPage(pageIndex) {
return this.pages.getPage(pageIndex);
}
getRender() {
return this.render;
}
getFlipController() {
return this.flipController;
}
getOrientation() {
return this.render.getOrientation();
}
getBoundsRect() {
return this.render.getRect();
}
getSettings() {
return this.setting;
}
getUI() {
return this.ui;
}
getState() {
return this.flipController.getState();
}
getPageCollection() {
return this.pages;
}
startUserTouch(pos) {
this.mousePosition = pos;
this.isUserTouch = true;
this.isUserMove = false;
}
userMove(pos, isTouch) {
if (!this.isUserTouch && !isTouch && this.setting.showPageCorners) {
this.flipController.showCorner(pos);
} else if (this.isUserTouch) {
if (Helper.GetDistanceBetweenTwoPoint(this.mousePosition, pos) > 5) {
this.isUserMove = true;
this.flipController.fold(pos);
}
}
}
userStop(pos) {
let isSwipe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (this.isUserTouch) {
this.isUserTouch = false;
if (!isSwipe) {
if (!this.isUserMove) this.flipController.flip(pos);else this.flipController.stopMove();
}
}
}
}
;// ./web/annotation_editor_layer_builder.js
function annotation_editor_layer_builder_classPrivateFieldInitSpec(e, t, a) { annotation_editor_layer_builder_checkPrivateRedeclaration(e, t), t.set(e, a); }
function annotation_editor_layer_builder_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function annotation_editor_layer_builder_classPrivateFieldGet(s, a) { return s.get(annotation_editor_layer_builder_assertClassBrand(s, a)); }
function annotation_editor_layer_builder_classPrivateFieldSet(s, a, r) { return s.set(annotation_editor_layer_builder_assertClassBrand(s, a), r), r; }
function annotation_editor_layer_builder_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var annotation_editor_layer_builder_annotationLayer = /*#__PURE__*/new WeakMap();
var _drawLayer = /*#__PURE__*/new WeakMap();
var _onAppend = /*#__PURE__*/new WeakMap();
var annotation_editor_layer_builder_structTreeLayer = /*#__PURE__*/new WeakMap();
var annotation_editor_layer_builder_textLayer = /*#__PURE__*/new WeakMap();
var annotation_editor_layer_builder_uiManager = /*#__PURE__*/new WeakMap();
class AnnotationEditorLayerBuilder {
constructor(options) {
annotation_editor_layer_builder_classPrivateFieldInitSpec(this, annotation_editor_layer_builder_annotationLayer, null);
annotation_editor_layer_builder_classPrivateFieldInitSpec(this, _drawLayer, null);
annotation_editor_layer_builder_classPrivateFieldInitSpec(this, _onAppend, null);
annotation_editor_layer_builder_classPrivateFieldInitSpec(this, annotation_editor_layer_builder_structTreeLayer, null);
annotation_editor_layer_builder_classPrivateFieldInitSpec(this, annotation_editor_layer_builder_textLayer, null);
annotation_editor_layer_builder_classPrivateFieldInitSpec(this, annotation_editor_layer_builder_uiManager, void 0);
this.pdfPage = options.pdfPage;
this.accessibilityManager = options.accessibilityManager;
this.l10n = options.l10n;
this.l10n ||= new genericl10n_GenericL10n();
this.annotationEditorLayer = null;
this.div = null;
this._cancelled = false;
annotation_editor_layer_builder_classPrivateFieldSet(annotation_editor_layer_builder_uiManager, this, options.uiManager);
annotation_editor_layer_builder_classPrivateFieldSet(annotation_editor_layer_builder_annotationLayer, this, options.annotationLayer || null);
annotation_editor_layer_builder_classPrivateFieldSet(annotation_editor_layer_builder_textLayer, this, options.textLayer || null);
annotation_editor_layer_builder_classPrivateFieldSet(_drawLayer, this, options.drawLayer || null);
annotation_editor_layer_builder_classPrivateFieldSet(_onAppend, this, options.onAppend || null);
this.eventBus = options.eventBus;
annotation_editor_layer_builder_classPrivateFieldSet(annotation_editor_layer_builder_structTreeLayer, this, options.structTreeLayer || null);
}
async render(_ref) {
let {
viewport,
intent = "display"
} = _ref;
if (intent !== "display") {
return;
}
if (this._cancelled) {
return;
}
const clonedViewport = viewport.clone({
dontFlip: true
});
if (this.div) {
this.annotationEditorLayer.update({
viewport: clonedViewport
});
this.show();
return;
}
const div = this.div = document.createElement("div");
div.className = "annotationEditorLayer";
div.hidden = true;
div.dir = annotation_editor_layer_builder_classPrivateFieldGet(annotation_editor_layer_builder_uiManager, this).direction;
annotation_editor_layer_builder_classPrivateFieldGet(_onAppend, this)?.call(this, div);
this.annotationEditorLayer = new AnnotationEditorLayer({
uiManager: annotation_editor_layer_builder_classPrivateFieldGet(annotation_editor_layer_builder_uiManager, this),
div,
structTreeLayer: annotation_editor_layer_builder_classPrivateFieldGet(annotation_editor_layer_builder_structTreeLayer, this),
accessibilityManager: this.accessibilityManager,
pageIndex: this.pdfPage.pageNumber - 1,
l10n: this.l10n,
viewport: clonedViewport,
annotationLayer: annotation_editor_layer_builder_classPrivateFieldGet(annotation_editor_layer_builder_annotationLayer, this),
textLayer: annotation_editor_layer_builder_classPrivateFieldGet(annotation_editor_layer_builder_textLayer, this),
drawLayer: annotation_editor_layer_builder_classPrivateFieldGet(_drawLayer, this),
eventBus: this.eventBus
});
const parameters = {
viewport: clonedViewport,
div,
annotations: null,
intent
};
this.annotationEditorLayer.render(parameters);
this.show();
}
cancel() {
this._cancelled = true;
if (!this.div) {
return;
}
this.annotationEditorLayer.destroy();
}
hide() {
if (!this.div) {
return;
}
this.annotationEditorLayer.pause(true);
this.div.hidden = true;
}
show() {
if (!this.div || this.annotationEditorLayer.isInvisible) {
return;
}
this.div.hidden = false;
this.annotationEditorLayer.pause(false);
}
}
;// ./web/annotation_layer_builder.js
function annotation_layer_builder_classPrivateMethodInitSpec(e, a) { annotation_layer_builder_checkPrivateRedeclaration(e, a), a.add(e); }
function annotation_layer_builder_classPrivateFieldInitSpec(e, t, a) { annotation_layer_builder_checkPrivateRedeclaration(e, t), t.set(e, a); }
function annotation_layer_builder_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function annotation_layer_builder_classPrivateFieldGet(s, a) { return s.get(annotation_layer_builder_assertClassBrand(s, a)); }
function annotation_layer_builder_classPrivateFieldSet(s, a, r) { return s.set(annotation_layer_builder_assertClassBrand(s, a), r), r; }
function annotation_layer_builder_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _annotations = /*#__PURE__*/new WeakMap();
var _externalHide = /*#__PURE__*/new WeakMap();
var annotation_layer_builder_onAppend = /*#__PURE__*/new WeakMap();
var annotation_layer_builder_eventAbortController = /*#__PURE__*/new WeakMap();
var _linksInjected = /*#__PURE__*/new WeakMap();
var _AnnotationLayerBuilder_brand = /*#__PURE__*/new WeakSet();
class AnnotationLayerBuilder {
constructor(_ref) {
let {
pdfPage,
linkService,
downloadManager,
annotationStorage = null,
imageResourcesPath = "",
renderForms = true,
enableScripting = false,
hasJSActionsPromise = null,
fieldObjectsPromise = null,
annotationCanvasMap = null,
accessibilityManager = null,
annotationEditorUIManager = null,
onAppend = null
} = _ref;
annotation_layer_builder_classPrivateMethodInitSpec(this, _AnnotationLayerBuilder_brand);
annotation_layer_builder_classPrivateFieldInitSpec(this, _annotations, null);
annotation_layer_builder_classPrivateFieldInitSpec(this, _externalHide, false);
annotation_layer_builder_classPrivateFieldInitSpec(this, annotation_layer_builder_onAppend, null);
annotation_layer_builder_classPrivateFieldInitSpec(this, annotation_layer_builder_eventAbortController, null);
annotation_layer_builder_classPrivateFieldInitSpec(this, _linksInjected, false);
this.pdfPage = pdfPage;
this.linkService = linkService;
this.downloadManager = downloadManager;
this.imageResourcesPath = imageResourcesPath;
this.renderForms = renderForms;
this.annotationStorage = annotationStorage;
this.enableScripting = enableScripting;
this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false);
this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null);
this._annotationCanvasMap = annotationCanvasMap;
this._accessibilityManager = accessibilityManager;
this._annotationEditorUIManager = annotationEditorUIManager;
annotation_layer_builder_classPrivateFieldSet(annotation_layer_builder_onAppend, this, onAppend);
this.annotationLayer = null;
this.div = null;
this._cancelled = false;
this._eventBus = linkService.eventBus;
}
async render(_ref2) {
let {
viewport,
intent = "display",
structTreeLayer = null
} = _ref2;
if (this.div) {
if (this._cancelled || !this.annotationLayer) {
return;
}
this.annotationLayer.update({
viewport: viewport.clone({
dontFlip: true
})
});
return;
}
const [annotations, hasJSActions, fieldObjects] = await Promise.all([this.pdfPage.getAnnotations({
intent
}), this._hasJSActionsPromise, this._fieldObjectsPromise]);
if (this._cancelled) {
return;
}
const div = this.div = document.createElement("div");
div.className = "annotationLayer";
annotation_layer_builder_classPrivateFieldGet(annotation_layer_builder_onAppend, this)?.call(this, div);
if (annotations.length === 0) {
annotation_layer_builder_classPrivateFieldSet(_annotations, this, annotations);
this.hide(true);
return;
}
annotation_layer_builder_assertClassBrand(_AnnotationLayerBuilder_brand, this, _initAnnotationLayer).call(this, viewport, structTreeLayer);
await this.annotationLayer.render({
annotations,
imageResourcesPath: this.imageResourcesPath,
renderForms: this.renderForms,
linkService: this.linkService,
downloadManager: this.downloadManager,
annotationStorage: this.annotationStorage,
enableScripting: this.enableScripting,
hasJSActions,
fieldObjects
});
annotation_layer_builder_classPrivateFieldSet(_annotations, this, annotations);
if (this.linkService.isInPresentationMode) {
annotation_layer_builder_assertClassBrand(_AnnotationLayerBuilder_brand, this, _updatePresentationModeState).call(this, PresentationModeState.FULLSCREEN);
}
if (!annotation_layer_builder_classPrivateFieldGet(annotation_layer_builder_eventAbortController, this)) {
annotation_layer_builder_classPrivateFieldSet(annotation_layer_builder_eventAbortController, this, new AbortController());
this._eventBus?._on("presentationmodechanged", evt => {
annotation_layer_builder_assertClassBrand(_AnnotationLayerBuilder_brand, this, _updatePresentationModeState).call(this, evt.state);
}, {
signal: annotation_layer_builder_classPrivateFieldGet(annotation_layer_builder_eventAbortController, this).signal
});
}
}
cancel() {
this._cancelled = true;
annotation_layer_builder_classPrivateFieldGet(annotation_layer_builder_eventAbortController, this)?.abort();
annotation_layer_builder_classPrivateFieldSet(annotation_layer_builder_eventAbortController, this, null);
}
hide() {
let internal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
annotation_layer_builder_classPrivateFieldSet(_externalHide, this, !internal);
if (!this.div) {
return;
}
if (!document.querySelector("[data-pdfjsprinting=true]")) {
this.div.hidden = true;
}
}
hasEditableAnnotations() {
return !!this.annotationLayer?.hasEditableAnnotations();
}
async injectLinkAnnotations(_ref3) {
let {
inferredLinks,
viewport,
structTreeLayer = null
} = _ref3;
if (annotation_layer_builder_classPrivateFieldGet(_annotations, this) === null) {
throw new Error("`render` method must be called before `injectLinkAnnotations`.");
}
if (this._cancelled || annotation_layer_builder_classPrivateFieldGet(_linksInjected, this)) {
return;
}
annotation_layer_builder_classPrivateFieldSet(_linksInjected, this, true);
const newLinks = annotation_layer_builder_classPrivateFieldGet(_annotations, this).length ? annotation_layer_builder_assertClassBrand(_AnnotationLayerBuilder_brand, this, _checkInferredLinks).call(this, inferredLinks) : inferredLinks;
if (!newLinks.length) {
return;
}
if (!this.annotationLayer) {
annotation_layer_builder_assertClassBrand(_AnnotationLayerBuilder_brand, this, _initAnnotationLayer).call(this, viewport, structTreeLayer);
setLayerDimensions(this.div, viewport);
}
await this.annotationLayer.addLinkAnnotations(newLinks, this.linkService);
if (!annotation_layer_builder_classPrivateFieldGet(_externalHide, this)) {
this.div.hidden = false;
}
}
}
function _initAnnotationLayer(viewport, structTreeLayer) {
this.annotationLayer = new AnnotationLayer({
div: this.div,
accessibilityManager: this._accessibilityManager,
annotationCanvasMap: this._annotationCanvasMap,
annotationEditorUIManager: this._annotationEditorUIManager,
page: this.pdfPage,
viewport: viewport.clone({
dontFlip: true
}),
structTreeLayer
});
}
function _updatePresentationModeState(state) {
if (!this.div) {
return;
}
let disableFormElements = false;
switch (state) {
case PresentationModeState.FULLSCREEN:
disableFormElements = true;
break;
case PresentationModeState.NORMAL:
break;
default:
return;
}
for (const section of this.div.childNodes) {
if (section.hasAttribute("data-internal-link")) {
continue;
}
section.inert = disableFormElements;
}
}
function _checkInferredLinks(inferredLinks) {
function annotationRects(annot) {
if (!annot.quadPoints) {
return [annot.rect];
}
const rects = [];
for (let i = 2, ii = annot.quadPoints.length; i < ii; i += 8) {
const trX = annot.quadPoints[i];
const trY = annot.quadPoints[i + 1];
const blX = annot.quadPoints[i + 2];
const blY = annot.quadPoints[i + 3];
rects.push([blX, blY, trX, trY]);
}
return rects;
}
function intersectAnnotations(annot1, annot2) {
const intersections = [];
const annot1Rects = annotationRects(annot1);
const annot2Rects = annotationRects(annot2);
for (const rect1 of annot1Rects) {
for (const rect2 of annot2Rects) {
const intersection = Util.intersect(rect1, rect2);
if (intersection) {
intersections.push(intersection);
}
}
}
return intersections;
}
function areaRects(rects) {
let totalArea = 0;
for (const rect of rects) {
totalArea += Math.abs((rect[2] - rect[0]) * (rect[3] - rect[1]));
}
return totalArea;
}
return inferredLinks.filter(link => {
let linkAreaRects;
for (const annotation of annotation_layer_builder_classPrivateFieldGet(_annotations, this)) {
if (annotation.annotationType !== AnnotationType.LINK || !annotation.url) {
continue;
}
const intersections = intersectAnnotations(annotation, link);
if (intersections.length === 0) {
continue;
}
linkAreaRects ??= areaRects(annotationRects(link));
if (areaRects(intersections) / linkAreaRects > 0.5) {
return false;
}
}
return true;
});
}
// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url.can-parse.js
var web_url_can_parse = __webpack_require__(2222);
;// ./web/autolinker.js
function autolinker_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
function DOMRectToPDF(_ref, pdfPageView) {
let {
width,
height,
left,
top
} = _ref;
if (width === 0 || height === 0) {
return null;
}
const pageBox = pdfPageView.textLayer.div.getBoundingClientRect();
const bottomLeft = pdfPageView.getPagePoint(left - pageBox.left, top - pageBox.top);
const topRight = pdfPageView.getPagePoint(left - pageBox.left + width, top - pageBox.top + height);
return Util.normalizeRect([bottomLeft[0], bottomLeft[1], topRight[0], topRight[1]]);
}
function calculateLinkPosition(range, pdfPageView) {
const rangeRects = range.getClientRects();
if (rangeRects.length === 1) {
return {
rect: DOMRectToPDF(rangeRects[0], pdfPageView)
};
}
const rect = [Infinity, Infinity, -Infinity, -Infinity];
const quadPoints = [];
let i = 0;
for (const domRect of rangeRects) {
const normalized = DOMRectToPDF(domRect, pdfPageView);
if (normalized === null) {
continue;
}
quadPoints[i] = quadPoints[i + 4] = normalized[0];
quadPoints[i + 1] = quadPoints[i + 3] = normalized[3];
quadPoints[i + 2] = quadPoints[i + 6] = normalized[2];
quadPoints[i + 5] = quadPoints[i + 7] = normalized[1];
Util.rectBoundingBox(...normalized, rect);
i += 8;
}
return {
quadPoints,
rect
};
}
function textPosition(container, offset) {
let currentContainer = container;
do {
if (currentContainer.nodeType === Node.TEXT_NODE) {
const currentLength = currentContainer.textContent.length;
if (offset <= currentLength) {
return [currentContainer, offset];
}
offset -= currentLength;
} else if (currentContainer.firstChild) {
currentContainer = currentContainer.firstChild;
continue;
}
while (!currentContainer.nextSibling && currentContainer !== container) {
currentContainer = currentContainer.parentNode;
}
if (currentContainer !== container) {
currentContainer = currentContainer.nextSibling;
}
} while (currentContainer !== container);
throw new Error("Offset is bigger than container's contents length.");
}
function createLinkAnnotation(_ref2, pdfPageView, id) {
let {
url,
index,
length
} = _ref2;
const highlighter = pdfPageView._textHighlighter;
const [{
begin,
end
}] = highlighter._convertMatches([index], [length]);
const range = new Range();
range.setStart(...textPosition(highlighter.textDivs[begin.divIdx], begin.offset));
range.setEnd(...textPosition(highlighter.textDivs[end.divIdx], end.offset));
return {
id: `inferred_link_${id}`,
unsafeUrl: url,
url,
annotationType: AnnotationType.LINK,
rotation: 0,
...calculateLinkPosition(range, pdfPageView),
borderStyle: null
};
}
class Autolinker {
static findLinks(text) {
autolinker_assertClassBrand(Autolinker, this, autolinker_regex)._ ?? (autolinker_regex._ = autolinker_assertClassBrand(Autolinker, this, /\b(?:https?:\/\/|mailto:|www\.)(?:[\0-\x08\x0E-\x1F\$\+0-9=A-Z\^`-z\|~-\x9F\xA2-\xA6\xA8-\xAA\xAC-\xB5\xB8-\xBA\xBC-\xBE\xC0-\u037D\u037F-\u0386\u0388-\u0559\u0560-\u0588\u058B-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7-\u05F2\u05F5-\u0608\u060B\u060E-\u061A\u061C\u0620-\u0669\u066E-\u06D3\u06D5-\u06FF\u070E-\u07F6\u07FA-\u082F\u083F-\u085D\u085F-\u0963\u0966-\u096F\u0971-\u09FC\u09FE-\u0A75\u0A77-\u0AEF\u0AF1-\u0C76\u0C78-\u0C83\u0C85-\u0DF3\u0DF5-\u0E4E\u0E50-\u0E59\u0E5C-\u0F03\u0F13\u0F15-\u0F39\u0F3E-\u0F84\u0F86-\u0FCF\u0FD5-\u0FD8\u0FDB-\u1049\u1050-\u10FA\u10FC-\u135F\u1369-\u13FF\u1401-\u166D\u166F-\u167F\u1681-\u169A\u169D-\u16EA\u16EE-\u1734\u1737-\u17D3\u17D7\u17DB-\u17FF\u180B-\u1943\u1946-\u1A1D\u1A20-\u1A9F\u1AA7\u1AAE-\u1B4D\u1B50-\u1B59\u1B61-\u1B7C\u1B80-\u1BFB\u1C00-\u1C3A\u1C40-\u1C7D\u1C80-\u1CBF\u1CC8-\u1CD2\u1CD4-\u1FFF\u200B-\u200F\u202A-\u202E\u2044\u2052\u2060-\u207C\u207F-\u208C\u208F-\u2307\u230C-\u2328\u232B-\u2767\u2776-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2CF8\u2CFD\u2D00-\u2D6F\u2D71-\u2DFF\u2E2F\u2E50\u2E51\u2E5E-\u2FFF\u3004-\u3007\u3012\u3013\u3020-\u302F\u3031-\u303C\u303E-\u309F\u30A1-\u30FA\u30FC-\uA4FD\uA500-\uA60C\uA610-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA6F8-\uA873\uA878-\uA8CD\uA8D0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA95E\uA960-\uA9C0\uA9CE-\uA9DD\uA9E0-\uAA5B\uAA60-\uAADD\uAAE0-\uAAEF\uAAF2-\uABEA\uABEC-\uFD3D\uFD40-\uFE0F\uFE1A-\uFE2F\uFE53\uFE62\uFE64-\uFE67\uFE69\uFE6C-\uFEFE\uFF00\uFF04\uFF0B\uFF10-\uFF19\uFF1C-\uFF1E\uFF21-\uFF3A\uFF3E\uFF40-\uFF5A\uFF5C\uFF5E\uFF66-\u{100FF}\u{10103}-\u{1039E}\u{103A0}-\u{103CF}\u{103D1}-\u{1056E}\u{10570}-\u{10856}\u{10858}-\u{1091E}\u{10920}-\u{1093E}\u{10940}-\u{10A4F}\u{10A59}-\u{10A7E}\u{10A80}-\u{10AEF}\u{10AF7}-\u{10B38}\u{10B40}-\u{10B98}\u{10B9D}-\u{10D6D}\u{10D6F}-\u{10EAC}\u{10EAE}-\u{10F54}\u{10F5A}-\u{10F85}\u{10F8A}-\u{11046}\u{1104E}-\u{110BA}\u{110BD}\u{110C2}-\u{1113F}\u{11144}-\u{11173}\u{11176}-\u{111C4}\u{111C9}-\u{111CC}\u{111CE}-\u{111DA}\u{111DC}\u{111E0}-\u{11237}\u{1123E}-\u{112A8}\u{112AA}-\u{113D3}\u{113D6}\u{113D9}-\u{1144A}\u{11450}-\u{11459}\u{1145C}\u{1145E}-\u{114C5}\u{114C7}-\u{115C0}\u{115D8}-\u{11640}\u{11644}-\u{1165F}\u{1166D}-\u{116B8}\u{116BA}-\u{1173B}\u{1173F}-\u{1183A}\u{1183C}-\u{11943}\u{11947}-\u{119E1}\u{119E3}-\u{11A3E}\u{11A47}-\u{11A99}\u{11A9D}\u{11AA3}-\u{11AFF}\u{11B0A}-\u{11BE0}\u{11BE2}-\u{11C40}\u{11C46}-\u{11C6F}\u{11C72}-\u{11EF6}\u{11EF9}-\u{11F42}\u{11F50}-\u{11FFE}\u{12000}-\u{1246F}\u{12475}-\u{12FF0}\u{12FF3}-\u{16A6D}\u{16A70}-\u{16AF4}\u{16AF6}-\u{16B36}\u{16B3C}-\u{16B43}\u{16B45}-\u{16D6C}\u{16D70}-\u{16E96}\u{16E9B}-\u{16FE1}\u{16FE3}-\u{1BC9E}\u{1BCA0}-\u{1DA86}\u{1DA8C}-\u{1E5FE}\u{1E600}-\u{1E95D}\u{1E960}-\u{10FFFF}]|\/|[\0-\x08\x0E-\x1F!-Z\\\^-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]+[\0-\x08\x0E-\x1F\$\+0-9=A-Z\^`-z\|~-\x9F\xA2-\xA6\xA8-\xAA\xAC-\xB5\xB8-\xBA\xBC-\xBE\xC0-\u037D\u037F-\u0386\u0388-\u0559\u0560-\u0588\u058B-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7-\u05F2\u05F5-\u0608\u060B\u060E-\u061A\u061C\u0620-\u0669\u066E-\u06D3\u06D5-\u06FF\u070E-\u07F6\u07FA-\u082F\u083F-\u085D\u085F-\u0963\u0966-\u096F\u0971-\u09FC\u09FE-\u0A75\u0A77-\u0AEF\u0AF1-\u0C76\u0C78-\u0C83\u0C85-\u0DF3\u0DF5-\u0E4E\u0E50-\u0E59\u0E5C-\u0F03\u0F13\u0F15-\u0F39\u0F3E-\u0F84\u0F86-\u0FCF\u0FD5-\u0FD8\u0FDB-\u1049\u1050-\u10FA\u10FC-\u135F\u1369-\u13FF\u1401-\u166D\u166F-\u167F\u1681-\u169A\u169D-\u16EA\u16EE-\u1734\u1737-\u17D3\u17D7\u17DB-\u17FF\u180B-\u1943\u1946-\u1A1D\u1A20-\u1A9F\u1AA7\u1AAE-\u1B4D\u1B50-\u1B59\u1B61-\u1B7C\u1B80-\u1BFB\u1C00-\u1C3A\u1C40-\u1C7D\u1C80-\u1CBF\u1CC8-\u1CD2\u1CD4-\u1FFF\u200B-\u200F\u202A-\u202E\u2044\u2052\u2060-\u207C\u207F-\u208C\u208F-\u2307\u230C-\u2328\u232B-\u2767\u2776-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2CF8\u2CFD\u2D00-\u2D6F\u2D71-\u2DFF\u2E2F\u2E50\u2E51\u2E5E-\u2FFF\u3004-\u3007\u3012\u3013\u3020-\u302F\u3031-\u303C\u303E-\u309F\u30A1-\u30FA\u30FC-\uA4FD\uA500-\uA60C\uA610-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA6F8-\uA873\uA878-\uA8CD\uA8D0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA95E\uA960-\uA9C0\uA9CE-\uA9DD\uA9E0-\uAA5B\uAA60-\uAADD\uAAE0-\uAAEF\uAAF2-\uABEA\uABEC-\uFD3D\uFD40-\uFE0F\uFE1A-\uFE2F\uFE53\uFE62\uFE64-\uFE67\uFE69\uFE6C-\uFEFE\uFF00\uFF04\uFF0B\uFF10-\uFF19\uFF1C-\uFF1E\uFF21-\uFF3A\uFF3E\uFF40-\uFF5A\uFF5C\uFF5E\uFF66-\u{100FF}\u{10103}-\u{1039E}\u{103A0}-\u{103CF}\u{103D1}-\u{1056E}\u{10570}-\u{10856}\u{10858}-\u{1091E}\u{10920}-\u{1093E}\u{10940}-\u{10A4F}\u{10A59}-\u{10A7E}\u{10A80}-\u{10AEF}\u{10AF7}-\u{10B38}\u{10B40}-\u{10B98}\u{10B9D}-\u{10D6D}\u{10D6F}-\u{10EAC}\u{10EAE}-\u{10F54}\u{10F5A}-\u{10F85}\u{10F8A}-\u{11046}\u{1104E}-\u{110BA}\u{110BD}\u{110C2}-\u{1113F}\u{11144}-\u{11173}\u{11176}-\u{111C4}\u{111C9}-\u{111CC}\u{111CE}-\u{111DA}\u{111DC}\u{111E0}-\u{11237}\u{1123E}-\u{112A8}\u{112AA}-\u{113D3}\u{113D6}\u{113D9}-\u{1144A}\u{11450}-\u{11459}\u{1145C}\u{1145E}-\u{114C5}\u{114C7}-\u{115C0}\u{115D8}-\u{11640}\u{11644}-\u{1165F}\u{1166D}-\u{116B8}\u{116BA}-\u{1173B}\u{1173F}-\u{1183A}\u{1183C}-\u{11943}\u{11947}-\u{119E1}\u{119E3}-\u{11A3E}\u{11A47}-\u{11A99}\u{11A9D}\u{11AA3}-\u{11AFF}\u{11B0A}-\u{11BE0}\u{11BE2}-\u{11C40}\u{11C46}-\u{11C6F}\u{11C72}-\u{11EF6}\u{11EF9}-\u{11F42}\u{11F50}-\u{11FFE}\u{12000}-\u{1246F}\u{12475}-\u{12FF0}\u{12FF3}-\u{16A6D}\u{16A70}-\u{16AF4}\u{16AF6}-\u{16B36}\u{16B3C}-\u{16B43}\u{16B45}-\u{16D6C}\u{16D70}-\u{16E96}\u{16E9B}-\u{16FE1}\u{16FE3}-\u{1BC9E}\u{1BCA0}-\u{1DA86}\u{1DA8C}-\u{1E5FE}\u{1E600}-\u{1E95D}\u{1E960}-\u{10FFFF}])+|\b[\0-\x08\x0E-\x1F!-'\*-;=\?A-Z\\\^-z\|~-\x9F\xA1-\u0F39\u0F3E-\u167F\u1681-\u169A\u169D-\u1FFF\u200B-\u2019\u201B-\u201D\u201F-\u2027\u202A-\u202E\u2030-\u2044\u2047-\u205E\u2060-\u207C\u207F-\u208C\u208F-\u2307\u230C-\u2328\u232B-\u2767\u2776-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2E21\u2E2A-\u2E41\u2E43-\u2E54\u2E5D-\u2FFF\u3001-\u3007\u3012\u3013\u301C\u3020-\uFD3D\uFD40-\uFE16\uFE19-\uFE34\uFE45\uFE46\uFE49-\uFE58\uFE5F-\uFEFE\uFF00-\uFF07\uFF0A-\uFF3A\uFF3C\uFF3E-\uFF5A\uFF5C\uFF5E\uFF61\uFF64-\u{10FFFF}]+@([\0-\x08\x0E-\x1F\$\+0-9=A-Z\^`-z\|~-\x9F\xA2-\xA6\xA8-\xAA\xAC-\xB5\xB8-\xBA\xBC-\xBE\xC0-\u037D\u037F-\u0386\u0388-\u0559\u0560-\u0588\u058B-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7-\u05F2\u05F5-\u0608\u060B\u060E-\u061A\u061C\u0620-\u0669\u066E-\u06D3\u06D5-\u06FF\u070E-\u07F6\u07FA-\u082F\u083F-\u085D\u085F-\u0963\u0966-\u096F\u0971-\u09FC\u09FE-\u0A75\u0A77-\u0AEF\u0AF1-\u0C76\u0C78-\u0C83\u0C85-\u0DF3\u0DF5-\u0E4E\u0E50-\u0E59\u0E5C-\u0F03\u0F13\u0F15-\u0F39\u0F3E-\u0F84\u0F86-\u0FCF\u0FD5-\u0FD8\u0FDB-\u1049\u1050-\u10FA\u10FC-\u135F\u1369-\u13FF\u1401-\u166D\u166F-\u167F\u1681-\u169A\u169D-\u16EA\u16EE-\u1734\u1737-\u17D3\u17D7\u17DB-\u17FF\u180B-\u1943\u1946-\u1A1D\u1A20-\u1A9F\u1AA7\u1AAE-\u1B4D\u1B50-\u1B59\u1B61-\u1B7C\u1B80-\u1BFB\u1C00-\u1C3A\u1C40-\u1C7D\u1C80-\u1CBF\u1CC8-\u1CD2\u1CD4-\u1FFF\u200B-\u200F\u202A-\u202E\u2044\u2052\u2060-\u207C\u207F-\u208C\u208F-\u2307\u230C-\u2328\u232B-\u2767\u2776-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2CF8\u2CFD\u2D00-\u2D6F\u2D71-\u2DFF\u2E2F\u2E50\u2E51\u2E5E-\u2FFF\u3004-\u3007\u3012\u3013\u3020-\u302F\u3031-\u303C\u303E-\u309F\u30A1-\u30FA\u30FC-\uA4FD\uA500-\uA60C\uA610-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA6F8-\uA873\uA878-\uA8CD\uA8D0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA95E\uA960-\uA9C0\uA9CE-\uA9DD\uA9E0-\uAA5B\uAA60-\uAADD\uAAE0-\uAAEF\uAAF2-\uABEA\uABEC-\uFD3D\uFD40-\uFE0F\uFE1A-\uFE2F\uFE53\uFE62\uFE64-\uFE67\uFE69\uFE6C-\uFEFE\uFF00\uFF04\uFF0B\uFF10-\uFF19\uFF1C-\uFF1E\uFF21-\uFF3A\uFF3E\uFF40-\uFF5A\uFF5C\uFF5E\uFF66-\u{100FF}\u{10103}-\u{1039E}\u{103A0}-\u{103CF}\u{103D1}-\u{1056E}\u{10570}-\u{10856}\u{10858}-\u{1091E}\u{10920}-\u{1093E}\u{10940}-\u{10A4F}\u{10A59}-\u{10A7E}\u{10A80}-\u{10AEF}\u{10AF7}-\u{10B38}\u{10B40}-\u{10B98}\u{10B9D}-\u{10D6D}\u{10D6F}-\u{10EAC}\u{10EAE}-\u{10F54}\u{10F5A}-\u{10F85}\u{10F8A}-\u{11046}\u{1104E}-\u{110BA}\u{110BD}\u{110C2}-\u{1113F}\u{11144}-\u{11173}\u{11176}-\u{111C4}\u{111C9}-\u{111CC}\u{111CE}-\u{111DA}\u{111DC}\u{111E0}-\u{11237}\u{1123E}-\u{112A8}\u{112AA}-\u{113D3}\u{113D6}\u{113D9}-\u{1144A}\u{11450}-\u{11459}\u{1145C}\u{1145E}-\u{114C5}\u{114C7}-\u{115C0}\u{115D8}-\u{11640}\u{11644}-\u{1165F}\u{1166D}-\u{116B8}\u{116BA}-\u{1173B}\u{1173F}-\u{1183A}\u{1183C}-\u{11943}\u{11947}-\u{119E1}\u{119E3}-\u{11A3E}\u{11A47}-\u{11A99}\u{11A9D}\u{11AA3}-\u{11AFF}\u{11B0A}-\u{11BE0}\u{11BE2}-\u{11C40}\u{11C46}-\u{11C6F}\u{11C72}-\u{11EF6}\u{11EF9}-\u{11F42}\u{11F50}-\u{11FFE}\u{12000}-\u{1246F}\u{12475}-\u{12FF0}\u{12FF3}-\u{16A6D}\u{16A70}-\u{16AF4}\u{16AF6}-\u{16B36}\u{16B3C}-\u{16B43}\u{16B45}-\u{16D6C}\u{16D70}-\u{16E96}\u{16E9B}-\u{16FE1}\u{16FE3}-\u{1BC9E}\u{1BCA0}-\u{1DA86}\u{1DA8C}-\u{1E5FE}\u{1E600}-\u{1E95D}\u{1E960}-\u{10FFFF}]+(?:\.[\0-\x08\x0E-\x1F\$\+0-9=A-Z\^`-z\|~-\x9F\xA2-\xA6\xA8-\xAA\xAC-\xB5\xB8-\xBA\xBC-\xBE\xC0-\u037D\u037F-\u0386\u0388-\u0559\u0560-\u0588\u058B-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7-\u05F2\u05F5-\u0608\u060B\u060E-\u061A\u061C\u0620-\u0669\u066E-\u06D3\u06D5-\u06FF\u070E-\u07F6\u07FA-\u082F\u083F-\u085D\u085F-\u0963\u0966-\u096F\u0971-\u09FC\u09FE-\u0A75\u0A77-\u0AEF\u0AF1-\u0C76\u0C78-\u0C83\u0C85-\u0DF3\u0DF5-\u0E4E\u0E50-\u0E59\u0E5C-\u0F03\u0F13\u0F15-\u0F39\u0F3E-\u0F84\u0F86-\u0FCF\u0FD5-\u0FD8\u0FDB-\u1049\u1050-\u10FA\u10FC-\u135F\u1369-\u13FF\u1401-\u166D\u166F-\u167F\u1681-\u169A\u169D-\u16EA\u16EE-\u1734\u1737-\u17D3\u17D7\u17DB-\u17FF\u180B-\u1943\u1946-\u1A1D\u1A20-\u1A9F\u1AA7\u1AAE-\u1B4D\u1B50-\u1B59\u1B61-\u1B7C\u1B80-\u1BFB\u1C00-\u1C3A\u1C40-\u1C7D\u1C80-\u1CBF\u1CC8-\u1CD2\u1CD4-\u1FFF\u200B-\u200F\u202A-\u202E\u2044\u2052\u2060-\u207C\u207F-\u208C\u208F-\u2307\u230C-\u2328\u232B-\u2767\u2776-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2CF8\u2CFD\u2D00-\u2D6F\u2D71-\u2DFF\u2E2F\u2E50\u2E51\u2E5E-\u2FFF\u3004-\u3007\u3012\u3013\u3020-\u302F\u3031-\u303C\u303E-\u309F\u30A1-\u30FA\u30FC-\uA4FD\uA500-\uA60C\uA610-\uA672\uA674-\uA67D\uA67F-\uA6F1\uA6F8-\uA873\uA878-\uA8CD\uA8D0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA95E\uA960-\uA9C0\uA9CE-\uA9DD\uA9E0-\uAA5B\uAA60-\uAADD\uAAE0-\uAAEF\uAAF2-\uABEA\uABEC-\uFD3D\uFD40-\uFE0F\uFE1A-\uFE2F\uFE53\uFE62\uFE64-\uFE67\uFE69\uFE6C-\uFEFE\uFF00\uFF04\uFF0B\uFF10-\uFF19\uFF1C-\uFF1E\uFF21-\uFF3A\uFF3E\uFF40-\uFF5A\uFF5C\uFF5E\uFF66-\u{100FF}\u{10103}-\u{1039E}\u{103A0}-\u{103CF}\u{103D1}-\u{1056E}\u{10570}-\u{10856}\u{10858}-\u{1091E}\u{10920}-\u{1093E}\u{10940}-\u{10A4F}\u{10A59}-\u{10A7E}\u{10A80}-\u{10AEF}\u{10AF7}-\u{10B38}\u{10B40}-\u{10B98}\u{10B9D}-\u{10D6D}\u{10D6F}-\u{10EAC}\u{10EAE}-\u{10F54}\u{10F5A}-\u{10F85}\u{10F8A}-\u{11046}\u{1104E}-\u{110BA}\u{110BD}\u{110C2}-\u{1113F}\u{11144}-\u{11173}\u{11176}-\u{111C4}\u{111C9}-\u{111CC}\u{111CE}-\u{111DA}\u{111DC}\u{111E0}-\u{11237}\u{1123E}-\u{112A8}\u{112AA}-\u{113D3}\u{113D6}\u{113D9}-\u{1144A}\u{11450}-\u{11459}\u{1145C}\u{1145E}-\u{114C5}\u{114C7}-\u{115C0}\u{115D8}-\u{11640}\u{11644}-\u{1165F}\u{1166D}-\u{116B8}\u{116BA}-\u{1173B}\u{1173F}-\u{1183A}\u{1183C}-\u{11943}\u{11947}-\u{119E1}\u{119E3}-\u{11A3E}\u{11A47}-\u{11A99}\u{11A9D}\u{11AA3}-\u{11AFF}\u{11B0A}-\u{11BE0}\u{11BE2}-\u{11C40}\u{11C46}-\u{11C6F}\u{11C72}-\u{11EF6}\u{11EF9}-\u{11F42}\u{11F50}-\u{11FFE}\u{12000}-\u{1246F}\u{12475}-\u{12FF0}\u{12FF3}-\u{16A6D}\u{16A70}-\u{16AF4}\u{16AF6}-\u{16B36}\u{16B3C}-\u{16B43}\u{16B45}-\u{16D6C}\u{16D70}-\u{16E96}\u{16E9B}-\u{16FE1}\u{16FE3}-\u{1BC9E}\u{1BCA0}-\u{1DA86}\u{1DA8C}-\u{1E5FE}\u{1E600}-\u{1E95D}\u{1E960}-\u{10FFFF}]+)+)/gmu));
const [normalizedText, diffs] = normalize(text);
const matches = normalizedText.matchAll(autolinker_assertClassBrand(Autolinker, this, autolinker_regex)._);
const links = [];
for (const match of matches) {
const [url, emailDomain] = match;
let raw;
if (url.startsWith("www.") || url.startsWith("http://") || url.startsWith("https://")) {
raw = url;
} else if (URL.canParse(`http://${emailDomain}`)) {
raw = url.startsWith("mailto:") ? url : `mailto:${url}`;
} else {
continue;
}
const absoluteURL = createValidAbsoluteUrl(raw, null, {
addDefaultProtocol: true
});
if (absoluteURL) {
const [index, length] = getOriginalIndex(diffs, match.index, url.length);
links.push({
url: absoluteURL.href,
index,
length
});
}
}
return links;
}
static processLinks(pdfPageView) {
return this.findLinks(pdfPageView._textHighlighter.textContentItemsStr.join("\n")).map(link => {
var _this$index, _this$index2;
return createLinkAnnotation(link, pdfPageView, (_index._ = autolinker_assertClassBrand(Autolinker, this, (_this$index = autolinker_assertClassBrand(Autolinker, this, _index)._, _this$index2 = _this$index++, _this$index)), _this$index2));
});
}
}
var _index = {
_: 0
};
var autolinker_regex = {
_: void 0
};
;// ./web/base_pdf_page_view.js
function base_pdf_page_view_classPrivateMethodInitSpec(e, a) { base_pdf_page_view_checkPrivateRedeclaration(e, a), a.add(e); }
function base_pdf_page_view_defineProperty(e, r, t) { return (r = base_pdf_page_view_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function base_pdf_page_view_toPropertyKey(t) { var i = base_pdf_page_view_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function base_pdf_page_view_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function base_pdf_page_view_classPrivateFieldInitSpec(e, t, a) { base_pdf_page_view_checkPrivateRedeclaration(e, t), t.set(e, a); }
function base_pdf_page_view_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function _checkInRHS(e) { if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? typeof e : "null")); return e; }
function base_pdf_page_view_classPrivateFieldGet(s, a) { return s.get(base_pdf_page_view_assertClassBrand(s, a)); }
function base_pdf_page_view_classPrivateFieldSet(s, a, r) { return s.set(base_pdf_page_view_assertClassBrand(s, a), r), r; }
function base_pdf_page_view_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var base_pdf_page_view_enableHWA = /*#__PURE__*/new WeakMap();
var _loadingId = /*#__PURE__*/new WeakMap();
var _minDurationToUpdateCanvas = /*#__PURE__*/new WeakMap();
var _renderError = /*#__PURE__*/new WeakMap();
var _renderingState = /*#__PURE__*/new WeakMap();
var _showCanvas = /*#__PURE__*/new WeakMap();
var _startTime = /*#__PURE__*/new WeakMap();
var base_pdf_page_view_tempCanvas = /*#__PURE__*/new WeakMap();
var _renderContinueCallback = /*#__PURE__*/new WeakMap();
var _BasePDFPageView_brand = /*#__PURE__*/new WeakSet();
class BasePDFPageView {
constructor(options) {
base_pdf_page_view_classPrivateMethodInitSpec(this, _BasePDFPageView_brand);
base_pdf_page_view_classPrivateFieldInitSpec(this, base_pdf_page_view_enableHWA, false);
base_pdf_page_view_classPrivateFieldInitSpec(this, _loadingId, null);
base_pdf_page_view_classPrivateFieldInitSpec(this, _minDurationToUpdateCanvas, 0);
base_pdf_page_view_classPrivateFieldInitSpec(this, _renderError, null);
base_pdf_page_view_classPrivateFieldInitSpec(this, _renderingState, RenderingStates.INITIAL);
base_pdf_page_view_classPrivateFieldInitSpec(this, _showCanvas, null);
base_pdf_page_view_classPrivateFieldInitSpec(this, _startTime, 0);
base_pdf_page_view_classPrivateFieldInitSpec(this, base_pdf_page_view_tempCanvas, null);
base_pdf_page_view_defineProperty(this, "canvas", null);
base_pdf_page_view_defineProperty(this, "div", null);
base_pdf_page_view_defineProperty(this, "eventBus", null);
base_pdf_page_view_defineProperty(this, "id", null);
base_pdf_page_view_defineProperty(this, "pageColors", null);
base_pdf_page_view_defineProperty(this, "renderingQueue", null);
base_pdf_page_view_defineProperty(this, "renderTask", null);
base_pdf_page_view_defineProperty(this, "resume", null);
base_pdf_page_view_classPrivateFieldInitSpec(this, _renderContinueCallback, cont => {
base_pdf_page_view_classPrivateFieldGet(_showCanvas, this)?.call(this, false);
if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) {
this.renderingState = RenderingStates.PAUSED;
this.resume = () => {
this.renderingState = RenderingStates.RUNNING;
cont();
};
return;
}
cont();
});
base_pdf_page_view_classPrivateFieldSet(base_pdf_page_view_enableHWA, this, base_pdf_page_view_enableHWA.has(_checkInRHS(options)) ? base_pdf_page_view_classPrivateFieldGet(base_pdf_page_view_enableHWA, options) : options.enableHWA || false);
this.eventBus = options.eventBus;
this.id = options.id;
this.pageColors = options.pageColors || null;
this.renderingQueue = options.renderingQueue;
base_pdf_page_view_classPrivateFieldSet(_minDurationToUpdateCanvas, this, options.minDurationToUpdateCanvas ?? 500);
}
get renderingState() {
return base_pdf_page_view_classPrivateFieldGet(_renderingState, this);
}
set renderingState(state) {
if (state === base_pdf_page_view_classPrivateFieldGet(_renderingState, this)) {
return;
}
base_pdf_page_view_classPrivateFieldSet(_renderingState, this, state);
if (base_pdf_page_view_classPrivateFieldGet(_loadingId, this)) {
clearTimeout(base_pdf_page_view_classPrivateFieldGet(_loadingId, this));
base_pdf_page_view_classPrivateFieldSet(_loadingId, this, null);
}
switch (state) {
case RenderingStates.PAUSED:
this.div.classList.remove("loading");
base_pdf_page_view_classPrivateFieldSet(_startTime, this, 0);
base_pdf_page_view_classPrivateFieldGet(_showCanvas, this)?.call(this, false);
break;
case RenderingStates.RUNNING:
this.div.classList.add("loadingIcon");
base_pdf_page_view_classPrivateFieldSet(_loadingId, this, setTimeout(() => {
this.div.classList.add("loading");
base_pdf_page_view_classPrivateFieldSet(_loadingId, this, null);
}, 0));
base_pdf_page_view_classPrivateFieldSet(_startTime, this, Date.now());
break;
case RenderingStates.INITIAL:
case RenderingStates.FINISHED:
this.div.classList.remove("loadingIcon", "loading");
base_pdf_page_view_classPrivateFieldSet(_startTime, this, 0);
break;
}
}
_createCanvas(onShow) {
let hideUntilComplete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
const {
pageColors
} = this;
const hasHCM = !!(pageColors?.background && pageColors?.foreground);
const prevCanvas = this.canvas;
const updateOnFirstShow = !prevCanvas && !hasHCM && !hideUntilComplete;
let canvas = this.canvas = document.createElement("canvas");
base_pdf_page_view_classPrivateFieldSet(_showCanvas, this, isLastShow => {
if (updateOnFirstShow) {
let tempCanvas = base_pdf_page_view_classPrivateFieldGet(base_pdf_page_view_tempCanvas, this);
if (!isLastShow && base_pdf_page_view_classPrivateFieldGet(_minDurationToUpdateCanvas, this) > 0) {
if (Date.now() - base_pdf_page_view_classPrivateFieldGet(_startTime, this) < base_pdf_page_view_classPrivateFieldGet(_minDurationToUpdateCanvas, this)) {
return;
}
if (!tempCanvas) {
tempCanvas = base_pdf_page_view_classPrivateFieldSet(base_pdf_page_view_tempCanvas, this, canvas);
canvas = this.canvas = canvas.cloneNode(false);
onShow(canvas);
}
}
if (tempCanvas) {
const ctx = canvas.getContext("2d", {
alpha: false
});
ctx.drawImage(tempCanvas, 0, 0);
if (isLastShow) {
base_pdf_page_view_assertClassBrand(_BasePDFPageView_brand, this, _resetTempCanvas).call(this);
} else {
base_pdf_page_view_classPrivateFieldSet(_startTime, this, Date.now());
}
return;
}
onShow(canvas);
base_pdf_page_view_classPrivateFieldSet(_showCanvas, this, null);
return;
}
if (!isLastShow) {
return;
}
if (prevCanvas) {
prevCanvas.replaceWith(canvas);
prevCanvas.width = prevCanvas.height = 0;
} else {
onShow(canvas);
}
});
const ctx = canvas.getContext("2d", {
alpha: false,
willReadFrequently: !base_pdf_page_view_classPrivateFieldGet(base_pdf_page_view_enableHWA, this)
});
return {
canvas,
prevCanvas,
ctx
};
}
_resetCanvas() {
const {
canvas
} = this;
if (!canvas) {
return;
}
canvas.remove();
canvas.width = canvas.height = 0;
this.canvas = null;
base_pdf_page_view_assertClassBrand(_BasePDFPageView_brand, this, _resetTempCanvas).call(this);
}
async _drawCanvas(options, onCancel, onFinish) {
const renderTask = this.renderTask = this.pdfPage.render(options);
renderTask.onContinue = base_pdf_page_view_classPrivateFieldGet(_renderContinueCallback, this);
renderTask.onError = error => {
if (error instanceof RenderingCancelledException) {
onCancel();
base_pdf_page_view_classPrivateFieldSet(_renderError, this, null);
}
};
let error = null;
try {
await renderTask.promise;
base_pdf_page_view_classPrivateFieldGet(_showCanvas, this)?.call(this, true);
} catch (e) {
if (e instanceof RenderingCancelledException) {
return;
}
error = e;
base_pdf_page_view_classPrivateFieldGet(_showCanvas, this)?.call(this, true);
} finally {
base_pdf_page_view_classPrivateFieldSet(_renderError, this, error);
if (renderTask === this.renderTask) {
this.renderTask = null;
}
}
this.renderingState = RenderingStates.FINISHED;
onFinish(renderTask);
if (error) {
throw error;
}
}
cancelRendering() {
let {
cancelExtraDelay = 0
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (this.renderTask) {
this.renderTask.cancel(cancelExtraDelay);
this.renderTask = null;
}
this.resume = null;
}
dispatchPageRender() {
this.eventBus.dispatch("pagerender", {
source: this,
pageNumber: this.id
});
}
dispatchPageRendered(cssTransform, isDetailView) {
this.eventBus.dispatch("pagerendered", {
source: this,
pageNumber: this.id,
cssTransform,
isDetailView,
timestamp: performance.now(),
error: base_pdf_page_view_classPrivateFieldGet(_renderError, this)
});
}
}
function _resetTempCanvas() {
if (base_pdf_page_view_classPrivateFieldGet(base_pdf_page_view_tempCanvas, this)) {
base_pdf_page_view_classPrivateFieldGet(base_pdf_page_view_tempCanvas, this).width = base_pdf_page_view_classPrivateFieldGet(base_pdf_page_view_tempCanvas, this).height = 0;
base_pdf_page_view_classPrivateFieldSet(base_pdf_page_view_tempCanvas, this, null);
}
}
;// ./web/draw_layer_builder.js
function draw_layer_builder_classPrivateFieldInitSpec(e, t, a) { draw_layer_builder_checkPrivateRedeclaration(e, t), t.set(e, a); }
function draw_layer_builder_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function draw_layer_builder_classPrivateFieldSet(s, a, r) { return s.set(draw_layer_builder_assertClassBrand(s, a), r), r; }
function draw_layer_builder_classPrivateFieldGet(s, a) { return s.get(draw_layer_builder_assertClassBrand(s, a)); }
function draw_layer_builder_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var draw_layer_builder_drawLayer = /*#__PURE__*/new WeakMap();
class DrawLayerBuilder {
constructor(options) {
draw_layer_builder_classPrivateFieldInitSpec(this, draw_layer_builder_drawLayer, null);
this.pageIndex = options.pageIndex;
}
async render(_ref) {
let {
intent = "display"
} = _ref;
if (intent !== "display" || draw_layer_builder_classPrivateFieldGet(draw_layer_builder_drawLayer, this) || this._cancelled) {
return;
}
draw_layer_builder_classPrivateFieldSet(draw_layer_builder_drawLayer, this, new DrawLayer({
pageIndex: this.pageIndex
}));
}
cancel() {
this._cancelled = true;
if (!draw_layer_builder_classPrivateFieldGet(draw_layer_builder_drawLayer, this)) {
return;
}
draw_layer_builder_classPrivateFieldGet(draw_layer_builder_drawLayer, this).destroy();
draw_layer_builder_classPrivateFieldSet(draw_layer_builder_drawLayer, this, null);
}
setParent(parent) {
draw_layer_builder_classPrivateFieldGet(draw_layer_builder_drawLayer, this)?.setParent(parent);
}
getDrawLayer() {
return draw_layer_builder_classPrivateFieldGet(draw_layer_builder_drawLayer, this);
}
}
;// ./web/pdf_page_detail_view.js
function pdf_page_detail_view_classPrivateMethodInitSpec(e, a) { pdf_page_detail_view_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_page_detail_view_defineProperty(e, r, t) { return (r = pdf_page_detail_view_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function pdf_page_detail_view_toPropertyKey(t) { var i = pdf_page_detail_view_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function pdf_page_detail_view_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function pdf_page_detail_view_classPrivateFieldInitSpec(e, t, a) { pdf_page_detail_view_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_page_detail_view_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_page_detail_view_classPrivateFieldSet(s, a, r) { return s.set(pdf_page_detail_view_assertClassBrand(s, a), r), r; }
function pdf_page_detail_view_classPrivateFieldGet(s, a) { return s.get(pdf_page_detail_view_assertClassBrand(s, a)); }
function pdf_page_detail_view_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _detailArea = /*#__PURE__*/new WeakMap();
var _PDFPageDetailView_brand = /*#__PURE__*/new WeakSet();
class PDFPageDetailView extends BasePDFPageView {
constructor(_ref) {
let {
pageView
} = _ref;
super(pageView);
pdf_page_detail_view_classPrivateMethodInitSpec(this, _PDFPageDetailView_brand);
pdf_page_detail_view_classPrivateFieldInitSpec(this, _detailArea, null);
pdf_page_detail_view_defineProperty(this, "renderingCancelled", false);
this.pageView = pageView;
this.renderingId = "detail" + this.id;
this.div = pageView.div;
}
setPdfPage(pdfPage) {
this.pageView.setPdfPage(pdfPage);
}
get pdfPage() {
return this.pageView.pdfPage;
}
get renderingState() {
return super.renderingState;
}
set renderingState(value) {
this.renderingCancelled = false;
super.renderingState = value;
}
reset() {
let {
keepCanvas = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const renderingCancelled = this.renderingCancelled || this.renderingState === RenderingStates.RUNNING || this.renderingState === RenderingStates.PAUSED;
this.cancelRendering();
this.renderingState = RenderingStates.INITIAL;
this.renderingCancelled = renderingCancelled;
if (!keepCanvas) {
this._resetCanvas();
}
}
update() {
let {
visibleArea = null,
underlyingViewUpdated = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (underlyingViewUpdated) {
this.cancelRendering();
this.renderingState = RenderingStates.INITIAL;
return;
}
if (!pdf_page_detail_view_assertClassBrand(_PDFPageDetailView_brand, this, _shouldRenderDifferentArea).call(this, visibleArea)) {
return;
}
const {
viewport,
maxCanvasPixels,
capCanvasAreaFactor
} = this.pageView;
const visibleWidth = visibleArea.maxX - visibleArea.minX;
const visibleHeight = visibleArea.maxY - visibleArea.minY;
const visiblePixels = visibleWidth * visibleHeight * OutputScale.pixelRatio ** 2;
const maxDetailToVisibleLinearRatio = Math.sqrt(OutputScale.capPixels(maxCanvasPixels, capCanvasAreaFactor) / visiblePixels);
const maxOverflowScale = (maxDetailToVisibleLinearRatio - 1) / 2;
let overflowScale = Math.min(1, maxOverflowScale);
if (overflowScale < 0) {
overflowScale = 0;
}
const overflowWidth = visibleWidth * overflowScale;
const overflowHeight = visibleHeight * overflowScale;
const minX = Math.max(0, visibleArea.minX - overflowWidth);
const maxX = Math.min(viewport.width, visibleArea.maxX + overflowWidth);
const minY = Math.max(0, visibleArea.minY - overflowHeight);
const maxY = Math.min(viewport.height, visibleArea.maxY + overflowHeight);
const width = maxX - minX;
const height = maxY - minY;
pdf_page_detail_view_classPrivateFieldSet(_detailArea, this, {
minX,
minY,
width,
height,
scale: viewport.scale
});
this.reset({
keepCanvas: true
});
}
async draw() {
if (this.pageView.detailView !== this) {
return undefined;
}
const hideUntilComplete = this.pageView.renderingState === RenderingStates.FINISHED || this.renderingState === RenderingStates.FINISHED;
if (this.renderingState !== RenderingStates.INITIAL) {
console.error("Must be in new state before drawing");
this.reset();
}
const {
div,
pdfPage,
viewport
} = this.pageView;
if (!pdfPage) {
this.renderingState = RenderingStates.FINISHED;
throw new Error("pdfPage is not loaded");
}
this.renderingState = RenderingStates.RUNNING;
const canvasWrapper = this.pageView._ensureCanvasWrapper();
const {
canvas,
prevCanvas,
ctx
} = this._createCanvas(newCanvas => {
if (canvasWrapper.firstElementChild?.tagName === "CANVAS") {
canvasWrapper.firstElementChild.after(newCanvas);
} else {
canvasWrapper.prepend(newCanvas);
}
}, hideUntilComplete);
canvas.setAttribute("aria-hidden", "true");
const {
width,
height
} = viewport;
const area = pdf_page_detail_view_classPrivateFieldGet(_detailArea, this);
const {
pixelRatio
} = OutputScale;
const transform = [pixelRatio, 0, 0, pixelRatio, -area.minX * pixelRatio, -area.minY * pixelRatio];
canvas.width = area.width * pixelRatio;
canvas.height = area.height * pixelRatio;
const {
style
} = canvas;
style.width = `${area.width * 100 / width}%`;
style.height = `${area.height * 100 / height}%`;
style.top = `${area.minY * 100 / height}%`;
style.left = `${area.minX * 100 / width}%`;
const renderingPromise = this._drawCanvas(this.pageView._getRenderingContext(ctx, transform), () => {
this.canvas?.remove();
this.canvas = prevCanvas;
}, () => {
this.dispatchPageRendered(false, true);
});
div.setAttribute("data-loaded", true);
this.dispatchPageRender();
return renderingPromise;
}
}
function _shouldRenderDifferentArea(visibleArea) {
if (!pdf_page_detail_view_classPrivateFieldGet(_detailArea, this)) {
return true;
}
const minDetailX = pdf_page_detail_view_classPrivateFieldGet(_detailArea, this).minX;
const minDetailY = pdf_page_detail_view_classPrivateFieldGet(_detailArea, this).minY;
const maxDetailX = pdf_page_detail_view_classPrivateFieldGet(_detailArea, this).width + minDetailX;
const maxDetailY = pdf_page_detail_view_classPrivateFieldGet(_detailArea, this).height + minDetailY;
if (visibleArea.minX < minDetailX || visibleArea.minY < minDetailY || visibleArea.maxX > maxDetailX || visibleArea.maxY > maxDetailY) {
return true;
}
const {
width: maxWidth,
height: maxHeight,
scale
} = this.pageView.viewport;
if (pdf_page_detail_view_classPrivateFieldGet(_detailArea, this).scale !== scale) {
return true;
}
const paddingLeftSize = visibleArea.minX - minDetailX;
const paddingRightSize = maxDetailX - visibleArea.maxX;
const paddingTopSize = visibleArea.minY - minDetailY;
const paddingBottomSize = maxDetailY - visibleArea.maxY;
const MOVEMENT_THRESHOLD = 0.5;
const ratio = (1 + MOVEMENT_THRESHOLD) / MOVEMENT_THRESHOLD;
if (minDetailX > 0 && paddingRightSize / paddingLeftSize > ratio || maxDetailX < maxWidth && paddingLeftSize / paddingRightSize > ratio || minDetailY > 0 && paddingBottomSize / paddingTopSize > ratio || maxDetailY < maxHeight && paddingTopSize / paddingBottomSize > ratio) {
return true;
}
return false;
}
;// ./web/struct_tree_layer_builder.js
function struct_tree_layer_builder_classPrivateMethodInitSpec(e, a) { struct_tree_layer_builder_checkPrivateRedeclaration(e, a), a.add(e); }
function struct_tree_layer_builder_classPrivateFieldInitSpec(e, t, a) { struct_tree_layer_builder_checkPrivateRedeclaration(e, t), t.set(e, a); }
function struct_tree_layer_builder_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function struct_tree_layer_builder_classPrivateFieldGet(s, a) { return s.get(struct_tree_layer_builder_assertClassBrand(s, a)); }
function struct_tree_layer_builder_classPrivateFieldSet(s, a, r) { return s.set(struct_tree_layer_builder_assertClassBrand(s, a), r), r; }
function struct_tree_layer_builder_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const PDF_ROLE_TO_HTML_ROLE = {
Document: null,
DocumentFragment: null,
Part: "group",
Sect: "group",
Div: "group",
Aside: "note",
NonStruct: "none",
P: null,
H: "heading",
Title: null,
FENote: "note",
Sub: "group",
Lbl: null,
Span: null,
Em: null,
Strong: null,
Link: "link",
Annot: "note",
Form: "form",
Ruby: null,
RB: null,
RT: null,
RP: null,
Warichu: null,
WT: null,
WP: null,
L: "list",
LI: "listitem",
LBody: null,
Table: "table",
TR: "row",
TH: "columnheader",
TD: "cell",
THead: "columnheader",
TBody: null,
TFoot: null,
Caption: null,
Figure: "figure",
Formula: null,
Artifact: null
};
const HEADING_PATTERN = /^H(\d+)$/;
var _promise = /*#__PURE__*/new WeakMap();
var _treeDom = /*#__PURE__*/new WeakMap();
var _treePromise = /*#__PURE__*/new WeakMap();
var _elementAttributes = /*#__PURE__*/new WeakMap();
var _rawDims = /*#__PURE__*/new WeakMap();
var _elementsToAddToTextLayer = /*#__PURE__*/new WeakMap();
var _StructTreeLayerBuilder_brand = /*#__PURE__*/new WeakSet();
class StructTreeLayerBuilder {
constructor(pdfPage, rawDims) {
struct_tree_layer_builder_classPrivateMethodInitSpec(this, _StructTreeLayerBuilder_brand);
struct_tree_layer_builder_classPrivateFieldInitSpec(this, _promise, void 0);
struct_tree_layer_builder_classPrivateFieldInitSpec(this, _treeDom, null);
struct_tree_layer_builder_classPrivateFieldInitSpec(this, _treePromise, void 0);
struct_tree_layer_builder_classPrivateFieldInitSpec(this, _elementAttributes, new Map());
struct_tree_layer_builder_classPrivateFieldInitSpec(this, _rawDims, void 0);
struct_tree_layer_builder_classPrivateFieldInitSpec(this, _elementsToAddToTextLayer, null);
struct_tree_layer_builder_classPrivateFieldSet(_promise, this, pdfPage.getStructTree());
struct_tree_layer_builder_classPrivateFieldSet(_rawDims, this, rawDims);
}
async render() {
if (struct_tree_layer_builder_classPrivateFieldGet(_treePromise, this)) {
return struct_tree_layer_builder_classPrivateFieldGet(_treePromise, this);
}
const {
promise,
resolve,
reject
} = Promise.withResolvers();
struct_tree_layer_builder_classPrivateFieldSet(_treePromise, this, promise);
try {
struct_tree_layer_builder_classPrivateFieldSet(_treeDom, this, struct_tree_layer_builder_assertClassBrand(_StructTreeLayerBuilder_brand, this, _walk).call(this, await struct_tree_layer_builder_classPrivateFieldGet(_promise, this)));
} catch (ex) {
reject(ex);
}
struct_tree_layer_builder_classPrivateFieldSet(_promise, this, null);
struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this)?.classList.add("structTree");
resolve(struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this));
return promise;
}
async getAriaAttributes(annotationId) {
try {
await this.render();
return struct_tree_layer_builder_classPrivateFieldGet(_elementAttributes, this).get(annotationId);
} catch {}
return null;
}
hide() {
if (struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this) && !struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this).hidden) {
struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this).hidden = true;
}
}
show() {
if (struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this)?.hidden) {
struct_tree_layer_builder_classPrivateFieldGet(_treeDom, this).hidden = false;
}
}
addElementsToTextLayer() {
if (!struct_tree_layer_builder_classPrivateFieldGet(_elementsToAddToTextLayer, this)) {
return;
}
for (const [id, img] of struct_tree_layer_builder_classPrivateFieldGet(_elementsToAddToTextLayer, this)) {
document.getElementById(id)?.append(img);
}
struct_tree_layer_builder_classPrivateFieldGet(_elementsToAddToTextLayer, this).clear();
struct_tree_layer_builder_classPrivateFieldSet(_elementsToAddToTextLayer, this, null);
}
}
function _setAttributes(structElement, htmlElement) {
const {
alt,
id,
lang
} = structElement;
if (alt !== undefined) {
let added = false;
const label = removeNullCharacters(alt);
for (const child of structElement.children) {
if (child.type === "annotation") {
let attrs = struct_tree_layer_builder_classPrivateFieldGet(_elementAttributes, this).get(child.id);
if (!attrs) {
attrs = new Map();
struct_tree_layer_builder_classPrivateFieldGet(_elementAttributes, this).set(child.id, attrs);
}
attrs.set("aria-label", label);
added = true;
}
}
if (!added) {
htmlElement.setAttribute("aria-label", label);
}
}
if (id !== undefined) {
htmlElement.setAttribute("aria-owns", id);
}
if (lang !== undefined) {
htmlElement.setAttribute("lang", removeNullCharacters(lang, true));
}
}
function _addImageInTextLayer(node, element) {
const {
alt,
bbox,
children
} = node;
const child = children?.[0];
if (!struct_tree_layer_builder_classPrivateFieldGet(_rawDims, this) || !alt || !bbox || child?.type !== "content") {
return false;
}
const {
id
} = child;
if (!id) {
return false;
}
element.setAttribute("aria-owns", id);
const img = document.createElement("span");
(struct_tree_layer_builder_classPrivateFieldGet(_elementsToAddToTextLayer, this) || struct_tree_layer_builder_classPrivateFieldSet(_elementsToAddToTextLayer, this, new Map())).set(id, img);
img.setAttribute("role", "img");
img.setAttribute("aria-label", removeNullCharacters(alt));
const {
pageHeight,
pageX,
pageY
} = struct_tree_layer_builder_classPrivateFieldGet(_rawDims, this);
const calc = "calc(var(--total-scale-factor) *";
const {
style
} = img;
style.width = `${calc}${bbox[2] - bbox[0]}px)`;
style.height = `${calc}${bbox[3] - bbox[1]}px)`;
style.left = `${calc}${bbox[0] - pageX}px)`;
style.top = `${calc}${pageHeight - bbox[3] + pageY}px)`;
return true;
}
function _walk(node) {
if (!node) {
return null;
}
const element = document.createElement("span");
if ("role" in node) {
const {
role
} = node;
const match = role.match(HEADING_PATTERN);
if (match) {
element.setAttribute("role", "heading");
element.setAttribute("aria-level", match[1]);
} else if (PDF_ROLE_TO_HTML_ROLE[role]) {
element.setAttribute("role", PDF_ROLE_TO_HTML_ROLE[role]);
}
if (role === "Figure" && struct_tree_layer_builder_assertClassBrand(_StructTreeLayerBuilder_brand, this, _addImageInTextLayer).call(this, node, element)) {
return element;
}
}
struct_tree_layer_builder_assertClassBrand(_StructTreeLayerBuilder_brand, this, _setAttributes).call(this, node, element);
if (node.children) {
if (node.children.length === 1 && "id" in node.children[0]) {
struct_tree_layer_builder_assertClassBrand(_StructTreeLayerBuilder_brand, this, _setAttributes).call(this, node.children[0], element);
} else {
for (const kid of node.children) {
element.append(struct_tree_layer_builder_assertClassBrand(_StructTreeLayerBuilder_brand, this, _walk).call(this, kid));
}
}
}
return element;
}
;// ./web/text_accessibility.js
function text_accessibility_classPrivateMethodInitSpec(e, a) { text_accessibility_checkPrivateRedeclaration(e, a), a.add(e); }
function text_accessibility_classPrivateFieldInitSpec(e, t, a) { text_accessibility_checkPrivateRedeclaration(e, t), t.set(e, a); }
function text_accessibility_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function text_accessibility_classPrivateFieldGet(s, a) { return s.get(text_accessibility_assertClassBrand(s, a)); }
function text_accessibility_classPrivateFieldSet(s, a, r) { return s.set(text_accessibility_assertClassBrand(s, a), r), r; }
function text_accessibility_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _enabled = /*#__PURE__*/new WeakMap();
var _textChildren = /*#__PURE__*/new WeakMap();
var _textNodes = /*#__PURE__*/new WeakMap();
var _waitingElements = /*#__PURE__*/new WeakMap();
var _TextAccessibilityManager_brand = /*#__PURE__*/new WeakSet();
class TextAccessibilityManager {
constructor() {
text_accessibility_classPrivateMethodInitSpec(this, _TextAccessibilityManager_brand);
text_accessibility_classPrivateFieldInitSpec(this, _enabled, false);
text_accessibility_classPrivateFieldInitSpec(this, _textChildren, null);
text_accessibility_classPrivateFieldInitSpec(this, _textNodes, new Map());
text_accessibility_classPrivateFieldInitSpec(this, _waitingElements, new Map());
}
setTextMapping(textDivs) {
text_accessibility_classPrivateFieldSet(_textChildren, this, textDivs);
}
enable() {
if (text_accessibility_classPrivateFieldGet(_enabled, this)) {
throw new Error("TextAccessibilityManager is already enabled.");
}
if (!text_accessibility_classPrivateFieldGet(_textChildren, this)) {
throw new Error("Text divs and strings have not been set.");
}
text_accessibility_classPrivateFieldSet(_enabled, this, true);
text_accessibility_classPrivateFieldSet(_textChildren, this, text_accessibility_classPrivateFieldGet(_textChildren, this).slice());
text_accessibility_classPrivateFieldGet(_textChildren, this).sort(_compareElementPositions);
if (text_accessibility_classPrivateFieldGet(_textNodes, this).size > 0) {
const textChildren = text_accessibility_classPrivateFieldGet(_textChildren, this);
for (const [id, nodeIndex] of text_accessibility_classPrivateFieldGet(_textNodes, this)) {
const element = document.getElementById(id);
if (!element) {
text_accessibility_classPrivateFieldGet(_textNodes, this).delete(id);
continue;
}
text_accessibility_assertClassBrand(_TextAccessibilityManager_brand, this, _addIdToAriaOwns).call(this, id, textChildren[nodeIndex]);
}
}
for (const [element, isRemovable] of text_accessibility_classPrivateFieldGet(_waitingElements, this)) {
this.addPointerInTextLayer(element, isRemovable);
}
text_accessibility_classPrivateFieldGet(_waitingElements, this).clear();
}
disable() {
if (!text_accessibility_classPrivateFieldGet(_enabled, this)) {
return;
}
text_accessibility_classPrivateFieldGet(_waitingElements, this).clear();
text_accessibility_classPrivateFieldSet(_textChildren, this, null);
text_accessibility_classPrivateFieldSet(_enabled, this, false);
}
removePointerInTextLayer(element) {
if (!text_accessibility_classPrivateFieldGet(_enabled, this)) {
text_accessibility_classPrivateFieldGet(_waitingElements, this).delete(element);
return;
}
const children = text_accessibility_classPrivateFieldGet(_textChildren, this);
if (!children || children.length === 0) {
return;
}
const {
id
} = element;
const nodeIndex = text_accessibility_classPrivateFieldGet(_textNodes, this).get(id);
if (nodeIndex === undefined) {
return;
}
const node = children[nodeIndex];
text_accessibility_classPrivateFieldGet(_textNodes, this).delete(id);
let owns = node.getAttribute("aria-owns");
if (owns?.includes(id)) {
owns = owns.split(" ").filter(x => x !== id).join(" ");
if (owns) {
node.setAttribute("aria-owns", owns);
} else {
node.removeAttribute("aria-owns");
node.setAttribute("role", "presentation");
}
}
}
addPointerInTextLayer(element, isRemovable) {
const {
id
} = element;
if (!id) {
return null;
}
if (!text_accessibility_classPrivateFieldGet(_enabled, this)) {
text_accessibility_classPrivateFieldGet(_waitingElements, this).set(element, isRemovable);
return null;
}
if (isRemovable) {
this.removePointerInTextLayer(element);
}
const children = text_accessibility_classPrivateFieldGet(_textChildren, this);
if (!children || children.length === 0) {
return null;
}
const index = binarySearchFirstItem(children, node => _compareElementPositions.call(TextAccessibilityManager, element, node) < 0);
const nodeIndex = Math.max(0, index - 1);
const child = children[nodeIndex];
text_accessibility_assertClassBrand(_TextAccessibilityManager_brand, this, _addIdToAriaOwns).call(this, id, child);
text_accessibility_classPrivateFieldGet(_textNodes, this).set(id, nodeIndex);
const parent = child.parentNode;
return parent?.classList.contains("markedContent") ? parent.id : null;
}
moveElementInDOM(container, element, contentElement, isRemovable) {
const id = this.addPointerInTextLayer(contentElement, isRemovable);
if (!container.hasChildNodes()) {
container.append(element);
return id;
}
const children = Array.from(container.childNodes).filter(node => node !== element);
if (children.length === 0) {
return id;
}
const elementToCompare = contentElement || element;
const index = binarySearchFirstItem(children, node => _compareElementPositions.call(TextAccessibilityManager, elementToCompare, node) < 0);
if (index === 0) {
children[0].before(element);
} else {
children[index - 1].after(element);
}
return id;
}
}
function _compareElementPositions(e1, e2) {
const rect1 = e1.getBoundingClientRect();
const rect2 = e2.getBoundingClientRect();
if (rect1.width === 0 && rect1.height === 0) {
return +1;
}
if (rect2.width === 0 && rect2.height === 0) {
return -1;
}
const top1 = rect1.y;
const bot1 = rect1.y + rect1.height;
const mid1 = rect1.y + rect1.height / 2;
const top2 = rect2.y;
const bot2 = rect2.y + rect2.height;
const mid2 = rect2.y + rect2.height / 2;
if (mid1 <= top2 && mid2 >= bot1) {
return -1;
}
if (mid2 <= top1 && mid1 >= bot2) {
return +1;
}
const centerX1 = rect1.x + rect1.width / 2;
const centerX2 = rect2.x + rect2.width / 2;
return centerX1 - centerX2;
}
function _addIdToAriaOwns(id, node) {
const owns = node.getAttribute("aria-owns");
if (!owns?.includes(id)) {
node.setAttribute("aria-owns", owns ? `${owns} ${id}` : id);
}
node.removeAttribute("role");
}
;// ./web/text_highlighter.js
function text_highlighter_classPrivateFieldInitSpec(e, t, a) { text_highlighter_checkPrivateRedeclaration(e, t), t.set(e, a); }
function text_highlighter_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function text_highlighter_classPrivateFieldSet(s, a, r) { return s.set(text_highlighter_assertClassBrand(s, a), r), r; }
function text_highlighter_classPrivateFieldGet(s, a) { return s.get(text_highlighter_assertClassBrand(s, a)); }
function text_highlighter_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var text_highlighter_eventAbortController = /*#__PURE__*/new WeakMap();
class TextHighlighter {
constructor(_ref) {
let {
findController,
customFindController,
eventBus,
pageIndex
} = _ref;
text_highlighter_classPrivateFieldInitSpec(this, text_highlighter_eventAbortController, null);
this.findController = findController;
this.customFindController = customFindController;
this.matches = [];
this.eventBus = eventBus;
this.pageIdx = pageIndex;
this.textDivs = null;
this.textContentItemsStr = null;
this.enabled = false;
}
setTextMapping(divs, texts) {
this.textDivs = divs;
this.textContentItemsStr = texts;
}
enable() {
if (!this.textDivs || !this.textContentItemsStr) {
throw new Error("Text divs and strings have not been set.");
}
if (this.enabled) {
return;
}
this.enabled = true;
if (!text_highlighter_classPrivateFieldGet(text_highlighter_eventAbortController, this)) {
text_highlighter_classPrivateFieldSet(text_highlighter_eventAbortController, this, new AbortController());
this.eventBus._on("updatetextlayermatches", evt => {
if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {
this._updateMatches();
}
}, {
signal: text_highlighter_classPrivateFieldGet(text_highlighter_eventAbortController, this).signal
});
}
this._updateMatches();
}
disable() {
if (!this.enabled) {
return;
}
this.enabled = false;
text_highlighter_classPrivateFieldGet(text_highlighter_eventAbortController, this)?.abort();
text_highlighter_classPrivateFieldSet(text_highlighter_eventAbortController, this, null);
this._updateMatches(true);
}
_convertMatches(matches, matchesLength) {
let cssClass = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "highlight";
let highlightAll = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
let isPageWithSelection = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
let selectedMatchIdx = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : -1;
if (!matches) {
return [];
}
const {
textContentItemsStr
} = this;
let i = 0,
iIndex = 0;
const end = textContentItemsStr.length - 1;
const result = [];
for (let m = 0, mm = matches.length; m < mm; m++) {
let matchIdx = matches[m];
while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {
iIndex += textContentItemsStr[i].length;
i++;
}
if (i === textContentItemsStr.length) {
NgxConsole.error("Could not find a matching mapping");
}
const match = {
begin: {
divIdx: i,
offset: matchIdx - iIndex
},
cssClass,
highlightAll,
selected: isPageWithSelection && m === selectedMatchIdx
};
matchIdx += matchesLength[m];
while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
iIndex += textContentItemsStr[i].length;
i++;
}
match.end = {
divIdx: i,
offset: matchIdx - iIndex
};
result.push(match);
}
return result;
}
_renderMatches(matches, findController) {
if (matches.length === 0) {
return;
}
const {
pageIdx
} = this;
const {
textContentItemsStr,
textDivs
} = this;
let prevEnd = null;
const infinity = {
divIdx: -1,
offset: undefined
};
function beginText(begin, className) {
const divIdx = begin.divIdx;
textDivs[divIdx].textContent = "";
return appendTextToDiv(divIdx, 0, begin.offset, className);
}
function appendTextToDiv(divIdx, fromOffset, toOffset, className) {
let div = textDivs[divIdx];
if (div.nodeType === Node.TEXT_NODE) {
const span = document.createElement("span");
div.before(span);
span.append(div);
textDivs[divIdx] = span;
div = span;
}
const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);
const node = document.createTextNode(content);
if (className) {
const span = document.createElement("span");
span.className = `${className} appended`;
span.append(node);
div.append(span);
if (className.includes("selected")) {
const {
left
} = span.getClientRects()[0];
const parentLeft = div.getBoundingClientRect().left;
return left - parentLeft;
}
return 0;
}
div.append(node);
return 0;
}
let lastDivIdx = -1;
let lastOffset = -1;
for (let i = 0; i < matches.length; i++) {
const match = matches[i];
if (!match.selected && !match.highlightAll) {
continue;
}
const begin = match.begin;
if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) {
continue;
}
lastDivIdx = begin.divIdx;
lastOffset = begin.offset;
const end = match.end;
const highlightSuffix = match.selected ? " selected" : "";
let selectedLeft = 0;
if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {
if (prevEnd !== null) {
appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
}
beginText(begin);
} else {
appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);
}
if (begin.divIdx === end.divIdx) {
selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, match.cssClass + highlightSuffix);
} else {
selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, match.cssClass + " begin" + highlightSuffix);
for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {
textDivs[n0].className = match.cssClass + " middle" + highlightSuffix;
}
beginText(end, match.cssClass + " end" + highlightSuffix);
}
prevEnd = end;
if (match.selected) {
findController.scrollMatchIntoView({
element: textDivs[begin.divIdx],
selectedLeft,
pageIndex: pageIdx,
matchIndex: i
});
}
if (this.textDivs.length > 0) {
const textLayer = this.textDivs[0].closest(".textLayer");
const highlights = textLayer.querySelectorAll(`.${match.cssClass}`);
this.eventBus.dispatch("renderedtextlayerhighlights", {
pageIndex: pageIdx,
highlights
});
}
}
if (prevEnd) {
appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
}
}
_updateMatches() {
let reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!this.enabled && !reset) {
return;
}
const {
findController,
customFindController,
matches,
pageIdx
} = this;
const {
textContentItemsStr,
textDivs
} = this;
let clearedUntilDivIdx = -1;
for (const match of matches) {
const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);
for (let n = begin, end = match.end.divIdx; n <= end; n++) {
const div = textDivs[n];
div.textContent = textContentItemsStr[n];
div.className = "";
}
clearedUntilDivIdx = match.end.divIdx + 1;
}
if (reset) {
return;
}
const customPageMatches = customFindController.pageMatches[pageIdx] || null;
const customPageMatchesLength = customFindController.pageMatchesLength[pageIdx] || null;
const pageMatches = findController.pageMatches[pageIdx] || null;
const customMatches = this._convertMatches(customPageMatches, customPageMatchesLength, "customHighlight", customFindController.state?.highlightAll, pageIdx === customFindController.selected.pageIdx, customFindController.selected.matchIdx);
this.matches = [...customMatches];
if (!findController?.highlightMatches || reset) {
if (!reset) {
this._renderMatches(this.matches, this.customFindController);
}
}
const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;
const convertedMatches = this._convertMatches(pageMatches, pageMatchesLength, "highlight", findController.state?.highlightAll, pageIdx === findController.selected.pageIdx, findController.selected.matchIdx);
this.matches.push(...convertedMatches);
this.matches.sort((a, b) => {
const cmp = a.begin.divIdx - b.begin.divIdx;
return cmp === 0 ? a.begin.offset - b.begin.offset : cmp;
});
this._renderMatches(this.matches, this.findController);
}
}
;// ./web/text_layer_builder.js
var _TextLayerBuilder;
function text_layer_builder_classPrivateMethodInitSpec(e, a) { text_layer_builder_checkPrivateRedeclaration(e, a), a.add(e); }
function text_layer_builder_classPrivateFieldInitSpec(e, t, a) { text_layer_builder_checkPrivateRedeclaration(e, t), t.set(e, a); }
function text_layer_builder_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function text_layer_builder_classPrivateFieldGet(s, a) { return s.get(text_layer_builder_assertClassBrand(s, a)); }
function text_layer_builder_classPrivateFieldSet(s, a, r) { return s.set(text_layer_builder_assertClassBrand(s, a), r), r; }
function text_layer_builder_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var _enablePermissions = /*#__PURE__*/new WeakMap();
var text_layer_builder_onAppend = /*#__PURE__*/new WeakMap();
var _renderingDone = /*#__PURE__*/new WeakMap();
var text_layer_builder_textLayer = /*#__PURE__*/new WeakMap();
var _TextLayerBuilder_brand = /*#__PURE__*/new WeakSet();
class TextLayerBuilder {
constructor(_ref) {
let {
pdfPage,
highlighter = null,
accessibilityManager = null,
enablePermissions = false,
onAppend = null
} = _ref;
text_layer_builder_classPrivateMethodInitSpec(this, _TextLayerBuilder_brand);
text_layer_builder_classPrivateFieldInitSpec(this, _enablePermissions, false);
text_layer_builder_classPrivateFieldInitSpec(this, text_layer_builder_onAppend, null);
text_layer_builder_classPrivateFieldInitSpec(this, _renderingDone, false);
text_layer_builder_classPrivateFieldInitSpec(this, text_layer_builder_textLayer, null);
this.pdfPage = pdfPage;
this.highlighter = highlighter;
this.accessibilityManager = accessibilityManager;
text_layer_builder_classPrivateFieldSet(_enablePermissions, this, enablePermissions === true);
text_layer_builder_classPrivateFieldSet(text_layer_builder_onAppend, this, onAppend);
this.div = document.createElement("div");
this.div.tabIndex = 0;
this.div.className = "textLayer";
}
async render(_ref2) {
let {
viewport,
textContentParams = null
} = _ref2;
if (text_layer_builder_classPrivateFieldGet(_renderingDone, this) && text_layer_builder_classPrivateFieldGet(text_layer_builder_textLayer, this)) {
text_layer_builder_classPrivateFieldGet(text_layer_builder_textLayer, this).update({
viewport,
onBefore: this.hide.bind(this)
});
this.show();
return;
}
this.cancel();
text_layer_builder_classPrivateFieldSet(text_layer_builder_textLayer, this, new TextLayer({
textContentSource: this.pdfPage.streamTextContent(textContentParams || {
includeMarkedContent: true,
disableNormalization: true
}),
container: this.div,
viewport
}));
const {
textDivs,
textContentItemsStr
} = text_layer_builder_classPrivateFieldGet(text_layer_builder_textLayer, this);
this.highlighter?.setTextMapping(textDivs, textContentItemsStr);
this.accessibilityManager?.setTextMapping(textDivs);
await text_layer_builder_classPrivateFieldGet(text_layer_builder_textLayer, this).render();
text_layer_builder_classPrivateFieldSet(_renderingDone, this, true);
const endOfContent = document.createElement("div");
endOfContent.className = "endOfContent";
this.div.append(endOfContent);
text_layer_builder_assertClassBrand(_TextLayerBuilder_brand, this, _bindMouse).call(this, endOfContent);
text_layer_builder_classPrivateFieldGet(text_layer_builder_onAppend, this)?.call(this, this.div);
this.highlighter?.enable();
this.accessibilityManager?.enable();
}
hide() {
if (!this.div.hidden && text_layer_builder_classPrivateFieldGet(_renderingDone, this)) {
this.highlighter?.disable();
this.div.hidden = true;
}
}
show() {
if (this.div.hidden && text_layer_builder_classPrivateFieldGet(_renderingDone, this)) {
this.div.hidden = false;
this.highlighter?.enable();
}
}
cancel() {
text_layer_builder_classPrivateFieldGet(text_layer_builder_textLayer, this)?.cancel();
text_layer_builder_classPrivateFieldSet(text_layer_builder_textLayer, this, null);
this.highlighter?.disable();
this.accessibilityManager?.disable();
_removeGlobalSelectionListener.call(TextLayerBuilder, this.div);
}
}
_TextLayerBuilder = TextLayerBuilder;
function _bindMouse(end) {
const {
div
} = this;
div.addEventListener("mousedown", () => {
div.classList.add("selecting");
});
div.addEventListener("copy", event => {
if (!text_layer_builder_classPrivateFieldGet(_enablePermissions, this)) {
const selection = document.getSelection();
event.clipboardData.setData("text/plain", removeNullCharacters(normalizeUnicode(selection.toString())));
}
stopEvent(event);
});
_textLayers._.set(div, end);
_enableGlobalSelectionListener.call(_TextLayerBuilder);
}
function _removeGlobalSelectionListener(textLayerDiv) {
text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.delete(textLayerDiv);
if (text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.size === 0) {
text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _selectionChangeAbortController)._?.abort();
_selectionChangeAbortController._ = text_layer_builder_assertClassBrand(_TextLayerBuilder, this, null);
}
}
function _enableGlobalSelectionListener() {
if (text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _selectionChangeAbortController)._) {
return;
}
_selectionChangeAbortController._ = text_layer_builder_assertClassBrand(_TextLayerBuilder, this, new AbortController());
const {
signal
} = text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _selectionChangeAbortController)._;
const reset = (end, textLayer) => {
textLayer.append(end);
end.style.width = "";
end.style.height = "";
textLayer.classList.remove("selecting");
};
let isPointerDown = false;
document.addEventListener("pointerdown", () => {
isPointerDown = true;
}, {
signal
});
document.addEventListener("pointerup", () => {
isPointerDown = false;
text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.forEach(reset);
}, {
signal
});
window.addEventListener("blur", () => {
isPointerDown = false;
text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.forEach(reset);
}, {
signal
});
document.addEventListener("keyup", () => {
if (!isPointerDown) {
text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.forEach(reset);
}
}, {
signal
});
var isFirefox, prevRange;
document.addEventListener("selectionchange", () => {
const selection = document.getSelection();
if (selection.rangeCount === 0) {
text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.forEach(reset);
return;
}
if (text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.size === 0) {
return;
}
const activeTextLayers = new Set();
for (let i = 0; i < selection.rangeCount; i++) {
const range = selection.getRangeAt(i);
for (const textLayerDiv of text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.keys()) {
if (!activeTextLayers.has(textLayerDiv) && range.intersectsNode(textLayerDiv)) {
activeTextLayers.add(textLayerDiv);
}
}
}
for (const [textLayerDiv, endDiv] of text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._) {
if (activeTextLayers.has(textLayerDiv)) {
textLayerDiv.classList.add("selecting");
} else {
reset(endDiv, textLayerDiv);
}
}
isFirefox ??= getComputedStyle(text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.values().next().value).getPropertyValue("-moz-user-select") === "none";
if (isFirefox) {
return;
}
const range = selection.getRangeAt(0);
const modifyStart = prevRange && (range.compareBoundaryPoints(Range.END_TO_END, prevRange) === 0 || range.compareBoundaryPoints(Range.START_TO_END, prevRange) === 0);
let anchor = modifyStart ? range.startContainer : range.endContainer;
if (anchor.nodeType === Node.TEXT_NODE) {
anchor = anchor.parentNode;
}
if (!modifyStart && range.endOffset === 0) {
do {
while (!anchor.previousSibling) {
anchor = anchor.parentNode;
}
anchor = anchor.previousSibling;
} while (!anchor.childNodes.length);
}
const parentTextLayer = anchor.parentElement?.closest(".textLayer");
const endDiv = text_layer_builder_assertClassBrand(_TextLayerBuilder, this, _textLayers)._.get(parentTextLayer);
if (endDiv) {
endDiv.style.width = parentTextLayer.style.width;
endDiv.style.height = parentTextLayer.style.height;
anchor.parentElement.insertBefore(endDiv, modifyStart ? anchor : anchor.nextSibling);
}
prevRange = range.cloneRange();
}, {
signal
});
}
var _textLayers = {
_: new Map()
};
var _selectionChangeAbortController = {
_: null
};
;// ./web/pdf_page_view.js
function pdf_page_view_classPrivateMethodInitSpec(e, a) { pdf_page_view_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_page_view_classPrivateFieldInitSpec(e, t, a) { pdf_page_view_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_page_view_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_page_view_classPrivateFieldGet(s, a) { return s.get(pdf_page_view_assertClassBrand(s, a)); }
function pdf_page_view_classPrivateFieldSet(s, a, r) { return s.set(pdf_page_view_assertClassBrand(s, a), r), r; }
function pdf_page_view_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DEFAULT_LAYER_PROPERTIES = null;
const LAYERS_ORDER = new Map([["canvasWrapper", 0], ["textLayer", 1], ["annotationLayer", 2], ["annotationEditorLayer", 3], ["xfaLayer", 3]]);
var _annotationMode = /*#__PURE__*/new WeakMap();
var _canvasWrapper = /*#__PURE__*/new WeakMap();
var _enableAutoLinking = /*#__PURE__*/new WeakMap();
var _hasRestrictedScaling = /*#__PURE__*/new WeakMap();
var pdf_page_view_isEditing = /*#__PURE__*/new WeakMap();
var _layerProperties = /*#__PURE__*/new WeakMap();
var _needsRestrictedScaling = /*#__PURE__*/new WeakMap();
var _originalViewport = /*#__PURE__*/new WeakMap();
var _previousRotation = /*#__PURE__*/new WeakMap();
var _scaleRoundX = /*#__PURE__*/new WeakMap();
var _scaleRoundY = /*#__PURE__*/new WeakMap();
var _textLayerMode = /*#__PURE__*/new WeakMap();
var _userUnit = /*#__PURE__*/new WeakMap();
var _useThumbnailCanvas = /*#__PURE__*/new WeakMap();
var _layers = /*#__PURE__*/new WeakMap();
var _PDFPageView_brand = /*#__PURE__*/new WeakSet();
class PDFPageView extends BasePDFPageView {
constructor(options) {
super(options);
pdf_page_view_classPrivateMethodInitSpec(this, _PDFPageView_brand);
pdf_page_view_classPrivateFieldInitSpec(this, _annotationMode, AnnotationMode.ENABLE_FORMS);
pdf_page_view_classPrivateFieldInitSpec(this, _canvasWrapper, null);
pdf_page_view_classPrivateFieldInitSpec(this, _enableAutoLinking, true);
pdf_page_view_classPrivateFieldInitSpec(this, _hasRestrictedScaling, false);
pdf_page_view_classPrivateFieldInitSpec(this, pdf_page_view_isEditing, false);
pdf_page_view_classPrivateFieldInitSpec(this, _layerProperties, null);
pdf_page_view_classPrivateFieldInitSpec(this, _needsRestrictedScaling, false);
pdf_page_view_classPrivateFieldInitSpec(this, _originalViewport, null);
pdf_page_view_classPrivateFieldInitSpec(this, _previousRotation, null);
pdf_page_view_classPrivateFieldInitSpec(this, _scaleRoundX, 1);
pdf_page_view_classPrivateFieldInitSpec(this, _scaleRoundY, 1);
pdf_page_view_classPrivateFieldInitSpec(this, _textLayerMode, TextLayerMode.ENABLE);
pdf_page_view_classPrivateFieldInitSpec(this, _userUnit, 1);
pdf_page_view_classPrivateFieldInitSpec(this, _useThumbnailCanvas, {
directDrawing: true,
initialOptionalContent: true,
regularAnnotations: true
});
pdf_page_view_classPrivateFieldInitSpec(this, _layers, [null, null, null, null]);
const container = options.container;
const defaultViewport = options.defaultViewport;
this.renderingId = "page" + this.id;
pdf_page_view_classPrivateFieldSet(_layerProperties, this, options.layerProperties || DEFAULT_LAYER_PROPERTIES);
this.pdfPage = null;
this.pageLabel = null;
this.rotation = 0;
this.scale = options.scale || DEFAULT_SCALE;
this.viewport = defaultViewport;
this.pdfPageRotate = defaultViewport.rotation;
this._optionalContentConfigPromise = options.optionalContentConfigPromise || null;
pdf_page_view_classPrivateFieldSet(_textLayerMode, this, options.textLayerMode ?? TextLayerMode.ENABLE);
pdf_page_view_classPrivateFieldSet(_annotationMode, this, options.annotationMode ?? AnnotationMode.ENABLE_FORMS);
this.imageResourcesPath = options.imageResourcesPath || "";
this.enableDetailCanvas = options.enableDetailCanvas ?? true;
this.maxCanvasPixels = options.maxCanvasPixels ?? AppOptions.get("maxCanvasPixels");
this.maxCanvasDim = options.maxCanvasDim || AppOptions.get("maxCanvasDim");
this.capCanvasAreaFactor = options.capCanvasAreaFactor ?? AppOptions.get("capCanvasAreaFactor");
pdf_page_view_classPrivateFieldSet(_enableAutoLinking, this, options.enableAutoLinking !== false);
this.l10n = options.l10n;
this.l10n ||= new genericl10n_GenericL10n();
this._isStandalone = !this.renderingQueue?.hasViewer();
this._container = container;
this._annotationCanvasMap = null;
this.annotationLayer = null;
this.annotationEditorLayer = null;
this.textLayer = null;
this.xfaLayer = null;
this.structTreeLayer = null;
this.drawLayer = null;
this.detailView = null;
const _div = document.createElement("div");
_div.className = "page";
_div.setAttribute("data-page-number", this.id);
_div.setAttribute("role", "region");
_div.setAttribute("data-l10n-id", "pdfjs-page-landmark");
_div.setAttribute("data-l10n-args", JSON.stringify({
page: this.id
}));
this.div = _div;
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _setDimensions).call(this);
container?.append(_div);
if (this._isStandalone) {
container?.style.setProperty("--scale-factor", this.scale * PixelsPerInch.PDF_TO_CSS_UNITS);
if (this.pageColors?.background) {
container?.style.setProperty("--page-bg-color", this.pageColors.background);
}
const {
optionalContentConfigPromise
} = options;
if (optionalContentConfigPromise) {
optionalContentConfigPromise.then(optionalContentConfig => {
if (optionalContentConfigPromise !== this._optionalContentConfigPromise) {
return;
}
pdf_page_view_classPrivateFieldGet(_useThumbnailCanvas, this).initialOptionalContent = optionalContentConfig.hasInitialVisibility;
});
}
if (!options.l10n) {
this.l10n.translate(this.div);
}
}
}
setPdfPage(pdfPage) {
if (this._isStandalone && (this.pageColors?.foreground === "CanvasText" || this.pageColors?.background === "Canvas")) {
this._container?.style.setProperty("--hcm-highlight-filter", pdfPage.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight"));
this._container?.style.setProperty("--hcm-highlight-selected-filter", pdfPage.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "Highlight"));
}
this.pdfPage = pdfPage;
this.pdfPageRotate = pdfPage.rotate;
const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = pdfPage.getViewport({
scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,
rotation: totalRotation
});
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _setDimensions).call(this);
this.reset();
}
destroy() {
this.reset();
this.pdfPage?.cleanup();
}
hasEditableAnnotations() {
return !!this.annotationLayer?.hasEditableAnnotations();
}
get _textHighlighter() {
return shadow(this, "_textHighlighter", new TextHighlighter({
pageIndex: this.id - 1,
eventBus: this.eventBus,
findController: pdf_page_view_classPrivateFieldGet(_layerProperties, this).findController,
customFindController: pdf_page_view_classPrivateFieldGet(_layerProperties, this).customFindController
}));
}
_resetCanvas() {
super._resetCanvas();
pdf_page_view_classPrivateFieldSet(_originalViewport, this, null);
}
reset() {
let {
keepAnnotationLayer = false,
keepAnnotationEditorLayer = false,
keepXfaLayer = false,
keepTextLayer = false,
keepCanvasWrapper = false,
preserveDetailViewState = false
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.cancelRendering({
keepAnnotationLayer,
keepAnnotationEditorLayer,
keepXfaLayer,
keepTextLayer
});
this.renderingState = RenderingStates.INITIAL;
const div = this.div;
const childNodes = div.childNodes,
annotationLayerNode = keepAnnotationLayer && this.annotationLayer?.div || null,
annotationEditorLayerNode = keepAnnotationEditorLayer && this.annotationEditorLayer?.div || null,
xfaLayerNode = keepXfaLayer && this.xfaLayer?.div || null,
textLayerNode = keepTextLayer && this.textLayer?.div || null,
canvasWrapperNode = keepCanvasWrapper && pdf_page_view_classPrivateFieldGet(_canvasWrapper, this) || null;
for (let i = childNodes.length - 1; i >= 0; i--) {
const node = childNodes[i];
switch (node) {
case annotationLayerNode:
case annotationEditorLayerNode:
case xfaLayerNode:
case textLayerNode:
case canvasWrapperNode:
continue;
}
node.remove();
const layerIndex = pdf_page_view_classPrivateFieldGet(_layers, this).indexOf(node);
if (layerIndex >= 0) {
pdf_page_view_classPrivateFieldGet(_layers, this)[layerIndex] = null;
}
}
div.removeAttribute("data-loaded");
if (annotationLayerNode) {
this.annotationLayer.hide();
}
if (annotationEditorLayerNode) {
this.annotationEditorLayer.hide();
}
if (xfaLayerNode) {
this.xfaLayer.hide();
}
if (textLayerNode) {
this.textLayer.hide();
}
this.structTreeLayer?.hide();
if (!keepCanvasWrapper && pdf_page_view_classPrivateFieldGet(_canvasWrapper, this)) {
pdf_page_view_classPrivateFieldSet(_canvasWrapper, this, null);
this._resetCanvas();
}
if (!preserveDetailViewState) {
this.detailView?.reset({
keepCanvas: keepCanvasWrapper
});
if (!keepCanvasWrapper) {
this.detailView = null;
}
}
}
toggleEditingMode(isEditing) {
pdf_page_view_classPrivateFieldSet(pdf_page_view_isEditing, this, isEditing);
if (!this.hasEditableAnnotations()) {
return;
}
this.reset({
keepAnnotationLayer: true,
keepAnnotationEditorLayer: true,
keepXfaLayer: true,
keepTextLayer: true,
keepCanvasWrapper: true
});
}
updateVisibleArea(visibleArea) {
if (this.enableDetailCanvas) {
if (pdf_page_view_classPrivateFieldGet(_needsRestrictedScaling, this) && this.maxCanvasPixels > 0 && visibleArea) {
this.detailView ??= new PDFPageDetailView({
pageView: this
});
this.detailView.update({
visibleArea
});
} else if (this.detailView) {
this.detailView.reset();
this.detailView = null;
}
}
}
update(_ref) {
let {
scale = 0,
rotation = null,
optionalContentConfigPromise = null,
drawingDelay = -1
} = _ref;
this.scale = scale || this.scale;
if (typeof rotation === "number") {
this.rotation = rotation;
}
if (optionalContentConfigPromise instanceof Promise) {
this._optionalContentConfigPromise = optionalContentConfigPromise;
optionalContentConfigPromise.then(optionalContentConfig => {
if (optionalContentConfigPromise !== this._optionalContentConfigPromise) {
return;
}
pdf_page_view_classPrivateFieldGet(_useThumbnailCanvas, this).initialOptionalContent = optionalContentConfig.hasInitialVisibility;
});
}
pdf_page_view_classPrivateFieldGet(_useThumbnailCanvas, this).directDrawing = true;
const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = this.viewport.clone({
scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,
rotation: totalRotation
});
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _setDimensions).call(this);
if (this._isStandalone) {
this._container?.style.setProperty("--scale-factor", this.viewport.scale);
}
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _computeScale).call(this);
if (this.canvas) {
const onlyCssZoom = pdf_page_view_classPrivateFieldGet(_hasRestrictedScaling, this) && pdf_page_view_classPrivateFieldGet(_needsRestrictedScaling, this);
const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;
if (postponeDrawing || onlyCssZoom) {
if (postponeDrawing && !onlyCssZoom && this.renderingState !== RenderingStates.FINISHED) {
this.cancelRendering({
keepAnnotationLayer: true,
keepAnnotationEditorLayer: true,
keepXfaLayer: true,
keepTextLayer: true,
cancelExtraDelay: drawingDelay
});
this.renderingState = RenderingStates.FINISHED;
pdf_page_view_classPrivateFieldGet(_useThumbnailCanvas, this).directDrawing = false;
}
this.cssTransform({
redrawAnnotationLayer: true,
redrawAnnotationEditorLayer: true,
redrawXfaLayer: true,
redrawTextLayer: !postponeDrawing,
hideTextLayer: postponeDrawing
});
if (!postponeDrawing) {
this.detailView?.update({
underlyingViewUpdated: true
});
this.dispatchPageRendered(true, false);
}
return;
}
}
this.cssTransform({});
this.reset({
keepAnnotationLayer: true,
keepAnnotationEditorLayer: true,
keepXfaLayer: true,
keepTextLayer: true,
keepCanvasWrapper: true,
preserveDetailViewState: true
});
this.detailView?.update({
underlyingViewUpdated: true
});
}
cancelRendering() {
let {
keepAnnotationLayer = false,
keepAnnotationEditorLayer = false,
keepXfaLayer = false,
keepTextLayer = false,
cancelExtraDelay = 0
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
super.cancelRendering({
cancelExtraDelay
});
if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) {
this.textLayer.cancel();
this.textLayer = null;
}
if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) {
this.annotationLayer.cancel();
this.annotationLayer = null;
this._annotationCanvasMap = null;
}
if (this.structTreeLayer && !this.textLayer) {
this.structTreeLayer = null;
}
if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) {
if (this.drawLayer) {
this.drawLayer.cancel();
this.drawLayer = null;
}
this.annotationEditorLayer.cancel();
this.annotationEditorLayer = null;
}
if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {
this.xfaLayer.cancel();
this.xfaLayer = null;
this._textHighlighter?.disable();
}
}
cssTransform(_ref2) {
let {
redrawAnnotationLayer = false,
redrawAnnotationEditorLayer = false,
redrawXfaLayer = false,
redrawTextLayer = false,
hideTextLayer = false
} = _ref2;
const {
canvas
} = this;
if (!canvas) {
return;
}
const originalViewport = pdf_page_view_classPrivateFieldGet(_originalViewport, this);
if (this.viewport !== originalViewport) {
const relativeRotation = (360 + this.viewport.rotation - originalViewport.rotation) % 360;
if (relativeRotation === 90 || relativeRotation === 270) {
const {
width,
height
} = this.viewport;
const scaleX = height / width;
const scaleY = width / height;
canvas.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX},${scaleY})`;
} else {
canvas.style.transform = relativeRotation === 0 ? "" : `rotate(${relativeRotation}deg)`;
}
}
if (redrawAnnotationLayer && this.annotationLayer) {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderAnnotationLayer).call(this);
}
if (redrawAnnotationEditorLayer && this.annotationEditorLayer) {
if (this.drawLayer) {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderDrawLayer).call(this);
}
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderAnnotationEditorLayer).call(this);
}
if (redrawXfaLayer && this.xfaLayer) {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderXfaLayer).call(this);
}
if (this.textLayer) {
if (hideTextLayer) {
this.textLayer.hide();
this.structTreeLayer?.hide();
} else if (redrawTextLayer) {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderTextLayer).call(this);
}
}
}
get width() {
return this.viewport.width;
}
get height() {
return this.viewport.height;
}
getPagePoint(x, y) {
return this.viewport.convertToPdfPoint(x, y);
}
_ensureCanvasWrapper() {
let canvasWrapper = pdf_page_view_classPrivateFieldGet(_canvasWrapper, this);
if (!canvasWrapper) {
canvasWrapper = pdf_page_view_classPrivateFieldSet(_canvasWrapper, this, document.createElement("div"));
canvasWrapper.classList.add("canvasWrapper");
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _addLayer).call(this, canvasWrapper, "canvasWrapper");
}
return canvasWrapper;
}
_getRenderingContext(canvasContext, transform) {
return {
canvasContext,
transform,
viewport: this.viewport,
annotationMode: pdf_page_view_classPrivateFieldGet(_annotationMode, this),
optionalContentConfigPromise: this._optionalContentConfigPromise,
annotationCanvasMap: this._annotationCanvasMap,
pageColors: this.pageColors,
isEditing: pdf_page_view_classPrivateFieldGet(pdf_page_view_isEditing, this)
};
}
async draw() {
if (this.renderingState !== RenderingStates.INITIAL) {
NgxConsole.error("Must be in new state before drawing");
this.reset();
}
const {
div,
l10n,
pdfPage,
viewport
} = this;
if (!pdfPage) {
this.renderingState = RenderingStates.FINISHED;
throw new Error("pdfPage is not loaded");
}
this.renderingState = RenderingStates.RUNNING;
const canvasWrapper = this._ensureCanvasWrapper();
if (!this.textLayer && pdf_page_view_classPrivateFieldGet(_textLayerMode, this) !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) {
this._accessibilityManager ||= new TextAccessibilityManager();
this.textLayer = new TextLayerBuilder({
pdfPage,
highlighter: this._textHighlighter,
accessibilityManager: this._accessibilityManager,
enablePermissions: pdf_page_view_classPrivateFieldGet(_textLayerMode, this) === TextLayerMode.ENABLE_PERMISSIONS,
onAppend: textLayerDiv => {
this.l10n.pause();
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _addLayer).call(this, textLayerDiv, "textLayer");
this.l10n.resume();
}
});
}
if (!this.annotationLayer && pdf_page_view_classPrivateFieldGet(_annotationMode, this) !== AnnotationMode.DISABLE) {
const {
annotationStorage,
annotationEditorUIManager,
downloadManager,
enableScripting,
fieldObjectsPromise,
hasJSActionsPromise,
linkService
} = pdf_page_view_classPrivateFieldGet(_layerProperties, this);
this._annotationCanvasMap ||= new Map();
this.annotationLayer = new AnnotationLayerBuilder({
pdfPage,
annotationStorage,
imageResourcesPath: this.imageResourcesPath,
renderForms: pdf_page_view_classPrivateFieldGet(_annotationMode, this) === AnnotationMode.ENABLE_FORMS,
linkService,
downloadManager,
enableScripting,
hasJSActionsPromise,
fieldObjectsPromise,
annotationCanvasMap: this._annotationCanvasMap,
accessibilityManager: this._accessibilityManager,
annotationEditorUIManager,
onAppend: annotationLayerDiv => {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _addLayer).call(this, annotationLayerDiv, "annotationLayer");
}
});
}
const {
width,
height
} = viewport;
pdf_page_view_classPrivateFieldSet(_originalViewport, this, viewport);
const {
canvas,
prevCanvas,
ctx
} = this._createCanvas(newCanvas => {
canvasWrapper.prepend(newCanvas);
});
canvas.setAttribute("role", "presentation");
if (!this.outputScale) {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _computeScale).call(this);
}
const {
outputScale
} = this;
pdf_page_view_classPrivateFieldSet(_hasRestrictedScaling, this, pdf_page_view_classPrivateFieldGet(_needsRestrictedScaling, this));
const sfx = approximateFraction(outputScale.sx);
const sfy = approximateFraction(outputScale.sy);
let canvasWidth = floorToDivide(width * outputScale.sx, sfx[0]);
let canvasHeight = floorToDivide(height * outputScale.sy, sfy[0]);
const divisor = await MaxCanvasSize.reduceToMaxCanvasSize(canvasWidth, canvasHeight);
if (divisor > 1) {
canvasWidth /= divisor;
canvasWidth *= 0.95;
canvasHeight /= divisor;
canvasHeight *= 0.95;
const reduction = Math.round((divisor / 0.95 - 1) * 100);
warn(`Page ${this.id}: Reduced the maximum resolution by ${reduction}% because the browser can't render larger canvases.`);
}
canvas.width = canvasWidth;
canvas.height = canvasHeight;
const pageWidth = floorToDivide(calcRound(width), sfx[1]);
const pageHeight = floorToDivide(calcRound(height), sfy[1]);
outputScale.sx = canvasWidth / pageWidth;
outputScale.sy = canvasHeight / pageHeight;
if (pdf_page_view_classPrivateFieldGet(_scaleRoundX, this) !== sfx[1]) {
div.style.setProperty("--scale-round-x", `${sfx[1]}px`);
pdf_page_view_classPrivateFieldSet(_scaleRoundX, this, sfx[1]);
}
if (pdf_page_view_classPrivateFieldGet(_scaleRoundY, this) !== sfy[1]) {
div.style.setProperty("--scale-round-y", `${sfy[1]}px`);
pdf_page_view_classPrivateFieldSet(_scaleRoundY, this, sfy[1]);
}
const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;
const resultPromise = this._drawCanvas(this._getRenderingContext(ctx, transform), () => {
prevCanvas?.remove();
this._resetCanvas();
}, renderTask => {
pdf_page_view_classPrivateFieldGet(_useThumbnailCanvas, this).regularAnnotations = !renderTask.separateAnnots;
this.dispatchPageRendered(false, false);
}).then(async () => {
this.structTreeLayer ||= new StructTreeLayerBuilder(pdfPage, viewport.rawDims);
const textLayerPromise = pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderTextLayer).call(this);
if (this.annotationLayer) {
await pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderAnnotationLayer).call(this);
if (pdf_page_view_classPrivateFieldGet(_enableAutoLinking, this) && this.annotationLayer && this.textLayer) {
await pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _injectLinkAnnotations).call(this, textLayerPromise);
}
}
const {
annotationEditorUIManager
} = pdf_page_view_classPrivateFieldGet(_layerProperties, this);
if (!annotationEditorUIManager) {
return;
}
this.drawLayer ||= new DrawLayerBuilder({
pageIndex: this.id
});
await pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderDrawLayer).call(this);
this.drawLayer.setParent(canvasWrapper);
this.annotationEditorLayer ||= new AnnotationEditorLayerBuilder({
uiManager: annotationEditorUIManager,
pdfPage,
l10n,
structTreeLayer: this.structTreeLayer,
accessibilityManager: this._accessibilityManager,
annotationLayer: this.annotationLayer?.annotationLayer,
textLayer: this.textLayer,
drawLayer: this.drawLayer.getDrawLayer(),
onAppend: annotationEditorLayerDiv => {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _addLayer).call(this, annotationEditorLayerDiv, "annotationEditorLayer");
},
eventBus: this.eventBus
});
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderAnnotationEditorLayer).call(this);
});
if (pdfPage.isPureXfa) {
if (!this.xfaLayer) {
const {
annotationStorage,
linkService
} = pdf_page_view_classPrivateFieldGet(_layerProperties, this);
this.xfaLayer = new XfaLayerBuilder({
pdfPage,
annotationStorage,
linkService
});
}
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderXfaLayer).call(this);
}
div.setAttribute("data-loaded", true);
this.dispatchPageRender();
return resultPromise;
}
setPageLabel(label) {
this.pageLabel = typeof label === "string" ? label : null;
this.div.setAttribute("data-l10n-args", JSON.stringify({
page: this.pageLabel ?? this.id
}));
if (this.pageLabel !== null) {
this.div.setAttribute("data-page-label", this.pageLabel);
} else {
this.div.removeAttribute("data-page-label");
}
}
get thumbnailCanvas() {
const {
directDrawing,
initialOptionalContent,
regularAnnotations
} = pdf_page_view_classPrivateFieldGet(_useThumbnailCanvas, this);
return directDrawing && initialOptionalContent && regularAnnotations ? this.canvas : null;
}
}
function _addLayer(div, name) {
const pos = LAYERS_ORDER.get(name);
const oldDiv = pdf_page_view_classPrivateFieldGet(_layers, this)[pos];
pdf_page_view_classPrivateFieldGet(_layers, this)[pos] = div;
if (oldDiv) {
oldDiv.replaceWith(div);
return;
}
for (let i = pos - 1; i >= 0; i--) {
const layer = pdf_page_view_classPrivateFieldGet(_layers, this)[i];
if (layer) {
layer.after(div);
return;
}
}
this.div.prepend(div);
}
function _setDimensions() {
const {
div,
viewport
} = this;
if (viewport.userUnit !== pdf_page_view_classPrivateFieldGet(_userUnit, this)) {
if (viewport.userUnit !== 1) {
div.style.setProperty("--user-unit", viewport.userUnit);
} else {
div.style.removeProperty("--user-unit");
}
pdf_page_view_classPrivateFieldSet(_userUnit, this, viewport.userUnit);
}
if (this.pdfPage) {
if (pdf_page_view_classPrivateFieldGet(_previousRotation, this) === viewport.rotation) {
return;
}
pdf_page_view_classPrivateFieldSet(_previousRotation, this, viewport.rotation);
}
setLayerDimensions(div, viewport, true, false);
}
function _dispatchLayerRendered(name, error, layer) {
this.eventBus.dispatch(name, {
source: this,
pageNumber: this.id,
error,
layer
});
}
async function _renderAnnotationLayer() {
let error = null;
try {
await this.annotationLayer.render({
viewport: this.viewport,
intent: "display",
structTreeLayer: this.structTreeLayer
});
} catch (ex) {
console.error("#renderAnnotationLayer:", ex);
error = ex;
} finally {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _dispatchLayerRendered).call(this, "annotationlayerrendered", error, this.annotationLayer);
}
}
async function _renderAnnotationEditorLayer() {
let error = null;
try {
await this.annotationEditorLayer.render({
viewport: this.viewport,
intent: "display"
});
} catch (ex) {
console.error("#renderAnnotationEditorLayer:", ex);
error = ex;
} finally {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _dispatchLayerRendered).call(this, "annotationeditorlayerrendered", error, this.annotationEditorLayer);
}
}
async function _renderDrawLayer() {
try {
await this.drawLayer.render({
intent: "display"
});
} catch (ex) {
console.error("#renderDrawLayer:", ex);
}
}
async function _renderXfaLayer() {
let error = null;
try {
const result = await this.xfaLayer.render({
viewport: this.viewport,
intent: "display"
});
if (result?.textDivs && this._textHighlighter) {
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _buildXfaTextContentItems).call(this, result.textDivs);
}
} catch (ex) {
console.error("#renderXfaLayer:", ex);
error = ex;
} finally {
if (this.xfaLayer?.div) {
this.l10n.pause();
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _addLayer).call(this, this.xfaLayer.div, "xfaLayer");
this.l10n.resume();
}
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _dispatchLayerRendered).call(this, "xfalayerrendered", error, this.xfaLayer);
}
}
async function _renderTextLayer() {
if (!this.textLayer) {
return;
}
let error = null;
try {
await this.textLayer.render({
viewport: this.viewport
});
} catch (ex) {
if (ex instanceof AbortException) {
return;
}
console.error("#renderTextLayer:", ex);
error = ex;
}
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _dispatchLayerRendered).call(this, "textlayerrendered", error, this.textLayer);
pdf_page_view_assertClassBrand(_PDFPageView_brand, this, _renderStructTreeLayer).call(this);
}
async function _renderStructTreeLayer() {
if (!this.textLayer) {
return;
}
const treeDom = await this.structTreeLayer?.render();
if (treeDom) {
this.l10n.pause();
this.structTreeLayer?.addElementsToTextLayer();
if (this.canvas && treeDom.parentNode !== this.canvas) {
this.canvas.append(treeDom);
}
this.l10n.resume();
}
this.structTreeLayer?.show();
}
async function _buildXfaTextContentItems(textDivs) {
const text = await this.pdfPage.getTextContent();
const items = [];
for (const item of text.items) {
items.push(item.str);
}
this._textHighlighter.setTextMapping(textDivs, items);
this._textHighlighter.enable();
}
async function _injectLinkAnnotations(textLayerPromise) {
let error = null;
try {
await textLayerPromise;
if (!this.annotationLayer) {
return;
}
await this.annotationLayer.injectLinkAnnotations({
inferredLinks: Autolinker.processLinks(this),
viewport: this.viewport,
structTreeLayer: this.structTreeLayer
});
} catch (ex) {
console.error("#injectLinkAnnotations:", ex);
error = ex;
}
}
function _computeScale() {
const {
width,
height
} = this.viewport;
const outputScale = this.outputScale = new OutputScale();
if (this.maxCanvasPixels === 0) {
const invScale = 1 / this.scale;
outputScale.sx *= invScale;
outputScale.sy *= invScale;
pdf_page_view_classPrivateFieldSet(_needsRestrictedScaling, this, true);
} else {
pdf_page_view_classPrivateFieldSet(_needsRestrictedScaling, this, outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim, this.capCanvasAreaFactor));
}
}
;// ./web/pdf_viewer.js
function pdf_viewer_classPrivateGetter(s, r, a) { return a(pdf_viewer_assertClassBrand(s, r)); }
function pdf_viewer_classPrivateMethodInitSpec(e, a) { pdf_viewer_checkPrivateRedeclaration(e, a), a.add(e); }
function pdf_viewer_classPrivateFieldInitSpec(e, t, a) { pdf_viewer_checkPrivateRedeclaration(e, t), t.set(e, a); }
function pdf_viewer_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function pdf_viewer_classPrivateFieldGet(s, a) { return s.get(pdf_viewer_assertClassBrand(s, a)); }
function pdf_viewer_classPrivateFieldSet(s, a, r) { return s.set(pdf_viewer_assertClassBrand(s, a), r), r; }
function pdf_viewer_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DEFAULT_CACHE_SIZE = 10;
const PagesCountLimit = {
FORCE_SCROLL_MODE_PAGE: 10000,
FORCE_LAZY_PAGE_INIT: 5000,
PAUSE_EAGER_PAGE_INIT: 250
};
function isValidAnnotationEditorMode(mode) {
return Object.values(AnnotationEditorType).includes(mode) && mode !== AnnotationEditorType.DISABLE;
}
var _buf = /*#__PURE__*/new WeakMap();
var _size = /*#__PURE__*/new WeakMap();
var _PDFPageViewBuffer_brand = /*#__PURE__*/new WeakSet();
class PDFPageViewBuffer {
constructor(size) {
pdf_viewer_classPrivateMethodInitSpec(this, _PDFPageViewBuffer_brand);
pdf_viewer_classPrivateFieldInitSpec(this, _buf, new Set());
pdf_viewer_classPrivateFieldInitSpec(this, _size, 0);
pdf_viewer_classPrivateFieldSet(_size, this, size);
}
push(view) {
const buf = pdf_viewer_classPrivateFieldGet(_buf, this);
if (buf.has(view)) {
buf.delete(view);
}
buf.add(view);
if (buf.size > pdf_viewer_classPrivateFieldGet(_size, this)) {
pdf_viewer_assertClassBrand(_PDFPageViewBuffer_brand, this, _destroyFirstView).call(this);
}
}
resize(newSize) {
let idsToKeep = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
pdf_viewer_classPrivateFieldSet(_size, this, newSize);
const buf = pdf_viewer_classPrivateFieldGet(_buf, this);
if (idsToKeep) {
const ii = buf.size;
let i = 1;
for (const view of buf) {
if (idsToKeep.has(view.id)) {
buf.delete(view);
buf.add(view);
}
if (++i > ii) {
break;
}
}
}
while (buf.size > pdf_viewer_classPrivateFieldGet(_size, this)) {
pdf_viewer_assertClassBrand(_PDFPageViewBuffer_brand, this, _destroyFirstView).call(this);
}
}
has(view) {
return pdf_viewer_classPrivateFieldGet(_buf, this).has(view);
}
[Symbol.iterator]() {
return pdf_viewer_classPrivateFieldGet(_buf, this).keys();
}
}
function _destroyFirstView() {
const firstView = pdf_viewer_classPrivateFieldGet(_buf, this).keys().next().value;
firstView?.destroy();
pdf_viewer_classPrivateFieldGet(_buf, this).delete(firstView);
}
var _buffer = /*#__PURE__*/new WeakMap();
var pdf_viewer_altTextManager = /*#__PURE__*/new WeakMap();
var _annotationEditorHighlightColors = /*#__PURE__*/new WeakMap();
var _annotationEditorMode = /*#__PURE__*/new WeakMap();
var _annotationEditorUIManager = /*#__PURE__*/new WeakMap();
var pdf_viewer_annotationMode = /*#__PURE__*/new WeakMap();
var _containerTopLeft = /*#__PURE__*/new WeakMap();
var _editorUndoBar = /*#__PURE__*/new WeakMap();
var pdf_viewer_enableHWA = /*#__PURE__*/new WeakMap();
var pdf_viewer_enableHighlightFloatingButton = /*#__PURE__*/new WeakMap();
var pdf_viewer_enablePermissions = /*#__PURE__*/new WeakMap();
var pdf_viewer_enableUpdatedAddImage = /*#__PURE__*/new WeakMap();
var pdf_viewer_enableNewAltTextWhenAddingImage = /*#__PURE__*/new WeakMap();
var pdf_viewer_enableAutoLinking = /*#__PURE__*/new WeakMap();
var pdf_viewer_eventAbortController = /*#__PURE__*/new WeakMap();
var pdf_viewer_minDurationToUpdateCanvas = /*#__PURE__*/new WeakMap();
var pdf_viewer_mlManager = /*#__PURE__*/new WeakMap();
var _scrollTimeoutId = /*#__PURE__*/new WeakMap();
var _switchAnnotationEditorModeAC = /*#__PURE__*/new WeakMap();
var _switchAnnotationEditorModeTimeoutId = /*#__PURE__*/new WeakMap();
var _getAllTextInProgress = /*#__PURE__*/new WeakMap();
var _hiddenCopyElement = /*#__PURE__*/new WeakMap();
var _interruptCopyCondition = /*#__PURE__*/new WeakMap();
var _previousContainerHeight = /*#__PURE__*/new WeakMap();
var pdf_viewer_resizeObserver = /*#__PURE__*/new WeakMap();
var _scrollModePageState = /*#__PURE__*/new WeakMap();
var _scaleTimeoutId = /*#__PURE__*/new WeakMap();
var pdf_viewer_signatureManager = /*#__PURE__*/new WeakMap();
var _supportsPinchToZoom = /*#__PURE__*/new WeakMap();
var pdf_viewer_textLayerMode = /*#__PURE__*/new WeakMap();
var _outerScrollContainer = /*#__PURE__*/new WeakMap();
var _pageViewMode = /*#__PURE__*/new WeakMap();
var _maxZoom = /*#__PURE__*/new WeakMap();
var _minZoom = /*#__PURE__*/new WeakMap();
var _PDFViewer_brand = /*#__PURE__*/new WeakSet();
class PDFViewer {
constructor(_options) {
pdf_viewer_classPrivateMethodInitSpec(this, _PDFViewer_brand);
pdf_viewer_classPrivateFieldInitSpec(this, _buffer, null);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_altTextManager, null);
pdf_viewer_classPrivateFieldInitSpec(this, _annotationEditorHighlightColors, null);
pdf_viewer_classPrivateFieldInitSpec(this, _annotationEditorMode, AnnotationEditorType.NONE);
pdf_viewer_classPrivateFieldInitSpec(this, _annotationEditorUIManager, null);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_annotationMode, AnnotationMode.ENABLE_FORMS);
pdf_viewer_classPrivateFieldInitSpec(this, _containerTopLeft, null);
pdf_viewer_classPrivateFieldInitSpec(this, _editorUndoBar, null);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_enableHWA, false);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_enableHighlightFloatingButton, false);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_enablePermissions, false);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_enableUpdatedAddImage, false);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_enableNewAltTextWhenAddingImage, false);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_enableAutoLinking, true);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_eventAbortController, null);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_minDurationToUpdateCanvas, 0);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_mlManager, null);
pdf_viewer_classPrivateFieldInitSpec(this, _scrollTimeoutId, null);
pdf_viewer_classPrivateFieldInitSpec(this, _switchAnnotationEditorModeAC, null);
pdf_viewer_classPrivateFieldInitSpec(this, _switchAnnotationEditorModeTimeoutId, null);
pdf_viewer_classPrivateFieldInitSpec(this, _getAllTextInProgress, false);
pdf_viewer_classPrivateFieldInitSpec(this, _hiddenCopyElement, null);
pdf_viewer_classPrivateFieldInitSpec(this, _interruptCopyCondition, false);
pdf_viewer_classPrivateFieldInitSpec(this, _previousContainerHeight, 0);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_resizeObserver, new ResizeObserver(pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_resizeObserverCallback).bind(this)));
pdf_viewer_classPrivateFieldInitSpec(this, _scrollModePageState, null);
pdf_viewer_classPrivateFieldInitSpec(this, _scaleTimeoutId, null);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_signatureManager, null);
pdf_viewer_classPrivateFieldInitSpec(this, _supportsPinchToZoom, true);
pdf_viewer_classPrivateFieldInitSpec(this, pdf_viewer_textLayerMode, TextLayerMode.ENABLE);
pdf_viewer_classPrivateFieldInitSpec(this, _outerScrollContainer, undefined);
pdf_viewer_classPrivateFieldInitSpec(this, _pageViewMode, "multiple");
pdf_viewer_classPrivateFieldInitSpec(this, _maxZoom, MAX_SCALE);
pdf_viewer_classPrivateFieldInitSpec(this, _minZoom, MIN_SCALE);
const viewerVersion = "5.3.754";
if (version !== viewerVersion) {
throw new Error(`The API version "${version}" does not match the Viewer version "${viewerVersion}".`);
}
this.container = _options.container;
this.viewer = _options.viewer || _options.container.firstElementChild;
this.eventBus = _options.eventBus;
this.pageViewMode = _options.pageViewMode || "multiple";
this.defaultCacheSize = _options.defaultCacheSize;
pdf_viewer_classPrivateFieldSet(_maxZoom, this, _options.maxZoom);
pdf_viewer_classPrivateFieldSet(_minZoom, this, _options.minZoom);
if (this.container?.tagName !== "DIV" || this.viewer?.tagName !== "DIV") {
throw new Error("Invalid `container` and/or `viewer` option.");
}
if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute") {
throw new Error("The `container` must be absolutely positioned.");
}
pdf_viewer_classPrivateFieldGet(pdf_viewer_resizeObserver, this).observe(this.container);
this.linkService = _options.linkService || new SimpleLinkService();
this.downloadManager = _options.downloadManager || null;
this.findController = _options.findController || null;
this.customFindController = _options.customFindController || null;
pdf_viewer_classPrivateFieldSet(pdf_viewer_altTextManager, this, _options.altTextManager || null);
pdf_viewer_classPrivateFieldSet(pdf_viewer_signatureManager, this, _options.signatureManager || null);
pdf_viewer_classPrivateFieldSet(_editorUndoBar, this, _options.editorUndoBar || null);
if (this.findController) {
this.findController.onIsPageVisible = pageNumber => this._getVisiblePages().ids.has(pageNumber);
}
this._scriptingManager = _options.scriptingManager || null;
pdf_viewer_classPrivateFieldSet(pdf_viewer_textLayerMode, this, _options.textLayerMode ?? TextLayerMode.ENABLE);
pdf_viewer_classPrivateFieldSet(pdf_viewer_annotationMode, this, _options.annotationMode ?? AnnotationMode.ENABLE_FORMS);
pdf_viewer_classPrivateFieldSet(_annotationEditorMode, this, _options.annotationEditorMode ?? AnnotationEditorType.NONE);
pdf_viewer_classPrivateFieldSet(_annotationEditorHighlightColors, this, _options.annotationEditorHighlightColors || null);
pdf_viewer_classPrivateFieldSet(pdf_viewer_enableHighlightFloatingButton, this, _options.enableHighlightFloatingButton === true);
pdf_viewer_classPrivateFieldSet(pdf_viewer_enableUpdatedAddImage, this, _options.enableUpdatedAddImage === true);
pdf_viewer_classPrivateFieldSet(pdf_viewer_enableNewAltTextWhenAddingImage, this, _options.enableNewAltTextWhenAddingImage === true);
this.imageResourcesPath = _options.imageResourcesPath || "";
this.enablePrintAutoRotate = _options.enablePrintAutoRotate || false;
this.removePageBorders = _options.removePageBorders || false;
this.maxCanvasPixels = _options.maxCanvasPixels;
this.maxCanvasDim = _options.maxCanvasDim;
this.capCanvasAreaFactor = _options.capCanvasAreaFactor;
this.enableDetailCanvas = _options.enableDetailCanvas ?? true;
this.l10n = _options.l10n;
this.l10n ||= new genericl10n_GenericL10n();
pdf_viewer_classPrivateFieldSet(pdf_viewer_enablePermissions, this, _options.enablePermissions || false);
this.pageColors = _options.pageColors || null;
pdf_viewer_classPrivateFieldSet(pdf_viewer_mlManager, this, _options.mlManager || null);
pdf_viewer_classPrivateFieldSet(pdf_viewer_enableHWA, this, _options.enableHWA || false);
pdf_viewer_classPrivateFieldSet(_supportsPinchToZoom, this, _options.supportsPinchToZoom !== false);
pdf_viewer_classPrivateFieldSet(pdf_viewer_enableAutoLinking, this, _options.enableAutoLinking !== false);
pdf_viewer_classPrivateFieldSet(pdf_viewer_minDurationToUpdateCanvas, this, _options.minDurationToUpdateCanvas ?? 500);
this.defaultRenderingQueue = !_options.renderingQueue;
if (this.defaultRenderingQueue) {
this.renderingQueue = new PDFRenderingQueue();
this.renderingQueue.setViewer(this);
} else {
this.renderingQueue = _options.renderingQueue;
}
const {
abortSignal
} = _options;
abortSignal?.addEventListener("abort", () => {
pdf_viewer_classPrivateFieldGet(pdf_viewer_resizeObserver, this).disconnect();
pdf_viewer_classPrivateFieldSet(pdf_viewer_resizeObserver, this, null);
}, {
once: true
});
this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this), abortSignal);
this.presentationModeState = PresentationModeState.UNKNOWN;
this._resetView();
if (this.removePageBorders) {
this.viewer.classList.add("removePageBorders");
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _updateContainerHeightCss).call(this);
this.eventBus._on("thumbnailrendered", _ref => {
let {
pageNumber,
pdfPage
} = _ref;
const pageView = this._pages[pageNumber - 1];
if (!pdf_viewer_classPrivateFieldGet(_buffer, this).has(pageView)) {
pdfPage?.cleanup();
}
});
if (!_options.l10n) {
this.l10n.translate(this.container);
}
this.cspPolicyService = _options.cspPolicyService;
}
get maxZoom() {
return pdf_viewer_classPrivateFieldGet(_maxZoom, this);
}
set maxZoom(value) {
pdf_viewer_classPrivateFieldSet(_maxZoom, this, value);
}
get minZoom() {
return pdf_viewer_classPrivateFieldGet(_minZoom, this);
}
set minZoom(value) {
pdf_viewer_classPrivateFieldSet(_minZoom, this, value);
}
setTextLayerMode(mode) {
pdf_viewer_classPrivateFieldSet(pdf_viewer_textLayerMode, this, mode);
}
get pageViewMode() {
return pdf_viewer_classPrivateFieldGet(_pageViewMode, this);
}
set pageViewMode(viewMode) {
if (pdf_viewer_classPrivateFieldGet(_pageViewMode, this) !== viewMode) {
pdf_viewer_classPrivateFieldSet(_pageViewMode, this, viewMode);
if (!pdf_viewer_classPrivateFieldGet(_outerScrollContainer, this) && viewMode === "infinite-scroll") {
pdf_viewer_classPrivateFieldSet(_outerScrollContainer, this, pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _findParentWithScrollbar).call(this, this.container.offsetParent));
if (pdf_viewer_classPrivateFieldGet(_outerScrollContainer, this)) {
watchScroll(pdf_viewer_classPrivateFieldGet(_outerScrollContainer, this), this._scrollUpdate.bind(this));
}
}
this.eventBus.dispatch("pageviewmodechanged", {
source: this,
pageViewMode: viewMode
});
}
}
get pagesCount() {
return this._pages.length;
}
getPageView(index) {
return this._pages[index];
}
swapPages(oldIndex, newIndex) {
const oldIndexPage = this._pages[oldIndex].pdfPage;
const newIndexPage = this._pages[newIndex].pdfPage;
this._pages[oldIndex].setPdfPage(newIndexPage);
this._pages[newIndex].setPdfPage(oldIndexPage);
this.refresh();
}
getCachedPageViews() {
return new Set(pdf_viewer_classPrivateFieldGet(_buffer, this));
}
get pageViewsReady() {
return this._pages.every(pageView => pageView?.pdfPage);
}
get renderForms() {
return pdf_viewer_classPrivateFieldGet(pdf_viewer_annotationMode, this) === AnnotationMode.ENABLE_FORMS;
}
get enableScripting() {
return !!this._scriptingManager;
}
get currentPageNumber() {
return this._currentPageNumber;
}
set currentPageNumber(val) {
if (!Number.isInteger(val)) {
throw new Error("Invalid page number.");
}
if (!this.pdfDocument) {
return;
}
const flip = Math.abs(this._currentPageNumber - val) <= 2;
if (!this._setCurrentPageNumber(val, true)) {
NgxConsole.error(`currentPageNumber: "${val}" is not a valid page.`);
}
if (this.pageFlip) {
if (flip) {
this.pageFlip.flip(val - 1);
} else {
this.pageFlip.turnToPage(val - 1);
}
this.ensureAdjacentPagesAreLoaded();
}
}
hidePagesDependingOnpageViewMode() {
if (this.pageViewMode === "book") {
if (!this.pageFlip) {
setTimeout(() => {
if (!this.pageFlip) {
const page1 = this._pages[0].div;
const htmlParentElement = page1.parentElement;
const viewer = htmlParentElement.parentElement;
viewer.style.width = 2 * page1.clientWidth + "px";
viewer.style.overflow = "hidden";
viewer.style.marginLeft = "auto";
viewer.style.marginRight = "auto";
this.pageFlip = new PageFlip(htmlParentElement, {
width: page1.clientWidth,
height: page1.clientHeight,
showCover: true,
size: "fixed"
}, this.cspPolicyService);
this.pageFlip.loadFromHTML(this.container.querySelectorAll(".page"));
this.pageFlip.on("flip", e => {
if (this._currentPageNumber !== e.data + 1) {
this._setCurrentPageNumber(e.data + 1, false);
}
});
}
}, 100);
}
}
}
async _setCurrentPageNumber(val) {
let resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (this._currentPageNumber === val) {
if (resetCurrentPageView) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _resetCurrentPageView).call(this);
}
return true;
}
if (!(0 < val && val <= this.pagesCount)) {
return false;
}
const previous = this._currentPageNumber;
this._currentPageNumber = val;
this.hidePagesDependingOnpageViewMode();
if (this.pageViewMode === "book" || this.pageViewMode === "infinite-scroll") {
const pageView = this._pages[this.currentPageNumber - 1];
if (pageView.div.parentElement.classList.contains("spread")) {
pageView.div.parentElement.childNodes.forEach(async div => {
const pageNumber = Number(div.getAttribute("data-page-number"));
const pv = this._pages[pageNumber - 1];
await pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_ensurePdfPageLoaded).call(this, pv);
this.renderingQueue.renderView(pv);
div.style.display = "inline-block";
});
} else {
await pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_ensurePdfPageLoaded).call(this, pageView);
this.renderingQueue.renderView(pageView);
if (pdf_viewer_classPrivateFieldGet(_pageViewMode, this) === "book") {
this.ensureAdjacentPagesAreLoaded();
}
}
}
this.eventBus.dispatch("pagechanging", {
source: this,
pageNumber: val,
pageLabel: this._pageLabels?.[val - 1] ?? null,
previous
});
if (resetCurrentPageView) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _resetCurrentPageView).call(this);
}
return true;
}
addPageToRenderQueue() {
let pageIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (pageIndex >= 0 && pageIndex <= this._pages.length - 1) {
const pageView = this._pages[pageIndex];
const isLoading = pageView.renderingState === RenderingStates.INITIAL;
if (isLoading) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_ensurePdfPageLoaded).call(this, pageView).then(() => {
this.renderingQueue.renderView(pageView);
});
return true;
}
}
return false;
}
async ensureAdjacentPagesAreLoaded() {
const advances = [0, 1, -1, 2, -2, -3];
let offset = 0;
if (this.currentPageNumber % 2 === 1) {
offset = -1;
}
let renderAsynchronously = false;
for (const advance of advances) {
const pageIndex = this.currentPageNumber + advance + offset;
if (pageIndex >= 0 && pageIndex < this._pages.length) {
try {
const pageView = this._pages[pageIndex];
await pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_ensurePdfPageLoaded).call(this, pageView);
const isAlreadyRendering = this._pages.some(pv => pv.renderingState === RenderingStates.RUNNING || pv.renderingState === RenderingStates.PAUSED);
if (isAlreadyRendering || renderAsynchronously) {
const loader = () => this.adjacentPagesRenderer(loader, pageIndex);
this.eventBus._on("pagerendered", loader);
this.eventBus._on("thumbnailRendered", loader);
} else {
renderAsynchronously = this.adjacentPagesRenderer(null, pageIndex);
}
} catch (exception) {
NgxConsole.log("Exception during pre-rendering page %s", pageIndex, exception);
}
}
}
}
adjacentPagesRenderer(self, pageIndex) {
const isAlreadyRendering = this._pages.find(pageView => pageView.renderingState === RenderingStates.RUNNING);
if (isAlreadyRendering) {
return true;
}
const pausedRendering = this._pages.find(pageView => pageView.renderingState === RenderingStates.PAUSED);
if (pausedRendering) {
this.renderingQueue.renderView(pausedRendering);
return true;
}
if (self) {
this.eventBus._off("pagerendered", self);
this.eventBus._off("thumbnailRendered", self);
}
if (pageIndex >= 0 && pageIndex < this._pages.length) {
const pageView = this._pages[pageIndex];
const needsToBeRendered = pageView.renderingState === RenderingStates.INITIAL;
if (needsToBeRendered) {
this.renderingQueue.renderView(pageView);
return true;
}
}
return false;
}
get currentPageLabel() {
return this._pageLabels?.[this._currentPageNumber - 1] ?? null;
}
set currentPageLabel(val) {
if (!this.pdfDocument) {
return;
}
let page = val | 0;
if (this._pageLabels) {
const i = this._pageLabels.indexOf(val);
if (i >= 0) {
page = i + 1;
}
}
if (!this._setCurrentPageNumber(page, true)) {
NgxConsole.error(`currentPageLabel: "${val}" is not a valid page.`);
}
}
get currentScale() {
return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : DEFAULT_SCALE;
}
set currentScale(val) {
if (isNaN(val)) {
throw new Error("Invalid numeric scale.");
}
if (!this.pdfDocument) {
return;
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, val, {
noScroll: false
});
}
get currentScaleValue() {
return this._currentScaleValue;
}
set currentScaleValue(val) {
if (!this.pdfDocument) {
return;
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, val, {
noScroll: false
});
}
get pagesRotation() {
return this._pagesRotation;
}
set pagesRotation(rotation) {
if (!isValidRotation(rotation)) {
throw new Error("Invalid pages rotation angle.");
}
if (!this.pdfDocument) {
return;
}
rotation %= 360;
if (rotation < 0) {
rotation += 360;
}
if (this._pagesRotation === rotation) {
return;
}
this._pagesRotation = rotation;
const pageNumber = this._currentPageNumber;
this.refresh(true, {
rotation
});
if (this._currentScaleValue) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, this._currentScaleValue, {
noScroll: true
});
}
this.eventBus.dispatch("rotationchanging", {
source: this,
pagesRotation: rotation,
pageNumber
});
if (this.defaultRenderingQueue) {
this.update();
}
}
get firstPagePromise() {
return this.pdfDocument ? this._firstPageCapability.promise : null;
}
get onePageRendered() {
return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
}
get pagesPromise() {
return this.pdfDocument ? this._pagesCapability.promise : null;
}
get _layerProperties() {
const self = this;
return shadow(this, "_layerProperties", {
get annotationEditorUIManager() {
return pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, self);
},
get annotationStorage() {
return self.pdfDocument?.annotationStorage;
},
get downloadManager() {
return self.downloadManager;
},
get enableScripting() {
return !!self._scriptingManager;
},
get fieldObjectsPromise() {
return self.pdfDocument?.getFieldObjects();
},
get findController() {
return self.findController;
},
get customFindController() {
return self.customFindController;
},
get hasJSActionsPromise() {
return self.pdfDocument?.hasJSActions();
},
get linkService() {
return self.linkService;
}
});
}
async getAllText() {
const texts = [];
const buffer = [];
for (let pageNum = 1, pagesCount = this.pdfDocument.numPages; pageNum <= pagesCount; ++pageNum) {
if (pdf_viewer_classPrivateFieldGet(_interruptCopyCondition, this)) {
return null;
}
buffer.length = 0;
const page = await this.pdfDocument.getPage(pageNum);
const {
items
} = await page.getTextContent();
for (const item of items) {
if (item.str) {
buffer.push(item.str);
}
if (item.hasEOL) {
buffer.push("\n");
}
}
texts.push(removeNullCharacters(buffer.join("")));
}
return texts.join("\n");
}
setDocument(pdfDocument) {
if (this.pdfDocument) {
this.eventBus.dispatch("pagesdestroy", {
source: this
});
this._cancelRendering();
this._resetView();
this.findController?.setDocument(null);
this.customFindController?.setDocument(null);
this._scriptingManager?.setDocument(null);
pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this)?.destroy();
pdf_viewer_classPrivateFieldSet(_annotationEditorUIManager, this, null);
}
this.pdfDocument = pdfDocument;
if (!pdfDocument) {
return;
}
const pagesCount = pdfDocument.numPages;
const firstPagePromise = pdfDocument.getPage(1);
const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({
intent: "display"
});
const permissionsPromise = pdf_viewer_classPrivateFieldGet(pdf_viewer_enablePermissions, this) ? pdfDocument.getPermissions() : Promise.resolve();
const {
eventBus,
pageColors,
viewer
} = this;
pdf_viewer_classPrivateFieldSet(pdf_viewer_eventAbortController, this, new AbortController());
const {
signal
} = pdf_viewer_classPrivateFieldGet(pdf_viewer_eventAbortController, this);
if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {
NgxConsole.warn("Forcing PAGE-scrolling for performance reasons, given the length of the document.");
const mode = this._scrollMode = ScrollMode.PAGE;
eventBus.dispatch("scrollmodechanged", {
source: this,
mode
});
}
this._pagesCapability.promise.then(() => {
eventBus.dispatch("pagesloaded", {
source: this,
pagesCount
});
}, () => {});
const onBeforeDraw = evt => {
const pageView = this._pages[evt.pageNumber - 1];
if (!pageView) {
return;
}
pdf_viewer_classPrivateFieldGet(_buffer, this).push(pageView);
};
eventBus._on("pagerender", onBeforeDraw, {
signal
});
const onAfterDraw = evt => {
if (evt.cssTransform || evt.isDetailView) {
return;
}
this._onePageRenderedCapability.resolve({
timestamp: evt.timestamp
});
eventBus._off("pagerendered", onAfterDraw);
};
eventBus._on("pagerendered", onAfterDraw, {
signal
});
Promise.all([firstPagePromise, permissionsPromise]).then(_ref2 => {
let [firstPdfPage, permissions] = _ref2;
if (pdfDocument !== this.pdfDocument) {
return;
}
this._firstPageCapability.resolve(firstPdfPage);
this._optionalContentConfigPromise = optionalContentConfigPromise;
const {
annotationEditorMode,
annotationMode,
textLayerMode
} = pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _initializePermissions).call(this, permissions);
if (textLayerMode !== TextLayerMode.DISABLE) {
const element = pdf_viewer_classPrivateFieldSet(_hiddenCopyElement, this, document.createElement("div"));
element.id = "hiddenCopyElement";
viewer.before(element);
}
if (annotationEditorMode !== AnnotationEditorType.DISABLE) {
const mode = annotationEditorMode;
if (pdfDocument.isPureXfa) {
NgxConsole.warn("Warning: XFA-editing is not implemented.");
} else if (isValidAnnotationEditorMode(mode)) {
pdf_viewer_classPrivateFieldSet(_annotationEditorUIManager, this, new AnnotationEditorUIManager(this.container, viewer, pdf_viewer_classPrivateFieldGet(pdf_viewer_altTextManager, this), pdf_viewer_classPrivateFieldGet(pdf_viewer_signatureManager, this), eventBus, pdfDocument, pageColors, pdf_viewer_classPrivateFieldGet(_annotationEditorHighlightColors, this), pdf_viewer_classPrivateFieldGet(pdf_viewer_enableHighlightFloatingButton, this), pdf_viewer_classPrivateFieldGet(pdf_viewer_enableUpdatedAddImage, this), pdf_viewer_classPrivateFieldGet(pdf_viewer_enableNewAltTextWhenAddingImage, this), pdf_viewer_classPrivateFieldGet(pdf_viewer_mlManager, this), pdf_viewer_classPrivateFieldGet(_editorUndoBar, this), pdf_viewer_classPrivateFieldGet(_supportsPinchToZoom, this)));
eventBus.dispatch("annotationeditoruimanager", {
source: this,
uiManager: pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this)
});
if (mode !== AnnotationEditorType.NONE) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _preloadEditingData).call(this, mode);
pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this).updateMode(mode);
}
} else {
NgxConsole.error(`Invalid AnnotationEditor mode: ${mode}`);
}
}
const viewerElement = this._scrollMode === ScrollMode.PAGE ? null : viewer;
const scale = this.currentScale;
const viewport = firstPdfPage.getViewport({
scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS
});
viewer.style.setProperty("--scale-factor", viewport.scale);
if (pageColors?.background) {
viewer.style.setProperty("--page-bg-color", pageColors.background);
}
if (pageColors?.foreground === "CanvasText" || pageColors?.background === "Canvas") {
viewer.style.setProperty("--hcm-highlight-filter", pdfDocument.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight"));
viewer.style.setProperty("--hcm-highlight-selected-filter", pdfDocument.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "ButtonText"));
}
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
const pageView = new PDFPageView({
container: viewerElement,
eventBus,
id: pageNum,
scale,
defaultViewport: viewport.clone(),
optionalContentConfigPromise,
renderingQueue: this.renderingQueue,
textLayerMode,
annotationMode,
imageResourcesPath: this.imageResourcesPath,
maxCanvasPixels: this.maxCanvasPixels,
maxCanvasDim: this.maxCanvasDim,
capCanvasAreaFactor: this.capCanvasAreaFactor,
enableDetailCanvas: this.enableDetailCanvas,
pageColors,
l10n: this.l10n,
layerProperties: this._layerProperties,
enableHWA: pdf_viewer_classPrivateFieldGet(pdf_viewer_enableHWA, this),
enableAutoLinking: pdf_viewer_classPrivateFieldGet(pdf_viewer_enableAutoLinking, this),
minDurationToUpdateCanvas: pdf_viewer_classPrivateFieldGet(pdf_viewer_minDurationToUpdateCanvas, this)
});
this._pages.push(pageView);
}
this._pages[0]?.setPdfPage(firstPdfPage);
if (this._scrollMode === ScrollMode.PAGE) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _ensurePageViewVisible).call(this);
} else if (this._spreadMode !== SpreadMode.NONE) {
this._updateSpreadMode();
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _onePageRenderedOrForceFetch).call(this, signal).then(async () => {
if (pdfDocument !== this.pdfDocument) {
return;
}
this.findController?.setDocument(pdfDocument);
this.customFindController?.setDocument(pdfDocument);
this._scriptingManager?.setDocument(pdfDocument);
if (pdf_viewer_classPrivateFieldGet(_hiddenCopyElement, this)) {
document.addEventListener("copy", pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _copyCallback).bind(this, textLayerMode), {
signal
});
}
if (pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this)) {
eventBus.dispatch("annotationeditormodechanged", {
source: this,
mode: pdf_viewer_classPrivateFieldGet(_annotationEditorMode, this)
});
}
if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT) {
this._pagesCapability.resolve();
return;
}
let getPagesLeft = pagesCount - 1;
if (getPagesLeft <= 0) {
this._pagesCapability.resolve();
return;
}
if (pdf_viewer_classPrivateFieldGet(_pageViewMode, this) === "book") {
await this.ensureAdjacentPagesAreLoaded();
}
for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
const promise = pdfDocument.getPage(pageNum).then(pdfPage => {
const pageView = this._pages[pageNum - 1];
if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage);
}
if (--getPagesLeft === 0) {
this._pagesCapability.resolve();
}
}, reason => {
NgxConsole.error(`Unable to get page ${pageNum} to initialize viewer`, reason);
if (--getPagesLeft === 0) {
this._pagesCapability.resolve();
}
});
if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) {
await promise;
}
}
});
this.hidePagesDependingOnpageViewMode();
eventBus.dispatch("pagesinit", {
source: this
});
pdfDocument.getMetadata().then(_ref3 => {
let {
info
} = _ref3;
if (pdfDocument !== this.pdfDocument) {
return;
}
if (info.Language) {
viewer.lang = info.Language;
}
});
if (this.defaultRenderingQueue) {
this.update();
}
}).catch(reason => {
NgxConsole.error("Unable to initialize viewer", reason);
this._pagesCapability.reject(reason);
});
}
setPageLabels(labels) {
if (!this.pdfDocument) {
return;
}
if (!labels) {
this._pageLabels = null;
} else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
this._pageLabels = null;
NgxConsole.error(`setPageLabels: Invalid page labels.`);
} else {
this._pageLabels = labels;
}
for (let i = 0, ii = this._pages.length; i < ii; i++) {
this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null);
}
}
_resetView() {
this._pages = [];
this._currentPageNumber = 1;
this._currentScale = UNKNOWN_SCALE;
this._currentScaleValue = null;
this._pageLabels = null;
const bufferSize = this.defaultCacheSize || DEFAULT_CACHE_SIZE;
pdf_viewer_classPrivateFieldSet(_buffer, this, new PDFPageViewBuffer(bufferSize));
this._location = null;
this._pagesRotation = 0;
this._optionalContentConfigPromise = null;
this._firstPageCapability = Promise.withResolvers();
this._onePageRenderedCapability = Promise.withResolvers();
this._pagesCapability = Promise.withResolvers();
this._scrollMode = ScrollMode.VERTICAL;
this._previousScrollMode = ScrollMode.UNKNOWN;
this._spreadMode = SpreadMode.NONE;
pdf_viewer_classPrivateFieldSet(_scrollModePageState, this, {
previousPageNumber: 1,
scrollDown: true,
pages: []
});
pdf_viewer_classPrivateFieldGet(pdf_viewer_eventAbortController, this)?.abort();
pdf_viewer_classPrivateFieldSet(pdf_viewer_eventAbortController, this, null);
this.viewer.textContent = "";
this._updateScrollMode();
this.viewer.removeAttribute("lang");
pdf_viewer_classPrivateFieldGet(_hiddenCopyElement, this)?.remove();
pdf_viewer_classPrivateFieldSet(_hiddenCopyElement, this, null);
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _cleanupTimeouts).call(this);
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _cleanupSwitchAnnotationEditorMode).call(this);
}
_scrollUpdate() {
if (this.pagesCount === 0) {
return;
}
if (pdf_viewer_classPrivateFieldGet(_scrollTimeoutId, this)) {
clearTimeout(pdf_viewer_classPrivateFieldGet(_scrollTimeoutId, this));
}
pdf_viewer_classPrivateFieldSet(_scrollTimeoutId, this, setTimeout(() => {
pdf_viewer_classPrivateFieldSet(_scrollTimeoutId, this, null);
this.update();
}, 100));
this.update();
}
scrollPagePosIntoView(pageNumber, pageSpot) {
const pageDiv = this._pages[pageNumber - 1].div;
if (pageSpot) {
const targetPageSpot = {
...pageSpot
};
if (typeof targetPageSpot.top === "string") {
if (targetPageSpot.top.endsWith("%")) {
const percent = Number(targetPageSpot.top.replace("%", ""));
const viewerHeight = this.viewer.querySelector(".page")?.clientHeight;
let height = pageDiv.clientHeight ?? viewerHeight;
const visibleWindowHeight = this.viewer.parentElement.clientHeight;
height = Math.max(0, height - visibleWindowHeight);
targetPageSpot.top = percent * height / 100;
}
}
if (typeof targetPageSpot.left === "string") {
if (targetPageSpot.left.endsWith("%")) {
const percent = Number(targetPageSpot.left.replace("%", ""));
const viewerWidth = this.viewer.querySelector(".page")?.clientWidth;
const width = pageDiv.clientWidth ?? viewerWidth;
targetPageSpot.left = percent * width / 100;
}
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _scrollIntoView).call(this, {
div: pageDiv,
id: pageNumber
}, targetPageSpot);
} else {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _scrollIntoView).call(this, {
div: pageDiv,
id: pageNumber
});
}
}
pageLabelToPageNumber(label) {
if (!this._pageLabels) {
return null;
}
const i = this._pageLabels.indexOf(label);
if (i < 0) {
return null;
}
return i + 1;
}
scrollPageIntoView(_ref4) {
let {
pageNumber,
destArray = null,
allowNegativeOffset = false,
ignoreDestinationZoom = false
} = _ref4;
if (!this.pdfDocument) {
return;
}
const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];
if (!pageView) {
NgxConsole.error(`scrollPageIntoView: "${pageNumber}" is not a valid pageNumber parameter.`);
return;
}
if (this.isInPresentationMode || !destArray) {
this._setCurrentPageNumber(pageNumber, true);
return;
}
let x = 0,
y = 0;
let width = 0,
height = 0,
widthScale,
heightScale;
const changeOrientation = pageView.rotation % 180 !== 0;
const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS;
const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / PixelsPerInch.PDF_TO_CSS_UNITS;
let scale = 0;
switch (destArray[1].name) {
case "XYZ":
x = destArray[2];
y = destArray[3];
scale = destArray[4];
x = x !== null ? x : 0;
y = y !== null ? y : pageHeight;
break;
case "Fit":
case "FitB":
scale = "page-fit";
break;
case "FitH":
case "FitBH":
y = destArray[2];
scale = "page-width";
if (y === null && this._location) {
x = this._location.left;
y = this._location.top;
} else if (typeof y !== "number" || y < 0) {
y = pageHeight;
}
break;
case "FitV":
case "FitBV":
x = destArray[2];
width = pageWidth;
height = pageHeight;
scale = "page-height";
break;
case "FitR":
x = destArray[2];
y = destArray[3];
width = destArray[4] - x;
height = destArray[5] - y;
let hPadding = SCROLLBAR_PADDING,
vPadding = VERTICAL_PADDING;
if (this.removePageBorders) {
hPadding = vPadding = 0;
}
widthScale = (this.container.clientWidth - hPadding) / width / PixelsPerInch.PDF_TO_CSS_UNITS;
heightScale = (this.container.clientHeight - vPadding) / height / PixelsPerInch.PDF_TO_CSS_UNITS;
scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
break;
default:
NgxConsole.error(`scrollPageIntoView: "${destArray[1].name}" is not a valid destination type.`);
return;
}
if (!ignoreDestinationZoom) {
if (scale && scale !== this._currentScale) {
this.currentScaleValue = scale;
} else if (this._currentScale === UNKNOWN_SCALE) {
this.currentScaleValue = DEFAULT_SCALE_VALUE;
}
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_ensurePdfPageLoaded).call(this, pageView).then(() => {
this.renderingQueue.renderView(pageView);
if (this.pageViewMode === "single") {
if (this.currentPageNumber !== pageNumber) {
this.currentPageNumber = pageNumber;
}
}
});
if (scale === "page-fit" && !destArray[4]) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _scrollIntoView).call(this, pageView);
return;
}
const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
let left = Math.min(boundingRect[0][0], boundingRect[1][0]);
let top = Math.min(boundingRect[0][1], boundingRect[1][1]);
if (!allowNegativeOffset) {
left = Math.max(left, 0);
top = Math.max(top, 0);
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _scrollIntoView).call(this, pageView, {
left,
top
});
}
_updateLocation(firstPage) {
const currentScale = this._currentScale;
const currentScaleValue = this._currentScaleValue;
const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
const pageNumber = firstPage.id;
const currentPageView = this._pages[pageNumber - 1];
const container = this.container;
const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
const intLeft = Math.round(topLeft[0]);
const intTop = Math.round(topLeft[1]);
let pdfOpenParams = `#page=${pageNumber}`;
if (!this.isInPresentationMode) {
pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`;
}
this._location = {
pageNumber,
scale: normalizedScaleValue,
top: intTop,
left: intLeft,
rotation: this._pagesRotation,
pdfOpenParams
};
}
update() {
let noScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (this.scrollMode === ScrollMode.PAGE) {
this.viewer.classList.add("singlePageView");
} else {
this.viewer.classList.remove("singlePageView");
}
const visible = this._getVisiblePages();
const visiblePages = visible.views,
numVisiblePages = visiblePages.length;
if (numVisiblePages === 0) {
return;
}
const bufferSize = this.defaultCacheSize || DEFAULT_CACHE_SIZE;
const newCacheSize = Math.max(bufferSize, 2 * numVisiblePages + 1);
pdf_viewer_classPrivateFieldGet(_buffer, this).resize(newCacheSize, visible.ids);
for (const {
view,
visibleArea
} of visiblePages) {
view.updateVisibleArea(visibleArea);
}
for (const view of pdf_viewer_classPrivateFieldGet(_buffer, this)) {
if (!visible.ids.has(view.id)) {
view.updateVisibleArea(null);
}
}
this.renderingQueue.renderHighestPriority(visible);
const isSimpleLayout = this._spreadMode === SpreadMode.NONE && (this._scrollMode === ScrollMode.PAGE || this._scrollMode === ScrollMode.VERTICAL);
const currentId = this._currentPageNumber;
let stillFullyVisible = false;
for (const page of visiblePages) {
if (page.percent < 100) {
break;
}
if (page.id === currentId && isSimpleLayout) {
stillFullyVisible = true;
break;
}
}
if (this.scrollMode !== ScrollMode.PAGE && !noScroll) {
this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id);
}
this._updateLocation(visible.first);
this.eventBus.dispatch("updateviewarea", {
source: this,
location: this._location
});
this.hidePagesDependingOnpageViewMode();
}
async updateBookModeScale(evt) {
if (this.pageViewMode === "book") {
if (this.pageFlip) {
if (evt.scale && evt.scale !== evt.previousScale) {
const page = this._pages[0];
if (page.pdfPage) {
const width = page.width;
const height = page.height;
const block = page.div.parentElement;
const borderWith = this.removePageBorders ? 1 : 40;
block.style.width = `${2 * width + borderWith}px`;
block.style.height = `${height}px`;
this.pageFlip.render.setting.width = width;
this.pageFlip.render.setting.height = height;
this.pageFlip.render.update();
}
}
}
}
}
containsElement(element) {
return this.container.contains(element);
}
focus() {
this.container.focus();
}
get _isContainerRtl() {
return getComputedStyle(this.container).direction === "rtl";
}
get isInPresentationMode() {
return this.presentationModeState === PresentationModeState.FULLSCREEN;
}
get isChangingPresentationMode() {
return this.presentationModeState === PresentationModeState.CHANGING;
}
get isHorizontalScrollbarEnabled() {
return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
}
get isVerticalScrollbarEnabled() {
return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;
}
_getVisiblePages() {
const views = this._scrollMode === ScrollMode.PAGE ? pdf_viewer_classPrivateFieldGet(_scrollModePageState, this).pages : this._pages,
horizontal = this._scrollMode === ScrollMode.HORIZONTAL,
rtl = horizontal && this._isContainerRtl;
return getVisibleElements({
scrollEl: this.container,
views,
sortByVisibility: true,
horizontal,
rtl
});
}
cleanup() {
for (const pageView of this._pages) {
if (pageView.renderingState !== RenderingStates.FINISHED) {
pageView.reset();
}
}
}
_cancelRendering() {
for (const pageView of this._pages) {
pageView.cancelRendering();
}
}
forceRendering(currentlyVisiblePages) {
const visiblePages = currentlyVisiblePages || this._getVisiblePages();
const scrollAhead = pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_getScrollAhead).call(this, visiblePages);
const preRenderExtra = this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL;
const ignoreDetailViews = pdf_viewer_classPrivateFieldGet(_scaleTimeoutId, this) !== null || pdf_viewer_classPrivateFieldGet(_scrollTimeoutId, this) !== null && visiblePages.views.some(page => page.detailView?.renderingCancelled);
const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra, ignoreDetailViews);
if (pageView) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, pdf_viewer_ensurePdfPageLoaded).call(this, pageView).then(() => {
this.renderingQueue.renderView(pageView);
});
return true;
}
return false;
}
get hasEqualPageSizes() {
const firstPageView = this._pages[0];
for (let i = 1, ii = this._pages.length; i < ii; ++i) {
const pageView = this._pages[i];
if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
return false;
}
}
return true;
}
getPagesOverview() {
let initialOrientation;
return this._pages.map(pageView => {
const viewport = pageView.pdfPage.getViewport({
scale: 1
});
const orientation = isPortraitOrientation(viewport);
if (initialOrientation === undefined) {
initialOrientation = orientation;
} else if (this.enablePrintAutoRotate && orientation !== initialOrientation) {
return {
width: viewport.height,
height: viewport.width,
rotation: (viewport.rotation - 90) % 360
};
}
return {
width: viewport.width,
height: viewport.height,
rotation: viewport.rotation
};
});
}
get optionalContentConfigPromise() {
if (!this.pdfDocument) {
return Promise.resolve(null);
}
if (!this._optionalContentConfigPromise) {
NgxConsole.error("optionalContentConfigPromise: Not initialized yet.");
return this.pdfDocument.getOptionalContentConfig({
intent: "display"
});
}
return this._optionalContentConfigPromise;
}
set optionalContentConfigPromise(promise) {
if (!(promise instanceof Promise)) {
throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);
}
if (!this.pdfDocument) {
return;
}
if (!this._optionalContentConfigPromise) {
return;
}
this._optionalContentConfigPromise = promise;
this.refresh(false, {
optionalContentConfigPromise: promise
});
this.eventBus.dispatch("optionalcontentconfigchanged", {
source: this,
promise
});
}
get scrollMode() {
return this._scrollMode;
}
set scrollMode(mode) {
if (this._scrollMode === mode) {
return;
}
if (!isValidScrollMode(mode)) {
throw new Error(`Invalid scroll mode: ${mode}`);
}
if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {
return;
}
this._previousScrollMode = this._scrollMode;
this._scrollMode = mode;
this.eventBus.dispatch("scrollmodechanged", {
source: this,
mode
});
this._updateScrollMode(this._currentPageNumber);
}
_updateScrollMode() {
let pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
const scrollMode = this._scrollMode,
viewer = this.viewer;
viewer.classList.toggle("scrollHorizontal", scrollMode === ScrollMode.HORIZONTAL);
viewer.classList.toggle("scrollWrapped", scrollMode === ScrollMode.WRAPPED);
if (!this.pdfDocument || !pageNumber) {
return;
}
if (scrollMode === ScrollMode.PAGE) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _ensurePageViewVisible).call(this);
} else if (this._previousScrollMode === ScrollMode.PAGE) {
this._updateSpreadMode();
}
if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, this._currentScaleValue, {
noScroll: true
});
}
this._setCurrentPageNumber(pageNumber, true);
this.update();
}
get spreadMode() {
return this._spreadMode;
}
set spreadMode(mode) {
if (this._spreadMode === mode) {
return;
}
if (!isValidSpreadMode(mode)) {
throw new Error(`Invalid spread mode: ${mode}`);
}
this._spreadMode = mode;
this.eventBus.dispatch("spreadmodechanged", {
source: this,
mode
});
this._updateSpreadMode(this._currentPageNumber);
}
_updateSpreadMode() {
let pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (!this.pdfDocument) {
return;
}
const viewer = this.viewer,
pages = this._pages;
if (this._scrollMode === ScrollMode.PAGE) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _ensurePageViewVisible).call(this);
} else {
viewer.textContent = "";
if (this._spreadMode === SpreadMode.NONE) {
for (const pageView of this._pages) {
viewer.append(pageView.div);
}
} else {
const parity = this._spreadMode - 1;
let spread = null;
for (let i = 0, ii = pages.length; i < ii; ++i) {
if (spread === null) {
spread = document.createElement("div");
spread.className = "spread";
viewer.append(spread);
} else if (i % 2 === parity) {
spread = spread.cloneNode(false);
viewer.append(spread);
}
spread.append(pages[i].div);
}
}
}
this.hidePagesDependingOnpageViewMode();
if (!pageNumber) {
return;
}
if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, this._currentScaleValue, {
noScroll: true
});
}
this._setCurrentPageNumber(pageNumber, true);
this.update();
}
_getPageAdvance(currentPageNumber) {
let previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (this.pageViewMode === "book") {
return 2;
}
switch (this._scrollMode) {
case ScrollMode.WRAPPED:
{
const {
views
} = this._getVisiblePages(),
pageLayout = new Map();
for (const {
id,
y,
percent,
widthPercent
} of views) {
if (percent === 0 || widthPercent < 100) {
continue;
}
let yArray = pageLayout.get(y);
if (!yArray) {
pageLayout.set(y, yArray ||= []);
}
yArray.push(id);
}
for (const yArray of pageLayout.values()) {
const currentIndex = yArray.indexOf(currentPageNumber);
if (currentIndex === -1) {
continue;
}
const numPages = yArray.length;
if (numPages === 1) {
break;
}
if (previous) {
for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {
const currentId = yArray[i],
expectedId = yArray[i + 1] - 1;
if (currentId < expectedId) {
return currentPageNumber - expectedId;
}
}
} else {
for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {
const currentId = yArray[i],
expectedId = yArray[i - 1] + 1;
if (currentId > expectedId) {
return expectedId - currentPageNumber;
}
}
}
if (previous) {
const firstId = yArray[0];
if (firstId < currentPageNumber) {
return currentPageNumber - firstId + 1;
}
} else {
const lastId = yArray[numPages - 1];
if (lastId > currentPageNumber) {
return lastId - currentPageNumber + 1;
}
}
break;
}
break;
}
case ScrollMode.HORIZONTAL:
{
break;
}
case ScrollMode.PAGE:
case ScrollMode.VERTICAL:
{
if (this._spreadMode === SpreadMode.NONE) {
break;
}
const parity = this._spreadMode - 1;
if (previous && currentPageNumber % 2 !== parity) {
break;
} else if (!previous && currentPageNumber % 2 === parity) {
break;
}
const {
views
} = this._getVisiblePages(),
expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;
for (const {
id,
percent,
widthPercent
} of views) {
if (id !== expectedId) {
continue;
}
if (percent > 0 && widthPercent === 100) {
return 2;
}
break;
}
break;
}
}
return 1;
}
nextPage() {
const currentPageNumber = this._currentPageNumber,
pagesCount = this.pagesCount;
if (currentPageNumber >= pagesCount) {
return false;
}
const advance = this._getPageAdvance(currentPageNumber, false) || 1;
this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);
return true;
}
previousPage() {
const currentPageNumber = this._currentPageNumber;
if (currentPageNumber <= 1) {
return false;
}
const advance = this._getPageAdvance(currentPageNumber, true) || 1;
this.currentPageNumber = Math.max(currentPageNumber - advance, 1);
return true;
}
updateScale(_ref5) {
let {
drawingDelay,
scaleFactor = null,
steps = null,
origin
} = _ref5;
if (steps === null && scaleFactor === null) {
throw new Error("Invalid updateScale options: either `steps` or `scaleFactor` must be provided.");
}
if (!this.pdfDocument) {
return;
}
let newScale = this._currentScale;
if (scaleFactor > 0 && scaleFactor !== 1) {
newScale = Math.round(newScale * scaleFactor * 100) / 100;
} else if (steps) {
const delta = steps > 0 ? DEFAULT_SCALE_DELTA : 1 / DEFAULT_SCALE_DELTA;
const round = steps > 0 ? Math.ceil : Math.floor;
steps = Math.abs(steps);
do {
newScale = round((newScale * delta).toFixed(2) * 10) / 10;
} while (--steps > 0);
}
const minScale = Number(this.minZoom) ?? MIN_SCALE;
const maxScale = Number(this.maxZoom) ?? MAX_SCALE;
newScale = MathClamp(newScale, minScale, maxScale);
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, newScale, {
noScroll: false,
drawingDelay,
origin
});
}
increaseScale() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.updateScale({
...options,
steps: options.steps ?? 1
});
}
decreaseScale() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.updateScale({
...options,
steps: -(options.steps ?? 1)
});
}
get containerTopLeft() {
return pdf_viewer_classPrivateFieldGet(_containerTopLeft, this) || pdf_viewer_classPrivateFieldSet(_containerTopLeft, this, [this.container.offsetTop, this.container.offsetLeft]);
}
get annotationEditorMode() {
return pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this) ? pdf_viewer_classPrivateFieldGet(_annotationEditorMode, this) : AnnotationEditorType.DISABLE;
}
set annotationEditorMode(_ref6) {
let {
mode,
editId = null,
isFromKeyboard = false
} = _ref6;
if (!pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this)) {
throw new Error(`The AnnotationEditor is not enabled.`);
}
if (pdf_viewer_classPrivateFieldGet(_annotationEditorMode, this) === mode) {
return;
}
if (!isValidAnnotationEditorMode(mode)) {
throw new Error(`Invalid AnnotationEditor mode: ${mode}`);
}
if (!this.pdfDocument) {
return;
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _preloadEditingData).call(this, mode);
const {
eventBus,
pdfDocument
} = this;
const updater = async () => {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _cleanupSwitchAnnotationEditorMode).call(this);
pdf_viewer_classPrivateFieldSet(_annotationEditorMode, this, mode);
await pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this).updateMode(mode, editId, isFromKeyboard);
if (mode !== pdf_viewer_classPrivateFieldGet(_annotationEditorMode, this) || pdfDocument !== this.pdfDocument) {
return;
}
eventBus.dispatch("annotationeditormodechanged", {
source: this,
mode
});
};
if (mode === AnnotationEditorType.NONE || pdf_viewer_classPrivateFieldGet(_annotationEditorMode, this) === AnnotationEditorType.NONE) {
const isEditing = mode !== AnnotationEditorType.NONE;
if (!isEditing) {
this.pdfDocument.annotationStorage.resetModifiedIds();
}
for (const pageView of this._pages) {
pageView.toggleEditingMode(isEditing);
}
const idsToRefresh = pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _switchToEditAnnotationMode).call(this);
if (isEditing && idsToRefresh) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _cleanupSwitchAnnotationEditorMode).call(this);
pdf_viewer_classPrivateFieldSet(_switchAnnotationEditorModeAC, this, new AbortController());
const signal = AbortSignal.any([pdf_viewer_classPrivateFieldGet(pdf_viewer_eventAbortController, this).signal, pdf_viewer_classPrivateFieldGet(_switchAnnotationEditorModeAC, this).signal]);
eventBus._on("pagerendered", _ref7 => {
let {
pageNumber
} = _ref7;
idsToRefresh.delete(pageNumber);
if (idsToRefresh.size === 0) {
pdf_viewer_classPrivateFieldSet(_switchAnnotationEditorModeTimeoutId, this, setTimeout(updater, 0));
}
}, {
signal
});
return;
}
}
updater();
}
refresh() {
let noUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
let updateArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Object.create(null);
if (!this.pdfDocument) {
return;
}
for (const pageView of this._pages) {
pageView.update(updateArgs);
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _cleanupTimeouts).call(this);
if (!noUpdate) {
this.update();
}
}
getSerializedAnnotations() {
const annotationStorage = this.pdfDocument.annotationStorage;
if (annotationStorage.size === 0) {
return null;
}
const annotations = [];
for (const [key, annotation] of annotationStorage) {
if (annotation && typeof annotation.serialize === 'function') {
const serialized = annotation.serialize();
if (serialized && serialized.annotationType !== undefined) {
annotations.push(serialized);
}
}
}
return annotations.length > 0 ? annotations : null;
}
async addEditorAnnotation(data) {
try {
if (typeof data === "string") {
data = JSON.parse(data);
}
} catch (ex) {
NgxConsole.error(`Please pass a JSON string or an Array of JSON objects to addEditorAnnotation: "${ex.message}".`);
return;
}
if (!Array.isArray(data)) {
data = [data];
}
data?.forEach(annotation => annotation.isCopy = true);
await pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this).addSerializedEditor(data, true, true, false);
}
removeEditorAnnotations() {
let filter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => true;
pdf_viewer_classPrivateFieldGet(_annotationEditorUIManager, this).removeEditors(filter);
}
destroyBookMode() {
if (this.pageFlip) {
this.pageFlip.destroy();
this.pageFlip = null;
}
}
stopRendering() {
this._cancelRendering();
}
}
function _findParentWithScrollbar(element) {
while (element) {
if (element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth) {
return element;
}
element = element.parentElement;
}
return null;
}
function _initializePermissions(permissions) {
const params = {
annotationEditorMode: pdf_viewer_classPrivateFieldGet(_annotationEditorMode, this),
annotationMode: pdf_viewer_classPrivateFieldGet(pdf_viewer_annotationMode, this),
textLayerMode: pdf_viewer_classPrivateFieldGet(pdf_viewer_textLayerMode, this)
};
if (!permissions) {
return params;
}
if (!permissions.includes(PermissionFlag.COPY) && pdf_viewer_classPrivateFieldGet(pdf_viewer_textLayerMode, this) === TextLayerMode.ENABLE) {
params.textLayerMode = TextLayerMode.ENABLE_PERMISSIONS;
}
if (!permissions.includes(PermissionFlag.MODIFY_CONTENTS)) {
params.annotationEditorMode = AnnotationEditorType.DISABLE;
}
if (!permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS) && pdf_viewer_classPrivateFieldGet(pdf_viewer_annotationMode, this) === AnnotationMode.ENABLE_FORMS) {
params.annotationMode = AnnotationMode.ENABLE;
}
return params;
}
async function _onePageRenderedOrForceFetch(signal) {
if (document.visibilityState === "hidden" || !this.container.offsetParent || this._getVisiblePages().views.length === 0) {
return;
}
const hiddenCapability = Promise.withResolvers(),
ac = new AbortController();
document.addEventListener("visibilitychange", () => {
if (document.visibilityState === "hidden") {
hiddenCapability.resolve();
}
}, {
signal: AbortSignal.any([signal, ac.signal])
});
await Promise.race([this._onePageRenderedCapability.promise, hiddenCapability.promise]);
ac.abort();
}
function _copyCallback(textLayerMode, event) {
const selection = document.getSelection();
const {
focusNode,
anchorNode
} = selection;
if (anchorNode && focusNode && selection.containsNode(pdf_viewer_classPrivateFieldGet(_hiddenCopyElement, this))) {
if (pdf_viewer_classPrivateFieldGet(_getAllTextInProgress, this) || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) {
stopEvent(event);
return;
}
pdf_viewer_classPrivateFieldSet(_getAllTextInProgress, this, true);
const {
classList
} = this.viewer;
classList.add("copyAll");
const ac = new AbortController();
window.addEventListener("keydown", ev => pdf_viewer_classPrivateFieldSet(_interruptCopyCondition, this, ev.key === "Escape"), {
signal: ac.signal
});
this.getAllText().then(async text => {
if (text !== null) {
await navigator.clipboard.writeText(text);
}
}).catch(reason => {
NgxConsole.warn(`Something goes wrong when extracting the text: ${reason.message}`);
}).finally(() => {
pdf_viewer_classPrivateFieldSet(_getAllTextInProgress, this, false);
pdf_viewer_classPrivateFieldSet(_interruptCopyCondition, this, false);
ac.abort();
classList.remove("copyAll");
});
stopEvent(event);
}
}
function _ensurePageViewVisible() {
if (this._scrollMode !== ScrollMode.PAGE) {
throw new Error("#ensurePageViewVisible: Invalid scrollMode value.");
}
const pageNumber = this._currentPageNumber,
state = pdf_viewer_classPrivateFieldGet(_scrollModePageState, this),
viewer = this.viewer;
viewer.textContent = "";
state.pages.length = 0;
if (this._spreadMode === SpreadMode.NONE && !this.isInPresentationMode) {
const pageView = this._pages[pageNumber - 1];
viewer.append(pageView.div);
state.pages.push(pageView);
} else {
const pageIndexSet = new Set(),
parity = this._spreadMode - 1;
if (parity === -1) {
pageIndexSet.add(pageNumber - 1);
} else if (pageNumber % 2 !== parity) {
pageIndexSet.add(pageNumber - 1);
pageIndexSet.add(pageNumber);
} else {
pageIndexSet.add(pageNumber - 2);
pageIndexSet.add(pageNumber - 1);
}
const spread = document.createElement("div");
spread.className = "spread";
if (this.isInPresentationMode) {
const dummyPage = document.createElement("div");
dummyPage.className = "dummyPage";
spread.append(dummyPage);
}
for (const i of pageIndexSet) {
const pageView = this._pages[i];
if (!pageView) {
continue;
}
spread.append(pageView.div);
state.pages.push(pageView);
}
viewer.append(spread);
}
state.scrollDown = pageNumber >= state.previousPageNumber;
state.previousPageNumber = pageNumber;
}
function _scrollIntoView(pageView) {
let pageSpot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
if (!pageView) {
return;
}
const {
div,
id
} = pageView;
if (this._currentPageNumber !== id) {
this._setCurrentPageNumber(id);
}
if (this._scrollMode === ScrollMode.PAGE) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _ensurePageViewVisible).call(this);
this.update();
}
if (!pageSpot && !this.isInPresentationMode) {
const left = div.offsetLeft + div.clientLeft,
right = left + div.clientWidth;
const {
scrollLeft,
clientWidth
} = this.container;
if (this._scrollMode === ScrollMode.HORIZONTAL || left < scrollLeft || right > scrollLeft + clientWidth) {
pageSpot = {
left: 0,
top: 0
};
}
}
scrollIntoView(div, pageSpot, false, this.pageViewMode === "infinite-scroll");
if (!this._currentScaleValue && this._location) {
this._location = null;
}
}
function _isSameScale(newScale) {
return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15;
}
function _setScaleUpdatePages(newScale, newValue, _ref8) {
let {
noScroll = false,
preset = false,
drawingDelay = -1,
origin = null
} = _ref8;
const previousScale = isNaN(Number(this.currentScale)) ? undefined : Number(this.currentScale);
const previousScaleValue = this.currentScaleValue;
this._currentScaleValue = newValue.toString();
if (pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _isSameScale).call(this, newScale)) {
if (preset) {
this.eventBus.dispatch("scalechanging", {
source: this,
scale: newScale,
presetValue: newValue,
previousScale,
previousPresetValue: previousScaleValue,
noScroll
});
}
return;
}
this.viewer.style.setProperty("--scale-factor", newScale * PixelsPerInch.PDF_TO_CSS_UNITS);
const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;
this.refresh(true, {
scale: newScale,
drawingDelay: postponeDrawing ? drawingDelay : -1
});
if (postponeDrawing) {
pdf_viewer_classPrivateFieldSet(_scaleTimeoutId, this, setTimeout(() => {
pdf_viewer_classPrivateFieldSet(_scaleTimeoutId, this, null);
this.refresh();
}, drawingDelay));
}
this._currentScale = newScale;
if (!noScroll) {
let page = this._currentPageNumber,
dest;
if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
page = this._location.pageNumber;
dest = [null, {
name: "XYZ"
}, this._location.left, this._location.top, null];
}
this.scrollPageIntoView({
pageNumber: page,
destArray: dest,
allowNegativeOffset: true
});
if (Array.isArray(origin)) {
const scaleDiff = newScale / previousScale - 1;
const [top, left] = this.containerTopLeft;
this.container.scrollLeft += (origin[0] - left) * scaleDiff;
this.container.scrollTop += (origin[1] - top) * scaleDiff;
}
}
this.eventBus.dispatch("scalechanging", {
source: this,
scale: newScale,
presetValue: preset ? newValue : undefined,
previousScale,
previousPresetValue: previousScaleValue,
noScroll
});
if (this.defaultRenderingQueue) {
this.update();
}
}
function _get_pageWidthScaleFactor(_this) {
if (_this._spreadMode !== SpreadMode.NONE && _this._scrollMode !== ScrollMode.HORIZONTAL) {
return 2;
}
return 1;
}
function _setScale(value, options) {
if (!value) {
value = "auto";
}
if (this.maxZoom && this.maxZoom === this.minZoom) {
value = this.maxZoom;
}
let scale = parseFloat(value);
if (this._currentScale === scale) {
return;
}
if (scale > 0) {
options.preset = false;
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScaleUpdatePages).call(this, scale, value, options);
} else {
const currentPage = this._pages[this._currentPageNumber - 1];
if (!currentPage) {
return;
}
let hPadding = SCROLLBAR_PADDING,
vPadding = VERTICAL_PADDING;
if (this.isInPresentationMode) {
hPadding = vPadding = 4;
if (this._spreadMode !== SpreadMode.NONE) {
hPadding *= 2;
}
} else if (this.removePageBorders) {
hPadding = vPadding = 0;
} else if (this._scrollMode === ScrollMode.HORIZONTAL) {
[hPadding, vPadding] = [vPadding, hPadding];
}
let pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / pdf_viewer_classPrivateGetter(_PDFViewer_brand, this, _get_pageWidthScaleFactor);
if (this.pageViewMode === "book") {
pageWidthScale /= 2;
}
const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
switch (value) {
case "page-actual":
scale = 1;
break;
case "page-width":
scale = pageWidthScale;
break;
case "page-height":
scale = pageHeightScale;
break;
case "page-fit":
scale = Math.min(pageWidthScale, pageHeightScale);
break;
case "auto":
const horizontalScale = isPortraitOrientation(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
scale = Math.min(MAX_AUTO_SCALE, horizontalScale);
break;
default:
NgxConsole.error(`#setScale: "${value}" is an unknown zoom value.`);
return;
}
options.preset = true;
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScaleUpdatePages).call(this, scale, value, options);
}
}
function _resetCurrentPageView() {
const pageView = this._pages[this._currentPageNumber - 1];
if (this.isInPresentationMode) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _setScale).call(this, this._currentScaleValue, {
noScroll: true
});
}
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _scrollIntoView).call(this, pageView);
}
function _switchToEditAnnotationMode() {
const visible = this._getVisiblePages();
const pagesToRefresh = [];
const {
ids,
views
} = visible;
for (const page of views) {
const {
view
} = page;
if (!view.hasEditableAnnotations()) {
ids.delete(view.id);
continue;
}
pagesToRefresh.push(page);
}
if (pagesToRefresh.length === 0) {
return null;
}
this.renderingQueue.renderHighestPriority({
first: pagesToRefresh[0],
last: pagesToRefresh.at(-1),
views: pagesToRefresh,
ids
});
return ids;
}
async function pdf_viewer_ensurePdfPageLoaded(pageView) {
if (pageView.pdfPage) {
return pageView.pdfPage;
}
try {
const pdfPage = await this.pdfDocument.getPage(pageView.id);
if (!pageView.pdfPage) {
pageView.setPdfPage(pdfPage);
}
return pdfPage;
} catch (reason) {
NgxConsole.error("Unable to get page for page view", reason);
return null;
}
}
function pdf_viewer_getScrollAhead(visible) {
if (visible.first?.id === 1) {
return true;
} else if (visible.last?.id === this.pagesCount) {
return false;
}
switch (this._scrollMode) {
case ScrollMode.PAGE:
return pdf_viewer_classPrivateFieldGet(_scrollModePageState, this).scrollDown;
case ScrollMode.HORIZONTAL:
return this.scroll.right;
}
return this.scroll.down;
}
function _updateContainerHeightCss() {
let height = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.container.clientHeight;
if (height !== pdf_viewer_classPrivateFieldGet(_previousContainerHeight, this)) {
pdf_viewer_classPrivateFieldSet(_previousContainerHeight, this, height);
docStyle.setProperty("--viewer-container-height", `${height}px`);
}
}
function pdf_viewer_resizeObserverCallback(entries) {
for (const entry of entries) {
if (entry.target === this.container) {
pdf_viewer_assertClassBrand(_PDFViewer_brand, this, _updateContainerHeightCss).call(this, Math.floor(entry.borderBoxSize[0].blockSize));
pdf_viewer_classPrivateFieldSet(_containerTopLeft, this, null);
break;
}
}
}
function _cleanupTimeouts() {
if (pdf_viewer_classPrivateFieldGet(_scaleTimeoutId, this) !== null) {
clearTimeout(pdf_viewer_classPrivateFieldGet(_scaleTimeoutId, this));
pdf_viewer_classPrivateFieldSet(_scaleTimeoutId, this, null);
}
if (pdf_viewer_classPrivateFieldGet(_scrollTimeoutId, this) !== null) {
clearTimeout(pdf_viewer_classPrivateFieldGet(_scrollTimeoutId, this));
pdf_viewer_classPrivateFieldSet(_scrollTimeoutId, this, null);
}
}
function _cleanupSwitchAnnotationEditorMode() {
pdf_viewer_classPrivateFieldGet(_switchAnnotationEditorModeAC, this)?.abort();
pdf_viewer_classPrivateFieldSet(_switchAnnotationEditorModeAC, this, null);
if (pdf_viewer_classPrivateFieldGet(_switchAnnotationEditorModeTimeoutId, this) !== null) {
clearTimeout(pdf_viewer_classPrivateFieldGet(_switchAnnotationEditorModeTimeoutId, this));
pdf_viewer_classPrivateFieldSet(_switchAnnotationEditorModeTimeoutId, this, null);
}
}
function _preloadEditingData(mode) {
switch (mode) {
case AnnotationEditorType.STAMP:
pdf_viewer_classPrivateFieldGet(pdf_viewer_mlManager, this)?.loadModel("altText");
break;
case AnnotationEditorType.SIGNATURE:
pdf_viewer_classPrivateFieldGet(pdf_viewer_signatureManager, this)?.loadSignatures();
break;
}
}
;// ./web/secondary_toolbar.js
function secondary_toolbar_classPrivateMethodInitSpec(e, a) { secondary_toolbar_checkPrivateRedeclaration(e, a), a.add(e); }
function secondary_toolbar_classPrivateFieldInitSpec(e, t, a) { secondary_toolbar_checkPrivateRedeclaration(e, t), t.set(e, a); }
function secondary_toolbar_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function secondary_toolbar_classPrivateFieldGet(s, a) { return s.get(secondary_toolbar_assertClassBrand(s, a)); }
function secondary_toolbar_classPrivateFieldSet(s, a, r) { return s.set(secondary_toolbar_assertClassBrand(s, a), r), r; }
function secondary_toolbar_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var secondary_toolbar_opts = /*#__PURE__*/new WeakMap();
var _SecondaryToolbar_brand = /*#__PURE__*/new WeakSet();
class SecondaryToolbar {
constructor(options, _eventBus) {
secondary_toolbar_classPrivateMethodInitSpec(this, _SecondaryToolbar_brand);
secondary_toolbar_classPrivateFieldInitSpec(this, secondary_toolbar_opts, void 0);
secondary_toolbar_classPrivateFieldSet(secondary_toolbar_opts, this, options);
const _buttons = [{
element: options.presentationModeButton,
eventName: "presentationmode",
close: true
}, {
element: options.printButton,
eventName: "print",
close: true
}, {
element: options.downloadButton,
eventName: "download",
close: true
}, {
element: options.viewBookmarkButton,
eventName: null,
close: true
}, {
element: options.firstPageButton,
eventName: "firstpage",
close: true
}, {
element: options.lastPageButton,
eventName: "lastpage",
close: true
}, {
element: options.pageRotateCwButton,
eventName: "rotatecw",
close: false
}, {
element: options.pageRotateCcwButton,
eventName: "rotateccw",
close: false
}, {
element: options.cursorSelectToolButton,
eventName: "switchcursortool",
eventDetails: {
tool: CursorTool.SELECT
},
close: true
}, {
element: options.cursorHandToolButton,
eventName: "switchcursortool",
eventDetails: {
tool: CursorTool.HAND
},
close: true
}, {
element: options.scrollPageButton,
eventName: "switchscrollmode",
eventDetails: {
mode: ScrollMode.PAGE
},
close: true
}, {
element: options.scrollVerticalButton,
eventName: "switchscrollmode",
eventDetails: {
mode: ScrollMode.VERTICAL
},
close: true
}, {
element: options.scrollHorizontalButton,
eventName: "switchscrollmode",
eventDetails: {
mode: ScrollMode.HORIZONTAL
},
close: true
}, {
element: options.scrollWrappedButton,
eventName: "switchscrollmode",
eventDetails: {
mode: ScrollMode.WRAPPED
},
close: true
}, {
element: options.spreadNoneButton,
eventName: "switchspreadmode",
eventDetails: {
mode: SpreadMode.NONE
},
close: true
}, {
element: options.spreadOddButton,
eventName: "switchspreadmode",
eventDetails: {
mode: SpreadMode.ODD
},
close: true
}, {
element: options.spreadEvenButton,
eventName: "switchspreadmode",
eventDetails: {
mode: SpreadMode.EVEN
},
close: true
}, {
element: options.imageAltTextSettingsButton,
eventName: "imagealttextsettings",
close: true
}, {
element: options.documentPropertiesButton,
eventName: "documentproperties",
close: true
}];
_buttons.push({
element: options.openFileButton,
eventName: "openfile",
close: true
});
this.eventBus = _eventBus;
this.opened = false;
secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, secondary_toolbar_bindListeners).call(this, _buttons);
this.reset();
}
get isOpen() {
return this.opened;
}
setPageNumber(pageNumber) {
this.pageNumber = pageNumber;
secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, secondary_toolbar_updateUIState).call(this);
}
setPagesCount(pagesCount) {
this.pagesCount = pagesCount;
secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, secondary_toolbar_updateUIState).call(this);
}
reset() {
this.pageNumber = 0;
this.pagesCount = 0;
secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, secondary_toolbar_updateUIState).call(this);
this.eventBus.dispatch("switchcursortool", {
source: this,
reset: true
});
secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, _scrollModeChanged).call(this, {
mode: ScrollMode.VERTICAL
});
secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, _spreadModeChanged).call(this, {
mode: SpreadMode.NONE
});
}
open() {
if (this.opened) {
return;
}
this.opened = true;
const {
toggleButton,
toolbar
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
toggleExpandedBtn(toggleButton, true, toolbar);
}
close() {
if (!this.opened) {
return;
}
this.opened = false;
const {
toggleButton,
toolbar
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
toggleExpandedBtn(toggleButton, false, toolbar);
}
toggle() {
if (this.opened) {
this.close();
} else {
this.open();
}
}
}
function secondary_toolbar_updateUIState() {
const {
firstPageButton,
lastPageButton,
pageRotateCwButton,
pageRotateCcwButton
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
firstPageButton.disabled = this.pageNumber <= 1;
lastPageButton.disabled = this.pageNumber >= this.pagesCount;
pageRotateCwButton.disabled = this.pagesCount === 0;
pageRotateCcwButton.disabled = this.pagesCount === 0;
}
function secondary_toolbar_bindListeners(buttons) {
const {
eventBus
} = this;
const {
toggleButton
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
toggleButton.addEventListener("click", this.toggle.bind(this));
for (const {
element,
eventName,
close,
eventDetails
} of buttons) {
if (!element) {
continue;
}
element.addEventListener("click", evt => {
if (eventName !== null) {
eventBus.dispatch(eventName, {
source: this,
...eventDetails
});
}
if (close) {
this.close();
}
eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "buttons",
data: {
id: element.id
}
}
});
});
}
eventBus._on("cursortoolchanged", secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, _cursorToolChanged).bind(this));
eventBus._on("scrollmodechanged", secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, _scrollModeChanged).bind(this));
eventBus._on("spreadmodechanged", secondary_toolbar_assertClassBrand(_SecondaryToolbar_brand, this, _spreadModeChanged).bind(this));
}
function _cursorToolChanged(_ref) {
let {
tool,
disabled
} = _ref;
const {
cursorSelectToolButton,
cursorHandToolButton
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT);
toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND);
cursorSelectToolButton.disabled = disabled;
cursorHandToolButton.disabled = disabled;
}
function _scrollModeChanged(_ref2) {
let {
mode
} = _ref2;
const {
scrollPageButton,
scrollVerticalButton,
scrollHorizontalButton,
scrollWrappedButton,
spreadNoneButton,
spreadOddButton,
spreadEvenButton
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
toggleCheckedBtn(scrollPageButton, mode === ScrollMode.PAGE);
toggleCheckedBtn(scrollVerticalButton, mode === ScrollMode.VERTICAL);
toggleCheckedBtn(scrollHorizontalButton, mode === ScrollMode.HORIZONTAL);
toggleCheckedBtn(scrollWrappedButton, mode === ScrollMode.WRAPPED);
const forceScrollModePage = this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE;
scrollPageButton.disabled = forceScrollModePage;
scrollVerticalButton.disabled = forceScrollModePage;
scrollHorizontalButton.disabled = forceScrollModePage;
scrollWrappedButton.disabled = forceScrollModePage;
const isHorizontal = mode === ScrollMode.HORIZONTAL;
spreadNoneButton.disabled = isHorizontal;
spreadOddButton.disabled = isHorizontal;
spreadEvenButton.disabled = isHorizontal;
}
function _spreadModeChanged(_ref3) {
let {
mode
} = _ref3;
const {
spreadNoneButton,
spreadOddButton,
spreadEvenButton
} = secondary_toolbar_classPrivateFieldGet(secondary_toolbar_opts, this);
toggleCheckedBtn(spreadNoneButton, mode === SpreadMode.NONE);
toggleCheckedBtn(spreadOddButton, mode === SpreadMode.ODD);
toggleCheckedBtn(spreadEvenButton, mode === SpreadMode.EVEN);
}
;// ./web/signature_manager.js
function signature_manager_classPrivateMethodInitSpec(e, a) { signature_manager_checkPrivateRedeclaration(e, a), a.add(e); }
function signature_manager_classPrivateFieldInitSpec(e, t, a) { signature_manager_checkPrivateRedeclaration(e, t), t.set(e, a); }
function signature_manager_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function signature_manager_classPrivateFieldGet(s, a) { return s.get(signature_manager_assertClassBrand(s, a)); }
function signature_manager_classPrivateFieldSet(s, a, r) { return s.set(signature_manager_assertClassBrand(s, a), r), r; }
function signature_manager_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
const DEFAULT_HEIGHT_IN_PAGE = 40;
var _addButton = /*#__PURE__*/new WeakMap();
var _tabsToAltText = /*#__PURE__*/new WeakMap();
var _clearButton = /*#__PURE__*/new WeakMap();
var _clearDescription = /*#__PURE__*/new WeakMap();
var signature_manager_currentEditor = /*#__PURE__*/new WeakMap();
var signature_manager_description = /*#__PURE__*/new WeakMap();
var signature_manager_dialog = /*#__PURE__*/new WeakMap();
var _drawCurves = /*#__PURE__*/new WeakMap();
var _drawPlaceholder = /*#__PURE__*/new WeakMap();
var _drawPath = /*#__PURE__*/new WeakMap();
var _drawPathString = /*#__PURE__*/new WeakMap();
var _drawPoints = /*#__PURE__*/new WeakMap();
var _drawSVG = /*#__PURE__*/new WeakMap();
var _drawThickness = /*#__PURE__*/new WeakMap();
var _errorBar = /*#__PURE__*/new WeakMap();
var _extractedSignatureData = /*#__PURE__*/new WeakMap();
var _imagePath = /*#__PURE__*/new WeakMap();
var _imagePicker = /*#__PURE__*/new WeakMap();
var _imagePickerLink = /*#__PURE__*/new WeakMap();
var _imagePlaceholder = /*#__PURE__*/new WeakMap();
var _imageSVG = /*#__PURE__*/new WeakMap();
var _saveCheckbox = /*#__PURE__*/new WeakMap();
var _saveContainer = /*#__PURE__*/new WeakMap();
var _tabButtons = /*#__PURE__*/new WeakMap();
var _addSignatureToolbarButton = /*#__PURE__*/new WeakMap();
var _loadSignaturesPromise = /*#__PURE__*/new WeakMap();
var _typeInput = /*#__PURE__*/new WeakMap();
var _currentTab = /*#__PURE__*/new WeakMap();
var _currentTabAC = /*#__PURE__*/new WeakMap();
var _hasDescriptionChanged = /*#__PURE__*/new WeakMap();
var signature_manager_eventBus = /*#__PURE__*/new WeakMap();
var signature_manager_l10n = /*#__PURE__*/new WeakMap();
var signature_manager_overlayManager = /*#__PURE__*/new WeakMap();
var _editDescriptionDialog = /*#__PURE__*/new WeakMap();
var _signatureStorage = /*#__PURE__*/new WeakMap();
var signature_manager_uiManager = /*#__PURE__*/new WeakMap();
var _SignatureManager_brand = /*#__PURE__*/new WeakSet();
class SignatureManager {
constructor(_ref, editSignatureElements, addSignatureToolbarButton, overlayManager, l10n, signatureStorage, eventBus) {
let {
dialog,
panels: _panels,
typeButton: _typeButton,
typeInput,
drawButton: _drawButton,
drawPlaceholder,
drawSVG,
drawThickness,
imageButton: _imageButton,
imageSVG,
imagePlaceholder,
imagePicker,
imagePickerLink,
description: _description2,
clearButton,
cancelButton,
addButton,
errorCloseButton,
errorBar,
saveCheckbox,
saveContainer
} = _ref;
signature_manager_classPrivateMethodInitSpec(this, _SignatureManager_brand);
signature_manager_classPrivateFieldInitSpec(this, _addButton, void 0);
signature_manager_classPrivateFieldInitSpec(this, _tabsToAltText, null);
signature_manager_classPrivateFieldInitSpec(this, _clearButton, void 0);
signature_manager_classPrivateFieldInitSpec(this, _clearDescription, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_currentEditor, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_description, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_dialog, void 0);
signature_manager_classPrivateFieldInitSpec(this, _drawCurves, null);
signature_manager_classPrivateFieldInitSpec(this, _drawPlaceholder, void 0);
signature_manager_classPrivateFieldInitSpec(this, _drawPath, null);
signature_manager_classPrivateFieldInitSpec(this, _drawPathString, "");
signature_manager_classPrivateFieldInitSpec(this, _drawPoints, null);
signature_manager_classPrivateFieldInitSpec(this, _drawSVG, void 0);
signature_manager_classPrivateFieldInitSpec(this, _drawThickness, void 0);
signature_manager_classPrivateFieldInitSpec(this, _errorBar, void 0);
signature_manager_classPrivateFieldInitSpec(this, _extractedSignatureData, null);
signature_manager_classPrivateFieldInitSpec(this, _imagePath, null);
signature_manager_classPrivateFieldInitSpec(this, _imagePicker, void 0);
signature_manager_classPrivateFieldInitSpec(this, _imagePickerLink, void 0);
signature_manager_classPrivateFieldInitSpec(this, _imagePlaceholder, void 0);
signature_manager_classPrivateFieldInitSpec(this, _imageSVG, void 0);
signature_manager_classPrivateFieldInitSpec(this, _saveCheckbox, void 0);
signature_manager_classPrivateFieldInitSpec(this, _saveContainer, void 0);
signature_manager_classPrivateFieldInitSpec(this, _tabButtons, void 0);
signature_manager_classPrivateFieldInitSpec(this, _addSignatureToolbarButton, void 0);
signature_manager_classPrivateFieldInitSpec(this, _loadSignaturesPromise, null);
signature_manager_classPrivateFieldInitSpec(this, _typeInput, void 0);
signature_manager_classPrivateFieldInitSpec(this, _currentTab, null);
signature_manager_classPrivateFieldInitSpec(this, _currentTabAC, null);
signature_manager_classPrivateFieldInitSpec(this, _hasDescriptionChanged, false);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_eventBus, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_l10n, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_overlayManager, void 0);
signature_manager_classPrivateFieldInitSpec(this, _editDescriptionDialog, void 0);
signature_manager_classPrivateFieldInitSpec(this, _signatureStorage, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_uiManager, null);
signature_manager_classPrivateFieldSet(_addButton, this, addButton);
signature_manager_classPrivateFieldSet(_clearButton, this, clearButton);
signature_manager_classPrivateFieldSet(_clearDescription, this, _description2.lastElementChild);
signature_manager_classPrivateFieldSet(signature_manager_description, this, _description2.firstElementChild);
signature_manager_classPrivateFieldSet(signature_manager_dialog, this, dialog);
signature_manager_classPrivateFieldSet(_drawSVG, this, drawSVG);
signature_manager_classPrivateFieldSet(_drawPlaceholder, this, drawPlaceholder);
signature_manager_classPrivateFieldSet(_drawThickness, this, drawThickness);
signature_manager_classPrivateFieldSet(_errorBar, this, errorBar);
signature_manager_classPrivateFieldSet(_imageSVG, this, imageSVG);
signature_manager_classPrivateFieldSet(_imagePlaceholder, this, imagePlaceholder);
signature_manager_classPrivateFieldSet(_imagePicker, this, imagePicker);
signature_manager_classPrivateFieldSet(_imagePickerLink, this, imagePickerLink);
signature_manager_classPrivateFieldSet(signature_manager_overlayManager, this, overlayManager);
signature_manager_classPrivateFieldSet(_saveCheckbox, this, saveCheckbox);
signature_manager_classPrivateFieldSet(_saveContainer, this, saveContainer);
signature_manager_classPrivateFieldSet(_addSignatureToolbarButton, this, addSignatureToolbarButton);
signature_manager_classPrivateFieldSet(_typeInput, this, typeInput);
signature_manager_classPrivateFieldSet(signature_manager_l10n, this, l10n);
signature_manager_classPrivateFieldSet(_signatureStorage, this, signatureStorage);
signature_manager_classPrivateFieldSet(signature_manager_eventBus, this, eventBus);
signature_manager_classPrivateFieldSet(_editDescriptionDialog, this, new EditDescriptionDialog(editSignatureElements, overlayManager));
_l10nDescription._ || (_l10nDescription._ = Object.freeze({
signature: "pdfjs-editor-add-signature-description-default-when-drawing"
}));
dialog.addEventListener("close", signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_close).bind(this));
dialog.addEventListener("contextmenu", e => {
const {
target
} = e;
if (target !== signature_manager_classPrivateFieldGet(_typeInput, this) && target !== signature_manager_classPrivateFieldGet(signature_manager_description, this)) {
e.preventDefault();
}
});
dialog.addEventListener("drop", e => {
stopEvent(e);
});
cancelButton.addEventListener("click", signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_cancel).bind(this));
addButton.addEventListener("click", signature_manager_assertClassBrand(_SignatureManager_brand, this, _add).bind(this));
clearButton.addEventListener("click", () => {
signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_reportTelemetry).call(this, {
type: "signature",
action: "pdfjs.signature.clear",
data: {
type: signature_manager_classPrivateFieldGet(_currentTab, this)
}
});
signature_manager_assertClassBrand(_SignatureManager_brand, this, _initTab).call(this, null);
}, {
passive: true
});
signature_manager_classPrivateFieldGet(signature_manager_description, this).addEventListener("input", () => {
signature_manager_classPrivateFieldGet(_clearDescription, this).disabled = signature_manager_classPrivateFieldGet(signature_manager_description, this).value === "";
}, {
passive: true
});
signature_manager_classPrivateFieldGet(_clearDescription, this).addEventListener("click", () => {
signature_manager_classPrivateFieldGet(signature_manager_description, this).value = "";
signature_manager_classPrivateFieldGet(_clearDescription, this).disabled = true;
}, {
passive: true
});
errorCloseButton.addEventListener("click", () => {
errorBar.hidden = true;
}, {
passive: true
});
signature_manager_assertClassBrand(_SignatureManager_brand, this, _initTabButtons).call(this, _typeButton, _drawButton, _imageButton, _panels);
imagePicker.accept = SupportedImageMimeTypes.join(",");
eventBus._on("storedsignatureschanged", signature_manager_assertClassBrand(_SignatureManager_brand, this, _signaturesChanged).bind(this));
overlayManager.register(dialog);
}
getSignature(params) {
return this.open(params);
}
async loadSignatures() {
let reload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!signature_manager_classPrivateFieldGet(_addSignatureToolbarButton, this) || !reload && signature_manager_classPrivateFieldGet(_addSignatureToolbarButton, this).previousElementSibling || !signature_manager_classPrivateFieldGet(_signatureStorage, this)) {
return;
}
if (!signature_manager_classPrivateFieldGet(_loadSignaturesPromise, this)) {
signature_manager_classPrivateFieldSet(_loadSignaturesPromise, this, signature_manager_classPrivateFieldGet(_signatureStorage, this).getAll().then(async signatures => [signatures, await Promise.all(Array.from(signatures.values(), _ref2 => {
let {
signatureData
} = _ref2;
return SignatureExtractor.decompressSignature(signatureData);
}))]));
if (!reload) {
return;
}
}
const [signatures, signaturesData] = await signature_manager_classPrivateFieldGet(_loadSignaturesPromise, this);
signature_manager_classPrivateFieldSet(_loadSignaturesPromise, this, null);
let i = 0;
for (const [uuid, {
description
}] of signatures) {
const data = signaturesData[i++];
if (!data) {
continue;
}
data.curves = data.outlines.map(points => ({
points
}));
delete data.outlines;
signature_manager_assertClassBrand(_SignatureManager_brand, this, _addToolbarButton).call(this, data, uuid, description);
}
}
async renderEditButton(editor) {
const button = document.createElement("button");
button.classList.add("altText", "editDescription");
button.tabIndex = 0;
button.title = editor.description;
const span = document.createElement("span");
button.append(span);
span.setAttribute("data-l10n-id", "pdfjs-editor-add-signature-edit-button-label");
button.addEventListener("click", () => {
signature_manager_classPrivateFieldGet(_editDescriptionDialog, this).open(editor);
}, {
passive: true
});
return button;
}
async open(_ref3) {
let {
uiManager,
editor
} = _ref3;
signature_manager_classPrivateFieldGet(_tabsToAltText, this) || signature_manager_classPrivateFieldSet(_tabsToAltText, this, new Map(signature_manager_classPrivateFieldGet(_tabButtons, this).keys().map(name => [name, {
value: "",
default: ""
}])));
signature_manager_classPrivateFieldSet(signature_manager_uiManager, this, uiManager);
signature_manager_classPrivateFieldSet(signature_manager_currentEditor, this, editor);
signature_manager_classPrivateFieldGet(signature_manager_uiManager, this).removeEditListeners();
const isStorageFull = await signature_manager_classPrivateFieldGet(_signatureStorage, this).isFull();
signature_manager_classPrivateFieldGet(_saveContainer, this).classList.toggle("fullStorage", isStorageFull);
signature_manager_classPrivateFieldGet(_saveCheckbox, this).checked = !isStorageFull;
await signature_manager_classPrivateFieldGet(signature_manager_overlayManager, this).open(signature_manager_classPrivateFieldGet(signature_manager_dialog, this));
const tabType = signature_manager_classPrivateFieldGet(_tabButtons, this).get("type");
tabType.focus();
tabType.click();
}
destroy() {
signature_manager_classPrivateFieldSet(signature_manager_uiManager, this, null);
signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_finish).call(this);
}
}
function _initTabButtons(typeButton, drawButton, imageButton, panels) {
const buttons = signature_manager_classPrivateFieldSet(_tabButtons, this, new Map([["type", typeButton], ["draw", drawButton], ["image", imageButton]]));
const tabCallback = e => {
for (const [name, button] of buttons) {
if (button === e.target) {
button.setAttribute("aria-selected", true);
button.setAttribute("tabindex", 0);
panels.setAttribute("data-selected", name);
signature_manager_assertClassBrand(_SignatureManager_brand, this, _initTab).call(this, name);
} else {
button.setAttribute("aria-selected", false);
button.setAttribute("tabindex", -1);
}
}
};
const buttonsArray = Array.from(buttons.values());
for (let i = 0, ii = buttonsArray.length; i < ii; i++) {
const button = buttonsArray[i];
button.addEventListener("click", tabCallback, {
passive: true
});
button.addEventListener("keydown", _ref5 => {
let {
key
} = _ref5;
if (key !== "ArrowLeft" && key !== "ArrowRight") {
return;
}
buttonsArray[i + (key === "ArrowLeft" ? -1 : 1)]?.focus();
}, {
passive: true
});
}
}
function _resetCommon() {
signature_manager_classPrivateFieldSet(_hasDescriptionChanged, this, false);
signature_manager_classPrivateFieldGet(signature_manager_description, this).value = "";
if (signature_manager_classPrivateFieldGet(_currentTab, this)) {
signature_manager_classPrivateFieldGet(_tabsToAltText, this).get(signature_manager_classPrivateFieldGet(_currentTab, this)).value = "";
}
}
function _resetTab(name) {
switch (name) {
case "type":
signature_manager_classPrivateFieldGet(_typeInput, this).value = "";
break;
case "draw":
signature_manager_classPrivateFieldSet(_drawCurves, this, null);
signature_manager_classPrivateFieldSet(_drawPoints, this, null);
signature_manager_classPrivateFieldSet(_drawPathString, this, "");
signature_manager_classPrivateFieldGet(_drawPath, this)?.remove();
signature_manager_classPrivateFieldSet(_drawPath, this, null);
signature_manager_classPrivateFieldGet(_drawPlaceholder, this).hidden = false;
signature_manager_classPrivateFieldGet(_drawThickness, this).value = 1;
break;
case "image":
signature_manager_classPrivateFieldGet(_imagePlaceholder, this).hidden = false;
signature_manager_classPrivateFieldGet(_imagePath, this)?.remove();
signature_manager_classPrivateFieldSet(_imagePath, this, null);
break;
}
}
function _initTab(name) {
if (name && signature_manager_classPrivateFieldGet(_currentTab, this) === name) {
return;
}
if (signature_manager_classPrivateFieldGet(_currentTab, this)) {
signature_manager_classPrivateFieldGet(_tabsToAltText, this).get(signature_manager_classPrivateFieldGet(_currentTab, this)).value = signature_manager_classPrivateFieldGet(signature_manager_description, this).value;
}
if (name) {
signature_manager_classPrivateFieldSet(_currentTab, this, name);
}
signature_manager_classPrivateFieldGet(_errorBar, this).hidden = true;
const reset = !name;
if (reset) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _resetCommon).call(this);
} else {
signature_manager_classPrivateFieldGet(signature_manager_description, this).value = signature_manager_classPrivateFieldGet(_tabsToAltText, this).get(signature_manager_classPrivateFieldGet(_currentTab, this)).value;
}
signature_manager_classPrivateFieldGet(_clearDescription, this).disabled = signature_manager_classPrivateFieldGet(signature_manager_description, this).value === "";
signature_manager_classPrivateFieldGet(_currentTabAC, this)?.abort();
signature_manager_classPrivateFieldSet(_currentTabAC, this, new AbortController());
switch (signature_manager_classPrivateFieldGet(_currentTab, this)) {
case "type":
signature_manager_assertClassBrand(_SignatureManager_brand, this, _initTypeTab).call(this, reset);
break;
case "draw":
signature_manager_assertClassBrand(_SignatureManager_brand, this, _initDrawTab).call(this, reset);
break;
case "image":
signature_manager_assertClassBrand(_SignatureManager_brand, this, _initImageTab).call(this, reset);
break;
}
}
function _disableButtons(value) {
signature_manager_classPrivateFieldGet(_saveCheckbox, this).disabled = signature_manager_classPrivateFieldGet(_clearButton, this).disabled = signature_manager_classPrivateFieldGet(_addButton, this).disabled = signature_manager_classPrivateFieldGet(signature_manager_description, this).disabled = !value;
}
function _initTypeTab(reset) {
if (reset) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _resetTab).call(this, "type");
}
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, signature_manager_classPrivateFieldGet(_typeInput, this).value);
const {
signal
} = signature_manager_classPrivateFieldGet(_currentTabAC, this);
const options = {
passive: true,
signal
};
signature_manager_classPrivateFieldGet(_typeInput, this).addEventListener("input", () => {
const {
value
} = signature_manager_classPrivateFieldGet(_typeInput, this);
if (!signature_manager_classPrivateFieldGet(_hasDescriptionChanged, this)) {
signature_manager_classPrivateFieldGet(_tabsToAltText, this).get("type").default = signature_manager_classPrivateFieldGet(signature_manager_description, this).value = value;
signature_manager_classPrivateFieldGet(_clearDescription, this).disabled = value === "";
}
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, value);
}, options);
signature_manager_classPrivateFieldGet(signature_manager_description, this).addEventListener("input", () => {
signature_manager_classPrivateFieldSet(_hasDescriptionChanged, this, signature_manager_classPrivateFieldGet(_typeInput, this).value !== signature_manager_classPrivateFieldGet(signature_manager_description, this).value);
}, options);
}
function _initDrawTab(reset) {
if (reset) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _resetTab).call(this, "draw");
}
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, signature_manager_classPrivateFieldGet(_drawPath, this));
const {
signal
} = signature_manager_classPrivateFieldGet(_currentTabAC, this);
const options = {
signal
};
let currentPointerId = NaN;
const drawCallback = e => {
const {
pointerId
} = e;
if (!isNaN(currentPointerId) && currentPointerId !== pointerId) {
return;
}
currentPointerId = pointerId;
e.preventDefault();
signature_manager_classPrivateFieldGet(_drawSVG, this).setPointerCapture(pointerId);
const {
width: drawWidth,
height: drawHeight
} = signature_manager_classPrivateFieldGet(_drawSVG, this).getBoundingClientRect();
let {
offsetX,
offsetY
} = e;
offsetX = Math.round(offsetX);
offsetY = Math.round(offsetY);
if (e.target === signature_manager_classPrivateFieldGet(_drawPlaceholder, this)) {
signature_manager_classPrivateFieldGet(_drawPlaceholder, this).hidden = true;
}
if (!signature_manager_classPrivateFieldGet(_drawCurves, this)) {
signature_manager_classPrivateFieldSet(_drawCurves, this, {
width: drawWidth,
height: drawHeight,
thickness: parseInt(signature_manager_classPrivateFieldGet(_drawThickness, this).value),
curves: []
});
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, true);
const svgFactory = new DOMSVGFactory();
const path = signature_manager_classPrivateFieldSet(_drawPath, this, svgFactory.createElement("path"));
path.setAttribute("stroke-width", signature_manager_classPrivateFieldGet(_drawThickness, this).value);
signature_manager_classPrivateFieldGet(_drawSVG, this).append(path);
signature_manager_classPrivateFieldGet(_drawSVG, this).addEventListener("pointerdown", drawCallback, options);
signature_manager_classPrivateFieldGet(_drawPlaceholder, this).removeEventListener("pointerdown", drawCallback);
if (signature_manager_classPrivateFieldGet(signature_manager_description, this).value === "") {
signature_manager_classPrivateFieldGet(signature_manager_l10n, this).get(_l10nDescription._.signature).then(description => {
signature_manager_classPrivateFieldGet(_tabsToAltText, this).get("draw").default = description;
signature_manager_classPrivateFieldGet(signature_manager_description, this).value ||= description;
signature_manager_classPrivateFieldGet(_clearDescription, this).disabled = signature_manager_classPrivateFieldGet(signature_manager_description, this).value === "";
});
}
}
signature_manager_classPrivateFieldSet(_drawPoints, this, [offsetX, offsetY]);
signature_manager_classPrivateFieldGet(_drawCurves, this).curves.push({
points: signature_manager_classPrivateFieldGet(_drawPoints, this)
});
signature_manager_classPrivateFieldSet(_drawPathString, this, signature_manager_classPrivateFieldGet(_drawPathString, this) + `M ${offsetX} ${offsetY}`);
signature_manager_classPrivateFieldGet(_drawPath, this).setAttribute("d", signature_manager_classPrivateFieldGet(_drawPathString, this));
const finishDrawAC = new AbortController();
const listenerDrawOptions = {
signal: AbortSignal.any([signal, finishDrawAC.signal])
};
signature_manager_classPrivateFieldGet(_drawSVG, this).addEventListener("contextmenu", noContextMenu, listenerDrawOptions);
signature_manager_classPrivateFieldGet(_drawSVG, this).addEventListener("pointermove", evt => {
evt.preventDefault();
let {
offsetX: x,
offsetY: y
} = evt;
x = Math.round(x);
y = Math.round(y);
const drawPoints = signature_manager_classPrivateFieldGet(_drawPoints, this);
if (x < 0 || y < 0 || x > drawWidth || y > drawHeight || x === drawPoints.at(-2) && y === drawPoints.at(-1)) {
return;
}
if (drawPoints.length >= 4) {
const [x1, y1, x2, y2] = drawPoints.slice(-4);
signature_manager_classPrivateFieldSet(_drawPathString, this, signature_manager_classPrivateFieldGet(_drawPathString, this) + `C${(x1 + 5 * x2) / 6} ${(y1 + 5 * y2) / 6} ${(5 * x2 + x) / 6} ${(5 * y2 + y) / 6} ${(x2 + x) / 2} ${(y2 + y) / 2}`);
} else {
signature_manager_classPrivateFieldSet(_drawPathString, this, signature_manager_classPrivateFieldGet(_drawPathString, this) + `L${x} ${y}`);
}
drawPoints.push(x, y);
signature_manager_classPrivateFieldGet(_drawPath, this).setAttribute("d", signature_manager_classPrivateFieldGet(_drawPathString, this));
}, listenerDrawOptions);
signature_manager_classPrivateFieldGet(_drawSVG, this).addEventListener("pointerup", evt => {
const {
pointerId: pId
} = evt;
if (!isNaN(currentPointerId) && currentPointerId !== pId) {
return;
}
currentPointerId = NaN;
evt.preventDefault();
signature_manager_classPrivateFieldGet(_drawSVG, this).releasePointerCapture(pId);
finishDrawAC.abort();
if (signature_manager_classPrivateFieldGet(_drawPoints, this).length === 2) {
signature_manager_classPrivateFieldSet(_drawPathString, this, signature_manager_classPrivateFieldGet(_drawPathString, this) + `L${signature_manager_classPrivateFieldGet(_drawPoints, this)[0]} ${signature_manager_classPrivateFieldGet(_drawPoints, this)[1]}`);
signature_manager_classPrivateFieldGet(_drawPath, this).setAttribute("d", signature_manager_classPrivateFieldGet(_drawPathString, this));
}
}, listenerDrawOptions);
};
if (signature_manager_classPrivateFieldGet(_drawCurves, this)) {
signature_manager_classPrivateFieldGet(_drawSVG, this).addEventListener("pointerdown", drawCallback, options);
} else {
signature_manager_classPrivateFieldGet(_drawPlaceholder, this).addEventListener("pointerdown", drawCallback, options);
}
signature_manager_classPrivateFieldGet(_drawThickness, this).addEventListener("input", () => {
const {
value: thickness
} = signature_manager_classPrivateFieldGet(_drawThickness, this);
signature_manager_classPrivateFieldGet(_drawThickness, this).setAttribute("data-l10n-args", JSON.stringify({
thickness
}));
if (!signature_manager_classPrivateFieldGet(_drawCurves, this)) {
return;
}
signature_manager_classPrivateFieldGet(_drawPath, this).setAttribute("stroke-width", thickness);
signature_manager_classPrivateFieldGet(_drawCurves, this).thickness = thickness;
}, options);
}
function _initImageTab(reset) {
if (reset) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _resetTab).call(this, "image");
}
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, signature_manager_classPrivateFieldGet(_imagePath, this));
const {
signal
} = signature_manager_classPrivateFieldGet(_currentTabAC, this);
const options = {
signal
};
const passiveOptions = {
passive: true,
signal
};
signature_manager_classPrivateFieldGet(_imagePickerLink, this).addEventListener("keydown", e => {
const {
key
} = e;
if (key === "Enter" || key === " ") {
stopEvent(e);
signature_manager_classPrivateFieldGet(_imagePicker, this).click();
}
}, options);
signature_manager_classPrivateFieldGet(_imagePicker, this).addEventListener("click", () => {
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", true);
}, passiveOptions);
signature_manager_classPrivateFieldGet(_imagePicker, this).addEventListener("change", async () => {
const file = signature_manager_classPrivateFieldGet(_imagePicker, this).files?.[0];
if (!file || !SupportedImageMimeTypes.includes(file.type)) {
signature_manager_classPrivateFieldGet(_errorBar, this).hidden = false;
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", false);
return;
}
await signature_manager_assertClassBrand(_SignatureManager_brand, this, _extractSignature).call(this, file);
}, passiveOptions);
signature_manager_classPrivateFieldGet(_imagePicker, this).addEventListener("cancel", () => {
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", false);
}, passiveOptions);
signature_manager_classPrivateFieldGet(_imagePlaceholder, this).addEventListener("dragover", e => {
const {
dataTransfer
} = e;
for (const {
type
} of dataTransfer.items) {
if (!SupportedImageMimeTypes.includes(type)) {
continue;
}
dataTransfer.dropEffect = dataTransfer.effectAllowed === "copy" ? "copy" : "move";
stopEvent(e);
return;
}
dataTransfer.dropEffect = "none";
}, options);
signature_manager_classPrivateFieldGet(_imagePlaceholder, this).addEventListener("drop", e => {
const {
dataTransfer: {
files
}
} = e;
if (!files?.length) {
return;
}
for (const file of files) {
if (SupportedImageMimeTypes.includes(file.type)) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _extractSignature).call(this, file);
break;
}
}
stopEvent(e);
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", true);
}, options);
}
async function _extractSignature(file) {
let data;
try {
data = await signature_manager_classPrivateFieldGet(signature_manager_uiManager, this).imageManager.getFromFile(file);
} catch (e) {
console.error("SignatureManager.#extractSignature.", e);
}
if (!data) {
signature_manager_classPrivateFieldGet(_errorBar, this).hidden = false;
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", false);
return;
}
const {
outline
} = signature_manager_classPrivateFieldSet(_extractedSignatureData, this, signature_manager_classPrivateFieldGet(signature_manager_currentEditor, this).getFromImage(data.bitmap));
if (!outline) {
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", false);
return;
}
signature_manager_classPrivateFieldGet(_imagePlaceholder, this).hidden = true;
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, true);
const svgFactory = new DOMSVGFactory();
const path = signature_manager_classPrivateFieldSet(_imagePath, this, svgFactory.createElement("path"));
signature_manager_classPrivateFieldGet(_imageSVG, this).setAttribute("viewBox", outline.viewBox);
signature_manager_classPrivateFieldGet(_imageSVG, this).setAttribute("preserveAspectRatio", "xMidYMid meet");
signature_manager_classPrivateFieldGet(_imageSVG, this).append(path);
path.setAttribute("d", outline.toSVGPath());
signature_manager_classPrivateFieldGet(_tabsToAltText, this).get("image").default = file.name;
if (signature_manager_classPrivateFieldGet(signature_manager_description, this).value === "") {
signature_manager_classPrivateFieldGet(signature_manager_description, this).value = file.name || "";
signature_manager_classPrivateFieldGet(_clearDescription, this).disabled = signature_manager_classPrivateFieldGet(signature_manager_description, this).value === "";
}
signature_manager_classPrivateFieldGet(signature_manager_dialog, this).classList.toggle("waiting", false);
}
function _getOutlineForType() {
return signature_manager_classPrivateFieldGet(signature_manager_currentEditor, this).getFromText(signature_manager_classPrivateFieldGet(_typeInput, this).value, window.getComputedStyle(signature_manager_classPrivateFieldGet(_typeInput, this)));
}
function _getOutlineForDraw() {
const {
width,
height
} = signature_manager_classPrivateFieldGet(_drawSVG, this).getBoundingClientRect();
return signature_manager_classPrivateFieldGet(signature_manager_currentEditor, this).getDrawnSignature(signature_manager_classPrivateFieldGet(_drawCurves, this), width, height);
}
function signature_manager_reportTelemetry(data) {
signature_manager_classPrivateFieldGet(signature_manager_eventBus, this).dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data
}
});
}
function _addToolbarButton(signatureData, uuid, description) {
const {
curves,
areContours,
thickness,
width,
height
} = signatureData;
const maxDim = Math.max(width, height);
const outlineData = SignatureExtractor.processDrawnLines({
lines: {
curves,
thickness,
width,
height
},
pageWidth: maxDim,
pageHeight: maxDim,
rotation: 0,
innerMargin: 0,
mustSmooth: false,
areContours
});
if (!outlineData) {
return;
}
const {
outline
} = outlineData;
const svgFactory = new DOMSVGFactory();
const div = document.createElement("div");
const button = document.createElement("button");
button.addEventListener("click", () => {
signature_manager_classPrivateFieldGet(signature_manager_eventBus, this).dispatch("switchannotationeditorparams", {
source: this,
type: AnnotationEditorParamsType.CREATE,
value: {
signatureData: {
lines: {
curves,
thickness,
width,
height
},
mustSmooth: false,
areContours,
description,
uuid,
heightInPage: DEFAULT_HEIGHT_IN_PAGE
}
}
});
});
div.append(button);
div.classList.add("toolbarAddSignatureButtonContainer");
const svg = svgFactory.create(1, 1, true);
button.append(svg);
const span = document.createElement("span");
span.ariaHidden = true;
button.append(span);
button.classList.add("toolbarAddSignatureButton");
button.type = "button";
span.textContent = description;
button.setAttribute("data-l10n-id", "pdfjs-editor-add-saved-signature-button");
button.setAttribute("data-l10n-args", JSON.stringify({
description
}));
button.tabIndex = 0;
const path = svgFactory.createElement("path");
svg.append(path);
svg.setAttribute("viewBox", outline.viewBox);
svg.setAttribute("preserveAspectRatio", "xMidYMid meet");
if (areContours) {
path.classList.add("contours");
}
path.setAttribute("d", outline.toSVGPath());
const deleteButton = document.createElement("button");
div.append(deleteButton);
deleteButton.classList.add("toolbarButton", "deleteButton");
deleteButton.setAttribute("data-l10n-id", "pdfjs-editor-delete-signature-button1");
deleteButton.type = "button";
deleteButton.tabIndex = 0;
deleteButton.addEventListener("click", async () => {
if (await signature_manager_classPrivateFieldGet(_signatureStorage, this).delete(uuid)) {
div.remove();
signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_reportTelemetry).call(this, {
type: "signature",
action: "pdfjs.signature.delete_saved",
data: {
savedCount: await signature_manager_classPrivateFieldGet(_signatureStorage, this).size()
}
});
}
});
const deleteSpan = document.createElement("span");
deleteButton.append(deleteSpan);
deleteSpan.setAttribute("data-l10n-id", "pdfjs-editor-delete-signature-button-label1");
signature_manager_classPrivateFieldGet(_addSignatureToolbarButton, this).before(div);
}
async function _signaturesChanged() {
const parent = signature_manager_classPrivateFieldGet(_addSignatureToolbarButton, this).parentElement;
while (parent.firstElementChild !== signature_manager_classPrivateFieldGet(_addSignatureToolbarButton, this)) {
parent.firstElementChild.remove();
}
signature_manager_classPrivateFieldSet(_loadSignaturesPromise, this, null);
await this.loadSignatures(true);
}
function signature_manager_cancel() {
signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_finish).call(this);
}
function signature_manager_finish() {
signature_manager_classPrivateFieldGet(signature_manager_overlayManager, this).closeIfActive(signature_manager_classPrivateFieldGet(signature_manager_dialog, this));
}
function signature_manager_close() {
if (signature_manager_classPrivateFieldGet(signature_manager_currentEditor, this)._drawId === null) {
signature_manager_classPrivateFieldGet(signature_manager_currentEditor, this).remove();
}
signature_manager_classPrivateFieldGet(signature_manager_uiManager, this)?.addEditListeners();
signature_manager_classPrivateFieldGet(_currentTabAC, this)?.abort();
signature_manager_classPrivateFieldSet(_currentTabAC, this, null);
signature_manager_classPrivateFieldSet(signature_manager_uiManager, this, null);
signature_manager_classPrivateFieldSet(signature_manager_currentEditor, this, null);
signature_manager_assertClassBrand(_SignatureManager_brand, this, _resetCommon).call(this);
for (const [name] of signature_manager_classPrivateFieldGet(_tabButtons, this)) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _resetTab).call(this, name);
}
signature_manager_assertClassBrand(_SignatureManager_brand, this, _disableButtons).call(this, false);
signature_manager_classPrivateFieldSet(_currentTab, this, null);
signature_manager_classPrivateFieldSet(_tabsToAltText, this, null);
}
async function _add() {
let data;
const type = signature_manager_classPrivateFieldGet(_currentTab, this);
switch (type) {
case "type":
data = signature_manager_assertClassBrand(_SignatureManager_brand, this, _getOutlineForType).call(this);
break;
case "draw":
data = signature_manager_assertClassBrand(_SignatureManager_brand, this, _getOutlineForDraw).call(this);
break;
case "image":
data = signature_manager_classPrivateFieldGet(_extractedSignatureData, this);
break;
}
let uuid = null;
const description = signature_manager_classPrivateFieldGet(signature_manager_description, this).value;
if (signature_manager_classPrivateFieldGet(_saveCheckbox, this).checked) {
const {
newCurves,
areContours,
thickness,
width,
height
} = data;
const signatureData = await SignatureExtractor.compressSignature({
outlines: newCurves,
areContours,
thickness,
width,
height
});
uuid = await signature_manager_classPrivateFieldGet(_signatureStorage, this).create({
description,
signatureData
});
if (uuid) {
signature_manager_assertClassBrand(_SignatureManager_brand, this, _addToolbarButton).call(this, {
curves: newCurves.map(points => ({
points
})),
areContours,
thickness,
width,
height
}, uuid, description);
} else {
console.warn("SignatureManager.add: cannot save the signature.");
}
}
const altText = signature_manager_classPrivateFieldGet(_tabsToAltText, this).get(type);
signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_reportTelemetry).call(this, {
type: "signature",
action: "pdfjs.signature.created",
data: {
type,
saved: !!uuid,
savedCount: await signature_manager_classPrivateFieldGet(_signatureStorage, this).size(),
descriptionChanged: description !== altText.default
}
});
signature_manager_classPrivateFieldGet(signature_manager_currentEditor, this).addSignature(data, DEFAULT_HEIGHT_IN_PAGE, signature_manager_classPrivateFieldGet(signature_manager_description, this).value, uuid);
signature_manager_assertClassBrand(_SignatureManager_brand, this, signature_manager_finish).call(this);
}
var _l10nDescription = {
_: null
};
var _currentEditor2 = /*#__PURE__*/new WeakMap();
var _previousDescription = /*#__PURE__*/new WeakMap();
var _description3 = /*#__PURE__*/new WeakMap();
var signature_manager_dialog2 = /*#__PURE__*/new WeakMap();
var signature_manager_overlayManager2 = /*#__PURE__*/new WeakMap();
var _signatureSVG = /*#__PURE__*/new WeakMap();
var signature_manager_uiManager2 = /*#__PURE__*/new WeakMap();
var _EditDescriptionDialog_brand = /*#__PURE__*/new WeakSet();
class EditDescriptionDialog {
constructor(_ref4, overlayManager) {
let {
dialog,
description,
cancelButton,
updateButton,
editSignatureView
} = _ref4;
signature_manager_classPrivateMethodInitSpec(this, _EditDescriptionDialog_brand);
signature_manager_classPrivateFieldInitSpec(this, _currentEditor2, void 0);
signature_manager_classPrivateFieldInitSpec(this, _previousDescription, void 0);
signature_manager_classPrivateFieldInitSpec(this, _description3, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_dialog2, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_overlayManager2, void 0);
signature_manager_classPrivateFieldInitSpec(this, _signatureSVG, void 0);
signature_manager_classPrivateFieldInitSpec(this, signature_manager_uiManager2, void 0);
const descriptionInput = signature_manager_classPrivateFieldSet(_description3, this, description.firstElementChild);
signature_manager_classPrivateFieldSet(_signatureSVG, this, editSignatureView);
signature_manager_classPrivateFieldSet(signature_manager_dialog2, this, dialog);
signature_manager_classPrivateFieldSet(signature_manager_overlayManager2, this, overlayManager);
dialog.addEventListener("close", signature_manager_assertClassBrand(_EditDescriptionDialog_brand, this, _close2).bind(this));
dialog.addEventListener("contextmenu", e => {
if (e.target !== signature_manager_classPrivateFieldGet(_description3, this)) {
e.preventDefault();
}
});
cancelButton.addEventListener("click", signature_manager_assertClassBrand(_EditDescriptionDialog_brand, this, _cancel2).bind(this));
updateButton.addEventListener("click", signature_manager_assertClassBrand(_EditDescriptionDialog_brand, this, _update).bind(this));
const clearDescription = description.lastElementChild;
clearDescription.addEventListener("click", () => {
descriptionInput.value = "";
clearDescription.disabled = true;
updateButton.disabled = signature_manager_classPrivateFieldGet(_previousDescription, this) === "";
});
descriptionInput.addEventListener("input", () => {
const {
value
} = descriptionInput;
clearDescription.disabled = value === "";
updateButton.disabled = value === signature_manager_classPrivateFieldGet(_previousDescription, this);
editSignatureView.setAttribute("aria-label", value);
}, {
passive: true
});
overlayManager.register(dialog);
}
async open(editor) {
signature_manager_classPrivateFieldSet(signature_manager_uiManager2, this, editor._uiManager);
signature_manager_classPrivateFieldSet(_currentEditor2, this, editor);
signature_manager_classPrivateFieldSet(_previousDescription, this, signature_manager_classPrivateFieldGet(_description3, this).value = editor.description);
signature_manager_classPrivateFieldGet(_description3, this).dispatchEvent(new Event("input"));
signature_manager_classPrivateFieldGet(signature_manager_uiManager2, this).removeEditListeners();
const {
areContours,
outline
} = editor.getSignaturePreview();
const svgFactory = new DOMSVGFactory();
const path = svgFactory.createElement("path");
signature_manager_classPrivateFieldGet(_signatureSVG, this).append(path);
signature_manager_classPrivateFieldGet(_signatureSVG, this).setAttribute("viewBox", outline.viewBox);
path.setAttribute("d", outline.toSVGPath());
if (areContours) {
path.classList.add("contours");
}
await signature_manager_classPrivateFieldGet(signature_manager_overlayManager2, this).open(signature_manager_classPrivateFieldGet(signature_manager_dialog2, this));
}
}
async function _update() {
signature_manager_classPrivateFieldGet(_currentEditor2, this)._reportTelemetry({
action: "pdfjs.signature.edit_description",
data: {
hasBeenChanged: true
}
});
signature_manager_classPrivateFieldGet(_currentEditor2, this).description = signature_manager_classPrivateFieldGet(_description3, this).value;
signature_manager_assertClassBrand(_EditDescriptionDialog_brand, this, signature_manager_finish2).call(this);
}
function _cancel2() {
signature_manager_classPrivateFieldGet(_currentEditor2, this)._reportTelemetry({
action: "pdfjs.signature.edit_description",
data: {
hasBeenChanged: false
}
});
signature_manager_assertClassBrand(_EditDescriptionDialog_brand, this, signature_manager_finish2).call(this);
}
function signature_manager_finish2() {
signature_manager_classPrivateFieldGet(signature_manager_overlayManager2, this).closeIfActive(signature_manager_classPrivateFieldGet(signature_manager_dialog2, this));
}
function _close2() {
signature_manager_classPrivateFieldGet(signature_manager_uiManager2, this)?.addEditListeners();
signature_manager_classPrivateFieldSet(signature_manager_uiManager2, this, null);
signature_manager_classPrivateFieldSet(_currentEditor2, this, null);
signature_manager_classPrivateFieldGet(_signatureSVG, this).firstElementChild.remove();
}
;// ./web/toolbar.js
function toolbar_classPrivateMethodInitSpec(e, a) { toolbar_checkPrivateRedeclaration(e, a), a.add(e); }
function toolbar_classPrivateFieldInitSpec(e, t, a) { toolbar_checkPrivateRedeclaration(e, t), t.set(e, a); }
function toolbar_checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function toolbar_classPrivateFieldGet(s, a) { return s.get(web_toolbar_assertClassBrand(s, a)); }
function toolbar_classPrivateFieldSet(s, a, r) { return s.set(web_toolbar_assertClassBrand(s, a), r), r; }
function web_toolbar_assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var toolbar_colorPicker = /*#__PURE__*/new WeakMap();
var toolbar_opts = /*#__PURE__*/new WeakMap();
var _defaultZoomValue = /*#__PURE__*/new WeakMap();
var toolbar_maxZoom = /*#__PURE__*/new WeakMap();
var toolbar_minZoom = /*#__PURE__*/new WeakMap();
var _Toolbar_brand = /*#__PURE__*/new WeakSet();
class Toolbar {
constructor(options, _eventBus, defaultZoomValue, minZoom, maxZoom) {
let toolbarDensity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
toolbar_classPrivateMethodInitSpec(this, _Toolbar_brand);
toolbar_classPrivateFieldInitSpec(this, toolbar_colorPicker, null);
toolbar_classPrivateFieldInitSpec(this, toolbar_opts, void 0);
toolbar_classPrivateFieldInitSpec(this, _defaultZoomValue, DEFAULT_SCALE_VALUE);
toolbar_classPrivateFieldInitSpec(this, toolbar_maxZoom, MAX_SCALE);
toolbar_classPrivateFieldInitSpec(this, toolbar_minZoom, MIN_SCALE);
toolbar_classPrivateFieldSet(toolbar_opts, this, options);
toolbar_classPrivateFieldSet(_defaultZoomValue, this, defaultZoomValue);
toolbar_classPrivateFieldSet(toolbar_maxZoom, this, maxZoom);
toolbar_classPrivateFieldSet(toolbar_minZoom, this, minZoom);
this.eventBus = _eventBus;
const _buttons = [{
element: options.previous,
eventName: "previouspage"
}, {
element: options.next,
eventName: "nextpage"
}, {
element: options.print,
eventName: "print"
}, {
element: options.presentationModeButton,
eventName: "presentationmode"
}, {
element: options.download,
eventName: "download"
}, {
element: options.movePageUp,
eventName: "movePageUp"
}, {
element: options.movePageDown,
eventName: "movePageDown"
}, {
element: options.editorSignatureButton,
eventName: "switchannotationeditormode",
eventDetails: {
get mode() {
const {
classList
} = options.editorSignatureButton;
return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.SIGNATURE;
}
}
}];
web_toolbar_assertClassBrand(_Toolbar_brand, this, toolbar_bindListeners).call(this, _buttons);
web_toolbar_assertClassBrand(_Toolbar_brand, this, _updateToolbarDensity).call(this, {
value: toolbarDensity
});
this.reset();
}
get maxZoom() {
return toolbar_classPrivateFieldGet(toolbar_maxZoom, this);
}
set maxZoom(value) {
toolbar_classPrivateFieldSet(toolbar_maxZoom, this, value);
}
get minZoom() {
return toolbar_classPrivateFieldGet(toolbar_minZoom, this);
}
set minZoom(value) {
toolbar_classPrivateFieldSet(toolbar_minZoom, this, value);
}
setPageNumber(pageNumber, pageLabel) {
this.pageNumber = pageNumber;
this.pageLabel = pageLabel;
web_toolbar_assertClassBrand(_Toolbar_brand, this, toolbar_updateUIState).call(this, false);
}
setPagesCount(pagesCount, hasPageLabels) {
this.pagesCount = pagesCount;
this.hasPageLabels = hasPageLabels;
web_toolbar_assertClassBrand(_Toolbar_brand, this, toolbar_updateUIState).call(this, true);
}
setPageScale(pageScaleValue, pageScale) {
this.pageScaleValue = (pageScaleValue || pageScale).toString();
this.pageScale = pageScale;
web_toolbar_assertClassBrand(_Toolbar_brand, this, toolbar_updateUIState).call(this, false);
}
reset() {
toolbar_classPrivateFieldSet(toolbar_colorPicker, this, null);
this.pageNumber = 0;
this.pageLabel = null;
this.hasPageLabels = false;
this.pagesCount = 0;
const defaultZoomOption = toolbar_classPrivateFieldGet(_defaultZoomValue, this) || DEFAULT_SCALE_VALUE;
this.pageScaleValue = defaultZoomOption;
if (Number(defaultZoomOption)) {
this.pageScale = Number(defaultZoomOption);
}
web_toolbar_assertClassBrand(_Toolbar_brand, this, toolbar_updateUIState).call(this, true);
this.updateLoadingIndicatorState();
web_toolbar_assertClassBrand(_Toolbar_brand, this, _editorModeChanged).call(this, {
mode: AnnotationEditorType.DISABLE
});
}
updateLoadingIndicatorState() {
let loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
const {
pageNumber
} = toolbar_classPrivateFieldGet(toolbar_opts, this);
pageNumber.classList.toggle("loading", loading);
}
}
function _updateToolbarDensity(_ref) {
let {
value
} = _ref;
let name = "normal";
switch (value) {
case 1:
name = "compact";
break;
case 2:
name = "touch";
break;
}
document.documentElement.setAttribute("data-toolbar-density", name);
}
function toolbar_bindListeners(buttons) {
const {
eventBus
} = this;
const {
editorHighlightColorPicker,
editorHighlightButton,
pageNumber,
scaleSelect
} = toolbar_classPrivateFieldGet(toolbar_opts, this);
const self = this;
for (const {
element,
eventName,
eventDetails,
telemetry
} of buttons) {
if (!element) {
continue;
}
element.addEventListener("click", evt => {
if (eventName !== null) {
eventBus.dispatch(eventName, {
source: this,
...eventDetails,
isFromKeyboard: evt.detail === 0
});
}
if (telemetry) {
eventBus.dispatch("reporttelemetry", {
source: this,
details: telemetry
});
}
});
}
pageNumber.addEventListener("click", function () {
this.select();
});
pageNumber.addEventListener("change", function () {
eventBus.dispatch("pagenumberchanged", {
source: self,
value: this.value
});
});
scaleSelect.addEventListener("change", function () {
if (this.value === "custom") {
return;
}
eventBus.dispatch("scalechanged", {
source: self,
value: this.value
});
});
scaleSelect.addEventListener("click", function (_ref2) {
let {
target
} = _ref2;
if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === "OPTION") {
this.blur();
}
});
scaleSelect.oncontextmenu = noContextMenu;
eventBus._on("annotationeditormodechanged", web_toolbar_assertClassBrand(_Toolbar_brand, this, _editorModeChanged).bind(this));
eventBus._on("showannotationeditorui", _ref3 => {
let {
mode
} = _ref3;
switch (mode) {
case AnnotationEditorType.HIGHLIGHT:
editorHighlightButton.click();
break;
}
});
eventBus._on("toolbardensity", web_toolbar_assertClassBrand(_Toolbar_brand, this, _updateToolbarDensity).bind(this));
if (editorHighlightColorPicker) {
eventBus._on("annotationeditoruimanager", _ref4 => {
let {
uiManager
} = _ref4;
const cp = toolbar_classPrivateFieldSet(toolbar_colorPicker, this, new ColorPicker({
uiManager
}));
uiManager.setMainHighlightColorPicker(cp);
editorHighlightColorPicker.append(cp.renderMainDropdown());
});
eventBus._on("mainhighlightcolorpickerupdatecolor", _ref5 => {
let {
value
} = _ref5;
toolbar_classPrivateFieldGet(toolbar_colorPicker, this)?.updateColor(value);
});
}
}
function _editorModeChanged(_ref6) {
let {
mode
} = _ref6;
const {
editorFreeTextButton,
editorFreeTextParamsToolbar,
editorHighlightButton,
editorHighlightParamsToolbar,
editorInkButton,
editorInkParamsToolbar,
editorStampButton,
editorStampParamsToolbar,
editorSignatureButton,
editorSignatureParamsToolbar
} = toolbar_classPrivateFieldGet(toolbar_opts, this);
toggleExpandedBtn(editorFreeTextButton, mode === AnnotationEditorType.FREETEXT, editorFreeTextParamsToolbar);
toggleExpandedBtn(editorHighlightButton, mode === AnnotationEditorType.HIGHLIGHT, editorHighlightParamsToolbar);
toggleExpandedBtn(editorInkButton, mode === AnnotationEditorType.INK, editorInkParamsToolbar);
toggleExpandedBtn(editorStampButton, mode === AnnotationEditorType.STAMP, editorStampParamsToolbar);
toggleExpandedBtn(editorSignatureButton, mode === AnnotationEditorType.SIGNATURE, editorSignatureParamsToolbar);
const isDisable = mode === AnnotationEditorType.DISABLE;
editorFreeTextButton.disabled = isDisable;
editorHighlightButton.disabled = isDisable;
editorInkButton.disabled = isDisable;
editorStampButton.disabled = isDisable;
editorSignatureButton.disabled = isDisable;
}
function toolbar_updateUIState() {
let resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
const {
pageNumber,
pagesCount,
pageScaleValue,
pageScale
} = this;
const opts = toolbar_classPrivateFieldGet(toolbar_opts, this);
if (resetNumPages) {
if (this.hasPageLabels) {
opts.pageNumber.type = "text";
opts.numPages.setAttribute("data-l10n-id", "pdfjs-page-of-pages");
} else {
opts.pageNumber.type = "number";
opts.numPages.setAttribute("data-l10n-id", "pdfjs-of-pages");
opts.numPages.setAttribute("data-l10n-args", JSON.stringify({
pagesCount
}));
}
opts.pageNumber.max = pagesCount;
}
if (this.hasPageLabels) {
opts.pageNumber.value = this.pageLabel;
opts.numPages.setAttribute("data-l10n-args", JSON.stringify({
pageNumber,
pagesCount
}));
} else {
opts.pageNumber.value = pageNumber;
}
opts.previous.disabled = pageNumber <= 1;
opts.next.disabled = pageNumber >= pagesCount;
const minScale = Number(this.minZoom) ?? MIN_SCALE;
const maxScale = Number(this.maxZoom) ?? MAX_SCALE;
if (opts.zoomOut) {
opts.zoomOut.disabled = pageScale <= minScale;
}
if (opts.zoomIn) {
opts.zoomIn.disabled = pageScale >= maxScale;
}
let predefinedValueFound = false;
if (opts.scaleSelect.options) {
for (const option of opts.scaleSelect.options) {
if (option.value !== pageScaleValue) {
option.selected = false;
continue;
}
option.selected = true;
predefinedValueFound = true;
}
}
if (!predefinedValueFound) {
opts.customScaleOption.selected = true;
opts.customScaleOption.setAttribute("data-l10n-args", JSON.stringify({
scale: Math.round(pageScale * 10000) / 100
}));
}
this.eventBus.dispatch("updateuistate", {
source: this,
widget: "Toolbar",
pageNumber,
pagesCount,
pageScaleValue,
pageScale
});
}
;// ./web/view_history.js
const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;
class ViewHistory {
constructor(fingerprint) {
let cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_VIEW_HISTORY_CACHE_SIZE;
this.fingerprint = fingerprint;
this.cacheSize = cacheSize;
this._initializedPromise = this._readFromStorage().then(databaseStr => {
const database = JSON.parse(databaseStr || "{}");
let index = -1;
if (!Array.isArray(database.files)) {
database.files = [];
} else {
while (database.files.length >= this.cacheSize) {
database.files.shift();
}
for (let i = 0, ii = database.files.length; i < ii; i++) {
const branch = database.files[i];
if (branch.fingerprint === this.fingerprint) {
index = i;
break;
}
}
}
if (index === -1) {
index = database.files.push({
fingerprint: this.fingerprint
}) - 1;
}
this.file = database.files[index];
this.database = database;
});
}
async _writeToStorage() {
if (AppOptions.get("disableHistory")) {
return;
}
const databaseStr = JSON.stringify(this.database);
try {
localStorage.setItem("pdfjs.history", databaseStr);
} catch (safariSecurityException) {}
}
async _readFromStorage() {
if (AppOptions.get("disableHistory")) {
return undefined;
}
try {
return localStorage.getItem("pdfjs.history");
} catch (safariSecurityException) {
return undefined;
}
}
async set(name, val) {
await this._initializedPromise;
this.file[name] = val;
return this._writeToStorage();
}
async setMultiple(properties) {
await this._initializedPromise;
for (const name in properties) {
this.file[name] = properties[name];
}
return this._writeToStorage();
}
async get(name, defaultValue) {
await this._initializedPromise;
const val = this.file[name];
return val !== undefined ? val : defaultValue;
}
async getMultiple(properties) {
await this._initializedPromise;
const values = Object.create(null);
for (const name in properties) {
const val = this.file[name];
values[name] = val !== undefined ? val : properties[name];
}
return values;
}
}
;// ./web/app.js
const FORCE_PAGES_LOADED_TIMEOUT = 10;
const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;
const ViewOnLoad = {
UNKNOWN: -1,
PREVIOUS: 0,
INITIAL: 1
};
const PDFViewerApplication = {
initialBookmark: document.location.hash.substring(1),
_initializedCapability: {
...Promise.withResolvers(),
settled: false
},
appConfig: null,
pdfDocument: null,
pdfLoadingTask: null,
printService: null,
pdfViewer: null,
pdfThumbnailViewer: null,
pdfRenderingQueue: null,
pdfPresentationMode: null,
pdfDocumentProperties: null,
pdfLinkService: null,
pdfHistory: null,
pdfSidebar: null,
pdfOutlineViewer: null,
pdfAttachmentViewer: null,
pdfLayerViewer: null,
pdfCursorTools: null,
pdfScriptingManager: null,
pdfWorker: null,
store: null,
downloadManager: null,
overlayManager: null,
preferences: new Preferences(),
toolbar: null,
secondaryToolbar: null,
eventBus: null,
l10n: null,
annotationEditorParams: null,
imageAltTextSettings: null,
isInitialViewSet: false,
isViewerEmbedded: window.parent !== window,
url: "",
baseUrl: "",
mlManager: null,
_downloadUrl: "",
_eventBusAbortController: null,
_windowAbortController: null,
_globalAbortController: new AbortController(),
documentInfo: null,
metadata: null,
_contentDispositionFilename: null,
_contentLength: null,
_saveInProgress: false,
_wheelUnusedTicks: 0,
_wheelUnusedFactor: 1,
_touchManager: null,
_touchUnusedTicks: 0,
_touchUnusedFactor: 1,
_PDFBug: null,
_hasAnnotationEditors: false,
_title: document.title,
_printAnnotationStoragePromise: null,
_isCtrlKeyDown: false,
_caretBrowsing: null,
_isScrolling: false,
editorUndoBar: null,
pageOrder: null,
async initialize(appConfig) {
this.appConfig = appConfig;
this.cspPolicyService = appConfig.cspPolicyService;
try {
await this.preferences.initializedPromise;
} catch (ex) {
NgxConsole.error("initialize:", ex);
}
if (AppOptions.get("pdfBugEnabled")) {
await this._parseHashParams();
}
let mode;
switch (AppOptions.get("viewerCssTheme")) {
case 1:
mode = "light";
break;
case 2:
mode = "dark";
break;
}
if (mode) {
docStyle.setProperty("color-scheme", mode);
}
this.l10n = await this.externalServices.createL10n();
document.getElementsByTagName("html")[0].dir = this.l10n.getDirection();
this.l10n.translate(appConfig.appContainer || document.documentElement);
if (this.isViewerEmbedded && AppOptions.get("externalLinkTarget") === LinkTarget.NONE) {
AppOptions.set("externalLinkTarget", LinkTarget.TOP);
}
await this._initializeViewerComponents();
this.bindEvents();
this.bindWindowEvents();
this._initializedCapability.settled = true;
this._initializedCapability.resolve();
this.initializeLoadingBar();
},
async _parseHashParams() {
const hash = document.location.hash.substring(1);
if (!hash) {
return;
}
const {
mainContainer,
viewerContainer
} = this.appConfig,
params = parseQueryString(hash);
const loadPDFBug = async () => {
if (this._PDFBug) {
return;
}
const {
PDFBug
} = await import(
/*webpackIgnore: true*/
/*@vite-ignore*/
AppOptions.get("debuggerSrc"));
this._PDFBug = PDFBug;
};
if (params.get("disableworker") === "true") {
try {
GlobalWorkerOptions.workerSrc ||= AppOptions.get("workerSrc");
await import(
/*webpackIgnore: true*/
/*@vite-ignore*/
PDFWorker.workerSrc);
AppOptions.set("workerPort", null);
} catch (ex) {
NgxConsole.error("_parseHashParams:", ex);
}
}
if (params.has("textlayer")) {
switch (params.get("textlayer")) {
case "off":
AppOptions.set("textLayerMode", TextLayerMode.DISABLE);
break;
case "visible":
case "shadow":
case "hover":
viewerContainer.classList.add(`textLayer-${params.get("textlayer")}`);
try {
await loadPDFBug();
this._PDFBug.loadCSS();
} catch (ex) {
NgxConsole.error("_parseHashParams:", ex);
}
break;
}
}
if (params.has("pdfbug")) {
const enabled = params.get("pdfbug").split(",");
try {
await loadPDFBug();
this._PDFBug.init(mainContainer, enabled);
} catch (ex) {
NgxConsole.error("_parseHashParams:", ex);
}
const debugOpts = {
pdfBug: true,
fontExtraProperties: true
};
if (globalThis.StepperManager?.enabled) {
debugOpts.minDurationToUpdateCanvas = 0;
}
AppOptions.setAll(debugOpts);
}
if (params.has("locale")) {
AppOptions.set("localeProperties", {
lang: params.get("locale")
});
}
const opts = {
disableAutoFetch: x => x === "true",
disableFontFace: x => x === "true",
disableHistory: x => x === "true",
disableRange: x => x === "true",
disableStream: x => x === "true",
verbosity: x => x | 0
};
for (const name in opts) {
const check = opts[name],
key = name.toLowerCase();
if (params.has(key)) {
AppOptions.set(name, check(params.get(key)));
}
}
},
async _initializeViewerComponents() {
const {
appConfig,
externalServices,
l10n,
mlManager
} = this;
const abortSignal = this._globalAbortController.signal;
const eventBus = new EventBus();
this.eventBus = AppOptions.eventBus = eventBus;
mlManager?.setEventBus(eventBus, abortSignal);
const overlayManager = this.overlayManager = new OverlayManager();
const renderingQueue = this.pdfRenderingQueue = new PDFRenderingQueue();
renderingQueue.onIdle = this._cleanup.bind(this);
const linkService = this.pdfLinkService = new PDFLinkService({
eventBus,
externalLinkTarget: AppOptions.get("externalLinkTarget"),
externalLinkRel: AppOptions.get("externalLinkRel"),
ignoreDestinationZoom: AppOptions.get("ignoreDestinationZoom")
});
const downloadManager = this.downloadManager = new DownloadManager();
let FindControllerConstructor = PDFFindController;
if (AppOptions.get("findController")) {
FindControllerConstructor = AppOptions.get("findController");
}
const customFindController = new FindControllerConstructor({
linkService,
eventBus,
pageViewMode: AppOptions.get("pageViewMode"),
updateMatchesCountOnProgress: true,
listenToEventBus: false
});
this.customFindController = customFindController;
const findController = new FindControllerConstructor({
linkService,
eventBus,
pageViewMode: AppOptions.get("pageViewMode"),
updateMatchesCountOnProgress: true,
listenToEventBus: true
});
this.findController = findController;
const pdfScriptingManager = this.pdfScriptingManager = new PDFScriptingManager({
eventBus,
externalServices,
docProperties: this._scriptingDocProperties.bind(this)
});
const container = appConfig.mainContainer,
viewer = appConfig.viewerContainer;
const annotationEditorMode = AppOptions.get("annotationEditorMode");
const pageColors = AppOptions.get("forcePageColors") || window.matchMedia("(forced-colors: active)").matches ? {
background: AppOptions.get("pageColorsBackground"),
foreground: AppOptions.get("pageColorsForeground")
} : null;
let altTextManager;
if (AppOptions.get("enableUpdatedAddImage")) {
altTextManager = appConfig.newAltTextDialog ? new NewAltTextManager(appConfig.newAltTextDialog, overlayManager, eventBus) : null;
} else {
altTextManager = appConfig.altTextDialog ? new AltTextManager(appConfig.altTextDialog, container, overlayManager, eventBus) : null;
}
if (appConfig.editorUndoBar) {
this.editorUndoBar = new EditorUndoBar(appConfig.editorUndoBar, eventBus);
}
const signatureManager = AppOptions.get("enableSignatureEditor") && appConfig.addSignatureDialog ? new SignatureManager(appConfig.addSignatureDialog, appConfig.editSignatureDialog, appConfig.annotationEditorParams?.editorSignatureAddSignature || null, overlayManager, l10n, externalServices.createSignatureStorage(eventBus, abortSignal), eventBus) : null;
const enableHWA = AppOptions.get("enableHWA"),
maxCanvasPixels = AppOptions.get("maxCanvasPixels"),
maxCanvasDim = AppOptions.get("maxCanvasDim"),
capCanvasAreaFactor = AppOptions.get("capCanvasAreaFactor");
const pdfViewer = this.pdfViewer = new PDFViewer({
container,
viewer,
eventBus,
renderingQueue,
linkService,
downloadManager,
altTextManager,
signatureManager,
editorUndoBar: this.editorUndoBar,
findController,
customFindController,
scriptingManager: AppOptions.get("enableScripting") && pdfScriptingManager,
l10n,
textLayerMode: AppOptions.get("textLayerMode"),
annotationMode: AppOptions.get("annotationMode"),
annotationEditorMode,
annotationEditorHighlightColors: AppOptions.get("highlightEditorColors"),
enableHighlightFloatingButton: AppOptions.get("enableHighlightFloatingButton"),
enableUpdatedAddImage: AppOptions.get("enableUpdatedAddImage"),
enableNewAltTextWhenAddingImage: AppOptions.get("enableNewAltTextWhenAddingImage"),
imageResourcesPath: AppOptions.get("imageResourcesPath"),
removePageBorders: AppOptions.get("removePageBorders"),
enablePrintAutoRotate: AppOptions.get("enablePrintAutoRotate"),
maxCanvasPixels,
maxCanvasDim,
capCanvasAreaFactor,
enableDetailCanvas: AppOptions.get("enableDetailCanvas"),
pageViewMode: AppOptions.get("pageViewMode"),
enablePermissions: AppOptions.get("enablePermissions"),
pageColors,
mlManager,
abortSignal,
enableHWA,
defaultCacheSize: AppOptions.get("defaultCacheSize"),
minZoom: AppOptions.get("minZoom"),
maxZoom: AppOptions.get("maxZoom"),
cspPolicyService: this.cspPolicyService,
supportsPinchToZoom: this.supportsPinchToZoom,
enableAutoLinking: AppOptions.get("enableAutoLinking"),
minDurationToUpdateCanvas: AppOptions.get("minDurationToUpdateCanvas")
});
renderingQueue.setViewer(pdfViewer);
linkService.setViewer(pdfViewer);
pdfScriptingManager.setViewer(pdfViewer);
if (appConfig.sidebar?.thumbnailView) {
this.pdfThumbnailViewer = new PDFThumbnailViewer({
container: appConfig.sidebar.thumbnailView,
eventBus,
renderingQueue,
linkService,
maxCanvasPixels,
maxCanvasDim,
pageColors,
abortSignal,
enableHWA
});
renderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
}
if (!this.isViewerEmbedded && !AppOptions.get("disableHistory")) {
this.pdfHistory = new PDFHistory({
linkService,
eventBus
});
linkService.setHistory(this.pdfHistory);
}
if (!this.supportsIntegratedFind && appConfig.findBar) {
this.findBar = new PDFFindBar(appConfig.findBar, appConfig.principalContainer, eventBus);
}
if (appConfig.annotationEditorParams) {
if (annotationEditorMode !== AnnotationEditorType.DISABLE) {
const editorSignatureButton = appConfig.toolbar?.editorSignatureButton;
if (editorSignatureButton && AppOptions.get("enableSignatureEditor")) {
editorSignatureButton.parentElement.hidden = false;
}
const movePageUpButton = document.getElementById("movePageUp");
const movePageDownButton = document.getElementById("movePageDown");
if (movePageUpButton && movePageDownButton) {
if (AppOptions.get("enablePageReordering")) {
movePageUpButton.hidden = false;
movePageDownButton.hidden = false;
} else {
movePageUpButton.hidden = true;
movePageDownButton.hidden = true;
}
}
this.annotationEditorParams = new AnnotationEditorParams(appConfig.annotationEditorParams, eventBus);
} else {
for (const id of ["editorModeButtons", "editorModeSeparator"]) {
document.getElementById(id)?.classList.add("hidden");
}
}
}
if (mlManager && appConfig.secondaryToolbar?.imageAltTextSettingsButton) {
this.imageAltTextSettings = new ImageAltTextSettings(appConfig.altTextSettingsDialog, overlayManager, eventBus, mlManager);
}
if (appConfig.documentProperties) {
this.pdfDocumentProperties = new PDFDocumentProperties(appConfig.documentProperties, overlayManager, eventBus, l10n, () => this._docFilename, () => this._docTitle);
}
if (appConfig.secondaryToolbar?.cursorHandToolButton) {
this.pdfCursorTools = new PDFCursorTools({
container,
eventBus,
cursorToolOnLoad: AppOptions.get("cursorToolOnLoad")
});
}
if (appConfig.toolbar) {
this.toolbar = new Toolbar(appConfig.toolbar, eventBus, AppOptions.get("defaultZoomValue"), AppOptions.get("minZoom"), AppOptions.get("maxZoom"), AppOptions.get("toolbarDensity"));
}
if (appConfig.secondaryToolbar) {
if (AppOptions.get("enableAltText")) {
appConfig.secondaryToolbar.imageAltTextSettingsButton?.classList.remove("hidden");
appConfig.secondaryToolbar.imageAltTextSettingsSeparator?.classList.remove("hidden");
}
this.secondaryToolbar = new SecondaryToolbar(appConfig.secondaryToolbar, eventBus);
}
if (this.supportsFullscreen && (appConfig.toolbar?.presentationModeButton || appConfig.secondaryToolbar?.presentationModeButton)) {
this.pdfPresentationMode = new PDFPresentationMode({
container,
pdfViewer,
eventBus
});
}
const prompt = AppOptions.get("passwordPrompt");
if (!prompt) {
if (appConfig.passwordOverlay) {
this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay, overlayManager, this.isViewerEmbedded);
}
} else {
this.passwordPrompt = prompt;
}
if (appConfig.sidebar?.outlineView) {
this.pdfOutlineViewer = new PDFOutlineViewer({
container: appConfig.sidebar.outlineView,
eventBus,
l10n,
linkService,
downloadManager
});
}
if (appConfig.sidebar?.attachmentsView) {
this.pdfAttachmentViewer = new PDFAttachmentViewer({
container: appConfig.sidebar.attachmentsView,
eventBus,
l10n,
downloadManager
});
}
if (appConfig.sidebar?.layersView) {
this.pdfLayerViewer = new PDFLayerViewer({
container: appConfig.sidebar.layersView,
eventBus,
l10n
});
}
if (appConfig.sidebar) {
this.pdfSidebar = new PDFSidebar({
elements: appConfig.sidebar,
eventBus,
l10n
});
this.pdfSidebar.onToggled = this.forceRendering.bind(this);
this.pdfSidebar.onUpdateThumbnails = () => {
for (const pageView of pdfViewer.getCachedPageViews()) {
if (pageView.renderingState === RenderingStates.FINISHED) {
this.pdfThumbnailViewer.getThumbnail(pageView.id - 1)?.setImage(pageView);
}
}
this.pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);
};
}
},
async run(config) {
await this.initialize(config);
const {
appConfig,
eventBus
} = this;
let file;
const queryString = document.location.search.substring(1);
const params = parseQueryString(queryString);
file = params.get("file") ?? AppOptions.get("defaultUrl");
validateFileURL(file);
const fileInput = this._openFileInput = document.createElement("input");
fileInput.id = "fileInput";
fileInput.className = "ngx-extended-pdf-viewer-file-input";
fileInput.hidden = true;
fileInput.type = "file";
fileInput.value = null;
fileInput.accept = ".pdf,application/pdf";
document.body.append(fileInput);
fileInput.addEventListener("change", function (evt) {
const {
files
} = evt.target;
if (!files || files.length === 0) {
return;
}
eventBus.dispatch("fileinputchange", {
source: this,
fileInput: evt.target
});
});
appConfig.mainContainer.addEventListener("dragover", function (evt) {
if (AppOptions.get("enableDragAndDrop")) {
if (!evt.dataTransfer?.items) {
return;
}
for (const item of evt.dataTransfer.items) {
if (item.type === "application/pdf") {
evt.dataTransfer.dropEffect = evt.dataTransfer.effectAllowed === "copy" ? "copy" : "move";
stopEvent(evt);
return;
}
}
}
});
appConfig.mainContainer.addEventListener("drop", function (evt) {
if (AppOptions.get("enableDragAndDrop")) {
const files = evt.dataTransfer?.files;
if (!files || files.length === 0 || files[0].type !== "application/pdf") {
return;
}
stopEvent(evt);
eventBus.dispatch("fileinputchange", {
source: this,
fileInput: evt.dataTransfer,
dropEvent: evt
});
}
});
if (!AppOptions.get("supportsDocumentFonts")) {
AppOptions.set("disableFontFace", true);
this.l10n.get("pdfjs-web-fonts-disabled").then(msg => {
NgxConsole.warn(msg);
});
}
if (!this.supportsPrinting) {
appConfig.toolbar?.print?.classList.add("hidden");
appConfig.secondaryToolbar?.printButton.classList.add("hidden");
}
if (!this.supportsFullscreen) {
appConfig.toolbar.presentationModeButton.classList.add("hidden");
appConfig.secondaryToolbar?.presentationModeButton?.classList.add("hidden");
}
if (this.supportsIntegratedFind) {
appConfig.findBar?.toggleButton?.classList.add("hidden");
}
if (file) {
this.open({
url: file
});
} else {
this._hideViewBookmark();
}
const event = new CustomEvent("webviewerinitialized", {
bubbles: true,
cancelable: true,
detail: {
source: window
}
});
try {
document.dispatchEvent(event);
} catch (ex) {
NgxConsole.error(`webviewerinitialized: ${ex}`);
parent.document.dispatchEvent(event);
}
},
get externalServices() {
return shadow(this, "externalServices", new ExternalServices());
},
get initialized() {
return this._initializedCapability.settled;
},
get initializedPromise() {
return this._initializedCapability.promise;
},
updateZoom(steps, scaleFactor, origin) {
if (this.pdfViewer.isInPresentationMode) {
return;
}
this.pdfViewer.updateScale({
drawingDelay: AppOptions.get("defaultZoomDelay"),
steps,
scaleFactor,
origin
});
},
zoomIn() {
this.updateZoom(1);
},
zoomOut() {
this.updateZoom(-1);
},
zoomReset() {
if (this.pdfViewer.isInPresentationMode) {
return;
}
this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;
},
touchPinchCallback(origin, prevDistance, distance) {
if (this.supportsPinchToZoom) {
const newScaleFactor = this._accumulateFactor(this.pdfViewer.currentScale, distance / prevDistance, "_touchUnusedFactor");
this.updateZoom(null, newScaleFactor, origin);
} else {
const PIXELS_PER_LINE_SCALE = 30;
const ticks = this._accumulateTicks((distance - prevDistance) / PIXELS_PER_LINE_SCALE, "_touchUnusedTicks");
this.updateZoom(ticks, null, origin);
}
},
touchPinchEndCallback() {
this._touchUnusedTicks = 0;
this._touchUnusedFactor = 1;
},
get pagesCount() {
return this.pdfDocument ? this.pdfDocument.numPages : 0;
},
get page() {
return this.pdfViewer.currentPageNumber;
},
set page(val) {
this.pdfViewer.currentPageNumber = val;
},
get supportsPrinting() {
return shadow(this, "supportsPrinting", AppOptions.get("supportsPrinting") && PDFPrintServiceFactory.supportsPrinting);
},
get supportsFullscreen() {
return shadow(this, "supportsFullscreen", document.fullscreenEnabled);
},
get supportsPinchToZoom() {
return shadow(this, "supportsPinchToZoom", AppOptions.get("supportsPinchToZoom"));
},
get supportsIntegratedFind() {
return shadow(this, "supportsIntegratedFind", AppOptions.get("supportsIntegratedFind"));
},
initializeLoadingBar() {
const barElement = document.getElementById("loadingBar");
const bar = barElement ? new ProgressBar(barElement) : null;
bar?.hide();
return shadow(this, "loadingBar", bar);
},
get supportsMouseWheelZoomCtrlKey() {
return shadow(this, "supportsMouseWheelZoomCtrlKey", AppOptions.get("supportsMouseWheelZoomCtrlKey"));
},
get supportsMouseWheelZoomMetaKey() {
return shadow(this, "supportsMouseWheelZoomMetaKey", AppOptions.get("supportsMouseWheelZoomMetaKey"));
},
get supportsCaretBrowsingMode() {
return AppOptions.get("supportsCaretBrowsingMode");
},
moveCaret(isUp, select) {
this._caretBrowsing ||= new CaretBrowsingMode(this._globalAbortController.signal, this.appConfig.mainContainer, this.appConfig.viewerContainer, this.appConfig.toolbar?.container);
this._caretBrowsing.moveCaret(isUp, select);
},
setTitleUsingUrl() {
let url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
let downloadUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
},
setTitle() {
let title = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._title;
this._title = title;
if (this.isViewerEmbedded) {
return;
}
const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing;
document.title = `${editorIndicator ? "* " : ""}${title}`;
},
get _docFilename() {
return this._contentDispositionFilename || display_utils_getPdfFilenameFromUrl(this.url, PDFViewerApplication.appConfig.filenameForDownload);
},
get _docTitle() {
const {
documentInfo,
metadata
} = this;
const title = metadata?.get("dc:title");
if (title) {
if (title !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(title)) {
return title;
}
}
return documentInfo.Title;
},
_hideViewBookmark() {
if (!this.appConfig) {
return;
}
const {
secondaryToolbar
} = this.appConfig;
secondaryToolbar?.viewBookmarkButton.classList.add("hidden");
if (secondaryToolbar?.presentationModeButton?.classList.contains("hidden")) {
document.getElementById("viewBookmarkSeparator")?.classList.add("hidden");
}
},
async close() {
this._unblockDocumentLoadEvent();
this._hideViewBookmark();
if (!this.pdfLoadingTask) {
return;
}
if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) {
try {
await this.save();
} catch {}
}
const promises = [];
promises.push(this.pdfLoadingTask.destroy());
this.pdfLoadingTask = null;
if (this.pdfDocument) {
this.pdfDocument = null;
this.pdfThumbnailViewer?.setDocument(null);
this.pdfViewer.setDocument(null);
this.pdfLinkService.setDocument(null);
this.pdfDocumentProperties?.setDocument(null);
}
this.pdfLinkService.externalLinkEnabled = true;
this.store = null;
this.isInitialViewSet = false;
this.url = "";
this.baseUrl = "";
this._downloadUrl = "";
this.documentInfo = null;
this.metadata = null;
this._contentDispositionFilename = null;
this._contentLength = null;
this._saveInProgress = false;
this._hasAnnotationEditors = false;
promises.push(this.pdfScriptingManager.destroyPromise, this.passwordPrompt.close());
this.setTitle();
this.pdfSidebar?.reset();
this.pdfOutlineViewer?.reset();
this.pdfAttachmentViewer?.reset();
this.pdfLayerViewer?.reset();
this.pdfHistory?.reset();
this.findBar?.reset();
this.toolbar?.reset();
this.secondaryToolbar?.reset();
this._PDFBug?.cleanup();
await Promise.all(promises);
},
async open(args) {
this.pdfViewer?.destroyBookMode();
if (this.pdfLoadingTask) {
await this.close();
}
const workerParams = AppOptions.getAll(OptionKind.WORKER);
workerParams.cspPolicyService = args.cspPolicyService;
if (args.workerSrc && args.workerSrc !== workerParams.workerSrc) {
workerParams.workerSrc = args.workerSrc;
this.pdfWorker = null;
}
Object.assign(GlobalWorkerOptions, workerParams);
workerParams.port = workerParams.port ?? GlobalWorkerOptions.workerPort;
workerParams.cspPolicyService = this.cspPolicyService;
if (this.pdfWorker === null) {
this.pdfWorker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
}
if (args.url) {
this.setTitleUsingUrl(args.originalUrl || args.url, args.url);
}
const apiParams = AppOptions.getAll(OptionKind.API);
const loadingTask = getDocument({
...apiParams,
...args,
worker: this.pdfWorker,
cspPolicyService: args.cspPolicyService
});
this.pdfLoadingTask = loadingTask;
loadingTask.onPassword = (updateCallback, reason) => {
if (this.isViewerEmbedded) {
this._unblockDocumentLoadEvent();
}
this.pdfLinkService.externalLinkEnabled = false;
this.passwordPrompt.setUpdateCallback(updateCallback, reason);
this.passwordPrompt.open();
};
loadingTask.onProgress = _ref => {
let {
loaded,
total
} = _ref;
this.progress(loaded / total);
this.eventBus?.dispatch("progress", {
source: this,
type: "load",
total,
loaded,
percent: 100 * loaded / total
});
};
const showUnverifiedSignatures = this.serviceWorkerOptions.showUnverifiedSignatures;
return loadingTask.promise.then(pdfDocument => {
pdfDocument._transport.messageHandler.send('showUnverifiedSignatures', showUnverifiedSignatures);
this.load(pdfDocument);
}, reason => {
if (loadingTask !== this.pdfLoadingTask) {
return undefined;
}
let key = "pdfjs-loading-error";
if (reason instanceof InvalidPDFException) {
key = "pdfjs-invalid-file-error";
} else if (reason instanceof ResponseException) {
key = reason.missing ? "pdfjs-missing-file-error" : "pdfjs-unexpected-response-error";
}
if (PDFViewerApplication.onError) {
PDFViewerApplication.onError(reason);
}
return this._documentError(key, {
message: reason.message
}).then(() => {
throw reason;
});
});
},
async download() {
let data;
try {
data = await (this.pdfDocument ? this.pdfDocument.getData() : this.pdfLoadingTask.getData());
} catch {}
this.downloadManager.download(data, this._downloadUrl, this._docFilename);
},
async save() {
let pageOrder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (this._saveInProgress) {
return;
}
this._saveInProgress = true;
await this.pdfScriptingManager.dispatchWillSave();
try {
const data = await this.pdfDocument.saveDocument(pageOrder);
this.downloadManager.download(data, this._downloadUrl, this._docFilename);
} catch (reason) {
NgxConsole.error(`Error when saving the document:`, reason);
await this.download();
} finally {
await this.pdfScriptingManager.dispatchDidSave();
this._saveInProgress = false;
}
if (this._hasAnnotationEditors) {
this.externalServices.reportTelemetry({
type: "editing",
data: {
type: "save",
stats: this.pdfDocument?.annotationStorage.editorStats
}
});
}
},
async downloadOrSave() {
const {
classList
} = this.appConfig.appContainer;
classList.add("wait");
const hasChanges = this.pdfDocument?.annotationStorage.size > 0 || !this.pageOrder.every((value, index, array) => index === 0 || value >= array[index - 1]);
await (hasChanges ? this.save(this.pageOrder) : this.download());
classList.remove("wait");
},
movePageUp(event) {
if (event.source.pageNumber <= 1) return;
this.pdfViewer.swapPages(event.source.pageNumber - 1, event.source.pageNumber - 2);
this.pdfThumbnailViewer.swapThumbnails(event.source.pageNumber - 1, event.source.pageNumber - 2);
this.page = event.source.pageNumber - 1;
[this.pageOrder[event.source.pageNumber - 2], this.pageOrder[event.source.pageNumber - 1]] = [this.pageOrder[event.source.pageNumber - 1], this.pageOrder[event.source.pageNumber - 2]];
},
movePageDown(event) {
if (event.source.pageNumber === this.pdfDocument.numPages) return;
this.pdfViewer.swapPages(event.source.pageNumber - 1, event.source.pageNumber);
this.pdfThumbnailViewer.swapThumbnails(event.source.pageNumber - 1, event.source.pageNumber);
this.page = event.source.pageNumber + 1;
[this.pageOrder[event.source.pageNumber - 1], this.pageOrder[event.source.pageNumber]] = [this.pageOrder[event.source.pageNumber], this.pageOrder[event.source.pageNumber - 1]];
},
movePage(prevPageIndex, newPageIndex) {
if (prevPageIndex < 1 || prevPageIndex > this.pdfDocument.numPages || newPageIndex < 1 || newPageIndex > this.pdfDocument.numPages) return;
const prevPageNumber = prevPageIndex - 1;
const newPageNumber = newPageIndex - 1;
if (prevPageNumber < newPageNumber) {
for (let i = prevPageNumber; i < newPageNumber; i++) {
this.pdfViewer.swapPages(i, i + 1);
this.pdfThumbnailViewer.swapThumbnails(i, i + 1);
[this.pageOrder[i], this.pageOrder[i + 1]] = [this.pageOrder[i + 1], this.pageOrder[i]];
}
} else if (prevPageNumber > newPageNumber) {
for (let i = prevPageNumber; i > newPageNumber; i--) {
this.pdfViewer.swapPages(i, i - 1);
this.pdfThumbnailViewer.swapThumbnails(i, i - 1);
[this.pageOrder[i], this.pageOrder[i - 1]] = [this.pageOrder[i - 1], this.pageOrder[i]];
}
}
this.page = newPageIndex;
},
async _exportWithAnnotations() {
if (this._saveInProgress) {
throw new Error(`Already downloading`);
}
this._saveInProgress = true;
await this.pdfScriptingManager.dispatchWillSave();
try {
this._ensureDownloadComplete();
const data = await this.pdfDocument.saveDocument();
const blob = new Blob([data], {
type: "application/pdf"
});
return blob;
} catch (reason) {
throw new Error(`Error when saving the document: ${reason.message}`);
} finally {
await this.pdfScriptingManager.dispatchDidSave();
this._saveInProgress = false;
}
},
_ensureDownloadComplete() {
if (this.pdfDocument) {
return;
}
throw new Error("PDF document not downloaded.");
},
async _exportWithoutAnnotations() {
try {
this._ensureDownloadComplete();
const data = await this.pdfDocument.getData();
const blob = new Blob([data], {
type: "application/pdf"
});
return blob;
} catch (reason) {
throw new Error(`Error when saving the document: ${reason.message}`);
}
},
async export() {
if (this.pdfDocument?.annotationStorage.size > 0) {
return this._exportWithAnnotations();
}
return this._exportWithoutAnnotations();
},
openInExternalApp() {
this.downloadOrSave({
openInExternalApp: true
});
},
async _documentError(key) {
let moreInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
this._unblockDocumentLoadEvent();
const message = await this._otherError(key || "pdfjs-loading-error", moreInfo);
this.eventBus.dispatch("documenterror", {
source: this,
message,
reason: moreInfo?.message ?? null
});
},
async _otherError(key) {
let moreInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
const message = await this.l10n.get(key);
const moreInfoText = [`PDF.js v${version || "?"} (build: ${build || "?"})`];
if (moreInfo) {
moreInfoText.push(`Message: ${moreInfo.message}`);
if (moreInfo.stack) {
moreInfoText.push(`Stack: ${moreInfo.stack}`);
} else {
if (moreInfo.filename) {
moreInfoText.push(`File: ${moreInfo.filename}`);
}
if (moreInfo.lineNumber) {
moreInfoText.push(`Line: ${moreInfo.lineNumber}`);
}
}
}
NgxConsole.error(`${message}\n\n${moreInfoText.join("\n")}`);
return message;
},
progress(level) {
const percent = Math.round(level * 100);
if (!this.loadingBar || percent <= this.loadingBar.percent) {
return;
}
this.loadingBar.percent = percent;
if (this.pdfDocument?.loadingParams.disableAutoFetch ?? AppOptions.get("disableAutoFetch")) {
this.loadingBar.setDisableAutoFetch();
}
},
load(pdfDocument) {
this.pdfDocument = pdfDocument;
pdfDocument.getDownloadInfo().then(_ref2 => {
let {
length
} = _ref2;
this._contentLength = length;
this.loadingBar?.hide();
firstPagePromise.then(() => {
this.eventBus?.dispatch("documentloaded", {
source: this
});
});
});
const pageLayoutPromise = pdfDocument.getPageLayout().catch(() => {});
const pageModePromise = pdfDocument.getPageMode().catch(() => {});
const openActionPromise = pdfDocument.getOpenAction().catch(() => {});
this.toolbar?.setPagesCount(pdfDocument.numPages, false);
this.secondaryToolbar?.setPagesCount(pdfDocument.numPages);
this.pdfLinkService.setDocument(pdfDocument);
this.pdfDocumentProperties?.setDocument(pdfDocument);
const pdfViewer = this.pdfViewer;
pdfViewer.setDocument(pdfDocument);
const {
firstPagePromise,
onePageRendered,
pagesPromise
} = pdfViewer;
this.pdfThumbnailViewer?.setDocument(pdfDocument);
const storedPromise = (this.store = new ViewHistory(pdfDocument.fingerprints[0])).getMultiple({
page: null,
zoom: DEFAULT_SCALE_VALUE,
scrollLeft: "0",
scrollTop: "0",
rotation: null,
sidebarView: SidebarView.UNKNOWN,
scrollMode: ScrollMode.UNKNOWN,
spreadMode: SpreadMode.UNKNOWN
}).catch(() => {});
firstPagePromise.then(pdfPage => {
this.loadingBar?.setWidth(this.appConfig.viewerContainer);
this._initializeAnnotationStorageCallbacks(pdfDocument);
Promise.all([animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async _ref3 => {
let [timeStamp, stored, pageLayout, pageMode, openAction] = _ref3;
const viewOnLoad = AppOptions.get("viewOnLoad");
this._initializePdfHistory({
fingerprint: pdfDocument.fingerprints[0],
viewOnLoad,
initialDest: openAction?.dest
});
const initialBookmark = this.initialBookmark;
let zoom = AppOptions.get("defaultZoomValue");
if (!zoom || zoom === '') {
try {
zoom = await this.store.get('zoom');
if (typeof zoom === 'string') {
zoom = zoom?.replace("%", "");
}
if (!isNaN(Number(zoom))) {
zoom = Number(zoom) / 100;
}
} catch (error) {}
}
if (!pdfViewer.currentScaleValue && zoom && zoom !== '') {
pdfViewer.currentScaleValue = zoom;
}
let hash = zoom ? `zoom=${zoom}` : null;
let rotation = null;
let sidebarView = AppOptions.get("sidebarViewOnLoad");
let scrollMode = AppOptions.get("scrollModeOnLoad");
let spreadMode = AppOptions.get("spreadModeOnLoad");
if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) {
hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
rotation = parseInt(stored.rotation, 10);
if (sidebarView === SidebarView.UNKNOWN) {
sidebarView = stored.sidebarView | 0;
}
if (scrollMode === ScrollMode.UNKNOWN) {
scrollMode = stored.scrollMode | 0;
}
if (spreadMode === SpreadMode.UNKNOWN) {
spreadMode = stored.spreadMode | 0;
}
}
if (pageMode && sidebarView === SidebarView.UNKNOWN) {
sidebarView = apiPageModeToSidebarView(pageMode);
}
if (pageLayout && scrollMode === ScrollMode.UNKNOWN && spreadMode === SpreadMode.UNKNOWN) {
const modes = apiPageLayoutToViewerModes(pageLayout);
spreadMode = modes.spreadMode;
}
this.setInitialView(hash, {
rotation,
sidebarView,
scrollMode,
spreadMode
});
this.eventBus.dispatch("documentinit", {
source: this
});
if (!this.isViewerEmbedded) {
pdfViewer.focus();
}
await Promise.race([pagesPromise, new Promise(resolve => {
setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);
})]);
if (!initialBookmark && !hash) {
return;
}
if (pdfViewer.hasEqualPageSizes) {
return;
}
this.initialBookmark = initialBookmark;
pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;
this.setInitialView(hash);
}).catch(() => {
this.setInitialView();
}).then(function () {
pdfViewer.update();
});
});
pagesPromise.then(() => {
this._unblockDocumentLoadEvent();
this._initializeAutoPrint(pdfDocument, openActionPromise);
}, reason => {
if (PDFViewerApplication.onError) {
PDFViewerApplication.onError(reason);
}
this._documentError("pdfjs-loading-error", {
message: reason.message
});
});
onePageRendered.then(data => {
this.externalServices.reportTelemetry({
type: "pageInfo",
timestamp: data.timestamp
});
if (this.pdfOutlineViewer) {
pdfDocument.getOutline().then(outline => {
if (pdfDocument !== this.pdfDocument) {
return;
}
this.pdfOutlineViewer.render({
outline,
pdfDocument
});
});
}
if (this.pdfAttachmentViewer) {
pdfDocument.getAttachments().then(attachments => {
if (pdfDocument !== this.pdfDocument) {
return;
}
this.pdfAttachmentViewer.render({
attachments
});
});
}
if (this.pdfLayerViewer) {
pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => {
if (pdfDocument !== this.pdfDocument) {
return;
}
this.pdfLayerViewer.render({
optionalContentConfig,
pdfDocument
});
});
}
});
this._initializePageLabels(pdfDocument);
this._initializeMetadata(pdfDocument);
this._initializePageOrder(pdfDocument);
},
async _scriptingDocProperties(pdfDocument) {
if (!this.documentInfo) {
await new Promise(resolve => {
this.eventBus._on("metadataloaded", resolve, {
once: true
});
});
if (pdfDocument !== this.pdfDocument) {
return null;
}
}
if (!this._contentLength) {
await new Promise(resolve => {
this.eventBus._on("documentloaded", resolve, {
once: true
});
});
if (pdfDocument !== this.pdfDocument) {
return null;
}
}
return {
...this.documentInfo,
baseURL: this.baseUrl,
filesize: this._contentLength,
filename: this._docFilename,
metadata: this.metadata?.getRaw(),
authors: this.metadata?.get("dc:creator"),
numPages: this.pagesCount,
URL: this.url
};
},
async _initializeAutoPrint(pdfDocument, openActionPromise) {
const [openAction, jsActions] = await Promise.all([openActionPromise, this.pdfViewer.enableScripting ? null : pdfDocument.getJSActions()]);
if (pdfDocument !== this.pdfDocument) {
return;
}
let triggerAutoPrint = openAction?.action === "Print";
if (jsActions) {
NgxConsole.warn("Warning: JavaScript support is not enabled");
for (const name in jsActions) {
if (triggerAutoPrint) {
break;
}
switch (name) {
case "WillClose":
case "WillSave":
case "DidSave":
case "WillPrint":
case "DidPrint":
continue;
}
triggerAutoPrint = jsActions[name].some(js => AutoPrintRegExp.test(js));
}
}
if (triggerAutoPrint) {
this.triggerPrinting();
}
},
async _initializeMetadata(pdfDocument) {
const {
info,
metadata,
contentDispositionFilename,
contentLength
} = await pdfDocument.getMetadata();
if (pdfDocument !== this.pdfDocument) {
return;
}
this.documentInfo = info;
this.metadata = metadata;
this._contentDispositionFilename ??= contentDispositionFilename;
this._contentLength ??= contentLength;
if (AppOptions?.get("verbosity") > 0) {
NgxConsole.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(metadata?.get("pdf:producer") || info.Producer || "-").trim()} / ` + `${(metadata?.get("xmp:creatortool") || info.Creator || "-").trim()}` + `] (PDF.js: ${version || "?"} [${build || "?"}]) modified by ngx-extended-pdf-viewer ${ngxExtendedPdfViewerVersion}`);
}
const pdfTitle = this._docTitle;
if (pdfTitle) {
this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || this._title}`);
} else if (this._contentDispositionFilename) {
this.setTitle(this._contentDispositionFilename);
}
if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) {
if (pdfDocument.loadingParams.enableXfa) {
NgxConsole.warn("Warning: XFA Foreground documents are not supported");
} else {
NgxConsole.warn("Warning: XFA support is not enabled");
}
} else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) {
NgxConsole.warn("Warning: Interactive form support is not enabled");
}
if (info.IsSignaturesPresent) {
NgxConsole.warn("Warning: Digital signatures validation is not supported");
}
this.eventBus.dispatch("metadataloaded", {
source: this
});
},
async _initializePageOrder(pdfDocument) {
if (pdfDocument !== this.pdfDocument) {
return;
}
this.pageOrder = Array.from({
length: this.pdfDocument.numPages
}, (_, i) => i + 1);
},
async _initializePageLabels(pdfDocument) {
const labels = await pdfDocument.getPageLabels();
if (pdfDocument !== this.pdfDocument) {
return;
}
if (!labels || AppOptions.get("disablePageLabels")) {
return;
}
const numLabels = labels.length;
let standardLabels = 0,
emptyLabels = 0;
for (let i = 0; i < numLabels; i++) {
const label = labels[i];
if (label === (i + 1).toString()) {
standardLabels++;
} else if (label === "") {
emptyLabels++;
} else {
break;
}
}
if (standardLabels >= numLabels || emptyLabels >= numLabels) {
return;
}
const {
pdfViewer,
pdfThumbnailViewer,
toolbar
} = this;
pdfViewer.setPageLabels(labels);
pdfThumbnailViewer?.setPageLabels(labels);
toolbar?.setPagesCount(numLabels, true);
toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
},
_initializePdfHistory(_ref4) {
let {
fingerprint,
viewOnLoad,
initialDest = null
} = _ref4;
if (!this.pdfHistory) {
return;
}
this.pdfHistory.initialize({
fingerprint,
resetHistory: viewOnLoad === ViewOnLoad.INITIAL,
updateUrl: AppOptions.get("historyUpdateUrl")
});
if (this.pdfHistory.initialBookmark) {
this.initialBookmark = this.pdfHistory.initialBookmark;
this.initialRotation = this.pdfHistory.initialRotation;
}
if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {
this.initialBookmark = JSON.stringify(initialDest);
this.pdfHistory.push({
explicitDest: initialDest,
pageNumber: null
});
}
},
_initializeAnnotationStorageCallbacks(pdfDocument) {
if (pdfDocument !== this.pdfDocument) {
return;
}
const {
annotationStorage
} = pdfDocument;
annotationStorage.onSetModified = () => {
window.addEventListener("beforeunload", beforeUnload);
this._annotationStorageModified = true;
};
annotationStorage.onResetModified = () => {
window.removeEventListener("beforeunload", beforeUnload);
delete this._annotationStorageModified;
};
annotationStorage.onAnnotationEditor = typeStr => {
this._hasAnnotationEditors = !!typeStr;
this.setTitle();
};
},
setInitialView(storedHash) {
let {
rotation,
sidebarView,
scrollMode,
spreadMode
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const setRotation = angle => {
if (isValidRotation(angle)) {
this.pdfViewer.pagesRotation = angle;
}
};
const setViewerModes = (scroll, spread) => {
if (isValidScrollMode(scroll)) {
this.pdfViewer.scrollMode = scroll;
}
if (isValidSpreadMode(spread)) {
this.pdfViewer.spreadMode = spread;
}
};
this.isInitialViewSet = true;
this.pdfSidebar?.setInitialView(sidebarView);
setViewerModes(scrollMode, spreadMode);
if (this.initialBookmark) {
setRotation(this.initialRotation);
delete this.initialRotation;
if (this.pdfLinkService.setHash) {
this.pdfLinkService.setHash(this.initialBookmark);
}
this.initialBookmark = null;
} else if (storedHash) {
setRotation(rotation);
if (this.pdfLinkService.setHash) {
this.pdfLinkService.setHash(storedHash);
}
}
this.toolbar?.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);
this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber);
if (!this.pdfViewer.currentScaleValue) {
const defaultZoomOption = AppOptions?.get('defaultZoomValue');
if (defaultZoomOption) {
this.pdfViewer.currentScaleValue = defaultZoomOption;
}
}
},
_cleanup() {
if (this.resizeObserver) {
this.resizeObserver.disconnect();
this.resizeObserver = null;
}
if (!this.pdfDocument) {
return;
}
this.pdfViewer.cleanup();
this.pdfThumbnailViewer?.cleanup();
this.pdfDocument.cleanup(AppOptions.get("fontExtraProperties"));
},
forceRendering() {
this.pdfRenderingQueue.printing = !!this.printService;
this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar?.visibleView === SidebarView.THUMBS;
this.pdfRenderingQueue.renderHighestPriority();
},
beforePrint() {
this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => this.pdfDocument?.annotationStorage.print);
if (this.printService) {
return;
}
if (!this.supportsPrinting) {
this._otherError("pdfjs-printing-not-supported");
return;
}
if (!this.pdfViewer.pageViewsReady) {
this.l10n.get("pdfjs-printing-not-ready").then(msg => {
window.alert(msg);
});
return;
}
this.printService = PDFPrintServiceFactory.createPrintService({
pdfDocument: this.pdfDocument,
pagesOverview: this.pdfViewer.getPagesOverview(),
printResolution: AppOptions.get("printResolution"),
printAnnotationStoragePromise: this._printAnnotationStoragePromise,
pageOrder: this.pageOrder,
eventBus: this.pdfViewer.eventBus,
cspPolicyService: this.cspPolicyService
});
this.forceRendering();
this.setTitle();
this.printService.layout();
if (this._hasAnnotationEditors) {
this.externalServices.reportTelemetry({
type: "editing",
data: {
type: "print",
stats: this.pdfDocument?.annotationStorage.editorStats
}
});
}
},
afterPrint() {
if (this._printAnnotationStoragePromise) {
this._printAnnotationStoragePromise.then(() => {
this.pdfScriptingManager.dispatchDidPrint();
});
this._printAnnotationStoragePromise = null;
}
if (this.printService) {
this.printService.destroy();
this.printService = null;
this.pdfDocument?.annotationStorage.resetModified();
}
this.forceRendering();
this.setTitle();
},
rotatePages(delta) {
this.pdfViewer.pagesRotation += delta;
},
requestPresentationMode() {
this.pdfPresentationMode?.request();
},
triggerPrinting() {
if (this.supportsPrinting) {
this.printPdf();
}
},
bindEvents() {
if (this._eventBusAbortController) {
return;
}
const ac = this._eventBusAbortController = new AbortController();
const opts = {
signal: ac.signal
};
const {
eventBus,
externalServices,
pdfDocumentProperties,
pdfViewer,
preferences
} = this;
eventBus._on("resize", onResize.bind(this), opts);
eventBus._on("hashchange", onHashchange.bind(this), opts);
eventBus._on("beforeprint", this.beforePrint.bind(this), opts);
eventBus._on("afterprint", this.afterPrint.bind(this), opts);
eventBus._on("pagerender", onPageRender.bind(this), opts);
eventBus._on("pagerendered", onPageRendered.bind(this), opts);
eventBus._on("updateviewarea", onUpdateViewarea.bind(this), opts);
eventBus._on("pagechanging", onPageChanging.bind(this), opts);
eventBus._on("scalechanging", onScaleChanging.bind(this), opts);
eventBus._on("rotationchanging", onRotationChanging.bind(this), opts);
eventBus._on("sidebarviewchanged", onSidebarViewChanged.bind(this), opts);
eventBus._on("pagemode", onPageMode.bind(this), opts);
eventBus._on("namedaction", onNamedAction.bind(this), opts);
eventBus._on("presentationmodechanged", evt => pdfViewer.presentationModeState = evt.state, opts);
eventBus._on("presentationmode", this.requestPresentationMode.bind(this), opts);
eventBus._on("switchannotationeditormode", evt => pdfViewer.annotationEditorMode = evt, opts);
eventBus._on("print", this.triggerPrinting.bind(this), opts);
eventBus._on("download", this.downloadOrSave.bind(this), opts);
eventBus._on("movePageUp", this.movePageUp.bind(this), opts);
eventBus._on("movePageDown", this.movePageDown.bind(this), opts);
eventBus._on("firstpage", () => this.page = 1, opts);
eventBus._on("lastpage", () => this.page = this.pagesCount, opts);
eventBus._on("nextpage", () => pdfViewer.nextPage(), opts);
eventBus._on("previouspage", () => pdfViewer.previousPage(), opts);
eventBus._on("zoomin", this.zoomIn.bind(this), opts);
eventBus._on("zoomout", this.zoomOut.bind(this), opts);
eventBus._on("zoomreset", this.zoomReset.bind(this), opts);
eventBus._on("pagenumberchanged", onPageNumberChanged.bind(this), opts);
eventBus._on("scalechanged", evt => pdfViewer.currentScaleValue = evt.value, opts);
eventBus._on("rotatecw", this.rotatePages.bind(this, 90), opts);
eventBus._on("rotateccw", this.rotatePages.bind(this, -90), opts);
eventBus._on("optionalcontentconfig", evt => pdfViewer.optionalContentConfigPromise = evt.promise, opts);
eventBus._on("switchscrollmode", evt => pdfViewer.scrollMode = evt.mode, opts);
eventBus._on("scrollmodechanged", onViewerModesChanged.bind(this, "scrollMode"), opts);
eventBus._on("switchspreadmode", evt => pdfViewer.spreadMode = evt.mode, opts);
eventBus._on("spreadmodechanged", onViewerModesChanged.bind(this, "spreadMode"), opts);
eventBus._on("imagealttextsettings", onImageAltTextSettings.bind(this), opts);
eventBus._on("documentproperties", () => pdfDocumentProperties?.open(), opts);
eventBus._on("findfromurlhash", onFindFromUrlHash.bind(this), opts);
eventBus._on("updatefindmatchescount", onUpdateFindMatchesCount.bind(this), opts);
eventBus._on("updatefindcontrolstate", onUpdateFindControlState.bind(this), opts);
eventBus._on("fileinputchange", onFileInputChange.bind(this), opts);
eventBus._on("openfile", onOpenFile.bind(this), opts);
},
bindWindowEvents() {
if (this._windowAbortController) {
return;
}
this._windowAbortController = new AbortController();
const {
eventBus,
appConfig: {
mainContainer
},
pdfViewer,
_windowAbortController: {
signal
}
} = this;
this._touchManager = new TouchManager({
container: window,
isPinchingDisabled: () => pdfViewer.isInPresentationMode,
isPinchingStopped: () => this.overlayManager?.active,
onPinching: this.touchPinchCallback.bind(this),
onPinchEnd: this.touchPinchEndCallback.bind(this),
signal
});
function addWindowResolutionChange() {
let evt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
if (evt) {
pdfViewer.refresh();
}
const mediaQueryList = window.matchMedia(`(resolution: ${OutputScale.pixelRatio}dppx)`);
mediaQueryList.addEventListener("change", addWindowResolutionChange, {
once: true,
signal
});
}
addWindowResolutionChange();
const viewerContainer = document.getElementById("viewerContainer");
viewerContainer?.addEventListener("wheel", onWheel.bind(this), {
passive: false,
signal
});
window.addEventListener("wheel", onWheel.bind(this), {
passive: false,
signal
});
window.addEventListener("click", onClick.bind(this), {
signal
});
window.addEventListener("keydown", onKeyDown.bind(this), {
signal
});
window.addEventListener("keyup", onKeyUp.bind(this), {
signal
});
if (viewerContainer) {
let resizeTimeout;
let previousWidth = mainContainer.clientWidth;
let previousHeight = mainContainer.clientHeight;
this.resizeObserver = new ResizeObserver(entries => {
const newWidth = mainContainer.clientWidth;
const newHeight = mainContainer.clientHeight;
if (newWidth !== previousWidth || newHeight !== previousHeight) {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(() => {
if (mainContainer.offsetParent) {
eventBus.dispatch("resize", {
source: mainContainer
});
}
}, 50);
previousWidth = newWidth;
previousHeight = newHeight;
}
});
this.resizeObserver.observe(mainContainer);
} else {
window.addEventListener("resize", () => eventBus.dispatch("resize", {
source: window
}), {
signal
});
}
window.addEventListener("hashchange", () => {
eventBus.dispatch("hashchange", {
source: window,
hash: document.location.hash.substring(1)
});
}, {
signal
});
window.addEventListener("beforeprint", () => eventBus.dispatch("beforeprint", {
source: window
}), {
signal
});
window.addEventListener("afterprint", () => eventBus.dispatch("afterprint", {
source: window
}), {
signal
});
window.addEventListener("updatefromsandbox", evt => {
eventBus.dispatch("updatefromsandbox", {
source: window,
detail: evt.detail
});
}, {
signal
});
if (!("onscrollend" in document.documentElement)) {
return;
}
({
scrollTop: this._lastScrollTop,
scrollLeft: this._lastScrollLeft
} = mainContainer);
const scrollend = () => {
({
scrollTop: this._lastScrollTop,
scrollLeft: this._lastScrollLeft
} = mainContainer);
this._isScrolling = false;
mainContainer.addEventListener("scroll", scroll, {
passive: true,
signal
});
mainContainer.removeEventListener("scrollend", scrollend);
mainContainer.removeEventListener("blur", scrollend);
};
const scroll = () => {
if (this._isCtrlKeyDown) {
return;
}
if (this._lastScrollTop === mainContainer.scrollTop && this._lastScrollLeft === mainContainer.scrollLeft) {
return;
}
mainContainer.removeEventListener("scroll", scroll);
this._isScrolling = true;
mainContainer.addEventListener("scrollend", scrollend, {
signal
});
mainContainer.addEventListener("blur", scrollend, {
signal
});
};
mainContainer.addEventListener("scroll", scroll, {
passive: true,
signal
});
},
unbindEvents() {
this._eventBusAbortController?.abort();
this._eventBusAbortController = null;
},
unbindWindowEvents() {
this._windowAbortController?.abort();
this._windowAbortController = null;
this._touchManager = null;
},
async testingClose() {
this.unbindEvents();
this.unbindWindowEvents();
this._globalAbortController?.abort();
this._globalAbortController = null;
this.findBar?.close();
await Promise.all([this.l10n?.destroy(), this.close()]);
},
_accumulateTicks(ticks, prop) {
if (this[prop] > 0 && ticks < 0 || this[prop] < 0 && ticks > 0) {
this[prop] = 0;
}
this[prop] += ticks;
const wholeTicks = Math.trunc(this[prop]);
this[prop] -= wholeTicks;
return wholeTicks;
},
_accumulateFactor(previousScale, factor, prop) {
if (factor === 1) {
return 1;
}
if (this[prop] > 1 && factor < 1 || this[prop] < 1 && factor > 1) {
this[prop] = 1;
}
const newFactor = Math.floor(previousScale * factor * this[prop] * 100) / (100 * previousScale);
this[prop] = factor / newFactor;
return newFactor;
},
_unblockDocumentLoadEvent() {
document.blockUnblockOnload?.(false);
this._unblockDocumentLoadEvent = () => {};
},
get scriptingReady() {
return this.pdfScriptingManager.ready;
}
};
initCom(PDFViewerApplication);
{
PDFPrintServiceFactory.initGlobals(PDFViewerApplication);
}
{
const HOSTED_VIEWER_ORIGINS = new Set(["null", "http://mozilla.github.io", "https://mozilla.github.io"]);
var validateFileURL = function (file) {
if (!file) {
return;
}
const viewerOrigin = URL.parse(window.location)?.origin || "null";
if (HOSTED_VIEWER_ORIGINS.has(viewerOrigin)) {
return;
}
const fileOrigin = URL.parse(file, window.location)?.origin;
if (fileOrigin === viewerOrigin) {
return;
}
const ex = new Error("file origin does not match viewer's");
PDFViewerApplication._documentError("pdfjs-loading-error", {
message: ex.message
});
if (PDFViewerApplication.onError) {
PDFViewerApplication.onError(ex);
}
throw ex;
};
var onFileInputChange = function (evt) {
if (this.pdfViewer?.isInPresentationMode) {
return;
}
const file = evt.fileInput.files[0];
this.open({
url: URL.createObjectURL(file),
originalUrl: file.name
});
};
var onOpenFile = function (evt) {
this._openFileInput?.click();
};
}
function onPageRender(_ref5) {
let {
pageNumber
} = _ref5;
if (pageNumber === this.page) {
this.toolbar?.updateLoadingIndicatorState(true);
}
}
function onPageRendered(_ref6) {
let {
pageNumber,
isDetailView,
error
} = _ref6;
if (pageNumber === this.page) {
this.toolbar?.updateLoadingIndicatorState(false);
}
if (!isDetailView && this.pdfSidebar?.visibleView === SidebarView.THUMBS) {
const pageView = this.pdfViewer.getPageView(pageNumber - 1);
const thumbnailView = this.pdfThumbnailViewer?.getThumbnail(pageNumber - 1);
if (pageView) {
thumbnailView?.setImage(pageView);
}
}
if (error) {
this._otherError("pdfjs-rendering-error", error);
}
}
function onPageMode(_ref7) {
let {
mode
} = _ref7;
let view;
switch (mode) {
case "thumbs":
view = SidebarView.THUMBS;
break;
case "bookmarks":
case "outline":
view = SidebarView.OUTLINE;
break;
case "attachments":
view = SidebarView.ATTACHMENTS;
break;
case "layers":
view = SidebarView.LAYERS;
break;
case "none":
view = SidebarView.NONE;
break;
default:
NgxConsole.error('Invalid "pagemode" hash parameter: ' + mode);
return;
}
this.pdfSidebar?.switchView(view, true);
}
function onNamedAction(evt) {
switch (evt.action) {
case "GoToPage":
this.appConfig.toolbar?.pageNumber.select();
break;
case "Find":
if (!this.supportsIntegratedFind) {
this.findBar?.toggle();
}
break;
case "Print":
this.triggerPrinting();
break;
case "SaveAs":
this.downloadOrSave();
break;
}
}
function onSidebarViewChanged(_ref8) {
let {
view
} = _ref8;
this.pdfRenderingQueue.isThumbnailViewEnabled = view === SidebarView.THUMBS;
if (this.isInitialViewSet) {
this.store?.set("sidebarView", view).catch(() => {});
}
}
function onUpdateViewarea(_ref9) {
let {
location
} = _ref9;
if (this.isInitialViewSet) {
const settings = {};
if (location.pageNumber !== undefined || location.pageNumber !== null) {
settings.page = location.pageNumber;
}
if (location.scale) {
settings.zoom = location.scale;
}
if (location.left) {
settings.scrollLeft = location.left;
}
if (location.top) {
settings.scrollTop = location.top;
}
if (location.rotation !== undefined || location.rotation !== null) {
settings.rotation = location.rotation;
}
PDFViewerApplication.store?.setMultiple(settings).catch(() => {});
}
if (this.appConfig.secondaryToolbar) {
this.appConfig.secondaryToolbar.viewBookmarkButton.href = this.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
}
}
function onViewerModesChanged(name, evt) {
if (this.isInitialViewSet && !this.pdfViewer.isInPresentationMode) {
this.store?.set(name, evt.mode).catch(() => {});
}
}
function onResize() {
const {
pdfDocument,
pdfViewer,
pdfRenderingQueue
} = this;
if (pdfRenderingQueue.printing && window.matchMedia("print").matches) {
return;
}
if (!pdfDocument) {
return;
}
const currentScaleValue = pdfViewer.currentScaleValue;
if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") {
pdfViewer.currentScaleValue = currentScaleValue;
}
pdfViewer.update();
}
function onHashchange(evt) {
const hash = evt.hash;
if (!hash) {
return;
}
if (!this.isInitialViewSet) {
this.initialBookmark = hash;
} else if (!this.pdfHistory?.popStateInProgress) {
if (this.pdfLinkService.setHash) {
this.pdfLinkService.setHash(hash);
}
}
}
function onPageNumberChanged(evt) {
const {
pdfViewer
} = this;
if (evt.value !== "") {
this.pdfLinkService.goToPage(evt.value);
}
if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
this.toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
}
}
function onImageAltTextSettings() {
this.imageAltTextSettings?.open({
enableGuessAltText: AppOptions.get("enableGuessAltText"),
enableNewAltTextWhenAddingImage: AppOptions.get("enableNewAltTextWhenAddingImage")
});
}
function onFindFromUrlHash(evt) {
this.eventBus.dispatch("find", {
source: evt.source,
type: "",
query: evt.query,
caseSensitive: false,
entireWord: false,
highlightAll: true,
findPrevious: false,
matchDiacritics: true
});
}
function onUpdateFindMatchesCount(_ref0) {
let {
matchesCount
} = _ref0;
if (this.supportsIntegratedFind) {
this.externalServices.updateFindMatchesCount(matchesCount);
} else {
this.findBar?.updateResultsCount(matchesCount);
}
}
function onUpdateFindControlState(_ref1) {
let {
state,
previous,
entireWord,
matchesCount,
rawQuery
} = _ref1;
if (this.supportsIntegratedFind) {
this.externalServices.updateFindControlState({
result: state,
findPrevious: previous,
entireWord,
matchesCount,
rawQuery
});
} else {
this.findBar?.updateUIState(state, previous, matchesCount);
}
}
function onScaleChanging(evt) {
this.toolbar?.setPageScale(evt.presetValue, evt.scale);
this.pdfViewer.update(evt.noScroll);
this.pdfViewer.updateBookModeScale(evt);
}
function onRotationChanging(evt) {
if (this.pdfThumbnailViewer) {
this.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;
}
this.forceRendering();
this.pdfViewer.currentPageNumber = evt.pageNumber;
}
function onPageChanging(_ref10) {
let {
pageNumber,
pageLabel
} = _ref10;
this.toolbar?.setPageNumber(pageNumber, pageLabel);
this.secondaryToolbar?.setPageNumber(pageNumber);
if (this.pdfSidebar?.visibleView === SidebarView.THUMBS) {
this.pdfThumbnailViewer?.scrollThumbnailIntoView(pageNumber);
}
const currentPage = this.pdfViewer.getPageView(pageNumber - 1);
this.toolbar?.updateLoadingIndicatorState(currentPage?.renderingState === RenderingStates.RUNNING);
const pageNumberInput = document.getElementById("pageNumber");
if (pageNumberInput) {
const pageScrollEvent = new CustomEvent("page-change");
pageNumberInput.dispatchEvent(pageScrollEvent);
}
}
function onWheel(evt) {
const element = document.getElementById("viewerContainer");
const hover = element.parentNode.querySelector(":hover");
if (hover !== element) {
return;
}
const {
pdfViewer,
supportsMouseWheelZoomCtrlKey,
supportsMouseWheelZoomMetaKey,
supportsPinchToZoom
} = this;
if (pdfViewer.isInPresentationMode) {
return;
}
const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
if (PDFViewerApplication?.isKeyIgnored && PDFViewerApplication.isKeyIgnored(cmd, "WHEEL")) {
return;
}
const deltaMode = evt.deltaMode;
let scaleFactor = Math.exp(-evt.deltaY / 100);
const isBuiltInMac = false;
const isPinchToZoom = evt.ctrlKey && !this._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0;
const origin = [evt.clientX, evt.clientY];
if (isPinchToZoom || evt.ctrlKey && supportsMouseWheelZoomCtrlKey || evt.metaKey && supportsMouseWheelZoomMetaKey) {
evt.preventDefault();
if (this._isScrolling || document.visibilityState === "hidden" || this.overlayManager.active) {
return;
}
if (isPinchToZoom && supportsPinchToZoom) {
scaleFactor = this._accumulateFactor(pdfViewer.currentScale, scaleFactor, "_wheelUnusedFactor");
this.updateZoom(null, scaleFactor, origin);
} else {
const delta = normalizeWheelEventDirection(evt);
let ticks = 0;
if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) {
ticks = Math.abs(delta) >= 1 ? Math.sign(delta) : this._accumulateTicks(delta, "_wheelUnusedTicks");
} else {
const PIXELS_PER_LINE_SCALE = 30;
ticks = this._accumulateTicks(delta / PIXELS_PER_LINE_SCALE, "_wheelUnusedTicks");
}
this.updateZoom(ticks, null, origin);
}
}
}
function closeSecondaryToolbar(_ref11) {
let {
target
} = _ref11;
if (!this.secondaryToolbar?.isOpen) {
return;
}
const {
toolbar,
secondaryToolbar
} = this.appConfig;
if (this.pdfViewer.containsElement(target) || toolbar?.container.contains(target) && !secondaryToolbar?.toolbar.contains(target) && !secondaryToolbar?.toggleButton.contains(target)) {
if (evt.target && evt.target.parentElement === appConfig.secondaryToolbar.toggleButton) {
return;
}
if (evt.target && evt.target.parentElement && evt.target.parentElement.parentElement === appConfig.secondaryToolbar.toggleButton) {
return;
}
this.secondaryToolbar.close();
}
}
function closeEditorUndoBar(evt) {
if (!this.editorUndoBar?.isOpen) {
return;
}
if (this.appConfig.secondaryToolbar?.toolbar.contains(evt.target)) {
this.editorUndoBar.hide();
}
}
function onClick(evt) {
closeSecondaryToolbar.call(this, evt);
closeEditorUndoBar.call(this, evt);
}
function onKeyUp(evt) {
if (evt.key === "Control") {
this._isCtrlKeyDown = false;
}
}
function onKeyDown(evt) {
this._isCtrlKeyDown = evt.key === "Control";
if (this.editorUndoBar?.isOpen && evt.keyCode !== 9 && evt.keyCode !== 16 && !((evt.keyCode === 13 || evt.keyCode === 32) && getActiveOrFocusedElement() === this.appConfig.editorUndoBar.undoButton)) {
this.editorUndoBar.hide();
}
if (this.overlayManager.active) {
return;
}
const {
eventBus,
pdfViewer
} = this;
const isViewerInPresentationMode = pdfViewer.isInPresentationMode;
let handled = false,
ensureViewerFocused = false;
const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
if (PDFViewerApplication.ngxKeyboardManager) {
if (PDFViewerApplication.ngxKeyboardManager.isKeyIgnored.bind(PDFViewerApplication.ngxKeyboardManager)(cmd, evt.keyCode)) {
return;
}
}
if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
switch (evt.keyCode) {
case 70:
if (!this.supportsIntegratedFind && !evt.shiftKey) {
if (AppOptions.get("textLayerMode") !== TextLayerMode.DISABLE) {
let findButtonVisible = false;
const primaryViewFind = this.pdfViewer.viewer.closest("#outerContainer")?.querySelector("#primaryViewFind");
if (primaryViewFind) {
findButtonVisible ||= !primaryViewFind?.classList.contains("dummy-component");
}
const secondaryToolBar = this.pdfViewer.viewer.closest("#outerContainer")?.querySelector("#secondaryToolbarToggle");
if (!secondaryToolBar.hidden) {
const secondaryViewFind = this.pdfViewer.viewer.closest("#outerContainer")?.querySelector("#secondaryViewFind");
if (secondaryViewFind) {
findButtonVisible ||= !secondaryViewFind?.classList.contains("dummy-component");
}
}
if (findButtonVisible) {
this.findBar?.open();
}
}
handled = true;
}
break;
case 71:
if (!this.supportsIntegratedFind) {
const {
state
} = this.findController;
if (state) {
const newState = {
source: window,
type: "again",
findPrevious: cmd === 5 || cmd === 12
};
eventBus.dispatch("find", {
...state,
...newState
});
}
handled = true;
}
break;
case 61:
case 107:
case 187:
case 171:
this.zoomIn();
handled = true;
break;
case 173:
case 109:
case 189:
this.zoomOut();
handled = true;
break;
case 48:
case 96:
if (!isViewerInPresentationMode) {
setTimeout(() => {
this.zoomReset();
});
handled = false;
}
break;
case 38:
if (isViewerInPresentationMode || this.page > 1) {
this.page = 1;
handled = true;
ensureViewerFocused = true;
}
break;
case 40:
if (isViewerInPresentationMode || this.page < this.pagesCount) {
this.page = this.pagesCount;
handled = true;
ensureViewerFocused = true;
}
break;
}
}
if (cmd === 1 || cmd === 8) {
switch (evt.keyCode) {
case 83:
eventBus.dispatch("download", {
source: window
});
handled = true;
break;
case 79:
{
eventBus.dispatch("openfile", {
source: window
});
handled = true;
}
break;
}
}
if (cmd === 3 || cmd === 10) {
switch (evt.keyCode) {
case 80:
this.requestPresentationMode();
handled = true;
this.externalServices.reportTelemetry({
type: "buttons",
data: {
id: "presentationModeKeyboard"
}
});
break;
case 71:
if (this.appConfig.toolbar) {
this.appConfig.toolbar.pageNumber.select();
handled = true;
}
break;
}
}
if (handled) {
if (ensureViewerFocused && !isViewerInPresentationMode) {
pdfViewer.focus();
}
evt.preventDefault();
return;
}
const curElement = getActiveOrFocusedElement();
const curElementTagName = curElement?.tagName.toUpperCase();
if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElementTagName === "BUTTON" && (evt.keyCode === 13 || evt.keyCode === 32) || curElement?.isContentEditable) {
if (evt.keyCode !== 27) {
return;
}
}
if (cmd === 0) {
let turnPage = 0,
turnOnlyIfPageFit = false;
switch (evt.keyCode) {
case 38:
if (this.supportsCaretBrowsingMode) {
this.moveCaret(true, false);
handled = true;
break;
}
case 33:
if (pdfViewer.isVerticalScrollbarEnabled) {
turnOnlyIfPageFit = true;
}
turnPage = -1;
break;
case 8:
if (!isViewerInPresentationMode) {
turnOnlyIfPageFit = true;
}
turnPage = -1;
break;
case 37:
if (this.supportsCaretBrowsingMode) {
return;
}
if (pdfViewer.isHorizontalScrollbarEnabled) {
turnOnlyIfPageFit = true;
}
case 75:
case 80:
turnPage = -1;
break;
case 27:
if (this.secondaryToolbar?.isOpen) {
this.secondaryToolbar.close();
handled = true;
}
if (!this.supportsIntegratedFind && this.findBar?.opened) {
this.findBar.close();
handled = true;
}
break;
case 40:
if (this.supportsCaretBrowsingMode) {
this.moveCaret(false, false);
handled = true;
break;
}
case 34:
if (pdfViewer.isVerticalScrollbarEnabled) {
turnOnlyIfPageFit = true;
}
turnPage = 1;
break;
case 13:
case 32:
if (!isViewerInPresentationMode) {
turnOnlyIfPageFit = true;
}
turnPage = 1;
break;
case 39:
if (this.supportsCaretBrowsingMode) {
return;
}
if (pdfViewer.isHorizontalScrollbarEnabled) {
turnOnlyIfPageFit = true;
}
case 74:
case 78:
turnPage = 1;
break;
case 36:
if (isViewerInPresentationMode || this.page > 1) {
this.page = 1;
handled = true;
ensureViewerFocused = true;
}
break;
case 35:
if (isViewerInPresentationMode || this.page < this.pagesCount) {
this.page = this.pagesCount;
handled = true;
ensureViewerFocused = true;
}
break;
case 83:
this.pdfCursorTools?.switchTool(CursorTool.SELECT);
break;
case 72:
this.pdfCursorTools?.switchTool(CursorTool.HAND);
break;
case 82:
this.rotatePages(90);
break;
case 115:
this.pdfSidebar?.toggle();
break;
}
if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) {
const {
mainContainer
} = this.appConfig;
if (viewerIsAllowedToCaptureKeyEvent(mainContainer)) {
if (turnPage > 0) {
pdfViewer.nextPage();
} else {
pdfViewer.previousPage();
}
}
handled = true;
}
}
if (cmd === 4) {
switch (evt.keyCode) {
case 13:
case 32:
if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") {
break;
}
pdfViewer.previousPage();
handled = true;
break;
case 38:
this.moveCaret(true, true);
handled = true;
break;
case 40:
this.moveCaret(false, true);
handled = true;
break;
case 82:
this.rotatePages(-90);
break;
}
}
if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {
pdfViewer.focus();
}
if (handled) {
evt.preventDefault();
}
}
function viewerIsAllowedToCaptureKeyEvent(mainContainer) {
let elementInFocus = document.activeElement;
const ngxExtendedPdfViewer = mainContainer.closest('ngx-extended-pdf-viewer');
while (elementInFocus && elementInFocus !== document.body) {
if (elementInFocus === ngxExtendedPdfViewer) {
return true;
}
if (elementInFocus.tabIndex !== -1) {
return false;
}
elementInFocus = elementInFocus.parentElement;
}
return true;
}
function beforeUnload(evt) {
evt.preventDefault();
evt.returnValue = "";
return false;
}
PDFViewerApplication.printPdf = printPdf;
PDFViewerApplication.PDFPrintServiceFactory = PDFPrintServiceFactory;
PDFViewerApplication.ngxConsole = new NgxConsole();
const ServiceWorkerOptions = {
showUnverifiedSignatures: false
};
PDFViewerApplication.serviceWorkerOptions = ServiceWorkerOptions;
;// ./web/viewer.js
const AppConstants = {
LinkTarget: LinkTarget,
RenderingStates: RenderingStates,
ScrollMode: ScrollMode,
SpreadMode: SpreadMode
};
if (!HTMLCollection.prototype[Symbol.iterator]) {
HTMLCollection.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
}
(function () {
if (typeof window.CustomEvent === "function") {
return;
}
function CustomEvent(event, params) {
params = params || {
bubbles: false,
cancelable: false,
detail: null
};
const evt = document.createEvent("CustomEvent");
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
return evt;
}
window.CustomEvent = CustomEvent;
})();
function getViewerConfiguration() {
return {
appContainer: document.getElementsByClassName("body")[0] ?? document.body,
principalContainer: document.getElementById("mainContainer"),
mainContainer: document.getElementById("viewerContainer"),
viewerContainer: document.getElementById("viewer"),
toolbar: {
container: document.getElementById("toolbarContainer"),
numPages: document.getElementById("numPages"),
pageNumber: document.getElementById("pageNumber"),
scaleSelect: document.getElementById("scaleSelect"),
customScaleOption: document.getElementById("customScaleOption"),
previous: document.getElementById("previous"),
next: document.getElementById("next"),
zoomIn: document.getElementById("primaryZoomIn") ?? document.getElementById("zoomInButton"),
zoomOut: document.getElementById("primaryZoomOut") ?? document.getElementById("zoomOutButton"),
print: document.getElementById("printButton"),
editorFreeTextButton: document.getElementById("primaryEditorFreeText") ?? document.getElementById("editorFreeTextButton"),
editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"),
editorHighlightButton: document.getElementById("primaryEditorHighlight") ?? document.getElementById("editorHighlightButton"),
editorHighlightParamsToolbar: document.getElementById("editorHighlightParamsToolbar"),
editorHighlightColorPicker: document.getElementById("editorHighlightColorPicker"),
editorInkButton: document.getElementById("primaryEditorInk") ?? document.getElementById("editorInkButton"),
editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"),
editorStampButton: document.getElementById("primaryEditorStamp") ?? document.getElementById("editorStampButton"),
presentationModeButton: document.getElementById("presentationMode"),
editorStampParamsToolbar: document.getElementById("editorStampParamsToolbar"),
editorSignatureButton: document.getElementById("primaryEditorSignatureButton") ?? document.getElementById("editorSignatureButton"),
editorSignatureParamsToolbar: document.getElementById("editorSignatureParamsToolbar"),
download: document.getElementById("downloadButton"),
movePageUp: document.getElementById("movePageUpButton"),
movePageDown: document.getElementById("movePageDownButton")
},
secondaryToolbar: {
toolbar: document.getElementById("secondaryToolbar"),
toggleButton: document.getElementById("secondaryToolbarToggle"),
presentationModeButton: document.getElementById("secondaryPresentationMode"),
openFileButton: document.getElementById("secondaryOpenFile"),
printButton: document.getElementById("secondaryPrintButton"),
downloadButton: document.getElementById("secondaryDownload"),
viewBookmarkButton: document.getElementById("viewBookmark"),
firstPageButton: document.getElementById("firstPage"),
lastPageButton: document.getElementById("lastPage"),
pageRotateCwButton: document.getElementById("pageRotateCw"),
pageRotateCcwButton: document.getElementById("pageRotateCcw"),
cursorSelectToolButton: document.getElementById("cursorSelectTool"),
cursorHandToolButton: document.getElementById("cursorHandTool"),
scrollPageButton: document.getElementById("scrollPage"),
scrollVerticalButton: document.getElementById("scrollVertical"),
scrollHorizontalButton: document.getElementById("scrollHorizontal"),
scrollWrappedButton: document.getElementById("scrollWrapped"),
spreadNoneButton: document.getElementById("spreadNone"),
spreadOddButton: document.getElementById("spreadOdd"),
spreadEvenButton: document.getElementById("spreadEven"),
imageAltTextSettingsButton: document.getElementById("imageAltTextSettings"),
imageAltTextSettingsSeparator: document.getElementById("imageAltTextSettingsSeparator"),
documentPropertiesButton: document.getElementById("documentProperties")
},
sidebar: {
outerContainer: document.getElementById("outerContainer"),
sidebarContainer: document.getElementById("sidebarContainer"),
toggleButton: document.getElementById("primarySidebarToggle") ?? document.getElementById("sidebarToggleButton"),
resizer: document.getElementById("sidebarResizer"),
thumbnailButton: document.getElementById("viewThumbnail"),
outlineButton: document.getElementById("viewOutline"),
attachmentsButton: document.getElementById("viewAttachments"),
layersButton: document.getElementById("viewLayers"),
thumbnailView: document.getElementById("thumbnailView"),
outlineView: document.getElementById("outlineView"),
attachmentsView: document.getElementById("attachmentsView"),
layersView: document.getElementById("layersView"),
currentOutlineItemButton: document.getElementById("currentOutlineItem")
},
findBar: {
bar: document.getElementById("findbar"),
toggleButton: document.getElementById("primaryViewFind") ?? document.getElementById("viewFindButton"),
findField: document.getElementById("findInput"),
highlightAllCheckbox: document.getElementById("findHighlightAll"),
caseSensitiveCheckbox: document.getElementById("findMatchCase"),
findMultipleCheckbox: document.getElementById("findMultiple"),
matchRegExpCheckbox: document.getElementById("matchRegExp"),
matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"),
entireWordCheckbox: document.getElementById("findEntireWord"),
findMsg: document.getElementById("findMsg"),
findResultsCount: document.getElementById("findResultsCount"),
findPreviousButton: document.getElementById("findPreviousButton") ?? document.getElementById("findPrevious"),
findNextButton: document.getElementById("findNextButton") ?? document.getElementById("findNext")
},
passwordOverlay: {
dialog: document.getElementById("passwordDialog"),
label: document.getElementById("passwordText"),
input: document.getElementById("password"),
submitButton: document.getElementById("passwordSubmit"),
cancelButton: document.getElementById("passwordCancel")
},
documentProperties: {
dialog: document.getElementById("documentPropertiesDialog"),
closeButton: document.getElementById("documentPropertiesClose"),
fields: {
fileName: document.getElementById("fileNameField"),
fileSize: document.getElementById("fileSizeField"),
title: document.getElementById("titleField"),
author: document.getElementById("authorField"),
subject: document.getElementById("subjectField"),
keywords: document.getElementById("keywordsField"),
creationDate: document.getElementById("creationDateField"),
modificationDate: document.getElementById("modificationDateField"),
creator: document.getElementById("creatorField"),
producer: document.getElementById("producerField"),
version: document.getElementById("versionField"),
pageCount: document.getElementById("pageCountField"),
pageSize: document.getElementById("pageSizeField"),
linearized: document.getElementById("linearizedField")
}
},
altTextDialog: {
dialog: document.getElementById("altTextDialog"),
optionDescription: document.getElementById("descriptionButton"),
optionDecorative: document.getElementById("decorativeButton"),
textarea: document.getElementById("descriptionTextarea"),
cancelButton: document.getElementById("altTextCancel"),
saveButton: document.getElementById("altTextSave")
},
newAltTextDialog: {
dialog: document.getElementById("newAltTextDialog"),
title: document.getElementById("newAltTextTitle"),
descriptionContainer: document.getElementById("newAltTextDescriptionContainer"),
textarea: document.getElementById("newAltTextDescriptionTextarea"),
disclaimer: document.getElementById("newAltTextDisclaimer"),
learnMore: document.getElementById("newAltTextLearnMore"),
imagePreview: document.getElementById("newAltTextImagePreview"),
createAutomatically: document.getElementById("newAltTextCreateAutomatically"),
createAutomaticallyButton: document.getElementById("newAltTextCreateAutomaticallyButton"),
downloadModel: document.getElementById("newAltTextDownloadModel"),
downloadModelDescription: document.getElementById("newAltTextDownloadModelDescription"),
error: document.getElementById("newAltTextError"),
errorCloseButton: document.getElementById("newAltTextCloseButton"),
cancelButton: document.getElementById("newAltTextCancel"),
notNowButton: document.getElementById("newAltTextNotNow"),
saveButton: document.getElementById("newAltTextSave")
},
altTextSettingsDialog: {
dialog: document.getElementById("altTextSettingsDialog"),
createModelButton: document.getElementById("createModelButton"),
aiModelSettings: document.getElementById("aiModelSettings"),
learnMore: document.getElementById("altTextSettingsLearnMore"),
deleteModelButton: document.getElementById("deleteModelButton"),
downloadModelButton: document.getElementById("downloadModelButton"),
showAltTextDialogButton: document.getElementById("showAltTextDialogButton"),
altTextSettingsCloseButton: document.getElementById("altTextSettingsCloseButton"),
closeButton: document.getElementById("altTextSettingsCloseButton")
},
addSignatureDialog: {
dialog: document.getElementById("addSignatureDialog"),
panels: document.getElementById("addSignatureActionContainer"),
typeButton: document.getElementById("addSignatureTypeButton"),
typeInput: document.getElementById("addSignatureTypeInput"),
drawButton: document.getElementById("addSignatureDrawButton"),
drawSVG: document.getElementById("addSignatureDraw"),
drawPlaceholder: document.getElementById("addSignatureDrawPlaceholder"),
drawThickness: document.getElementById("addSignatureDrawThickness"),
imageButton: document.getElementById("addSignatureImageButton"),
imageSVG: document.getElementById("addSignatureImage"),
imagePlaceholder: document.getElementById("addSignatureImagePlaceholder"),
imagePicker: document.getElementById("addSignatureFilePicker"),
imagePickerLink: document.getElementById("addSignatureImageBrowse"),
description: document.getElementById("addSignatureDescription"),
clearButton: document.getElementById("clearSignatureButton"),
saveContainer: document.getElementById("addSignatureSaveContainer"),
saveCheckbox: document.getElementById("addSignatureSaveCheckbox"),
errorBar: document.getElementById("addSignatureError"),
errorCloseButton: document.getElementById("addSignatureErrorCloseButton"),
cancelButton: document.getElementById("addSignatureCancelButton"),
addButton: document.getElementById("addSignatureAddButton")
},
editSignatureDialog: {
dialog: document.getElementById("editSignatureDescriptionDialog"),
description: document.getElementById("editSignatureDescription"),
editSignatureView: document.getElementById("editSignatureView"),
cancelButton: document.getElementById("editSignatureCancelButton"),
updateButton: document.getElementById("editSignatureUpdateButton")
},
annotationEditorParams: {
editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"),
editorFreeTextColor: document.getElementById("editorFreeTextColor"),
editorInkColor: document.getElementById("editorInkColor"),
editorInkThickness: document.getElementById("editorInkThickness"),
editorInkOpacity: document.getElementById("editorInkOpacity"),
editorStampAddImage: document.getElementById("editorStampAddImage"),
editorSignatureAddSignature: document.getElementById("editorSignatureAddSignature"),
editorFreeHighlightThickness: document.getElementById("editorFreeHighlightThickness"),
editorHighlightShowAll: document.getElementById("editorHighlightShowAll")
},
editorUndoBar: {
container: document.getElementById("editorUndoBar"),
message: document.getElementById("editorUndoBarMessage"),
undoButton: document.getElementById("editorUndoBarUndoButton"),
closeButton: document.getElementById("editorUndoBarCloseButton")
}
};
}
function webViewerLoad(cspPolicyService) {
const config = getViewerConfiguration();
const event = new CustomEvent("webviewerloaded", {
bubbles: true,
cancelable: true,
detail: {
source: window
}
});
try {
parent.document.dispatchEvent(event);
} catch (ex) {
NgxConsole.error("webviewerloaded:", ex);
document.dispatchEvent(event);
}
config.cspPolicyService = cspPolicyService;
PDFViewerApplication.run(config);
}
document.blockUnblockOnload?.(true);
if (globalThis.STANDALONE_VIEWER) {
if (document.readyState === "interactive" || document.readyState === "complete") {
webViewerLoad();
} else {
document.addEventListener("DOMContentLoaded", webViewerLoad, true);
}
}
const viewer_event = new CustomEvent("ngxViewerFileHasBeenLoaded", {
detail: {
PDFViewerApplication: PDFViewerApplication,
PDFViewerApplicationConstants: AppConstants,
PDFViewerApplicationOptions: AppOptions,
webViewerLoad
}
});
document.dispatchEvent(viewer_event);
export { PDFViewerApplication, AppConstants as PDFViewerApplicationConstants, AppOptions as PDFViewerApplicationOptions, webViewerLoad };