diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index b32edd8..bac1bbb 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -24,10 +24,8 @@ class DashboardController extends Controller // Documentos recientes (últimos 7 días) $recentDocuments = Document::with(['project', 'currentVersion']) - ->where('created_at', '>=', now()->subDays(7)) ->orderBy('created_at', 'desc') - ->limit(5) - ->get(); + ->limit(5); // Actividad reciente $recentActivities = DB::table('activity_log') @@ -35,7 +33,9 @@ class DashboardController extends Controller ->limit(10) ->get(); - return view('dashboard', compact('stats', 'recentDocuments', 'recentActivities')); + $showSidebar = true; // Variable para mostrar el sidebar + + return view('dashboard', compact('stats', 'recentDocuments', 'recentActivities', 'showSidebar')); } private function calculateStorageUsed() diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 19109cc..0bdd567 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -7,6 +7,7 @@ use App\Models\Project; use App\Models\User; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; class ProjectController extends Controller { @@ -37,8 +38,9 @@ class ProjectController extends Controller public function create() { $this->authorize('create projects'); - + $project = new Project(); return view('projects.create', [ + 'project' => $project, 'categories' => Category::orderBy('name')->get(), 'users' => User::where('id', '!=', auth()->id())->get(), ]); @@ -50,25 +52,22 @@ class ProjectController extends Controller public function store(Request $request) { $validated = $request->validate([ + 'reference' => 'required|string|max:255', 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'status' => 'required|in:Activo,Inactivo', - //'team' => 'sometimes|array', - //'team.*' => 'exists:users,id', - 'project_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', 'address' => 'nullable|string|max:255', 'province' => 'nullable|string|max:100', - //'country' => 'nullable|string|size:2', + 'country' => 'nullable|string|size:2', 'postal_code' => 'nullable|string|max:10', 'latitude' => 'required|numeric|between:-90,90', 'longitude' => 'required|numeric|between:-180,180', - //'icon' => 'nullable|in:'.implode(',', config('project.icons')), 'start_date' => 'nullable|date', 'deadline' => 'nullable|date|after:start_date', 'categories' => 'nullable|array|exists:categories,id', //'categories' => 'required|array', //'categories.*' => 'exists:categories,id', - //'documents.*' => 'file|max:5120|mimes:pdf,docx,xlsx,jpg,png' + 'project_image_path' => 'nullable|string', ]); @@ -79,11 +78,14 @@ class ProjectController extends Controller ]); // Manejar la imagen - if ($request->hasFile('project_image')) { - $path = $request->file('project_image')->store('project-images', 'public'); - $validated['project_image_path'] = $path; // Usar el nombre correcto de columna + if ($request->has('project_image_path') && $request->project_image_path) { + $tempPath = $request->project_image_path; + $newPath = 'images/projects/' . basename($tempPath); + + Storage::move($tempPath, $newPath); // Mover el archivo + $validated['project_image_path'] = $newPath; // Actualizar path } - + // Crear el proyecto con todos los datos validados $project = Project::create($validated); @@ -92,17 +94,6 @@ class ProjectController extends Controller $project->categories()->sync($request->categories); } - // Manejar documentos adjuntos - /* - if($request->hasFile('documents')) { - foreach ($request->file('documents') as $file) { - $project->documents()->create([ - 'file_path' => $file->store('project-documents', 'public'), - 'original_name' => $file->getClientOriginalName() - ]); - } - }*/ - return redirect()->route('projects.show', $project)->with('success', 'Proyecto creado exitosamente'); } catch (\Exception $e) { @@ -110,6 +101,19 @@ class ProjectController extends Controller } } + /** + * Show the form for editing the specified resource. + */ + public function edit(Project $project) + { + $this->authorize('update', $project); + return view('projects.create', [ + 'project' => $project, + 'categories' => Category::orderBy('name')->get(), + 'users' => User::where('id', '!=', auth()->id())->get(), + ]); + } + /** * Display the specified resource. */ @@ -125,14 +129,6 @@ class ProjectController extends Controller } - /** - * Show the form for editing the specified resource. - */ - public function edit(Project $project) - { - // - } - /** * Update the specified resource in storage. */ diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index d3e87fb..e0645f4 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -17,18 +17,25 @@ use Spatie\Permission\Models\Role; class UserController extends Controller { + public $collapsedGroups = []; + public function index() { $this->authorize('viewAny', User::class); $users = User::paginate(10); - return view('users.index', compact('users')); + return view('users.index', ['users' => $users, + 'showSidebar' => 'true',]); } public function create() { $this->authorize('create', User::class); $roles = Role::all(); - return view('users.create', compact('roles')); + $user = new User(); + return view('users.create', ['user' => $user, + 'roles' => $roles, + 'showSidebar' => 'true', + ]); } public function store(Request $request) @@ -57,12 +64,8 @@ class UserController extends Controller 'end_date' => 'nullable|date|after_or_equal:start_date', 'email' => 'required|email|unique:users', 'phone' => 'nullable|string|max:20', -<<<<<<< HEAD 'address' => 'nullable|string|max:255', 'profile_photo_path' => 'nullable|string' // Ruta de la imagen subida por Livewire -======= - 'address' => 'nullable|string|max:255' ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a ]); // Creación del usuario @@ -77,20 +80,12 @@ class UserController extends Controller 'address' => $validated['address'], 'access_start' => $validated['start_date'], 'access_end' => $validated['end_date'], -<<<<<<< HEAD 'is_active' => true, 'profile_photo_path' => $validated['profile_photo_path'] ?? null ]); if ($request->hasFile('image_path')) { $path = $request->file('image_path')->store('public/photos'); -======= - 'is_active' => true - ]); - - if ($request->hasFile('photo')) { - $path = $request->file('photo')->store('public/photos'); ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a $user->profile_photo_path = basename($path); $user->save(); } @@ -142,17 +137,11 @@ class UserController extends Controller Rule::unique('users')->ignore($user->id) ], 'phone' => 'nullable|string|max:20', -<<<<<<< HEAD 'address' => 'nullable|string|max:255', 'profile_photo_path' => 'nullable|string', // Añadido para la ruta de la imagen //'is_active' => 'nullable|boolean' // Añadido para el estado activo ]); -======= - 'address' => 'nullable|string|max:255' - ]); - ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a // Preparar datos para actualización $updateData = [ 'title' => $validated['title'], @@ -164,21 +153,14 @@ class UserController extends Controller 'address' => $validated['address'], 'access_start' => $validated['start_date'], 'access_end' => $validated['end_date'], -<<<<<<< HEAD 'is_active' => $validated['is_active'] ?? false, 'profile_photo_path' => $validated['profile_photo_path'] ?? $user->profile_photo_path ]; -======= - 'is_active' => $request->has('is_active') // Si usas un checkbox - ]; - ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a // Actualizar contraseña solo si se proporciona if (!empty($validated['password'])) { $updateData['password'] = Hash::make($validated['password']); } -<<<<<<< HEAD // Eliminar imagen anterior si se está actualizando if (isset($validated['profile_photo_path']) && $user->profile_photo_path) { @@ -196,32 +178,6 @@ class UserController extends Controller return redirect()->back()->withErrors($e->validator)->withInput(); } catch (QueryException $e) { -======= - - if ($request->hasFile('photo')) { - // Eliminar foto anterior si existe - if ($user->prfile_photo_path) { - Storage::delete('public/photos/'.$user->profile_photo_path); - } - - $path = $request->file('photo')->store('public/photos'); - $user->update(['profile_photo_path' => basename($path)]); - } - - // Actualizar el usuario - $user->update($updateData); - - // Redireccionar con mensaje de éxito - return redirect()->route('users.show', $user) - ->with('success', 'Usuario actualizado exitosamente'); - - } catch (ValidationException $e) { - // Redireccionar con errores de validación - return redirect()->back()->withErrors($e->validator)->withInput(); - - } catch (QueryException $e) { - // Manejar errores de base de datos ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a $errorCode = $e->errorInfo[1]; $errorMessage = 'Error al actualizar el usuario: '; @@ -230,20 +186,11 @@ class UserController extends Controller } else { $errorMessage .= 'Error en la base de datos'; } -<<<<<<< HEAD Log::error("Error actualizando usuario ID {$user->id}: " . $e->getMessage()); return redirect()->back()->with('error', $errorMessage)->withInput(); } catch (\Exception $e) { -======= - - Log::error("Error actualizando usuario ID {$user->id}: " . $e->getMessage()); - return redirect()->back()->with('error', $errorMessage)->withInput(); - - } catch (\Exception $e) { - // Manejar otros errores ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a Log::error("Error general actualizando usuario ID {$user->id}: " . $e->getMessage()); return redirect()->back()->with('error', 'Ocurrió un error inesperado al actualizar el usuario')->withInput(); } @@ -253,20 +200,15 @@ class UserController extends Controller { $previousUser = User::where('id', '<', $user->id)->latest('id')->first(); $nextUser = User::where('id', '>', $user->id)->oldest('id')->first(); -<<<<<<< HEAD $permissionGroups = $this->getPermissionGroups($user); -======= ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a return view('users.show', [ 'user' => $user, 'previousUser' => $previousUser, 'nextUser' => $nextUser, -<<<<<<< HEAD 'permissionGroups' => $permissionGroups, -======= - 'permissionGroups' => Permission::all()->groupBy('group') ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a + 'showSidebar' => true, + 'collapsedGroups' => $this->collapsedGroups, ]); } @@ -340,4 +282,14 @@ class UserController extends Controller return $descriptions[$permissionName] ?? str_replace('.', ' ', $permissionName); } + + public function toggleGroupCollapse($groupName) + { + if (in_array($groupName, $this->collapsedGroups)) { + $this->collapsedGroups = array_diff($this->collapsedGroups, [$groupName]); + } else { + $this->collapsedGroups[] = $groupName; + } + } + } \ No newline at end of file diff --git a/app/Http/Services/PdfProcessor.php b/app/Http/Services/PdfProcessor.php new file mode 100644 index 0000000..3a321ca --- /dev/null +++ b/app/Http/Services/PdfProcessor.php @@ -0,0 +1,28 @@ +setPdf($path)->text(); + // Analizar texto para detectar anotaciones + return $this->parseAnnotations($text); + } + + public function embedAnnotations($originalPdf, $annotations) + { + $pdf = new PDFLib(); + $pdf->begin_document('', ''); + + foreach($annotations as $annotation) { + $this->addAnnotationToPdf($pdf, $annotation); + } + + return $pdf->get_buffer(); + } +} \ No newline at end of file diff --git a/app/Livewire/ImageUploader.php b/app/Livewire/ImageUploader.php index d006218..fbc18cf 100644 --- a/app/Livewire/ImageUploader.php +++ b/app/Livewire/ImageUploader.php @@ -10,7 +10,6 @@ class ImageUploader extends Component { use WithFileUploads; -<<<<<<< HEAD public $image; public $imagePath; public $fieldName; // Nombre del campo para el formulario @@ -47,41 +46,10 @@ class ImageUploader extends Component field: $this->fieldName, path: $this->imagePath ); -======= - public $photo; - public $currentImage; - public $fieldName; - public $placeholder; - public $storagePath = 'tmp/uploads'; - - protected $rules = [ - 'photo' => 'nullable|image|max:2048', // 2MB Max - ]; - - public function mount($fieldName = 'photo', $currentImage = null, $placeholder = null) - { - $this->fieldName = $fieldName; - $this->currentImage = $currentImage; - $this->placeholder = $placeholder ?? asset('images/default-avatar.png'); - } - - public function updatedPhoto() - { - $this->validate([ - 'photo' => 'image|max:2048', // 2MB Max - ]); - } - - public function removePhoto() - { - $this->photo = null; - $this->currentImage = null; ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a } public function save() { -<<<<<<< HEAD $this->validate([ 'image' => 'required|image|max:2048', ]); @@ -111,38 +79,6 @@ class ImageUploader extends Component $this->hover = $status; } -======= - $this->validate(); - - if ($this->photo) { - $path = $this->photo->store($this->storagePath); - - if ($this->model) { - // Eliminar imagen anterior si existe - if ($this->model->{$this->fieldName}) { - Storage::delete($this->model->{$this->fieldName}); - } - - $this->model->{$this->fieldName} = $path; - $this->model->save(); - } - - $this->currentUrl = Storage::url($path); - $this->showSavedMessage = true; - $this->photo = null; // Limpiar el input de subida - } - } - - protected function getCurrentImageUrl() - { - if ($this->model && $this->model->{$this->fieldName}) { - return Storage::url($this->model->{$this->fieldName}); - } - - return $this->placeholder; - } - ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a public function render() { return view('livewire.image-uploader'); diff --git a/app/Livewire/PdfViewer.php b/app/Livewire/PdfViewer.php new file mode 100644 index 0000000..d007675 --- /dev/null +++ b/app/Livewire/PdfViewer.php @@ -0,0 +1,37 @@ +pdfUrl = Storage::disk('pdfs')->temporaryUrl($pdfId, now()->addMinutes(30)); + } + + public function pageChanged($page) + { + $this->currentPage = $page; + } + + public function annotationSaved($data) + { + // Procesar y guardar anotaciones + $this->emit('refreshAnnotations'); + } + + public function render() + { + return view('livewire.pdf-viewer'); + } +} diff --git a/app/Livewire/ProjectShow.php b/app/Livewire/ProjectShow.php index 8a26f95..4801173 100644 --- a/app/Livewire/ProjectShow.php +++ b/app/Livewire/ProjectShow.php @@ -240,16 +240,6 @@ class ProjectShow extends Component public function render() { -<<<<<<< HEAD - return view('livewire.project.show')->layout('components.layouts.documents', [ - 'title' => __('Project: :name', ['name' => $this->project->name]), - 'breadcrumbs' => [ - ['name' => __('Projects'), 'url' => route('projects.index')], - ['name' => $this->project->name, 'url' => route('projects.show', $this->project)], - ], - ]); -======= - return view('livewire.project-show'); ->>>>>>> f97a7a84985ea300216ba3ea2ab4c31306e1659a + return view('livewire.project.show'); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c7dfb71..f7e8e44 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,6 +4,7 @@ namespace App\Providers; use App\Livewire\FileUpload; use App\Livewire\ImageUploader; +use App\Livewire\PdfViewer; use App\Livewire\ProjectShow; use App\Livewire\Toolbar; use App\View\Components\Multiselect; @@ -37,6 +38,7 @@ class AppServiceProvider extends ServiceProvider Livewire::component('file-upload', FileUpload::class); Livewire::component('toolbar', Toolbar::class); Livewire::component('image-uploader', ImageUploader::class); + Livewire::component('pdf-viewer', PdfViewer::class); // Validación personalizada Validator::extend('max_upload_size', function ($attribute, $value, $parameters, $validator) { @@ -47,5 +49,6 @@ class AppServiceProvider extends ServiceProvider return $totalSize <= ($maxSize * 1024); }); + } } diff --git a/app/View/Components/Accordion.php b/app/View/Components/Accordion.php new file mode 100644 index 0000000..8054430 --- /dev/null +++ b/app/View/Components/Accordion.php @@ -0,0 +1,26 @@ +=7.2" }, "provide": { @@ -5586,7 +5866,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -5602,20 +5882,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -5666,7 +5946,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -5682,11 +5962,11 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", @@ -5742,7 +6022,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" }, "funding": [ { @@ -5762,7 +6042,7 @@ }, { "name": "symfony/polyfill-uuid", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", @@ -5821,7 +6101,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" }, "funding": [ { @@ -6066,16 +6346,16 @@ }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/a214fe7d62bd4df2a76447c67c6b26e1d5e74931", + "reference": "a214fe7d62bd4df2a76447c67c6b26e1d5e74931", "shasum": "" }, "require": { @@ -6133,7 +6413,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v7.2.6" }, "funding": [ { @@ -6149,20 +6429,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:26+00:00" + "time": "2025-04-20T20:18:16+00:00" }, { "name": "symfony/translation", - "version": "v7.2.4", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", + "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", "shasum": "" }, "require": { @@ -6228,7 +6508,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.4" + "source": "https://github.com/symfony/translation/tree/v7.2.6" }, "funding": [ { @@ -6244,7 +6524,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2025-04-07T19:09:28+00:00" }, { "name": "symfony/translation-contracts", @@ -6400,16 +6680,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.2.3", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" + "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", - "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9c46038cd4ed68952166cf7001b54eb539184ccb", + "reference": "9c46038cd4ed68952166cf7001b54eb539184ccb", "shasum": "" }, "require": { @@ -6463,7 +6743,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.6" }, "funding": [ { @@ -6479,7 +6759,7 @@ "type": "tidelift" } ], - "time": "2025-01-17T11:39:41+00:00" + "time": "2025-04-09T08:14:01+00:00" }, { "name": "thiagoalessio/tesseract_ocr", @@ -6587,16 +6867,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", "shasum": "" }, "require": { @@ -6655,7 +6935,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" }, "funding": [ { @@ -6667,7 +6947,7 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:52:34+00:00" + "time": "2025-04-30T23:37:27+00:00" }, { "name": "voku/portable-ascii", @@ -7141,20 +7421,20 @@ }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -7162,8 +7442,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -7186,9 +7466,9 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { "name": "jean85/pretty-package-versions", @@ -7330,16 +7610,16 @@ }, { "name": "laravel/pint", - "version": "v1.22.0", + "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36" + "reference": "941d1927c5ca420c22710e98420287169c7bcaf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36", - "reference": "7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36", + "url": "https://api.github.com/repos/laravel/pint/zipball/941d1927c5ca420c22710e98420287169c7bcaf7", + "reference": "941d1927c5ca420c22710e98420287169c7bcaf7", "shasum": "" }, "require": { @@ -7351,11 +7631,11 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.75.0", - "illuminate/view": "^11.44.2", - "larastan/larastan": "^3.3.1", + "illuminate/view": "^11.44.7", + "larastan/larastan": "^3.4.0", "laravel-zero/framework": "^11.36.1", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.3", + "nunomaduro/termwind": "^2.3.1", "pestphp/pest": "^2.36.0" }, "bin": [ @@ -7392,20 +7672,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-04-08T22:11:45+00:00" + "time": "2025-05-08T08:38:12+00:00" }, { "name": "laravel/sail", - "version": "v1.41.1", + "version": "v1.42.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "e5692510f1ef8e0f5096cde2b885d558f8d86592" + "reference": "2edaaf77f3c07a4099965bb3d7dfee16e801c0f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/e5692510f1ef8e0f5096cde2b885d558f8d86592", - "reference": "e5692510f1ef8e0f5096cde2b885d558f8d86592", + "url": "https://api.github.com/repos/laravel/sail/zipball/2edaaf77f3c07a4099965bb3d7dfee16e801c0f6", + "reference": "2edaaf77f3c07a4099965bb3d7dfee16e801c0f6", "shasum": "" }, "require": { @@ -7455,7 +7735,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-04-22T13:39:39+00:00" + "time": "2025-04-29T14:26:46+00:00" }, { "name": "mockery/mockery", @@ -7542,16 +7822,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414" + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", "shasum": "" }, "require": { @@ -7590,7 +7870,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" }, "funding": [ { @@ -7598,7 +7878,7 @@ "type": "tidelift" } ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2025-04-29T12:36:36+00:00" }, { "name": "nunomaduro/collision", @@ -9841,16 +10121,16 @@ }, { "name": "symfony/yaml", - "version": "v7.2.5", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912" + "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912", - "reference": "4c4b6f4cfcd7e52053f0c8bfad0f7f30fb924912", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0feafffb843860624ddfd13478f481f4c3cd8b23", + "reference": "0feafffb843860624ddfd13478f481f4c3cd8b23", "shasum": "" }, "require": { @@ -9893,7 +10173,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.5" + "source": "https://github.com/symfony/yaml/tree/v7.2.6" }, "funding": [ { @@ -9909,7 +10189,7 @@ "type": "tidelift" } ], - "time": "2025-03-03T07:12:39+00:00" + "time": "2025-04-04T10:10:11+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/config/livewire-pdf.php b/config/livewire-pdf.php new file mode 100644 index 0000000..c242516 --- /dev/null +++ b/config/livewire-pdf.php @@ -0,0 +1,214 @@ + 'pdfs', + + /* + |-------------------------------------------------------------------------- + | Temporary Storage Path + |-------------------------------------------------------------------------- + | + | This value determines the path where temporary PDFs will be stored + | during processing. The path is relative to the storage directory. + | + */ + 'temp_path' => 'pdfs/temp', + + /* + |-------------------------------------------------------------------------- + | PDF Processing Options + |-------------------------------------------------------------------------- + | + | These options control how PDFs are processed and rendered. + | + */ + 'processing' => [ + 'max_file_size' => 10 * 1024 * 1024, // 10MB + 'allowed_extensions' => ['pdf'], + 'use_web_workers' => true, + 'cache_rendered_pages' => true, + 'cache_ttl' => 60 * 24, // 24 hours + ], + + /* + |-------------------------------------------------------------------------- + | Form Field Options + |-------------------------------------------------------------------------- + | + | These options control the default properties for form fields. + | + */ + 'form_fields' => [ + 'text' => [ + 'font_size' => 12, + 'font_family' => 'Helvetica', + 'color' => '#000000', + 'multiline' => false, + ], + 'checkbox' => [ + 'size' => 12, + 'checked_by_default' => false, + ], + 'radio' => [ + 'size' => 12, + 'selected_by_default' => false, + ], + 'dropdown' => [ + 'font_size' => 12, + 'font_family' => 'Helvetica', + ], + 'signature' => [ + 'width' => 200, + 'height' => 50, + ], + 'date' => [ + 'format' => 'YYYY-MM-DD', + 'font_size' => 12, + 'font_family' => 'Helvetica', + ], + ], + + /* + |-------------------------------------------------------------------------- + | eSignature Platform Compatibility + |-------------------------------------------------------------------------- + | + | These options control compatibility with various eSignature platforms. + | + */ + 'esignature_compatibility' => [ + 'docusign' => [ + 'enabled' => true, + 'field_naming_convention' => 'docusign', + ], + 'adobe_sign' => [ + 'enabled' => true, + 'field_naming_convention' => 'adobe', + ], + 'pandadoc' => [ + 'enabled' => true, + 'field_naming_convention' => 'pandadoc', + ], + ], + + /* + |-------------------------------------------------------------------------- + | UI Configuration + |-------------------------------------------------------------------------- + | + | Configure the UI elements of the PDF viewer and editor. + | + */ + 'ui' => [ + // Available zoom levels for the PDF viewer + 'zoom_levels' => [0.5, 0.75, 1, 1.25, 1.5, 2], + + // Default zoom level + 'default_zoom' => 1, + + // Show page thumbnails + 'show_thumbnails' => true, + + // Show toolbar + 'show_toolbar' => true, + + // Show sidebar + 'show_sidebar' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Form Field Types + |-------------------------------------------------------------------------- + | + | Configure the available form field types. + | + */ + 'field_types' => [ + 'text' => [ + 'label' => 'Text Field', + 'icon' => 'text-field', + 'properties' => [ + 'font_size' => 12, + 'font_family' => 'Helvetica', + 'text_color' => '#000000', + 'background_color' => '#FFFFFF', + 'border_color' => '#000000', + 'border_width' => 1, + 'border_style' => 'solid', + 'placeholder' => '', + 'max_length' => null, + ], + ], + 'checkbox' => [ + 'label' => 'Checkbox', + 'icon' => 'checkbox', + 'properties' => [ + 'checked' => false, + 'background_color' => '#FFFFFF', + 'border_color' => '#000000', + 'border_width' => 1, + 'border_style' => 'solid', + ], + ], + 'radio' => [ + 'label' => 'Radio Button', + 'icon' => 'radio', + 'properties' => [ + 'checked' => false, + 'background_color' => '#FFFFFF', + 'border_color' => '#000000', + 'border_width' => 1, + 'border_style' => 'solid', + ], + ], + 'dropdown' => [ + 'label' => 'Dropdown', + 'icon' => 'dropdown', + 'properties' => [ + 'options' => [], + 'selected' => null, + 'font_size' => 12, + 'font_family' => 'Helvetica', + 'text_color' => '#000000', + 'background_color' => '#FFFFFF', + 'border_color' => '#000000', + 'border_width' => 1, + 'border_style' => 'solid', + ], + ], + 'signature' => [ + 'label' => 'Signature', + 'icon' => 'signature', + 'properties' => [ + 'background_color' => '#FFFFFF', + 'border_color' => '#000000', + 'border_width' => 1, + 'border_style' => 'solid', + ], + ], + 'date' => [ + 'label' => 'Date', + 'icon' => 'date', + 'properties' => [ + 'format' => 'YYYY-MM-DD', + 'font_size' => 12, + 'font_family' => 'Helvetica', + 'text_color' => '#000000', + 'background_color' => '#FFFFFF', + 'border_color' => '#000000', + 'border_width' => 1, + 'border_style' => 'solid', + ], + ], + ], +]; \ No newline at end of file diff --git a/database/migrations/2025_05_22_141314_add_fields_to_project.php b/database/migrations/2025_05_22_141314_add_fields_to_project.php new file mode 100644 index 0000000..42ca373 --- /dev/null +++ b/database/migrations/2025_05_22_141314_add_fields_to_project.php @@ -0,0 +1,28 @@ +string('reference')->nullable()->after('id')->uniqidue(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('projects', function (Blueprint $table) { + $table->dropColumn('reference'); + }); + } +}; diff --git a/package-lock.json b/package-lock.json index aca325d..84fd21f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -603,182 +603,180 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", "cpu": [ "arm" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", "cpu": [ "loong64" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", "cpu": [ "ppc64" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", "cpu": [ "riscv64" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", "cpu": [ "s390x" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -798,52 +796,48 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", "cpu": [ "ia32" ], - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -1074,10 +1068,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" }, "node_modules/@yaireo/tagify": { "version": "4.34.0", @@ -1161,10 +1154,9 @@ } }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "license": "MIT", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -1550,7 +1542,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -2206,12 +2197,11 @@ } }, "node_modules/rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", - "license": "MIT", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -2221,36 +2211,36 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" } }, "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -2348,6 +2338,45 @@ "node": ">=6" } }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -2394,14 +2423,16 @@ } }, "node_modules/vite": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz", - "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", - "license": "MIT", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -2474,6 +2505,30 @@ "picomatch": "^2.3.1" } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/resources/js/pdfjs-5.2.133-dist/LICENSE b/resources/js/pdfjs-5.2.133-dist/LICENSE new file mode 100644 index 0000000..f433b1a --- /dev/null +++ b/resources/js/pdfjs-5.2.133-dist/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/resources/js/pdfjs-5.2.133-dist/build/pdf.mjs b/resources/js/pdfjs-5.2.133-dist/build/pdf.mjs new file mode 100644 index 0000000..e6ab4ec --- /dev/null +++ b/resources/js/pdfjs-5.2.133-dist/build/pdf.mjs @@ -0,0 +1,22614 @@ +/** + * @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 + */ + + +;// ./src/shared/util.js +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) { + console.log(`Info: ${msg}`); + } +} +function warn(msg) { + if (verbosity >= VerbosityLevel.WARNINGS) { + 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:": + return true; + default: + return false; + } +} +function createValidAbsoluteUrl(url, baseUrl = null, options = 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, allowRel = 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, nonSerializable = 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() { + if (typeof navigator !== "undefined" && typeof navigator?.platform === "string" && typeof navigator?.userAgent === "string") { + 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") + }); + } + return shadow(this, "platform", { + isAndroid: false, + isLinux: false, + isMac: false, + isWindows: false, + isFirefox: false + }); + } + 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, pos = 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, pos = 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 #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); + } + static #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) { + this.#getExtremumOnCurve(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; + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax); + this.#getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax); + } + 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); + this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax); + this.#getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), 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) { + 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 (!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 (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(date = 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 Promise.try !== "function") { + Promise.try = function (fn, ...args) { + return new Promise(resolve => { + resolve(fn(...args)); + }); + }; +} +if (typeof Math.sumPrecise !== "function") { + Math.sumPrecise = function (numbers) { + return numbers.reduce((a, b) => a + b, 0); + }; +} + +;// ./src/display/display_utils.js + +const SVG_NS = "http://www.w3.org/2000/svg"; +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +} +async function fetchData(url, type = "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({ + viewBox, + userUnit, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + }) { + 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({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = {}) { + 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, extraDelay = 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 getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + 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 { + started = Object.create(null); + 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:"; +} +function noContextMenu(e) { + e.preventDefault(); +} +function stopEvent(e) { + e.preventDefault(); + e.stopPropagation(); +} +function deprecated(details) { + console.log("Deprecated API usage: " + details); +} +class PDFDateString { + static #regex; + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; + } + this.#regex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); + const matches = 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)); + } +} +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + 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, mustFlip = false, mustRotate = 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 maxAreaScale = Infinity, + maxWidthScale = Infinity, + maxHeightScale = Infinity; + 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; + } +} +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 + +class EditorToolbar { + #toolbar = null; + #colorPicker = null; + #editor; + #buttons = null; + #altText = null; + #signatureDescriptionButton = null; + static #l10nRemove = null; + constructor(editor) { + this.#editor = editor; + EditorToolbar.#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 = this.#toolbar = document.createElement("div"); + editToolbar.classList.add("editToolbar", "hidden"); + editToolbar.setAttribute("role", "toolbar"); + const signal = this.#editor._uiManager._signal; + editToolbar.addEventListener("contextmenu", noContextMenu, { + signal + }); + editToolbar.addEventListener("pointerdown", EditorToolbar.#pointerDown, { + signal + }); + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + const position = this.#editor.toolbarPosition; + if (position) { + const { + style + } = editToolbar; + const x = this.#editor._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; + } + this.#addDeleteButton(); + return editToolbar; + } + get div() { + return this.#toolbar; + } + static #pointerDown(e) { + e.stopPropagation(); + } + #focusIn(e) { + this.#editor._focusEventsAllowed = false; + stopEvent(e); + } + #focusOut(e) { + this.#editor._focusEventsAllowed = true; + stopEvent(e); + } + #addListenersToElement(element) { + const signal = this.#editor._uiManager._signal; + element.addEventListener("focusin", this.#focusIn.bind(this), { + capture: true, + signal + }); + element.addEventListener("focusout", this.#focusOut.bind(this), { + capture: true, + signal + }); + element.addEventListener("contextmenu", noContextMenu, { + signal + }); + } + hide() { + this.#toolbar.classList.add("hidden"); + this.#colorPicker?.hideDropdown(); + } + show() { + this.#toolbar.classList.remove("hidden"); + this.#altText?.shown(); + } + #addDeleteButton() { + const { + editorType, + _uiManager + } = this.#editor; + const button = document.createElement("button"); + button.className = "delete"; + button.tabIndex = 0; + button.setAttribute("data-l10n-id", EditorToolbar.#l10nRemove[editorType]); + this.#addListenersToElement(button); + button.addEventListener("click", e => { + _uiManager.delete(); + }, { + signal: _uiManager._signal + }); + this.#buttons.append(button); + } + get #divider() { + const divider = document.createElement("div"); + divider.className = "divider"; + return divider; + } + async addAltText(altText) { + const button = await altText.render(); + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); + this.#altText = altText; + } + addColorPicker(colorPicker) { + this.#colorPicker = colorPicker; + const button = colorPicker.renderButton(); + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); + } + async addEditSignatureButton(signatureManager) { + const button = this.#signatureDescriptionButton = await signatureManager.renderEditButton(this.#editor); + this.#addListenersToElement(button); + this.#buttons.prepend(button, this.#divider); + } + updateEditSignatureButton(description) { + if (this.#signatureDescriptionButton) { + this.#signatureDescriptionButton.title = description; + } + } + remove() { + this.#toolbar.remove(); + this.#colorPicker?.destroy(); + this.#colorPicker = null; + } +} +class HighlightToolbar { + #buttons = null; + #toolbar = null; + #uiManager; + constructor(uiManager) { + this.#uiManager = uiManager; + } + #render() { + const editToolbar = this.#toolbar = document.createElement("div"); + editToolbar.className = "editToolbar"; + editToolbar.setAttribute("role", "toolbar"); + editToolbar.addEventListener("contextmenu", noContextMenu, { + signal: this.#uiManager._signal + }); + const buttons = this.#buttons = document.createElement("div"); + buttons.className = "buttons"; + editToolbar.append(buttons); + this.#addHighlightButton(); + return editToolbar; + } + #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]; + } + show(parent, boxes, isLTR) { + const [x, y] = this.#getLastPoint(boxes, isLTR); + const { + style + } = this.#toolbar ||= this.#render(); + parent.append(this.#toolbar); + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`; + } + hide() { + this.#toolbar.remove(); + } + #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 = this.#uiManager._signal; + button.addEventListener("contextmenu", noContextMenu, { + signal + }); + button.addEventListener("click", () => { + this.#uiManager.highlightSelection("floating_button"); + }, { + signal + }); + this.#buttons.append(button); + } +} + +;// ./src/display/editor/tools.js + + + +function bindEvents(obj, element, names) { + for (const name of names) { + element.addEventListener(name, obj[name].bind(obj)); + } +} +class IdManager { + #id = 0; + get id() { + return `${AnnotationEditorPrefix}${this.#id++}`; + } +} +class ImageManager { + #baseId = getUuid(); + #id = 0; + #cache = null; + static get _isSVGFittingCanvas() { + const svg = `data:image/svg+xml;charset=UTF-8,`; + 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 #get(key, rawData) { + this.#cache ||= new Map(); + let data = this.#cache.get(key); + if (data === null) { + return null; + } + if (data?.bitmap) { + data.refCounter += 1; + return data; + } + try { + data ||= { + bitmap: null, + id: `image_${this.#baseId}_${this.#id++}`, + 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; + } + this.#cache.set(key, data); + if (data) { + this.#cache.set(data.id, data); + } + return data; + } + async getFromFile(file) { + const { + lastModified, + name, + size, + type + } = file; + return this.#get(`${lastModified}_${name}_${size}_${type}`, file); + } + async getFromUrl(url) { + return this.#get(url, url); + } + async getFromBlob(id, blobPromise) { + const blob = await blobPromise; + return this.#get(id, blob); + } + async getFromId(id) { + this.#cache ||= new Map(); + const data = this.#cache.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) { + this.#cache ||= new Map(); + let data = this.#cache.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_${this.#baseId}_${this.#id++}`, + refCounter: 1, + isSvg: false + }; + this.#cache.set(id, data); + this.#cache.set(data.id, data); + return data; + } + getSvgUrl(id) { + const data = this.#cache.get(id); + if (!data?.isSvg) { + return null; + } + return data.svgUrl; + } + deleteId(id) { + this.#cache ||= new Map(); + const data = this.#cache.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_${this.#baseId}_`); + } +} +class CommandManager { + #commands = []; + #locked = false; + #maxSize; + #position = -1; + constructor(maxSize = 128) { + this.#maxSize = maxSize; + } + add({ + cmd, + undo, + post, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + }) { + if (mustExec) { + cmd(); + } + if (this.#locked) { + return; + } + const save = { + cmd, + undo, + post, + type + }; + if (this.#position === -1) { + if (this.#commands.length > 0) { + this.#commands.length = 0; + } + this.#position = 0; + this.#commands.push(save); + return; + } + if (overwriteIfSameType && this.#commands[this.#position].type === type) { + if (keepUndo) { + save.undo = this.#commands[this.#position].undo; + } + this.#commands[this.#position] = save; + return; + } + const next = this.#position + 1; + if (next === this.#maxSize) { + this.#commands.splice(0, 1); + } else { + this.#position = next; + if (next < this.#commands.length) { + this.#commands.splice(next); + } + } + this.#commands.push(save); + } + undo() { + if (this.#position === -1) { + return; + } + this.#locked = true; + const { + undo, + post + } = this.#commands[this.#position]; + undo(); + post?.(); + this.#locked = false; + this.#position -= 1; + } + redo() { + if (this.#position < this.#commands.length - 1) { + this.#position += 1; + this.#locked = true; + const { + cmd, + post + } = this.#commands[this.#position]; + cmd(); + post?.(); + this.#locked = false; + } + } + hasSomethingToUndo() { + return this.#position !== -1; + } + hasSomethingToRedo() { + return this.#position < this.#commands.length - 1; + } + cleanType(type) { + if (this.#position === -1) { + return; + } + for (let i = this.#position; i >= 0; i--) { + if (this.#commands[i].type !== type) { + this.#commands.splice(i + 1, this.#position - i); + this.#position = i; + return; + } + } + this.#commands.length = 0; + this.#position = -1; + } + destroy() { + this.#commands = null; + } +} +class KeyboardManager { + constructor(callbacks) { + 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)); + } + } + } + } + #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; + } + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + const info = this.callbacks.get(this.#serialize(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); + } + } +} +class ColorManager { + static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); + 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); + } +} +class AnnotationEditorUIManager { + #abortController = new AbortController(); + #activeEditor = null; + #allEditors = new Map(); + #allLayers = new Map(); + #altTextManager = null; + #annotationStorage = null; + #changedExistingAnnotations = null; + #commandManager = new CommandManager(); + #copyPasteAC = null; + #currentDrawingSession = null; + #currentPageIndex = 0; + #deletedAnnotationsElementIds = new Set(); + #draggingEditors = null; + #editorTypes = null; + #editorsToRescale = new Set(); + _editorUndoBar = null; + #enableHighlightFloatingButton = false; + #enableUpdatedAddImage = false; + #enableNewAltTextWhenAddingImage = false; + #filterFactory = null; + #focusMainContainerTimeoutId = null; + #focusManagerAC = null; + #highlightColors = null; + #highlightWhenShiftUp = false; + #highlightToolbar = null; + #idManager = new IdManager(); + #isEnabled = false; + #isWaiting = false; + #keyboardManagerAC = null; + #lastActiveElement = null; + #mainHighlightColorPicker = null; + #missingCanvases = null; + #mlManager = null; + #mode = AnnotationEditorType.NONE; + #selectedEditors = new Set(); + #selectedTextNode = null; + #signatureManager = null; + #pageColors = null; + #showAllStates = null; + #previousStates = { + isEditing: false, + isEmpty: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false, + hasSelectedText: false + }; + #translation = [0, 0]; + #translationTimeoutId = null; + #container = null; + #viewer = null; + #updateModeCapability = null; + static TRANSLATE_SMALL = 1; + static TRANSLATE_BIG = 10; + static get _keyboardManager() { + const proto = AnnotationEditorUIManager.prototype; + const arrowChecker = self => self.#container.contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); + const textInputChecker = (_self, { + target: el + }) => { + 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, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.contains(el) && !self.isEnterHandled + }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && self.#container.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) { + const signal = this._signal = this.#abortController.signal; + this.#container = container; + this.#viewer = viewer; + this.#altTextManager = altTextManager; + this.#signatureManager = signatureManager; + this._eventBus = eventBus; + eventBus._on("editingaction", this.onEditingAction.bind(this), { + signal + }); + eventBus._on("pagechanging", this.onPageChanging.bind(this), { + signal + }); + eventBus._on("scalechanging", this.onScaleChanging.bind(this), { + signal + }); + eventBus._on("rotationchanging", this.onRotationChanging.bind(this), { + signal + }); + eventBus._on("setpreference", this.onSetPreference.bind(this), { + signal + }); + eventBus._on("switchannotationeditorparams", evt => this.updateParams(evt.type, evt.value), { + signal + }); + this.#addSelectionListener(); + this.#addDragAndDropListeners(); + this.#addKeyboardManager(); + this.#annotationStorage = pdfDocument.annotationStorage; + this.#filterFactory = pdfDocument.filterFactory; + this.#pageColors = pageColors; + this.#highlightColors = highlightColors || null; + this.#enableHighlightFloatingButton = enableHighlightFloatingButton; + this.#enableUpdatedAddImage = enableUpdatedAddImage; + this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage; + this.#mlManager = mlManager || null; + this.viewParameters = { + realScale: PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: 0 + }; + this.isShiftKeyDown = false; + this._editorUndoBar = editorUndoBar || null; + this._supportsPinchToZoom = supportsPinchToZoom !== false; + } + destroy() { + this.#updateModeCapability?.resolve(); + this.#updateModeCapability = null; + this.#abortController?.abort(); + this.#abortController = null; + this._signal = null; + for (const layer of this.#allLayers.values()) { + layer.destroy(); + } + this.#allLayers.clear(); + this.#allEditors.clear(); + this.#editorsToRescale.clear(); + this.#missingCanvases?.clear(); + this.#activeEditor = null; + this.#selectedEditors.clear(); + this.#commandManager.destroy(); + this.#altTextManager?.destroy(); + this.#signatureManager?.destroy(); + this.#highlightToolbar?.hide(); + this.#highlightToolbar = null; + this.#mainHighlightColorPicker?.destroy(); + this.#mainHighlightColorPicker = null; + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + this.#focusMainContainerTimeoutId = null; + } + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + this.#translationTimeoutId = null; + } + this._editorUndoBar?.destroy(); + } + combinedSignal(ac) { + return AbortSignal.any([this._signal, ac.signal]); + } + get mlManager() { + return this.#mlManager; + } + get useNewAltTextFlow() { + return this.#enableUpdatedAddImage; + } + get useNewAltTextWhenAddingImage() { + return this.#enableNewAltTextWhenAddingImage; + } + get hcmFilter() { + return shadow(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); + } + get direction() { + return shadow(this, "direction", getComputedStyle(this.#container).direction); + } + get highlightColors() { + return shadow(this, "highlightColors", this.#highlightColors ? new Map(this.#highlightColors.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); + } + this.#currentDrawingSession = layer; + } + setMainHighlightColorPicker(colorPicker) { + this.#mainHighlightColorPicker = colorPicker; + } + editAltText(editor, firstTime = false) { + this.#altTextManager?.editAltText(this, editor, firstTime); + } + getSignature(editor) { + this.#signatureManager?.getSignature({ + uiManager: this, + editor + }); + } + get signatureManager() { + return this.#signatureManager; + } + 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({ + name, + value + }) { + switch (name) { + case "enableNewAltTextWhenAddingImage": + this.#enableNewAltTextWhenAddingImage = value; + break; + } + } + onPageChanging({ + pageNumber + }) { + this.#currentPageIndex = pageNumber - 1; + } + focusMainContainer() { + this.#container.focus(); + } + findParent(x, y) { + for (const layer of this.#allLayers.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(value = false) { + this.#viewer.classList.toggle("noUserSelect", value); + } + addShouldRescale(editor) { + this.#editorsToRescale.add(editor); + } + removeShouldRescale(editor) { + this.#editorsToRescale.delete(editor); + } + onScaleChanging({ + scale + }) { + this.commitOrRemove(); + this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS; + for (const editor of this.#editorsToRescale) { + editor.onScaleChanging(); + } + this.#currentDrawingSession?.onScaleChanging(); + } + onRotationChanging({ + pagesRotation + }) { + this.commitOrRemove(); + this.viewParameters.rotation = pagesRotation; + } + #getAnchorElementForSelection({ + anchorNode + }) { + return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode; + } + #getLayerForTextLayer(textLayer) { + const { + currentLayer + } = this; + if (currentLayer.hasTextLayer(textLayer)) { + return currentLayer; + } + for (const layer of this.#allLayers.values()) { + if (layer.hasTextLayer(textLayer)) { + return layer; + } + } + return null; + } + highlightSelection(methodOfCreation = "") { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const { + anchorNode, + anchorOffset, + focusNode, + focusOffset + } = selection; + const text = selection.toString(); + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + selection.empty(); + const layer = this.#getLayerForTextLayer(textLayer); + const isNoneMode = this.#mode === 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(); + } + #displayHighlightToolbar() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + this.#highlightToolbar ||= new HighlightToolbar(this); + this.#highlightToolbar.show(textLayer, boxes, this.direction === "ltr"); + } + addToAnnotationStorage(editor) { + if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { + this.#annotationStorage.setValue(editor.id, editor); + } + } + #selectionChange() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + if (this.#selectedTextNode) { + this.#highlightToolbar?.hide(); + this.#selectedTextNode = null; + this.#dispatchUpdateStates({ + hasSelectedText: false + }); + } + return; + } + const { + anchorNode + } = selection; + if (anchorNode === this.#selectedTextNode) { + return; + } + const anchorElement = this.#getAnchorElementForSelection(selection); + const textLayer = anchorElement.closest(".textLayer"); + if (!textLayer) { + if (this.#selectedTextNode) { + this.#highlightToolbar?.hide(); + this.#selectedTextNode = null; + this.#dispatchUpdateStates({ + hasSelectedText: false + }); + } + return; + } + this.#highlightToolbar?.hide(); + this.#selectedTextNode = anchorNode; + this.#dispatchUpdateStates({ + hasSelectedText: true + }); + if (this.#mode !== AnnotationEditorType.HIGHLIGHT && this.#mode !== AnnotationEditorType.NONE) { + return; + } + if (this.#mode === AnnotationEditorType.HIGHLIGHT) { + this.showAllEditors("highlight", true, true); + } + this.#highlightWhenShiftUp = this.isShiftKeyDown; + if (!this.isShiftKeyDown) { + const activeLayer = this.#mode === AnnotationEditorType.HIGHLIGHT ? this.#getLayerForTextLayer(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") { + this.#onSelectEnd("main_toolbar"); + } + }; + window.addEventListener("pointerup", pointerup, { + signal + }); + window.addEventListener("blur", pointerup, { + signal + }); + } + } + #onSelectEnd(methodOfCreation = "") { + if (this.#mode === AnnotationEditorType.HIGHLIGHT) { + this.highlightSelection(methodOfCreation); + } else if (this.#enableHighlightFloatingButton) { + this.#displayHighlightToolbar(); + } + } + #addSelectionListener() { + document.addEventListener("selectionchange", this.#selectionChange.bind(this), { + signal: this._signal + }); + } + #addFocusManager() { + if (this.#focusManagerAC) { + return; + } + this.#focusManagerAC = new AbortController(); + const signal = this.combinedSignal(this.#focusManagerAC); + window.addEventListener("focus", this.focus.bind(this), { + signal + }); + window.addEventListener("blur", this.blur.bind(this), { + signal + }); + } + #removeFocusManager() { + this.#focusManagerAC?.abort(); + this.#focusManagerAC = null; + } + blur() { + this.isShiftKeyDown = false; + if (this.#highlightWhenShiftUp) { + this.#highlightWhenShiftUp = false; + this.#onSelectEnd("main_toolbar"); + } + if (!this.hasSelection) { + return; + } + const { + activeElement + } = document; + for (const editor of this.#selectedEditors) { + if (editor.div.contains(activeElement)) { + this.#lastActiveElement = [editor, activeElement]; + editor._focusEventsAllowed = false; + break; + } + } + } + focus() { + if (!this.#lastActiveElement) { + return; + } + const [lastEditor, lastActiveElement] = this.#lastActiveElement; + this.#lastActiveElement = null; + lastActiveElement.addEventListener("focusin", () => { + lastEditor._focusEventsAllowed = true; + }, { + once: true, + signal: this._signal + }); + lastActiveElement.focus(); + } + #addKeyboardManager() { + if (this.#keyboardManagerAC) { + return; + } + this.#keyboardManagerAC = new AbortController(); + const signal = this.combinedSignal(this.#keyboardManagerAC); + window.addEventListener("keydown", this.keydown.bind(this), { + signal + }); + window.addEventListener("keyup", this.keyup.bind(this), { + signal + }); + } + #removeKeyboardManager() { + this.#keyboardManagerAC?.abort(); + this.#keyboardManagerAC = null; + } + #addCopyPasteListeners() { + if (this.#copyPasteAC) { + return; + } + this.#copyPasteAC = new AbortController(); + const signal = this.combinedSignal(this.#copyPasteAC); + document.addEventListener("copy", this.copy.bind(this), { + signal + }); + document.addEventListener("cut", this.cut.bind(this), { + signal + }); + document.addEventListener("paste", this.paste.bind(this), { + signal + }); + } + #removeCopyPasteListeners() { + this.#copyPasteAC?.abort(); + this.#copyPasteAC = null; + } + #addDragAndDropListeners() { + const signal = this._signal; + document.addEventListener("dragover", this.dragOver.bind(this), { + signal + }); + document.addEventListener("drop", this.drop.bind(this), { + signal + }); + } + addEditListeners() { + this.#addKeyboardManager(); + this.#addCopyPasteListeners(); + } + removeEditListeners() { + this.#removeKeyboardManager(); + this.#removeCopyPasteListeners(); + } + dragOver(event) { + for (const { + type + } of event.dataTransfer.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(type)) { + event.dataTransfer.dropEffect = "copy"; + event.preventDefault(); + return; + } + } + } + } + drop(event) { + for (const item of event.dataTransfer.items) { + for (const editorType of this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + event.preventDefault(); + return; + } + } + } + } + copy(event) { + event.preventDefault(); + this.#activeEditor?.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = []; + for (const editor of this.#selectedEditors) { + 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 this.#editorTypes) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + return; + } + } + } + let data = clipboardData.getData("application/pdfjs"); + if (!data) { + return; + } + try { + data = JSON.parse(data); + } catch (ex) { + warn(`paste: "${ex.message}".`); + return; + } + if (!Array.isArray(data)) { + return; + } + this.unselectAll(); + const layer = this.currentLayer; + try { + const newEditors = []; + for (const editor of data) { + const deserializedEditor = await layer.deserialize(editor); + if (!deserializedEditor) { + return; + } + newEditors.push(deserializedEditor); + } + const cmd = () => { + for (const editor of newEditors) { + this.#addEditorToLayer(editor); + } + this.#selectEditors(newEditors); + }; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } catch (ex) { + warn(`paste: "${ex.message}".`); + } + } + keydown(event) { + if (!this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = true; + } + if (this.#mode !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) { + AnnotationEditorUIManager._keyboardManager.exec(this, event); + } + } + keyup(event) { + if (this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = false; + if (this.#highlightWhenShiftUp) { + this.#highlightWhenShiftUp = false; + this.#onSelectEnd("main_toolbar"); + } + } + } + onEditingAction({ + name + }) { + switch (name) { + case "undo": + case "redo": + case "delete": + case "selectAll": + this[name](); + break; + case "highlightSelection": + this.highlightSelection("context_menu"); + break; + } + } + #dispatchUpdateStates(details) { + const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value); + if (hasChanged) { + this._eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(this.#previousStates, details) + }); + if (this.#mode === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) { + this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]); + } + } + } + #dispatchUpdateUI(details) { + this._eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); + } + setEditingState(isEditing) { + if (isEditing) { + this.#addFocusManager(); + this.#addCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: this.#mode !== AnnotationEditorType.NONE, + isEmpty: this.#isEmpty(), + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + hasSelectedEditor: false + }); + } else { + this.#removeFocusManager(); + this.#removeCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: false + }); + this.disableUserSelect(false); + } + } + registerEditorTypes(types) { + if (this.#editorTypes) { + return; + } + this.#editorTypes = types; + for (const editorType of this.#editorTypes) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + } + getId() { + return this.#idManager.id; + } + get currentLayer() { + return this.#allLayers.get(this.#currentPageIndex); + } + getLayer(pageIndex) { + return this.#allLayers.get(pageIndex); + } + get currentPageIndex() { + return this.#currentPageIndex; + } + addLayer(layer) { + this.#allLayers.set(layer.pageIndex, layer); + if (this.#isEnabled) { + layer.enable(); + } else { + layer.disable(); + } + } + removeLayer(layer) { + this.#allLayers.delete(layer.pageIndex); + } + async updateMode(mode, editId = null, isFromKeyboard = false) { + if (this.#mode === mode) { + return; + } + if (this.#updateModeCapability) { + await this.#updateModeCapability.promise; + if (!this.#updateModeCapability) { + return; + } + } + this.#updateModeCapability = Promise.withResolvers(); + this.#currentDrawingSession?.commitOrRemove(); + this.#mode = mode; + if (mode === AnnotationEditorType.NONE) { + this.setEditingState(false); + this.#disableAll(); + this._editorUndoBar?.hide(); + this.#updateModeCapability.resolve(); + return; + } + if (mode === AnnotationEditorType.SIGNATURE) { + await this.#signatureManager?.loadSignatures(); + } + this.setEditingState(true); + await this.#enableAll(); + this.unselectAll(); + for (const layer of this.#allLayers.values()) { + layer.updateMode(mode); + } + if (!editId) { + if (isFromKeyboard) { + this.addNewEditorFromKeyboard(); + } + this.#updateModeCapability.resolve(); + return; + } + for (const editor of this.#allEditors.values()) { + if (editor.annotationElementId === editId) { + this.setSelected(editor); + editor.enterInEditMode(); + } else { + editor.unselect(); + } + } + this.#updateModeCapability.resolve(); + } + addNewEditorFromKeyboard() { + if (this.currentLayer.canCreateNewEmptyEditor()) { + this.currentLayer.addNewEditor(); + } + } + updateToolbar(mode) { + if (mode === this.#mode) { + return; + } + this._eventBus.dispatch("switchannotationeditormode", { + source: this, + mode + }); + } + updateParams(type, value) { + if (!this.#editorTypes) { + return; + } + switch (type) { + case AnnotationEditorParamsType.CREATE: + this.currentLayer.addNewEditor(value); + return; + case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + this.#mainHighlightColorPicker?.updateColor(value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: + this._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data: { + type: "highlight", + action: "toggle_visibility" + } + } + }); + (this.#showAllStates ||= new Map()).set(type, value); + this.showAllEditors("highlight", value); + break; + } + for (const editor of this.#selectedEditors) { + editor.updateParams(type, value); + } + for (const editorType of this.#editorTypes) { + editorType.updateDefaultParams(type, value); + } + } + showAllEditors(type, visible, updateButton = false) { + for (const editor of this.#allEditors.values()) { + if (editor.editorType === type) { + editor.show(visible); + } + } + const state = this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ?? true; + if (state !== visible) { + this.#dispatchUpdateUI([[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]); + } + } + enableWaiting(mustWait = false) { + if (this.#isWaiting === mustWait) { + return; + } + this.#isWaiting = mustWait; + for (const layer of this.#allLayers.values()) { + if (mustWait) { + layer.disableClick(); + } else { + layer.enableClick(); + } + layer.div.classList.toggle("waiting", mustWait); + } + } + async #enableAll() { + if (!this.#isEnabled) { + this.#isEnabled = true; + const promises = []; + for (const layer of this.#allLayers.values()) { + promises.push(layer.enable()); + } + await Promise.all(promises); + for (const editor of this.#allEditors.values()) { + editor.enable(); + } + } + } + #disableAll() { + this.unselectAll(); + if (this.#isEnabled) { + this.#isEnabled = false; + for (const layer of this.#allLayers.values()) { + layer.disable(); + } + for (const editor of this.#allEditors.values()) { + editor.disable(); + } + } + } + getEditors(pageIndex) { + const editors = []; + for (const editor of this.#allEditors.values()) { + if (editor.pageIndex === pageIndex) { + editors.push(editor); + } + } + return editors; + } + getEditor(id) { + return this.#allEditors.get(id); + } + addEditor(editor) { + this.#allEditors.set(editor.id, editor); + } + removeEditor(editor) { + if (editor.div.contains(document.activeElement)) { + if (this.#focusMainContainerTimeoutId) { + clearTimeout(this.#focusMainContainerTimeoutId); + } + this.#focusMainContainerTimeoutId = setTimeout(() => { + this.focusMainContainer(); + this.#focusMainContainerTimeoutId = null; + }, 0); + } + this.#allEditors.delete(editor.id); + if (editor.annotationElementId) { + this.#missingCanvases?.delete(editor.annotationElementId); + } + this.unselect(editor); + if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { + this.#annotationStorage?.remove(editor.id); + } + } + addDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.add(editor.annotationElementId); + this.addChangedExistingAnnotation(editor); + editor.deleted = true; + } + isDeletedAnnotationElement(annotationElementId) { + return this.#deletedAnnotationsElementIds.has(annotationElementId); + } + removeDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); + this.removeChangedExistingAnnotation(editor); + editor.deleted = false; + } + #addEditorToLayer(editor) { + const layer = this.#allLayers.get(editor.pageIndex); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + } + } + setActiveEditor(editor) { + if (this.#activeEditor === editor) { + return; + } + this.#activeEditor = editor; + if (editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + get #lastSelectedEditor() { + let ed = null; + for (ed of this.#selectedEditors) {} + return ed; + } + updateUI(editor) { + if (this.#lastSelectedEditor === editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + updateUIForDefaultProperties(editorType) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + toggleSelected(editor) { + if (this.#selectedEditors.has(editor)) { + this.#selectedEditors.delete(editor); + editor.unselect(); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + return; + } + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + setSelected(editor) { + this.#currentDrawingSession?.commitOrRemove(); + for (const ed of this.#selectedEditors) { + if (ed !== editor) { + ed.unselect(); + } + } + this.#selectedEditors.clear(); + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + isSelected(editor) { + return this.#selectedEditors.has(editor); + } + get firstSelectedEditor() { + return this.#selectedEditors.values().next().value; + } + unselect(editor) { + editor.unselect(); + this.#selectedEditors.delete(editor); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + get hasSelection() { + return this.#selectedEditors.size !== 0; + } + get isEnterHandled() { + return this.#selectedEditors.size === 1 && this.firstSelectedEditor.isEnterHandled; + } + undo() { + this.#commandManager.undo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: this.#isEmpty() + }); + this._editorUndoBar?.hide(); + } + redo() { + this.#commandManager.redo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + isEmpty: this.#isEmpty() + }); + } + addCommands(params) { + this.#commandManager.add(params); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: this.#isEmpty() + }); + } + cleanUndoStack(type) { + this.#commandManager.cleanType(type); + } + #isEmpty() { + if (this.#allEditors.size === 0) { + return true; + } + if (this.#allEditors.size === 1) { + for (const editor of this.#allEditors.values()) { + return editor.isEmpty(); + } + } + return false; + } + delete() { + this.commitOrRemove(); + const drawingEditor = this.currentLayer?.endDrawingSession(true); + if (!this.hasSelection && !drawingEditor) { + return; + } + const editors = drawingEditor ? [drawingEditor] : [...this.#selectedEditors]; + 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) { + this.#addEditorToLayer(editor); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + commitOrRemove() { + this.#activeEditor?.commitOrRemove(); + } + hasSomethingToControl() { + return this.#activeEditor || this.hasSelection; + } + #selectEditors(editors) { + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + for (const editor of editors) { + if (editor.isEmpty()) { + continue; + } + this.#selectedEditors.add(editor); + editor.select(); + } + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + selectAll() { + for (const editor of this.#selectedEditors) { + editor.commit(); + } + this.#selectEditors(this.#allEditors.values()); + } + unselectAll() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + if (this.#mode !== AnnotationEditorType.NONE) { + return; + } + } + if (this.#currentDrawingSession?.commitOrRemove()) { + return; + } + if (!this.hasSelection) { + return; + } + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + this.#dispatchUpdateStates({ + hasSelectedEditor: false + }); + } + translateSelectedEditors(x, y, noCommit = false) { + if (!noCommit) { + this.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + this.#translation[0] += x; + this.#translation[1] += y; + const [totalX, totalY] = this.#translation; + const editors = [...this.#selectedEditors]; + const TIME_TO_WAIT = 1000; + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + } + this.#translationTimeoutId = setTimeout(() => { + this.#translationTimeoutId = null; + this.#translation[0] = this.#translation[1] = 0; + this.addCommands({ + cmd: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(totalX, totalY); + editor.translationDone(); + } + } + }, + undo: () => { + for (const editor of editors) { + if (this.#allEditors.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); + this.#draggingEditors = new Map(); + for (const editor of this.#selectedEditors) { + this.#draggingEditors.set(editor, { + savedX: editor.x, + savedY: editor.y, + savedPageIndex: editor.pageIndex, + newX: 0, + newY: 0, + newPageIndex: -1 + }); + } + } + endDragSession() { + if (!this.#draggingEditors) { + return false; + } + this.disableUserSelect(false); + const map = this.#draggingEditors; + this.#draggingEditors = 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 (this.#allEditors.has(editor.id)) { + const parent = this.#allLayers.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 + }] of map) { + move(editor, newX, newY, newPageIndex); + } + }, + undo: () => { + for (const [editor, { + savedX, + savedY, + savedPageIndex + }] of map) { + move(editor, savedX, savedY, savedPageIndex); + } + }, + mustExec: true + }); + return true; + } + dragSelectedEditors(tx, ty) { + if (!this.#draggingEditors) { + return; + } + for (const editor of this.#draggingEditors.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() || this.#selectedEditors.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); + } + isActive(editor) { + return this.#activeEditor === editor; + } + getActive() { + return this.#activeEditor; + } + getMode() { + return this.#mode; + } + get imageManager() { + return shadow(this, "imageManager", new ImageManager()); + } + 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({ + annotationElementId, + id + }) { + (this.#changedExistingAnnotations ||= new Map()).set(annotationElementId, id); + } + removeChangedExistingAnnotation({ + annotationElementId + }) { + this.#changedExistingAnnotations?.delete(annotationElementId); + } + renderAnnotationElement(annotation) { + const editorId = this.#changedExistingAnnotations?.get(annotation.data.id); + if (!editorId) { + return; + } + const editor = this.#annotationStorage.getRawValue(editorId); + if (!editor) { + return; + } + if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) { + return; + } + editor.renderAnnotationElement(annotation); + } + setMissingCanvas(annotationId, annotationElementId, canvas) { + const editor = this.#missingCanvases?.get(annotationId); + if (!editor) { + return; + } + editor.setCanvas(annotationElementId, canvas); + this.#missingCanvases.delete(annotationId); + } + addMissingCanvas(annotationId, editor) { + (this.#missingCanvases ||= new Map()).set(annotationId, editor); + } +} + +;// ./src/display/editor/alt_text.js + +class AltText { + #altText = null; + #altTextDecorative = false; + #altTextButton = null; + #altTextButtonLabel = null; + #altTextTooltip = null; + #altTextTooltipTimeout = null; + #altTextWasFromKeyBoard = false; + #badge = null; + #editor = null; + #guessedText = null; + #textWithDisclaimer = null; + #useNewAltTextFlow = false; + static #l10nNewButton = null; + static _l10n = null; + constructor(editor) { + this.#editor = editor; + this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow; + AltText.#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 = this.#altTextButton = document.createElement("button"); + altText.className = "altText"; + altText.tabIndex = "0"; + const label = this.#altTextButtonLabel = document.createElement("span"); + altText.append(label); + if (this.#useNewAltTextFlow) { + altText.classList.add("new"); + altText.setAttribute("data-l10n-id", AltText.#l10nNewButton.missing); + label.setAttribute("data-l10n-id", AltText.#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 = this.#editor._uiManager._signal; + altText.addEventListener("contextmenu", noContextMenu, { + signal + }); + altText.addEventListener("pointerdown", event => event.stopPropagation(), { + signal + }); + const onClick = event => { + event.preventDefault(); + this.#editor._uiManager.editAltText(this.#editor); + if (this.#useNewAltTextFlow) { + this.#editor._reportTelemetry({ + action: "pdfjs.image.alt_text.image_status_label_clicked", + data: { + label: this.#label + } + }); + } + }; + altText.addEventListener("click", onClick, { + capture: true, + signal + }); + altText.addEventListener("keydown", event => { + if (event.target === altText && event.key === "Enter") { + this.#altTextWasFromKeyBoard = true; + onClick(event); + } + }, { + signal + }); + await this.#setState(); + return altText; + } + get #label() { + return this.#altText && "added" || this.#altText === null && this.guessedText && "review" || "missing"; + } + finish() { + if (!this.#altTextButton) { + return; + } + this.#altTextButton.focus({ + focusVisible: this.#altTextWasFromKeyBoard + }); + this.#altTextWasFromKeyBoard = false; + } + isEmpty() { + if (this.#useNewAltTextFlow) { + return this.#altText === null; + } + return !this.#altText && !this.#altTextDecorative; + } + hasData() { + if (this.#useNewAltTextFlow) { + return this.#altText !== null || !!this.#guessedText; + } + return this.isEmpty(); + } + get guessedText() { + return this.#guessedText; + } + async setGuessedText(guessedText) { + if (this.#altText !== null) { + return; + } + this.#guessedText = guessedText; + this.#textWithDisclaimer = await AltText._l10n.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer", { + generatedAltText: guessedText + }); + this.#setState(); + } + toggleAltTextBadge(visibility = false) { + if (!this.#useNewAltTextFlow || this.#altText) { + this.#badge?.remove(); + this.#badge = null; + return; + } + if (!this.#badge) { + const badge = this.#badge = document.createElement("div"); + badge.className = "noAltTextBadge"; + this.#editor.div.append(badge); + } + this.#badge.classList.toggle("hidden", !visibility); + } + serialize(isForCopying) { + let altText = this.#altText; + if (!isForCopying && this.#guessedText === altText) { + altText = this.#textWithDisclaimer; + } + return { + altText, + decorative: this.#altTextDecorative, + guessedText: this.#guessedText, + textWithDisclaimer: this.#textWithDisclaimer + }; + } + get data() { + return { + altText: this.#altText, + decorative: this.#altTextDecorative + }; + } + set data({ + altText, + decorative, + guessedText, + textWithDisclaimer, + cancel = false + }) { + if (guessedText) { + this.#guessedText = guessedText; + this.#textWithDisclaimer = textWithDisclaimer; + } + if (this.#altText === altText && this.#altTextDecorative === decorative) { + return; + } + if (!cancel) { + this.#altText = altText; + this.#altTextDecorative = decorative; + } + this.#setState(); + } + toggle(enabled = false) { + if (!this.#altTextButton) { + return; + } + if (!enabled && this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextButton.disabled = !enabled; + } + shown() { + this.#editor._reportTelemetry({ + action: "pdfjs.image.alt_text.image_status_label_displayed", + data: { + label: this.#label + } + }); + } + destroy() { + this.#altTextButton?.remove(); + this.#altTextButton = null; + this.#altTextButtonLabel = null; + this.#altTextTooltip = null; + this.#badge?.remove(); + this.#badge = null; + } + async #setState() { + const button = this.#altTextButton; + if (!button) { + return; + } + if (this.#useNewAltTextFlow) { + button.classList.toggle("done", !!this.#altText); + button.setAttribute("data-l10n-id", AltText.#l10nNewButton[this.#label]); + this.#altTextButtonLabel?.setAttribute("data-l10n-id", AltText.#l10nNewButton[`${this.#label}-label`]); + if (!this.#altText) { + this.#altTextTooltip?.remove(); + return; + } + } else { + if (!this.#altText && !this.#altTextDecorative) { + button.classList.remove("done"); + this.#altTextTooltip?.remove(); + return; + } + button.classList.add("done"); + button.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-edit-button"); + } + let tooltip = this.#altTextTooltip; + if (!tooltip) { + this.#altTextTooltip = tooltip = document.createElement("span"); + tooltip.className = "tooltip"; + tooltip.setAttribute("role", "tooltip"); + tooltip.id = `alt-text-tooltip-${this.#editor.id}`; + const DELAY_TO_SHOW_TOOLTIP = 100; + const signal = this.#editor._uiManager._signal; + signal.addEventListener("abort", () => { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + }, { + once: true + }); + button.addEventListener("mouseenter", () => { + this.#altTextTooltipTimeout = setTimeout(() => { + this.#altTextTooltipTimeout = null; + this.#altTextTooltip.classList.add("show"); + this.#editor._reportTelemetry({ + action: "alt_text_tooltip" + }); + }, DELAY_TO_SHOW_TOOLTIP); + }, { + signal + }); + button.addEventListener("mouseleave", () => { + if (this.#altTextTooltipTimeout) { + clearTimeout(this.#altTextTooltipTimeout); + this.#altTextTooltipTimeout = null; + } + this.#altTextTooltip?.classList.remove("show"); + }, { + signal + }); + } + if (this.#altTextDecorative) { + tooltip.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-decorative-tooltip"); + } else { + tooltip.removeAttribute("data-l10n-id"); + tooltip.textContent = this.#altText; + } + if (!tooltip.parentNode) { + button.append(tooltip); + } + const element = this.#editor.getElementForAltText(); + element?.setAttribute("aria-describedby", tooltip.id); + } +} + +;// ./src/display/touch_manager.js + +class TouchManager { + #container; + #isPinching = false; + #isPinchingStopped = null; + #isPinchingDisabled; + #onPinchStart; + #onPinching; + #onPinchEnd; + #pointerDownAC = null; + #signal; + #touchInfo = null; + #touchManagerAC; + #touchMoveAC = null; + constructor({ + container, + isPinchingDisabled = null, + isPinchingStopped = null, + onPinchStart = null, + onPinching = null, + onPinchEnd = null, + signal + }) { + this.#container = container; + this.#isPinchingStopped = isPinchingStopped; + this.#isPinchingDisabled = isPinchingDisabled; + this.#onPinchStart = onPinchStart; + this.#onPinching = onPinching; + this.#onPinchEnd = onPinchEnd; + this.#touchManagerAC = new AbortController(); + this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]); + container.addEventListener("touchstart", this.#onTouchStart.bind(this), { + passive: false, + signal: this.#signal + }); + } + get MIN_TOUCH_DISTANCE_TO_PINCH() { + return 35 / OutputScale.pixelRatio; + } + #onTouchStart(evt) { + if (this.#isPinchingDisabled?.()) { + return; + } + if (evt.touches.length === 1) { + if (this.#pointerDownAC) { + return; + } + const pointerDownAC = this.#pointerDownAC = new AbortController(); + const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]); + const container = this.#container; + const opts = { + capture: true, + signal, + passive: false + }; + const cancelPointerDown = e => { + if (e.pointerType === "touch") { + this.#pointerDownAC?.abort(); + this.#pointerDownAC = 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 (!this.#touchMoveAC) { + this.#touchMoveAC = new AbortController(); + const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]); + const container = this.#container; + const opt = { + signal, + capture: false, + passive: false + }; + container.addEventListener("touchmove", this.#onTouchMove.bind(this), opt); + const onTouchEnd = 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); + this.#onPinchStart?.(); + } + stopEvent(evt); + if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) { + this.#touchInfo = null; + return; + } + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + this.#touchInfo = { + touch0X: touch0.screenX, + touch0Y: touch0.screenY, + touch1X: touch1.screenX, + touch1Y: touch1.screenY + }; + } + #onTouchMove(evt) { + if (!this.#touchInfo || 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 = this.#touchInfo; + 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 (!this.#isPinching && Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH) { + return; + } + touchInfo.touch0X = screen0X; + touchInfo.touch0Y = screen0Y; + touchInfo.touch1X = screen1X; + touchInfo.touch1Y = screen1Y; + if (!this.#isPinching) { + this.#isPinching = true; + return; + } + const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2]; + this.#onPinching?.(origin, pDistance, distance); + } + #onTouchEnd(evt) { + if (evt.touches.length >= 2) { + return; + } + if (this.#touchMoveAC) { + this.#touchMoveAC.abort(); + this.#touchMoveAC = null; + this.#onPinchEnd?.(); + } + if (!this.#touchInfo) { + return; + } + stopEvent(evt); + this.#touchInfo = null; + this.#isPinching = false; + } + destroy() { + this.#touchManagerAC?.abort(); + this.#touchManagerAC = null; + this.#pointerDownAC?.abort(); + this.#pointerDownAC = null; + } +} + +;// ./src/display/editor/editor.js + + + + + + +class AnnotationEditor { + #accessibilityData = null; + #allResizerDivs = null; + #altText = null; + #disabled = false; + #dragPointerId = null; + #dragPointerType = ""; + #keepAspectRatio = false; + #resizersDiv = null; + #lastPointerCoords = null; + #savedDimensions = null; + #focusAC = null; + #focusedResizerName = ""; + #hasBeenClicked = false; + #initialRect = null; + #isEditing = false; + #isInEditMode = false; + #isResizerEnabledForKeyboard = false; + #moveInDOMTimeout = null; + #prevDragX = 0; + #prevDragY = 0; + #telemetryTimeouts = null; + #touchManager = null; + _isCopy = false; + _editToolbar = null; + _initialOptions = Object.create(null); + _initialData = null; + _isVisible = true; + _uiManager = null; + _focusEventsAllowed = true; + static _l10n = null; + static _l10nResizer = null; + #isDraggable = false; + #zIndex = AnnotationEditor._zIndex++; + static _borderLineWidth = -1; + static _colorManager = new ColorManager(); + static _zIndex = 1; + static _telemetryTimeout = 1000; + 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) { + 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, + rawDims: { + pageWidth, + 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; + } + 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 this.#isDraggable; + } + set _isDraggable(value) { + this.#isDraggable = 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 = this.#zIndex; + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } else { + this.#stopResizing(); + } + this.parent = parent; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!this.#hasBeenClicked) { + this.parent.setSelected(this); + } else { + this.#hasBeenClicked = 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(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + 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([width, height], x, y) { + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this._onTranslating(this.x, this.y); + this.fixAndSetPosition(); + } + translate(x, y) { + this.#translate(this.parentDimensions, x, y); + } + translateInPage(x, y) { + this.#initialRect ||= [this.x, this.y, this.width, this.height]; + this.#translate(this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + translationDone() { + this._onTranslated(this.x, this.y); + } + drag(tx, ty) { + this.#initialRect ||= [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) {} + get _hasBeenMoved() { + return !!this.#initialRect && (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y); + } + get _hasBeenResized() { + return !!this.#initialRect && (this.#initialRect[2] !== this.width || this.#initialRect[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(rotation = 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(); + } + static #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]; + } + } + screenToPageTranslation(x, y) { + return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); + } + pageTranslationToScreen(x, y) { + return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); + } + #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]; + } + } + 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 (!this.#keepAspectRatio) { + style.height = `${(100 * height / parentHeight).toFixed(2)}%`; + } + } + fixDims() { + const { + style + } = this.div; + const { + height, + width + } = style; + const widthPercent = width.endsWith("%"); + const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); + if (widthPercent && heightPercent) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + if (!widthPercent) { + style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; + } + if (!this.#keepAspectRatio && !heightPercent) { + style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; + } + } + getInitialTranslation() { + return [0, 0]; + } + #createResizers() { + if (this.#resizersDiv) { + return; + } + this.#resizersDiv = document.createElement("div"); + this.#resizersDiv.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"); + this.#resizersDiv.append(div); + div.classList.add("resizer", name); + div.setAttribute("data-resizer-name", name); + div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name), { + signal + }); + div.addEventListener("contextmenu", noContextMenu, { + signal + }); + div.tabIndex = -1; + } + this.div.prepend(this.#resizersDiv); + } + #resizerPointerdown(name, event) { + event.preventDefault(); + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#altText?.toggle(false); + const savedDraggable = this._isDraggable; + this._isDraggable = false; + this.#lastPointerCoords = [event.screenX, event.screenY]; + const ac = new AbortController(); + const signal = this._uiManager.combinedSignal(ac); + this.parent.togglePointerEvents(false); + window.addEventListener("pointermove", this.#resizerPointermove.bind(this, name), { + passive: true, + capture: true, + signal + }); + window.addEventListener("touchmove", stopEvent, { + passive: false, + signal + }); + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + this.#savedDimensions = { + 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); + this.#altText?.toggle(true); + this._isDraggable = savedDraggable; + this.parent.div.style.cursor = savedParentCursor; + this.div.style.cursor = savedCursor; + this.#addResizeToUndoStack(); + }; + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("blur", pointerUpCallback, { + signal + }); + } + #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(); + } + _onResized() {} + #addResizeToUndoStack() { + if (!this.#savedDimensions) { + return; + } + const { + savedX, + savedY, + savedWidth, + savedHeight + } = this.#savedDimensions; + this.#savedDimensions = 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.addCommands({ + cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight), + undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight), + mustExec: true + }); + } + static _round(x) { + return Math.round(x * 10000) / 10000; + } + #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 = this.#getRotationMatrix(this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const invRotationMatrix = this.#getRotationMatrix(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] = this.#lastPointerCoords; + [deltaX, deltaY] = this.screenToPageTranslation(screenX - lastScreenX, screenY - lastScreenY); + this.#lastPointerCoords[0] = screenX; + this.#lastPointerCoords[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]; + this.#initialRect ||= [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(); + } + _onResizing() {} + altTextFinish() { + this.#altText?.finish(); + } + async addEditToolbar() { + if (this._editToolbar || this.#isInEditMode) { + return this._editToolbar; + } + this._editToolbar = new EditorToolbar(this); + this.div.append(this._editToolbar.render()); + if (this.#altText) { + await this._editToolbar.addAltText(this.#altText); + } + return this._editToolbar; + } + removeEditToolbar() { + if (!this._editToolbar) { + return; + } + this._editToolbar.remove(); + this._editToolbar = null; + this.#altText?.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 (this.#altText) { + return; + } + AltText.initialize(AnnotationEditor._l10n); + this.#altText = new AltText(this); + if (this.#accessibilityData) { + this.#altText.data = this.#accessibilityData; + this.#accessibilityData = null; + } + await this.addEditToolbar(); + } + get altTextData() { + return this.#altText?.data; + } + set altTextData(data) { + if (!this.#altText) { + return; + } + this.#altText.data = data; + } + get guessedAltText() { + return this.#altText?.guessedText; + } + async setGuessedAltText(text) { + await this.#altText?.setGuessedText(text); + } + serializeAltText(isForCopying) { + return this.#altText?.serialize(isForCopying); + } + hasAltText() { + return !!this.#altText && !this.#altText.isEmpty(); + } + hasAltTextData() { + return this.#altText?.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 = this.#disabled ? -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(); + this.#addFocusListeners(); + 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"]); + if (this.isResizable && this._uiManager._supportsPinchToZoom) { + this.#touchManager ||= new TouchManager({ + container: div, + isPinchingDisabled: () => !this.isSelected, + onPinchStart: this.#touchPinchStartCallback.bind(this), + onPinching: this.#touchPinchCallback.bind(this), + onPinchEnd: this.#touchPinchEndCallback.bind(this), + signal: this._uiManager._signal + }); + } + this._uiManager._editorUndoBar?.hide(); + return div; + } + #touchPinchStartCallback() { + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + this.#altText?.toggle(false); + this.parent.togglePointerEvents(false); + } + #touchPinchCallback(_origin, prevDistance, distance) { + const slowDownFactor = 0.7; + let factor = slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor; + if (factor === 1) { + return; + } + const rotationMatrix = this.#getRotationMatrix(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; + } + this.#initialRect ||= [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(); + } + #touchPinchEndCallback() { + this.#altText?.toggle(true); + this.parent.togglePointerEvents(true); + this.#addResizeToUndoStack(); + } + pointerdown(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + this.#hasBeenClicked = true; + if (this._isDraggable) { + this.#setUpDragSession(event); + return; + } + this.#selectOnPointerEvent(event); + } + get isSelected() { + return this._uiManager.isSelected(this); + } + #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); + } + } + #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(); + this.#dragPointerId = null; + this.#hasBeenClicked = false; + if (!this._uiManager.endDragSession()) { + this.#selectOnPointerEvent(e); + } + if (hasDraggingStarted) { + this._onStopDragging(); + } + }; + if (isSelected) { + this.#prevDragX = event.clientX; + this.#prevDragY = event.clientY; + this.#dragPointerId = event.pointerId; + this.#dragPointerType = event.pointerType; + window.addEventListener("pointermove", e => { + if (!hasDraggingStarted) { + hasDraggingStarted = true; + this._onStartDragging(); + } + const { + clientX: x, + clientY: y, + pointerId + } = e; + if (pointerId !== this.#dragPointerId) { + stopEvent(e); + return; + } + const [tx, ty] = this.screenToPageTranslation(x - this.#prevDragX, y - this.#prevDragY); + this.#prevDragX = x; + this.#prevDragY = y; + this._uiManager.dragSelectedEditors(tx, ty); + }, opts); + window.addEventListener("touchmove", stopEvent, opts); + window.addEventListener("pointerdown", e => { + if (e.pointerType === this.#dragPointerType) { + if (this.#touchManager || e.isPrimary) { + cancelDrag(e); + } + } + stopEvent(e); + }, opts); + } + const pointerUpCallback = e => { + if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) { + cancelDrag(e); + return; + } + stopEvent(e); + }; + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("blur", pointerUpCallback, { + signal + }); + } + _onStartDragging() {} + _onStopDragging() {} + moveInDOM() { + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + } + this.#moveInDOMTimeout = setTimeout(() => { + this.#moveInDOMTimeout = 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, rotation = 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() { + this.#isInEditMode = true; + } + disableEditMode() { + this.#isInEditMode = false; + } + isInEditMode() { + return this.#isInEditMode; + } + shouldGetKeyboardEvents() { + return this.#isResizerEnabledForKeyboard; + } + 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; + } + #addFocusListeners() { + if (this.#focusAC || !this.div) { + return; + } + this.#focusAC = new AbortController(); + const signal = this._uiManager.combinedSignal(this.#focusAC); + this.div.addEventListener("focusin", this.focusin.bind(this), { + signal + }); + this.div.addEventListener("focusout", this.focusout.bind(this), { + signal + }); + } + rebuild() { + this.#addFocusListeners(); + } + rotate(_angle) {} + resize() {} + serializeDeleted() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex, + popupRef: this._initialData?.popupRef || "" + }; + } + serialize(isForCopying = false, context = null) { + unreachable("An editor must be serializable"); + } + static async deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager + }); + editor.rotation = data.rotation; + editor.#accessibilityData = 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() { + this.#focusAC?.abort(); + this.#focusAC = null; + if (!this.isEmpty()) { + this.commit(); + } + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + if (this.#moveInDOMTimeout) { + clearTimeout(this.#moveInDOMTimeout); + this.#moveInDOMTimeout = null; + } + this.#stopResizing(); + this.removeEditToolbar(); + if (this.#telemetryTimeouts) { + for (const timeout of this.#telemetryTimeouts.values()) { + clearTimeout(timeout); + } + this.#telemetryTimeouts = null; + } + this.parent = null; + this.#touchManager?.destroy(); + this.#touchManager = null; + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + this.#createResizers(); + this.#resizersDiv.classList.remove("hidden"); + } + } + get toolbarPosition() { + return null; + } + keydown(event) { + if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { + return; + } + this._uiManager.setSelected(this); + this.#savedDimensions = { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }; + const children = this.#resizersDiv.children; + if (!this.#allResizerDivs) { + this.#allResizerDivs = Array.from(children); + const boundResizerKeydown = this.#resizerKeydown.bind(this); + const boundResizerBlur = this.#resizerBlur.bind(this); + const signal = this._uiManager._signal; + for (const div of this.#allResizerDivs) { + const name = div.getAttribute("data-resizer-name"); + div.setAttribute("role", "spinbutton"); + div.addEventListener("keydown", boundResizerKeydown, { + signal + }); + div.addEventListener("blur", boundResizerBlur, { + signal + }); + div.addEventListener("focus", this.#resizerFocus.bind(this, name), { + signal + }); + div.setAttribute("data-l10n-id", AnnotationEditor._l10nResizer[name]); + } + } + const first = this.#allResizerDivs[0]; + let firstPosition = 0; + for (const div of children) { + if (div === first) { + break; + } + firstPosition++; + } + const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#allResizerDivs.length / 4); + if (nextFirstPosition !== firstPosition) { + if (nextFirstPosition < firstPosition) { + for (let i = 0; i < firstPosition - nextFirstPosition; i++) { + this.#resizersDiv.append(this.#resizersDiv.firstChild); + } + } else if (nextFirstPosition > firstPosition) { + for (let i = 0; i < nextFirstPosition - firstPosition; i++) { + this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild); + } + } + let i = 0; + for (const child of children) { + const div = this.#allResizerDivs[i++]; + const name = div.getAttribute("data-resizer-name"); + child.setAttribute("data-l10n-id", AnnotationEditor._l10nResizer[name]); + } + } + this.#setResizerTabIndex(0); + this.#isResizerEnabledForKeyboard = true; + this.#resizersDiv.firstChild.focus({ + focusVisible: true + }); + event.preventDefault(); + event.stopImmediatePropagation(); + } + #resizerKeydown(event) { + AnnotationEditor._resizerKeyboardManager.exec(this, event); + } + #resizerBlur(event) { + if (this.#isResizerEnabledForKeyboard && event.relatedTarget?.parentNode !== this.#resizersDiv) { + this.#stopResizing(); + } + } + #resizerFocus(name) { + this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : ""; + } + #setResizerTabIndex(value) { + if (!this.#allResizerDivs) { + return; + } + for (const div of this.#allResizerDivs) { + div.tabIndex = value; + } + } + _resizeWithKeyboard(x, y) { + if (!this.#isResizerEnabledForKeyboard) { + return; + } + this.#resizerPointermove(this.#focusedResizerName, { + deltaX: x, + deltaY: y, + fromKeyboard: true + }); + } + #stopResizing() { + this.#isResizerEnabledForKeyboard = false; + this.#setResizerTabIndex(-1); + this.#addResizeToUndoStack(); + } + _stopResizingWithKeyboard() { + this.#stopResizing(); + this.div.focus(); + } + select() { + 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(); + this.#altText?.toggleAltTextBadge(false); + } + unselect() { + this.#resizersDiv?.classList.add("hidden"); + this.div?.classList.remove("selectedEditor"); + if (this.div?.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus({ + preventScroll: true + }); + } + this._editToolbar?.hide(); + this.#altText?.toggleAltTextBadge(true); + } + updateParams(type, value) {} + disableEditing() {} + enableEditing() {} + enterInEditMode() {} + getElementForAltText() { + return this.div; + } + get contentDiv() { + return this.div; + } + get isEditing() { + return this.#isEditing; + } + set isEditing(value) { + this.#isEditing = value; + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + setAspectRatio(width, height) { + this.#keepAspectRatio = 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, mustWait = false) { + if (mustWait) { + this.#telemetryTimeouts ||= new Map(); + const { + action + } = data; + let timeout = this.#telemetryTimeouts.get(action); + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(() => { + this._reportTelemetry(data); + this.#telemetryTimeouts.delete(action); + if (this.#telemetryTimeouts.size === 0) { + this.#telemetryTimeouts = null; + } + }, AnnotationEditor._telemetryTimeout); + this.#telemetryTimeouts.set(action, timeout); + return; + } + data.type ||= this.editorType; + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + show(visible = this._isVisible) { + this.div.classList.toggle("hidden", !visible); + this._isVisible = visible; + } + enable() { + if (this.div) { + this.div.tabIndex = 0; + } + this.#disabled = false; + } + disable() { + if (this.div) { + this.div.tabIndex = -1; + } + this.#disabled = 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(); + } + } +} +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 + + + +const SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfer: undefined +}); +class AnnotationStorage { + #modified = false; + #modifiedIds = null; + #storage = new Map(); + constructor() { + this.onSetModified = null; + this.onResetModified = null; + this.onAnnotationEditor = null; + } + getValue(key, defaultValue) { + const value = this.#storage.get(key); + if (value === undefined) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return this.#storage.get(key); + } + remove(key) { + this.#storage.delete(key); + if (this.#storage.size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of this.#storage.values()) { + if (value instanceof AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } + } + setValue(key, value) { + const obj = this.#storage.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; + this.#storage.set(key, value); + } + if (modified) { + this.#setModified(); + } + if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); + } + } + has(key) { + return this.#storage.has(key); + } + get size() { + return this.#storage.size; + } + #setModified() { + if (!this.#modified) { + this.#modified = true; + if (typeof this.onSetModified === "function") { + this.onSetModified(); + } + } + } + resetModified() { + if (this.#modified) { + this.#modified = false; + if (typeof this.onResetModified === "function") { + this.onResetModified(); + } + } + } + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (this.#storage.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 this.#storage) { + 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 this.#storage.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() { + this.#modifiedIds = null; + } + get modifiedIds() { + if (this.#modifiedIds) { + return this.#modifiedIds; + } + const ids = []; + for (const value of this.#storage.values()) { + if (!(value instanceof AnnotationEditor) || !value.annotationElementId || !value.serialize()) { + continue; + } + ids.push(value.annotationElementId); + } + return this.#modifiedIds = { + ids: new Set(ids), + hash: ids.join(",") + }; + } + [Symbol.iterator]() { + return this.#storage.entries(); + } +} +class PrintAnnotationStorage extends AnnotationStorage { + #serializable; + constructor(parent) { + super(); + const { + map, + hash, + transfer + } = parent.serializable; + const clone = structuredClone(map, transfer ? { + transfer + } : null); + this.#serializable = { + map: clone, + hash, + transfer + }; + } + get print() { + unreachable("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return this.#serializable; + } + get modifiedIds() { + return shadow(this, "modifiedIds", { + ids: new Set(), + hash: "" + }); + } +} + +;// ./src/display/font_loader.js + +class FontLoader { + #systemFonts = new Set(); + constructor({ + ownerDocument = globalThis.document, + styleElement = null + }) { + 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(); + this.#systemFonts.clear(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; + } + } + async loadSystemFont({ + systemFontInfo: info, + disableFontFace, + _inspectFont + }) { + if (!info || this.#systemFonts.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(); + this.#systemFonts.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, inspectFont = 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/shared/message_handler.js + +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()); +} +class MessageHandler { + #messageAC = new AbortController(); + constructor(sourceName, targetName, comObj) { + 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", this.#onMessage.bind(this), { + signal: this.#messageAC.signal + }); + } + #onMessage({ + data + }) { + if (data.targetName !== this.sourceName) { + return; + } + if (data.stream) { + this.#processStreamMessage(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) { + this.#createStreamSink(data); + return; + } + action(data.data); + } + 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); + } + #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, size = 1, transfers) { + 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) + }); + }); + } + #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(); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.ERROR: + assert(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + this.#deleteStreamController(streamController, streamId); + break; + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + } + this.#deleteStreamController(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 #deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); + delete this.streamControllers[streamId]; + } + destroy() { + this.#messageAC?.abort(); + this.#messageAC = null; + } +} + +;// ./src/display/canvas_factory.js + +class BaseCanvasFactory { + #enableHWA = false; + constructor({ + enableHWA = false + }) { + this.#enableHWA = 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: !this.#enableHWA + }) + }; + } + 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({ + ownerDocument = globalThis.document, + enableHWA = false + }) { + 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({ + baseUrl = null, + isCompressed = true + }) { + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; + } + async fetch({ + name + }) { + 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); + } +} + +;// ./src/display/filter_factory.js + + +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(keepHCM = false) {} +} +class DOMFilterFactory extends BaseFilterFactory { + #baseUrl; + #_cache; + #_defs; + #docId; + #document; + #_hcmCache; + #id = 0; + constructor({ + docId, + ownerDocument = globalThis.document + }) { + super(); + this.#docId = docId; + this.#document = ownerDocument; + } + get #cache() { + return this.#_cache ||= new Map(); + } + get #hcmCache() { + return this.#_hcmCache ||= new Map(); + } + get #defs() { + if (!this.#_defs) { + const div = this.#document.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 = this.#document.createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); + div.append(svg); + svg.append(this.#_defs); + this.#document.body.append(div); + } + return this.#_defs; + } + #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(",")]; + } + #createUrl(id) { + if (this.#baseUrl === undefined) { + this.#baseUrl = ""; + const url = this.#document.URL; + if (url !== this.#document.baseURI) { + if (isDataScheme(url)) { + warn('#createUrl: ignore "data:"-URL for performance reasons.'); + } else { + this.#baseUrl = updateUrlHash(url, ""); + } + } + } + return `url(${this.#baseUrl}#${id})`; + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = this.#cache.get(maps); + if (value) { + return value; + } + const [tableR, tableG, tableB] = this.#createTables(maps); + const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`; + value = this.#cache.get(key); + if (value) { + this.#cache.set(maps, value); + return value; + } + const id = `g_${this.#docId}_transfer_map_${this.#id++}`; + const url = this.#createUrl(id); + this.#cache.set(maps, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapConversion(tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + const key = `${fgColor}-${bgColor}`; + const filterName = "base"; + let info = this.#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 + }; + this.#hcmCache.set(filterName, info); + } + if (!fgColor || !bgColor) { + return info.url; + } + const fgRGB = this.#getRGB(fgColor); + fgColor = Util.makeHexColor(...fgRGB); + const bgRGB = this.#getRGB(bgColor); + bgColor = Util.makeHexColor(...bgRGB); + this.#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_${this.#docId}_hcm_filter`; + const filter = info.filter = this.#createFilter(id); + this.#addTransferMapConversion(table, table, table, filter); + this.#addGrayConversion(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(","); + }; + this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + info.url = this.#createUrl(id); + return info.url; + } + addAlphaFilter(map) { + let value = this.#cache.get(map); + if (value) { + return value; + } + const [tableA] = this.#createTables([map]); + const key = `alpha_${tableA}`; + value = this.#cache.get(key); + if (value) { + this.#cache.set(map, value); + return value; + } + const id = `g_${this.#docId}_alpha_map_${this.#id++}`; + const url = this.#createUrl(id); + this.#cache.set(map, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapAlphaConversion(tableA, filter); + return url; + } + addLuminosityFilter(map) { + let value = this.#cache.get(map || "luminosity"); + if (value) { + return value; + } + let tableA, key; + if (map) { + [tableA] = this.#createTables([map]); + key = `luminosity_${tableA}`; + } else { + key = "luminosity"; + } + value = this.#cache.get(key); + if (value) { + this.#cache.set(map, value); + return value; + } + const id = `g_${this.#docId}_luminosity_map_${this.#id++}`; + const url = this.#createUrl(id); + this.#cache.set(map, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addLuminosityConversion(filter); + if (map) { + this.#addTransferMapAlphaConversion(tableA, filter); + } + return url; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + let info = this.#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 + }; + this.#hcmCache.set(filterName, info); + } + if (!fgColor || !bgColor) { + return info.url; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(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(this.#getRGB.bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + this.#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_${this.#docId}_hcm_${filterName}_filter`; + const filter = info.filter = this.#createFilter(id); + this.#addGrayConversion(filter); + this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + info.url = this.#createUrl(id); + return info.url; + } + destroy(keepHCM = false) { + if (keepHCM && this.#_hcmCache?.size) { + return; + } + this.#_defs?.parentNode.parentNode.remove(); + this.#_defs = null; + this.#_cache?.clear(); + this.#_cache = null; + this.#_hcmCache?.clear(); + this.#_hcmCache = null; + this.#id = 0; + } + #addLuminosityConversion(filter) { + const feColorMatrix = this.#document.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); + } + #addGrayConversion(filter) { + const feColorMatrix = this.#document.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); + } + #createFilter(id) { + const filter = this.#document.createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + this.#defs.append(filter); + return filter; + } + #appendFeFunc(feComponentTransfer, func, table) { + const feFunc = this.#document.createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); + } + #addTransferMapConversion(rTable, gTable, bTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); + this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); + this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); + } + #addTransferMapAlphaConversion(aTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncA", aTable); + } + #getRGB(color) { + this.#defs.style.color = color; + return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); + } +} + +;// ./src/display/standard_fontdata_factory.js + + +class BaseStandardFontDataFactory { + constructor({ + baseUrl = null + }) { + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + 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({ + baseUrl = null + }) { + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + 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 + + + + + + +if (isNodeJS) { + warn("Please use the `legacy` build in Node.js environments."); +} +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 + + +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 { + static MAX_PATTERN_SIZE = 3000; + 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 ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + current.fillColor = ctx.fillStyle; + current.strokeColor = ctx.strokeStyle; + break; + case PaintType.UNCOLORED: + const cssColor = Util.makeHexColor(color[0], color[1], color[2]); + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + current.fillColor = cssColor; + current.strokeColor = cssColor; + 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; + } +} + +;// ./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({ + src, + srcPos = 0, + dest, + width, + height, + nonBlackColor = 0xffffffff, + inverseDecode = false +}) { + 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({ + src, + srcPos = 0, + dest, + destPos = 0, + width, + height +}) { + 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 + + + + +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 { + alphaIsShape = false; + fontSize = 0; + fontSizeScale = 1; + textMatrix = null; + textMatrixScale = 1; + fontMatrix = FONT_IDENTITY_MATRIX; + leading = 0; + x = 0; + y = 0; + lineX = 0; + lineY = 0; + charSpacing = 0; + wordSpacing = 0; + textHScale = 1; + textRenderingMode = TextRenderingMode.FILL; + textRise = 0; + fillColor = "#000000"; + strokeColor = "#000000"; + patternFill = false; + patternStroke = false; + fillAlpha = 1; + strokeAlpha = 1; + lineWidth = 1; + activeSMask = null; + transferMaps = "none"; + constructor(width, height) { + 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(pathType = PathType.FILL, transform = 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(pathType = PathType.FILL, transform = 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 = {}; +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { + optionalContentConfig, + markedContentStack = null + }, annotationCanvasMap, pageColors) { + 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, fallback = null) { + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + 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; + } + } + } + #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; + } + } + endDrawing() { + this.#restoreInitialState(); + 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(); + this.#drawFilter(); + } + #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; + } + } + } + _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) { + const backdropRGB = Util.makeHexColor(...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 = backdropRGB; + 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 = backdropRGB; + 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, consumePath = 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, consumePath = 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); + } + #getScaledPath(path, currentTransform, transform) { + const newPath = new Path2D(); + newPath.addPath(path, new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform)); + return newPath; + } + 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(this.#getScaledPath(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(this.#getScaledPath(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(r, g, b) { + this.ctx.strokeStyle = this.current.strokeColor = Util.makeHexColor(r, g, b); + this.current.patternStroke = false; + } + setStrokeTransparent() { + this.ctx.strokeStyle = this.current.strokeColor = "transparent"; + this.current.patternStroke = false; + } + setFillRGBColor(r, g, b) { + this.ctx.fillStyle = this.current.fillColor = Util.makeHexColor(r, g, b); + this.current.patternFill = false; + } + setFillTransparent() { + this.ctx.fillStyle = this.current.fillColor = "transparent"; + this.current.patternFill = false; + } + _getPattern(objId, matrix = 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) { + this.#restoreInitialState(); + 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(); + this.#drawFilter(); + 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, skewX = 0, skewY = 0, scaleY, positions) { + 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; + } +} +for (const op in OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { + CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; + } +} + +;// ./src/display/worker_options.js +class GlobalWorkerOptions { + static #port = null; + static #src = ""; + static get workerPort() { + return this.#port; + } + static set workerPort(val) { + if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) { + throw new Error("Invalid `workerPort` type."); + } + this.#port = val; + } + static get workerSrc() { + return this.#src; + } + static set workerSrc(val) { + if (typeof val !== "string") { + throw new Error("Invalid `workerSrc` type."); + } + this.#src = val; + } +} + +;// ./src/display/metadata.js +class Metadata { + #map; + #data; + constructor({ + parsedData, + rawData + }) { + this.#map = parsedData; + this.#data = rawData; + } + getRaw() { + return this.#data; + } + get(name) { + return this.#map.get(name) ?? null; + } + [Symbol.iterator]() { + return this.#map.entries(); + } +} + +;// ./src/display/optional_content_config.js + + +const INTERNAL = Symbol("INTERNAL"); +class OptionalContentGroup { + #isDisplay = false; + #isPrint = false; + #userSet = false; + #visible = true; + constructor(renderingIntent, { + name, + intent, + usage, + rbGroups + }) { + this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY); + this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); + this.name = name; + this.intent = intent; + this.usage = usage; + this.rbGroups = rbGroups; + } + get visible() { + if (this.#userSet) { + return this.#visible; + } + if (!this.#visible) { + return false; + } + const { + print, + view + } = this.usage; + if (this.#isDisplay) { + return view?.viewState !== "OFF"; + } else if (this.#isPrint) { + return print?.printState !== "OFF"; + } + return true; + } + _setVisible(internal, visible, userSet = false) { + if (internal !== INTERNAL) { + unreachable("Internal method `_setVisible` called."); + } + this.#userSet = userSet; + this.#visible = visible; + } +} +class OptionalContentConfig { + #cachedGetHash = null; + #groups = new Map(); + #initialHash = null; + #order = null; + constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) { + this.renderingIntent = renderingIntent; + this.name = null; + this.creator = null; + if (data === null) { + return; + } + this.name = data.name; + this.creator = data.creator; + this.#order = data.order; + for (const group of data.groups) { + this.#groups.set(group.id, new OptionalContentGroup(renderingIntent, group)); + } + if (data.baseState === "OFF") { + for (const group of this.#groups.values()) { + group._setVisible(INTERNAL, false); + } + } + for (const on of data.on) { + this.#groups.get(on)._setVisible(INTERNAL, true); + } + for (const off of data.off) { + this.#groups.get(off)._setVisible(INTERNAL, false); + } + this.#initialHash = this.getHash(); + } + #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 = this.#evaluateVisibilityExpression(element); + } else if (this.#groups.has(element)) { + state = this.#groups.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"; + } + isVisible(group) { + if (this.#groups.size === 0) { + return true; + } + if (!group) { + info("Optional content group not defined."); + return true; + } + if (group.type === "OCG") { + if (!this.#groups.has(group.id)) { + warn(`Optional content group not found: ${group.id}`); + return true; + } + return this.#groups.get(group.id).visible; + } else if (group.type === "OCMD") { + if (group.expression) { + return this.#evaluateVisibilityExpression(group.expression); + } + if (!group.policy || group.policy === "AnyOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOn") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return false; + } + } + return true; + } else if (group.policy === "AnyOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (!this.#groups.get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOff") { + for (const id of group.ids) { + if (!this.#groups.has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (this.#groups.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, visible = true, preserveRB = true) { + const group = this.#groups.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) { + this.#groups.get(otherId)?._setVisible(INTERNAL, false, true); + } + } + } + } + group._setVisible(INTERNAL, !!visible, true); + this.#cachedGetHash = null; + } + setOCGState({ + state, + preserveRB + }) { + let operator; + for (const elem of state) { + switch (elem) { + case "ON": + case "OFF": + case "Toggle": + operator = elem; + continue; + } + const group = this.#groups.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; + } + } + this.#cachedGetHash = null; + } + get hasInitialVisibility() { + return this.#initialHash === null || this.getHash() === this.#initialHash; + } + getOrder() { + if (!this.#groups.size) { + return null; + } + if (this.#order) { + return this.#order.slice(); + } + return [...this.#groups.keys()]; + } + getGroup(id) { + return this.#groups.get(id) || null; + } + getHash() { + if (this.#cachedGetHash !== null) { + return this.#cachedGetHash; + } + const hash = new MurmurHash3_64(); + for (const [id, group] of this.#groups) { + hash.update(`${id}:${group.visible}`); + } + return this.#cachedGetHash = hash.hexdigest(); + } + [Symbol.iterator]() { + return this.#groups.entries(); + } +} + +;// ./src/display/transport_stream.js + + +class PDFDataTransportStream { + constructor(pdfDataRangeTransport, { + disableRange = false, + disableStream = false + }) { + 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({ + begin, + chunk + }) { + 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, progressiveDone = false, contentDispositionFilename = 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({ + responseHeaders, + isHttp, + rangeChunkSize, + disableRange +}) { + 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 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 { + _responseOrigin = null; + constructor(source) { + 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 + + +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 { + _responseOrigin = null; + constructor({ + url, + httpHeaders, + withCredentials + }) { + 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/text_layer.js + + +const MAX_TEXT_DIVS_TO_RENDER = 100000; +const DEFAULT_FONT_SIZE = 30; +class TextLayer { + #capability = Promise.withResolvers(); + #container = null; + #disableProcessItems = false; + #fontInspectorEnabled = !!globalThis.FontInspector?.enabled; + #lang = null; + #layoutTextParams = null; + #pageHeight = 0; + #pageWidth = 0; + #reader = null; + #rootContainer = null; + #rotation = 0; + #scale = 0; + #styleCache = Object.create(null); + #textContentItemsStr = []; + #textContentSource = null; + #textDivs = []; + #textDivProperties = new WeakMap(); + #transform = null; + static #ascentCache = new Map(); + static #canvasContexts = new Map(); + static #canvasCtxFonts = new WeakMap(); + static #minFontSize = null; + static #pendingTextLayers = new Set(); + constructor({ + textContentSource, + container, + viewport + }) { + if (textContentSource instanceof ReadableStream) { + this.#textContentSource = textContentSource; + } else if (typeof textContentSource === "object") { + this.#textContentSource = new ReadableStream({ + start(controller) { + controller.enqueue(textContentSource); + controller.close(); + } + }); + } else { + throw new Error('No "textContentSource" parameter specified.'); + } + this.#container = this.#rootContainer = container; + this.#scale = viewport.scale * OutputScale.pixelRatio; + this.#rotation = viewport.rotation; + this.#layoutTextParams = { + div: null, + properties: null, + ctx: null + }; + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; + this.#pageWidth = pageWidth; + this.#pageHeight = pageHeight; + TextLayer.#ensureMinFontSizeComputed(); + setLayerDimensions(container, viewport); + this.#capability.promise.finally(() => { + TextLayer.#pendingTextLayers.delete(this); + this.#layoutTextParams = null; + this.#styleCache = 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 = () => { + this.#reader.read().then(({ + value, + done + }) => { + if (done) { + this.#capability.resolve(); + return; + } + this.#lang ??= value.lang; + Object.assign(this.#styleCache, value.styles); + this.#processItems(value.items); + pump(); + }, this.#capability.reject); + }; + this.#reader = this.#textContentSource.getReader(); + TextLayer.#pendingTextLayers.add(this); + pump(); + return this.#capability.promise; + } + update({ + viewport, + onBefore = null + }) { + const scale = viewport.scale * OutputScale.pixelRatio; + const rotation = viewport.rotation; + if (rotation !== this.#rotation) { + onBefore?.(); + this.#rotation = rotation; + setLayerDimensions(this.#rootContainer, { + rotation + }); + } + if (scale !== this.#scale) { + onBefore?.(); + this.#scale = scale; + const params = { + div: null, + properties: null, + ctx: TextLayer.#getCtx(this.#lang) + }; + for (const div of this.#textDivs) { + params.properties = this.#textDivProperties.get(div); + params.div = div; + this.#layout(params); + } + } + } + cancel() { + const abortEx = new AbortException("TextLayer task cancelled."); + this.#reader?.cancel(abortEx).catch(() => {}); + this.#reader = null; + this.#capability.reject(abortEx); + } + get textDivs() { + return this.#textDivs; + } + get textContentItemsStr() { + return this.#textContentItemsStr; + } + #processItems(items) { + if (this.#disableProcessItems) { + return; + } + this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang); + const textDivs = this.#textDivs, + textContentItemsStr = this.#textContentItemsStr; + for (const item of items) { + if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) { + warn("Ignoring additional textDivs for performance reasons."); + this.#disableProcessItems = true; + return; + } + if (item.str === undefined) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = this.#container; + this.#container = document.createElement("span"); + this.#container.classList.add("markedContent"); + if (item.id !== null) { + this.#container.setAttribute("id", `${item.id}`); + } + parent.append(this.#container); + } else if (item.type === "endMarkedContent") { + this.#container = this.#container.parentNode; + } + continue; + } + textContentItemsStr.push(item.str); + this.#appendText(item); + } + } + #appendText(geom) { + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + this.#textDivs.push(textDiv); + const tx = Util.transform(this.#transform, geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = this.#styleCache[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + let fontFamily = this.#fontInspectorEnabled && style.fontSubstitution || style.fontFamily; + fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily; + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang); + 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 (this.#container === this.#rootContainer) { + divStyle.left = `${(100 * left / this.#pageWidth).toFixed(2)}%`; + divStyle.top = `${(100 * top / this.#pageHeight).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${(TextLayer.#minFontSize * fontHeight).toFixed(2)}px)`; + divStyle.fontFamily = fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (this.#fontInspectorEnabled) { + 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; + } + this.#textDivProperties.set(textDiv, textDivProperties); + this.#layoutTextParams.div = textDiv; + this.#layoutTextParams.properties = textDivProperties; + this.#layout(this.#layoutTextParams); + if (textDivProperties.hasText) { + this.#container.append(textDiv); + } + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + this.#container.append(br); + } + } + #layout(params) { + const { + div, + properties, + ctx + } = params; + const { + style + } = div; + let transform = ""; + if (TextLayer.#minFontSize > 1) { + transform = `scale(${1 / TextLayer.#minFontSize})`; + } + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily); + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * this.#scale / width}) ${transform}`; + } + } + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; + } + } + static cleanup() { + if (this.#pendingTextLayers.size > 0) { + return; + } + this.#ascentCache.clear(); + for (const { + canvas + } of this.#canvasContexts.values()) { + canvas.remove(); + } + this.#canvasContexts.clear(); + } + static #getCtx(lang = null) { + let ctx = this.#canvasContexts.get(lang ||= ""); + if (!ctx) { + const canvas = document.createElement("canvas"); + canvas.className = "hiddenCanvasElement"; + canvas.lang = lang; + document.body.append(canvas); + ctx = canvas.getContext("2d", { + alpha: false, + willReadFrequently: true + }); + this.#canvasContexts.set(lang, ctx); + this.#canvasCtxFonts.set(ctx, { + size: 0, + family: "" + }); + } + return ctx; + } + static #ensureCtxFont(ctx, size, family) { + const cached = this.#canvasCtxFonts.get(ctx); + if (size === cached.size && family === cached.family) { + return; + } + ctx.font = `${size}px ${family}`; + cached.size = size; + cached.family = family; + } + static #ensureMinFontSizeComputed() { + if (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); + this.#minFontSize = div.getBoundingClientRect().height; + div.remove(); + } + static #getAscent(fontFamily, style, lang) { + const cachedAscent = this.#ascentCache.get(fontFamily); + if (cachedAscent) { + return cachedAscent; + } + const ctx = this.#getCtx(lang); + ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE; + this.#ensureCtxFont(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; + } + } + this.#ascentCache.set(fontFamily, ratio); + return ratio; + } +} + +;// ./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 + + + + + + + + + + + + + + + + + + + + + +const DEFAULT_RANGE_CHUNK_SIZE = 65536; +const RENDERING_CANCELLED_TIMEOUT = 100; +function getDocument(src = {}) { + 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) : 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 : DEFAULT_RANGE_CHUNK_SIZE; + 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 cMapUrl = getFactoryUrlProp(src.cMapUrl); + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || (isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory); + const iccUrl = getFactoryUrlProp(src.iccUrl); + const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl); + 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 + }; + worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); + task._worker = worker; + } + const docParams = { + docId, + apiVersion: "5.2.133", + 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."); + } + let NetworkStream; + if (isNodeJS) { + if (isValidFetchUrl(url)) { + if (typeof fetch === "undefined" || typeof Response === "undefined" || !("body" in Response.prototype)) { + throw new Error("getDocument - the Fetch API was disabled in Node.js, see `--no-experimental-fetch`."); + } + NetworkStream = PDFFetchStream; + } else { + NetworkStream = PDFNodeStream; + } + } else { + NetworkStream = isValidFetchUrl(url) ? PDFFetchStream : 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; +} +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; + } + if (typeof val === "string") { + if (isNodeJS) { + return val; + } + 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); +class PDFDocumentLoadingTask { + static #docId = 0; + _capability = Promise.withResolvers(); + _transport = null; + _worker = null; + docId = `d${PDFDocumentLoadingTask.#docId++}`; + destroyed = false; + onPassword = null; + 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(); + } +} +class PDFDataRangeTransport { + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._progressiveDoneListeners = []; + this._readyCapability = Promise.withResolvers(); + } + addRangeListener(listener) { + this._rangeListeners.push(listener); + } + addProgressListener(listener) { + this._progressListeners.push(listener); + } + addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + } + addProgressiveDoneListener(listener) { + this._progressiveDoneListeners.push(listener); + } + onDataRange(begin, chunk) { + for (const listener of this._rangeListeners) { + listener(begin, chunk); + } + } + onDataProgress(loaded, total) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressListeners) { + listener(loaded, total); + } + }); + } + onDataProgressiveRead(chunk) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveReadListeners) { + listener(chunk); + } + }); + } + onDataProgressiveDone() { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveDoneListeners) { + listener(); + } + }); + } + transportReady() { + this._readyCapability.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({ + intent = "display" + } = {}) { + 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() { + return this._transport.saveDocument(); + } + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; + } + cleanup(keepLoadedFonts = 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(); + } +} +class PDFPageProxy { + #pendingCleanup = false; + constructor(pageIndex, pageInfo, transport, pdfBug = 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({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.view, + userUnit: this.userUnit, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + getAnnotations({ + intent = "display" + } = {}) { + 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({ + canvasContext, + viewport, + intent = "display", + annotationMode = AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null, + isEditing = false + }) { + this._stats?.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing); + const { + renderingIntent, + cacheKey + } = intentArgs; + this.#pendingCleanup = 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) { + this.#pendingCleanup = true; + } + this.#tryCleanup(); + 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(([transparency, optionalContentConfig]) => { + 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({ + intent = "display", + annotationMode = AnnotationMode.ENABLE, + printAnnotationStorage = null, + isEditing = false + } = {}) { + 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({ + includeMarkedContent = false, + disableNormalization = false + } = {}) { + 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(params = {}) { + 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 ({ + value, + done + }) { + 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(); + this.#pendingCleanup = false; + return Promise.all(waitOn); + } + cleanup(resetStats = false) { + this.#pendingCleanup = true; + const success = this.#tryCleanup(); + if (resetStats && success) { + this._stats &&= new StatTimer(); + } + return success; + } + #tryCleanup() { + if (!this.#pendingCleanup || 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(); + this.#pendingCleanup = false; + return true; + } + _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) { + this.#tryCleanup(); + } + } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageSerializable, + modifiedIds + }) { + 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(({ + value, + done + }) => { + 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(); + } + this.#tryCleanup(); + } + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + pump(); + } + _abortOperatorList({ + intentState, + reason, + force = false + }) { + 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; + } +} +class LoopbackPort { + #listeners = new Map(); + #deferred = Promise.resolve(); + postMessage(obj, transfer) { + const event = { + data: structuredClone(obj, transfer ? { + transfer + } : null) + }; + this.#deferred.then(() => { + for (const [listener] of this.#listeners) { + listener.call(this, event); + } + }); + } + addEventListener(name, listener, options = 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); + } + this.#listeners.set(listener, rmAbort); + } + removeEventListener(name, listener) { + const rmAbort = this.#listeners.get(listener); + rmAbort?.(); + this.#listeners.delete(listener); + } + terminate() { + for (const [, rmAbort] of this.#listeners) { + rmAbort?.(); + } + this.#listeners.clear(); + } +} +class PDFWorker { + static #fakeWorkerId = 0; + static #isWorkerDisabled = false; + static #workerPorts; + static { + if (isNodeJS) { + this.#isWorkerDisabled = true; + GlobalWorkerOptions.workerSrc ||= "./pdf.worker.mjs"; + } + this._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; + }; + this._createCDNWrapper = url => { + const wrapper = `await import("${url}");`; + return URL.createObjectURL(new Blob([wrapper], { + type: "text/javascript" + })); + }; + } + constructor({ + name = null, + port = null, + verbosity = getVerbosityLevel() + } = {}) { + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + this._readyCapability = Promise.withResolvers(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + if (PDFWorker.#workerPorts?.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + } + (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); + this._initializeFromPort(port); + return; + } + this._initialize(); + } + get promise() { + return this._readyCapability.promise; + } + #resolve() { + this._readyCapability.resolve(); + this._messageHandler.send("configure", { + verbosity: this.verbosity + }); + } + get port() { + return this._port; + } + get messageHandler() { + return this._messageHandler; + } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new MessageHandler("main", "worker", port); + this._messageHandler.on("ready", function () {}); + this.#resolve(); + } + _initialize() { + if (PDFWorker.#isWorkerDisabled || PDFWorker.#mainThreadWorkerMessageHandler) { + this._setupFakeWorker(); + return; + } + let { + workerSrc + } = PDFWorker; + try { + if (!PDFWorker._isSameOrigin(window.location, workerSrc)) { + workerSrc = PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc, { + type: "module" + }); + const messageHandler = new MessageHandler("main", "worker", worker); + const terminateEarly = () => { + ac.abort(); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); + } + }; + const ac = new AbortController(); + worker.addEventListener("error", () => { + if (!this._webWorker) { + terminateEarly(); + } + }, { + signal: ac.signal + }); + messageHandler.on("test", data => { + ac.abort(); + if (this.destroyed || !data) { + terminateEarly(); + return; + } + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + this.#resolve(); + }); + messageHandler.on("ready", data => { + ac.abort(); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch { + info("The worker has been disabled."); + } + this._setupFakeWorker(); + } + _setupFakeWorker() { + if (!PDFWorker.#isWorkerDisabled) { + warn("Setting up fake worker."); + PDFWorker.#isWorkerDisabled = true; + } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this._port = port; + const id = `fake${PDFWorker.#fakeWorkerId++}`; + const workerHandler = new MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + this._messageHandler = new MessageHandler(id, id + "_worker", port); + this.#resolve(); + }).catch(reason => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + this.destroyed = true; + this._webWorker?.terminate(); + this._webWorker = null; + PDFWorker.#workerPorts?.delete(this._port); + this._port = null; + this._messageHandler?.destroy(); + this._messageHandler = null; + } + static fromPort(params) { + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + const cachedPort = this.#workerPorts?.get(params.port); + if (cachedPort) { + if (cachedPort._pendingDestroy) { + throw new Error("PDFWorker.fromPort - 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 #mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch { + return null; + } + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + if (this.#mainThreadWorkerMessageHandler) { + return this.#mainThreadWorkerMessageHandler; + } + const worker = await import( + /*webpackIgnore: true*/ + /*@vite-ignore*/ + this.workerSrc); + return worker.WorkerMessageHandler; + }; + return shadow(this, "_setupFakeWorkerGlobal", loader()); + } +} +class WorkerTransport { + #methodPromises = new Map(); + #pageCache = new Map(); + #pagePromises = new Map(); + #pageRefCache = new Map(); + #passwordCapability = null; + constructor(messageHandler, loadingTask, networkStream, params, factory) { + 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(); + } + #cacheSimpleMethod(name, data = null) { + const cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + this.#methodPromises.set(name, promise); + return promise; + } + get annotationStorage() { + return shadow(this, "annotationStorage", new AnnotationStorage()); + } + getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = 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(); + this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); + const waitOn = []; + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); + } + this.#pageCache.clear(); + this.#pagePromises.clear(); + this.#pageRefCache.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(); + this.#methodPromises.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 ({ + value, + done + }) { + 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 ({ + value, + done + }) { + 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", ({ + pdfInfo + }) => { + 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 => { + this.#passwordCapability = Promise.withResolvers(); + try { + if (!loadingTask.onPassword) { + throw wrapReason(ex); + } + const updatePassword = password => { + if (password instanceof Error) { + this.#passwordCapability.reject(password); + } else { + this.#passwordCapability.resolve({ + password + }); + } + }; + loadingTask.onPassword(updatePassword, ex.code); + } catch (err) { + this.#passwordCapability.reject(err); + } + return this.#passwordCapability.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 = this.#pageCache.get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + 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 this.#pageCache.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", ([id, pageIndex, type, imageData]) => { + if (this.destroyed) { + return; + } + const pageProxy = this.#pageCache.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() { + 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 + }, 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 = this.#pagePromises.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) { + this.#pageRefCache.set(pageInfo.refStr, pageNumber); + } + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); + return page; + }); + this.#pagePromises.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 this.#cacheSimpleMethod("GetFieldObjects"); + } + hasJSActions() { + return this.#cacheSimpleMethod("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 this.#cacheSimpleMethod("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 this.#cacheSimpleMethod("GetOptionalContentConfig").then(data => new OptionalContentConfig(data, renderingIntent)); + } + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); + } + getMetadata() { + const name = "GetMetadata", + cachedPromise = this.#methodPromises.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 + })); + this.#methodPromises.set(name, promise); + return promise; + } + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + async startCleanup(keepLoadedFonts = false) { + if (this.destroyed) { + return; + } + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of this.#pageCache.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(); + } + this.#methodPromises.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 this.#pageRefCache.get(refStr) ?? null; + } +} +const INITIAL_DATA = Symbol("INITIAL_DATA"); +class PDFObjects { + #objs = Object.create(null); + #ensureObj(objId) { + return this.#objs[objId] ||= { + ...Promise.withResolvers(), + data: INITIAL_DATA + }; + } + get(objId, callback = null) { + if (callback) { + const obj = this.#ensureObj(objId); + obj.promise.then(() => callback(obj.data)); + return null; + } + const obj = this.#objs[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 = this.#objs[objId]; + return !!obj && obj.data !== INITIAL_DATA; + } + delete(objId) { + const obj = this.#objs[objId]; + if (!obj || obj.data === INITIAL_DATA) { + return false; + } + delete this.#objs[objId]; + return true; + } + resolve(objId, data = null) { + const obj = this.#ensureObj(objId); + obj.data = data; + obj.resolve(); + } + clear() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + data?.bitmap?.close(); + } + this.#objs = Object.create(null); + } + *[Symbol.iterator]() { + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + if (data === INITIAL_DATA) { + continue; + } + yield [objId, data]; + } + } +} +class RenderTask { + #internalRenderTask = null; + onContinue = null; + onError = null; + constructor(internalRenderTask) { + this.#internalRenderTask = internalRenderTask; + } + get promise() { + return this.#internalRenderTask.capability.promise; + } + cancel(extraDelay = 0) { + this.#internalRenderTask.cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = this.#internalRenderTask.operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = this.#internalRenderTask; + return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; + } +} +class InternalRenderTask { + #rAF = null; + static #canvasInUse = new WeakSet(); + constructor({ + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + filterFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = 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({ + transparency = false, + optionalContentConfig + }) { + if (this.cancelled) { + return; + } + if (this._canvas) { + if (InternalRenderTask.#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."); + } + InternalRenderTask.#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(error = null, extraDelay = 0) { + this.running = false; + this.cancelled = true; + this.gfx?.endDrawing(); + if (this.#rAF) { + window.cancelAnimationFrame(this.#rAF); + this.#rAF = null; + } + InternalRenderTask.#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) { + this.#rAF = window.requestAnimationFrame(() => { + this.#rAF = 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(); + InternalRenderTask.#canvasInUse.delete(this._canvas); + this.callback(); + } + } + } +} +const version = "5.2.133"; +const build = "4f7761353"; + +;// ./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([c, y, m, k]) { + return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; + } + static G_CMYK([g]) { + return ["CMYK", 0, 0, 0, 1 - g]; + } + static G_RGB([g]) { + return ["RGB", g, g, g]; + } + static G_rgb([g]) { + g = scaleAndClamp(g); + return [g, g, g]; + } + static G_HTML([g]) { + const G = makeColorComp(g); + return `#${G}${G}${G}`; + } + static RGB_G([r, g, b]) { + 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([c, y, m, k]) { + return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; + } + static CMYK_rgb([c, y, m, k]) { + 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([r, g, b]) { + 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, skipDimensions = 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 storedData = storage.getValue(id, { + value: null + }); + switch (element.name) { + case "textarea": + if (storedData.value !== null) { + html.textContent = storedData.value; + } + if (intent === "print") { + break; + } + html.addEventListener("input", event => { + 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 if (storedData.value === element.attributes.xfaOff) { + html.removeAttribute("checked"); + } + if (intent === "print") { + break; + } + html.addEventListener("change", event => { + 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 => { + 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; + storage.setValue(id, { + value + }); + }); + break; + } + } + static setAttributes({ + html, + element, + storage = null, + intent, + linkService + }) { + 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 + + + + + + +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); + } + } +} +class AnnotationElement { + #updates = null; + #hasBorder = false; + #popupElement = null; + constructor(parameters, { + isRenderable = false, + ignoreBorder = false, + createQuadrilaterals = false + } = {}) { + 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({ + titleObj, + contentsObj, + richText + }) { + 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; + } + this.#updates ||= { + rect: this.data.rect.slice(0) + }; + const { + rect + } = params; + if (rect) { + this.#setRectEdited(rect); + } + this.#popupElement?.popup.updateEdited(params); + } + resetEdited() { + if (!this.#updates) { + return; + } + this.#setRectEdited(this.#updates.rect); + this.#popupElement?.popup.resetEdited(); + this.#updates = null; + } + #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); + } + } + _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) { + this.#hasBorder = 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, container = 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 (this.#hasBorder) { + const { + borderColor, + borderWidth + } = style; + style.borderWidth = 0; + svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; + 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(``); + } + if (this.#hasBorder) { + svgBuffer.push(`')`); + style.backgroundImage = svgBuffer.join(""); + } + this.container.append(svg); + this.container.style.clipPath = `url(#${id})`; + } + _createPopup() { + const { + data + } = this; + const popup = this.#popupElement = 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, skipId = 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]; + } +} +class LinkAnnotationElement extends AnnotationElement { + constructor(parameters, options = null) { + super(parameters, { + isRenderable: true, + ignoreBorder: !!options?.ignoreBorder, + createQuadrilaterals: true + }); + 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) { + this.#bindAttachment(link, data.attachment, data.attachmentDest); + isBound = true; + } else if (data.setOCGState) { + this.#bindSetOCGState(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; + } + #setInternalLink() { + this.container.setAttribute("data-internal-link", ""); + } + _bindLink(link, destination) { + link.href = this.linkService.getDestinationHash(destination); + link.onclick = () => { + if (destination) { + this.linkService.goToDestination(destination); + } + return false; + }; + if (destination || destination === "") { + this.#setInternalLink(); + } + } + _bindNamedAction(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeNamedAction(action); + return false; + }; + this.#setInternalLink(); + } + #bindAttachment(link, attachment, dest = 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; + }; + this.#setInternalLink(); + } + #bindSetOCGState(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeSetOCGState(action); + return false; + }; + this.#setInternalLink(); + } + _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; + } + this.#setInternalLink(); + } + _bindResetFormAction(link, resetForm) { + const otherClickAction = link.onclick; + if (!otherClickAction) { + link.href = this.linkService.getAnchorUrl(""); + } + this.#setInternalLink(); + 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 + }); + break; + } + case "checkbox": + case "radiobutton": + { + const value = field.defaultValue === field.exportValues; + storage.setValue(id, { + value + }); + break; + } + case "combobox": + case "listbox": + { + const value = field.defaultValue || ""; + storage.setValue(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; + }; + } +} +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 || !event.relatedTarget) { + 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 storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + 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 + }); + 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; + }; + 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() + }); + 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 + }); + }, + 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 + }); + 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 || !event.relatedTarget) { + 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; + let value = storage.getValue(id, { + value: data.exportValue === data.fieldValue + }).value; + if (typeof value === "string") { + value = value !== "Off"; + 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 + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue || "Off"; + event.target.checked = defaultValue === data.exportValue; + }); + 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 + }); + } + }; + 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; + let value = storage.getValue(id, { + value: data.fieldValue === data.buttonValue + }).value; + if (typeof value === "string") { + value = value !== data.buttonValue; + storage.setValue(id, { + value + }); + } + 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 + }); + } + storage.setValue(id, { + value: checked + }); + }); + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue; + event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; + }); + 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 + }); + } + } + }; + 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 storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + 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 + })); + }; + 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); + }, + 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); + }, + 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); + }, + 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); + }, + 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); + }, + 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 + }); + 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) + }); + }); + } + 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; + } +} +class PopupElement { + #boundKeyDown = this.#keyDown.bind(this); + #boundHide = this.#hide.bind(this); + #boundShow = this.#show.bind(this); + #boundToggle = this.#toggle.bind(this); + #color = null; + #container = null; + #contentsObj = null; + #dateObj = null; + #elements = null; + #parent = null; + #parentRect = null; + #pinned = false; + #popup = null; + #position = null; + #rect = null; + #richText = null; + #titleObj = null; + #updates = null; + #wasVisible = false; + constructor({ + container, + color, + elements, + titleObj, + modificationDate, + contentsObj, + richText, + parent, + rect, + parentRect, + open + }) { + this.#container = container; + this.#titleObj = titleObj; + this.#contentsObj = contentsObj; + this.#richText = richText; + this.#parent = parent; + this.#color = color; + this.#rect = rect; + this.#parentRect = parentRect; + this.#elements = elements; + this.#dateObj = PDFDateString.toDateObject(modificationDate); + this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); + for (const element of this.trigger) { + element.addEventListener("click", this.#boundToggle); + element.addEventListener("mouseenter", this.#boundShow); + element.addEventListener("mouseleave", this.#boundHide); + element.classList.add("popupTriggerArea"); + } + for (const element of elements) { + element.container?.addEventListener("keydown", this.#boundKeyDown); + } + this.#container.hidden = true; + if (open) { + this.#toggle(); + } + } + render() { + if (this.#popup) { + return; + } + const popup = this.#popup = document.createElement("div"); + popup.className = "popup"; + if (this.#color) { + const baseColor = popup.style.outlineColor = Util.makeHexColor(...this.#color); + 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 + } = this.#titleObj); + popup.append(header); + if (this.#dateObj) { + 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: this.#dateObj.valueOf() + })); + header.append(modificationDate); + } + const html = this.#html; + if (html) { + XfaLayer.render({ + xfaHtml: html, + intent: "richText", + div: popup + }); + popup.lastChild.classList.add("richText", "popupContent"); + } else { + const contents = this._formatContents(this.#contentsObj); + popup.append(contents); + } + this.#container.append(popup); + } + get #html() { + const richText = this.#richText; + const contentsObj = this.#contentsObj; + if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { + return this.#richText.html || null; + } + return null; + } + get #fontSize() { + return this.#html?.attributes?.style?.fontSize || 0; + } + get #fontColor() { + return this.#html?.attributes?.style?.color || null; + } + #makePopupContent(text) { + const popupLines = []; + const popupContent = { + str: text, + html: { + name: "div", + attributes: { + dir: "auto" + }, + children: [{ + name: "p", + children: popupLines + }] + } + }; + const lineAttributes = { + style: { + color: this.#fontColor, + fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--total-scale-factor))` : "" + } + }; + for (const line of text.split("\n")) { + popupLines.push({ + name: "span", + value: line, + attributes: lineAttributes + }); + } + return popupContent; + } + _formatContents({ + str, + dir + }) { + 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; + } + #keyDown(event) { + if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { + return; + } + if (event.key === "Enter" || event.key === "Escape" && this.#pinned) { + this.#toggle(); + } + } + updateEdited({ + rect, + popupContent + }) { + this.#updates ||= { + contentsObj: this.#contentsObj, + richText: this.#richText + }; + if (rect) { + this.#position = null; + } + if (popupContent) { + this.#richText = this.#makePopupContent(popupContent); + this.#contentsObj = null; + } + this.#popup?.remove(); + this.#popup = null; + } + resetEdited() { + if (!this.#updates) { + return; + } + ({ + contentsObj: this.#contentsObj, + richText: this.#richText + } = this.#updates); + this.#updates = null; + this.#popup?.remove(); + this.#popup = null; + this.#position = null; + } + #setPosition() { + if (this.#position !== null) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.#parent; + let useParentRect = !!this.#parentRect; + let rect = useParentRect ? this.#parentRect : this.#rect; + for (const element of this.#elements) { + 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]; + this.#position = [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]; + const { + style + } = this.#container; + style.left = `${this.#position[0]}%`; + style.top = `${this.#position[1]}%`; + } + #toggle() { + this.#pinned = !this.#pinned; + if (this.#pinned) { + this.#show(); + this.#container.addEventListener("click", this.#boundToggle); + this.#container.addEventListener("keydown", this.#boundKeyDown); + } else { + this.#hide(); + this.#container.removeEventListener("click", this.#boundToggle); + this.#container.removeEventListener("keydown", this.#boundKeyDown); + } + } + #show() { + if (!this.#popup) { + this.render(); + } + if (!this.isVisible) { + this.#setPosition(); + this.#container.hidden = false; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; + } else if (this.#pinned) { + this.#container.classList.add("focused"); + } + } + #hide() { + this.#container.classList.remove("focused"); + if (this.#pinned || !this.isVisible) { + return; + } + this.#container.hidden = true; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; + } + forceHide() { + this.#wasVisible = this.isVisible; + if (!this.#wasVisible) { + return; + } + this.#container.hidden = true; + } + maybeShow() { + if (!this.#wasVisible) { + return; + } + if (!this.#popup) { + this.#show(); + } + this.#wasVisible = false; + this.#container.hidden = false; + } + get isVisible() { + return this.#container.hidden === false; + } +} +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; + } +} +class LineAnnotationElement extends AnnotationElement { + #line = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("lineAnnotation"); + const { + data, + width, + height + } = this; + const svg = this.svgFactory.create(width, height, true); + const line = this.#line = 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 this.#line; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class SquareAnnotationElement extends AnnotationElement { + #square = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + 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 = this.#square = 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 this.#square; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class CircleAnnotationElement extends AnnotationElement { + #circle = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + 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 = this.#circle = 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 this.#circle; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +class PolylineAnnotationElement extends AnnotationElement { + #polyline = null; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + 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 = this.#polyline = 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 this.#polyline; + } + 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; + } +} +class InkAnnotationElement extends AnnotationElement { + #polylinesGroupElement = null; + #polylines = []; + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.containerClassName = "inkAnnotation"; + this.svgElementName = "svg:polyline"; + this.annotationEditorType = this.data.it === "InkHighlight" ? AnnotationEditorType.HIGHLIGHT : AnnotationEditorType.INK; + } + #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] + }; + } + } + render() { + this.container.classList.add(this.containerClassName); + const { + data: { + rect, + rotation, + inkLists, + borderStyle, + popupRef + } + } = this; + const { + transform, + width, + height + } = this.#getTransform(rotation, rect); + const svg = this.svgFactory.create(width, height, true); + const g = this.#polylinesGroupElement = 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); + this.#polylines.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 = this.#polylinesGroupElement; + if (thickness >= 0) { + g.setAttribute("stroke-width", thickness || 1); + } + if (points) { + for (let i = 0, ii = this.#polylines.length; i < ii; i++) { + this.#polylines[i].setAttribute("points", points[i].join(",")); + } + } + if (rect) { + const { + transform, + width, + height + } = this.#getTransform(this.data.rotation, rect); + const root = g.parentElement; + root.setAttribute("viewBox", `0 0 ${width} ${height}`); + g.setAttribute("transform", transform); + } + } + getElementsToTriggerPopup() { + return this.#polylines; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +} +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; + } +} +class FileAttachmentAnnotationElement extends AnnotationElement { + #trigger = null; + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + 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", this.#download.bind(this)); + this.#trigger = trigger; + const { + isMac + } = util_FeatureTest.platform; + container.addEventListener("keydown", evt => { + if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { + this.#download(); + } + }); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } else { + trigger.classList.add("popupTriggerArea"); + } + container.append(trigger); + return container; + } + getElementsToTriggerPopup() { + return this.#trigger; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } + #download() { + this.downloadManager?.openOrDownloadData(this.content, this.filename); + } +} +class AnnotationLayer { + #accessibilityManager = null; + #annotationCanvasMap = null; + #editableAnnotations = new Map(); + #structTreeLayer = null; + constructor({ + div, + accessibilityManager, + annotationCanvasMap, + annotationEditorUIManager, + page, + viewport, + structTreeLayer + }) { + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationCanvasMap = annotationCanvasMap; + this.#structTreeLayer = structTreeLayer || null; + this.page = page; + this.viewport = viewport; + this.zIndex = 0; + this._annotationEditorUIManager = annotationEditorUIManager; + } + hasEditableAnnotations() { + return this.#editableAnnotations.size > 0; + } + async #appendElement(element, id) { + const contentElement = element.firstChild || element; + const annotationId = contentElement.id = `${AnnotationPrefix}${id}`; + const ariaAttributes = await this.#structTreeLayer?.getAriaAttributes(annotationId); + if (ariaAttributes) { + for (const [key, value] of ariaAttributes) { + contentElement.setAttribute(key, value); + } + } + this.div.append(element); + this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); + } + 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 this.#appendElement(rendered, data.id); + if (element._isEditable) { + this.#editableAnnotations.set(element.data.id, element); + this._annotationEditorUIManager?.renderAnnotationElement(element); + } + } + this.#setAnnotationCanvasMap(); + } + 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 this.#appendElement(rendered, data.id); + } + } + update({ + viewport + }) { + const layer = this.div; + this.viewport = viewport; + setLayerDimensions(layer, { + rotation: viewport.rotation + }); + this.#setAnnotationCanvasMap(); + layer.hidden = false; + } + #setAnnotationCanvasMap() { + if (!this.#annotationCanvasMap) { + return; + } + const layer = this.div; + for (const [id, canvas] of this.#annotationCanvasMap) { + 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 = this.#editableAnnotations.get(id); + if (!editableAnnotation) { + continue; + } + if (editableAnnotation._hasNoCanvas) { + this._annotationEditorUIManager?.setMissingCanvas(id, element.id, canvas); + editableAnnotation._hasNoCanvas = false; + } else { + editableAnnotation.canvas = canvas; + } + } + this.#annotationCanvasMap.clear(); + } + getEditableAnnotations() { + return Array.from(this.#editableAnnotations.values()); + } + getEditableAnnotation(id) { + return this.#editableAnnotations.get(id); + } + static get _defaultBorderStyle() { + return shadow(this, "_defaultBorderStyle", Object.freeze({ + width: 1, + rawWidth: 1, + style: AnnotationBorderStyleType.SOLID, + dashArray: [3], + horizontalCornerRadius: 0, + verticalCornerRadius: 0 + })); + } +} + +;// ./src/display/editor/freetext.js + + + + +const EOL_PATTERN = /\r\n?|\n/g; +class FreeTextEditor extends AnnotationEditor { + #color; + #content = ""; + #editorDivId = `${this.id}-editor`; + #editModeAC = null; + #fontSize; + static _freeTextDefaultContent = ""; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + 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 + }]])); + } + static _type = "freetext"; + static _editorType = AnnotationEditorType.FREETEXT; + constructor(params) { + super({ + ...params, + name: "freeTextEditor" + }); + this.#color = params.color || FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor; + this.#fontSize = 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: + this.#updateFontSize(value); + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; + } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--total-scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parentScale); + this.#fontSize = size; + this.#setEditorDimensions(); + }; + const savedFontsize = this.#fontSize; + 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 + }); + } + #updateColor(color) { + const setColor = col => { + this.#color = this.editorDiv.style.color = col; + }; + const savedColor = this.#color; + 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 + }); + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + enableEditMode() { + if (this.isInEditMode()) { + return; + } + this.parent.setEditingState(false); + this.parent.updateToolbar(AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this._isDraggable = false; + this.div.removeAttribute("aria-activedescendant"); + this.#editModeAC = new AbortController(); + const signal = this._uiManager.combinedSignal(this.#editModeAC); + 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 + }); + } + disableEditMode() { + if (!this.isInEditMode()) { + return; + } + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", this.#editorDivId); + this._isDraggable = true; + this.#editModeAC?.abort(); + this.#editModeAC = null; + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freetextEditing"); + } + 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(); + } + #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(FreeTextEditor.#getNodeContent(child)); + prevChild = child; + } + return buffer.join("\n"); + } + #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(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = this.#content; + const newText = this.#content = this.#extractText().trimEnd(); + if (savedText === newText) { + return; + } + const setText = text => { + this.#content = text; + if (!text) { + this.remove(); + return; + } + this.#setContent(); + this._uiManager.rebuild(this); + this.#setEditorDimensions(); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + this.#setEditorDimensions(); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + dblclick(event) { + this.enterInEditMode(); + } + 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); + } + 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", this.#editorDivId); + 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(${this.#fontSize}px * var(--total-scale-factor))`; + style.color = this.#color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + bindEvents(this, this.div, ["dblclick", "keydown"]); + 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); + } + this.#setContent(); + this._isDraggable = true; + this.editorDiv.contentEditable = false; + } else { + this._isDraggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + static #getNodeContent(node) { + return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, ""); + } + editorDivPaste(event) { + const clipboardData = event.clipboardData || window.clipboardData; + const { + types + } = clipboardData; + if (types.length === 1 && types[0] === "text/plain") { + return; + } + event.preventDefault(); + const paste = FreeTextEditor.#deserializeContent(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(FreeTextEditor.#getNodeContent(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(FreeTextEditor.#getNodeContent(child)); + } + } + this.#content = `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`; + this.#setContent(); + 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); + } + #setContent() { + this.editorDiv.replaceChildren(); + if (!this.#content) { + return; + } + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } + } + #serializeContent() { + return this.#content.replaceAll("\xa0", " "); + } + static #deserializeContent(content) { + return content.replaceAll(" ", "\xa0"); + } + 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); + editor.#fontSize = data.fontSize; + editor.#color = Util.makeHexColor(...data.color); + editor.#content = FreeTextEditor.#deserializeContent(data.value); + editor.annotationElementId = data.id || null; + editor._initialData = initialData; + return editor; + } + serialize(isForCopying = 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 : this.#color); + const serialized = { + annotationType: AnnotationEditorType.FREETEXT, + color, + fontSize: this.#fontSize, + value: this.#serializeContent(), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + serialized.isCopy = true; + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #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; + } + renderAnnotationElement(annotation) { + const content = super.renderAnnotationElement(annotation); + if (this.deleted) { + return content; + } + const { + style + } = content; + style.fontSize = `calc(${this.#fontSize}px * var(--total-scale-factor))`; + style.color = this.#color; + content.replaceChildren(); + for (const line of this.#content.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: this.#content + }); + return content; + } + resetAnnotationElement(annotation) { + super.resetAnnotationElement(annotation); + annotation.resetEdited(); + } +} + +;// ./src/display/editor/drawers/outline.js + +class Outline { + static PRECISION = 1e-4; + 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]; + } +} + +;// ./src/display/editor/drawers/freedraw.js + + +class FreeDrawOutliner { + #box; + #bottom = []; + #innerMargin; + #isLTR; + #top = []; + #last = new Float32Array(18); + #lastX; + #lastY; + #min; + #min_dist; + #scaleFactor; + #thickness; + #points = []; + static #MIN_DIST = 8; + static #MIN_DIFF = 2; + static #MIN = FreeDrawOutliner.#MIN_DIST + FreeDrawOutliner.#MIN_DIFF; + constructor({ + x, + y + }, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + this.#box = box; + this.#thickness = thickness * scaleFactor; + this.#isLTR = isLTR; + this.#last.set([NaN, NaN, NaN, NaN, x, y], 6); + this.#innerMargin = innerMargin; + this.#min_dist = FreeDrawOutliner.#MIN_DIST * scaleFactor; + this.#min = FreeDrawOutliner.#MIN * scaleFactor; + this.#scaleFactor = scaleFactor; + this.#points.push(x, y); + } + isEmpty() { + return isNaN(this.#last[8]); + } + #getLastCoords() { + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [x, y, width, height] = this.#box; + return [(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height]; + } + add({ + x, + y + }) { + this.#lastX = x; + this.#lastY = y; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + let [x1, y1, x2, y2] = this.#last.subarray(8, 12); + const diffX = x - x2; + const diffY = y - y2; + const d = Math.hypot(diffX, diffY); + if (d < this.#min) { + return false; + } + const diffD = d - this.#min_dist; + 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; + this.#points?.push(x, y); + const nX = -shiftY / diffD; + const nY = shiftX / diffD; + const thX = nX * this.#thickness; + const thY = nY * this.#thickness; + this.#last.set(this.#last.subarray(2, 8), 0); + this.#last.set([x2 + thX, y2 + thY], 4); + this.#last.set(this.#last.subarray(14, 18), 12); + this.#last.set([x2 - thX, y2 - thY], 16); + if (isNaN(this.#last[6])) { + if (this.#top.length === 0) { + this.#last.set([x1 + thX, y1 + thY], 2); + this.#top.push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight); + this.#last.set([x1 - thX, y1 - thY], 14); + this.#bottom.push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight); + } + this.#last.set([x0, y0, x1, y1, x2, y2], 6); + return !this.isEmpty(); + } + this.#last.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] = this.#last.subarray(2, 6); + this.#top.push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x1, y1, x0, y0] = this.#last.subarray(14, 18); + this.#bottom.push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight); + return true; + } + [x0, y0, x1, y1, x2, y2] = this.#last.subarray(0, 6); + this.#top.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] = this.#last.subarray(12, 18); + this.#bottom.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 = this.#top; + const bottom = this.#bottom; + if (isNaN(this.#last[6]) && !this.isEmpty()) { + return this.#toSVGPathTwoPoints(); + } + 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]}`); + } + } + this.#toSVGPathEnd(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]}`); + } + } + this.#toSVGPathStart(buffer); + return buffer.join(" "); + } + #toSVGPathTwoPoints() { + const [x, y, width, height] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + return `M${(this.#last[2] - x) / width} ${(this.#last[3] - y) / height} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(this.#last[16] - x) / width} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${(this.#last[15] - y) / height} Z`; + } + #toSVGPathStart(buffer) { + const bottom = this.#bottom; + buffer.push(`L${bottom[4]} ${bottom[5]} Z`); + } + #toSVGPathEnd(buffer) { + const [x, y, width, height] = this.#box; + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + 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}`); + } + newFreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR) { + return new FreeDrawOutline(outline, points, box, scaleFactor, innerMargin, isLTR); + } + getOutlines() { + const top = this.#top; + const bottom = this.#bottom; + const last = this.#last; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const points = new Float32Array((this.#points?.length ?? 0) + 2); + for (let i = 0, ii = points.length - 2; i < ii; i += 2) { + points[i] = (this.#points[i] - layerX) / layerWidth; + points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight; + } + points[points.length - 2] = (this.#lastX - layerX) / layerWidth; + points[points.length - 1] = (this.#lastY - layerY) / layerHeight; + if (isNaN(last[6]) && !this.isEmpty()) { + return this.#getOutlineTwoPoints(points); + } + const outline = new Float32Array(this.#top.length + 24 + this.#bottom.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 = this.#getOutlineEnd(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; + } + } + this.#getOutlineStart(outline, N); + return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR); + } + #getOutlineTwoPoints(points) { + const last = this.#last; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + 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, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR); + } + #getOutlineStart(outline, pos) { + const bottom = this.#bottom; + outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], pos); + return pos += 6; + } + #getOutlineEnd(outline, pos) { + const lastTop = this.#last.subarray(4, 6); + const lastBottom = this.#last.subarray(16, 18); + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = this.#getLastCoords(); + 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; + } +} +class FreeDrawOutline extends Outline { + #box; + #bbox = new Float32Array(4); + #innerMargin; + #isLTR; + #points; + #scaleFactor; + #outline; + constructor(outline, points, box, scaleFactor, innerMargin, isLTR) { + super(); + this.#outline = outline; + this.#points = points; + this.#box = box; + this.#scaleFactor = scaleFactor; + this.#innerMargin = innerMargin; + this.#isLTR = isLTR; + this.lastPoint = [NaN, NaN]; + this.#computeMinMax(isLTR); + const [x, y, width, height] = this.#bbox; + for (let i = 0, ii = outline.length; i < ii; i += 2) { + outline[i] = (outline[i] - x) / width; + outline[i + 1] = (outline[i + 1] - y) / height; + } + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = (points[i] - x) / width; + points[i + 1] = (points[i + 1] - y) / height; + } + } + toSVGPath() { + const buffer = [`M${this.#outline[4]} ${this.#outline[5]}`]; + for (let i = 6, ii = this.#outline.length; i < ii; i += 6) { + if (isNaN(this.#outline[i])) { + buffer.push(`L${this.#outline[i + 4]} ${this.#outline[i + 5]}`); + continue; + } + buffer.push(`C${this.#outline[i]} ${this.#outline[i + 1]} ${this.#outline[i + 2]} ${this.#outline[i + 3]} ${this.#outline[i + 4]} ${this.#outline[i + 5]}`); + } + buffer.push("Z"); + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], rotation) { + const width = trX - blX; + const height = trY - blY; + let outline; + let points; + switch (rotation) { + case 0: + outline = Outline._rescale(this.#outline, blX, trY, width, -height); + points = Outline._rescale(this.#points, blX, trY, width, -height); + break; + case 90: + outline = Outline._rescaleAndSwap(this.#outline, blX, blY, width, height); + points = Outline._rescaleAndSwap(this.#points, blX, blY, width, height); + break; + case 180: + outline = Outline._rescale(this.#outline, trX, blY, -width, height); + points = Outline._rescale(this.#points, trX, blY, -width, height); + break; + case 270: + outline = Outline._rescaleAndSwap(this.#outline, trX, trY, -width, -height); + points = Outline._rescaleAndSwap(this.#points, trX, trY, -width, -height); + break; + } + return { + outline: Array.from(outline), + points: [Array.from(points)] + }; + } + #computeMinMax(isLTR) { + const outline = this.#outline; + 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 = this.#bbox; + bbox[0] = minMax[0] - this.#innerMargin; + bbox[1] = minMax[1] - this.#innerMargin; + bbox[2] = minMax[2] - minMax[0] + 2 * this.#innerMargin; + bbox[3] = minMax[3] - minMax[1] + 2 * this.#innerMargin; + this.lastPoint = [lastPointX, lastPointY]; + } + get box() { + return this.#bbox; + } + newOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + return new FreeDrawOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin); + } + getNewOutline(thickness, innerMargin) { + const [x, y, width, height] = this.#bbox; + const [layerX, layerY, layerWidth, layerHeight] = this.#box; + const sx = width * layerWidth; + const sy = height * layerHeight; + const tx = x * layerWidth + layerX; + const ty = y * layerHeight + layerY; + const outliner = this.newOutliner({ + x: this.#points[0] * sx + tx, + y: this.#points[1] * sy + ty + }, this.#box, this.#scaleFactor, thickness, this.#isLTR, innerMargin ?? this.#innerMargin); + for (let i = 2; i < this.#points.length; i += 2) { + outliner.add({ + x: this.#points[i] * sx + tx, + y: this.#points[i + 1] * sy + ty + }); + } + return outliner.getOutlines(); + } +} + +;// ./src/display/editor/drawers/highlight.js + + + +class HighlightOutliner { + #box; + #lastPoint; + #verticalEdges = []; + #intervals = []; + constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { + 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]; + this.#verticalEdges.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 = this.#verticalEdges.at(isLTR ? -1 : -2); + const lastPoint = [lastEdge[0], lastEdge[2]]; + for (const edge of this.#verticalEdges) { + const [x, y1, y2] = edge; + edge[0] = (x - shiftedMinX) / bboxWidth; + edge[1] = (y1 - shiftedMinY) / bboxHeight; + edge[2] = (y2 - shiftedMinY) / bboxHeight; + } + this.#box = new Float32Array([shiftedMinX, shiftedMinY, bboxWidth, bboxHeight]); + this.#lastPoint = lastPoint; + } + getOutlines() { + this.#verticalEdges.sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); + const outlineVerticalEdges = []; + for (const edge of this.#verticalEdges) { + if (edge[3]) { + outlineVerticalEdges.push(...this.#breakEdge(edge)); + this.#insert(edge); + } else { + this.#remove(edge); + outlineVerticalEdges.push(...this.#breakEdge(edge)); + } + } + return this.#getOutlines(outlineVerticalEdges); + } + #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, this.#box, this.#lastPoint); + } + #binarySearch(y) { + const array = this.#intervals; + 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; + } + #insert([, y1, y2]) { + const index = this.#binarySearch(y1); + this.#intervals.splice(index, 0, [y1, y2]); + } + #remove([, y1, y2]) { + const index = this.#binarySearch(y1); + for (let i = index; i < this.#intervals.length; i++) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + for (let i = index - 1; i >= 0; i--) { + const [start, end] = this.#intervals[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + this.#intervals.splice(i, 1); + return; + } + } + } + #breakEdge(edge) { + const [x, y1, y2] = edge; + const results = [[x, y1, y2]]; + const index = this.#binarySearch(y2); + for (let i = 0; i < index; i++) { + const [start, end] = this.#intervals[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; + } +} +class HighlightOutline extends Outline { + #box; + #outlines; + constructor(outlines, box, lastPoint) { + super(); + this.#outlines = outlines; + this.#box = box; + this.lastPoint = lastPoint; + } + toSVGPath() { + const buffer = []; + for (const polygon of this.#outlines) { + 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([blX, blY, trX, trY], _rotation) { + const outlines = []; + const width = trX - blX; + const height = trY - blY; + for (const outline of this.#outlines) { + 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 this.#box; + } + 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, innerMargin = 0) { + return new FreeHighlightOutliner(point, box, scaleFactor, thickness, isLTR, innerMargin); + } +} + +;// ./src/display/editor/color_picker.js + + + +class ColorPicker { + #button = null; + #buttonSwatch = null; + #defaultColor; + #dropdown = null; + #dropdownWasFromKeyboard = false; + #isMainColorPicker = false; + #editor = null; + #eventBus; + #openDropdownAC = null; + #uiManager = null; + #type; + static #l10nColor = null; + 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({ + editor = null, + uiManager = null + }) { + if (editor) { + this.#isMainColorPicker = false; + this.#type = AnnotationEditorParamsType.HIGHLIGHT_COLOR; + this.#editor = editor; + } else { + this.#isMainColorPicker = true; + this.#type = AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR; + } + this.#uiManager = editor?._uiManager || uiManager; + this.#eventBus = this.#uiManager._eventBus; + this.#defaultColor = editor?.color || this.#uiManager?.highlightColors.values().next().value || "#FFFF98"; + ColorPicker.#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 = this.#button = 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 = this.#uiManager._signal; + button.addEventListener("click", this.#openDropdown.bind(this), { + signal + }); + button.addEventListener("keydown", this.#keyDown.bind(this), { + signal + }); + const swatch = this.#buttonSwatch = document.createElement("span"); + swatch.className = "swatch"; + swatch.setAttribute("aria-hidden", true); + swatch.style.backgroundColor = this.#defaultColor; + button.append(swatch); + return button; + } + renderMainDropdown() { + const dropdown = this.#dropdown = this.#getDropdownRoot(); + dropdown.setAttribute("aria-orientation", "horizontal"); + dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel"); + return dropdown; + } + #getDropdownRoot() { + const div = document.createElement("div"); + const signal = this.#uiManager._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 this.#uiManager.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", ColorPicker.#l10nColor[name]); + const swatch = document.createElement("span"); + button.append(swatch); + swatch.className = "swatch"; + swatch.style.backgroundColor = color; + button.setAttribute("aria-selected", color === this.#defaultColor); + button.addEventListener("click", this.#colorSelect.bind(this, color), { + signal + }); + div.append(button); + } + div.addEventListener("keydown", this.#keyDown.bind(this), { + signal + }); + return div; + } + #colorSelect(color, event) { + event.stopPropagation(); + this.#eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: this.#type, + value: color + }); + } + _colorSelectFromKeyboard(event) { + if (event.target === this.#button) { + this.#openDropdown(event); + return; + } + const color = event.target.getAttribute("data-color"); + if (!color) { + return; + } + this.#colorSelect(color, event); + } + _moveToNext(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + if (event.target === this.#button) { + this.#dropdown.firstChild?.focus(); + return; + } + event.target.nextSibling?.focus(); + } + _moveToPrevious(event) { + if (event.target === this.#dropdown?.firstChild || event.target === this.#button) { + if (this.#isDropdownVisible) { + this._hideDropdownFromKeyboard(); + } + return; + } + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + } + event.target.previousSibling?.focus(); + } + _moveToBeginning(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + this.#dropdown.firstChild?.focus(); + } + _moveToEnd(event) { + if (!this.#isDropdownVisible) { + this.#openDropdown(event); + return; + } + this.#dropdown.lastChild?.focus(); + } + #keyDown(event) { + ColorPicker._keyboardManager.exec(this, event); + } + #openDropdown(event) { + if (this.#isDropdownVisible) { + this.hideDropdown(); + return; + } + this.#dropdownWasFromKeyboard = event.detail === 0; + if (!this.#openDropdownAC) { + this.#openDropdownAC = new AbortController(); + window.addEventListener("pointerdown", this.#pointerDown.bind(this), { + signal: this.#uiManager.combinedSignal(this.#openDropdownAC) + }); + } + if (this.#dropdown) { + this.#dropdown.classList.remove("hidden"); + return; + } + const root = this.#dropdown = this.#getDropdownRoot(); + this.#button.append(root); + } + #pointerDown(event) { + if (this.#dropdown?.contains(event.target)) { + return; + } + this.hideDropdown(); + } + hideDropdown() { + this.#dropdown?.classList.add("hidden"); + this.#openDropdownAC?.abort(); + this.#openDropdownAC = null; + } + get #isDropdownVisible() { + return this.#dropdown && !this.#dropdown.classList.contains("hidden"); + } + _hideDropdownFromKeyboard() { + if (this.#isMainColorPicker) { + return; + } + if (!this.#isDropdownVisible) { + this.#editor?.unselect(); + return; + } + this.hideDropdown(); + this.#button.focus({ + preventScroll: true, + focusVisible: this.#dropdownWasFromKeyboard + }); + } + updateColor(color) { + if (this.#buttonSwatch) { + this.#buttonSwatch.style.backgroundColor = color; + } + if (!this.#dropdown) { + return; + } + const i = this.#uiManager.highlightColors.values(); + for (const child of this.#dropdown.children) { + child.setAttribute("aria-selected", i.next().value === color); + } + } + destroy() { + this.#button?.remove(); + this.#button = null; + this.#buttonSwatch = null; + this.#dropdown?.remove(); + this.#dropdown = null; + } +} + +;// ./src/display/editor/highlight.js + + + + + + + +class HighlightEditor extends AnnotationEditor { + #anchorNode = null; + #anchorOffset = 0; + #boxes; + #clipPathId = null; + #colorPicker = null; + #focusOutlines = null; + #focusNode = null; + #focusOffset = 0; + #highlightDiv = null; + #highlightOutlines = null; + #id = null; + #isFreeHighlight = false; + #lastPoint = null; + #opacity; + #outlineId = null; + #text = ""; + #thickness; + #methodOfCreation = ""; + static _defaultColor = null; + static _defaultOpacity = 1; + static _defaultThickness = 12; + static _type = "highlight"; + static _editorType = AnnotationEditorType.HIGHLIGHT; + static _freeHighlightId = -1; + static _freeHighlight = null; + static _freeHighlightClipId = ""; + 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" + }); + this.color = params.color || HighlightEditor._defaultColor; + this.#thickness = params.thickness || HighlightEditor._defaultThickness; + this.#opacity = params.opacity || HighlightEditor._defaultOpacity; + this.#boxes = params.boxes || null; + this.#methodOfCreation = params.methodOfCreation || ""; + this.#text = params.text || ""; + this._isDraggable = false; + this.defaultL10nId = "pdfjs-editor-highlight-editor"; + if (params.highlightId > -1) { + this.#isFreeHighlight = true; + this.#createFreeOutlines(params); + this.#addToDrawLayer(); + } else if (this.#boxes) { + this.#anchorNode = params.anchorNode; + this.#anchorOffset = params.anchorOffset; + this.#focusNode = params.focusNode; + this.#focusOffset = params.focusOffset; + this.#createOutlines(); + this.#addToDrawLayer(); + this.rotate(this.rotation); + } + } + get telemetryInitialData() { + return { + action: "added", + type: this.#isFreeHighlight ? "free_highlight" : "highlight", + color: this._uiManager.highlightColorNames.get(this.color), + thickness: this.#thickness, + methodOfCreation: this.#methodOfCreation + }; + } + get telemetryFinalData() { + return { + type: "highlight", + color: this._uiManager.highlightColorNames.get(this.color) + }; + } + static computeTelemetryFinalData(data) { + return { + numberOfColors: data.get("color").size + }; + } + #createOutlines() { + const outliner = new HighlightOutliner(this.#boxes, 0.001); + this.#highlightOutlines = outliner.getOutlines(); + [this.x, this.y, this.width, this.height] = this.#highlightOutlines.box; + const outlinerForOutline = new HighlightOutliner(this.#boxes, 0.0025, 0.001, this._uiManager.direction === "ltr"); + this.#focusOutlines = outlinerForOutline.getOutlines(); + const { + lastPoint + } = this.#focusOutlines; + this.#lastPoint = [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]; + } + #createFreeOutlines({ + highlightOutlines, + highlightId, + clipPathId + }) { + this.#highlightOutlines = highlightOutlines; + const extraThickness = 1.5; + this.#focusOutlines = highlightOutlines.getNewOutline(this.#thickness / 2 + extraThickness, 0.0025); + if (highlightId >= 0) { + this.#id = highlightId; + this.#clipPathId = clipPathId; + this.parent.drawLayer.finalizeDraw(highlightId, { + bbox: highlightOutlines.box, + path: { + d: highlightOutlines.toSVGPath() + } + }); + this.#outlineId = this.parent.drawLayer.drawOutline({ + rootClass: { + highlightOutline: true, + free: true + }, + bbox: this.#focusOutlines.box, + path: { + d: this.#focusOutlines.toSVGPath() + } + }, true); + } else if (this.parent) { + const angle = this.parent.viewport.rotation; + this.parent.drawLayer.updateProperties(this.#id, { + bbox: HighlightEditor.#rotateBbox(this.#highlightOutlines.box, (angle - this.rotation + 360) % 360), + path: { + d: highlightOutlines.toSVGPath() + } + }); + this.parent.drawLayer.updateProperties(this.#outlineId, { + bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle), + path: { + d: this.#focusOutlines.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 + } = this.#focusOutlines; + this.#lastPoint = [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]; + } + 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 this.#lastPoint; + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_COLOR: + this.#updateColor(value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + this.#updateThickness(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, this.#thickness || HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, this.#isFreeHighlight]]; + } + #updateColor(color) { + const setColorAndOpacity = (col, opa) => { + this.color = col; + this.#opacity = opa; + this.parent?.drawLayer.updateProperties(this.#id, { + root: { + fill: col, + "fill-opacity": opa + } + }); + this.#colorPicker?.updateColor(col); + }; + const savedColor = this.color; + const savedOpacity = this.#opacity; + 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); + } + #updateThickness(thickness) { + const savedThickness = this.#thickness; + const setThickness = th => { + this.#thickness = th; + this.#changeThickness(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); + } + async addEditToolbar() { + const toolbar = await super.addEditToolbar(); + if (!toolbar) { + return null; + } + if (this._uiManager.highlightColors) { + this.#colorPicker = new ColorPicker({ + editor: this + }); + toolbar.addColorPicker(this.#colorPicker); + } + return toolbar; + } + disableEditing() { + super.disableEditing(); + this.div.classList.toggle("disabled", true); + } + enableEditing() { + super.enableEditing(); + this.div.classList.toggle("disabled", false); + } + fixAndSetPosition() { + return super.fixAndSetPosition(this.#getRotation()); + } + getBaseTranslation() { + return [0, 0]; + } + getRect(tx, ty) { + return super.getRect(tx, ty, this.#getRotation()); + } + onceAdded(focus) { + if (!this.annotationElementId) { + this.parent.addUndoableEditor(this); + } + if (focus) { + this.div.focus(); + } + } + remove() { + this.#cleanDrawLayer(); + this._reportTelemetry({ + action: "deleted" + }); + super.remove(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + this.#addToDrawLayer(); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + let mustBeSelected = false; + if (this.parent && !parent) { + this.#cleanDrawLayer(); + } else if (parent) { + this.#addToDrawLayer(parent); + mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor"); + } + super.setParent(parent); + this.show(this._isVisible); + if (mustBeSelected) { + this.select(); + } + } + #changeThickness(thickness) { + if (!this.#isFreeHighlight) { + return; + } + this.#createFreeOutlines({ + highlightOutlines: this.#highlightOutlines.getNewOutline(thickness / 2) + }); + this.fixAndSetPosition(); + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + } + #cleanDrawLayer() { + if (this.#id === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(this.#id); + this.#id = null; + this.parent.drawLayer.remove(this.#outlineId); + this.#outlineId = null; + } + #addToDrawLayer(parent = this.parent) { + if (this.#id !== null) { + return; + } + ({ + id: this.#id, + clipPathId: this.#clipPathId + } = parent.drawLayer.draw({ + bbox: this.#highlightOutlines.box, + root: { + viewBox: "0 0 1 1", + fill: this.color, + "fill-opacity": this.#opacity + }, + rootClass: { + highlight: true, + free: this.#isFreeHighlight + }, + path: { + d: this.#highlightOutlines.toSVGPath() + } + }, false, true)); + this.#outlineId = parent.drawLayer.drawOutline({ + rootClass: { + highlightOutline: true, + free: this.#isFreeHighlight + }, + bbox: this.#focusOutlines.box, + path: { + d: this.#focusOutlines.toSVGPath() + } + }, this.#isFreeHighlight); + if (this.#highlightDiv) { + this.#highlightDiv.style.clipPath = this.#clipPathId; + } + } + static #rotateBbox([x, y, width, height], angle) { + 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]; + } + rotate(angle) { + const { + drawLayer + } = this.parent; + let box; + if (this.#isFreeHighlight) { + angle = (angle - this.rotation + 360) % 360; + box = HighlightEditor.#rotateBbox(this.#highlightOutlines.box, angle); + } else { + box = HighlightEditor.#rotateBbox([this.x, this.y, this.width, this.height], angle); + } + drawLayer.updateProperties(this.#id, { + bbox: box, + root: { + "data-main-rotation": angle + } + }); + drawLayer.updateProperties(this.#outlineId, { + bbox: HighlightEditor.#rotateBbox(this.#focusOutlines.box, angle), + root: { + "data-main-rotation": angle + } + }); + } + render() { + if (this.div) { + return this.div; + } + const div = super.render(); + if (this.#text) { + div.setAttribute("aria-label", this.#text); + div.setAttribute("role", "mark"); + } + if (this.#isFreeHighlight) { + div.classList.add("free"); + } else { + this.div.addEventListener("keydown", this.#keydown.bind(this), { + signal: this._uiManager._signal + }); + } + const highlightDiv = this.#highlightDiv = document.createElement("div"); + div.append(highlightDiv); + highlightDiv.setAttribute("aria-hidden", "true"); + highlightDiv.className = "internal"; + highlightDiv.style.clipPath = this.#clipPathId; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + bindEvents(this, this.#highlightDiv, ["pointerover", "pointerleave"]); + this.enableEditing(); + return div; + } + pointerover() { + if (!this.isSelected) { + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hovered: true + } + }); + } + } + pointerleave() { + if (!this.isSelected) { + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hovered: false + } + }); + } + } + #keydown(event) { + HighlightEditor._keyboardManager.exec(this, event); + } + _moveCaret(direction) { + this.parent.unselect(this); + switch (direction) { + case 0: + case 2: + this.#setCaret(true); + break; + case 1: + case 3: + this.#setCaret(false); + break; + } + } + #setCaret(start) { + if (!this.#anchorNode) { + return; + } + const selection = window.getSelection(); + if (start) { + selection.setPosition(this.#anchorNode, this.#anchorOffset); + } else { + selection.setPosition(this.#focusNode, this.#focusOffset); + } + } + select() { + super.select(); + if (!this.#outlineId) { + return; + } + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hovered: false, + selected: true + } + }); + } + unselect() { + super.unselect(); + if (!this.#outlineId) { + return; + } + this.parent?.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + selected: false + } + }); + if (!this.#isFreeHighlight) { + this.#setCaret(false); + } + } + get _mustFixPosition() { + return !this.#isFreeHighlight; + } + show(visible = this._isVisible) { + super.show(visible); + if (this.parent) { + this.parent.drawLayer.updateProperties(this.#id, { + rootClass: { + hidden: !visible + } + }); + this.parent.drawLayer.updateProperties(this.#outlineId, { + rootClass: { + hidden: !visible + } + }); + } + } + #getRotation() { + return this.#isFreeHighlight ? this.rotation : 0; + } + #serializeBoxes() { + if (this.#isFreeHighlight) { + return null; + } + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const boxes = this.#boxes; + 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; + } + #serializeOutlines(rect) { + return this.#highlightOutlines.serialize(rect, this.#getRotation()); + } + static startHighlighting(parent, isLTR, { + target: textLayer, + x, + y + }) { + 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(); + this.#endHighlight(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", 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 #highlightMove(parent, event) { + if (this._freeHighlight.add(event)) { + parent.drawLayer.updateProperties(this._freeHighlightId, { + path: { + d: this._freeHighlight.toSVGPath() + } + }); + } + } + static #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 = ""; + } + 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 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.#opacity = opacity || 1; + if (inkLists) { + editor.#thickness = 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.#boxes = []; + 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.#createOutlines(); + editor.#addToDrawLayer(); + editor.rotate(editor.rotation); + } else if (inkLists) { + editor.#isFreeHighlight = 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.#thickness / 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.#createFreeOutlines({ + highlightOutlines: outliner.getOutlines(), + highlightId: id, + clipPathId + }); + editor.#addToDrawLayer(); + editor.rotate(editor.parentRotation); + } + return editor; + } + serialize(isForCopying = 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: this.#opacity, + thickness: this.#thickness, + quadPoints: this.#serializeBoxes(), + outlines: this.#serializeOutlines(rect), + pageIndex: this.pageIndex, + rect, + rotation: this.#getRotation(), + structTreeParentId: this._structTreeParentId + }; + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + color + } = this._initialData; + return serialized.color.some((c, i) => c !== color[i]); + } + renderAnnotationElement(annotation) { + annotation.updateEdited({ + rect: this.getRect(0, 0) + }); + return null; + } + static canCreateNewEmptyEditor() { + return false; + } +} + +;// ./src/display/editor/draw.js + + + +class DrawingOptions { + #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) { + this.#svgProperties[name] = value; + } + toSVGProperties() { + const root = this.#svgProperties; + this.#svgProperties = Object.create(null); + return { + root + }; + } + reset() { + this.#svgProperties = Object.create(null); + } + updateAll(options = this) { + this.updateProperties(options); + } + clone() { + unreachable("Not implemented"); + } +} +class DrawingEditor extends AnnotationEditor { + #drawOutlines = null; + #mustBeCommitted; + _drawId = null; + static _currentDrawId = -1; + static _currentParent = null; + static #currentDraw = null; + static #currentDrawingAC = null; + static #currentDrawingOptions = null; + static #currentPointerId = NaN; + static #currentPointerType = null; + static #currentPointerIds = null; + static #currentMoveTimestamp = NaN; + static _INNER_MARGIN = 3; + constructor(params) { + super(params); + this.#mustBeCommitted = params.mustBeCommitted || false; + this._addOutlines(params); + } + _addOutlines(params) { + if (params.drawOutlines) { + this.#createDrawOutlines(params); + this.#addToDrawLayer(); + } + } + #createDrawOutlines({ + drawOutlines, + drawId, + drawingOptions + }) { + this.#drawOutlines = drawOutlines; + this._drawingOptions ||= drawingOptions; + if (drawId >= 0) { + this._drawId = drawId; + this.parent.drawLayer.finalizeDraw(drawId, drawOutlines.defaultProperties); + } else { + this._drawId = this.#createDrawing(drawOutlines, this.parent); + } + this.#updateBbox(drawOutlines.box); + } + #createDrawing(drawOutlines, parent) { + const { + id + } = parent.drawLayer.draw(DrawingEditor._mergeSVGProperties(this._drawingOptions.toSVGProperties(), drawOutlines.defaultSVGProperties), false, false); + return id; + } + 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) { + DrawingEditor.#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 = this.#drawOutlines.updateProperty(name, val); + if (bbox) { + this.#updateBbox(bbox); + } + this.parent?.drawLayer.updateProperties(this._drawId, options.toSVGProperties()); + }; + 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(this.#drawOutlines.getPathResizingSVGProperties(this.#convertToDrawSpace()), { + bbox: this.#rotateBox() + })); + } + _onResized() { + this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathResizedSVGProperties(this.#convertToDrawSpace()), { + bbox: this.#rotateBox() + })); + } + _onTranslating(_x, _y) { + this.parent?.drawLayer.updateProperties(this._drawId, { + bbox: this.#rotateBox() + }); + } + _onTranslated() { + this.parent?.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties(this.#drawOutlines.getPathTranslatedSVGProperties(this.#convertToDrawSpace(), this.parentDimensions), { + bbox: this.#rotateBox() + })); + } + _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 (this.#mustBeCommitted) { + this.#mustBeCommitted = false; + this.commit(); + this.parent.setSelected(this); + if (focus && this.isOnScreen) { + this.div.focus(); + } + } + } + remove() { + this.#cleanDrawLayer(); + super.remove(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + this.#addToDrawLayer(); + this.#updateBbox(this.#drawOutlines.box); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + let mustBeSelected = false; + if (this.parent && !parent) { + this._uiManager.removeShouldRescale(this); + this.#cleanDrawLayer(); + } else if (parent) { + this._uiManager.addShouldRescale(this); + this.#addToDrawLayer(parent); + mustBeSelected = !this.parent && this.div?.classList.contains("selectedEditor"); + } + super.setParent(parent); + if (mustBeSelected) { + this.select(); + } + } + #cleanDrawLayer() { + if (this._drawId === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(this._drawId); + this._drawId = null; + this._drawingOptions.reset(); + } + #addToDrawLayer(parent = 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 = this.#createDrawing(this.#drawOutlines, parent); + } + #convertToParentSpace([x, y, width, height]) { + 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]; + } + } + #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]; + } + } + #updateBbox(bbox) { + [this.x, this.y, this.width, this.height] = this.#convertToParentSpace(bbox); + if (this.div) { + this.fixAndSetPosition(); + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + } + this._onResized(); + } + #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]; + } + } + rotate() { + if (!this.parent) { + return; + } + this.parent.drawLayer.updateProperties(this._drawId, DrawingEditor._mergeSVGProperties({ + bbox: this.#rotateBox() + }, this.#drawOutlines.updateRotation((this.parentRotation - this.rotation + 360) % 360))); + } + onScaleChanging() { + if (!this.parent) { + return; + } + this.#updateBbox(this.#drawOutlines.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 (DrawingEditor.#currentPointerType && DrawingEditor.#currentPointerType !== pointerType) { + return; + } + const { + viewport: { + rotation + } + } = parent; + const { + width: parentWidth, + height: parentHeight + } = target.getBoundingClientRect(); + const ac = DrawingEditor.#currentDrawingAC = new AbortController(); + const signal = parent.combinedSignal(ac); + DrawingEditor.#currentPointerId ||= pointerId; + DrawingEditor.#currentPointerType ??= pointerType; + window.addEventListener("pointerup", e => { + if (DrawingEditor.#currentPointerId === e.pointerId) { + this._endDraw(e); + } else { + DrawingEditor.#currentPointerIds?.delete(e.pointerId); + } + }, { + signal + }); + window.addEventListener("pointercancel", e => { + if (DrawingEditor.#currentPointerId === e.pointerId) { + this._currentParent.endDrawingSession(); + } else { + DrawingEditor.#currentPointerIds?.delete(e.pointerId); + } + }, { + signal + }); + window.addEventListener("pointerdown", e => { + if (DrawingEditor.#currentPointerType !== e.pointerType) { + return; + } + (DrawingEditor.#currentPointerIds ||= new Set()).add(e.pointerId); + if (DrawingEditor.#currentDraw.isCancellable()) { + DrawingEditor.#currentDraw.removeLastElement(); + if (DrawingEditor.#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 === DrawingEditor.#currentMoveTimestamp) { + stopEvent(e); + } + }, { + signal + }); + parent.toggleDrawing(); + uiManager._editorUndoBar?.hide(); + if (DrawingEditor.#currentDraw) { + parent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.startNew(x, y, parentWidth, parentHeight, rotation)); + return; + } + uiManager.updateUIForDefaultProperties(this); + DrawingEditor.#currentDraw = this.createDrawerInstance(x, y, parentWidth, parentHeight, rotation); + DrawingEditor.#currentDrawingOptions = this.getDefaultDrawingOptions(); + this._currentParent = parent; + ({ + id: this._currentDrawId + } = parent.drawLayer.draw(this._mergeSVGProperties(DrawingEditor.#currentDrawingOptions.toSVGProperties(), DrawingEditor.#currentDraw.defaultSVGProperties), true, false)); + } + static _drawMove(event) { + DrawingEditor.#currentMoveTimestamp = -1; + if (!DrawingEditor.#currentDraw) { + return; + } + const { + offsetX, + offsetY, + pointerId + } = event; + if (DrawingEditor.#currentPointerId !== pointerId) { + return; + } + if (DrawingEditor.#currentPointerIds?.size >= 1) { + this._endDraw(event); + return; + } + this._currentParent.drawLayer.updateProperties(this._currentDrawId, DrawingEditor.#currentDraw.add(offsetX, offsetY)); + DrawingEditor.#currentMoveTimestamp = event.timeStamp; + stopEvent(event); + } + static _cleanup(all) { + if (all) { + this._currentDrawId = -1; + this._currentParent = null; + DrawingEditor.#currentDraw = null; + DrawingEditor.#currentDrawingOptions = null; + DrawingEditor.#currentPointerType = null; + DrawingEditor.#currentMoveTimestamp = NaN; + } + if (DrawingEditor.#currentDrawingAC) { + DrawingEditor.#currentDrawingAC.abort(); + DrawingEditor.#currentDrawingAC = null; + DrawingEditor.#currentPointerId = NaN; + DrawingEditor.#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, DrawingEditor.#currentDraw.end(event.offsetX, event.offsetY)); + } + if (this.supportMultipleDrawings) { + const draw = DrawingEditor.#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 (!DrawingEditor.#currentDraw.isEmpty()) { + const { + pageDimensions: [pageWidth, pageHeight], + scale + } = parent; + const editor = parent.createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }, false, { + drawId: this._currentDrawId, + drawOutlines: DrawingEditor.#currentDraw.getOutlines(pageWidth * scale, pageHeight * scale, scale, this._INNER_MARGIN), + drawingOptions: DrawingEditor.#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); + editor.#createDrawOutlines({ + drawOutlines + }); + editor.#addToDrawLayer(); + editor.onScaleChanging(); + editor.rotate(); + return editor; + } + serializeDraw(isForCopying) { + const [pageX, pageY] = this.pageTranslation; + const [pageWidth, pageHeight] = this.pageDimensions; + return this.#drawOutlines.serialize([pageX, pageY, pageWidth, pageHeight], isForCopying); + } + renderAnnotationElement(annotation) { + annotation.updateEdited({ + rect: this.getRect(0, 0) + }); + return null; + } + static canCreateNewEmptyEditor() { + return false; + } +} + +;// ./src/display/editor/drawers/inkdraw.js + + +class InkDrawOutliner { + #last = new Float64Array(6); + #line; + #lines; + #rotation; + #thickness; + #points; + #lastSVGPath = ""; + #lastIndex = 0; + #outlines = new InkDrawOutline(); + #parentWidth; + #parentHeight; + constructor(x, y, parentWidth, parentHeight, rotation, thickness) { + this.#parentWidth = parentWidth; + this.#parentHeight = parentHeight; + this.#rotation = rotation; + this.#thickness = thickness; + [x, y] = this.#normalizePoint(x, y); + const line = this.#line = [NaN, NaN, NaN, NaN, x, y]; + this.#points = [x, y]; + this.#lines = [{ + line, + points: this.#points + }]; + this.#last.set(line, 0); + } + updateProperty(name, value) { + if (name === "stroke-width") { + this.#thickness = value; + } + } + #normalizePoint(x, y) { + return Outline._normalizePoint(x, y, this.#parentWidth, this.#parentHeight, this.#rotation); + } + isEmpty() { + return !this.#lines || this.#lines.length === 0; + } + isCancellable() { + return this.#points.length <= 10; + } + add(x, y) { + [x, y] = this.#normalizePoint(x, y); + const [x1, y1, x2, y2] = this.#last.subarray(2, 6); + const diffX = x - x2; + const diffY = y - y2; + const d = Math.hypot(this.#parentWidth * diffX, this.#parentHeight * diffY); + if (d <= 2) { + return null; + } + this.#points.push(x, y); + if (isNaN(x1)) { + this.#last.set([x2, y2, x, y], 2); + this.#line.push(NaN, NaN, NaN, NaN, x, y); + return { + path: { + d: this.toSVGPath() + } + }; + } + if (isNaN(this.#last[0])) { + this.#line.splice(6, 6); + } + this.#last.set([x1, y1, x2, y2, x, y], 0); + this.#line.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 (this.#points.length === 2) { + return { + path: { + d: this.toSVGPath() + } + }; + } + return null; + } + startNew(x, y, parentWidth, parentHeight, rotation) { + this.#parentWidth = parentWidth; + this.#parentHeight = parentHeight; + this.#rotation = rotation; + [x, y] = this.#normalizePoint(x, y); + const line = this.#line = [NaN, NaN, NaN, NaN, x, y]; + this.#points = [x, y]; + const last = this.#lines.at(-1); + if (last) { + last.line = new Float32Array(last.line); + last.points = new Float32Array(last.points); + } + this.#lines.push({ + line, + points: this.#points + }); + this.#last.set(line, 0); + this.#lastIndex = 0; + this.toSVGPath(); + return null; + } + getLastElement() { + return this.#lines.at(-1); + } + setLastElement(element) { + if (!this.#lines) { + return this.#outlines.setLastElement(element); + } + this.#lines.push(element); + this.#line = element.line; + this.#points = element.points; + this.#lastIndex = 0; + return { + path: { + d: this.toSVGPath() + } + }; + } + removeLastElement() { + if (!this.#lines) { + return this.#outlines.removeLastElement(); + } + this.#lines.pop(); + this.#lastSVGPath = ""; + for (let i = 0, ii = this.#lines.length; i < ii; i++) { + const { + line, + points + } = this.#lines[i]; + this.#line = line; + this.#points = points; + this.#lastIndex = 0; + this.toSVGPath(); + } + return { + path: { + d: this.#lastSVGPath + } + }; + } + toSVGPath() { + const firstX = Outline.svgRound(this.#line[4]); + const firstY = Outline.svgRound(this.#line[5]); + if (this.#points.length === 2) { + this.#lastSVGPath = `${this.#lastSVGPath} M ${firstX} ${firstY} Z`; + return this.#lastSVGPath; + } + if (this.#points.length <= 6) { + const i = this.#lastSVGPath.lastIndexOf("M"); + this.#lastSVGPath = `${this.#lastSVGPath.slice(0, i)} M ${firstX} ${firstY}`; + this.#lastIndex = 6; + } + if (this.#points.length === 4) { + const secondX = Outline.svgRound(this.#line[10]); + const secondY = Outline.svgRound(this.#line[11]); + this.#lastSVGPath = `${this.#lastSVGPath} L ${secondX} ${secondY}`; + this.#lastIndex = 12; + return this.#lastSVGPath; + } + const buffer = []; + if (this.#lastIndex === 0) { + buffer.push(`M ${firstX} ${firstY}`); + this.#lastIndex = 6; + } + for (let i = this.#lastIndex, ii = this.#line.length; i < ii; i += 6) { + const [c1x, c1y, c2x, c2y, x, y] = this.#line.slice(i, i + 6).map(Outline.svgRound); + buffer.push(`C${c1x} ${c1y} ${c2x} ${c2y} ${x} ${y}`); + } + this.#lastSVGPath += buffer.join(" "); + this.#lastIndex = this.#line.length; + return this.#lastSVGPath; + } + getOutlines(parentWidth, parentHeight, scale, innerMargin) { + const last = this.#lines.at(-1); + last.line = new Float32Array(last.line); + last.points = new Float32Array(last.points); + this.#outlines.build(this.#lines, parentWidth, parentHeight, scale, this.#rotation, this.#thickness, innerMargin); + this.#last = null; + this.#line = null; + this.#lines = null; + this.#lastSVGPath = null; + return this.#outlines; + } + get defaultSVGProperties() { + return { + root: { + viewBox: "0 0 10000 10000" + }, + rootClass: { + draw: true + }, + bbox: [0, 0, 1, 1] + }; + } +} +class InkDrawOutline extends Outline { + #bbox; + #currentRotation = 0; + #innerMargin; + #lines; + #parentWidth; + #parentHeight; + #parentScale; + #rotation; + #thickness; + build(lines, parentWidth, parentHeight, parentScale, rotation, thickness, innerMargin) { + this.#parentWidth = parentWidth; + this.#parentHeight = parentHeight; + this.#parentScale = parentScale; + this.#rotation = rotation; + this.#thickness = thickness; + this.#innerMargin = innerMargin ?? 0; + this.#lines = lines; + this.#computeBbox(); + } + get thickness() { + return this.#thickness; + } + setLastElement(element) { + this.#lines.push(element); + return { + path: { + d: this.toSVGPath() + } + }; + } + removeLastElement() { + this.#lines.pop(); + return { + path: { + d: this.toSVGPath() + } + }; + } + toSVGPath() { + const buffer = []; + for (const { + line + } of this.#lines) { + 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([pageX, pageY, pageWidth, pageHeight], isForCopying) { + const serializedLines = []; + const serializedPoints = []; + const [x, y, width, height] = this.#getBBoxWithNoMargin(); + let tx, ty, sx, sy, x1, y1, x2, y2, rescaleFn; + switch (this.#rotation) { + 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 this.#lines) { + 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, { + paths: { + lines, + points + }, + rotation, + thickness + }) { + 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; + } + #getMarginComponents(thickness = this.#thickness) { + const margin = this.#innerMargin + thickness / 2 * this.#parentScale; + return this.#rotation % 180 === 0 ? [margin / this.#parentWidth, margin / this.#parentHeight] : [margin / this.#parentHeight, margin / this.#parentWidth]; + } + #getBBoxWithNoMargin() { + const [x, y, width, height] = this.#bbox; + const [marginX, marginY] = this.#getMarginComponents(0); + return [x + marginX, y + marginY, width - 2 * marginX, height - 2 * marginY]; + } + #computeBbox() { + const bbox = this.#bbox = new Float32Array([Infinity, Infinity, -Infinity, -Infinity]); + for (const { + line + } of this.#lines) { + 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] = this.#getMarginComponents(); + 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]; + } + get box() { + return this.#bbox; + } + updateProperty(name, value) { + if (name === "stroke-width") { + return this.#updateThickness(value); + } + return null; + } + #updateThickness(thickness) { + const [oldMarginX, oldMarginY] = this.#getMarginComponents(); + this.#thickness = thickness; + const [newMarginX, newMarginY] = this.#getMarginComponents(); + const [diffMarginX, diffMarginY] = [newMarginX - oldMarginX, newMarginY - oldMarginY]; + const bbox = this.#bbox; + bbox[0] -= diffMarginX; + bbox[1] -= diffMarginY; + bbox[2] += 2 * diffMarginX; + bbox[3] += 2 * diffMarginY; + return bbox; + } + updateParentDimensions([width, height], scale) { + const [oldMarginX, oldMarginY] = this.#getMarginComponents(); + this.#parentWidth = width; + this.#parentHeight = height; + this.#parentScale = scale; + const [newMarginX, newMarginY] = this.#getMarginComponents(); + const diffMarginX = newMarginX - oldMarginX; + const diffMarginY = newMarginY - oldMarginY; + const bbox = this.#bbox; + bbox[0] -= diffMarginX; + bbox[1] -= diffMarginY; + bbox[2] += 2 * diffMarginX; + bbox[3] += 2 * diffMarginY; + return bbox; + } + updateRotation(rotation) { + this.#currentRotation = rotation; + return { + path: { + transform: this.rotationTransform + } + }; + } + get viewBox() { + return this.#bbox.map(Outline.svgRound).join(" "); + } + get defaultProperties() { + const [x, y] = this.#bbox; + return { + root: { + viewBox: this.viewBox + }, + path: { + "transform-origin": `${Outline.svgRound(x)} ${Outline.svgRound(y)}` + } + }; + } + get rotationTransform() { + const [,, width, height] = this.#bbox; + let a = 0, + b = 0, + c = 0, + d = 0, + e = 0, + f = 0; + switch (this.#currentRotation) { + 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([newX, newY, newWidth, newHeight]) { + const [marginX, marginY] = this.#getMarginComponents(); + const [x, y, width, height] = this.#bbox; + 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([newX, newY, newWidth, newHeight]) { + const [marginX, marginY] = this.#getMarginComponents(); + const bbox = this.#bbox; + 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 this.#lines) { + 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 this.#lines) { + 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([newX, newY], parentDimensions) { + const [newParentWidth, newParentHeight] = parentDimensions; + const bbox = this.#bbox; + const tx = newX - bbox[0]; + const ty = newY - bbox[1]; + if (this.#parentWidth === newParentWidth && this.#parentHeight === newParentHeight) { + for (const { + line, + points + } of this.#lines) { + Outline._translate(line, tx, ty, line); + Outline._translate(points, tx, ty, points); + } + } else { + const sx = this.#parentWidth / newParentWidth; + const sy = this.#parentHeight / newParentHeight; + this.#parentWidth = newParentWidth; + this.#parentHeight = newParentHeight; + for (const { + line, + points + } of this.#lines) { + 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 = this.#bbox; + 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 + }; + } +} + +;// ./src/display/editor/ink.js + + + + + +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; + } +} +class InkEditor extends DrawingEditor { + static _type = "ink"; + static _editorType = AnnotationEditorType.INK; + static _defaultDrawingOptions = null; + constructor(params) { + super({ + ...params, + name: "inkEditor" + }); + 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({ + color, + thickness, + opacity + }) { + this._drawingOptions = InkEditor.getDefaultDrawingOptions({ + stroke: Util.makeHexColor(...color), + "stroke-width": thickness, + "stroke-opacity": opacity + }); + } + serialize(isForCopying = 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 && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #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; + } + renderAnnotationElement(annotation) { + const { + points, + rect + } = this.serializeDraw(false); + annotation.updateEdited({ + rect, + thickness: this._drawingOptions["stroke-width"], + points + }); + return 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 + + + + +const BASE_HEADER_LENGTH = 8; +const POINTS_PROPERTIES_NUMBER = 3; +class SignatureExtractor { + static #PARAMETERS = { + maxDim: 512, + sigmaSFactor: 0.02, + sigmaR: 25, + kernelSize: 16 + }; + static #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; + } + static #neighborIdToIndex = new Int32Array([0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1]); + static #clockwiseNonZero(buf, width, i0, j0, i, j, offset) { + const id = this.#neighborIndexToId(i0, j0, i, j); + for (let k = 0; k < 8; k++) { + const kk = (-k + id - offset + 16) % 8; + const shiftI = this.#neighborIdToIndex[2 * kk]; + const shiftJ = this.#neighborIdToIndex[2 * kk + 1]; + if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) { + return kk; + } + } + return -1; + } + static #counterClockwiseNonZero(buf, width, i0, j0, i, j, offset) { + const id = this.#neighborIndexToId(i0, j0, i, j); + for (let k = 0; k < 8; k++) { + const kk = (k + id + offset + 16) % 8; + const shiftI = this.#neighborIdToIndex[2 * kk]; + const shiftJ = this.#neighborIdToIndex[2 * kk + 1]; + if (buf[(i0 + shiftI) * width + (j0 + shiftJ)] !== 0) { + return kk; + } + } + return -1; + } + static #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 = this.#clockwiseNonZero(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 = this.#neighborIdToIndex[2 * k]; + let shiftJ = 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 = this.#counterClockwiseNonZero(types, width, i3, j3, i2, j2, 1); + shiftI = this.#neighborIdToIndex[2 * kk]; + shiftJ = 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; + } + static #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) { + this.#douglasPeuckerHelper(points, start, index + 2, output); + this.#douglasPeuckerHelper(points, index, end, output); + } else { + output.push(ax, ay); + } + } + static #douglasPeucker(points) { + const output = []; + const len = points.length; + this.#douglasPeuckerHelper(points, 0, len, output); + output.push(points[len - 2], points[len - 1]); + return output.length <= 4 ? null : output; + } + static #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]; + } + static #getHistogram(buf) { + const histogram = new Uint32Array(256); + for (const g of buf) { + histogram[g]++; + } + return histogram; + } + static #toUint8(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; + } + static #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; + } + static #getGrayPixels(bitmap) { + const originalBitmap = bitmap; + const { + width, + height + } = bitmap; + const { + maxDim + } = 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 = prevWidth; + newHeight = prevHeight; + if (newWidth > maxDim) { + newWidth = Math.ceil(newWidth / 2); + } + if (newHeight > maxDim) { + newHeight = 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); + 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 = this.#toUint8(grayImage); + return [uint8Buf, newWidth, newHeight]; + } + static extractContoursFromText(text, { + fontFamily, + fontStyle, + fontWeight + }, pageWidth, pageHeight, rotation, innerMargin) { + 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 = this.#toUint8(ctx.getImageData(0, 0, canvasWidth, canvasHeight).data); + const histogram = this.#getHistogram(uint8Buf); + const threshold = this.#guessThreshold(histogram); + const contourList = this.#findContours(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] = this.#getGrayPixels(bitmap); + const [buffer, histogram] = this.#bilateralFilter(uint8Buf, width, height, Math.hypot(width, height) * this.#PARAMETERS.sigmaSFactor, this.#PARAMETERS.sigmaR, this.#PARAMETERS.kernelSize); + const threshold = this.#guessThreshold(histogram); + const contourList = this.#findContours(buffer, width, height, threshold); + return this.processDrawnLines({ + lines: { + curves: contourList, + width, + height + }, + pageWidth, + pageHeight, + rotation, + innerMargin, + mustSmooth: true, + areContours: true + }); + } + static processDrawnLines({ + lines, + pageWidth, + pageHeight, + rotation, + innerMargin, + mustSmooth, + areContours + }) { + 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 ? this.#douglasPeucker(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({ + outlines, + areContours, + thickness, + width, + height + }) { + 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; + } + } +} + +;// ./src/display/editor/signature.js + + + + + + + +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; + } +} +class SignatureEditor extends DrawingEditor { + #isExtracted = false; + #description = null; + #signatureData = null; + #signatureUUID = null; + static _type = "signature"; + static _editorType = AnnotationEditorType.SIGNATURE; + static _defaultDrawingOptions = null; + constructor(params) { + super({ + ...params, + mustBeCommitted: true, + name: "signatureEditor" + }); + this._willKeepAspectRatio = true; + this.#signatureData = params.signatureData || null; + this.#description = 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: !!this.#description + }; + } + 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 (this.#signatureData) { + const { + lines, + mustSmooth, + areContours, + description, + uuid, + heightInPage + } = this.#signatureData; + 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) { + this.#signatureUUID = uuid; + this.addEditToolbar(); + } + getUuid() { + return this.#signatureUUID; + } + get description() { + return this.#description; + } + set description(description) { + this.#description = description; + super.addEditToolbar().then(toolbar => { + toolbar?.updateEditSignatureButton(description); + }); + } + getSignaturePreview() { + const { + newCurves, + areContours, + thickness, + width, + height + } = this.#signatureData; + 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 && this.#description !== null) { + await toolbar.addEditSignatureButton(this._uiManager.signatureManager, this.#signatureUUID, this.#description); + toolbar.show(); + } + return toolbar; + } + addSignature(data, heightInPage, description, uuid) { + const { + x: savedX, + y: savedY + } = this; + const { + outline + } = this.#signatureData = data; + this.#isExtracted = outline instanceof ContourDrawOutline; + this.#description = description; + this.div.setAttribute("data-l10n-args", JSON.stringify({ + description + })); + let drawingOptions; + if (this.#isExtracted) { + 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({ + areContours, + thickness + }) { + if (areContours) { + this._drawingOptions = SignatureEditor.getDefaultDrawingOptions(); + } else { + this._drawingOptions = SignatureEditor._defaultDrawnSignatureOptions.clone(); + this._drawingOptions.updateProperties({ + "stroke-width": thickness + }); + } + } + serialize(isForCopying = 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: this.#isExtracted, + color: [0, 0, 0], + thickness: this.#isExtracted ? 0 : thickness, + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + serialized.paths = { + lines, + points + }; + serialized.uuid = this.#signatureUUID; + serialized.isCopy = true; + } else { + serialized.lines = lines; + } + if (this.#description) { + serialized.accessibilityData = { + type: "Figure", + alt: this.#description + }; + } + 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); + editor.#isExtracted = data.areContours; + editor.#description = data.accessibilityData?.alt || ""; + editor.#signatureUUID = data.uuid; + return editor; + } +} + +;// ./src/display/editor/stamp.js + + + + +class StampEditor extends AnnotationEditor { + #bitmap = null; + #bitmapId = null; + #bitmapPromise = null; + #bitmapUrl = null; + #bitmapFile = null; + #bitmapFileName = ""; + #canvas = null; + #missingCanvas = false; + #resizeTimeoutId = null; + #isSvg = false; + #hasBeenAddedInUndoStack = false; + static _type = "stamp"; + static _editorType = AnnotationEditorType.STAMP; + constructor(params) { + super({ + ...params, + name: "stampEditor" + }); + this.#bitmapUrl = params.bitmapUrl; + this.#bitmapFile = 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(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 + }; + } + #getBitmapFetched(data, fromId = false) { + if (!data) { + this.remove(); + return; + } + this.#bitmap = data.bitmap; + if (!fromId) { + this.#bitmapId = data.id; + this.#isSvg = data.isSvg; + } + if (data.file) { + this.#bitmapFileName = data.file.name; + } + this.#createCanvas(); + } + #getBitmapDone() { + this.#bitmapPromise = null; + this._uiManager.enableWaiting(false); + if (!this.#canvas) { + return; + } + if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) { + this._editToolbar.hide(); + this._uiManager.editAltText(this, true); + return; + } + if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#bitmap) { + this._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: false, + alt_text_type: "empty" + } + }); + try { + this.mlGuessAltText(); + } catch {} + } + this.div.focus(); + } + async mlGuessAltText(imageData = null, updateAltTextData = 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; + } + #getBitmap() { + if (this.#bitmapId) { + this._uiManager.enableWaiting(true); + this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapUrl) { + const url = this.#bitmapUrl; + this.#bitmapUrl = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + if (this.#bitmapFile) { + const file = this.#bitmapFile; + this.#bitmapFile = null; + this._uiManager.enableWaiting(true); + this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); + return; + } + const input = document.createElement("input"); + input.type = "file"; + input.accept = SupportedImageMimeTypes.join(","); + const signal = this._uiManager._signal; + this.#bitmapPromise = 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 + } + }); + this.#getBitmapFetched(data); + } + resolve(); + }, { + signal + }); + input.addEventListener("cancel", () => { + this.remove(); + resolve(); + }, { + signal + }); + }).finally(() => this.#getBitmapDone()); + input.click(); + } + remove() { + if (this.#bitmapId) { + this.#bitmap = null; + this._uiManager.imageManager.deleteId(this.#bitmapId); + this.#canvas?.remove(); + this.#canvas = null; + if (this.#resizeTimeoutId) { + clearTimeout(this.#resizeTimeoutId); + this.#resizeTimeoutId = null; + } + } + super.remove(); + } + rebuild() { + if (!this.parent) { + if (this.#bitmapId) { + this.#getBitmap(); + } + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (this.#bitmapId && this.#canvas === null) { + this.#getBitmap(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + onceAdded(focus) { + this._isDraggable = true; + if (focus) { + this.div.focus(); + } + } + isEmpty() { + return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile || this.#bitmapId || this.#missingCanvas); + } + 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 (!this.#missingCanvas) { + if (this.#bitmap) { + this.#createCanvas(); + } else { + this.#getBitmap(); + } + } + 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)) { + this.#bitmapId = bitmapId; + if (bitmap) { + this.#bitmap = bitmap; + } + this.#missingCanvas = false; + this.#createCanvas(); + } + } + _onResized() { + this.onScaleChanging(); + } + onScaleChanging() { + if (!this.parent) { + return; + } + if (this.#resizeTimeoutId !== null) { + clearTimeout(this.#resizeTimeoutId); + } + const TIME_TO_WAIT = 200; + this.#resizeTimeoutId = setTimeout(() => { + this.#resizeTimeoutId = null; + this.#drawBitmap(); + }, TIME_TO_WAIT); + } + #createCanvas() { + const { + div + } = this; + let { + width, + height + } = this.#bitmap; + 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 = this.#canvas = 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; + } + this.#drawBitmap(); + if (!this.#hasBeenAddedInUndoStack) { + this.parent.addUndoableEditor(this); + this.#hasBeenAddedInUndoStack = true; + } + this._reportTelemetry({ + action: "inserted_image" + }); + if (this.#bitmapFileName) { + this.div.setAttribute("aria-description", this.#bitmapFileName); + } + } + copyCanvas(maxDataDimension, maxPreviewDimension, createImageData = false) { + if (!maxDataDimension) { + maxDataDimension = 224; + } + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + const outputScale = new OutputScale(); + let bitmap = this.#bitmap; + 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 (!this.#isSvg) { + bitmap = this.#scaleBitmap(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 = this.#bitmap; + if (bitmapWidth > maxDataDimension || bitmapHeight > maxDataDimension) { + const ratio = Math.min(maxDataDimension / bitmapWidth, maxDataDimension / bitmapHeight); + dataWidth = Math.floor(bitmapWidth * ratio); + dataHeight = Math.floor(bitmapHeight * ratio); + if (!this.#isSvg) { + bitmap = this.#scaleBitmap(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 + }; + } + #scaleBitmap(width, height) { + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + let newWidth = bitmapWidth; + let newHeight = bitmapHeight; + let bitmap = this.#bitmap; + 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; + } + #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 = this.#canvas; + if (!canvas || canvas.width === scaledWidth && canvas.height === scaledHeight) { + return; + } + canvas.width = scaledWidth; + canvas.height = scaledHeight; + const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(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); + } + #serializeBitmap(toUrl) { + if (toUrl) { + if (this.#isSvg) { + const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); + if (url) { + return url; + } + } + const canvas = document.createElement("canvas"); + ({ + width: canvas.width, + height: canvas.height + } = this.#bitmap); + const ctx = canvas.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0); + return canvas.toDataURL(); + } + if (this.#isSvg) { + 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(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); + return offscreen.transferToImageBitmap(); + } + return structuredClone(this.#bitmap); + } + 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); + editor.#missingCanvas = true; + } else if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { + editor.#bitmapId = bitmapId; + if (bitmap) { + editor.#bitmap = bitmap; + } + } else { + editor.#bitmapUrl = bitmapUrl; + } + editor.#isSvg = 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; + editor.#hasBeenAddedInUndoStack = !!initialData; + return editor; + } + serialize(isForCopying = false, context = null) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return this.serializeDeleted(); + } + const serialized = { + annotationType: AnnotationEditorType.STAMP, + bitmapId: this.#bitmapId, + pageIndex: this.pageIndex, + rect: this.getRect(0, 0), + rotation: this.rotation, + isSvg: this.#isSvg, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + serialized.bitmapUrl = this.#serializeBitmap(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 = this.#hasElementChanged(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 = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; + if (!context.stamps.has(this.#bitmapId)) { + context.stamps.set(this.#bitmapId, { + area, + serialized + }); + serialized.bitmap = this.#serializeBitmap(false); + } else if (this.#isSvg) { + const prevData = context.stamps.get(this.#bitmapId); + if (area > prevData.area) { + prevData.area = area; + prevData.serialized.bitmap.close(); + prevData.serialized.bitmap = this.#serializeBitmap(false); + } + } + return serialized; + } + #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 + }; + } + renderAnnotationElement(annotation) { + annotation.updateEdited({ + rect: this.getRect(0, 0) + }); + return null; + } +} + +;// ./src/display/editor/annotation_editor_layer.js + + + + + + + + +class AnnotationEditorLayer { + #accessibilityManager; + #allowClick = false; + #annotationLayer = null; + #clickAC = null; + #editorFocusTimeoutId = null; + #editors = new Map(); + #hadPointerDown = false; + #isDisabling = false; + #isEnabling = false; + #drawingAC = null; + #focusedElement = null; + #textLayer = null; + #textSelectionAC = null; + #uiManager; + static _initialized = false; + static #editorTypes = new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor, SignatureEditor].map(type => [type._editorType, type])); + constructor({ + uiManager, + pageIndex, + div, + structTreeLayer, + accessibilityManager, + annotationLayer, + drawLayer, + textLayer, + viewport, + l10n + }) { + const editorTypes = [...AnnotationEditorLayer.#editorTypes.values()]; + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n, uiManager); + } + } + uiManager.registerEditorTypes(editorTypes); + this.#uiManager = uiManager; + this.pageIndex = pageIndex; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationLayer = annotationLayer; + this.viewport = viewport; + this.#textLayer = textLayer; + this.drawLayer = drawLayer; + this._structTree = structTreeLayer; + this.#uiManager.addLayer(this); + } + get isEmpty() { + return this.#editors.size === 0; + } + get isInvisible() { + return this.isEmpty && this.#uiManager.getMode() === AnnotationEditorType.NONE; + } + updateToolbar(mode) { + this.#uiManager.updateToolbar(mode); + } + updateMode(mode = this.#uiManager.getMode()) { + this.#cleanup(); + 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(); + } + this.toggleAnnotationLayerPointerEvents(false); + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); + } + this.div.hidden = false; + } + hasTextLayer(textLayer) { + return textLayer === this.#textLayer?.div; + } + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + } + addCommands(params) { + this.#uiManager.addCommands(params); + } + cleanUndoStack(type) { + this.#uiManager.cleanUndoStack(type); + } + toggleDrawing(enabled = false) { + this.div.classList.toggle("drawing", !enabled); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + toggleAnnotationLayerPointerEvents(enabled = false) { + this.#annotationLayer?.div.classList.toggle("disabled", !enabled); + } + async enable() { + this.#isEnabling = true; + this.div.tabIndex = 0; + this.togglePointerEvents(true); + const annotationElementIds = new Set(); + for (const editor of this.#editors.values()) { + editor.enableEditing(); + editor.show(true); + if (editor.annotationElementId) { + this.#uiManager.removeChangedExistingAnnotation(editor); + annotationElementIds.add(editor.annotationElementId); + } + } + if (!this.#annotationLayer) { + this.#isEnabling = false; + return; + } + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + editable.hide(); + if (this.#uiManager.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(); + } + this.#isEnabling = false; + } + disable() { + this.#isDisabling = true; + this.div.tabIndex = -1; + this.togglePointerEvents(false); + const changedAnnotations = new Map(); + const resetAnnotations = new Map(); + for (const editor of this.#editors.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 (this.#annotationLayer) { + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (this.#uiManager.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) { + this.#uiManager.addChangedExistingAnnotation(editor); + if (editor.renderAnnotationElement(editable)) { + editor.show(false); + } + } + editable.show(); + } + } + this.#cleanup(); + if (this.isEmpty) { + this.div.hidden = true; + } + const { + classList + } = this.div; + for (const editorType of AnnotationEditorLayer.#editorTypes.values()) { + classList.remove(`${editorType._type}Editing`); + } + this.disableTextSelection(); + this.toggleAnnotationLayerPointerEvents(true); + this.#isDisabling = false; + } + getEditableAnnotation(id) { + return this.#annotationLayer?.getEditableAnnotation(id) || null; + } + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive(); + if (currentActive === editor) { + return; + } + this.#uiManager.setActiveEditor(editor); + } + enableTextSelection() { + this.div.tabIndex = -1; + if (this.#textLayer?.div && !this.#textSelectionAC) { + this.#textSelectionAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#textSelectionAC); + this.#textLayer.div.addEventListener("pointerdown", this.#textLayerPointerDown.bind(this), { + signal + }); + this.#textLayer.div.classList.add("highlighting"); + } + } + disableTextSelection() { + this.div.tabIndex = 0; + if (this.#textLayer?.div && this.#textSelectionAC) { + this.#textSelectionAC.abort(); + this.#textSelectionAC = null; + this.#textLayer.div.classList.remove("highlighting"); + } + } + #textLayerPointerDown(event) { + this.#uiManager.unselectAll(); + const { + target + } = event; + if (target === this.#textLayer.div || (target.getAttribute("role") === "img" || target.classList.contains("endOfContent")) && this.#textLayer.div.contains(target)) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + this.#uiManager.showAllEditors("highlight", true, true); + this.#textLayer.div.classList.add("free"); + this.toggleDrawing(); + HighlightEditor.startHighlighting(this, this.#uiManager.direction === "ltr", { + target: this.#textLayer.div, + x: event.x, + y: event.y + }); + this.#textLayer.div.addEventListener("pointerup", () => { + this.#textLayer.div.classList.remove("free"); + this.toggleDrawing(true); + }, { + once: true, + signal: this.#uiManager._signal + }); + event.preventDefault(); + } + } + enableClick() { + if (this.#clickAC) { + return; + } + this.#clickAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#clickAC); + 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() { + this.#clickAC?.abort(); + this.#clickAC = null; + } + attach(editor) { + this.#editors.set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { + this.#uiManager.removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + this.#editors.delete(editor.id); + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + if (!this.#isDisabling && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + this.#uiManager.removeEditor(editor); + editor.div.remove(); + editor.isAttachedToDOM = false; + } + changeParent(editor) { + if (editor.parent === this) { + return; + } + if (editor.parent && editor.annotationElementId) { + this.#uiManager.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); + this.#uiManager.addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + editor.fixAndSetPosition(); + editor.onceAdded(!this.#isEnabling); + this.#uiManager.addToAnnotationStorage(editor); + editor._reportTelemetry(editor.telemetryInitialData); + } + moveEditorInDOM(editor) { + if (!editor.isAttachedToDOM) { + return; + } + const { + activeElement + } = document; + if (editor.div.contains(activeElement) && !this.#editorFocusTimeoutId) { + editor._focusEventsAllowed = false; + this.#editorFocusTimeoutId = setTimeout(() => { + this.#editorFocusTimeoutId = null; + if (!editor.div.contains(document.activeElement)) { + editor.div.addEventListener("focusin", () => { + editor._focusEventsAllowed = true; + }, { + once: true, + signal: this.#uiManager._signal + }); + activeElement.focus(); + } else { + editor._focusEventsAllowed = true; + } + }, 0); + } + editor._structTreeParentId = this.#accessibilityManager?.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 this.#uiManager.getId(); + } + get #currentEditorType() { + return AnnotationEditorLayer.#editorTypes.get(this.#uiManager.getMode()); + } + combinedSignal(ac) { + return this.#uiManager.combinedSignal(ac); + } + #createNewEditor(params) { + const editorType = this.#currentEditorType; + return editorType ? new editorType.prototype.constructor(params) : null; + } + canCreateNewEmptyEditor() { + return this.#currentEditorType?.canCreateNewEmptyEditor(); + } + async pasteEditor(mode, params) { + this.#uiManager.updateToolbar(mode); + await this.#uiManager.updateMode(mode); + const { + offsetX, + offsetY + } = this.#getCenterPoint(); + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: offsetX, + y: offsetY, + uiManager: this.#uiManager, + isCentered: true, + ...params + }); + if (editor) { + this.add(editor); + } + } + async deserialize(data) { + return (await AnnotationEditorLayer.#editorTypes.get(data.annotationType ?? data.annotationEditorType)?.deserialize(data, this, this.#uiManager)) || null; + } + createAndAddNewEditor(event, isCentered, data = {}) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: this.#uiManager, + isCentered, + ...data + }); + if (editor) { + this.add(editor); + } + return editor; + } + #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 + }; + } + addNewEditor(data = {}) { + this.createAndAddNewEditor(this.#getCenterPoint(), true, data); + } + setSelected(editor) { + this.#uiManager.setSelected(editor); + } + toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + } + unselect(editor) { + this.#uiManager.unselect(editor); + } + pointerup(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!this.#hadPointerDown) { + return; + } + this.#hadPointerDown = false; + if (this.#currentEditorType?.isDrawer && this.#currentEditorType.supportMultipleDrawings) { + return; + } + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + const currentMode = this.#uiManager.getMode(); + if (currentMode === AnnotationEditorType.STAMP || currentMode === AnnotationEditorType.SIGNATURE) { + this.#uiManager.unselectAll(); + return; + } + this.createAndAddNewEditor(event, false); + } + pointerdown(event) { + if (this.#uiManager.getMode() === AnnotationEditorType.HIGHLIGHT) { + this.enableTextSelection(); + } + if (this.#hadPointerDown) { + this.#hadPointerDown = false; + return; + } + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + this.#hadPointerDown = true; + if (this.#currentEditorType?.isDrawer) { + this.startDrawingSession(event); + return; + } + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + } + startDrawingSession(event) { + this.div.focus({ + preventScroll: true + }); + if (this.#drawingAC) { + this.#currentEditorType.startDrawing(this, this.#uiManager, false, event); + return; + } + this.#uiManager.setCurrentDrawingSession(this); + this.#drawingAC = new AbortController(); + const signal = this.#uiManager.combinedSignal(this.#drawingAC); + this.div.addEventListener("blur", ({ + relatedTarget + }) => { + if (relatedTarget && !this.div.contains(relatedTarget)) { + this.#focusedElement = null; + this.commitOrRemove(); + } + }, { + signal + }); + this.#currentEditorType.startDrawing(this, this.#uiManager, false, event); + } + pause(on) { + if (on) { + const { + activeElement + } = document; + if (this.div.contains(activeElement)) { + this.#focusedElement = activeElement; + } + return; + } + if (this.#focusedElement) { + setTimeout(() => { + this.#focusedElement?.focus(); + this.#focusedElement = null; + }, 0); + } + } + endDrawingSession(isAborted = false) { + if (!this.#drawingAC) { + return null; + } + this.#uiManager.setCurrentDrawingSession(null); + this.#drawingAC.abort(); + this.#drawingAC = null; + this.#focusedElement = null; + return this.#currentEditorType.endDrawing(isAborted); + } + findNewParent(editor, x, y) { + const layer = this.#uiManager.findParent(x, y); + if (layer === null || layer === this) { + return false; + } + layer.changeParent(editor); + return true; + } + commitOrRemove() { + if (this.#drawingAC) { + this.endDrawingSession(); + return true; + } + return false; + } + onScaleChanging() { + if (!this.#drawingAC) { + return; + } + this.#currentEditorType.onScaleChangingWhenDrawing(this); + } + destroy() { + this.commitOrRemove(); + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.commitOrRemove(); + this.#uiManager.setActiveEditor(null); + } + if (this.#editorFocusTimeoutId) { + clearTimeout(this.#editorFocusTimeoutId); + this.#editorFocusTimeoutId = null; + } + for (const editor of this.#editors.values()) { + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + this.#editors.clear(); + this.#uiManager.removeLayer(this); + } + #cleanup() { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + } + render({ + viewport + }) { + this.viewport = viewport; + setLayerDimensions(this.div, viewport); + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + editor.rebuild(); + } + this.updateMode(); + } + update({ + viewport + }) { + this.#uiManager.commitOrRemove(); + this.#cleanup(); + const oldRotation = this.viewport.rotation; + const rotation = viewport.rotation; + this.viewport = viewport; + setLayerDimensions(this.div, { + rotation + }); + if (oldRotation !== rotation) { + for (const editor of this.#editors.values()) { + editor.rotate(rotation); + } + } + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } + get scale() { + return this.#uiManager.viewParameters.realScale; + } +} + +;// ./src/display/draw_layer.js + + +class DrawLayer { + #parent = null; + #mapping = new Map(); + #toUpdate = new Map(); + static #id = 0; + constructor({ + pageIndex + }) { + this.pageIndex = pageIndex; + } + setParent(parent) { + if (!this.#parent) { + this.#parent = parent; + return; + } + if (this.#parent !== parent) { + if (this.#mapping.size > 0) { + for (const root of this.#mapping.values()) { + root.remove(); + parent.append(root); + } + } + this.#parent = parent; + } + } + static get _svgFactory() { + return shadow(this, "_svgFactory", new DOMSVGFactory()); + } + static #setBox(element, [x, y, width, height]) { + const { + style + } = element; + style.top = `${100 * y}%`; + style.left = `${100 * x}%`; + style.width = `${100 * width}%`; + style.height = `${100 * height}%`; + } + #createSVG() { + const svg = DrawLayer._svgFactory.create(1, 1, true); + this.#parent.append(svg); + svg.setAttribute("aria-hidden", true); + return svg; + } + #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; + } + #updateProperties(element, properties) { + for (const [key, value] of Object.entries(properties)) { + if (value === null) { + element.removeAttribute(key); + } else { + element.setAttribute(key, value); + } + } + } + draw(properties, isPathUpdatable = false, hasClip = false) { + const id = DrawLayer.#id++; + const root = this.#createSVG(); + 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) { + this.#toUpdate.set(id, path); + } + const clipPathId = hasClip ? this.#createClipPath(defs, pathId) : null; + const use = DrawLayer._svgFactory.createElement("use"); + root.append(use); + use.setAttribute("href", `#${pathId}`); + this.updateProperties(root, properties); + this.#mapping.set(id, root); + return { + id, + clipPathId: `url(#${clipPathId})` + }; + } + drawOutline(properties, mustRemoveSelfIntersections) { + const id = DrawLayer.#id++; + const root = this.#createSVG(); + 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); + this.#mapping.set(id, root); + return id; + } + finalizeDraw(id, properties) { + this.#toUpdate.delete(id); + this.updateProperties(id, properties); + } + updateProperties(elementOrId, properties) { + if (!properties) { + return; + } + const { + root, + bbox, + rootClass, + path + } = properties; + const element = typeof elementOrId === "number" ? this.#mapping.get(elementOrId) : elementOrId; + if (!element) { + return; + } + if (root) { + this.#updateProperties(element, root); + } + if (bbox) { + DrawLayer.#setBox(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; + this.#updateProperties(pathElement, path); + } + } + updateParent(id, layer) { + if (layer === this) { + return; + } + const root = this.#mapping.get(id); + if (!root) { + return; + } + layer.#parent.append(root); + this.#mapping.delete(id); + layer.#mapping.set(id, root); + } + remove(id) { + this.#toUpdate.delete(id); + if (this.#parent === null) { + return; + } + this.#mapping.get(id).remove(); + this.#mapping.delete(id); + } + destroy() { + this.#parent = null; + for (const root of this.#mapping.values()) { + root.remove(); + } + this.#mapping.clear(); + this.#toUpdate.clear(); + } +} + +;// ./src/pdf.js + + + + + + + + + + + + + + + +const pdfjsVersion = "5.2.133"; +const pdfjsBuild = "4f7761353"; +{ + 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: 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 +}; + +export { AbortException, AnnotationEditorLayer, AnnotationEditorParamsType, AnnotationEditorType, AnnotationEditorUIManager, AnnotationLayer, AnnotationMode, AnnotationType, ColorPicker, DOMSVGFactory, DrawLayer, util_FeatureTest as FeatureTest, GlobalWorkerOptions, util_ImageKind as ImageKind, InvalidPDFException, MathClamp, OPS, OutputScale, PDFDataRangeTransport, PDFDateString, PDFWorker, PasswordResponses, PermissionFlag, PixelsPerInch, RenderingCancelledException, ResponseException, SignatureExtractor, SupportedImageMimeTypes, TextLayer, TouchManager, Util, VerbosityLevel, XfaLayer, build, createValidAbsoluteUrl, fetchData, getDocument, getFilenameFromUrl, getPdfFilenameFromUrl, getUuid, getXfaPageViewport, isDataScheme, isPdfFile, isValidExplicitDest, noContextMenu, normalizeUnicode, setLayerDimensions, shadow, stopEvent, updateUrlHash, version }; + +//# sourceMappingURL=pdf.mjs.map \ No newline at end of file diff --git a/resources/js/pdfjs-5.2.133-dist/build/pdf.mjs.map b/resources/js/pdfjs-5.2.133-dist/build/pdf.mjs.map new file mode 100644 index 0000000..e681e9b --- /dev/null +++ b/resources/js/pdfjs-5.2.133-dist/build/pdf.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"pdf.mjs","mappings":"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,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAC7E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EACtE,MAAM,EAAE,MAAM,EAA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","sources":["webpack://pdf.js/./src/shared/util.js","webpack://pdf.js/./src/display/display_utils.js","webpack://pdf.js/./src/display/editor/toolbar.js","webpack://pdf.js/./src/display/editor/tools.js","webpack://pdf.js/./src/display/editor/alt_text.js","webpack://pdf.js/./src/display/touch_manager.js","webpack://pdf.js/./src/display/editor/editor.js","webpack://pdf.js/./src/shared/murmurhash3.js","webpack://pdf.js/./src/display/annotation_storage.js","webpack://pdf.js/./src/display/font_loader.js","webpack://pdf.js/./src/shared/message_handler.js","webpack://pdf.js/./src/display/canvas_factory.js","webpack://pdf.js/./src/display/cmap_reader_factory.js","webpack://pdf.js/./src/display/filter_factory.js","webpack://pdf.js/./src/display/standard_fontdata_factory.js","webpack://pdf.js/./src/display/wasm_factory.js","webpack://pdf.js/./src/display/node_utils.js","webpack://pdf.js/./src/display/pattern_helper.js","webpack://pdf.js/./src/shared/image_utils.js","webpack://pdf.js/./src/display/canvas.js","webpack://pdf.js/./src/display/worker_options.js","webpack://pdf.js/./src/display/metadata.js","webpack://pdf.js/./src/display/optional_content_config.js","webpack://pdf.js/./src/display/transport_stream.js","webpack://pdf.js/./src/display/content_disposition.js","webpack://pdf.js/./src/display/network_utils.js","webpack://pdf.js/./src/display/fetch_stream.js","webpack://pdf.js/./src/display/network.js","webpack://pdf.js/./src/display/node_stream.js","webpack://pdf.js/./src/display/text_layer.js","webpack://pdf.js/./src/display/xfa_text.js","webpack://pdf.js/./src/display/api.js","webpack://pdf.js/./src/shared/scripting_utils.js","webpack://pdf.js/./src/display/svg_factory.js","webpack://pdf.js/./src/display/xfa_layer.js","webpack://pdf.js/./src/display/annotation_layer.js","webpack://pdf.js/./src/display/editor/freetext.js","webpack://pdf.js/./src/display/editor/drawers/outline.js","webpack://pdf.js/./src/display/editor/drawers/freedraw.js","webpack://pdf.js/./src/display/editor/drawers/highlight.js","webpack://pdf.js/./src/display/editor/color_picker.js","webpack://pdf.js/./src/display/editor/highlight.js","webpack://pdf.js/./src/display/editor/draw.js","webpack://pdf.js/./src/display/editor/drawers/inkdraw.js","webpack://pdf.js/./src/display/editor/ink.js","webpack://pdf.js/./src/display/editor/drawers/contour.js","webpack://pdf.js/./src/display/editor/drawers/signaturedraw.js","webpack://pdf.js/./src/display/editor/signature.js","webpack://pdf.js/./src/display/editor/stamp.js","webpack://pdf.js/./src/display/editor/annotation_editor_layer.js","webpack://pdf.js/./src/display/draw_layer.js","webpack://pdf.js/./src/pdf.js"],"sourcesContent":["/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !(process.versions.electron && process.type && process.type !== \"browser\");\n\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Represent the percentage of the height of a single-line field over\n// the font size. Acrobat seems to use this value.\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n * - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n * `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n * - SAVE is used, on the worker-thread, when saving modified annotations.\n * - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n * annotations are rendered onto the canvas (i.e. by being included in the\n * operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n * and their `annotationMode`-option.\n * - IS_EDITING is used when editing is active in the viewer.\n * - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n * `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n ANY: 0x01,\n DISPLAY: 0x02,\n PRINT: 0x04,\n SAVE: 0x08,\n ANNOTATIONS_FORMS: 0x10,\n ANNOTATIONS_STORAGE: 0x20,\n ANNOTATIONS_DISABLE: 0x40,\n IS_EDITING: 0x80,\n OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_FORMS: 2,\n ENABLE_STORAGE: 3,\n};\n\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n DISABLE: -1,\n NONE: 0,\n FREETEXT: 3,\n HIGHLIGHT: 9,\n STAMP: 13,\n INK: 15,\n SIGNATURE: 101,\n};\n\nconst AnnotationEditorParamsType = {\n RESIZE: 1,\n CREATE: 2,\n FREETEXT_SIZE: 11,\n FREETEXT_COLOR: 12,\n FREETEXT_OPACITY: 13,\n INK_COLOR: 21,\n INK_THICKNESS: 22,\n INK_OPACITY: 23,\n HIGHLIGHT_COLOR: 31,\n HIGHLIGHT_DEFAULT_COLOR: 32,\n HIGHLIGHT_THICKNESS: 33,\n HIGHLIGHT_FREE: 34,\n HIGHLIGHT_SHOW_ALL: 35,\n DRAW_STEP: 41,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26,\n};\n\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n E: \"Mouse Enter\",\n X: \"Mouse Exit\",\n D: \"Mouse Down\",\n U: \"Mouse Up\",\n Fo: \"Focus\",\n Bl: \"Blur\",\n PO: \"PageOpen\",\n PC: \"PageClose\",\n PV: \"PageVisible\",\n PI: \"PageInvisible\",\n K: \"Keystroke\",\n F: \"Format\",\n V: \"Validate\",\n C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n WC: \"WillClose\",\n WS: \"WillSave\",\n DS: \"DidSave\",\n WP: \"WillPrint\",\n DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n O: \"PageOpen\",\n C: \"PageClose\",\n};\n\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n // PLEASE NOTE: We purposely keep any removed operators commented out, since\n // re-numbering the list would risk breaking third-party users.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n // beginAnnotations: 78,\n // endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n // paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n setStrokeTransparent: 92,\n setFillTransparent: 93,\n rawFillPath: 94,\n};\n\n// In order to have a switch statement that is fast (i.e. which use a jump\n// table), we need to have the OPS in a contiguous range.\nconst DrawOPS = {\n moveTo: 0,\n lineTo: 1,\n curveTo: 2,\n closePath: 3,\n};\n\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n // eslint-disable-next-line no-console\n console.log(`Info: ${msg}`);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n // eslint-disable-next-line no-console\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n switch (url?.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n if (!url) {\n return null;\n }\n if (options && typeof url === \"string\") {\n // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n const dots = url.match(/\\./g);\n // Avoid accidentally matching a *relative* URL pointing to a file named\n // e.g. \"www.pdf\" or similar.\n if (dots?.length >= 2) {\n url = `http://${url}`;\n }\n }\n\n // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n if (options.tryConvertEncoding) {\n try {\n url = stringToUTF8String(url);\n } catch {}\n }\n }\n\n const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\n}\n\n/**\n * Remove, or replace, the hash property of the URL.\n *\n * @param {URL|string} url - The absolute, or relative, URL.\n * @param {string} hash - The hash property (use an empty string to remove it).\n * @param {boolean} [allowRel] - Allow relative URLs.\n * @returns {string} The resulting URL string.\n */\nfunction updateUrlHash(url, hash, allowRel = false) {\n const res = URL.parse(url);\n if (res) {\n res.hash = hash;\n return res.href;\n }\n // Support well-formed relative URLs, necessary for `web/app.js` in GENERIC\n // builds, by optionally falling back to string parsing.\n if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n }\n return \"\";\n}\n\nfunction shadow(obj, prop, value, nonSerializable = false) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n prop in obj,\n `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n );\n }\n Object.defineProperty(obj, prop, {\n value,\n enumerable: !nonSerializable,\n configurable: true,\n writable: false,\n });\n return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n // eslint-disable-next-line no-shadow\n function BaseException(message, name) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseException\n ) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = name;\n }\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n\n return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg, \"PasswordException\");\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg, \"UnknownErrorException\");\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"InvalidPDFException\");\n }\n}\n\nclass ResponseException extends BaseException {\n constructor(msg, status, missing) {\n super(msg, \"ResponseException\");\n this.status = status;\n this.missing = missing;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n constructor(msg) {\n super(msg, \"FormatError\");\n }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n constructor(msg) {\n super(msg, \"AbortException\");\n }\n}\n\nfunction bytesToString(bytes) {\n if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n unreachable(\"Invalid argument for bytesToString\");\n }\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n const strBuf = [];\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n if (typeof str !== \"string\") {\n unreachable(\"Invalid argument for stringToBytes\");\n }\n const length = str.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\nfunction string32(value) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n `string32: Unexpected input \"${value}\".`\n );\n }\n return String.fromCharCode(\n (value >> 24) & 0xff,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n );\n}\n\nfunction objectSize(obj) {\n return Object.keys(obj).length;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n try {\n new Function(\"\"); // eslint-disable-line no-new, no-new-func\n return true;\n } catch {\n return false;\n }\n}\n\nclass FeatureTest {\n static get isLittleEndian() {\n return shadow(this, \"isLittleEndian\", isLittleEndian());\n }\n\n static get isEvalSupported() {\n return shadow(this, \"isEvalSupported\", isEvalSupported());\n }\n\n static get isOffscreenCanvasSupported() {\n return shadow(\n this,\n \"isOffscreenCanvasSupported\",\n typeof OffscreenCanvas !== \"undefined\"\n );\n }\n\n static get isImageDecoderSupported() {\n return shadow(\n this,\n \"isImageDecoderSupported\",\n typeof ImageDecoder !== \"undefined\"\n );\n }\n\n static get platform() {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n (typeof navigator !== \"undefined\" &&\n typeof navigator?.platform === \"string\" &&\n typeof navigator?.userAgent === \"string\")\n ) {\n const { platform, userAgent } = navigator;\n\n return shadow(this, \"platform\", {\n isAndroid: userAgent.includes(\"Android\"),\n isLinux: platform.includes(\"Linux\"),\n isMac: platform.includes(\"Mac\"),\n isWindows: platform.includes(\"Win\"),\n isFirefox:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n userAgent.includes(\"Firefox\"),\n });\n }\n return shadow(this, \"platform\", {\n isAndroid: false,\n isLinux: false,\n isMac: false,\n isWindows: false,\n isFirefox: false,\n });\n }\n\n static get isCSSRoundSupported() {\n return shadow(\n this,\n \"isCSSRoundSupported\",\n globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\")\n );\n }\n}\n\nconst hexNumbers = Array.from(Array(256).keys(), n =>\n n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n static makeHexColor(r, g, b) {\n return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n }\n\n // Apply a scaling matrix to some min/max values.\n // If a scaling factor is negative then min and max must be\n // swapped.\n static scaleMinMax(transform, minMax) {\n let temp;\n if (transform[0]) {\n if (transform[0] < 0) {\n temp = minMax[0];\n minMax[0] = minMax[2];\n minMax[2] = temp;\n }\n minMax[0] *= transform[0];\n minMax[2] *= transform[0];\n\n if (transform[3] < 0) {\n temp = minMax[1];\n minMax[1] = minMax[3];\n minMax[3] = temp;\n }\n minMax[1] *= transform[3];\n minMax[3] *= transform[3];\n } else {\n temp = minMax[0];\n minMax[0] = minMax[1];\n minMax[1] = temp;\n temp = minMax[2];\n minMax[2] = minMax[3];\n minMax[3] = temp;\n\n if (transform[1] < 0) {\n temp = minMax[1];\n minMax[1] = minMax[3];\n minMax[3] = temp;\n }\n minMax[1] *= transform[1];\n minMax[3] *= transform[1];\n\n if (transform[2] < 0) {\n temp = minMax[0];\n minMax[0] = minMax[2];\n minMax[2] = temp;\n }\n minMax[0] *= transform[2];\n minMax[2] *= transform[2];\n }\n minMax[0] += transform[4];\n minMax[1] += transform[5];\n minMax[2] += transform[4];\n minMax[3] += transform[5];\n }\n\n // Concatenates two transformation matrices together and returns the result.\n static transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n ];\n }\n\n // For 2d affine transforms\n static applyTransform(p, m, pos = 0) {\n const p0 = p[pos];\n const p1 = p[pos + 1];\n p[pos] = p0 * m[0] + p1 * m[2] + m[4];\n p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];\n }\n\n static applyTransformToBezier(p, transform, pos = 0) {\n const m0 = transform[0];\n const m1 = transform[1];\n const m2 = transform[2];\n const m3 = transform[3];\n const m4 = transform[4];\n const m5 = transform[5];\n for (let i = 0; i < 6; i += 2) {\n const pI = p[pos + i];\n const pI1 = p[pos + i + 1];\n p[pos + i] = pI * m0 + pI1 * m2 + m4;\n p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;\n }\n }\n\n static applyInverseTransform(p, m) {\n const p0 = p[0];\n const p1 = p[1];\n const d = m[0] * m[3] - m[1] * m[2];\n p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n }\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n static axialAlignedBoundingBox(rect, transform, output) {\n const m0 = transform[0];\n const m1 = transform[1];\n const m2 = transform[2];\n const m3 = transform[3];\n const m4 = transform[4];\n const m5 = transform[5];\n const r0 = rect[0];\n const r1 = rect[1];\n const r2 = rect[2];\n const r3 = rect[3];\n\n let a0 = m0 * r0 + m4;\n let a2 = a0;\n let a1 = m0 * r2 + m4;\n let a3 = a1;\n let b0 = m3 * r1 + m5;\n let b2 = b0;\n let b1 = m3 * r3 + m5;\n let b3 = b1;\n\n if (m1 !== 0 || m2 !== 0) {\n // Non-scaling matrix: shouldn't be frequent.\n const m1r0 = m1 * r0;\n const m1r2 = m1 * r2;\n const m2r1 = m2 * r1;\n const m2r3 = m2 * r3;\n a0 += m2r1;\n a3 += m2r1;\n a1 += m2r3;\n a2 += m2r3;\n b0 += m1r0;\n b3 += m1r0;\n b1 += m1r2;\n b2 += m1r2;\n }\n\n output[0] = Math.min(output[0], a0, a1, a2, a3);\n output[1] = Math.min(output[1], b0, b1, b2, b3);\n output[2] = Math.max(output[2], a0, a1, a2, a3);\n output[3] = Math.max(output[3], b0, b1, b2, b3);\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n return [\n m[3] / d,\n -m[1] / d,\n -m[2] / d,\n m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d,\n (m[4] * m[1] - m[5] * m[0]) / d,\n ];\n }\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n static singularValueDecompose2dScale(matrix, output) {\n const m0 = matrix[0];\n const m1 = matrix[1];\n const m2 = matrix[2];\n const m3 = matrix[3];\n // Multiply matrix m with its transpose.\n const a = m0 ** 2 + m1 ** 2;\n const b = m0 * m2 + m1 * m3;\n const c = m2 ** 2 + m3 ** 2;\n\n // Solve the second degree polynomial to get roots.\n const first = (a + c) / 2;\n const second = Math.sqrt(first ** 2 - (a * c - b ** 2));\n output[0] = Math.sqrt(first + second || 1);\n output[1] = Math.sqrt(first - second || 1);\n }\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n static normalizeRect(rect) {\n const r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n }\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'null'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n static intersect(rect1, rect2) {\n const xLow = Math.max(\n Math.min(rect1[0], rect1[2]),\n Math.min(rect2[0], rect2[2])\n );\n const xHigh = Math.min(\n Math.max(rect1[0], rect1[2]),\n Math.max(rect2[0], rect2[2])\n );\n if (xLow > xHigh) {\n return null;\n }\n const yLow = Math.max(\n Math.min(rect1[1], rect1[3]),\n Math.min(rect2[1], rect2[3])\n );\n const yHigh = Math.min(\n Math.max(rect1[1], rect1[3]),\n Math.max(rect2[1], rect2[3])\n );\n if (yLow > yHigh) {\n return null;\n }\n\n return [xLow, yLow, xHigh, yHigh];\n }\n\n static pointBoundingBox(x, y, minMax) {\n minMax[0] = Math.min(minMax[0], x);\n minMax[1] = Math.min(minMax[1], y);\n minMax[2] = Math.max(minMax[2], x);\n minMax[3] = Math.max(minMax[3], y);\n }\n\n static rectBoundingBox(x0, y0, x1, y1, minMax) {\n minMax[0] = Math.min(minMax[0], x0, x1);\n minMax[1] = Math.min(minMax[1], y0, y1);\n minMax[2] = Math.max(minMax[2], x0, x1);\n minMax[3] = Math.max(minMax[3], y0, y1);\n }\n\n static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n if (t <= 0 || t >= 1) {\n return;\n }\n const mt = 1 - t;\n const tt = t * t;\n const ttt = tt * t;\n const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n minMax[0] = Math.min(minMax[0], x);\n minMax[1] = Math.min(minMax[1], y);\n minMax[2] = Math.max(minMax[2], x);\n minMax[3] = Math.max(minMax[3], y);\n }\n\n static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) >= 1e-12) {\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n -c / b,\n minMax\n );\n }\n return;\n }\n\n const delta = b ** 2 - 4 * c * a;\n if (delta < 0) {\n return;\n }\n const sqrtDelta = Math.sqrt(delta);\n const a2 = 2 * a;\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n (-b + sqrtDelta) / a2,\n minMax\n );\n this.#getExtremumOnCurve(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n (-b - sqrtDelta) / a2,\n minMax\n );\n }\n\n // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n minMax[0] = Math.min(minMax[0], x0, x3);\n minMax[1] = Math.min(minMax[1], y0, y3);\n minMax[2] = Math.max(minMax[2], x0, x3);\n minMax[3] = Math.max(minMax[3], y0, y3);\n\n this.#getExtremum(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n 3 * (-x0 + 3 * (x1 - x2) + x3),\n 6 * (x0 - 2 * x1 + x2),\n 3 * (x1 - x0),\n minMax\n );\n this.#getExtremum(\n x0,\n x1,\n x2,\n x3,\n y0,\n y1,\n y2,\n y3,\n 3 * (-y0 + 3 * (y1 - y2) + y3),\n 6 * (y0 - 2 * y1 + y2),\n 3 * (y1 - y0),\n minMax\n );\n }\n}\n\nconst PDFStringTranslateTable = [\n 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,\n 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 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,\n 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,\n 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,\n 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str) {\n // See section 7.9.2.2 Text String Type.\n // The string can contain some language codes bracketed with 0x0b,\n // so we must remove them.\n if (str[0] >= \"\\xEF\") {\n let encoding;\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n encoding = \"utf-16be\";\n if (str.length % 2 === 1) {\n str = str.slice(0, -1);\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n encoding = \"utf-16le\";\n if (str.length % 2 === 1) {\n str = str.slice(0, -1);\n }\n } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n encoding = \"utf-8\";\n }\n\n if (encoding) {\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(str);\n const decoded = decoder.decode(buffer);\n if (!decoded.includes(\"\\x1b\")) {\n return decoded;\n }\n return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n } catch (ex) {\n warn(`stringToPDFString: \"${ex}\".`);\n }\n }\n }\n // ISO Latin 1\n const strBuf = [];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const charCode = str.charCodeAt(i);\n if (charCode === 0x1b) {\n // eslint-disable-next-line no-empty\n while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n continue;\n }\n const code = PDFStringTranslateTable[charCode];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0, ii = arr1.length; i < ii; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n const buffer = [\n date.getUTCFullYear().toString(),\n (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n date.getUTCDate().toString().padStart(2, \"0\"),\n date.getUTCHours().toString().padStart(2, \"0\"),\n date.getUTCMinutes().toString().padStart(2, \"0\"),\n date.getUTCSeconds().toString().padStart(2, \"0\"),\n ];\n\n return buffer.join(\"\");\n}\n\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n if (!NormalizeRegex) {\n // In order to generate the following regex:\n // - create a PDF containing all the chars in the range 0000-FFFF with\n // a NFKC which is different of the char.\n // - copy and paste all those chars and get the ones where NFKC is\n // required.\n // It appears that most the chars here contain some ligatures.\n NormalizeRegex =\n /([\\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;\n NormalizationMap = new Map([[\"ſt\", \"ſt\"]]);\n }\n return str.replaceAll(NormalizeRegex, (_, p1, p2) =>\n p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2)\n );\n}\n\nfunction getUuid() {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n const buf = new Uint8Array(32);\n crypto.getRandomValues(buf);\n return bytesToString(buf);\n}\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\n\nfunction _isValidExplicitDest(validRef, validName, dest) {\n if (!Array.isArray(dest) || dest.length < 2) {\n return false;\n }\n const [page, zoom, ...args] = dest;\n if (!validRef(page) && !Number.isInteger(page)) {\n return false;\n }\n if (!validName(zoom)) {\n return false;\n }\n const argsLen = args.length;\n let allowNull = true;\n switch (zoom.name) {\n case \"XYZ\":\n if (argsLen < 2 || argsLen > 3) {\n return false;\n }\n break;\n case \"Fit\":\n case \"FitB\":\n return argsLen === 0;\n case \"FitH\":\n case \"FitBH\":\n case \"FitV\":\n case \"FitBV\":\n if (argsLen > 1) {\n return false;\n }\n break;\n case \"FitR\":\n if (argsLen !== 4) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (const arg of args) {\n if (typeof arg === \"number\" || (allowNull && arg === null)) {\n continue;\n }\n return false;\n }\n return true;\n}\n\n// TOOD: Replace all occurrences of this function with `Math.clamp` once\n// https://github.com/tc39/proposal-math-clamp/ is generally available.\nfunction MathClamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\n// TODO: Remove this once `Uint8Array.prototype.toHex` is generally available.\nfunction toHexUtil(arr) {\n if (Uint8Array.prototype.toHex) {\n return arr.toHex();\n }\n return Array.from(arr, num => hexNumbers[num]).join(\"\");\n}\n\n// TODO: Remove this once `Uint8Array.prototype.toBase64` is generally\n// available.\nfunction toBase64Util(arr) {\n if (Uint8Array.prototype.toBase64) {\n return arr.toBase64();\n }\n return btoa(bytesToString(arr));\n}\n\n// TODO: Remove this once `Uint8Array.fromBase64` is generally available.\nfunction fromBase64Util(str) {\n if (Uint8Array.fromBase64) {\n return Uint8Array.fromBase64(str);\n }\n return stringToBytes(atob(str));\n}\n\n// TODO: Remove this once https://bugzilla.mozilla.org/show_bug.cgi?id=1928493\n// is fixed.\nif (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) &&\n typeof Promise.try !== \"function\"\n) {\n Promise.try = function (fn, ...args) {\n return new Promise(resolve => {\n resolve(fn(...args));\n });\n };\n}\n\n// TODO: Remove this once the `javascript.options.experimental.math_sumprecise`\n// preference is removed from Firefox.\nif (typeof Math.sumPrecise !== \"function\") {\n // Note that this isn't a \"proper\" polyfill, but since we're only using it to\n // replace `Array.prototype.reduce()` invocations it should be fine.\n Math.sumPrecise = function (numbers) {\n return numbers.reduce((a, b) => a + b, 0);\n };\n}\n\nif (\n typeof PDFJSDev !== \"undefined\" &&\n !PDFJSDev.test(\"SKIP_BABEL\") &&\n typeof AbortSignal.any !== \"function\"\n) {\n AbortSignal.any = function (iterable) {\n const ac = new AbortController();\n const { signal } = ac;\n\n // Return immediately if any of the signals are already aborted.\n for (const s of iterable) {\n if (s.aborted) {\n ac.abort(s.reason);\n return signal;\n }\n }\n // Register \"abort\" listeners for all signals.\n for (const s of iterable) {\n s.addEventListener(\n \"abort\",\n () => {\n ac.abort(s.reason);\n },\n { signal } // Automatically remove the listener.\n );\n }\n\n return signal;\n };\n}\n\nexport {\n _isValidExplicitDest,\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationEditorParamsType,\n AnnotationEditorPrefix,\n AnnotationEditorType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMode,\n AnnotationPrefix,\n AnnotationReplyType,\n AnnotationType,\n assert,\n BaseException,\n BASELINE_FACTOR,\n bytesToString,\n createValidAbsoluteUrl,\n DocumentActionEventType,\n DrawOPS,\n FeatureTest,\n FONT_IDENTITY_MATRIX,\n FormatError,\n fromBase64Util,\n getModificationDate,\n getUuid,\n getVerbosityLevel,\n hexNumbers,\n ImageKind,\n info,\n InvalidPDFException,\n isArrayEqual,\n isNodeJS,\n LINE_DESCENT_FACTOR,\n LINE_FACTOR,\n MathClamp,\n normalizeUnicode,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n RenderingIntentFlag,\n ResponseException,\n setVerbosityLevel,\n shadow,\n string32,\n stringToBytes,\n stringToPDFString,\n stringToUTF8String,\n TextRenderingMode,\n toBase64Util,\n toHexUtil,\n UnknownErrorException,\n unreachable,\n updateUrlHash,\n utf8StringToString,\n Util,\n VerbosityLevel,\n warn,\n};\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseException,\n FeatureTest,\n shadow,\n Util,\n warn,\n} from \"../shared/util.js\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass PixelsPerInch {\n static CSS = 96.0;\n\n static PDF = 72.0;\n\n static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\n\nasync function fetchData(url, type = \"text\") {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n isValidFetchUrl(url, document.baseURI)\n ) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n switch (type) {\n case \"arraybuffer\":\n return response.arrayBuffer();\n case \"blob\":\n return response.blob();\n case \"json\":\n return response.json();\n }\n return response.text();\n }\n\n // The Fetch API is not supported.\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, /* async = */ true);\n request.responseType = type;\n\n request.onreadystatechange = () => {\n if (request.readyState !== XMLHttpRequest.DONE) {\n return;\n }\n if (request.status === 200 || request.status === 0) {\n switch (type) {\n case \"arraybuffer\":\n case \"blob\":\n case \"json\":\n resolve(request.response);\n return;\n }\n resolve(request.responseText);\n return;\n }\n reject(new Error(request.statusText));\n };\n\n request.send(null);\n });\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array} viewBox - The xMin, yMin, xMax and\n * yMax coordinates.\n * @property {number} userUnit - The size of units.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n * default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n * default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n * viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n * in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n /**\n * @param {PageViewportParameters}\n */\n constructor({\n viewBox,\n userUnit,\n scale,\n rotation,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n }) {\n this.viewBox = viewBox;\n this.userUnit = userUnit;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n scale *= userUnit; // Take the userUnit into account.\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n const centerX = (viewBox[2] + viewBox[0]) / 2;\n const centerY = (viewBox[3] + viewBox[1]) / 2;\n let rotateA, rotateB, rotateC, rotateD;\n // Normalize the rotation, by clamping it to the [0, 360) range.\n rotation %= 360;\n if (rotation < 0) {\n rotation += 360;\n }\n switch (rotation) {\n case 180:\n rotateA = -1;\n rotateB = 0;\n rotateC = 0;\n rotateD = 1;\n break;\n case 90:\n rotateA = 0;\n rotateB = 1;\n rotateC = 1;\n rotateD = 0;\n break;\n case 270:\n rotateA = 0;\n rotateB = -1;\n rotateC = -1;\n rotateD = 0;\n break;\n case 0:\n rotateA = 1;\n rotateB = 0;\n rotateC = 0;\n rotateD = -1;\n break;\n default:\n throw new Error(\n \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n );\n }\n\n if (dontFlip) {\n rotateC = -rotateC;\n rotateD = -rotateD;\n }\n\n let offsetCanvasX, offsetCanvasY;\n let width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = (viewBox[3] - viewBox[1]) * scale;\n height = (viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = (viewBox[2] - viewBox[0]) * scale;\n height = (viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n ];\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * The original, un-scaled, viewport dimensions.\n * @type {Object}\n */\n get rawDims() {\n const dims = this.viewBox;\n\n return shadow(this, \"rawDims\", {\n pageWidth: dims[2] - dims[0],\n pageHeight: dims[3] - dims[1],\n pageX: dims[0],\n pageY: dims[1],\n });\n }\n\n /**\n * Clones viewport, with optional additional properties.\n * @param {PageViewportCloneParameters} [params]\n * @returns {PageViewport} Cloned viewport.\n */\n clone({\n scale = this.scale,\n rotation = this.rotation,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.viewBox.slice(),\n userUnit: this.userUnit,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * Converts PDF point to the viewport coordinates. For examples, useful for\n * converting PDF location into canvas pixel coordinates.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Array} Array containing `x`- and `y`-coordinates of the\n * point in the viewport coordinate space.\n * @see {@link convertToPdfPoint}\n * @see {@link convertToViewportRectangle}\n */\n convertToViewportPoint(x, y) {\n const p = [x, y];\n Util.applyTransform(p, this.transform);\n return p;\n }\n\n /**\n * Converts PDF rectangle to the viewport coordinates.\n * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n * @returns {Array} Array containing corresponding coordinates of the\n * rectangle in the viewport coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToViewportRectangle(rect) {\n const topLeft = [rect[0], rect[1]];\n Util.applyTransform(topLeft, this.transform);\n const bottomRight = [rect[2], rect[3]];\n Util.applyTransform(bottomRight, this.transform);\n return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n }\n\n /**\n * Converts viewport coordinates to the PDF location. For examples, useful\n * for converting canvas pixel location into PDF one.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Array} Array containing `x`- and `y`-coordinates of the\n * point in the PDF coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToPdfPoint(x, y) {\n const p = [x, y];\n Util.applyInverseTransform(p, this.transform);\n return p;\n }\n}\n\nclass RenderingCancelledException extends BaseException {\n constructor(msg, extraDelay = 0) {\n super(msg, \"RenderingCancelledException\");\n this.extraDelay = extraDelay;\n }\n}\n\nfunction isDataScheme(url) {\n const ii = url.length;\n let i = 0;\n while (i < ii && url[i].trim() === \"\") {\n i++;\n }\n return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @returns {string}\n */\nfunction getFilenameFromUrl(url) {\n [url] = url.split(/[#?]/, 1);\n return url.substring(url.lastIndexOf(\"/\") + 1);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n if (typeof url !== \"string\") {\n return defaultFilename;\n }\n if (isDataScheme(url)) {\n warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n const splitURI = reURI.exec(url);\n let suggestedFilename =\n reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes(\"%\")) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename = reFilename.exec(\n decodeURIComponent(suggestedFilename)\n )[0];\n } catch {\n // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nclass StatTimer {\n started = Object.create(null);\n\n times = [];\n\n time(name) {\n if (name in this.started) {\n warn(`Timer is already running for ${name}`);\n }\n this.started[name] = Date.now();\n }\n\n timeEnd(name) {\n if (!(name in this.started)) {\n warn(`Timer has not been started for ${name}`);\n }\n this.times.push({\n name,\n start: this.started[name],\n end: Date.now(),\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n }\n\n toString() {\n // Find the longest name for padding purposes.\n const outBuf = [];\n let longest = 0;\n for (const { name } of this.times) {\n longest = Math.max(name.length, longest);\n }\n for (const { name, start, end } of this.times) {\n outBuf.push(`${name.padEnd(longest)} ${end - start}ms\\n`);\n }\n return outBuf.join(\"\");\n }\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: isValidFetchUrl\");\n }\n const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n // The Fetch API only supports the http/https protocols, and not file/ftp.\n return res?.protocol === \"http:\" || res?.protocol === \"https:\";\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenu(e) {\n e.preventDefault();\n}\n\nfunction stopEvent(e) {\n e.preventDefault();\n e.stopPropagation();\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n // eslint-disable-next-line no-console\n console.log(\"Deprecated API usage: \" + details);\n}\n\nclass PDFDateString {\n static #regex;\n\n /**\n * Convert a PDF date string to a JavaScript `Date` object.\n *\n * The PDF date string format is described in section 7.9.4 of the official\n * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n * edition) Adobe describes the same format including a trailing apostrophe.\n * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n * them. We ignore all apostrophes as they are not necessary for date parsing.\n *\n * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n * parts of the date string).\n *\n * @param {string} input\n * @returns {Date|null}\n */\n static toDateObject(input) {\n if (!input || typeof input !== \"string\") {\n return null;\n }\n\n // Lazily initialize the regular expression.\n this.#regex ||= new RegExp(\n \"^D:\" + // Prefix (required)\n \"(\\\\d{4})\" + // Year (required)\n \"(\\\\d{2})?\" + // Month (optional)\n \"(\\\\d{2})?\" + // Day (optional)\n \"(\\\\d{2})?\" + // Hour (optional)\n \"(\\\\d{2})?\" + // Minute (optional)\n \"(\\\\d{2})?\" + // Second (optional)\n \"([Z|+|-])?\" + // Universal time relation (optional)\n \"(\\\\d{2})?\" + // Offset hour (optional)\n \"'?\" + // Splitting apostrophe (optional)\n \"(\\\\d{2})?\" + // Offset minute (optional)\n \"'?\" // Trailing apostrophe (optional)\n );\n\n // Optional fields that don't satisfy the requirements from the regular\n // expression (such as incorrect digit counts or numbers that are out of\n // range) will fall back the defaults from the specification.\n const matches = this.#regex.exec(input);\n if (!matches) {\n return null;\n }\n\n // JavaScript's `Date` object expects the month to be between 0 and 11\n // instead of 1 and 12, so we have to correct for that.\n const year = parseInt(matches[1], 10);\n let month = parseInt(matches[2], 10);\n month = month >= 1 && month <= 12 ? month - 1 : 0;\n let day = parseInt(matches[3], 10);\n day = day >= 1 && day <= 31 ? day : 1;\n let hour = parseInt(matches[4], 10);\n hour = hour >= 0 && hour <= 23 ? hour : 0;\n let minute = parseInt(matches[5], 10);\n minute = minute >= 0 && minute <= 59 ? minute : 0;\n let second = parseInt(matches[6], 10);\n second = second >= 0 && second <= 59 ? second : 0;\n const universalTimeRelation = matches[7] || \"Z\";\n let offsetHour = parseInt(matches[8], 10);\n offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n let offsetMinute = parseInt(matches[9], 10) || 0;\n offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n // Universal time relation 'Z' means that the local time is equal to the\n // universal time, whereas the relations '+'/'-' indicate that the local\n // time is later respectively earlier than the universal time. Every date\n // is normalized to universal time.\n if (universalTimeRelation === \"-\") {\n hour += offsetHour;\n minute += offsetMinute;\n } else if (universalTimeRelation === \"+\") {\n hour -= offsetHour;\n minute -= offsetMinute;\n }\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n }\n}\n\n/**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n */\nfunction getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {\n const { width, height } = xfaPage.attributes.style;\n const viewBox = [0, 0, parseInt(width), parseInt(height)];\n\n return new PageViewport({\n viewBox,\n userUnit: 1,\n scale,\n rotation,\n });\n}\n\nfunction getRGB(color) {\n if (color.startsWith(\"#\")) {\n const colorRGB = parseInt(color.slice(1), 16);\n return [\n (colorRGB & 0xff0000) >> 16,\n (colorRGB & 0x00ff00) >> 8,\n colorRGB & 0x0000ff,\n ];\n }\n\n if (color.startsWith(\"rgb(\")) {\n // getComputedStyle(...).color returns a `rgb(R, G, B)` color.\n return color\n .slice(/* \"rgb(\".length */ 4, -1) // Strip out \"rgb(\" and \")\".\n .split(\",\")\n .map(x => parseInt(x));\n }\n\n if (color.startsWith(\"rgba(\")) {\n return color\n .slice(/* \"rgba(\".length */ 5, -1) // Strip out \"rgba(\" and \")\".\n .split(\",\")\n .map(x => parseInt(x))\n .slice(0, 3);\n }\n\n warn(`Not a valid color format: \"${color}\"`);\n return [0, 0, 0];\n}\n\nfunction getColorValues(colors) {\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n // NOTE: The following does *not* affect `forced-colors: active` mode.\n span.style.colorScheme = \"only light\";\n document.body.append(span);\n for (const name of colors.keys()) {\n span.style.color = name;\n const computedColor = window.getComputedStyle(span).color;\n colors.set(name, getRGB(computedColor));\n }\n span.remove();\n}\n\nfunction getCurrentTransform(ctx) {\n const { a, b, c, d, e, f } = ctx.getTransform();\n return [a, b, c, d, e, f];\n}\n\nfunction getCurrentTransformInverse(ctx) {\n const { a, b, c, d, e, f } = ctx.getTransform().invertSelf();\n return [a, b, c, d, e, f];\n}\n\n/**\n * @param {HTMLDivElement} div\n * @param {PageViewport} viewport\n * @param {boolean} mustFlip\n * @param {boolean} mustRotate\n */\nfunction setLayerDimensions(\n div,\n viewport,\n mustFlip = false,\n mustRotate = true\n) {\n if (viewport instanceof PageViewport) {\n const { pageWidth, pageHeight } = viewport.rawDims;\n const { style } = div;\n const useRound = FeatureTest.isCSSRoundSupported;\n\n const w = `var(--total-scale-factor) * ${pageWidth}px`,\n h = `var(--total-scale-factor) * ${pageHeight}px`;\n const widthStr = useRound\n ? `round(down, ${w}, var(--scale-round-x))`\n : `calc(${w})`,\n heightStr = useRound\n ? `round(down, ${h}, var(--scale-round-y))`\n : `calc(${h})`;\n\n if (!mustFlip || viewport.rotation % 180 === 0) {\n style.width = widthStr;\n style.height = heightStr;\n } else {\n style.width = heightStr;\n style.height = widthStr;\n }\n }\n\n if (mustRotate) {\n div.setAttribute(\"data-main-rotation\", viewport.rotation);\n }\n}\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n constructor() {\n const { pixelRatio } = OutputScale;\n\n /**\n * @type {number} Horizontal scale.\n */\n this.sx = pixelRatio;\n\n /**\n * @type {number} Vertical scale.\n */\n this.sy = pixelRatio;\n }\n\n /**\n * @type {boolean} Returns `true` when scaling is required, `false` otherwise.\n */\n get scaled() {\n return this.sx !== 1 || this.sy !== 1;\n }\n\n /**\n * @type {boolean} Returns `true` when scaling is symmetric,\n * `false` otherwise.\n */\n get symmetric() {\n return this.sx === this.sy;\n }\n\n /**\n * @returns {boolean} Returns `true` if scaling was limited,\n * `false` otherwise.\n */\n limitCanvas(width, height, maxPixels, maxDim) {\n let maxAreaScale = Infinity,\n maxWidthScale = Infinity,\n maxHeightScale = Infinity;\n\n if (maxPixels > 0) {\n maxAreaScale = Math.sqrt(maxPixels / (width * height));\n }\n if (maxDim !== -1) {\n maxWidthScale = maxDim / width;\n maxHeightScale = maxDim / height;\n }\n const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);\n\n if (this.sx > maxScale || this.sy > maxScale) {\n this.sx = maxScale;\n this.sy = maxScale;\n return true;\n }\n return false;\n }\n\n static get pixelRatio() {\n return globalThis.devicePixelRatio || 1;\n }\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types\n// to know which types are supported by the browser.\nconst SupportedImageMimeTypes = [\n \"image/apng\",\n \"image/avif\",\n \"image/bmp\",\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/svg+xml\",\n \"image/webp\",\n \"image/x-icon\",\n];\n\nexport {\n deprecated,\n fetchData,\n getColorValues,\n getCurrentTransform,\n getCurrentTransformInverse,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getXfaPageViewport,\n isDataScheme,\n isPdfFile,\n isValidFetchUrl,\n noContextMenu,\n OutputScale,\n PageViewport,\n PDFDateString,\n PixelsPerInch,\n RenderingCancelledException,\n setLayerDimensions,\n StatTimer,\n stopEvent,\n SupportedImageMimeTypes,\n SVG_NS,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\n\nclass EditorToolbar {\n #toolbar = null;\n\n #colorPicker = null;\n\n #editor;\n\n #buttons = null;\n\n #altText = null;\n\n #signatureDescriptionButton = null;\n\n static #l10nRemove = null;\n\n constructor(editor) {\n this.#editor = editor;\n\n EditorToolbar.#l10nRemove ||= Object.freeze({\n freetext: \"pdfjs-editor-remove-freetext-button\",\n highlight: \"pdfjs-editor-remove-highlight-button\",\n ink: \"pdfjs-editor-remove-ink-button\",\n stamp: \"pdfjs-editor-remove-stamp-button\",\n signature: \"pdfjs-editor-remove-signature-button\",\n });\n }\n\n render() {\n const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n editToolbar.classList.add(\"editToolbar\", \"hidden\");\n editToolbar.setAttribute(\"role\", \"toolbar\");\n const signal = this.#editor._uiManager._signal;\n editToolbar.addEventListener(\"contextmenu\", noContextMenu, { signal });\n editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown, {\n signal,\n });\n\n const buttons = (this.#buttons = document.createElement(\"div\"));\n buttons.className = \"buttons\";\n editToolbar.append(buttons);\n\n const position = this.#editor.toolbarPosition;\n if (position) {\n const { style } = editToolbar;\n const x =\n this.#editor._uiManager.direction === \"ltr\"\n ? 1 - position[0]\n : position[0];\n style.insetInlineEnd = `${100 * x}%`;\n style.top = `calc(${\n 100 * position[1]\n }% + var(--editor-toolbar-vert-offset))`;\n }\n\n this.#addDeleteButton();\n\n return editToolbar;\n }\n\n get div() {\n return this.#toolbar;\n }\n\n static #pointerDown(e) {\n e.stopPropagation();\n }\n\n #focusIn(e) {\n this.#editor._focusEventsAllowed = false;\n stopEvent(e);\n }\n\n #focusOut(e) {\n this.#editor._focusEventsAllowed = true;\n stopEvent(e);\n }\n\n #addListenersToElement(element) {\n // If we're clicking on a button with the keyboard or with\n // the mouse, we don't want to trigger any focus events on\n // the editor.\n const signal = this.#editor._uiManager._signal;\n element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n capture: true,\n signal,\n });\n element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n capture: true,\n signal,\n });\n element.addEventListener(\"contextmenu\", noContextMenu, { signal });\n }\n\n hide() {\n this.#toolbar.classList.add(\"hidden\");\n this.#colorPicker?.hideDropdown();\n }\n\n show() {\n this.#toolbar.classList.remove(\"hidden\");\n this.#altText?.shown();\n }\n\n #addDeleteButton() {\n const { editorType, _uiManager } = this.#editor;\n\n const button = document.createElement(\"button\");\n button.className = \"delete\";\n button.tabIndex = 0;\n button.setAttribute(\"data-l10n-id\", EditorToolbar.#l10nRemove[editorType]);\n this.#addListenersToElement(button);\n button.addEventListener(\n \"click\",\n e => {\n _uiManager.delete();\n },\n { signal: _uiManager._signal }\n );\n this.#buttons.append(button);\n }\n\n get #divider() {\n const divider = document.createElement(\"div\");\n divider.className = \"divider\";\n return divider;\n }\n\n async addAltText(altText) {\n const button = await altText.render();\n this.#addListenersToElement(button);\n this.#buttons.prepend(button, this.#divider);\n this.#altText = altText;\n }\n\n addColorPicker(colorPicker) {\n this.#colorPicker = colorPicker;\n const button = colorPicker.renderButton();\n this.#addListenersToElement(button);\n this.#buttons.prepend(button, this.#divider);\n }\n\n async addEditSignatureButton(signatureManager) {\n const button = (this.#signatureDescriptionButton =\n await signatureManager.renderEditButton(this.#editor));\n this.#addListenersToElement(button);\n this.#buttons.prepend(button, this.#divider);\n }\n\n updateEditSignatureButton(description) {\n if (this.#signatureDescriptionButton) {\n this.#signatureDescriptionButton.title = description;\n }\n }\n\n remove() {\n this.#toolbar.remove();\n this.#colorPicker?.destroy();\n this.#colorPicker = null;\n }\n}\n\nclass HighlightToolbar {\n #buttons = null;\n\n #toolbar = null;\n\n #uiManager;\n\n constructor(uiManager) {\n this.#uiManager = uiManager;\n }\n\n #render() {\n const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n editToolbar.className = \"editToolbar\";\n editToolbar.setAttribute(\"role\", \"toolbar\");\n editToolbar.addEventListener(\"contextmenu\", noContextMenu, {\n signal: this.#uiManager._signal,\n });\n\n const buttons = (this.#buttons = document.createElement(\"div\"));\n buttons.className = \"buttons\";\n editToolbar.append(buttons);\n\n this.#addHighlightButton();\n\n return editToolbar;\n }\n\n #getLastPoint(boxes, isLTR) {\n let lastY = 0;\n let lastX = 0;\n for (const box of boxes) {\n const y = box.y + box.height;\n if (y < lastY) {\n continue;\n }\n const x = box.x + (isLTR ? box.width : 0);\n if (y > lastY) {\n lastX = x;\n lastY = y;\n continue;\n }\n if (isLTR) {\n if (x > lastX) {\n lastX = x;\n }\n } else if (x < lastX) {\n lastX = x;\n }\n }\n return [isLTR ? 1 - lastX : lastX, lastY];\n }\n\n show(parent, boxes, isLTR) {\n const [x, y] = this.#getLastPoint(boxes, isLTR);\n const { style } = (this.#toolbar ||= this.#render());\n parent.append(this.#toolbar);\n style.insetInlineEnd = `${100 * x}%`;\n style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n }\n\n hide() {\n this.#toolbar.remove();\n }\n\n #addHighlightButton() {\n const button = document.createElement(\"button\");\n button.className = \"highlightButton\";\n button.tabIndex = 0;\n button.setAttribute(\"data-l10n-id\", `pdfjs-highlight-floating-button1`);\n const span = document.createElement(\"span\");\n button.append(span);\n span.className = \"visuallyHidden\";\n span.setAttribute(\"data-l10n-id\", \"pdfjs-highlight-floating-button-label\");\n const signal = this.#uiManager._signal;\n button.addEventListener(\"contextmenu\", noContextMenu, { signal });\n button.addEventListener(\n \"click\",\n () => {\n this.#uiManager.highlightSelection(\"floating_button\");\n },\n { signal }\n );\n this.#buttons.append(button);\n }\n}\n\nexport { EditorToolbar, HighlightToolbar };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./editor.js\").AnnotationEditor} AnnotationEditor */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n AnnotationEditorParamsType,\n AnnotationEditorPrefix,\n AnnotationEditorType,\n FeatureTest,\n getUuid,\n shadow,\n Util,\n warn,\n} from \"../../shared/util.js\";\nimport {\n fetchData,\n getColorValues,\n getRGB,\n PixelsPerInch,\n stopEvent,\n} from \"../display_utils.js\";\nimport { HighlightToolbar } from \"./toolbar.js\";\n\nfunction bindEvents(obj, element, names) {\n for (const name of names) {\n element.addEventListener(name, obj[name].bind(obj));\n }\n}\n\n/**\n * Class to create some unique ids for the different editors.\n */\nclass IdManager {\n #id = 0;\n\n constructor() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"reset\", {\n value: () => (this.#id = 0),\n });\n }\n }\n\n /**\n * Get a unique id.\n * @returns {string}\n */\n get id() {\n return `${AnnotationEditorPrefix}${this.#id++}`;\n }\n}\n\n/**\n * Class to manage the images used by the editors.\n * The main idea is to try to minimize the memory used by the images.\n * The images are cached and reused when possible\n * We use a refCounter to know when an image is not used anymore but we need to\n * be able to restore an image after a remove+undo, so we keep a file reference\n * or an url one.\n */\nclass ImageManager {\n #baseId = getUuid();\n\n #id = 0;\n\n #cache = null;\n\n static get _isSVGFittingCanvas() {\n // By default, Firefox doesn't rescale without preserving the aspect ratio\n // when drawing an SVG image on a canvas, see https://bugzilla.mozilla.org/1547776.\n // The \"workaround\" is to append \"svgView(preserveAspectRatio(none))\" to the\n // url, but according to comment #15, it seems that it leads to unexpected\n // behavior in Safari.\n const svg = `data:image/svg+xml;charset=UTF-8,`;\n const canvas = new OffscreenCanvas(1, 3);\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n const image = new Image();\n image.src = svg;\n const promise = image.decode().then(() => {\n ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n });\n\n return shadow(this, \"_isSVGFittingCanvas\", promise);\n }\n\n async #get(key, rawData) {\n this.#cache ||= new Map();\n let data = this.#cache.get(key);\n if (data === null) {\n // We already tried to load the image but it failed.\n return null;\n }\n if (data?.bitmap) {\n data.refCounter += 1;\n return data;\n }\n try {\n data ||= {\n bitmap: null,\n id: `image_${this.#baseId}_${this.#id++}`,\n refCounter: 0,\n isSvg: false,\n };\n let image;\n if (typeof rawData === \"string\") {\n data.url = rawData;\n image = await fetchData(rawData, \"blob\");\n } else if (rawData instanceof File) {\n image = data.file = rawData;\n } else if (rawData instanceof Blob) {\n image = rawData;\n }\n\n if (image.type === \"image/svg+xml\") {\n // Unfortunately, createImageBitmap doesn't work with SVG images.\n // (see https://bugzilla.mozilla.org/1841972).\n const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n const fileReader = new FileReader();\n const imageElement = new Image();\n const imagePromise = new Promise((resolve, reject) => {\n imageElement.onload = () => {\n data.bitmap = imageElement;\n data.isSvg = true;\n resolve();\n };\n fileReader.onload = async () => {\n const url = (data.svgUrl = fileReader.result);\n // We need to set the preserveAspectRatio to none in order to let\n // the image fits the canvas when resizing.\n imageElement.src = (await mustRemoveAspectRatioPromise)\n ? `${url}#svgView(preserveAspectRatio(none))`\n : url;\n };\n imageElement.onerror = fileReader.onerror = reject;\n });\n fileReader.readAsDataURL(image);\n await imagePromise;\n } else {\n data.bitmap = await createImageBitmap(image);\n }\n data.refCounter = 1;\n } catch (e) {\n warn(e);\n data = null;\n }\n this.#cache.set(key, data);\n if (data) {\n this.#cache.set(data.id, data);\n }\n return data;\n }\n\n async getFromFile(file) {\n const { lastModified, name, size, type } = file;\n return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n }\n\n async getFromUrl(url) {\n return this.#get(url, url);\n }\n\n async getFromBlob(id, blobPromise) {\n const blob = await blobPromise;\n return this.#get(id, blob);\n }\n\n async getFromId(id) {\n this.#cache ||= new Map();\n const data = this.#cache.get(id);\n if (!data) {\n return null;\n }\n if (data.bitmap) {\n data.refCounter += 1;\n return data;\n }\n\n if (data.file) {\n return this.getFromFile(data.file);\n }\n if (data.blobPromise) {\n const { blobPromise } = data;\n delete data.blobPromise;\n return this.getFromBlob(data.id, blobPromise);\n }\n return this.getFromUrl(data.url);\n }\n\n getFromCanvas(id, canvas) {\n this.#cache ||= new Map();\n let data = this.#cache.get(id);\n if (data?.bitmap) {\n data.refCounter += 1;\n return data;\n }\n const offscreen = new OffscreenCanvas(canvas.width, canvas.height);\n const ctx = offscreen.getContext(\"2d\");\n ctx.drawImage(canvas, 0, 0);\n data = {\n bitmap: offscreen.transferToImageBitmap(),\n id: `image_${this.#baseId}_${this.#id++}`,\n refCounter: 1,\n isSvg: false,\n };\n this.#cache.set(id, data);\n this.#cache.set(data.id, data);\n return data;\n }\n\n getSvgUrl(id) {\n const data = this.#cache.get(id);\n if (!data?.isSvg) {\n return null;\n }\n return data.svgUrl;\n }\n\n deleteId(id) {\n this.#cache ||= new Map();\n const data = this.#cache.get(id);\n if (!data) {\n return;\n }\n data.refCounter -= 1;\n if (data.refCounter !== 0) {\n return;\n }\n const { bitmap } = data;\n if (!data.url && !data.file) {\n // The image has no way to be restored (ctrl+z) so we must fix that.\n const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n const ctx = canvas.getContext(\"bitmaprenderer\");\n ctx.transferFromImageBitmap(bitmap);\n data.blobPromise = canvas.convertToBlob();\n }\n\n bitmap.close?.();\n data.bitmap = null;\n }\n\n // We can use the id only if it belongs this manager.\n // We must take care of having the right manager because we can copy/paste\n // some images from other documents, hence it'd be a pity to use an id from an\n // other manager.\n isValidId(id) {\n return id.startsWith(`image_${this.#baseId}_`);\n }\n}\n\n/**\n * Class to handle undo/redo.\n * Commands are just saved in a buffer.\n * If we hit some memory issues we could likely use a circular buffer.\n * It has to be used as a singleton.\n */\nclass CommandManager {\n #commands = [];\n\n #locked = false;\n\n #maxSize;\n\n #position = -1;\n\n constructor(maxSize = 128) {\n this.#maxSize = maxSize;\n }\n\n /**\n * @typedef {Object} addOptions\n * @property {function} cmd\n * @property {function} undo\n * @property {function} [post]\n * @property {boolean} mustExec\n * @property {number} type\n * @property {boolean} overwriteIfSameType\n * @property {boolean} keepUndo\n */\n\n /**\n * Add a new couple of commands to be used in case of redo/undo.\n * @param {addOptions} options\n */\n add({\n cmd,\n undo,\n post,\n mustExec,\n type = NaN,\n overwriteIfSameType = false,\n keepUndo = false,\n }) {\n if (mustExec) {\n cmd();\n }\n\n if (this.#locked) {\n return;\n }\n\n const save = { cmd, undo, post, type };\n if (this.#position === -1) {\n if (this.#commands.length > 0) {\n // All the commands have been undone and then a new one is added\n // hence we clear the queue.\n this.#commands.length = 0;\n }\n this.#position = 0;\n this.#commands.push(save);\n return;\n }\n\n if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n // For example when we change a color we don't want to\n // be able to undo all the steps, hence we only want to\n // keep the last undoable action in this sequence of actions.\n if (keepUndo) {\n save.undo = this.#commands[this.#position].undo;\n }\n this.#commands[this.#position] = save;\n return;\n }\n\n const next = this.#position + 1;\n if (next === this.#maxSize) {\n this.#commands.splice(0, 1);\n } else {\n this.#position = next;\n if (next < this.#commands.length) {\n this.#commands.splice(next);\n }\n }\n\n this.#commands.push(save);\n }\n\n /**\n * Undo the last command.\n */\n undo() {\n if (this.#position === -1) {\n // Nothing to undo.\n return;\n }\n\n // Avoid to insert something during the undo execution.\n this.#locked = true;\n const { undo, post } = this.#commands[this.#position];\n undo();\n post?.();\n this.#locked = false;\n\n this.#position -= 1;\n }\n\n /**\n * Redo the last command.\n */\n redo() {\n if (this.#position < this.#commands.length - 1) {\n this.#position += 1;\n\n // Avoid to insert something during the redo execution.\n this.#locked = true;\n const { cmd, post } = this.#commands[this.#position];\n cmd();\n post?.();\n this.#locked = false;\n }\n }\n\n /**\n * Check if there is something to undo.\n * @returns {boolean}\n */\n hasSomethingToUndo() {\n return this.#position !== -1;\n }\n\n /**\n * Check if there is something to redo.\n * @returns {boolean}\n */\n hasSomethingToRedo() {\n return this.#position < this.#commands.length - 1;\n }\n\n cleanType(type) {\n if (this.#position === -1) {\n return;\n }\n for (let i = this.#position; i >= 0; i--) {\n if (this.#commands[i].type !== type) {\n this.#commands.splice(i + 1, this.#position - i);\n this.#position = i;\n return;\n }\n }\n this.#commands.length = 0;\n this.#position = -1;\n }\n\n destroy() {\n this.#commands = null;\n }\n}\n\n/**\n * Class to handle the different keyboards shortcuts we can have on mac or\n * non-mac OSes.\n */\nclass KeyboardManager {\n /**\n * Create a new keyboard manager class.\n * @param {Array} callbacks - an array containing an array of shortcuts\n * and a callback to call.\n * A shortcut is a string like `ctrl+c` or `mac+ctrl+c` for mac OS.\n */\n constructor(callbacks) {\n this.buffer = [];\n this.callbacks = new Map();\n this.allKeys = new Set();\n\n const { isMac } = FeatureTest.platform;\n for (const [keys, callback, options = {}] of callbacks) {\n for (const key of keys) {\n const isMacKey = key.startsWith(\"mac+\");\n if (isMac && isMacKey) {\n this.callbacks.set(key.slice(4), { callback, options });\n this.allKeys.add(key.split(\"+\").at(-1));\n } else if (!isMac && !isMacKey) {\n this.callbacks.set(key, { callback, options });\n this.allKeys.add(key.split(\"+\").at(-1));\n }\n }\n }\n }\n\n /**\n * Serialize an event into a string in order to match a\n * potential key for a callback.\n * @param {KeyboardEvent} event\n * @returns {string}\n */\n #serialize(event) {\n if (event.altKey) {\n this.buffer.push(\"alt\");\n }\n if (event.ctrlKey) {\n this.buffer.push(\"ctrl\");\n }\n if (event.metaKey) {\n this.buffer.push(\"meta\");\n }\n if (event.shiftKey) {\n this.buffer.push(\"shift\");\n }\n this.buffer.push(event.key);\n const str = this.buffer.join(\"+\");\n this.buffer.length = 0;\n\n return str;\n }\n\n /**\n * Execute a callback, if any, for a given keyboard event.\n * The self is used as `this` in the callback.\n * @param {Object} self\n * @param {KeyboardEvent} event\n * @returns\n */\n exec(self, event) {\n if (!this.allKeys.has(event.key)) {\n return;\n }\n const info = this.callbacks.get(this.#serialize(event));\n if (!info) {\n return;\n }\n const {\n callback,\n options: { bubbles = false, args = [], checker = null },\n } = info;\n\n if (checker && !checker(self, event)) {\n return;\n }\n callback.bind(self, ...args, event)();\n\n // For example, ctrl+s in a FreeText must be handled by the viewer, hence\n // the event must bubble.\n if (!bubbles) {\n stopEvent(event);\n }\n }\n}\n\nclass ColorManager {\n static _colorsMapping = new Map([\n [\"CanvasText\", [0, 0, 0]],\n [\"Canvas\", [255, 255, 255]],\n ]);\n\n get _colors() {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ) {\n return shadow(this, \"_colors\", ColorManager._colorsMapping);\n }\n\n const colors = new Map([\n [\"CanvasText\", null],\n [\"Canvas\", null],\n ]);\n getColorValues(colors);\n return shadow(this, \"_colors\", colors);\n }\n\n /**\n * In High Contrast Mode, the color on the screen is not always the\n * real color used in the pdf.\n * For example in some cases white can appear to be black but when saving\n * we want to have white.\n * @param {string} color\n * @returns {Array}\n */\n convert(color) {\n const rgb = getRGB(color);\n if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n return rgb;\n }\n\n for (const [name, RGB] of this._colors) {\n if (RGB.every((x, i) => x === rgb[i])) {\n return ColorManager._colorsMapping.get(name);\n }\n }\n return rgb;\n }\n\n /**\n * An input element must have its color value as a hex string\n * and not as color name.\n * So this function converts a name into an hex string.\n * @param {string} name\n * @returns {string}\n */\n getHexCode(name) {\n const rgb = this._colors.get(name);\n if (!rgb) {\n return name;\n }\n return Util.makeHexColor(...rgb);\n }\n}\n\n/**\n * A pdf has several pages and each of them when it will rendered\n * will have an AnnotationEditorLayer which will contain the some\n * new Annotations associated to an editor in order to modify them.\n *\n * This class is used to manage all the different layers, editors and\n * some action like copy/paste, undo/redo, ...\n */\nclass AnnotationEditorUIManager {\n #abortController = new AbortController();\n\n #activeEditor = null;\n\n #allEditors = new Map();\n\n #allLayers = new Map();\n\n #altTextManager = null;\n\n #annotationStorage = null;\n\n #changedExistingAnnotations = null;\n\n #commandManager = new CommandManager();\n\n #copyPasteAC = null;\n\n #currentDrawingSession = null;\n\n #currentPageIndex = 0;\n\n #deletedAnnotationsElementIds = new Set();\n\n #draggingEditors = null;\n\n #editorTypes = null;\n\n #editorsToRescale = new Set();\n\n _editorUndoBar = null;\n\n #enableHighlightFloatingButton = false;\n\n #enableUpdatedAddImage = false;\n\n #enableNewAltTextWhenAddingImage = false;\n\n #filterFactory = null;\n\n #focusMainContainerTimeoutId = null;\n\n #focusManagerAC = null;\n\n #highlightColors = null;\n\n #highlightWhenShiftUp = false;\n\n #highlightToolbar = null;\n\n #idManager = new IdManager();\n\n #isEnabled = false;\n\n #isWaiting = false;\n\n #keyboardManagerAC = null;\n\n #lastActiveElement = null;\n\n #mainHighlightColorPicker = null;\n\n #missingCanvases = null;\n\n #mlManager = null;\n\n #mode = AnnotationEditorType.NONE;\n\n #selectedEditors = new Set();\n\n #selectedTextNode = null;\n\n #signatureManager = null;\n\n #pageColors = null;\n\n #showAllStates = null;\n\n #previousStates = {\n isEditing: false,\n isEmpty: true,\n hasSomethingToUndo: false,\n hasSomethingToRedo: false,\n hasSelectedEditor: false,\n hasSelectedText: false,\n };\n\n #translation = [0, 0];\n\n #translationTimeoutId = null;\n\n #container = null;\n\n #viewer = null;\n\n #updateModeCapability = null;\n\n static TRANSLATE_SMALL = 1; // page units.\n\n static TRANSLATE_BIG = 10; // page units.\n\n static get _keyboardManager() {\n const proto = AnnotationEditorUIManager.prototype;\n\n /**\n * If the focused element is an input, we don't want to handle the arrow.\n * For example, sliders can be controlled with the arrow keys.\n */\n const arrowChecker = self =>\n self.#container.contains(document.activeElement) &&\n document.activeElement.tagName !== \"BUTTON\" &&\n self.hasSomethingToControl();\n\n const textInputChecker = (_self, { target: el }) => {\n if (el instanceof HTMLInputElement) {\n const { type } = el;\n return type !== \"text\" && type !== \"number\";\n }\n return true;\n };\n\n const small = this.TRANSLATE_SMALL;\n const big = this.TRANSLATE_BIG;\n\n return shadow(\n this,\n \"_keyboardManager\",\n new KeyboardManager([\n [\n [\"ctrl+a\", \"mac+meta+a\"],\n proto.selectAll,\n { checker: textInputChecker },\n ],\n [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, { checker: textInputChecker }],\n [\n // On mac, depending of the OS version, the event.key is either \"z\" or\n // \"Z\" when the user presses \"meta+shift+z\".\n [\n \"ctrl+y\",\n \"ctrl+shift+z\",\n \"mac+meta+shift+z\",\n \"ctrl+shift+Z\",\n \"mac+meta+shift+Z\",\n ],\n proto.redo,\n { checker: textInputChecker },\n ],\n [\n [\n \"Backspace\",\n \"alt+Backspace\",\n \"ctrl+Backspace\",\n \"shift+Backspace\",\n \"mac+Backspace\",\n \"mac+alt+Backspace\",\n \"mac+ctrl+Backspace\",\n \"Delete\",\n \"ctrl+Delete\",\n \"shift+Delete\",\n \"mac+Delete\",\n ],\n proto.delete,\n { checker: textInputChecker },\n ],\n [\n [\"Enter\", \"mac+Enter\"],\n proto.addNewEditorFromKeyboard,\n {\n // Those shortcuts can be used in the toolbar for some other actions\n // like zooming, hence we need to check if the container has the\n // focus.\n checker: (self, { target: el }) =>\n !(el instanceof HTMLButtonElement) &&\n self.#container.contains(el) &&\n !self.isEnterHandled,\n },\n ],\n [\n [\" \", \"mac+ \"],\n proto.addNewEditorFromKeyboard,\n {\n // Those shortcuts can be used in the toolbar for some other actions\n // like zooming, hence we need to check if the container has the\n // focus.\n checker: (self, { target: el }) =>\n !(el instanceof HTMLButtonElement) &&\n self.#container.contains(document.activeElement),\n },\n ],\n [[\"Escape\", \"mac+Escape\"], proto.unselectAll],\n [\n [\"ArrowLeft\", \"mac+ArrowLeft\"],\n proto.translateSelectedEditors,\n { args: [-small, 0], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n proto.translateSelectedEditors,\n { args: [-big, 0], checker: arrowChecker },\n ],\n [\n [\"ArrowRight\", \"mac+ArrowRight\"],\n proto.translateSelectedEditors,\n { args: [small, 0], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n proto.translateSelectedEditors,\n { args: [big, 0], checker: arrowChecker },\n ],\n [\n [\"ArrowUp\", \"mac+ArrowUp\"],\n proto.translateSelectedEditors,\n { args: [0, -small], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"],\n proto.translateSelectedEditors,\n { args: [0, -big], checker: arrowChecker },\n ],\n [\n [\"ArrowDown\", \"mac+ArrowDown\"],\n proto.translateSelectedEditors,\n { args: [0, small], checker: arrowChecker },\n ],\n [\n [\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"],\n proto.translateSelectedEditors,\n { args: [0, big], checker: arrowChecker },\n ],\n ])\n );\n }\n\n constructor(\n container,\n viewer,\n altTextManager,\n signatureManager,\n eventBus,\n pdfDocument,\n pageColors,\n highlightColors,\n enableHighlightFloatingButton,\n enableUpdatedAddImage,\n enableNewAltTextWhenAddingImage,\n mlManager,\n editorUndoBar,\n supportsPinchToZoom\n ) {\n const signal = (this._signal = this.#abortController.signal);\n this.#container = container;\n this.#viewer = viewer;\n this.#altTextManager = altTextManager;\n this.#signatureManager = signatureManager;\n this._eventBus = eventBus;\n eventBus._on(\"editingaction\", this.onEditingAction.bind(this), { signal });\n eventBus._on(\"pagechanging\", this.onPageChanging.bind(this), { signal });\n eventBus._on(\"scalechanging\", this.onScaleChanging.bind(this), { signal });\n eventBus._on(\"rotationchanging\", this.onRotationChanging.bind(this), {\n signal,\n });\n eventBus._on(\"setpreference\", this.onSetPreference.bind(this), { signal });\n eventBus._on(\n \"switchannotationeditorparams\",\n evt => this.updateParams(evt.type, evt.value),\n { signal }\n );\n this.#addSelectionListener();\n this.#addDragAndDropListeners();\n this.#addKeyboardManager();\n this.#annotationStorage = pdfDocument.annotationStorage;\n this.#filterFactory = pdfDocument.filterFactory;\n this.#pageColors = pageColors;\n this.#highlightColors = highlightColors || null;\n this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n this.#enableUpdatedAddImage = enableUpdatedAddImage;\n this.#enableNewAltTextWhenAddingImage = enableNewAltTextWhenAddingImage;\n this.#mlManager = mlManager || null;\n this.viewParameters = {\n realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n rotation: 0,\n };\n this.isShiftKeyDown = false;\n this._editorUndoBar = editorUndoBar || null;\n this._supportsPinchToZoom = supportsPinchToZoom !== false;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n Object.defineProperty(this, \"reset\", {\n value: () => {\n this.selectAll();\n this.delete();\n this.#idManager.reset();\n },\n });\n }\n }\n\n destroy() {\n this.#updateModeCapability?.resolve();\n this.#updateModeCapability = null;\n\n this.#abortController?.abort();\n this.#abortController = null;\n this._signal = null;\n\n for (const layer of this.#allLayers.values()) {\n layer.destroy();\n }\n this.#allLayers.clear();\n this.#allEditors.clear();\n this.#editorsToRescale.clear();\n this.#missingCanvases?.clear();\n this.#activeEditor = null;\n this.#selectedEditors.clear();\n this.#commandManager.destroy();\n this.#altTextManager?.destroy();\n this.#signatureManager?.destroy();\n this.#highlightToolbar?.hide();\n this.#highlightToolbar = null;\n this.#mainHighlightColorPicker?.destroy();\n this.#mainHighlightColorPicker = null;\n if (this.#focusMainContainerTimeoutId) {\n clearTimeout(this.#focusMainContainerTimeoutId);\n this.#focusMainContainerTimeoutId = null;\n }\n if (this.#translationTimeoutId) {\n clearTimeout(this.#translationTimeoutId);\n this.#translationTimeoutId = null;\n }\n this._editorUndoBar?.destroy();\n }\n\n combinedSignal(ac) {\n return AbortSignal.any([this._signal, ac.signal]);\n }\n\n get mlManager() {\n return this.#mlManager;\n }\n\n get useNewAltTextFlow() {\n return this.#enableUpdatedAddImage;\n }\n\n get useNewAltTextWhenAddingImage() {\n return this.#enableNewAltTextWhenAddingImage;\n }\n\n get hcmFilter() {\n return shadow(\n this,\n \"hcmFilter\",\n this.#pageColors\n ? this.#filterFactory.addHCMFilter(\n this.#pageColors.foreground,\n this.#pageColors.background\n )\n : \"none\"\n );\n }\n\n get direction() {\n return shadow(\n this,\n \"direction\",\n getComputedStyle(this.#container).direction\n );\n }\n\n get highlightColors() {\n return shadow(\n this,\n \"highlightColors\",\n this.#highlightColors\n ? new Map(\n this.#highlightColors\n .split(\",\")\n .map(pair => pair.split(\"=\").map(x => x.trim()))\n )\n : null\n );\n }\n\n get highlightColorNames() {\n return shadow(\n this,\n \"highlightColorNames\",\n this.highlightColors\n ? new Map(Array.from(this.highlightColors, e => e.reverse()))\n : null\n );\n }\n\n /**\n * Set the current drawing session.\n * @param {AnnotationEditorLayer} layer\n */\n setCurrentDrawingSession(layer) {\n if (layer) {\n this.unselectAll();\n this.disableUserSelect(true);\n } else {\n this.disableUserSelect(false);\n }\n this.#currentDrawingSession = layer;\n }\n\n setMainHighlightColorPicker(colorPicker) {\n this.#mainHighlightColorPicker = colorPicker;\n }\n\n editAltText(editor, firstTime = false) {\n this.#altTextManager?.editAltText(this, editor, firstTime);\n }\n\n getSignature(editor) {\n this.#signatureManager?.getSignature({ uiManager: this, editor });\n }\n\n get signatureManager() {\n return this.#signatureManager;\n }\n\n switchToMode(mode, callback) {\n // Switching to a mode can be asynchronous.\n this._eventBus.on(\"annotationeditormodechanged\", callback, {\n once: true,\n signal: this._signal,\n });\n this._eventBus.dispatch(\"showannotationeditorui\", {\n source: this,\n mode,\n });\n }\n\n setPreference(name, value) {\n this._eventBus.dispatch(\"setpreference\", {\n source: this,\n name,\n value,\n });\n }\n\n onSetPreference({ name, value }) {\n switch (name) {\n case \"enableNewAltTextWhenAddingImage\":\n this.#enableNewAltTextWhenAddingImage = value;\n break;\n }\n }\n\n onPageChanging({ pageNumber }) {\n this.#currentPageIndex = pageNumber - 1;\n }\n\n focusMainContainer() {\n this.#container.focus();\n }\n\n findParent(x, y) {\n for (const layer of this.#allLayers.values()) {\n const {\n x: layerX,\n y: layerY,\n width,\n height,\n } = layer.div.getBoundingClientRect();\n if (\n x >= layerX &&\n x <= layerX + width &&\n y >= layerY &&\n y <= layerY + height\n ) {\n return layer;\n }\n }\n return null;\n }\n\n disableUserSelect(value = false) {\n this.#viewer.classList.toggle(\"noUserSelect\", value);\n }\n\n addShouldRescale(editor) {\n this.#editorsToRescale.add(editor);\n }\n\n removeShouldRescale(editor) {\n this.#editorsToRescale.delete(editor);\n }\n\n onScaleChanging({ scale }) {\n this.commitOrRemove();\n this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n for (const editor of this.#editorsToRescale) {\n editor.onScaleChanging();\n }\n this.#currentDrawingSession?.onScaleChanging();\n }\n\n onRotationChanging({ pagesRotation }) {\n this.commitOrRemove();\n this.viewParameters.rotation = pagesRotation;\n }\n\n #getAnchorElementForSelection({ anchorNode }) {\n return anchorNode.nodeType === Node.TEXT_NODE\n ? anchorNode.parentElement\n : anchorNode;\n }\n\n #getLayerForTextLayer(textLayer) {\n const { currentLayer } = this;\n if (currentLayer.hasTextLayer(textLayer)) {\n return currentLayer;\n }\n for (const layer of this.#allLayers.values()) {\n if (layer.hasTextLayer(textLayer)) {\n return layer;\n }\n }\n return null;\n }\n\n highlightSelection(methodOfCreation = \"\") {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n return;\n }\n const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;\n const text = selection.toString();\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n const boxes = this.getSelectionBoxes(textLayer);\n if (!boxes) {\n return;\n }\n selection.empty();\n\n const layer = this.#getLayerForTextLayer(textLayer);\n const isNoneMode = this.#mode === AnnotationEditorType.NONE;\n const callback = () => {\n layer?.createAndAddNewEditor({ x: 0, y: 0 }, false, {\n methodOfCreation,\n boxes,\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n text,\n });\n if (isNoneMode) {\n this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n }\n };\n if (isNoneMode) {\n this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);\n return;\n }\n callback();\n }\n\n #displayHighlightToolbar() {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n return;\n }\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n const boxes = this.getSelectionBoxes(textLayer);\n if (!boxes) {\n return;\n }\n this.#highlightToolbar ||= new HighlightToolbar(this);\n this.#highlightToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n }\n\n /**\n * Add an editor in the annotation storage.\n * @param {AnnotationEditor} editor\n */\n addToAnnotationStorage(editor) {\n if (\n !editor.isEmpty() &&\n this.#annotationStorage &&\n !this.#annotationStorage.has(editor.id)\n ) {\n this.#annotationStorage.setValue(editor.id, editor);\n }\n }\n\n #selectionChange() {\n const selection = document.getSelection();\n if (!selection || selection.isCollapsed) {\n if (this.#selectedTextNode) {\n this.#highlightToolbar?.hide();\n this.#selectedTextNode = null;\n this.#dispatchUpdateStates({\n hasSelectedText: false,\n });\n }\n return;\n }\n const { anchorNode } = selection;\n if (anchorNode === this.#selectedTextNode) {\n return;\n }\n\n const anchorElement = this.#getAnchorElementForSelection(selection);\n const textLayer = anchorElement.closest(\".textLayer\");\n if (!textLayer) {\n if (this.#selectedTextNode) {\n this.#highlightToolbar?.hide();\n this.#selectedTextNode = null;\n this.#dispatchUpdateStates({\n hasSelectedText: false,\n });\n }\n return;\n }\n\n this.#highlightToolbar?.hide();\n this.#selectedTextNode = anchorNode;\n this.#dispatchUpdateStates({\n hasSelectedText: true,\n });\n\n if (\n this.#mode !== AnnotationEditorType.HIGHLIGHT &&\n this.#mode !== AnnotationEditorType.NONE\n ) {\n return;\n }\n\n if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n }\n\n this.#highlightWhenShiftUp = this.isShiftKeyDown;\n if (!this.isShiftKeyDown) {\n const activeLayer =\n this.#mode === AnnotationEditorType.HIGHLIGHT\n ? this.#getLayerForTextLayer(textLayer)\n : null;\n activeLayer?.toggleDrawing();\n\n const ac = new AbortController();\n const signal = this.combinedSignal(ac);\n\n const pointerup = e => {\n if (e.type === \"pointerup\" && e.button !== 0) {\n // Do nothing on right click.\n return;\n }\n ac.abort();\n activeLayer?.toggleDrawing(true);\n if (e.type === \"pointerup\") {\n this.#onSelectEnd(\"main_toolbar\");\n }\n };\n window.addEventListener(\"pointerup\", pointerup, { signal });\n window.addEventListener(\"blur\", pointerup, { signal });\n }\n }\n\n #onSelectEnd(methodOfCreation = \"\") {\n if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n this.highlightSelection(methodOfCreation);\n } else if (this.#enableHighlightFloatingButton) {\n this.#displayHighlightToolbar();\n }\n }\n\n #addSelectionListener() {\n document.addEventListener(\n \"selectionchange\",\n this.#selectionChange.bind(this),\n { signal: this._signal }\n );\n }\n\n #addFocusManager() {\n if (this.#focusManagerAC) {\n return;\n }\n this.#focusManagerAC = new AbortController();\n const signal = this.combinedSignal(this.#focusManagerAC);\n\n window.addEventListener(\"focus\", this.focus.bind(this), { signal });\n window.addEventListener(\"blur\", this.blur.bind(this), { signal });\n }\n\n #removeFocusManager() {\n this.#focusManagerAC?.abort();\n this.#focusManagerAC = null;\n }\n\n blur() {\n this.isShiftKeyDown = false;\n if (this.#highlightWhenShiftUp) {\n this.#highlightWhenShiftUp = false;\n this.#onSelectEnd(\"main_toolbar\");\n }\n if (!this.hasSelection) {\n return;\n }\n // When several editors are selected and the window loses focus, we want to\n // keep the last active element in order to be able to focus it again when\n // the window gets the focus back but we don't want to trigger any focus\n // callbacks else only one editor will be selected.\n const { activeElement } = document;\n for (const editor of this.#selectedEditors) {\n if (editor.div.contains(activeElement)) {\n this.#lastActiveElement = [editor, activeElement];\n editor._focusEventsAllowed = false;\n break;\n }\n }\n }\n\n focus() {\n if (!this.#lastActiveElement) {\n return;\n }\n const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n this.#lastActiveElement = null;\n lastActiveElement.addEventListener(\n \"focusin\",\n () => {\n lastEditor._focusEventsAllowed = true;\n },\n { once: true, signal: this._signal }\n );\n lastActiveElement.focus();\n }\n\n #addKeyboardManager() {\n if (this.#keyboardManagerAC) {\n return;\n }\n this.#keyboardManagerAC = new AbortController();\n const signal = this.combinedSignal(this.#keyboardManagerAC);\n\n // The keyboard events are caught at the container level in order to be able\n // to execute some callbacks even if the current page doesn't have focus.\n window.addEventListener(\"keydown\", this.keydown.bind(this), { signal });\n window.addEventListener(\"keyup\", this.keyup.bind(this), { signal });\n }\n\n #removeKeyboardManager() {\n this.#keyboardManagerAC?.abort();\n this.#keyboardManagerAC = null;\n }\n\n #addCopyPasteListeners() {\n if (this.#copyPasteAC) {\n return;\n }\n this.#copyPasteAC = new AbortController();\n const signal = this.combinedSignal(this.#copyPasteAC);\n\n document.addEventListener(\"copy\", this.copy.bind(this), { signal });\n document.addEventListener(\"cut\", this.cut.bind(this), { signal });\n document.addEventListener(\"paste\", this.paste.bind(this), { signal });\n }\n\n #removeCopyPasteListeners() {\n this.#copyPasteAC?.abort();\n this.#copyPasteAC = null;\n }\n\n #addDragAndDropListeners() {\n const signal = this._signal;\n document.addEventListener(\"dragover\", this.dragOver.bind(this), { signal });\n document.addEventListener(\"drop\", this.drop.bind(this), { signal });\n }\n\n addEditListeners() {\n this.#addKeyboardManager();\n this.#addCopyPasteListeners();\n }\n\n removeEditListeners() {\n this.#removeKeyboardManager();\n this.#removeCopyPasteListeners();\n }\n\n dragOver(event) {\n for (const { type } of event.dataTransfer.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(type)) {\n event.dataTransfer.dropEffect = \"copy\";\n event.preventDefault();\n return;\n }\n }\n }\n }\n\n /**\n * Drop callback.\n * @param {DragEvent} event\n */\n drop(event) {\n for (const item of event.dataTransfer.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(item.type)) {\n editorType.paste(item, this.currentLayer);\n event.preventDefault();\n return;\n }\n }\n }\n }\n\n /**\n * Copy callback.\n * @param {ClipboardEvent} event\n */\n copy(event) {\n event.preventDefault();\n\n // An editor is being edited so just commit it.\n this.#activeEditor?.commitOrRemove();\n\n if (!this.hasSelection) {\n return;\n }\n\n const editors = [];\n for (const editor of this.#selectedEditors) {\n const serialized = editor.serialize(/* isForCopying = */ true);\n if (serialized) {\n editors.push(serialized);\n }\n }\n if (editors.length === 0) {\n return;\n }\n\n event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n }\n\n /**\n * Cut callback.\n * @param {ClipboardEvent} event\n */\n cut(event) {\n this.copy(event);\n this.delete();\n }\n\n /**\n * Paste callback.\n * @param {ClipboardEvent} event\n */\n async paste(event) {\n event.preventDefault();\n const { clipboardData } = event;\n for (const item of clipboardData.items) {\n for (const editorType of this.#editorTypes) {\n if (editorType.isHandlingMimeForPasting(item.type)) {\n editorType.paste(item, this.currentLayer);\n return;\n }\n }\n }\n\n let data = clipboardData.getData(\"application/pdfjs\");\n if (!data) {\n return;\n }\n\n try {\n data = JSON.parse(data);\n } catch (ex) {\n warn(`paste: \"${ex.message}\".`);\n return;\n }\n\n if (!Array.isArray(data)) {\n return;\n }\n\n this.unselectAll();\n const layer = this.currentLayer;\n\n try {\n const newEditors = [];\n for (const editor of data) {\n const deserializedEditor = await layer.deserialize(editor);\n if (!deserializedEditor) {\n return;\n }\n newEditors.push(deserializedEditor);\n }\n\n const cmd = () => {\n for (const editor of newEditors) {\n this.#addEditorToLayer(editor);\n }\n this.#selectEditors(newEditors);\n };\n const undo = () => {\n for (const editor of newEditors) {\n editor.remove();\n }\n };\n this.addCommands({ cmd, undo, mustExec: true });\n } catch (ex) {\n warn(`paste: \"${ex.message}\".`);\n }\n }\n\n /**\n * Keydown callback.\n * @param {KeyboardEvent} event\n */\n keydown(event) {\n if (!this.isShiftKeyDown && event.key === \"Shift\") {\n this.isShiftKeyDown = true;\n }\n if (\n this.#mode !== AnnotationEditorType.NONE &&\n !this.isEditorHandlingKeyboard\n ) {\n AnnotationEditorUIManager._keyboardManager.exec(this, event);\n }\n }\n\n /**\n * Keyup callback.\n * @param {KeyboardEvent} event\n */\n keyup(event) {\n if (this.isShiftKeyDown && event.key === \"Shift\") {\n this.isShiftKeyDown = false;\n if (this.#highlightWhenShiftUp) {\n this.#highlightWhenShiftUp = false;\n this.#onSelectEnd(\"main_toolbar\");\n }\n }\n }\n\n /**\n * Execute an action for a given name.\n * For example, the user can click on the \"Undo\" entry in the context menu\n * and it'll trigger the undo action.\n */\n onEditingAction({ name }) {\n switch (name) {\n case \"undo\":\n case \"redo\":\n case \"delete\":\n case \"selectAll\":\n this[name]();\n break;\n case \"highlightSelection\":\n this.highlightSelection(\"context_menu\");\n break;\n }\n }\n\n /**\n * Update the different possible states of this manager, e.g. is there\n * something to undo, redo, ...\n * @param {Object} details\n */\n #dispatchUpdateStates(details) {\n const hasChanged = Object.entries(details).some(\n ([key, value]) => this.#previousStates[key] !== value\n );\n\n if (hasChanged) {\n this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n source: this,\n details: Object.assign(this.#previousStates, details),\n });\n // We could listen on our own event but it sounds like a bit weird and\n // it's a way to simpler to handle that stuff here instead of having to\n // add something in every place where an editor can be unselected.\n if (\n this.#mode === AnnotationEditorType.HIGHLIGHT &&\n details.hasSelectedEditor === false\n ) {\n this.#dispatchUpdateUI([\n [AnnotationEditorParamsType.HIGHLIGHT_FREE, true],\n ]);\n }\n }\n }\n\n #dispatchUpdateUI(details) {\n this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n source: this,\n details,\n });\n }\n\n /**\n * Set the editing state.\n * It can be useful to temporarily disable it when the user is editing a\n * FreeText annotation.\n * @param {boolean} isEditing\n */\n setEditingState(isEditing) {\n if (isEditing) {\n this.#addFocusManager();\n this.#addCopyPasteListeners();\n this.#dispatchUpdateStates({\n isEditing: this.#mode !== AnnotationEditorType.NONE,\n isEmpty: this.#isEmpty(),\n hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n hasSelectedEditor: false,\n });\n } else {\n this.#removeFocusManager();\n this.#removeCopyPasteListeners();\n this.#dispatchUpdateStates({\n isEditing: false,\n });\n this.disableUserSelect(false);\n }\n }\n\n registerEditorTypes(types) {\n if (this.#editorTypes) {\n return;\n }\n this.#editorTypes = types;\n for (const editorType of this.#editorTypes) {\n this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n }\n }\n\n /**\n * Get an id.\n * @returns {string}\n */\n getId() {\n return this.#idManager.id;\n }\n\n get currentLayer() {\n return this.#allLayers.get(this.#currentPageIndex);\n }\n\n getLayer(pageIndex) {\n return this.#allLayers.get(pageIndex);\n }\n\n get currentPageIndex() {\n return this.#currentPageIndex;\n }\n\n /**\n * Add a new layer for a page which will contains the editors.\n * @param {AnnotationEditorLayer} layer\n */\n addLayer(layer) {\n this.#allLayers.set(layer.pageIndex, layer);\n if (this.#isEnabled) {\n layer.enable();\n } else {\n layer.disable();\n }\n }\n\n /**\n * Remove a layer.\n * @param {AnnotationEditorLayer} layer\n */\n removeLayer(layer) {\n this.#allLayers.delete(layer.pageIndex);\n }\n\n /**\n * Change the editor mode (None, FreeText, Ink, ...)\n * @param {number} mode\n * @param {string|null} editId\n * @param {boolean} [isFromKeyboard] - true if the mode change is due to a\n * keyboard action.\n */\n async updateMode(mode, editId = null, isFromKeyboard = false) {\n if (this.#mode === mode) {\n return;\n }\n\n if (this.#updateModeCapability) {\n await this.#updateModeCapability.promise;\n if (!this.#updateModeCapability) {\n // This ui manager has been destroyed.\n return;\n }\n }\n\n this.#updateModeCapability = Promise.withResolvers();\n this.#currentDrawingSession?.commitOrRemove();\n\n this.#mode = mode;\n if (mode === AnnotationEditorType.NONE) {\n this.setEditingState(false);\n this.#disableAll();\n\n this._editorUndoBar?.hide();\n\n this.#updateModeCapability.resolve();\n return;\n }\n if (mode === AnnotationEditorType.SIGNATURE) {\n await this.#signatureManager?.loadSignatures();\n }\n this.setEditingState(true);\n await this.#enableAll();\n this.unselectAll();\n for (const layer of this.#allLayers.values()) {\n layer.updateMode(mode);\n }\n if (!editId) {\n if (isFromKeyboard) {\n this.addNewEditorFromKeyboard();\n }\n\n this.#updateModeCapability.resolve();\n return;\n }\n\n for (const editor of this.#allEditors.values()) {\n if (editor.annotationElementId === editId) {\n this.setSelected(editor);\n editor.enterInEditMode();\n } else {\n editor.unselect();\n }\n }\n\n this.#updateModeCapability.resolve();\n }\n\n addNewEditorFromKeyboard() {\n if (this.currentLayer.canCreateNewEmptyEditor()) {\n this.currentLayer.addNewEditor();\n }\n }\n\n /**\n * Update the toolbar if it's required to reflect the tool currently used.\n * @param {number} mode\n * @returns {undefined}\n */\n updateToolbar(mode) {\n if (mode === this.#mode) {\n return;\n }\n this._eventBus.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode,\n });\n }\n\n /**\n * Update a parameter in the current editor or globally.\n * @param {number} type\n * @param {*} value\n */\n updateParams(type, value) {\n if (!this.#editorTypes) {\n return;\n }\n\n switch (type) {\n case AnnotationEditorParamsType.CREATE:\n this.currentLayer.addNewEditor(value);\n return;\n case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:\n this.#mainHighlightColorPicker?.updateColor(value);\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n this._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: {\n type: \"highlight\",\n action: \"toggle_visibility\",\n },\n },\n });\n (this.#showAllStates ||= new Map()).set(type, value);\n this.showAllEditors(\"highlight\", value);\n break;\n }\n\n for (const editor of this.#selectedEditors) {\n editor.updateParams(type, value);\n }\n\n for (const editorType of this.#editorTypes) {\n editorType.updateDefaultParams(type, value);\n }\n }\n\n showAllEditors(type, visible, updateButton = false) {\n for (const editor of this.#allEditors.values()) {\n if (editor.editorType === type) {\n editor.show(visible);\n }\n }\n const state =\n this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ??\n true;\n if (state !== visible) {\n this.#dispatchUpdateUI([\n [AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible],\n ]);\n }\n }\n\n enableWaiting(mustWait = false) {\n if (this.#isWaiting === mustWait) {\n return;\n }\n this.#isWaiting = mustWait;\n for (const layer of this.#allLayers.values()) {\n if (mustWait) {\n layer.disableClick();\n } else {\n layer.enableClick();\n }\n layer.div.classList.toggle(\"waiting\", mustWait);\n }\n }\n\n /**\n * Enable all the layers.\n */\n async #enableAll() {\n if (!this.#isEnabled) {\n this.#isEnabled = true;\n const promises = [];\n for (const layer of this.#allLayers.values()) {\n promises.push(layer.enable());\n }\n await Promise.all(promises);\n for (const editor of this.#allEditors.values()) {\n editor.enable();\n }\n }\n }\n\n /**\n * Disable all the layers.\n */\n #disableAll() {\n this.unselectAll();\n if (this.#isEnabled) {\n this.#isEnabled = false;\n for (const layer of this.#allLayers.values()) {\n layer.disable();\n }\n for (const editor of this.#allEditors.values()) {\n editor.disable();\n }\n }\n }\n\n /**\n * Get all the editors belonging to a given page.\n * @param {number} pageIndex\n * @returns {Array}\n */\n getEditors(pageIndex) {\n const editors = [];\n for (const editor of this.#allEditors.values()) {\n if (editor.pageIndex === pageIndex) {\n editors.push(editor);\n }\n }\n return editors;\n }\n\n /**\n * Get an editor with the given id.\n * @param {string} id\n * @returns {AnnotationEditor}\n */\n getEditor(id) {\n return this.#allEditors.get(id);\n }\n\n /**\n * Add a new editor.\n * @param {AnnotationEditor} editor\n */\n addEditor(editor) {\n this.#allEditors.set(editor.id, editor);\n }\n\n /**\n * Remove an editor.\n * @param {AnnotationEditor} editor\n */\n removeEditor(editor) {\n if (editor.div.contains(document.activeElement)) {\n if (this.#focusMainContainerTimeoutId) {\n clearTimeout(this.#focusMainContainerTimeoutId);\n }\n this.#focusMainContainerTimeoutId = setTimeout(() => {\n // When the div is removed from DOM the focus can move on the\n // document.body, so we need to move it back to the main container.\n this.focusMainContainer();\n this.#focusMainContainerTimeoutId = null;\n }, 0);\n }\n this.#allEditors.delete(editor.id);\n if (editor.annotationElementId) {\n this.#missingCanvases?.delete(editor.annotationElementId);\n }\n this.unselect(editor);\n if (\n !editor.annotationElementId ||\n !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)\n ) {\n this.#annotationStorage?.remove(editor.id);\n }\n }\n\n /**\n * The annotation element with the given id has been deleted.\n * @param {AnnotationEditor} editor\n */\n addDeletedAnnotationElement(editor) {\n this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n this.addChangedExistingAnnotation(editor);\n editor.deleted = true;\n }\n\n /**\n * Check if the annotation element with the given id has been deleted.\n * @param {string} annotationElementId\n * @returns {boolean}\n */\n isDeletedAnnotationElement(annotationElementId) {\n return this.#deletedAnnotationsElementIds.has(annotationElementId);\n }\n\n /**\n * The annotation element with the given id have been restored.\n * @param {AnnotationEditor} editor\n */\n removeDeletedAnnotationElement(editor) {\n this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n this.removeChangedExistingAnnotation(editor);\n editor.deleted = false;\n }\n\n /**\n * Add an editor to the layer it belongs to or add it to the global map.\n * @param {AnnotationEditor} editor\n */\n #addEditorToLayer(editor) {\n const layer = this.#allLayers.get(editor.pageIndex);\n if (layer) {\n layer.addOrRebuild(editor);\n } else {\n this.addEditor(editor);\n this.addToAnnotationStorage(editor);\n }\n }\n\n /**\n * Set the given editor as the active one.\n * @param {AnnotationEditor} editor\n */\n setActiveEditor(editor) {\n if (this.#activeEditor === editor) {\n return;\n }\n\n this.#activeEditor = editor;\n if (editor) {\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n }\n }\n\n get #lastSelectedEditor() {\n let ed = null;\n for (ed of this.#selectedEditors) {\n // Iterate to get the last element.\n }\n return ed;\n }\n\n /**\n * Update the UI of the active editor.\n * @param {AnnotationEditor} editor\n */\n updateUI(editor) {\n if (this.#lastSelectedEditor === editor) {\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n }\n }\n\n updateUIForDefaultProperties(editorType) {\n this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n }\n\n /**\n * Add or remove an editor the current selection.\n * @param {AnnotationEditor} editor\n */\n toggleSelected(editor) {\n if (this.#selectedEditors.has(editor)) {\n this.#selectedEditors.delete(editor);\n editor.unselect();\n this.#dispatchUpdateStates({\n hasSelectedEditor: this.hasSelection,\n });\n return;\n }\n this.#selectedEditors.add(editor);\n editor.select();\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n this.#dispatchUpdateStates({\n hasSelectedEditor: true,\n });\n }\n\n /**\n * Set the last selected editor.\n * @param {AnnotationEditor} editor\n */\n setSelected(editor) {\n this.#currentDrawingSession?.commitOrRemove();\n for (const ed of this.#selectedEditors) {\n if (ed !== editor) {\n ed.unselect();\n }\n }\n this.#selectedEditors.clear();\n\n this.#selectedEditors.add(editor);\n editor.select();\n this.#dispatchUpdateUI(editor.propertiesToUpdate);\n this.#dispatchUpdateStates({\n hasSelectedEditor: true,\n });\n }\n\n /**\n * Check if the editor is selected.\n * @param {AnnotationEditor} editor\n */\n isSelected(editor) {\n return this.#selectedEditors.has(editor);\n }\n\n get firstSelectedEditor() {\n return this.#selectedEditors.values().next().value;\n }\n\n /**\n * Unselect an editor.\n * @param {AnnotationEditor} editor\n */\n unselect(editor) {\n editor.unselect();\n this.#selectedEditors.delete(editor);\n this.#dispatchUpdateStates({\n hasSelectedEditor: this.hasSelection,\n });\n }\n\n get hasSelection() {\n return this.#selectedEditors.size !== 0;\n }\n\n get isEnterHandled() {\n return (\n this.#selectedEditors.size === 1 &&\n this.firstSelectedEditor.isEnterHandled\n );\n }\n\n /**\n * Undo the last command.\n */\n undo() {\n this.#commandManager.undo();\n this.#dispatchUpdateStates({\n hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n hasSomethingToRedo: true,\n isEmpty: this.#isEmpty(),\n });\n this._editorUndoBar?.hide();\n }\n\n /**\n * Redo the last undoed command.\n */\n redo() {\n this.#commandManager.redo();\n this.#dispatchUpdateStates({\n hasSomethingToUndo: true,\n hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n isEmpty: this.#isEmpty(),\n });\n }\n\n /**\n * Add a command to execute (cmd) and another one to undo it.\n * @param {Object} params\n */\n addCommands(params) {\n this.#commandManager.add(params);\n this.#dispatchUpdateStates({\n hasSomethingToUndo: true,\n hasSomethingToRedo: false,\n isEmpty: this.#isEmpty(),\n });\n }\n\n cleanUndoStack(type) {\n this.#commandManager.cleanType(type);\n }\n\n #isEmpty() {\n if (this.#allEditors.size === 0) {\n return true;\n }\n\n if (this.#allEditors.size === 1) {\n for (const editor of this.#allEditors.values()) {\n return editor.isEmpty();\n }\n }\n\n return false;\n }\n\n /**\n * Delete the current editor or all.\n */\n delete() {\n this.commitOrRemove();\n const drawingEditor = this.currentLayer?.endDrawingSession(\n /* isAborted = */ true\n );\n if (!this.hasSelection && !drawingEditor) {\n return;\n }\n\n const editors = drawingEditor\n ? [drawingEditor]\n : [...this.#selectedEditors];\n const cmd = () => {\n this._editorUndoBar?.show(\n undo,\n editors.length === 1 ? editors[0].editorType : editors.length\n );\n for (const editor of editors) {\n editor.remove();\n }\n };\n const undo = () => {\n for (const editor of editors) {\n this.#addEditorToLayer(editor);\n }\n };\n\n this.addCommands({ cmd, undo, mustExec: true });\n }\n\n commitOrRemove() {\n // An editor is being edited so just commit it.\n this.#activeEditor?.commitOrRemove();\n }\n\n hasSomethingToControl() {\n return this.#activeEditor || this.hasSelection;\n }\n\n /**\n * Select the editors.\n * @param {Array} editors\n */\n #selectEditors(editors) {\n for (const editor of this.#selectedEditors) {\n editor.unselect();\n }\n this.#selectedEditors.clear();\n for (const editor of editors) {\n if (editor.isEmpty()) {\n continue;\n }\n this.#selectedEditors.add(editor);\n editor.select();\n }\n this.#dispatchUpdateStates({ hasSelectedEditor: this.hasSelection });\n }\n\n /**\n * Select all the editors.\n */\n selectAll() {\n for (const editor of this.#selectedEditors) {\n editor.commit();\n }\n this.#selectEditors(this.#allEditors.values());\n }\n\n /**\n * Unselect all the selected editors.\n */\n unselectAll() {\n if (this.#activeEditor) {\n // An editor is being edited so just commit it.\n this.#activeEditor.commitOrRemove();\n if (this.#mode !== AnnotationEditorType.NONE) {\n // If the mode is NONE, we want to really unselect the editor, hence we\n // mustn't return here.\n return;\n }\n }\n\n if (this.#currentDrawingSession?.commitOrRemove()) {\n return;\n }\n\n if (!this.hasSelection) {\n return;\n }\n for (const editor of this.#selectedEditors) {\n editor.unselect();\n }\n this.#selectedEditors.clear();\n this.#dispatchUpdateStates({\n hasSelectedEditor: false,\n });\n }\n\n translateSelectedEditors(x, y, noCommit = false) {\n if (!noCommit) {\n this.commitOrRemove();\n }\n if (!this.hasSelection) {\n return;\n }\n\n this.#translation[0] += x;\n this.#translation[1] += y;\n const [totalX, totalY] = this.#translation;\n const editors = [...this.#selectedEditors];\n\n // We don't want to have an undo/redo for each translation so we wait a bit\n // before adding the command to the command manager.\n const TIME_TO_WAIT = 1000;\n\n if (this.#translationTimeoutId) {\n clearTimeout(this.#translationTimeoutId);\n }\n\n this.#translationTimeoutId = setTimeout(() => {\n this.#translationTimeoutId = null;\n this.#translation[0] = this.#translation[1] = 0;\n\n this.addCommands({\n cmd: () => {\n for (const editor of editors) {\n if (this.#allEditors.has(editor.id)) {\n editor.translateInPage(totalX, totalY);\n editor.translationDone();\n }\n }\n },\n undo: () => {\n for (const editor of editors) {\n if (this.#allEditors.has(editor.id)) {\n editor.translateInPage(-totalX, -totalY);\n editor.translationDone();\n }\n }\n },\n mustExec: false,\n });\n }, TIME_TO_WAIT);\n\n for (const editor of editors) {\n editor.translateInPage(x, y);\n editor.translationDone();\n }\n }\n\n /**\n * Set up the drag session for moving the selected editors.\n */\n setUpDragSession() {\n // Note: don't use any references to the editor's parent which can be null\n // if the editor belongs to a destroyed page.\n if (!this.hasSelection) {\n return;\n }\n // Avoid to have spurious text selection in the text layer when dragging.\n this.disableUserSelect(true);\n this.#draggingEditors = new Map();\n for (const editor of this.#selectedEditors) {\n this.#draggingEditors.set(editor, {\n savedX: editor.x,\n savedY: editor.y,\n savedPageIndex: editor.pageIndex,\n newX: 0,\n newY: 0,\n newPageIndex: -1,\n });\n }\n }\n\n /**\n * Ends the drag session.\n * @returns {boolean} true if at least one editor has been moved.\n */\n endDragSession() {\n if (!this.#draggingEditors) {\n return false;\n }\n this.disableUserSelect(false);\n const map = this.#draggingEditors;\n this.#draggingEditors = null;\n let mustBeAddedInUndoStack = false;\n\n for (const [{ x, y, pageIndex }, value] of map) {\n value.newX = x;\n value.newY = y;\n value.newPageIndex = pageIndex;\n mustBeAddedInUndoStack ||=\n x !== value.savedX ||\n y !== value.savedY ||\n pageIndex !== value.savedPageIndex;\n }\n\n if (!mustBeAddedInUndoStack) {\n return false;\n }\n\n const move = (editor, x, y, pageIndex) => {\n if (this.#allEditors.has(editor.id)) {\n // The editor can be undone/redone on a page which is not visible (and\n // which potentially has no annotation editor layer), hence we need to\n // use the pageIndex instead of the parent.\n const parent = this.#allLayers.get(pageIndex);\n if (parent) {\n editor._setParentAndPosition(parent, x, y);\n } else {\n editor.pageIndex = pageIndex;\n editor.x = x;\n editor.y = y;\n }\n }\n };\n\n this.addCommands({\n cmd: () => {\n for (const [editor, { newX, newY, newPageIndex }] of map) {\n move(editor, newX, newY, newPageIndex);\n }\n },\n undo: () => {\n for (const [editor, { savedX, savedY, savedPageIndex }] of map) {\n move(editor, savedX, savedY, savedPageIndex);\n }\n },\n mustExec: true,\n });\n\n return true;\n }\n\n /**\n * Drag the set of selected editors.\n * @param {number} tx\n * @param {number} ty\n */\n dragSelectedEditors(tx, ty) {\n if (!this.#draggingEditors) {\n return;\n }\n for (const editor of this.#draggingEditors.keys()) {\n editor.drag(tx, ty);\n }\n }\n\n /**\n * Rebuild the editor (usually on undo/redo actions) on a potentially\n * non-rendered page.\n * @param {AnnotationEditor} editor\n */\n rebuild(editor) {\n if (editor.parent === null) {\n const parent = this.getLayer(editor.pageIndex);\n if (parent) {\n parent.changeParent(editor);\n parent.addOrRebuild(editor);\n } else {\n this.addEditor(editor);\n this.addToAnnotationStorage(editor);\n editor.rebuild();\n }\n } else {\n editor.parent.addOrRebuild(editor);\n }\n }\n\n get isEditorHandlingKeyboard() {\n return (\n this.getActive()?.shouldGetKeyboardEvents() ||\n (this.#selectedEditors.size === 1 &&\n this.firstSelectedEditor.shouldGetKeyboardEvents())\n );\n }\n\n /**\n * Is the current editor the one passed as argument?\n * @param {AnnotationEditor} editor\n * @returns\n */\n isActive(editor) {\n return this.#activeEditor === editor;\n }\n\n /**\n * Get the current active editor.\n * @returns {AnnotationEditor|null}\n */\n getActive() {\n return this.#activeEditor;\n }\n\n /**\n * Get the current editor mode.\n * @returns {number}\n */\n getMode() {\n return this.#mode;\n }\n\n get imageManager() {\n return shadow(this, \"imageManager\", new ImageManager());\n }\n\n getSelectionBoxes(textLayer) {\n if (!textLayer) {\n return null;\n }\n const selection = document.getSelection();\n for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n if (\n !textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)\n ) {\n return null;\n }\n }\n\n const {\n x: layerX,\n y: layerY,\n width: parentWidth,\n height: parentHeight,\n } = textLayer.getBoundingClientRect();\n\n // We must rotate the boxes because we want to have them in the non-rotated\n // page coordinates.\n let rotator;\n switch (textLayer.getAttribute(\"data-main-rotation\")) {\n case \"90\":\n rotator = (x, y, w, h) => ({\n x: (y - layerY) / parentHeight,\n y: 1 - (x + w - layerX) / parentWidth,\n width: h / parentHeight,\n height: w / parentWidth,\n });\n break;\n case \"180\":\n rotator = (x, y, w, h) => ({\n x: 1 - (x + w - layerX) / parentWidth,\n y: 1 - (y + h - layerY) / parentHeight,\n width: w / parentWidth,\n height: h / parentHeight,\n });\n break;\n case \"270\":\n rotator = (x, y, w, h) => ({\n x: 1 - (y + h - layerY) / parentHeight,\n y: (x - layerX) / parentWidth,\n width: h / parentHeight,\n height: w / parentWidth,\n });\n break;\n default:\n rotator = (x, y, w, h) => ({\n x: (x - layerX) / parentWidth,\n y: (y - layerY) / parentHeight,\n width: w / parentWidth,\n height: h / parentHeight,\n });\n break;\n }\n\n const boxes = [];\n for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n const range = selection.getRangeAt(i);\n if (range.collapsed) {\n continue;\n }\n for (const { x, y, width, height } of range.getClientRects()) {\n if (width === 0 || height === 0) {\n continue;\n }\n boxes.push(rotator(x, y, width, height));\n }\n }\n return boxes.length === 0 ? null : boxes;\n }\n\n addChangedExistingAnnotation({ annotationElementId, id }) {\n (this.#changedExistingAnnotations ||= new Map()).set(\n annotationElementId,\n id\n );\n }\n\n removeChangedExistingAnnotation({ annotationElementId }) {\n this.#changedExistingAnnotations?.delete(annotationElementId);\n }\n\n renderAnnotationElement(annotation) {\n const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n if (!editorId) {\n return;\n }\n const editor = this.#annotationStorage.getRawValue(editorId);\n if (!editor) {\n return;\n }\n if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n return;\n }\n editor.renderAnnotationElement(annotation);\n }\n\n setMissingCanvas(annotationId, annotationElementId, canvas) {\n const editor = this.#missingCanvases?.get(annotationId);\n if (!editor) {\n return;\n }\n editor.setCanvas(annotationElementId, canvas);\n this.#missingCanvases.delete(annotationId);\n }\n\n addMissingCanvas(annotationId, editor) {\n (this.#missingCanvases ||= new Map()).set(annotationId, editor);\n }\n}\n\nexport {\n AnnotationEditorUIManager,\n bindEvents,\n ColorManager,\n CommandManager,\n KeyboardManager,\n};\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"../display_utils.js\";\n\nclass AltText {\n #altText = null;\n\n #altTextDecorative = false;\n\n #altTextButton = null;\n\n #altTextButtonLabel = null;\n\n #altTextTooltip = null;\n\n #altTextTooltipTimeout = null;\n\n #altTextWasFromKeyBoard = false;\n\n #badge = null;\n\n #editor = null;\n\n #guessedText = null;\n\n #textWithDisclaimer = null;\n\n #useNewAltTextFlow = false;\n\n static #l10nNewButton = null;\n\n static _l10n = null;\n\n constructor(editor) {\n this.#editor = editor;\n this.#useNewAltTextFlow = editor._uiManager.useNewAltTextFlow;\n\n AltText.#l10nNewButton ||= Object.freeze({\n added: \"pdfjs-editor-new-alt-text-added-button\",\n \"added-label\": \"pdfjs-editor-new-alt-text-added-button-label\",\n missing: \"pdfjs-editor-new-alt-text-missing-button\",\n \"missing-label\": \"pdfjs-editor-new-alt-text-missing-button-label\",\n review: \"pdfjs-editor-new-alt-text-to-review-button\",\n \"review-label\": \"pdfjs-editor-new-alt-text-to-review-button-label\",\n });\n }\n\n static initialize(l10n) {\n AltText._l10n ??= l10n;\n }\n\n async render() {\n const altText = (this.#altTextButton = document.createElement(\"button\"));\n altText.className = \"altText\";\n altText.tabIndex = \"0\";\n\n const label = (this.#altTextButtonLabel = document.createElement(\"span\"));\n altText.append(label);\n\n if (this.#useNewAltTextFlow) {\n altText.classList.add(\"new\");\n altText.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton.missing);\n label.setAttribute(\n \"data-l10n-id\",\n AltText.#l10nNewButton[\"missing-label\"]\n );\n } else {\n altText.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button\");\n label.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-button-label\");\n }\n\n const signal = this.#editor._uiManager._signal;\n altText.addEventListener(\"contextmenu\", noContextMenu, { signal });\n altText.addEventListener(\"pointerdown\", event => event.stopPropagation(), {\n signal,\n });\n\n const onClick = event => {\n event.preventDefault();\n this.#editor._uiManager.editAltText(this.#editor);\n if (this.#useNewAltTextFlow) {\n this.#editor._reportTelemetry({\n action: \"pdfjs.image.alt_text.image_status_label_clicked\",\n data: { label: this.#label },\n });\n }\n };\n altText.addEventListener(\"click\", onClick, { capture: true, signal });\n altText.addEventListener(\n \"keydown\",\n event => {\n if (event.target === altText && event.key === \"Enter\") {\n this.#altTextWasFromKeyBoard = true;\n onClick(event);\n }\n },\n { signal }\n );\n await this.#setState();\n\n return altText;\n }\n\n get #label() {\n return (\n (this.#altText && \"added\") ||\n (this.#altText === null && this.guessedText && \"review\") ||\n \"missing\"\n );\n }\n\n finish() {\n if (!this.#altTextButton) {\n return;\n }\n this.#altTextButton.focus({ focusVisible: this.#altTextWasFromKeyBoard });\n this.#altTextWasFromKeyBoard = false;\n }\n\n isEmpty() {\n if (this.#useNewAltTextFlow) {\n return this.#altText === null;\n }\n return !this.#altText && !this.#altTextDecorative;\n }\n\n hasData() {\n if (this.#useNewAltTextFlow) {\n return this.#altText !== null || !!this.#guessedText;\n }\n return this.isEmpty();\n }\n\n get guessedText() {\n return this.#guessedText;\n }\n\n async setGuessedText(guessedText) {\n if (this.#altText !== null) {\n // The user provided their own alt text, so we don't want to overwrite it.\n return;\n }\n this.#guessedText = guessedText;\n this.#textWithDisclaimer = await AltText._l10n.get(\n \"pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer\",\n { generatedAltText: guessedText }\n );\n this.#setState();\n }\n\n toggleAltTextBadge(visibility = false) {\n if (!this.#useNewAltTextFlow || this.#altText) {\n this.#badge?.remove();\n this.#badge = null;\n return;\n }\n if (!this.#badge) {\n const badge = (this.#badge = document.createElement(\"div\"));\n badge.className = \"noAltTextBadge\";\n this.#editor.div.append(badge);\n }\n this.#badge.classList.toggle(\"hidden\", !visibility);\n }\n\n serialize(isForCopying) {\n let altText = this.#altText;\n if (!isForCopying && this.#guessedText === altText) {\n altText = this.#textWithDisclaimer;\n }\n return {\n altText,\n decorative: this.#altTextDecorative,\n guessedText: this.#guessedText,\n textWithDisclaimer: this.#textWithDisclaimer,\n };\n }\n\n get data() {\n return {\n altText: this.#altText,\n decorative: this.#altTextDecorative,\n };\n }\n\n /**\n * Set the alt text data.\n */\n set data({\n altText,\n decorative,\n guessedText,\n textWithDisclaimer,\n cancel = false,\n }) {\n if (guessedText) {\n this.#guessedText = guessedText;\n this.#textWithDisclaimer = textWithDisclaimer;\n }\n if (this.#altText === altText && this.#altTextDecorative === decorative) {\n return;\n }\n if (!cancel) {\n this.#altText = altText;\n this.#altTextDecorative = decorative;\n }\n this.#setState();\n }\n\n toggle(enabled = false) {\n if (!this.#altTextButton) {\n return;\n }\n if (!enabled && this.#altTextTooltipTimeout) {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n }\n this.#altTextButton.disabled = !enabled;\n }\n\n shown() {\n this.#editor._reportTelemetry({\n action: \"pdfjs.image.alt_text.image_status_label_displayed\",\n data: { label: this.#label },\n });\n }\n\n destroy() {\n this.#altTextButton?.remove();\n this.#altTextButton = null;\n this.#altTextButtonLabel = null;\n this.#altTextTooltip = null;\n this.#badge?.remove();\n this.#badge = null;\n }\n\n async #setState() {\n const button = this.#altTextButton;\n if (!button) {\n return;\n }\n\n if (this.#useNewAltTextFlow) {\n button.classList.toggle(\"done\", !!this.#altText);\n button.setAttribute(\"data-l10n-id\", AltText.#l10nNewButton[this.#label]);\n\n this.#altTextButtonLabel?.setAttribute(\n \"data-l10n-id\",\n AltText.#l10nNewButton[`${this.#label}-label`]\n );\n if (!this.#altText) {\n this.#altTextTooltip?.remove();\n return;\n }\n } else {\n if (!this.#altText && !this.#altTextDecorative) {\n button.classList.remove(\"done\");\n this.#altTextTooltip?.remove();\n return;\n }\n button.classList.add(\"done\");\n button.setAttribute(\"data-l10n-id\", \"pdfjs-editor-alt-text-edit-button\");\n }\n\n let tooltip = this.#altTextTooltip;\n if (!tooltip) {\n this.#altTextTooltip = tooltip = document.createElement(\"span\");\n tooltip.className = \"tooltip\";\n tooltip.setAttribute(\"role\", \"tooltip\");\n tooltip.id = `alt-text-tooltip-${this.#editor.id}`;\n\n const DELAY_TO_SHOW_TOOLTIP = 100;\n const signal = this.#editor._uiManager._signal;\n signal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n },\n { once: true }\n );\n button.addEventListener(\n \"mouseenter\",\n () => {\n this.#altTextTooltipTimeout = setTimeout(() => {\n this.#altTextTooltipTimeout = null;\n this.#altTextTooltip.classList.add(\"show\");\n this.#editor._reportTelemetry({\n action: \"alt_text_tooltip\",\n });\n }, DELAY_TO_SHOW_TOOLTIP);\n },\n { signal }\n );\n button.addEventListener(\n \"mouseleave\",\n () => {\n if (this.#altTextTooltipTimeout) {\n clearTimeout(this.#altTextTooltipTimeout);\n this.#altTextTooltipTimeout = null;\n }\n this.#altTextTooltip?.classList.remove(\"show\");\n },\n { signal }\n );\n }\n if (this.#altTextDecorative) {\n tooltip.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-alt-text-decorative-tooltip\"\n );\n } else {\n tooltip.removeAttribute(\"data-l10n-id\");\n tooltip.textContent = this.#altText;\n }\n\n if (!tooltip.parentNode) {\n button.append(tooltip);\n }\n\n const element = this.#editor.getElementForAltText();\n element?.setAttribute(\"aria-describedby\", tooltip.id);\n }\n}\n\nexport { AltText };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { OutputScale, stopEvent } from \"./display_utils.js\";\n\nclass TouchManager {\n #container;\n\n #isPinching = false;\n\n #isPinchingStopped = null;\n\n #isPinchingDisabled;\n\n #onPinchStart;\n\n #onPinching;\n\n #onPinchEnd;\n\n #pointerDownAC = null;\n\n #signal;\n\n #touchInfo = null;\n\n #touchManagerAC;\n\n #touchMoveAC = null;\n\n constructor({\n container,\n isPinchingDisabled = null,\n isPinchingStopped = null,\n onPinchStart = null,\n onPinching = null,\n onPinchEnd = null,\n signal,\n }) {\n this.#container = container;\n this.#isPinchingStopped = isPinchingStopped;\n this.#isPinchingDisabled = isPinchingDisabled;\n this.#onPinchStart = onPinchStart;\n this.#onPinching = onPinching;\n this.#onPinchEnd = onPinchEnd;\n this.#touchManagerAC = new AbortController();\n this.#signal = AbortSignal.any([signal, this.#touchManagerAC.signal]);\n\n container.addEventListener(\"touchstart\", this.#onTouchStart.bind(this), {\n passive: false,\n signal: this.#signal,\n });\n }\n\n /**\n * NOTE: Don't shadow this value since `devicePixelRatio` may change if the\n * window resolution changes, e.g. if the viewer is moved to another monitor.\n */\n get MIN_TOUCH_DISTANCE_TO_PINCH() {\n // The 35 is coming from:\n // https://searchfox.org/mozilla-central/source/gfx/layers/apz/src/GestureEventListener.cpp#36\n //\n // The properties TouchEvent::screenX/Y are in screen CSS pixels:\n // https://developer.mozilla.org/en-US/docs/Web/API/Touch/screenX#examples\n // MIN_TOUCH_DISTANCE_TO_PINCH is in CSS pixels.\n return 35 / OutputScale.pixelRatio;\n }\n\n #onTouchStart(evt) {\n if (this.#isPinchingDisabled?.()) {\n return;\n }\n\n if (evt.touches.length === 1) {\n if (this.#pointerDownAC) {\n return;\n }\n const pointerDownAC = (this.#pointerDownAC = new AbortController());\n const signal = AbortSignal.any([this.#signal, pointerDownAC.signal]);\n const container = this.#container;\n\n // We want to have the events at the capture phase to make sure we can\n // cancel them.\n const opts = { capture: true, signal, passive: false };\n const cancelPointerDown = e => {\n if (e.pointerType === \"touch\") {\n this.#pointerDownAC?.abort();\n this.#pointerDownAC = null;\n }\n };\n container.addEventListener(\n \"pointerdown\",\n e => {\n if (e.pointerType === \"touch\") {\n // This is the second finger so we don't want it select something\n // or whatever.\n stopEvent(e);\n cancelPointerDown(e);\n }\n },\n opts\n );\n container.addEventListener(\"pointerup\", cancelPointerDown, opts);\n container.addEventListener(\"pointercancel\", cancelPointerDown, opts);\n return;\n }\n\n if (!this.#touchMoveAC) {\n this.#touchMoveAC = new AbortController();\n const signal = AbortSignal.any([this.#signal, this.#touchMoveAC.signal]);\n const container = this.#container;\n\n const opt = { signal, capture: false, passive: false };\n container.addEventListener(\n \"touchmove\",\n this.#onTouchMove.bind(this),\n opt\n );\n const onTouchEnd = this.#onTouchEnd.bind(this);\n container.addEventListener(\"touchend\", onTouchEnd, opt);\n container.addEventListener(\"touchcancel\", onTouchEnd, opt);\n\n opt.capture = true;\n container.addEventListener(\"pointerdown\", stopEvent, opt);\n container.addEventListener(\"pointermove\", stopEvent, opt);\n container.addEventListener(\"pointercancel\", stopEvent, opt);\n container.addEventListener(\"pointerup\", stopEvent, opt);\n this.#onPinchStart?.();\n }\n\n stopEvent(evt);\n\n if (evt.touches.length !== 2 || this.#isPinchingStopped?.()) {\n this.#touchInfo = null;\n return;\n }\n\n let [touch0, touch1] = evt.touches;\n if (touch0.identifier > touch1.identifier) {\n [touch0, touch1] = [touch1, touch0];\n }\n this.#touchInfo = {\n touch0X: touch0.screenX,\n touch0Y: touch0.screenY,\n touch1X: touch1.screenX,\n touch1Y: touch1.screenY,\n };\n }\n\n #onTouchMove(evt) {\n if (!this.#touchInfo || evt.touches.length !== 2) {\n return;\n }\n\n stopEvent(evt);\n\n let [touch0, touch1] = evt.touches;\n if (touch0.identifier > touch1.identifier) {\n [touch0, touch1] = [touch1, touch0];\n }\n const { screenX: screen0X, screenY: screen0Y } = touch0;\n const { screenX: screen1X, screenY: screen1Y } = touch1;\n const touchInfo = this.#touchInfo;\n const {\n touch0X: pTouch0X,\n touch0Y: pTouch0Y,\n touch1X: pTouch1X,\n touch1Y: pTouch1Y,\n } = touchInfo;\n\n const prevGapX = pTouch1X - pTouch0X;\n const prevGapY = pTouch1Y - pTouch0Y;\n const currGapX = screen1X - screen0X;\n const currGapY = screen1Y - screen0Y;\n\n const distance = Math.hypot(currGapX, currGapY) || 1;\n const pDistance = Math.hypot(prevGapX, prevGapY) || 1;\n if (\n !this.#isPinching &&\n Math.abs(pDistance - distance) <= TouchManager.MIN_TOUCH_DISTANCE_TO_PINCH\n ) {\n return;\n }\n\n touchInfo.touch0X = screen0X;\n touchInfo.touch0Y = screen0Y;\n touchInfo.touch1X = screen1X;\n touchInfo.touch1Y = screen1Y;\n\n if (!this.#isPinching) {\n // Start pinching.\n this.#isPinching = true;\n\n // We return here else the first pinch is a bit too much\n return;\n }\n\n const origin = [(screen0X + screen1X) / 2, (screen0Y + screen1Y) / 2];\n this.#onPinching?.(origin, pDistance, distance);\n }\n\n #onTouchEnd(evt) {\n if (evt.touches.length >= 2) {\n return;\n }\n // #touchMoveAC shouldn't be null but it seems that irl it can (see #19793).\n if (this.#touchMoveAC) {\n this.#touchMoveAC.abort();\n this.#touchMoveAC = null;\n this.#onPinchEnd?.();\n }\n\n if (!this.#touchInfo) {\n return;\n }\n stopEvent(evt);\n this.#touchInfo = null;\n this.#isPinching = false;\n }\n\n destroy() {\n this.#touchManagerAC?.abort();\n this.#touchManagerAC = null;\n this.#pointerDownAC?.abort();\n this.#pointerDownAC = null;\n }\n}\n\nexport { TouchManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n AnnotationEditorUIManager,\n bindEvents,\n ColorManager,\n KeyboardManager,\n} from \"./tools.js\";\nimport {\n FeatureTest,\n MathClamp,\n shadow,\n unreachable,\n} from \"../../shared/util.js\";\nimport { noContextMenu, stopEvent } from \"../display_utils.js\";\nimport { AltText } from \"./alt_text.js\";\nimport { EditorToolbar } from \"./toolbar.js\";\nimport { TouchManager } from \"../touch_manager.js\";\n\n/**\n * @typedef {Object} AnnotationEditorParameters\n * @property {AnnotationEditorUIManager} uiManager - the global manager\n * @property {AnnotationEditorLayer} parent - the layer containing this editor\n * @property {string} id - editor id\n * @property {number} x - x-coordinate\n * @property {number} y - y-coordinate\n */\n\n/**\n * Base class for editors.\n */\nclass AnnotationEditor {\n #accessibilityData = null;\n\n #allResizerDivs = null;\n\n #altText = null;\n\n #disabled = false;\n\n #dragPointerId = null;\n\n #dragPointerType = \"\";\n\n #keepAspectRatio = false;\n\n #resizersDiv = null;\n\n #lastPointerCoords = null;\n\n #savedDimensions = null;\n\n #focusAC = null;\n\n #focusedResizerName = \"\";\n\n #hasBeenClicked = false;\n\n #initialRect = null;\n\n #isEditing = false;\n\n #isInEditMode = false;\n\n #isResizerEnabledForKeyboard = false;\n\n #moveInDOMTimeout = null;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #telemetryTimeouts = null;\n\n #touchManager = null;\n\n _isCopy = false;\n\n _editToolbar = null;\n\n _initialOptions = Object.create(null);\n\n _initialData = null;\n\n _isVisible = true;\n\n _uiManager = null;\n\n _focusEventsAllowed = true;\n\n static _l10n = null;\n\n static _l10nResizer = null;\n\n #isDraggable = false;\n\n #zIndex = AnnotationEditor._zIndex++;\n\n static _borderLineWidth = -1;\n\n static _colorManager = new ColorManager();\n\n static _zIndex = 1;\n\n // Time to wait (in ms) before sending the telemetry data.\n // We wait a bit to avoid sending too many requests when changing something\n // like the thickness of a line.\n static _telemetryTimeout = 1000;\n\n static get _resizerKeyboardManager() {\n const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n\n return shadow(\n this,\n \"_resizerKeyboardManager\",\n new KeyboardManager([\n [[\"ArrowLeft\", \"mac+ArrowLeft\"], resize, { args: [-small, 0] }],\n [\n [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n resize,\n { args: [-big, 0] },\n ],\n [[\"ArrowRight\", \"mac+ArrowRight\"], resize, { args: [small, 0] }],\n [\n [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n resize,\n { args: [big, 0] },\n ],\n [[\"ArrowUp\", \"mac+ArrowUp\"], resize, { args: [0, -small] }],\n [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, { args: [0, -big] }],\n [[\"ArrowDown\", \"mac+ArrowDown\"], resize, { args: [0, small] }],\n [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, { args: [0, big] }],\n [\n [\"Escape\", \"mac+Escape\"],\n AnnotationEditor.prototype._stopResizingWithKeyboard,\n ],\n ])\n );\n }\n\n /**\n * @param {AnnotationEditorParameters} parameters\n */\n constructor(parameters) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === AnnotationEditor\n ) {\n unreachable(\"Cannot initialize AnnotationEditor.\");\n }\n\n this.parent = parameters.parent;\n this.id = parameters.id;\n this.width = this.height = null;\n this.pageIndex = parameters.parent.pageIndex;\n this.name = parameters.name;\n this.div = null;\n this._uiManager = parameters.uiManager;\n this.annotationElementId = null;\n this._willKeepAspectRatio = false;\n this._initialOptions.isCentered = parameters.isCentered;\n this._structTreeParentId = null;\n\n const {\n rotation,\n rawDims: { pageWidth, pageHeight, pageX, pageY },\n } = this.parent.viewport;\n\n this.rotation = rotation;\n this.pageRotation =\n (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n this.pageDimensions = [pageWidth, pageHeight];\n this.pageTranslation = [pageX, pageY];\n\n const [width, height] = this.parentDimensions;\n this.x = parameters.x / width;\n this.y = parameters.y / height;\n\n this.isAttachedToDOM = false;\n this.deleted = false;\n }\n\n get editorType() {\n return Object.getPrototypeOf(this).constructor._type;\n }\n\n static get isDrawer() {\n return false;\n }\n\n static get _defaultLineColor() {\n return shadow(\n this,\n \"_defaultLineColor\",\n this._colorManager.getHexCode(\"CanvasText\")\n );\n }\n\n static deleteAnnotationElement(editor) {\n const fakeEditor = new FakeEditor({\n id: editor.parent.getNextId(),\n parent: editor.parent,\n uiManager: editor._uiManager,\n });\n fakeEditor.annotationElementId = editor.annotationElementId;\n fakeEditor.deleted = true;\n fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n }\n\n /**\n * Initialize the l10n stuff for this type of editor.\n * @param {Object} l10n\n */\n static initialize(l10n, _uiManager) {\n AnnotationEditor._l10n ??= l10n;\n\n AnnotationEditor._l10nResizer ||= Object.freeze({\n topLeft: \"pdfjs-editor-resizer-top-left\",\n topMiddle: \"pdfjs-editor-resizer-top-middle\",\n topRight: \"pdfjs-editor-resizer-top-right\",\n middleRight: \"pdfjs-editor-resizer-middle-right\",\n bottomRight: \"pdfjs-editor-resizer-bottom-right\",\n bottomMiddle: \"pdfjs-editor-resizer-bottom-middle\",\n bottomLeft: \"pdfjs-editor-resizer-bottom-left\",\n middleLeft: \"pdfjs-editor-resizer-middle-left\",\n });\n\n if (AnnotationEditor._borderLineWidth !== -1) {\n return;\n }\n const style = getComputedStyle(document.documentElement);\n AnnotationEditor._borderLineWidth =\n parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n }\n\n /**\n * Update the default parameters for this type of editor.\n * @param {number} _type\n * @param {*} _value\n */\n static updateDefaultParams(_type, _value) {}\n\n /**\n * Get the default properties to set in the UI for this type of editor.\n * @returns {Array}\n */\n static get defaultPropertiesToUpdate() {\n return [];\n }\n\n /**\n * Check if this kind of editor is able to handle the given mime type for\n * pasting.\n * @param {string} mime\n * @returns {boolean}\n */\n static isHandlingMimeForPasting(mime) {\n return false;\n }\n\n /**\n * Extract the data from the clipboard item and delegate the creation of the\n * editor to the parent.\n * @param {DataTransferItem} item\n * @param {AnnotationEditorLayer} parent\n */\n static paste(item, parent) {\n unreachable(\"Not implemented\");\n }\n\n /**\n * Get the properties to update in the UI for this editor.\n * @returns {Array}\n */\n get propertiesToUpdate() {\n return [];\n }\n\n get _isDraggable() {\n return this.#isDraggable;\n }\n\n set _isDraggable(value) {\n this.#isDraggable = value;\n this.div?.classList.toggle(\"draggable\", value);\n }\n\n /**\n * @returns {boolean} true if the editor handles the Enter key itself.\n */\n get isEnterHandled() {\n return true;\n }\n\n center() {\n const [pageWidth, pageHeight] = this.pageDimensions;\n switch (this.parentRotation) {\n case 90:\n this.x -= (this.height * pageHeight) / (pageWidth * 2);\n this.y += (this.width * pageWidth) / (pageHeight * 2);\n break;\n case 180:\n this.x += this.width / 2;\n this.y += this.height / 2;\n break;\n case 270:\n this.x += (this.height * pageHeight) / (pageWidth * 2);\n this.y -= (this.width * pageWidth) / (pageHeight * 2);\n break;\n default:\n this.x -= this.width / 2;\n this.y -= this.height / 2;\n break;\n }\n this.fixAndSetPosition();\n }\n\n /**\n * Add some commands into the CommandManager (undo/redo stuff).\n * @param {Object} params\n */\n addCommands(params) {\n this._uiManager.addCommands(params);\n }\n\n get currentLayer() {\n return this._uiManager.currentLayer;\n }\n\n /**\n * This editor will be behind the others.\n */\n setInBackground() {\n this.div.style.zIndex = 0;\n }\n\n /**\n * This editor will be in the foreground.\n */\n setInForeground() {\n this.div.style.zIndex = this.#zIndex;\n }\n\n setParent(parent) {\n if (parent !== null) {\n this.pageIndex = parent.pageIndex;\n this.pageDimensions = parent.pageDimensions;\n } else {\n // The editor is being removed from the DOM, so we need to stop resizing.\n this.#stopResizing();\n }\n this.parent = parent;\n }\n\n /**\n * onfocus callback.\n */\n focusin(event) {\n if (!this._focusEventsAllowed) {\n return;\n }\n if (!this.#hasBeenClicked) {\n this.parent.setSelected(this);\n } else {\n this.#hasBeenClicked = false;\n }\n }\n\n /**\n * onblur callback.\n * @param {FocusEvent} event\n */\n focusout(event) {\n if (!this._focusEventsAllowed) {\n return;\n }\n\n if (!this.isAttachedToDOM) {\n return;\n }\n\n // In case of focusout, the relatedTarget is the element which\n // is grabbing the focus.\n // So if the related target is an element under the div for this\n // editor, then the editor isn't unactive.\n const target = event.relatedTarget;\n if (target?.closest(`#${this.id}`)) {\n return;\n }\n\n event.preventDefault();\n\n if (!this.parent?.isMultipleSelection) {\n this.commitOrRemove();\n }\n }\n\n commitOrRemove() {\n if (this.isEmpty()) {\n this.remove();\n } else {\n this.commit();\n }\n }\n\n /**\n * Commit the data contained in this editor.\n */\n commit() {\n this.addToAnnotationStorage();\n }\n\n addToAnnotationStorage() {\n this._uiManager.addToAnnotationStorage(this);\n }\n\n /**\n * Set the editor position within its parent.\n * @param {number} x\n * @param {number} y\n * @param {number} tx - x-translation in screen coordinates.\n * @param {number} ty - y-translation in screen coordinates.\n */\n setAt(x, y, tx, ty) {\n const [width, height] = this.parentDimensions;\n [tx, ty] = this.screenToPageTranslation(tx, ty);\n\n this.x = (x + tx) / width;\n this.y = (y + ty) / height;\n\n this.fixAndSetPosition();\n }\n\n _moveAfterPaste(baseX, baseY) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.setAt(\n baseX * parentWidth,\n baseY * parentHeight,\n this.width * parentWidth,\n this.height * parentHeight\n );\n this._onTranslated();\n }\n\n #translate([width, height], x, y) {\n [x, y] = this.screenToPageTranslation(x, y);\n\n this.x += x / width;\n this.y += y / height;\n\n this._onTranslating(this.x, this.y);\n\n this.fixAndSetPosition();\n }\n\n /**\n * Translate the editor position within its parent.\n * @param {number} x - x-translation in screen coordinates.\n * @param {number} y - y-translation in screen coordinates.\n */\n translate(x, y) {\n // We don't change the initial position because the move here hasn't been\n // done by the user.\n this.#translate(this.parentDimensions, x, y);\n }\n\n /**\n * Translate the editor position within its page and adjust the scroll\n * in order to have the editor in the view.\n * @param {number} x - x-translation in page coordinates.\n * @param {number} y - y-translation in page coordinates.\n */\n translateInPage(x, y) {\n this.#initialRect ||= [this.x, this.y, this.width, this.height];\n this.#translate(this.pageDimensions, x, y);\n this.div.scrollIntoView({ block: \"nearest\" });\n }\n\n translationDone() {\n this._onTranslated(this.x, this.y);\n }\n\n drag(tx, ty) {\n this.#initialRect ||= [this.x, this.y, this.width, this.height];\n const {\n div,\n parentDimensions: [parentWidth, parentHeight],\n } = this;\n this.x += tx / parentWidth;\n this.y += ty / parentHeight;\n if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n // It's possible to not have a parent: for example, when the user is\n // dragging all the selected editors but this one on a page which has been\n // destroyed.\n // It's why we need to check for it. In such a situation, it isn't really\n // a problem to not find a new parent: it's something which is related to\n // what the user is seeing, hence it depends on how pages are layed out.\n\n // The element will be outside of its parent so change the parent.\n const { x, y } = this.div.getBoundingClientRect();\n if (this.parent.findNewParent(this, x, y)) {\n this.x -= Math.floor(this.x);\n this.y -= Math.floor(this.y);\n }\n }\n\n // The editor can be moved wherever the user wants, so we don't need to fix\n // the position: it'll be done when the user will release the mouse button.\n\n let { x, y } = this;\n const [bx, by] = this.getBaseTranslation();\n x += bx;\n y += by;\n\n const { style } = div;\n style.left = `${(100 * x).toFixed(2)}%`;\n style.top = `${(100 * y).toFixed(2)}%`;\n\n this._onTranslating(x, y);\n\n div.scrollIntoView({ block: \"nearest\" });\n }\n\n /**\n * Called when the editor is being translated.\n * @param {number} x - in page coordinates.\n * @param {number} y - in page coordinates.\n */\n _onTranslating(x, y) {}\n\n /**\n * Called when the editor has been translated.\n * @param {number} x - in page coordinates.\n * @param {number} y - in page coordinates.\n */\n _onTranslated(x, y) {}\n\n get _hasBeenMoved() {\n return (\n !!this.#initialRect &&\n (this.#initialRect[0] !== this.x || this.#initialRect[1] !== this.y)\n );\n }\n\n get _hasBeenResized() {\n return (\n !!this.#initialRect &&\n (this.#initialRect[2] !== this.width ||\n this.#initialRect[3] !== this.height)\n );\n }\n\n /**\n * Get the translation to take into account the editor border.\n * The CSS engine positions the element by taking the border into account so\n * we must apply the opposite translation to have the editor in the right\n * position.\n * @returns {Array}\n */\n getBaseTranslation() {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const { _borderLineWidth } = AnnotationEditor;\n const x = _borderLineWidth / parentWidth;\n const y = _borderLineWidth / parentHeight;\n switch (this.rotation) {\n case 90:\n return [-x, y];\n case 180:\n return [x, y];\n case 270:\n return [x, -y];\n default:\n return [-x, -y];\n }\n }\n\n /**\n * @returns {boolean} true if position must be fixed (i.e. make the x and y\n * living in the page).\n */\n get _mustFixPosition() {\n return true;\n }\n\n /**\n * Fix the position of the editor in order to keep it inside its parent page.\n * @param {number} [rotation] - the rotation of the page.\n */\n fixAndSetPosition(rotation = this.rotation) {\n const {\n div: { style },\n pageDimensions: [pageWidth, pageHeight],\n } = this;\n let { x, y, width, height } = this;\n width *= pageWidth;\n height *= pageHeight;\n x *= pageWidth;\n y *= pageHeight;\n\n if (this._mustFixPosition) {\n switch (rotation) {\n case 0:\n x = MathClamp(x, 0, pageWidth - width);\n y = MathClamp(y, 0, pageHeight - height);\n break;\n case 90:\n x = MathClamp(x, 0, pageWidth - height);\n y = MathClamp(y, width, pageHeight);\n break;\n case 180:\n x = MathClamp(x, width, pageWidth);\n y = MathClamp(y, height, pageHeight);\n break;\n case 270:\n x = MathClamp(x, height, pageWidth);\n y = MathClamp(y, 0, pageHeight - width);\n break;\n }\n }\n\n this.x = x /= pageWidth;\n this.y = y /= pageHeight;\n\n const [bx, by] = this.getBaseTranslation();\n x += bx;\n y += by;\n\n style.left = `${(100 * x).toFixed(2)}%`;\n style.top = `${(100 * y).toFixed(2)}%`;\n\n this.moveInDOM();\n }\n\n static #rotatePoint(x, y, angle) {\n switch (angle) {\n case 90:\n return [y, -x];\n case 180:\n return [-x, -y];\n case 270:\n return [-y, x];\n default:\n return [x, y];\n }\n }\n\n /**\n * Convert a screen translation into a page one.\n * @param {number} x\n * @param {number} y\n */\n screenToPageTranslation(x, y) {\n return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n }\n\n /**\n * Convert a page translation into a screen one.\n * @param {number} x\n * @param {number} y\n */\n pageTranslationToScreen(x, y) {\n return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n }\n\n #getRotationMatrix(rotation) {\n switch (rotation) {\n case 90: {\n const [pageWidth, pageHeight] = this.pageDimensions;\n return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n }\n case 180:\n return [-1, 0, 0, -1];\n case 270: {\n const [pageWidth, pageHeight] = this.pageDimensions;\n return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n }\n default:\n return [1, 0, 0, 1];\n }\n }\n\n get parentScale() {\n return this._uiManager.viewParameters.realScale;\n }\n\n get parentRotation() {\n return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n }\n\n get parentDimensions() {\n const {\n parentScale,\n pageDimensions: [pageWidth, pageHeight],\n } = this;\n return [pageWidth * parentScale, pageHeight * parentScale];\n }\n\n /**\n * Set the dimensions of this editor.\n * @param {number} width\n * @param {number} height\n */\n setDims(width, height) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const { style } = this.div;\n style.width = `${((100 * width) / parentWidth).toFixed(2)}%`;\n if (!this.#keepAspectRatio) {\n style.height = `${((100 * height) / parentHeight).toFixed(2)}%`;\n }\n }\n\n fixDims() {\n const { style } = this.div;\n const { height, width } = style;\n const widthPercent = width.endsWith(\"%\");\n const heightPercent = !this.#keepAspectRatio && height.endsWith(\"%\");\n if (widthPercent && heightPercent) {\n return;\n }\n\n const [parentWidth, parentHeight] = this.parentDimensions;\n if (!widthPercent) {\n style.width = `${((100 * parseFloat(width)) / parentWidth).toFixed(2)}%`;\n }\n if (!this.#keepAspectRatio && !heightPercent) {\n style.height = `${((100 * parseFloat(height)) / parentHeight).toFixed(2)}%`;\n }\n }\n\n /**\n * Get the translation used to position this editor when it's created.\n * @returns {Array}\n */\n getInitialTranslation() {\n return [0, 0];\n }\n\n #createResizers() {\n if (this.#resizersDiv) {\n return;\n }\n this.#resizersDiv = document.createElement(\"div\");\n this.#resizersDiv.classList.add(\"resizers\");\n // When the resizers are used with the keyboard, they're focusable, hence\n // we want to have them in this order (top left, top middle, top right, ...)\n // in the DOM to have the focus order correct.\n const classes = this._willKeepAspectRatio\n ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"]\n : [\n \"topLeft\",\n \"topMiddle\",\n \"topRight\",\n \"middleRight\",\n \"bottomRight\",\n \"bottomMiddle\",\n \"bottomLeft\",\n \"middleLeft\",\n ];\n const signal = this._uiManager._signal;\n for (const name of classes) {\n const div = document.createElement(\"div\");\n this.#resizersDiv.append(div);\n div.classList.add(\"resizer\", name);\n div.setAttribute(\"data-resizer-name\", name);\n div.addEventListener(\n \"pointerdown\",\n this.#resizerPointerdown.bind(this, name),\n { signal }\n );\n div.addEventListener(\"contextmenu\", noContextMenu, { signal });\n div.tabIndex = -1;\n }\n this.div.prepend(this.#resizersDiv);\n }\n\n #resizerPointerdown(name, event) {\n event.preventDefault();\n const { isMac } = FeatureTest.platform;\n if (event.button !== 0 || (event.ctrlKey && isMac)) {\n return;\n }\n\n this.#altText?.toggle(false);\n\n const savedDraggable = this._isDraggable;\n this._isDraggable = false;\n this.#lastPointerCoords = [event.screenX, event.screenY];\n\n const ac = new AbortController();\n const signal = this._uiManager.combinedSignal(ac);\n\n this.parent.togglePointerEvents(false);\n window.addEventListener(\n \"pointermove\",\n this.#resizerPointermove.bind(this, name),\n { passive: true, capture: true, signal }\n );\n window.addEventListener(\n \"touchmove\",\n stopEvent /* Prevent the page from scrolling */,\n { passive: false, signal }\n );\n window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n const savedParentCursor = this.parent.div.style.cursor;\n const savedCursor = this.div.style.cursor;\n this.div.style.cursor = this.parent.div.style.cursor =\n window.getComputedStyle(event.target).cursor;\n\n const pointerUpCallback = () => {\n ac.abort();\n this.parent.togglePointerEvents(true);\n this.#altText?.toggle(true);\n this._isDraggable = savedDraggable;\n this.parent.div.style.cursor = savedParentCursor;\n this.div.style.cursor = savedCursor;\n\n this.#addResizeToUndoStack();\n };\n window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n // If the user switches to another window (with alt+tab), then we end the\n // resize session.\n window.addEventListener(\"blur\", pointerUpCallback, { signal });\n }\n\n #resize(x, y, width, height) {\n this.width = width;\n this.height = height;\n this.x = x;\n this.y = y;\n const [parentWidth, parentHeight] = this.parentDimensions;\n this.setDims(parentWidth * width, parentHeight * height);\n this.fixAndSetPosition();\n this._onResized();\n }\n\n /**\n * Called when the editor has been resized.\n */\n _onResized() {}\n\n #addResizeToUndoStack() {\n if (!this.#savedDimensions) {\n return;\n }\n const { savedX, savedY, savedWidth, savedHeight } = this.#savedDimensions;\n this.#savedDimensions = null;\n\n const newX = this.x;\n const newY = this.y;\n const newWidth = this.width;\n const newHeight = this.height;\n if (\n newX === savedX &&\n newY === savedY &&\n newWidth === savedWidth &&\n newHeight === savedHeight\n ) {\n return;\n }\n\n this.addCommands({\n cmd: this.#resize.bind(this, newX, newY, newWidth, newHeight),\n undo: this.#resize.bind(this, savedX, savedY, savedWidth, savedHeight),\n mustExec: true,\n });\n }\n\n static _round(x) {\n // 10000 because we multiply by 100 and use toFixed(2) in fixAndSetPosition.\n // Without rounding, the positions of the corners other than the top left\n // one can be slightly wrong.\n return Math.round(x * 10000) / 10000;\n }\n\n #resizerPointermove(name, event) {\n const [parentWidth, parentHeight] = this.parentDimensions;\n const savedX = this.x;\n const savedY = this.y;\n const savedWidth = this.width;\n const savedHeight = this.height;\n const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n\n const rotationMatrix = this.#getRotationMatrix(this.rotation);\n const transf = (x, y) => [\n rotationMatrix[0] * x + rotationMatrix[2] * y,\n rotationMatrix[1] * x + rotationMatrix[3] * y,\n ];\n const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n const invTransf = (x, y) => [\n invRotationMatrix[0] * x + invRotationMatrix[2] * y,\n invRotationMatrix[1] * x + invRotationMatrix[3] * y,\n ];\n let getPoint;\n let getOpposite;\n let isDiagonal = false;\n let isHorizontal = false;\n\n switch (name) {\n case \"topLeft\":\n isDiagonal = true;\n getPoint = (w, h) => [0, 0];\n getOpposite = (w, h) => [w, h];\n break;\n case \"topMiddle\":\n getPoint = (w, h) => [w / 2, 0];\n getOpposite = (w, h) => [w / 2, h];\n break;\n case \"topRight\":\n isDiagonal = true;\n getPoint = (w, h) => [w, 0];\n getOpposite = (w, h) => [0, h];\n break;\n case \"middleRight\":\n isHorizontal = true;\n getPoint = (w, h) => [w, h / 2];\n getOpposite = (w, h) => [0, h / 2];\n break;\n case \"bottomRight\":\n isDiagonal = true;\n getPoint = (w, h) => [w, h];\n getOpposite = (w, h) => [0, 0];\n break;\n case \"bottomMiddle\":\n getPoint = (w, h) => [w / 2, h];\n getOpposite = (w, h) => [w / 2, 0];\n break;\n case \"bottomLeft\":\n isDiagonal = true;\n getPoint = (w, h) => [0, h];\n getOpposite = (w, h) => [w, 0];\n break;\n case \"middleLeft\":\n isHorizontal = true;\n getPoint = (w, h) => [0, h / 2];\n getOpposite = (w, h) => [w, h / 2];\n break;\n }\n\n const point = getPoint(savedWidth, savedHeight);\n const oppositePoint = getOpposite(savedWidth, savedHeight);\n let transfOppositePoint = transf(...oppositePoint);\n const oppositeX = AnnotationEditor._round(savedX + transfOppositePoint[0]);\n const oppositeY = AnnotationEditor._round(savedY + transfOppositePoint[1]);\n let ratioX = 1;\n let ratioY = 1;\n\n let deltaX, deltaY;\n\n if (!event.fromKeyboard) {\n // We can't use event.movementX/Y because they're not reliable:\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\n // (it was buggy on a laptop with a touch screen).\n const { screenX, screenY } = event;\n const [lastScreenX, lastScreenY] = this.#lastPointerCoords;\n [deltaX, deltaY] = this.screenToPageTranslation(\n screenX - lastScreenX,\n screenY - lastScreenY\n );\n this.#lastPointerCoords[0] = screenX;\n this.#lastPointerCoords[1] = screenY;\n } else {\n ({ deltaX, deltaY } = event);\n }\n [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n\n if (isDiagonal) {\n const oldDiag = Math.hypot(savedWidth, savedHeight);\n ratioX = ratioY = Math.max(\n Math.min(\n Math.hypot(\n oppositePoint[0] - point[0] - deltaX,\n oppositePoint[1] - point[1] - deltaY\n ) / oldDiag,\n // Avoid the editor to be larger than the page.\n 1 / savedWidth,\n 1 / savedHeight\n ),\n // Avoid the editor to be smaller than the minimum size.\n minWidth / savedWidth,\n minHeight / savedHeight\n );\n } else if (isHorizontal) {\n ratioX =\n MathClamp(Math.abs(oppositePoint[0] - point[0] - deltaX), minWidth, 1) /\n savedWidth;\n } else {\n ratioY =\n MathClamp(\n Math.abs(oppositePoint[1] - point[1] - deltaY),\n minHeight,\n 1\n ) / savedHeight;\n }\n\n const newWidth = AnnotationEditor._round(savedWidth * ratioX);\n const newHeight = AnnotationEditor._round(savedHeight * ratioY);\n transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n const newX = oppositeX - transfOppositePoint[0];\n const newY = oppositeY - transfOppositePoint[1];\n\n this.#initialRect ||= [this.x, this.y, this.width, this.height];\n this.width = newWidth;\n this.height = newHeight;\n this.x = newX;\n this.y = newY;\n\n this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n this.fixAndSetPosition();\n\n this._onResizing();\n }\n\n /**\n * Called when the editor is being resized.\n */\n _onResizing() {}\n\n /**\n * Called when the alt text dialog is closed.\n */\n altTextFinish() {\n this.#altText?.finish();\n }\n\n /**\n * Add a toolbar for this editor.\n * @returns {Promise}\n */\n async addEditToolbar() {\n if (this._editToolbar || this.#isInEditMode) {\n return this._editToolbar;\n }\n this._editToolbar = new EditorToolbar(this);\n this.div.append(this._editToolbar.render());\n if (this.#altText) {\n await this._editToolbar.addAltText(this.#altText);\n }\n\n return this._editToolbar;\n }\n\n removeEditToolbar() {\n if (!this._editToolbar) {\n return;\n }\n this._editToolbar.remove();\n this._editToolbar = null;\n\n // We destroy the alt text but we don't null it because we want to be able\n // to restore it in case the user undoes the deletion.\n this.#altText?.destroy();\n }\n\n addContainer(container) {\n const editToolbarDiv = this._editToolbar?.div;\n if (editToolbarDiv) {\n editToolbarDiv.before(container);\n } else {\n this.div.append(container);\n }\n }\n\n getClientDimensions() {\n return this.div.getBoundingClientRect();\n }\n\n async addAltTextButton() {\n if (this.#altText) {\n return;\n }\n AltText.initialize(AnnotationEditor._l10n);\n this.#altText = new AltText(this);\n if (this.#accessibilityData) {\n this.#altText.data = this.#accessibilityData;\n this.#accessibilityData = null;\n }\n await this.addEditToolbar();\n }\n\n get altTextData() {\n return this.#altText?.data;\n }\n\n /**\n * Set the alt text data.\n */\n set altTextData(data) {\n if (!this.#altText) {\n return;\n }\n this.#altText.data = data;\n }\n\n get guessedAltText() {\n return this.#altText?.guessedText;\n }\n\n async setGuessedAltText(text) {\n await this.#altText?.setGuessedText(text);\n }\n\n serializeAltText(isForCopying) {\n return this.#altText?.serialize(isForCopying);\n }\n\n hasAltText() {\n return !!this.#altText && !this.#altText.isEmpty();\n }\n\n hasAltTextData() {\n return this.#altText?.hasData() ?? false;\n }\n\n /**\n * Render this editor in a div.\n * @returns {HTMLDivElement | null}\n */\n render() {\n const div = (this.div = document.createElement(\"div\"));\n div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n div.className = this.name;\n div.setAttribute(\"id\", this.id);\n div.tabIndex = this.#disabled ? -1 : 0;\n div.setAttribute(\"role\", \"application\");\n if (this.defaultL10nId) {\n div.setAttribute(\"data-l10n-id\", this.defaultL10nId);\n }\n if (!this._isVisible) {\n div.classList.add(\"hidden\");\n }\n\n this.setInForeground();\n this.#addFocusListeners();\n\n const [parentWidth, parentHeight] = this.parentDimensions;\n if (this.parentRotation % 180 !== 0) {\n div.style.maxWidth = `${((100 * parentHeight) / parentWidth).toFixed(\n 2\n )}%`;\n div.style.maxHeight = `${((100 * parentWidth) / parentHeight).toFixed(\n 2\n )}%`;\n }\n\n const [tx, ty] = this.getInitialTranslation();\n this.translate(tx, ty);\n\n bindEvents(this, div, [\"keydown\", \"pointerdown\"]);\n\n if (this.isResizable && this._uiManager._supportsPinchToZoom) {\n this.#touchManager ||= new TouchManager({\n container: div,\n isPinchingDisabled: () => !this.isSelected,\n onPinchStart: this.#touchPinchStartCallback.bind(this),\n onPinching: this.#touchPinchCallback.bind(this),\n onPinchEnd: this.#touchPinchEndCallback.bind(this),\n signal: this._uiManager._signal,\n });\n }\n\n this._uiManager._editorUndoBar?.hide();\n\n return div;\n }\n\n #touchPinchStartCallback() {\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n this.#altText?.toggle(false);\n this.parent.togglePointerEvents(false);\n }\n\n #touchPinchCallback(_origin, prevDistance, distance) {\n // Slightly slow down the zooming because the editor could be small and the\n // user could have difficulties to rescale it as they want.\n const slowDownFactor = 0.7;\n let factor =\n slowDownFactor * (distance / prevDistance) + 1 - slowDownFactor;\n if (factor === 1) {\n return;\n }\n\n const rotationMatrix = this.#getRotationMatrix(this.rotation);\n const transf = (x, y) => [\n rotationMatrix[0] * x + rotationMatrix[2] * y,\n rotationMatrix[1] * x + rotationMatrix[3] * y,\n ];\n\n // The center of the editor is the fixed point.\n const [parentWidth, parentHeight] = this.parentDimensions;\n const savedX = this.x;\n const savedY = this.y;\n const savedWidth = this.width;\n const savedHeight = this.height;\n\n const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n factor = Math.max(\n Math.min(factor, 1 / savedWidth, 1 / savedHeight),\n minWidth / savedWidth,\n minHeight / savedHeight\n );\n const newWidth = AnnotationEditor._round(savedWidth * factor);\n const newHeight = AnnotationEditor._round(savedHeight * factor);\n if (newWidth === savedWidth && newHeight === savedHeight) {\n return;\n }\n\n this.#initialRect ||= [savedX, savedY, savedWidth, savedHeight];\n const transfCenterPoint = transf(savedWidth / 2, savedHeight / 2);\n const centerX = AnnotationEditor._round(savedX + transfCenterPoint[0]);\n const centerY = AnnotationEditor._round(savedY + transfCenterPoint[1]);\n const newTransfCenterPoint = transf(newWidth / 2, newHeight / 2);\n\n this.x = centerX - newTransfCenterPoint[0];\n this.y = centerY - newTransfCenterPoint[1];\n this.width = newWidth;\n this.height = newHeight;\n\n this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n this.fixAndSetPosition();\n\n this._onResizing();\n }\n\n #touchPinchEndCallback() {\n this.#altText?.toggle(true);\n this.parent.togglePointerEvents(true);\n this.#addResizeToUndoStack();\n }\n\n /**\n * Onpointerdown callback.\n * @param {PointerEvent} event\n */\n pointerdown(event) {\n const { isMac } = FeatureTest.platform;\n if (event.button !== 0 || (event.ctrlKey && isMac)) {\n // Avoid to focus this editor because of a non-left click.\n event.preventDefault();\n return;\n }\n this.#hasBeenClicked = true;\n\n if (this._isDraggable) {\n this.#setUpDragSession(event);\n return;\n }\n\n this.#selectOnPointerEvent(event);\n }\n\n get isSelected() {\n return this._uiManager.isSelected(this);\n }\n\n #selectOnPointerEvent(event) {\n const { isMac } = FeatureTest.platform;\n if (\n (event.ctrlKey && !isMac) ||\n event.shiftKey ||\n (event.metaKey && isMac)\n ) {\n this.parent.toggleSelected(this);\n } else {\n this.parent.setSelected(this);\n }\n }\n\n #setUpDragSession(event) {\n const { isSelected } = this;\n this._uiManager.setUpDragSession();\n let hasDraggingStarted = false;\n\n const ac = new AbortController();\n const signal = this._uiManager.combinedSignal(ac);\n const opts = { capture: true, passive: false, signal };\n const cancelDrag = e => {\n ac.abort();\n\n this.#dragPointerId = null;\n this.#hasBeenClicked = false;\n if (!this._uiManager.endDragSession()) {\n this.#selectOnPointerEvent(e);\n }\n if (hasDraggingStarted) {\n this._onStopDragging();\n }\n };\n\n if (isSelected) {\n this.#prevDragX = event.clientX;\n this.#prevDragY = event.clientY;\n this.#dragPointerId = event.pointerId;\n this.#dragPointerType = event.pointerType;\n window.addEventListener(\n \"pointermove\",\n e => {\n if (!hasDraggingStarted) {\n hasDraggingStarted = true;\n this._onStartDragging();\n }\n const { clientX: x, clientY: y, pointerId } = e;\n if (pointerId !== this.#dragPointerId) {\n stopEvent(e);\n return;\n }\n const [tx, ty] = this.screenToPageTranslation(\n x - this.#prevDragX,\n y - this.#prevDragY\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n this._uiManager.dragSelectedEditors(tx, ty);\n },\n opts\n );\n window.addEventListener(\n \"touchmove\",\n stopEvent /* Prevent the page from scrolling */,\n opts\n );\n window.addEventListener(\n \"pointerdown\",\n // If the user drags with one finger and then clicks with another.\n e => {\n if (e.pointerType === this.#dragPointerType) {\n // We've a pinch to zoom session.\n // We cannot have two primaries at the same time.\n // It's possible to be in this state with Firefox and Gnome when\n // trying to drag with three fingers (see bug 1933716).\n if (this.#touchManager || e.isPrimary) {\n cancelDrag(e);\n }\n }\n stopEvent(e);\n },\n opts\n );\n }\n\n const pointerUpCallback = e => {\n if (!this.#dragPointerId || this.#dragPointerId === e.pointerId) {\n cancelDrag(e);\n return;\n }\n stopEvent(e);\n };\n window.addEventListener(\"pointerup\", pointerUpCallback, { signal });\n // If the user is using alt+tab during the dragging session, the pointerup\n // event could be not fired, but a blur event is fired so we can use it in\n // order to interrupt the dragging session.\n window.addEventListener(\"blur\", pointerUpCallback, { signal });\n }\n\n _onStartDragging() {}\n\n _onStopDragging() {}\n\n moveInDOM() {\n // Moving the editor in the DOM can be expensive, so we wait a bit before.\n // It's important to not block the UI (for example when changing the font\n // size in a FreeText).\n if (this.#moveInDOMTimeout) {\n clearTimeout(this.#moveInDOMTimeout);\n }\n this.#moveInDOMTimeout = setTimeout(() => {\n this.#moveInDOMTimeout = null;\n this.parent?.moveEditorInDOM(this);\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n this._uiManager._eventBus.dispatch(\"editormovedindom\", {\n source: this,\n });\n }\n }, 0);\n }\n\n _setParentAndPosition(parent, x, y) {\n parent.changeParent(this);\n this.x = x;\n this.y = y;\n this.fixAndSetPosition();\n this._onTranslated();\n }\n\n /**\n * Convert the current rect into a page one.\n * @param {number} tx - x-translation in screen coordinates.\n * @param {number} ty - y-translation in screen coordinates.\n * @param {number} [rotation] - the rotation of the page.\n */\n getRect(tx, ty, rotation = this.rotation) {\n const scale = this.parentScale;\n const [pageWidth, pageHeight] = this.pageDimensions;\n const [pageX, pageY] = this.pageTranslation;\n const shiftX = tx / scale;\n const shiftY = ty / scale;\n const x = this.x * pageWidth;\n const y = this.y * pageHeight;\n const width = this.width * pageWidth;\n const height = this.height * pageHeight;\n\n switch (rotation) {\n case 0:\n return [\n x + shiftX + pageX,\n pageHeight - y - shiftY - height + pageY,\n x + shiftX + width + pageX,\n pageHeight - y - shiftY + pageY,\n ];\n case 90:\n return [\n x + shiftY + pageX,\n pageHeight - y + shiftX + pageY,\n x + shiftY + height + pageX,\n pageHeight - y + shiftX + width + pageY,\n ];\n case 180:\n return [\n x - shiftX - width + pageX,\n pageHeight - y + shiftY + pageY,\n x - shiftX + pageX,\n pageHeight - y + shiftY + height + pageY,\n ];\n case 270:\n return [\n x - shiftY - height + pageX,\n pageHeight - y - shiftX - width + pageY,\n x - shiftY + pageX,\n pageHeight - y - shiftX + pageY,\n ];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n\n getRectInCurrentCoords(rect, pageHeight) {\n const [x1, y1, x2, y2] = rect;\n\n const width = x2 - x1;\n const height = y2 - y1;\n\n switch (this.rotation) {\n case 0:\n return [x1, pageHeight - y2, width, height];\n case 90:\n return [x1, pageHeight - y1, height, width];\n case 180:\n return [x2, pageHeight - y1, width, height];\n case 270:\n return [x2, pageHeight - y2, height, width];\n default:\n throw new Error(\"Invalid rotation\");\n }\n }\n\n /**\n * Executed once this editor has been rendered.\n * @param {boolean} focus - true if the editor should be focused.\n */\n onceAdded(focus) {}\n\n /**\n * Check if the editor contains something.\n * @returns {boolean}\n */\n isEmpty() {\n return false;\n }\n\n /**\n * Enable edit mode.\n */\n enableEditMode() {\n this.#isInEditMode = true;\n }\n\n /**\n * Disable edit mode.\n */\n disableEditMode() {\n this.#isInEditMode = false;\n }\n\n /**\n * Check if the editor is edited.\n * @returns {boolean}\n */\n isInEditMode() {\n return this.#isInEditMode;\n }\n\n /**\n * If it returns true, then this editor handles the keyboard\n * events itself.\n * @returns {boolean}\n */\n shouldGetKeyboardEvents() {\n return this.#isResizerEnabledForKeyboard;\n }\n\n /**\n * Check if this editor needs to be rebuilt or not.\n * @returns {boolean}\n */\n needsToBeRebuilt() {\n return this.div && !this.isAttachedToDOM;\n }\n\n get isOnScreen() {\n const { top, left, bottom, right } = this.getClientDimensions();\n const { innerHeight, innerWidth } = window;\n return left < innerWidth && right > 0 && top < innerHeight && bottom > 0;\n }\n\n #addFocusListeners() {\n if (this.#focusAC || !this.div) {\n return;\n }\n this.#focusAC = new AbortController();\n const signal = this._uiManager.combinedSignal(this.#focusAC);\n\n this.div.addEventListener(\"focusin\", this.focusin.bind(this), { signal });\n this.div.addEventListener(\"focusout\", this.focusout.bind(this), { signal });\n }\n\n /**\n * Rebuild the editor in case it has been removed on undo.\n *\n * To implement in subclasses.\n */\n rebuild() {\n this.#addFocusListeners();\n }\n\n /**\n * Rotate the editor when the page is rotated.\n * @param {number} angle\n */\n rotate(_angle) {}\n\n /**\n * Resize the editor when the page is resized.\n */\n resize() {}\n\n /**\n * Serialize the editor when it has been deleted.\n * @returns {Object}\n */\n serializeDeleted() {\n return {\n id: this.annotationElementId,\n deleted: true,\n pageIndex: this.pageIndex,\n popupRef: this._initialData?.popupRef || \"\",\n };\n }\n\n /**\n * Serialize the editor.\n * The result of the serialization will be used to construct a\n * new annotation to add to the pdf document.\n *\n * To implement in subclasses.\n * @param {boolean} [isForCopying]\n * @param {Object | null} [context]\n * @returns {Object | null}\n */\n serialize(isForCopying = false, context = null) {\n unreachable(\"An editor must be serializable\");\n }\n\n /**\n * Deserialize the editor.\n * The result of the deserialization is a new editor.\n *\n * @param {Object} data\n * @param {AnnotationEditorLayer} parent\n * @param {AnnotationEditorUIManager} uiManager\n * @returns {Promise}\n */\n static async deserialize(data, parent, uiManager) {\n const editor = new this.prototype.constructor({\n parent,\n id: parent.getNextId(),\n uiManager,\n });\n editor.rotation = data.rotation;\n editor.#accessibilityData = data.accessibilityData;\n editor._isCopy = data.isCopy || false;\n\n const [pageWidth, pageHeight] = editor.pageDimensions;\n const [x, y, width, height] = editor.getRectInCurrentCoords(\n data.rect,\n pageHeight\n );\n\n editor.x = x / pageWidth;\n editor.y = y / pageHeight;\n editor.width = width / pageWidth;\n editor.height = height / pageHeight;\n\n return editor;\n }\n\n /**\n * Check if an existing annotation associated with this editor has been\n * modified.\n * @returns {boolean}\n */\n get hasBeenModified() {\n return (\n !!this.annotationElementId && (this.deleted || this.serialize() !== null)\n );\n }\n\n /**\n * Remove this editor.\n * It's used on ctrl+backspace action.\n */\n remove() {\n this.#focusAC?.abort();\n this.#focusAC = null;\n\n if (!this.isEmpty()) {\n // The editor is removed but it can be back at some point thanks to\n // undo/redo so we must commit it before.\n this.commit();\n }\n if (this.parent) {\n this.parent.remove(this);\n } else {\n this._uiManager.removeEditor(this);\n }\n\n if (this.#moveInDOMTimeout) {\n clearTimeout(this.#moveInDOMTimeout);\n this.#moveInDOMTimeout = null;\n }\n this.#stopResizing();\n this.removeEditToolbar();\n if (this.#telemetryTimeouts) {\n for (const timeout of this.#telemetryTimeouts.values()) {\n clearTimeout(timeout);\n }\n this.#telemetryTimeouts = null;\n }\n this.parent = null;\n this.#touchManager?.destroy();\n this.#touchManager = null;\n }\n\n /**\n * @returns {boolean} true if this editor can be resized.\n */\n get isResizable() {\n return false;\n }\n\n /**\n * Add the resizers to this editor.\n */\n makeResizable() {\n if (this.isResizable) {\n this.#createResizers();\n this.#resizersDiv.classList.remove(\"hidden\");\n }\n }\n\n get toolbarPosition() {\n return null;\n }\n\n /**\n * onkeydown callback.\n * @param {KeyboardEvent} event\n */\n keydown(event) {\n if (\n !this.isResizable ||\n event.target !== this.div ||\n event.key !== \"Enter\"\n ) {\n return;\n }\n this._uiManager.setSelected(this);\n this.#savedDimensions = {\n savedX: this.x,\n savedY: this.y,\n savedWidth: this.width,\n savedHeight: this.height,\n };\n const children = this.#resizersDiv.children;\n if (!this.#allResizerDivs) {\n this.#allResizerDivs = Array.from(children);\n const boundResizerKeydown = this.#resizerKeydown.bind(this);\n const boundResizerBlur = this.#resizerBlur.bind(this);\n const signal = this._uiManager._signal;\n for (const div of this.#allResizerDivs) {\n const name = div.getAttribute(\"data-resizer-name\");\n div.setAttribute(\"role\", \"spinbutton\");\n div.addEventListener(\"keydown\", boundResizerKeydown, { signal });\n div.addEventListener(\"blur\", boundResizerBlur, { signal });\n div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name), {\n signal,\n });\n div.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n }\n }\n\n // We want to have the resizers in the visual order, so we move the first\n // (top-left) to the right place.\n const first = this.#allResizerDivs[0];\n let firstPosition = 0;\n for (const div of children) {\n if (div === first) {\n break;\n }\n firstPosition++;\n }\n const nextFirstPosition =\n (((360 - this.rotation + this.parentRotation) % 360) / 90) *\n (this.#allResizerDivs.length / 4);\n\n if (nextFirstPosition !== firstPosition) {\n // We need to reorder the resizers in the DOM in order to have the focus\n // on the top-left one.\n if (nextFirstPosition < firstPosition) {\n for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n this.#resizersDiv.append(this.#resizersDiv.firstChild);\n }\n } else if (nextFirstPosition > firstPosition) {\n for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);\n }\n }\n\n let i = 0;\n for (const child of children) {\n const div = this.#allResizerDivs[i++];\n const name = div.getAttribute(\"data-resizer-name\");\n child.setAttribute(\"data-l10n-id\", AnnotationEditor._l10nResizer[name]);\n }\n }\n\n this.#setResizerTabIndex(0);\n this.#isResizerEnabledForKeyboard = true;\n this.#resizersDiv.firstChild.focus({ focusVisible: true });\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n #resizerKeydown(event) {\n AnnotationEditor._resizerKeyboardManager.exec(this, event);\n }\n\n #resizerBlur(event) {\n if (\n this.#isResizerEnabledForKeyboard &&\n event.relatedTarget?.parentNode !== this.#resizersDiv\n ) {\n this.#stopResizing();\n }\n }\n\n #resizerFocus(name) {\n this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n }\n\n #setResizerTabIndex(value) {\n if (!this.#allResizerDivs) {\n return;\n }\n for (const div of this.#allResizerDivs) {\n div.tabIndex = value;\n }\n }\n\n _resizeWithKeyboard(x, y) {\n if (!this.#isResizerEnabledForKeyboard) {\n return;\n }\n this.#resizerPointermove(this.#focusedResizerName, {\n deltaX: x,\n deltaY: y,\n fromKeyboard: true,\n });\n }\n\n #stopResizing() {\n this.#isResizerEnabledForKeyboard = false;\n this.#setResizerTabIndex(-1);\n this.#addResizeToUndoStack();\n }\n\n _stopResizingWithKeyboard() {\n this.#stopResizing();\n this.div.focus();\n }\n\n /**\n * Select this editor.\n */\n select() {\n this.makeResizable();\n this.div?.classList.add(\"selectedEditor\");\n if (!this._editToolbar) {\n this.addEditToolbar().then(() => {\n if (this.div?.classList.contains(\"selectedEditor\")) {\n // The editor can have been unselected while we were waiting for the\n // edit toolbar to be created, hence we want to be sure that this\n // editor is still selected.\n this._editToolbar?.show();\n }\n });\n return;\n }\n this._editToolbar?.show();\n this.#altText?.toggleAltTextBadge(false);\n }\n\n /**\n * Unselect this editor.\n */\n unselect() {\n this.#resizersDiv?.classList.add(\"hidden\");\n this.div?.classList.remove(\"selectedEditor\");\n if (this.div?.contains(document.activeElement)) {\n // Don't use this.div.blur() because we don't know where the focus will\n // go.\n this._uiManager.currentLayer.div.focus({\n preventScroll: true,\n });\n }\n this._editToolbar?.hide();\n this.#altText?.toggleAltTextBadge(true);\n }\n\n /**\n * Update some parameters which have been changed through the UI.\n * @param {number} type\n * @param {*} value\n */\n updateParams(type, value) {}\n\n /**\n * When the user disables the editing mode some editors can change some of\n * their properties.\n */\n disableEditing() {}\n\n /**\n * When the user enables the editing mode some editors can change some of\n * their properties.\n */\n enableEditing() {}\n\n /**\n * The editor is about to be edited.\n */\n enterInEditMode() {}\n\n /**\n * @returns {HTMLElement | null} the element requiring an alt text.\n */\n getElementForAltText() {\n return this.div;\n }\n\n /**\n * Get the div which really contains the displayed content.\n * @returns {HTMLDivElement | undefined}\n */\n get contentDiv() {\n return this.div;\n }\n\n /**\n * If true then the editor is currently edited.\n * @type {boolean}\n */\n get isEditing() {\n return this.#isEditing;\n }\n\n /**\n * When set to true, it means that this editor is currently edited.\n * @param {boolean} value\n */\n set isEditing(value) {\n this.#isEditing = value;\n if (!this.parent) {\n return;\n }\n if (value) {\n this.parent.setSelected(this);\n this.parent.setActiveEditor(this);\n } else {\n this.parent.setActiveEditor(null);\n }\n }\n\n /**\n * Set the aspect ratio to use when resizing.\n * @param {number} width\n * @param {number} height\n */\n setAspectRatio(width, height) {\n this.#keepAspectRatio = true;\n const aspectRatio = width / height;\n const { style } = this.div;\n style.aspectRatio = aspectRatio;\n style.height = \"auto\";\n }\n\n static get MIN_SIZE() {\n return 16;\n }\n\n static canCreateNewEmptyEditor() {\n return true;\n }\n\n /**\n * Get the data to report to the telemetry when the editor is added.\n * @returns {Object}\n */\n get telemetryInitialData() {\n return { action: \"added\" };\n }\n\n /**\n * The telemetry data to use when saving/printing.\n * @returns {Object|null}\n */\n get telemetryFinalData() {\n return null;\n }\n\n _reportTelemetry(data, mustWait = false) {\n if (mustWait) {\n this.#telemetryTimeouts ||= new Map();\n const { action } = data;\n let timeout = this.#telemetryTimeouts.get(action);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n this._reportTelemetry(data);\n this.#telemetryTimeouts.delete(action);\n if (this.#telemetryTimeouts.size === 0) {\n this.#telemetryTimeouts = null;\n }\n }, AnnotationEditor._telemetryTimeout);\n this.#telemetryTimeouts.set(action, timeout);\n return;\n }\n data.type ||= this.editorType;\n this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data,\n },\n });\n }\n\n /**\n * Show or hide this editor.\n * @param {boolean|undefined} visible\n */\n show(visible = this._isVisible) {\n this.div.classList.toggle(\"hidden\", !visible);\n this._isVisible = visible;\n }\n\n enable() {\n if (this.div) {\n this.div.tabIndex = 0;\n }\n this.#disabled = false;\n }\n\n disable() {\n if (this.div) {\n this.div.tabIndex = -1;\n }\n this.#disabled = true;\n }\n\n /**\n * Render an annotation in the annotation layer.\n * @param {Object} annotation\n * @returns {HTMLElement|null}\n */\n renderAnnotationElement(annotation) {\n let content = annotation.container.querySelector(\".annotationContent\");\n if (!content) {\n content = document.createElement(\"div\");\n content.classList.add(\"annotationContent\", this.editorType);\n annotation.container.prepend(content);\n } else if (content.nodeName === \"CANVAS\") {\n const canvas = content;\n content = document.createElement(\"div\");\n content.classList.add(\"annotationContent\", this.editorType);\n canvas.before(content);\n }\n\n return content;\n }\n\n resetAnnotationElement(annotation) {\n const { firstChild } = annotation.container;\n if (\n firstChild?.nodeName === \"DIV\" &&\n firstChild.classList.contains(\"annotationContent\")\n ) {\n firstChild.remove();\n }\n }\n}\n\n// This class is used to fake an editor which has been deleted.\nclass FakeEditor extends AnnotationEditor {\n constructor(params) {\n super(params);\n this.annotationElementId = params.annotationElementId;\n this.deleted = true;\n }\n\n serialize() {\n return this.serializeDeleted();\n }\n}\n\nexport { AnnotationEditor };\n","/* Copyright 2014 Opera Software ASA\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n *\n * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.\n * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.\n */\n\nconst SEED = 0xc3d2e1f0;\n// Workaround for missing math precision in JS.\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n constructor(seed) {\n this.h1 = seed ? seed & 0xffffffff : SEED;\n this.h2 = seed ? seed & 0xffffffff : SEED;\n }\n\n update(input) {\n let data, length;\n if (typeof input === \"string\") {\n data = new Uint8Array(input.length * 2);\n length = 0;\n for (let i = 0, ii = input.length; i < ii; i++) {\n const code = input.charCodeAt(i);\n if (code <= 0xff) {\n data[length++] = code;\n } else {\n data[length++] = code >>> 8;\n data[length++] = code & 0xff;\n }\n }\n } else if (ArrayBuffer.isView(input)) {\n data = input.slice();\n length = data.byteLength;\n } else {\n throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n }\n\n const blockCounts = length >> 2;\n const tailLength = length - blockCounts * 4;\n // We don't care about endianness here.\n const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n let k1 = 0,\n k2 = 0;\n let h1 = this.h1,\n h2 = this.h2;\n const C1 = 0xcc9e2d51,\n C2 = 0x1b873593;\n const C1_LOW = C1 & MASK_LOW,\n C2_LOW = C2 & MASK_LOW;\n\n for (let i = 0; i < blockCounts; i++) {\n if (i & 1) {\n k1 = dataUint32[i];\n k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1 = h1 * 5 + 0xe6546b64;\n } else {\n k2 = dataUint32[i];\n k2 = ((k2 * C1) & MASK_HIGH) | ((k2 * C1_LOW) & MASK_LOW);\n k2 = (k2 << 15) | (k2 >>> 17);\n k2 = ((k2 * C2) & MASK_HIGH) | ((k2 * C2_LOW) & MASK_LOW);\n h2 ^= k2;\n h2 = (h2 << 13) | (h2 >>> 19);\n h2 = h2 * 5 + 0xe6546b64;\n }\n }\n\n k1 = 0;\n\n switch (tailLength) {\n case 3:\n k1 ^= data[blockCounts * 4 + 2] << 16;\n /* falls through */\n case 2:\n k1 ^= data[blockCounts * 4 + 1] << 8;\n /* falls through */\n case 1:\n k1 ^= data[blockCounts * 4];\n /* falls through */\n\n k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n if (blockCounts & 1) {\n h1 ^= k1;\n } else {\n h2 ^= k1;\n }\n }\n\n this.h1 = h1;\n this.h2 = h2;\n }\n\n hexdigest() {\n let h1 = this.h1,\n h2 = this.h2;\n\n h1 ^= h2 >>> 1;\n h1 = ((h1 * 0xed558ccd) & MASK_HIGH) | ((h1 * 0x8ccd) & MASK_LOW);\n h2 =\n ((h2 * 0xff51afd7) & MASK_HIGH) |\n (((((h2 << 16) | (h1 >>> 16)) * 0xafd7ed55) & MASK_HIGH) >>> 16);\n h1 ^= h2 >>> 1;\n h1 = ((h1 * 0x1a85ec53) & MASK_HIGH) | ((h1 * 0xec53) & MASK_LOW);\n h2 =\n ((h2 * 0xc4ceb9fe) & MASK_HIGH) |\n (((((h2 << 16) | (h1 >>> 16)) * 0xb9fe1a85) & MASK_HIGH) >>> 16);\n h1 ^= h2 >>> 1;\n\n return (\n (h1 >>> 0).toString(16).padStart(8, \"0\") +\n (h2 >>> 0).toString(16).padStart(8, \"0\")\n );\n }\n}\n\nexport { MurmurHash3_64 };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { shadow, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n map: null,\n hash: \"\",\n transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n #modified = false;\n\n #modifiedIds = null;\n\n #storage = new Map();\n\n constructor() {\n // Callbacks to signal when the modification state is set or reset.\n // This is used by the viewer to only bind on `beforeunload` if forms\n // are actually edited to prevent doing so unconditionally since that\n // can have undesirable effects.\n this.onSetModified = null;\n this.onResetModified = null;\n this.onAnnotationEditor = null;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"_setValues\", {\n value: obj => {\n for (const [key, val] of Object.entries(obj)) {\n this.setValue(key, val);\n }\n },\n });\n }\n }\n\n /**\n * Get the value for a given key if it exists, or return the default value.\n * @param {string} key\n * @param {Object} defaultValue\n * @returns {Object}\n */\n getValue(key, defaultValue) {\n const value = this.#storage.get(key);\n if (value === undefined) {\n return defaultValue;\n }\n\n return Object.assign(defaultValue, value);\n }\n\n /**\n * Get the value for a given key.\n * @param {string} key\n * @returns {Object}\n */\n getRawValue(key) {\n return this.#storage.get(key);\n }\n\n /**\n * Remove a value from the storage.\n * @param {string} key\n */\n remove(key) {\n this.#storage.delete(key);\n\n if (this.#storage.size === 0) {\n this.resetModified();\n }\n\n if (typeof this.onAnnotationEditor === \"function\") {\n for (const value of this.#storage.values()) {\n if (value instanceof AnnotationEditor) {\n return;\n }\n }\n this.onAnnotationEditor(null);\n }\n }\n\n /**\n * Set the value for a given key\n * @param {string} key\n * @param {Object} value\n */\n setValue(key, value) {\n const obj = this.#storage.get(key);\n let modified = false;\n if (obj !== undefined) {\n for (const [entry, val] of Object.entries(value)) {\n if (obj[entry] !== val) {\n modified = true;\n obj[entry] = val;\n }\n }\n } else {\n modified = true;\n this.#storage.set(key, value);\n }\n if (modified) {\n this.#setModified();\n }\n\n if (\n value instanceof AnnotationEditor &&\n typeof this.onAnnotationEditor === \"function\"\n ) {\n this.onAnnotationEditor(value.constructor._type);\n }\n }\n\n /**\n * Check if the storage contains the given key.\n * @param {string} key\n * @returns {boolean}\n */\n has(key) {\n return this.#storage.has(key);\n }\n\n get size() {\n return this.#storage.size;\n }\n\n #setModified() {\n if (!this.#modified) {\n this.#modified = true;\n if (typeof this.onSetModified === \"function\") {\n this.onSetModified();\n }\n }\n }\n\n resetModified() {\n if (this.#modified) {\n this.#modified = false;\n if (typeof this.onResetModified === \"function\") {\n this.onResetModified();\n }\n }\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n get print() {\n return new PrintAnnotationStorage(this);\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n if (this.#storage.size === 0) {\n return SerializableEmpty;\n }\n const map = new Map(),\n hash = new MurmurHash3_64(),\n transfer = [];\n const context = Object.create(null);\n let hasBitmap = false;\n\n for (const [key, val] of this.#storage) {\n const serialized =\n val instanceof AnnotationEditor\n ? val.serialize(/* isForCopying = */ false, context)\n : val;\n if (serialized) {\n map.set(key, serialized);\n\n hash.update(`${key}:${JSON.stringify(serialized)}`);\n hasBitmap ||= !!serialized.bitmap;\n }\n }\n\n if (hasBitmap) {\n // We must transfer the bitmap data separately, since it can be changed\n // during serialization with SVG images.\n for (const value of map.values()) {\n if (value.bitmap) {\n transfer.push(value.bitmap);\n }\n }\n }\n\n return map.size > 0\n ? { map, hash: hash.hexdigest(), transfer }\n : SerializableEmpty;\n }\n\n get editorStats() {\n let stats = null;\n const typeToEditor = new Map();\n for (const value of this.#storage.values()) {\n if (!(value instanceof AnnotationEditor)) {\n continue;\n }\n const editorStats = value.telemetryFinalData;\n if (!editorStats) {\n continue;\n }\n const { type } = editorStats;\n if (!typeToEditor.has(type)) {\n typeToEditor.set(type, Object.getPrototypeOf(value).constructor);\n }\n stats ||= Object.create(null);\n const map = (stats[type] ||= new Map());\n for (const [key, val] of Object.entries(editorStats)) {\n if (key === \"type\") {\n continue;\n }\n let counters = map.get(key);\n if (!counters) {\n counters = new Map();\n map.set(key, counters);\n }\n const count = counters.get(val) ?? 0;\n counters.set(val, count + 1);\n }\n }\n for (const [type, editor] of typeToEditor) {\n stats[type] = editor.computeTelemetryFinalData(stats[type]);\n }\n return stats;\n }\n\n resetModifiedIds() {\n this.#modifiedIds = null;\n }\n\n /**\n * @returns {{ids: Set, hash: string}}\n */\n get modifiedIds() {\n if (this.#modifiedIds) {\n return this.#modifiedIds;\n }\n const ids = [];\n for (const value of this.#storage.values()) {\n if (\n !(value instanceof AnnotationEditor) ||\n !value.annotationElementId ||\n !value.serialize()\n ) {\n continue;\n }\n ids.push(value.annotationElementId);\n }\n return (this.#modifiedIds = {\n ids: new Set(ids),\n hash: ids.join(\",\"),\n });\n }\n\n [Symbol.iterator]() {\n return this.#storage.entries();\n }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n #serializable;\n\n constructor(parent) {\n super();\n const { map, hash, transfer } = parent.serializable;\n // Create a *copy* of the data, since Objects are passed by reference in JS.\n const clone = structuredClone(map, transfer ? { transfer } : null);\n\n this.#serializable = { map: clone, hash, transfer };\n }\n\n /**\n * @returns {PrintAnnotationStorage}\n */\n // eslint-disable-next-line getter-return\n get print() {\n unreachable(\"Should not call PrintAnnotationStorage.print\");\n }\n\n /**\n * PLEASE NOTE: Only intended for usage within the API itself.\n * @ignore\n */\n get serializable() {\n return this.#serializable;\n }\n\n get modifiedIds() {\n return shadow(this, \"modifiedIds\", {\n ids: new Set(),\n hash: \"\",\n });\n }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n FeatureTest,\n isNodeJS,\n shadow,\n string32,\n toBase64Util,\n unreachable,\n warn,\n} from \"../shared/util.js\";\n\nclass FontLoader {\n #systemFonts = new Set();\n\n constructor({\n ownerDocument = globalThis.document,\n styleElement = null, // For testing only.\n }) {\n this._document = ownerDocument;\n\n this.nativeFontFaces = new Set();\n this.styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? styleElement\n : null;\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n this.loadingRequests = [];\n this.loadTestFontId = 0;\n }\n }\n\n addNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.add(nativeFontFace);\n this._document.fonts.add(nativeFontFace);\n }\n\n removeNativeFontFace(nativeFontFace) {\n this.nativeFontFaces.delete(nativeFontFace);\n this._document.fonts.delete(nativeFontFace);\n }\n\n insertRule(rule) {\n if (!this.styleElement) {\n this.styleElement = this._document.createElement(\"style\");\n this._document.documentElement\n .getElementsByTagName(\"head\")[0]\n .append(this.styleElement);\n }\n const styleSheet = this.styleElement.sheet;\n styleSheet.insertRule(rule, styleSheet.cssRules.length);\n }\n\n clear() {\n for (const nativeFontFace of this.nativeFontFaces) {\n this._document.fonts.delete(nativeFontFace);\n }\n this.nativeFontFaces.clear();\n this.#systemFonts.clear();\n\n if (this.styleElement) {\n // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n this.styleElement.remove();\n this.styleElement = null;\n }\n }\n\n async loadSystemFont({\n systemFontInfo: info,\n disableFontFace,\n _inspectFont,\n }) {\n if (!info || this.#systemFonts.has(info.loadedName)) {\n return;\n }\n assert(\n !disableFontFace,\n \"loadSystemFont shouldn't be called when `disableFontFace` is set.\"\n );\n\n if (this.isFontLoadingAPISupported) {\n const { loadedName, src, style } = info;\n const fontFace = new FontFace(loadedName, src, style);\n this.addNativeFontFace(fontFace);\n try {\n await fontFace.load();\n this.#systemFonts.add(loadedName);\n _inspectFont?.(info);\n } catch {\n warn(\n `Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`\n );\n\n this.removeNativeFontFace(fontFace);\n }\n return;\n }\n\n unreachable(\n \"Not implemented: loadSystemFont without the Font Loading API.\"\n );\n }\n\n async bind(font) {\n // Add the font to the DOM only once; skip if the font is already loaded.\n if (font.attached || (font.missingFile && !font.systemFontInfo)) {\n return;\n }\n font.attached = true;\n\n if (font.systemFontInfo) {\n await this.loadSystemFont(font);\n return;\n }\n\n if (this.isFontLoadingAPISupported) {\n const nativeFontFace = font.createNativeFontFace();\n if (nativeFontFace) {\n this.addNativeFontFace(nativeFontFace);\n try {\n await nativeFontFace.loaded;\n } catch (ex) {\n warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);\n\n // When font loading failed, fall back to the built-in font renderer.\n font.disableFontFace = true;\n throw ex;\n }\n }\n return; // The font was, asynchronously, loaded.\n }\n\n // !this.isFontLoadingAPISupported\n const rule = font.createFontFaceRule();\n if (rule) {\n this.insertRule(rule);\n\n if (this.isSyncFontLoadingSupported) {\n return; // The font was, synchronously, loaded.\n }\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: async font loading\");\n }\n await new Promise(resolve => {\n const request = this._queueLoadingCallback(resolve);\n this._prepareFontLoadEvent(font, request);\n });\n // The font was, asynchronously, loaded.\n }\n }\n\n get isFontLoadingAPISupported() {\n const hasFonts = !!this._document?.fonts;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n return shadow(\n this,\n \"isFontLoadingAPISupported\",\n hasFonts && !this.styleElement\n );\n }\n return shadow(this, \"isFontLoadingAPISupported\", hasFonts);\n }\n\n get isSyncFontLoadingSupported() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return shadow(this, \"isSyncFontLoadingSupported\", true);\n }\n\n // Node.js - we can pretend that sync font loading is supported.\n // Firefox, from version 14, supports synchronous font loading.\n return shadow(\n this,\n \"isSyncFontLoadingSupported\",\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\")) &&\n (isNodeJS || FeatureTest.platform.isFirefox)\n );\n }\n\n _queueLoadingCallback(callback) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _queueLoadingCallback\");\n }\n\n function completeRequest() {\n assert(!request.done, \"completeRequest() cannot be called twice.\");\n request.done = true;\n\n // Sending all completed requests in order of how they were queued.\n while (loadingRequests.length > 0 && loadingRequests[0].done) {\n const otherRequest = loadingRequests.shift();\n setTimeout(otherRequest.callback, 0);\n }\n }\n\n const { loadingRequests } = this;\n const request = {\n done: false,\n complete: completeRequest,\n callback,\n };\n loadingRequests.push(request);\n return request;\n }\n\n get _loadTestFont() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _loadTestFont\");\n }\n\n // This is a CFF font with 1 glyph for '.' that fills its entire width\n // and height.\n const testFont = atob(\n \"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" +\n \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" +\n \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" +\n \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" +\n \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" +\n \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" +\n \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" +\n \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" +\n \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" +\n \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" +\n \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" +\n \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" +\n \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" +\n \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" +\n \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" +\n \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" +\n \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\"\n );\n return shadow(this, \"_loadTestFont\", testFont);\n }\n\n _prepareFontLoadEvent(font, request) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _prepareFontLoadEvent\");\n }\n\n /** Hack begin */\n // There's currently no event when a font has finished downloading so the\n // following code is a dirty hack to 'guess' when a font is ready.\n // It's assumed fonts are loaded in order, so add a known test font after\n // the desired fonts and then test for the loading of that test font.\n\n function int32(data, offset) {\n return (\n (data.charCodeAt(offset) << 24) |\n (data.charCodeAt(offset + 1) << 16) |\n (data.charCodeAt(offset + 2) << 8) |\n (data.charCodeAt(offset + 3) & 0xff)\n );\n }\n function spliceString(s, offset, remove, insert) {\n const chunk1 = s.substring(0, offset);\n const chunk2 = s.substring(offset + remove);\n return chunk1 + insert + chunk2;\n }\n let i, ii;\n\n // The temporary canvas is used to determine if fonts are loaded.\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n const ctx = canvas.getContext(\"2d\");\n\n let called = 0;\n function isFontReady(name, callback) {\n // With setTimeout clamping this gives the font ~100ms to load.\n if (++called > 30) {\n warn(\"Load test font never loaded.\");\n callback();\n return;\n }\n ctx.font = \"30px \" + name;\n ctx.fillText(\".\", 0, 20);\n const imageData = ctx.getImageData(0, 0, 1, 1);\n if (imageData.data[3] > 0) {\n callback();\n return;\n }\n setTimeout(isFontReady.bind(null, name, callback));\n }\n\n const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;\n // Chromium seems to cache fonts based on a hash of the actual font data,\n // so the font must be modified for each load test else it will appear to\n // be loaded already.\n // TODO: This could maybe be made faster by avoiding the btoa of the full\n // font by splitting it in chunks before hand and padding the font id.\n let data = this._loadTestFont;\n const COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)\n data = spliceString(\n data,\n COMMENT_OFFSET,\n loadTestFontId.length,\n loadTestFontId\n );\n // CFF checksum is important for IE, adjusting it\n const CFF_CHECKSUM_OFFSET = 16;\n const XXXX_VALUE = 0x58585858; // the \"comment\" filled with 'X'\n let checksum = int32(data, CFF_CHECKSUM_OFFSET);\n for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;\n }\n if (i < loadTestFontId.length) {\n // align to 4 bytes boundary\n checksum = (checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i)) | 0;\n }\n data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));\n\n const url = `url(data:font/opentype;base64,${btoa(data)});`;\n const rule = `@font-face {font-family:\"${loadTestFontId}\";src:${url}}`;\n this.insertRule(rule);\n\n const div = this._document.createElement(\"div\");\n div.style.visibility = \"hidden\";\n div.style.width = div.style.height = \"10px\";\n div.style.position = \"absolute\";\n div.style.top = div.style.left = \"0px\";\n\n for (const name of [font.loadedName, loadTestFontId]) {\n const span = this._document.createElement(\"span\");\n span.textContent = \"Hi\";\n span.style.fontFamily = name;\n div.append(span);\n }\n this._document.body.append(div);\n\n isFontReady(loadTestFontId, () => {\n div.remove();\n request.complete();\n });\n /** Hack end */\n }\n}\n\nclass FontFaceObject {\n constructor(translatedData, inspectFont = null) {\n this.compiledGlyphs = Object.create(null);\n // importing translated data\n for (const i in translatedData) {\n this[i] = translatedData[i];\n }\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n if (typeof this.disableFontFace !== \"boolean\") {\n unreachable(\"disableFontFace must be available.\");\n }\n if (typeof this.fontExtraProperties !== \"boolean\") {\n unreachable(\"fontExtraProperties must be available.\");\n }\n }\n this._inspectFont = inspectFont;\n }\n\n createNativeFontFace() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n let nativeFontFace;\n if (!this.cssFontInfo) {\n nativeFontFace = new FontFace(this.loadedName, this.data, {});\n } else {\n const css = {\n weight: this.cssFontInfo.fontWeight,\n };\n if (this.cssFontInfo.italicAngle) {\n css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;\n }\n nativeFontFace = new FontFace(\n this.cssFontInfo.fontFamily,\n this.data,\n css\n );\n }\n\n this._inspectFont?.(this);\n return nativeFontFace;\n }\n\n createFontFaceRule() {\n if (!this.data || this.disableFontFace) {\n return null;\n }\n // Add the @font-face rule to the document.\n const url = `url(data:${this.mimetype};base64,${toBase64Util(this.data)});`;\n let rule;\n if (!this.cssFontInfo) {\n rule = `@font-face {font-family:\"${this.loadedName}\";src:${url}}`;\n } else {\n let css = `font-weight: ${this.cssFontInfo.fontWeight};`;\n if (this.cssFontInfo.italicAngle) {\n css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;\n }\n rule = `@font-face {font-family:\"${this.cssFontInfo.fontFamily}\";${css}src:${url}}`;\n }\n\n this._inspectFont?.(this, url);\n return rule;\n }\n\n getPathGenerator(objs, character) {\n if (this.compiledGlyphs[character] !== undefined) {\n return this.compiledGlyphs[character];\n }\n\n const objId = this.loadedName + \"_path_\" + character;\n let cmds;\n try {\n cmds = objs.get(objId);\n } catch (ex) {\n warn(`getPathGenerator - ignoring character: \"${ex}\".`);\n }\n const path = new Path2D(cmds || \"\");\n\n if (!this.fontExtraProperties) {\n // Remove the raw path-string, since we don't need it anymore.\n objs.delete(objId);\n }\n return (this.compiledGlyphs[character] = path);\n }\n}\n\nexport { FontFaceObject, FontLoader };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AbortException,\n assert,\n InvalidPDFException,\n PasswordException,\n ResponseException,\n UnknownErrorException,\n unreachable,\n} from \"./util.js\";\n\nconst CallbackKind = {\n DATA: 1,\n ERROR: 2,\n};\n\nconst StreamKind = {\n CANCEL: 1,\n CANCEL_COMPLETE: 2,\n CLOSE: 3,\n ENQUEUE: 4,\n ERROR: 5,\n PULL: 6,\n PULL_COMPLETE: 7,\n START_COMPLETE: 8,\n};\n\nfunction onFn() {}\n\nfunction wrapReason(ex) {\n if (\n ex instanceof AbortException ||\n ex instanceof InvalidPDFException ||\n ex instanceof PasswordException ||\n ex instanceof ResponseException ||\n ex instanceof UnknownErrorException\n ) {\n // Avoid re-creating the exception when its type is already correct.\n return ex;\n }\n\n if (!(ex instanceof Error || (typeof ex === \"object\" && ex !== null))) {\n unreachable(\n 'wrapReason: Expected \"reason\" to be a (possibly cloned) Error.'\n );\n }\n switch (ex.name) {\n case \"AbortException\":\n return new AbortException(ex.message);\n case \"InvalidPDFException\":\n return new InvalidPDFException(ex.message);\n case \"PasswordException\":\n return new PasswordException(ex.message, ex.code);\n case \"ResponseException\":\n return new ResponseException(ex.message, ex.status, ex.missing);\n case \"UnknownErrorException\":\n return new UnknownErrorException(ex.message, ex.details);\n }\n return new UnknownErrorException(ex.message, ex.toString());\n}\n\nclass MessageHandler {\n #messageAC = new AbortController();\n\n constructor(sourceName, targetName, comObj) {\n this.sourceName = sourceName;\n this.targetName = targetName;\n this.comObj = comObj;\n this.callbackId = 1;\n this.streamId = 1;\n this.streamSinks = Object.create(null);\n this.streamControllers = Object.create(null);\n this.callbackCapabilities = Object.create(null);\n this.actionHandler = Object.create(null);\n\n comObj.addEventListener(\"message\", this.#onMessage.bind(this), {\n signal: this.#messageAC.signal,\n });\n }\n\n #onMessage({ data }) {\n if (data.targetName !== this.sourceName) {\n return;\n }\n if (data.stream) {\n this.#processStreamMessage(data);\n return;\n }\n if (data.callback) {\n const callbackId = data.callbackId;\n const capability = this.callbackCapabilities[callbackId];\n if (!capability) {\n throw new Error(`Cannot resolve callback ${callbackId}`);\n }\n delete this.callbackCapabilities[callbackId];\n\n if (data.callback === CallbackKind.DATA) {\n capability.resolve(data.data);\n } else if (data.callback === CallbackKind.ERROR) {\n capability.reject(wrapReason(data.reason));\n } else {\n throw new Error(\"Unexpected callback case\");\n }\n return;\n }\n const action = this.actionHandler[data.action];\n if (!action) {\n throw new Error(`Unknown action from worker: ${data.action}`);\n }\n if (data.callbackId) {\n const sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n\n Promise.try(action, data.data).then(\n function (result) {\n comObj.postMessage({\n sourceName,\n targetName,\n callback: CallbackKind.DATA,\n callbackId: data.callbackId,\n data: result,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n callback: CallbackKind.ERROR,\n callbackId: data.callbackId,\n reason: wrapReason(reason),\n });\n }\n );\n return;\n }\n if (data.streamId) {\n this.#createStreamSink(data);\n return;\n }\n action(data.data);\n }\n\n on(actionName, handler) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n typeof handler === \"function\",\n 'MessageHandler.on: Expected \"handler\" to be a function.'\n );\n }\n const ah = this.actionHandler;\n if (ah[actionName]) {\n throw new Error(`There is already an actionName called \"${actionName}\"`);\n }\n ah[actionName] = handler;\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n */\n send(actionName, data, transfers) {\n this.comObj.postMessage(\n {\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n data,\n },\n transfers\n );\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expects that the other side will callback with the response.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n * @returns {Promise} Promise to be resolved with response data.\n */\n sendWithPromise(actionName, data, transfers) {\n const callbackId = this.callbackId++;\n const capability = Promise.withResolvers();\n this.callbackCapabilities[callbackId] = capability;\n try {\n this.comObj.postMessage(\n {\n sourceName: this.sourceName,\n targetName: this.targetName,\n action: actionName,\n callbackId,\n data,\n },\n transfers\n );\n } catch (ex) {\n capability.reject(ex);\n }\n return capability.promise;\n }\n\n /**\n * Sends a message to the comObj to invoke the action with the supplied data.\n * Expect that the other side will callback to signal 'start_complete'.\n * @param {string} actionName - Action to call.\n * @param {JSON} data - JSON data to send.\n * @param {Object} queueingStrategy - Strategy to signal backpressure based on\n * internal queue.\n * @param {Array} [transfers] - List of transfers/ArrayBuffers.\n * @returns {ReadableStream} ReadableStream to read data in chunks.\n */\n sendWithStream(actionName, data, queueingStrategy, transfers) {\n const streamId = this.streamId++,\n sourceName = this.sourceName,\n targetName = this.targetName,\n comObj = this.comObj;\n\n return new ReadableStream(\n {\n start: controller => {\n const startCapability = Promise.withResolvers();\n this.streamControllers[streamId] = {\n controller,\n startCall: startCapability,\n pullCall: null,\n cancelCall: null,\n isClosed: false,\n };\n comObj.postMessage(\n {\n sourceName,\n targetName,\n action: actionName,\n streamId,\n data,\n desiredSize: controller.desiredSize,\n },\n transfers\n );\n // Return Promise for Async process, to signal success/failure.\n return startCapability.promise;\n },\n\n pull: controller => {\n const pullCapability = Promise.withResolvers();\n this.streamControllers[streamId].pullCall = pullCapability;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL,\n streamId,\n desiredSize: controller.desiredSize,\n });\n // Returning Promise will not call \"pull\"\n // again until current pull is resolved.\n return pullCapability.promise;\n },\n\n cancel: reason => {\n assert(reason instanceof Error, \"cancel must have a valid reason\");\n const cancelCapability = Promise.withResolvers();\n this.streamControllers[streamId].cancelCall = cancelCapability;\n this.streamControllers[streamId].isClosed = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL,\n streamId,\n reason: wrapReason(reason),\n });\n // Return Promise to signal success or failure.\n return cancelCapability.promise;\n },\n },\n queueingStrategy\n );\n }\n\n #createStreamSink(data) {\n const streamId = data.streamId,\n sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n const self = this,\n action = this.actionHandler[data.action];\n\n const streamSink = {\n enqueue(chunk, size = 1, transfers) {\n if (this.isCancelled) {\n return;\n }\n const lastDesiredSize = this.desiredSize;\n this.desiredSize -= size;\n // Enqueue decreases the desiredSize property of sink,\n // so when it changes from positive to negative,\n // set ready as unresolved promise.\n if (lastDesiredSize > 0 && this.desiredSize <= 0) {\n this.sinkCapability = Promise.withResolvers();\n this.ready = this.sinkCapability.promise;\n }\n comObj.postMessage(\n {\n sourceName,\n targetName,\n stream: StreamKind.ENQUEUE,\n streamId,\n chunk,\n },\n transfers\n );\n },\n\n close() {\n if (this.isCancelled) {\n return;\n }\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CLOSE,\n streamId,\n });\n delete self.streamSinks[streamId];\n },\n\n error(reason) {\n assert(reason instanceof Error, \"error must have a valid reason\");\n if (this.isCancelled) {\n return;\n }\n this.isCancelled = true;\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.ERROR,\n streamId,\n reason: wrapReason(reason),\n });\n },\n\n sinkCapability: Promise.withResolvers(),\n onPull: null,\n onCancel: null,\n isCancelled: false,\n desiredSize: data.desiredSize,\n ready: null,\n };\n\n streamSink.sinkCapability.resolve();\n streamSink.ready = streamSink.sinkCapability.promise;\n this.streamSinks[streamId] = streamSink;\n\n Promise.try(action, data.data, streamSink).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.START_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n }\n\n #processStreamMessage(data) {\n const streamId = data.streamId,\n sourceName = this.sourceName,\n targetName = data.sourceName,\n comObj = this.comObj;\n const streamController = this.streamControllers[streamId],\n streamSink = this.streamSinks[streamId];\n\n switch (data.stream) {\n case StreamKind.START_COMPLETE:\n if (data.success) {\n streamController.startCall.resolve();\n } else {\n streamController.startCall.reject(wrapReason(data.reason));\n }\n break;\n case StreamKind.PULL_COMPLETE:\n if (data.success) {\n streamController.pullCall.resolve();\n } else {\n streamController.pullCall.reject(wrapReason(data.reason));\n }\n break;\n case StreamKind.PULL:\n // Ignore any pull after close is called.\n if (!streamSink) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true,\n });\n break;\n }\n // Pull increases the desiredSize property of sink, so when it changes\n // from negative to positive, set ready property as resolved promise.\n if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {\n streamSink.sinkCapability.resolve();\n }\n // Reset desiredSize property of sink on every pull.\n streamSink.desiredSize = data.desiredSize;\n\n Promise.try(streamSink.onPull || onFn).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.PULL_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n break;\n case StreamKind.ENQUEUE:\n assert(streamController, \"enqueue should have stream controller\");\n if (streamController.isClosed) {\n break;\n }\n streamController.controller.enqueue(data.chunk);\n break;\n case StreamKind.CLOSE:\n assert(streamController, \"close should have stream controller\");\n if (streamController.isClosed) {\n break;\n }\n streamController.isClosed = true;\n streamController.controller.close();\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.ERROR:\n assert(streamController, \"error should have stream controller\");\n streamController.controller.error(wrapReason(data.reason));\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.CANCEL_COMPLETE:\n if (data.success) {\n streamController.cancelCall.resolve();\n } else {\n streamController.cancelCall.reject(wrapReason(data.reason));\n }\n this.#deleteStreamController(streamController, streamId);\n break;\n case StreamKind.CANCEL:\n if (!streamSink) {\n break;\n }\n const dataReason = wrapReason(data.reason);\n\n Promise.try(streamSink.onCancel || onFn, dataReason).then(\n function () {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n success: true,\n });\n },\n function (reason) {\n comObj.postMessage({\n sourceName,\n targetName,\n stream: StreamKind.CANCEL_COMPLETE,\n streamId,\n reason: wrapReason(reason),\n });\n }\n );\n streamSink.sinkCapability.reject(dataReason);\n streamSink.isCancelled = true;\n delete this.streamSinks[streamId];\n break;\n default:\n throw new Error(\"Unexpected stream case\");\n }\n }\n\n async #deleteStreamController(streamController, streamId) {\n // Delete the `streamController` only when the start, pull, and cancel\n // capabilities have settled, to prevent `TypeError`s.\n await Promise.allSettled([\n streamController.startCall?.promise,\n streamController.pullCall?.promise,\n streamController.cancelCall?.promise,\n ]);\n delete this.streamControllers[streamId];\n }\n\n destroy() {\n this.#messageAC?.abort();\n this.#messageAC = null;\n }\n}\n\nexport { MessageHandler, wrapReason };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseCanvasFactory {\n #enableHWA = false;\n\n constructor({ enableHWA = false }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseCanvasFactory\n ) {\n unreachable(\"Cannot initialize BaseCanvasFactory.\");\n }\n this.#enableHWA = enableHWA;\n }\n\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n const canvas = this._createCanvas(width, height);\n return {\n canvas,\n context: canvas.getContext(\"2d\", {\n willReadFrequently: !this.#enableHWA,\n }),\n };\n }\n\n reset(canvasAndContext, width, height) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n canvasAndContext.canvas.width = width;\n canvasAndContext.canvas.height = height;\n }\n\n destroy(canvasAndContext) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n // Zeroing the width and height cause Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n canvasAndContext.canvas.width = 0;\n canvasAndContext.canvas.height = 0;\n canvasAndContext.canvas = null;\n canvasAndContext.context = null;\n }\n\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n unreachable(\"Abstract method `_createCanvas` called.\");\n }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n constructor({ ownerDocument = globalThis.document, enableHWA = false }) {\n super({ enableHWA });\n this._document = ownerDocument;\n }\n\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n}\n\nexport { BaseCanvasFactory, DOMCanvasFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes, unreachable } from \"../shared/util.js\";\nimport { fetchData } from \"./display_utils.js\";\n\nclass BaseCMapReaderFactory {\n constructor({ baseUrl = null, isCompressed = true }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseCMapReaderFactory\n ) {\n unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n }\n this.baseUrl = baseUrl;\n this.isCompressed = isCompressed;\n }\n\n async fetch({ name }) {\n if (!this.baseUrl) {\n throw new Error(\n \"Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.\"\n );\n }\n if (!name) {\n throw new Error(\"CMap name must be specified.\");\n }\n const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n\n return this._fetch(url)\n .then(cMapData => ({ cMapData, isCompressed: this.isCompressed }))\n .catch(reason => {\n throw new Error(\n `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n );\n });\n }\n\n /**\n * @ignore\n * @returns {Promise}\n */\n async _fetch(url) {\n unreachable(\"Abstract method `_fetch` called.\");\n }\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n const data = await fetchData(\n url,\n /* type = */ this.isCompressed ? \"arraybuffer\" : \"text\"\n );\n return data instanceof ArrayBuffer\n ? new Uint8Array(data)\n : stringToBytes(data);\n }\n}\n\nexport { BaseCMapReaderFactory, DOMCMapReaderFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getRGB, isDataScheme, SVG_NS } from \"./display_utils.js\";\nimport { unreachable, updateUrlHash, Util, warn } from \"../shared/util.js\";\n\nclass BaseFilterFactory {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseFilterFactory\n ) {\n unreachable(\"Cannot initialize BaseFilterFactory.\");\n }\n }\n\n addFilter(maps) {\n return \"none\";\n }\n\n addHCMFilter(fgColor, bgColor) {\n return \"none\";\n }\n\n addAlphaFilter(map) {\n return \"none\";\n }\n\n addLuminosityFilter(map) {\n return \"none\";\n }\n\n addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n return \"none\";\n }\n\n destroy(keepHCM = false) {}\n}\n\n/**\n * FilterFactory aims to create some SVG filters we can use when drawing an\n * image (or whatever) on a canvas.\n * Filters aren't applied with ctx.putImageData because it just overwrites the\n * underlying pixels.\n * With these filters, it's possible for example to apply some transfer maps on\n * an image without the need to apply them on the pixel arrays: the renderer\n * does the magic for us.\n */\nclass DOMFilterFactory extends BaseFilterFactory {\n #baseUrl;\n\n #_cache;\n\n #_defs;\n\n #docId;\n\n #document;\n\n #_hcmCache;\n\n #id = 0;\n\n constructor({ docId, ownerDocument = globalThis.document }) {\n super();\n this.#docId = docId;\n this.#document = ownerDocument;\n }\n\n get #cache() {\n return (this.#_cache ||= new Map());\n }\n\n get #hcmCache() {\n return (this.#_hcmCache ||= new Map());\n }\n\n get #defs() {\n if (!this.#_defs) {\n const div = this.#document.createElement(\"div\");\n const { style } = div;\n style.visibility = \"hidden\";\n style.contain = \"strict\";\n style.width = style.height = 0;\n style.position = \"absolute\";\n style.top = style.left = 0;\n style.zIndex = -1;\n\n const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n svg.setAttribute(\"width\", 0);\n svg.setAttribute(\"height\", 0);\n this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n div.append(svg);\n svg.append(this.#_defs);\n this.#document.body.append(div);\n }\n return this.#_defs;\n }\n\n #createTables(maps) {\n if (maps.length === 1) {\n const mapR = maps[0];\n const buffer = new Array(256);\n for (let i = 0; i < 256; i++) {\n buffer[i] = mapR[i] / 255;\n }\n\n const table = buffer.join(\",\");\n return [table, table, table];\n }\n\n const [mapR, mapG, mapB] = maps;\n const bufferR = new Array(256);\n const bufferG = new Array(256);\n const bufferB = new Array(256);\n for (let i = 0; i < 256; i++) {\n bufferR[i] = mapR[i] / 255;\n bufferG[i] = mapG[i] / 255;\n bufferB[i] = mapB[i] / 255;\n }\n return [bufferR.join(\",\"), bufferG.join(\",\"), bufferB.join(\",\")];\n }\n\n #createUrl(id) {\n if (this.#baseUrl === undefined) {\n // Unless a ``-element is present a relative URL should work.\n this.#baseUrl = \"\";\n\n const url = this.#document.URL;\n if (url !== this.#document.baseURI) {\n if (isDataScheme(url)) {\n warn('#createUrl: ignore \"data:\"-URL for performance reasons.');\n } else {\n this.#baseUrl = updateUrlHash(url, \"\");\n }\n }\n }\n return `url(${this.#baseUrl}#${id})`;\n }\n\n addFilter(maps) {\n if (!maps) {\n return \"none\";\n }\n\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(maps);\n if (value) {\n return value;\n }\n\n const [tableR, tableG, tableB] = this.#createTables(maps);\n const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(maps, value);\n return value;\n }\n\n // We create a SVG filter: feComponentTransferElement\n // https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement\n\n const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n const url = this.#createUrl(id);\n this.#cache.set(maps, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n\n return url;\n }\n\n addHCMFilter(fgColor, bgColor) {\n const key = `${fgColor}-${bgColor}`;\n const filterName = \"base\";\n let info = this.#hcmCache.get(filterName);\n if (info?.key === key) {\n return info.url;\n }\n\n if (info) {\n info.filter?.remove();\n info.key = key;\n info.url = \"none\";\n info.filter = null;\n } else {\n info = {\n key,\n url: \"none\",\n filter: null,\n };\n this.#hcmCache.set(filterName, info);\n }\n\n if (!fgColor || !bgColor) {\n return info.url;\n }\n\n const fgRGB = this.#getRGB(fgColor);\n fgColor = Util.makeHexColor(...fgRGB);\n const bgRGB = this.#getRGB(bgColor);\n bgColor = Util.makeHexColor(...bgRGB);\n this.#defs.style.color = \"\";\n\n if (\n (fgColor === \"#000000\" && bgColor === \"#ffffff\") ||\n fgColor === bgColor\n ) {\n return info.url;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_Colors_and_Luminance\n //\n // Relative luminance:\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n //\n // We compute the rounded luminance of the default background color.\n // Then for every color in the pdf, if its rounded luminance is the\n // same as the background one then it's replaced by the new\n // background color else by the foreground one.\n const map = new Array(256);\n for (let i = 0; i <= 255; i++) {\n const x = i / 255;\n map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n }\n const table = map.join(\",\");\n\n const id = `g_${this.#docId}_hcm_filter`;\n const filter = (info.filter = this.#createFilter(id));\n this.#addTransferMapConversion(table, table, table, filter);\n this.#addGrayConversion(filter);\n\n const getSteps = (c, n) => {\n const start = fgRGB[c] / 255;\n const end = bgRGB[c] / 255;\n const arr = new Array(n + 1);\n for (let i = 0; i <= n; i++) {\n arr[i] = start + (i / n) * (end - start);\n }\n return arr.join(\",\");\n };\n this.#addTransferMapConversion(\n getSteps(0, 5),\n getSteps(1, 5),\n getSteps(2, 5),\n filter\n );\n\n info.url = this.#createUrl(id);\n return info.url;\n }\n\n addAlphaFilter(map) {\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(map);\n if (value) {\n return value;\n }\n\n const [tableA] = this.#createTables([map]);\n const key = `alpha_${tableA}`;\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(map, value);\n return value;\n }\n\n const id = `g_${this.#docId}_alpha_map_${this.#id++}`;\n const url = this.#createUrl(id);\n this.#cache.set(map, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addTransferMapAlphaConversion(tableA, filter);\n\n return url;\n }\n\n addLuminosityFilter(map) {\n // When a page is zoomed the page is re-drawn but the maps are likely\n // the same.\n let value = this.#cache.get(map || \"luminosity\");\n if (value) {\n return value;\n }\n\n let tableA, key;\n if (map) {\n [tableA] = this.#createTables([map]);\n key = `luminosity_${tableA}`;\n } else {\n key = \"luminosity\";\n }\n\n value = this.#cache.get(key);\n if (value) {\n this.#cache.set(map, value);\n return value;\n }\n\n const id = `g_${this.#docId}_luminosity_map_${this.#id++}`;\n const url = this.#createUrl(id);\n this.#cache.set(map, url);\n this.#cache.set(key, url);\n\n const filter = this.#createFilter(id);\n this.#addLuminosityConversion(filter);\n if (map) {\n this.#addTransferMapAlphaConversion(tableA, filter);\n }\n\n return url;\n }\n\n addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n let info = this.#hcmCache.get(filterName);\n if (info?.key === key) {\n return info.url;\n }\n\n if (info) {\n info.filter?.remove();\n info.key = key;\n info.url = \"none\";\n info.filter = null;\n } else {\n info = {\n key,\n url: \"none\",\n filter: null,\n };\n this.#hcmCache.set(filterName, info);\n }\n\n if (!fgColor || !bgColor) {\n return info.url;\n }\n\n const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n let fgGray = Math.round(\n 0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]\n );\n let bgGray = Math.round(\n 0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]\n );\n let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(\n this.#getRGB.bind(this)\n );\n if (bgGray < fgGray) {\n [fgGray, bgGray, newFgRGB, newBgRGB] = [\n bgGray,\n fgGray,\n newBgRGB,\n newFgRGB,\n ];\n }\n this.#defs.style.color = \"\";\n\n // Now we can create the filters to highlight some canvas parts.\n // The colors in the pdf will almost be Canvas and CanvasText, hence we\n // want to filter them to finally get Highlight and HighlightText.\n // Since we're in HCM the background color and the foreground color should\n // be really different when converted to grayscale (if they're not then it\n // means that we've a poor contrast). Once the canvas colors are converted\n // to grayscale we can easily map them on their new colors.\n // The grayscale step is important because if we've something like:\n // fgColor = #FF....\n // bgColor = #FF....\n // then we are enable to map the red component on the new red components\n // which can be different.\n\n const getSteps = (fg, bg, n) => {\n const arr = new Array(256);\n const step = (bgGray - fgGray) / n;\n const newStart = fg / 255;\n const newStep = (bg - fg) / (255 * n);\n let prev = 0;\n for (let i = 0; i <= n; i++) {\n const k = Math.round(fgGray + i * step);\n const value = newStart + i * newStep;\n for (let j = prev; j <= k; j++) {\n arr[j] = value;\n }\n prev = k + 1;\n }\n for (let i = prev; i < 256; i++) {\n arr[i] = arr[prev - 1];\n }\n return arr.join(\",\");\n };\n\n const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n const filter = (info.filter = this.#createFilter(id));\n\n this.#addGrayConversion(filter);\n this.#addTransferMapConversion(\n getSteps(newFgRGB[0], newBgRGB[0], 5),\n getSteps(newFgRGB[1], newBgRGB[1], 5),\n getSteps(newFgRGB[2], newBgRGB[2], 5),\n filter\n );\n\n info.url = this.#createUrl(id);\n return info.url;\n }\n\n destroy(keepHCM = false) {\n if (keepHCM && this.#_hcmCache?.size) {\n return;\n }\n this.#_defs?.parentNode.parentNode.remove();\n this.#_defs = null;\n\n this.#_cache?.clear();\n this.#_cache = null;\n\n this.#_hcmCache?.clear();\n this.#_hcmCache = null;\n\n this.#id = 0;\n }\n\n #addLuminosityConversion(filter) {\n const feColorMatrix = this.#document.createElementNS(\n SVG_NS,\n \"feColorMatrix\"\n );\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\n \"values\",\n \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0\"\n );\n filter.append(feColorMatrix);\n }\n\n #addGrayConversion(filter) {\n const feColorMatrix = this.#document.createElementNS(\n SVG_NS,\n \"feColorMatrix\"\n );\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\n \"values\",\n \"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\"\n );\n filter.append(feColorMatrix);\n }\n\n #createFilter(id) {\n const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n filter.setAttribute(\"id\", id);\n this.#defs.append(filter);\n\n return filter;\n }\n\n #appendFeFunc(feComponentTransfer, func, table) {\n const feFunc = this.#document.createElementNS(SVG_NS, func);\n feFunc.setAttribute(\"type\", \"discrete\");\n feFunc.setAttribute(\"tableValues\", table);\n feComponentTransfer.append(feFunc);\n }\n\n #addTransferMapConversion(rTable, gTable, bTable, filter) {\n const feComponentTransfer = this.#document.createElementNS(\n SVG_NS,\n \"feComponentTransfer\"\n );\n filter.append(feComponentTransfer);\n this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n }\n\n #addTransferMapAlphaConversion(aTable, filter) {\n const feComponentTransfer = this.#document.createElementNS(\n SVG_NS,\n \"feComponentTransfer\"\n );\n filter.append(feComponentTransfer);\n this.#appendFeFunc(feComponentTransfer, \"feFuncA\", aTable);\n }\n\n #getRGB(color) {\n this.#defs.style.color = color;\n return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n }\n}\n\nexport { BaseFilterFactory, DOMFilterFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fetchData } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseStandardFontDataFactory {\n constructor({ baseUrl = null }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseStandardFontDataFactory\n ) {\n unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n }\n this.baseUrl = baseUrl;\n }\n\n async fetch({ filename }) {\n if (!this.baseUrl) {\n throw new Error(\n \"Ensure that the `standardFontDataUrl` API parameter is provided.\"\n );\n }\n if (!filename) {\n throw new Error(\"Font filename must be specified.\");\n }\n const url = `${this.baseUrl}${filename}`;\n\n return this._fetch(url).catch(reason => {\n throw new Error(`Unable to load font data at: ${url}`);\n });\n }\n\n /**\n * @ignore\n * @returns {Promise}\n */\n async _fetch(url) {\n unreachable(\"Abstract method `_fetch` called.\");\n }\n}\n\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n const data = await fetchData(url, /* type = */ \"arraybuffer\");\n return new Uint8Array(data);\n }\n}\n\nexport { BaseStandardFontDataFactory, DOMStandardFontDataFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { fetchData } from \"./display_utils.js\";\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseWasmFactory {\n constructor({ baseUrl = null }) {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseWasmFactory\n ) {\n unreachable(\"Cannot initialize BaseWasmFactory.\");\n }\n this.baseUrl = baseUrl;\n }\n\n async fetch({ filename }) {\n if (!this.baseUrl) {\n throw new Error(\"Ensure that the `wasmUrl` API parameter is provided.\");\n }\n if (!filename) {\n throw new Error(\"Wasm filename must be specified.\");\n }\n const url = `${this.baseUrl}${filename}`;\n\n return this._fetch(url).catch(reason => {\n throw new Error(`Unable to load wasm data at: ${url}`);\n });\n }\n\n /**\n * @ignore\n * @returns {Promise}\n */\n async _fetch(url) {\n unreachable(\"Abstract method `_fetch` called.\");\n }\n}\n\nclass DOMWasmFactory extends BaseWasmFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n const data = await fetchData(url, /* type = */ \"arraybuffer\");\n return new Uint8Array(data);\n }\n}\n\nexport { BaseWasmFactory, DOMWasmFactory };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\nimport { isNodeJS, warn } from \"../shared/util.js\";\nimport { BaseCanvasFactory } from \"./canvas_factory.js\";\nimport { BaseCMapReaderFactory } from \"./cmap_reader_factory.js\";\nimport { BaseFilterFactory } from \"./filter_factory.js\";\nimport { BaseStandardFontDataFactory } from \"./standard_fontdata_factory.js\";\nimport { BaseWasmFactory } from \"./wasm_factory.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./node_utils.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nif (isNodeJS) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"SKIP_BABEL\")) {\n warn(\"Please use the `legacy` build in Node.js environments.\");\n } else {\n let canvas;\n try {\n const require = process\n .getBuiltinModule(\"module\")\n .createRequire(import.meta.url);\n\n try {\n canvas = require(\"@napi-rs/canvas\");\n } catch (ex) {\n warn(`Cannot load \"@napi-rs/canvas\" package: \"${ex}\".`);\n }\n } catch (ex) {\n warn(`Cannot access the \\`require\\` function: \"${ex}\".`);\n }\n\n if (!globalThis.DOMMatrix) {\n if (canvas?.DOMMatrix) {\n globalThis.DOMMatrix = canvas.DOMMatrix;\n } else {\n warn(\"Cannot polyfill `DOMMatrix`, rendering may be broken.\");\n }\n }\n if (!globalThis.ImageData) {\n if (canvas?.ImageData) {\n globalThis.ImageData = canvas.ImageData;\n } else {\n warn(\"Cannot polyfill `ImageData`, rendering may be broken.\");\n }\n }\n if (!globalThis.Path2D) {\n if (canvas?.Path2D) {\n globalThis.Path2D = canvas.Path2D;\n } else {\n warn(\"Cannot polyfill `Path2D`, rendering may be broken.\");\n }\n }\n }\n}\n\nasync function fetchData(url) {\n const fs = process.getBuiltinModule(\"fs\");\n const data = await fs.promises.readFile(url);\n return new Uint8Array(data);\n}\n\nclass NodeFilterFactory extends BaseFilterFactory {}\n\nclass NodeCanvasFactory extends BaseCanvasFactory {\n /**\n * @ignore\n */\n _createCanvas(width, height) {\n const require = process\n .getBuiltinModule(\"module\")\n .createRequire(import.meta.url);\n const canvas = require(\"@napi-rs/canvas\");\n return canvas.createCanvas(width, height);\n }\n}\n\nclass NodeCMapReaderFactory extends BaseCMapReaderFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n return fetchData(url);\n }\n}\n\nclass NodeStandardFontDataFactory extends BaseStandardFontDataFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n return fetchData(url);\n }\n}\n\nclass NodeWasmFactory extends BaseWasmFactory {\n /**\n * @ignore\n */\n async _fetch(url) {\n return fetchData(url);\n }\n}\n\nexport {\n fetchData,\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodeStandardFontDataFactory,\n NodeWasmFactory,\n};\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FormatError, info, unreachable, Util } from \"../shared/util.js\";\nimport { getCurrentTransform } from \"./display_utils.js\";\n\nconst PathType = {\n FILL: \"Fill\",\n STROKE: \"Stroke\",\n SHADING: \"Shading\",\n};\n\nfunction applyBoundingBox(ctx, bbox) {\n if (!bbox) {\n return;\n }\n const width = bbox[2] - bbox[0];\n const height = bbox[3] - bbox[1];\n const region = new Path2D();\n region.rect(bbox[0], bbox[1], width, height);\n ctx.clip(region);\n}\n\nclass BaseShadingPattern {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseShadingPattern\n ) {\n unreachable(\"Cannot initialize BaseShadingPattern.\");\n }\n }\n\n isModifyingCurrentTransform() {\n return false;\n }\n\n getPattern() {\n unreachable(\"Abstract method `getPattern` called.\");\n }\n}\n\nclass RadialAxialShadingPattern extends BaseShadingPattern {\n constructor(IR) {\n super();\n this._type = IR[1];\n this._bbox = IR[2];\n this._colorStops = IR[3];\n this._p0 = IR[4];\n this._p1 = IR[5];\n this._r0 = IR[6];\n this._r1 = IR[7];\n this.matrix = null;\n }\n\n _createGradient(ctx) {\n let grad;\n if (this._type === \"axial\") {\n grad = ctx.createLinearGradient(\n this._p0[0],\n this._p0[1],\n this._p1[0],\n this._p1[1]\n );\n } else if (this._type === \"radial\") {\n grad = ctx.createRadialGradient(\n this._p0[0],\n this._p0[1],\n this._r0,\n this._p1[0],\n this._p1[1],\n this._r1\n );\n }\n\n for (const colorStop of this._colorStops) {\n grad.addColorStop(colorStop[0], colorStop[1]);\n }\n return grad;\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n let pattern;\n if (pathType === PathType.STROKE || pathType === PathType.FILL) {\n const ownerBBox = owner.current.getClippedPathBoundingBox(\n pathType,\n getCurrentTransform(ctx)\n ) || [0, 0, 0, 0];\n // Create a canvas that is only as big as the current path. This doesn't\n // allow us to cache the pattern, but it generally creates much smaller\n // canvases and saves memory use. See bug 1722807 for an example.\n const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;\n const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;\n\n const tmpCanvas = owner.cachedCanvases.getCanvas(\n \"pattern\",\n width,\n height\n );\n\n const tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n tmpCtx.beginPath();\n tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);\n // Non shading fill patterns are positioned relative to the base transform\n // (usually the page's initial transform), but we may have created a\n // smaller canvas based on the path, so we must account for the shift.\n tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);\n inverse = Util.transform(inverse, [\n 1,\n 0,\n 0,\n 1,\n ownerBBox[0],\n ownerBBox[1],\n ]);\n\n tmpCtx.transform(...owner.baseTransform);\n if (this.matrix) {\n tmpCtx.transform(...this.matrix);\n }\n applyBoundingBox(tmpCtx, this._bbox);\n\n tmpCtx.fillStyle = this._createGradient(tmpCtx);\n tmpCtx.fill();\n\n pattern = ctx.createPattern(tmpCanvas.canvas, \"no-repeat\");\n const domMatrix = new DOMMatrix(inverse);\n pattern.setTransform(domMatrix);\n } else {\n // Shading fills are applied relative to the current matrix which is also\n // how canvas gradients work, so there's no need to do anything special\n // here.\n applyBoundingBox(ctx, this._bbox);\n pattern = this._createGradient(ctx);\n }\n return pattern;\n }\n}\n\nfunction drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\n // Very basic Gouraud-shaded triangle rasterization algorithm.\n const coords = context.coords,\n colors = context.colors;\n const bytes = data.data,\n rowSize = data.width * 4;\n let tmp;\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n if (coords[p2 + 1] > coords[p3 + 1]) {\n tmp = p2;\n p2 = p3;\n p3 = tmp;\n tmp = c2;\n c2 = c3;\n c3 = tmp;\n }\n if (coords[p1 + 1] > coords[p2 + 1]) {\n tmp = p1;\n p1 = p2;\n p2 = tmp;\n tmp = c1;\n c1 = c2;\n c2 = tmp;\n }\n const x1 = (coords[p1] + context.offsetX) * context.scaleX;\n const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\n const x2 = (coords[p2] + context.offsetX) * context.scaleX;\n const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\n const x3 = (coords[p3] + context.offsetX) * context.scaleX;\n const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\n if (y1 >= y3) {\n return;\n }\n const c1r = colors[c1],\n c1g = colors[c1 + 1],\n c1b = colors[c1 + 2];\n const c2r = colors[c2],\n c2g = colors[c2 + 1],\n c2b = colors[c2 + 2];\n const c3r = colors[c3],\n c3g = colors[c3 + 1],\n c3b = colors[c3 + 2];\n\n const minY = Math.round(y1),\n maxY = Math.round(y3);\n let xa, car, cag, cab;\n let xb, cbr, cbg, cbb;\n for (let y = minY; y <= maxY; y++) {\n if (y < y2) {\n const k = y < y1 ? 0 : (y1 - y) / (y1 - y2);\n xa = x1 - (x1 - x2) * k;\n car = c1r - (c1r - c2r) * k;\n cag = c1g - (c1g - c2g) * k;\n cab = c1b - (c1b - c2b) * k;\n } else {\n let k;\n if (y > y3) {\n k = 1;\n } else if (y2 === y3) {\n k = 0;\n } else {\n k = (y2 - y) / (y2 - y3);\n }\n xa = x2 - (x2 - x3) * k;\n car = c2r - (c2r - c3r) * k;\n cag = c2g - (c2g - c3g) * k;\n cab = c2b - (c2b - c3b) * k;\n }\n\n let k;\n if (y < y1) {\n k = 0;\n } else if (y > y3) {\n k = 1;\n } else {\n k = (y1 - y) / (y1 - y3);\n }\n xb = x1 - (x1 - x3) * k;\n cbr = c1r - (c1r - c3r) * k;\n cbg = c1g - (c1g - c3g) * k;\n cbb = c1b - (c1b - c3b) * k;\n const x1_ = Math.round(Math.min(xa, xb));\n const x2_ = Math.round(Math.max(xa, xb));\n let j = rowSize * y + x1_ * 4;\n for (let x = x1_; x <= x2_; x++) {\n k = (xa - x) / (xa - xb);\n if (k < 0) {\n k = 0;\n } else if (k > 1) {\n k = 1;\n }\n bytes[j++] = (car - (car - cbr) * k) | 0;\n bytes[j++] = (cag - (cag - cbg) * k) | 0;\n bytes[j++] = (cab - (cab - cbb) * k) | 0;\n bytes[j++] = 255;\n }\n }\n}\n\nfunction drawFigure(data, figure, context) {\n const ps = figure.coords;\n const cs = figure.colors;\n let i, ii;\n switch (figure.type) {\n case \"lattice\":\n const verticesPerRow = figure.verticesPerRow;\n const rows = Math.floor(ps.length / verticesPerRow) - 1;\n const cols = verticesPerRow - 1;\n for (i = 0; i < rows; i++) {\n let q = i * verticesPerRow;\n for (let j = 0; j < cols; j++, q++) {\n drawTriangle(\n data,\n context,\n ps[q],\n ps[q + 1],\n ps[q + verticesPerRow],\n cs[q],\n cs[q + 1],\n cs[q + verticesPerRow]\n );\n drawTriangle(\n data,\n context,\n ps[q + verticesPerRow + 1],\n ps[q + 1],\n ps[q + verticesPerRow],\n cs[q + verticesPerRow + 1],\n cs[q + 1],\n cs[q + verticesPerRow]\n );\n }\n }\n break;\n case \"triangles\":\n for (i = 0, ii = ps.length; i < ii; i += 3) {\n drawTriangle(\n data,\n context,\n ps[i],\n ps[i + 1],\n ps[i + 2],\n cs[i],\n cs[i + 1],\n cs[i + 2]\n );\n }\n break;\n default:\n throw new Error(\"illegal figure\");\n }\n}\n\nclass MeshShadingPattern extends BaseShadingPattern {\n constructor(IR) {\n super();\n this._coords = IR[2];\n this._colors = IR[3];\n this._figures = IR[4];\n this._bounds = IR[5];\n this._bbox = IR[6];\n this._background = IR[7];\n this.matrix = null;\n }\n\n _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {\n // we will increase scale on some weird factor to let antialiasing take\n // care of \"rough\" edges\n const EXPECTED_SCALE = 1.1;\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n const MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough\n // We need to keep transparent border around our pattern for fill():\n // createPattern with 'no-repeat' will bleed edges across entire area.\n const BORDER_SIZE = 2;\n\n const offsetX = Math.floor(this._bounds[0]);\n const offsetY = Math.floor(this._bounds[1]);\n const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;\n const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;\n\n const width = Math.min(\n Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)),\n MAX_PATTERN_SIZE\n );\n const height = Math.min(\n Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)),\n MAX_PATTERN_SIZE\n );\n const scaleX = boundsWidth / width;\n const scaleY = boundsHeight / height;\n\n const context = {\n coords: this._coords,\n colors: this._colors,\n offsetX: -offsetX,\n offsetY: -offsetY,\n scaleX: 1 / scaleX,\n scaleY: 1 / scaleY,\n };\n\n const paddedWidth = width + BORDER_SIZE * 2;\n const paddedHeight = height + BORDER_SIZE * 2;\n\n const tmpCanvas = cachedCanvases.getCanvas(\n \"mesh\",\n paddedWidth,\n paddedHeight\n );\n const tmpCtx = tmpCanvas.context;\n\n const data = tmpCtx.createImageData(width, height);\n if (backgroundColor) {\n const bytes = data.data;\n for (let i = 0, ii = bytes.length; i < ii; i += 4) {\n bytes[i] = backgroundColor[0];\n bytes[i + 1] = backgroundColor[1];\n bytes[i + 2] = backgroundColor[2];\n bytes[i + 3] = 255;\n }\n }\n for (const figure of this._figures) {\n drawFigure(data, figure, context);\n }\n tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\n const canvas = tmpCanvas.canvas;\n\n return {\n canvas,\n offsetX: offsetX - BORDER_SIZE * scaleX,\n offsetY: offsetY - BORDER_SIZE * scaleY,\n scaleX,\n scaleY,\n };\n }\n\n isModifyingCurrentTransform() {\n return true;\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n applyBoundingBox(ctx, this._bbox);\n const scale = new Float32Array(2);\n if (pathType === PathType.SHADING) {\n Util.singularValueDecompose2dScale(getCurrentTransform(ctx), scale);\n } else if (this.matrix) {\n // Obtain scale from matrix and current transformation matrix.\n Util.singularValueDecompose2dScale(this.matrix, scale);\n const [matrixScaleX, matrixScaleY] = scale;\n Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n scale[0] *= matrixScaleX;\n scale[1] *= matrixScaleY;\n } else {\n Util.singularValueDecompose2dScale(owner.baseTransform, scale);\n }\n\n // Rasterizing on the main thread since sending/queue large canvases\n // might cause OOM.\n const temporaryPatternCanvas = this._createMeshCanvas(\n scale,\n pathType === PathType.SHADING ? null : this._background,\n owner.cachedCanvases\n );\n\n if (pathType !== PathType.SHADING) {\n ctx.setTransform(...owner.baseTransform);\n if (this.matrix) {\n ctx.transform(...this.matrix);\n }\n }\n\n ctx.translate(\n temporaryPatternCanvas.offsetX,\n temporaryPatternCanvas.offsetY\n );\n ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\n\n return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\n }\n}\n\nclass DummyShadingPattern extends BaseShadingPattern {\n getPattern() {\n return \"hotpink\";\n }\n}\n\nfunction getShadingPattern(IR) {\n switch (IR[0]) {\n case \"RadialAxial\":\n return new RadialAxialShadingPattern(IR);\n case \"Mesh\":\n return new MeshShadingPattern(IR);\n case \"Dummy\":\n return new DummyShadingPattern();\n }\n throw new Error(`Unknown IR type: ${IR[0]}`);\n}\n\nconst PaintType = {\n COLORED: 1,\n UNCOLORED: 2,\n};\n\nclass TilingPattern {\n // 10in @ 300dpi shall be enough.\n static MAX_PATTERN_SIZE = 3000;\n\n constructor(IR, ctx, canvasGraphicsFactory, baseTransform) {\n this.color = IR[1];\n this.operatorList = IR[2];\n this.matrix = IR[3];\n this.bbox = IR[4];\n this.xstep = IR[5];\n this.ystep = IR[6];\n this.paintType = IR[7];\n this.tilingType = IR[8];\n this.ctx = ctx;\n this.canvasGraphicsFactory = canvasGraphicsFactory;\n this.baseTransform = baseTransform;\n }\n\n createPatternCanvas(owner) {\n const {\n bbox,\n operatorList,\n paintType,\n tilingType,\n color,\n canvasGraphicsFactory,\n } = this;\n let { xstep, ystep } = this;\n xstep = Math.abs(xstep);\n ystep = Math.abs(ystep);\n\n info(\"TilingType: \" + tilingType);\n\n // A tiling pattern as defined by PDF spec 8.7.2 is a cell whose size is\n // described by bbox, and may repeat regularly by shifting the cell by\n // xstep and ystep.\n // Because the HTML5 canvas API does not support pattern repetition with\n // gaps in between, we use the xstep/ystep instead of the bbox's size.\n //\n // This has the following consequences (similarly for ystep):\n //\n // - If xstep is the same as bbox, then there is no observable difference.\n //\n // - If xstep is larger than bbox, then the pattern canvas is partially\n // empty: the area bounded by bbox is painted, the outside area is void.\n //\n // - If xstep is smaller than bbox, then the pixels between xstep and the\n // bbox boundary will be missing. This is INCORRECT behavior.\n // \"Figures on adjacent tiles should not overlap\" (PDF spec 8.7.3.1),\n // but overlapping cells without common pixels are still valid.\n\n const x0 = bbox[0],\n y0 = bbox[1],\n x1 = bbox[2],\n y1 = bbox[3];\n const width = x1 - x0;\n const height = y1 - y0;\n\n // Obtain scale from matrix and current transformation matrix.\n const scale = new Float32Array(2);\n Util.singularValueDecompose2dScale(this.matrix, scale);\n const [matrixScaleX, matrixScaleY] = scale;\n Util.singularValueDecompose2dScale(this.baseTransform, scale);\n const combinedScaleX = matrixScaleX * scale[0];\n const combinedScaleY = matrixScaleY * scale[1];\n\n let canvasWidth = width,\n canvasHeight = height,\n redrawHorizontally = false,\n redrawVertically = false;\n\n const xScaledStep = Math.ceil(xstep * combinedScaleX);\n const yScaledStep = Math.ceil(ystep * combinedScaleY);\n const xScaledWidth = Math.ceil(width * combinedScaleX);\n const yScaledHeight = Math.ceil(height * combinedScaleY);\n\n if (xScaledStep >= xScaledWidth) {\n canvasWidth = xstep;\n } else {\n redrawHorizontally = true;\n }\n if (yScaledStep >= yScaledHeight) {\n canvasHeight = ystep;\n } else {\n redrawVertically = true;\n }\n\n // Use width and height values that are as close as possible to the end\n // result when the pattern is used. Too low value makes the pattern look\n // blurry. Too large value makes it look too crispy.\n const dimx = this.getSizeAndScale(\n canvasWidth,\n this.ctx.canvas.width,\n combinedScaleX\n );\n const dimy = this.getSizeAndScale(\n canvasHeight,\n this.ctx.canvas.height,\n combinedScaleY\n );\n\n const tmpCanvas = owner.cachedCanvases.getCanvas(\n \"pattern\",\n dimx.size,\n dimy.size\n );\n const tmpCtx = tmpCanvas.context;\n const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\n graphics.groupLevel = owner.groupLevel;\n\n this.setFillAndStrokeStyleToContext(graphics, paintType, color);\n\n tmpCtx.translate(-dimx.scale * x0, -dimy.scale * y0);\n graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\n\n // To match CanvasGraphics beginDrawing we must save the context here or\n // else we end up with unbalanced save/restores.\n tmpCtx.save();\n\n this.clipBbox(graphics, x0, y0, x1, y1);\n\n graphics.baseTransform = getCurrentTransform(graphics.ctx);\n\n graphics.executeOperatorList(operatorList);\n\n graphics.endDrawing();\n\n tmpCtx.restore();\n\n if (redrawHorizontally || redrawVertically) {\n // The tile is overlapping itself, so we create a new tile with\n // dimensions xstep * ystep.\n // Then we draw the overlapping parts of the original tile on the new\n // tile.\n // Just as a side note, the code here works correctly even if we don't\n // have to redraw the tile horizontally or vertically. In that case, the\n // original tile is drawn on the new tile only once, but it's useless.\n const image = tmpCanvas.canvas;\n if (redrawHorizontally) {\n canvasWidth = xstep;\n }\n if (redrawVertically) {\n canvasHeight = ystep;\n }\n\n const dimx2 = this.getSizeAndScale(\n canvasWidth,\n this.ctx.canvas.width,\n combinedScaleX\n );\n const dimy2 = this.getSizeAndScale(\n canvasHeight,\n this.ctx.canvas.height,\n combinedScaleY\n );\n\n const xSize = dimx2.size;\n const ySize = dimy2.size;\n const tmpCanvas2 = owner.cachedCanvases.getCanvas(\n \"pattern-workaround\",\n xSize,\n ySize\n );\n const tmpCtx2 = tmpCanvas2.context;\n const ii = redrawHorizontally ? Math.floor(width / xstep) : 0;\n const jj = redrawVertically ? Math.floor(height / ystep) : 0;\n\n // Draw the overlapping parts of the original tile on the new tile.\n for (let i = 0; i <= ii; i++) {\n for (let j = 0; j <= jj; j++) {\n tmpCtx2.drawImage(\n image,\n xSize * i,\n ySize * j,\n xSize,\n ySize,\n 0,\n 0,\n xSize,\n ySize\n );\n }\n }\n return {\n canvas: tmpCanvas2.canvas,\n scaleX: dimx2.scale,\n scaleY: dimy2.scale,\n offsetX: x0,\n offsetY: y0,\n };\n }\n\n return {\n canvas: tmpCanvas.canvas,\n scaleX: dimx.scale,\n scaleY: dimy.scale,\n offsetX: x0,\n offsetY: y0,\n };\n }\n\n getSizeAndScale(step, realOutputSize, scale) {\n // MAX_PATTERN_SIZE is used to avoid OOM situation.\n // Use the destination canvas's size if it is bigger than the hard-coded\n // limit of MAX_PATTERN_SIZE to avoid clipping patterns that cover the\n // whole canvas.\n const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);\n let size = Math.ceil(step * scale);\n if (size >= maxSize) {\n size = maxSize;\n } else {\n scale = size / step;\n }\n return { scale, size };\n }\n\n clipBbox(graphics, x0, y0, x1, y1) {\n const bboxWidth = x1 - x0;\n const bboxHeight = y1 - y0;\n graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\n Util.axialAlignedBoundingBox(\n [x0, y0, x1, y1],\n getCurrentTransform(graphics.ctx),\n graphics.current.minMax\n );\n graphics.clip();\n graphics.endPath();\n }\n\n setFillAndStrokeStyleToContext(graphics, paintType, color) {\n const context = graphics.ctx,\n current = graphics.current;\n switch (paintType) {\n case PaintType.COLORED:\n const ctx = this.ctx;\n context.fillStyle = ctx.fillStyle;\n context.strokeStyle = ctx.strokeStyle;\n current.fillColor = ctx.fillStyle;\n current.strokeColor = ctx.strokeStyle;\n break;\n case PaintType.UNCOLORED:\n const cssColor = Util.makeHexColor(color[0], color[1], color[2]);\n context.fillStyle = cssColor;\n context.strokeStyle = cssColor;\n // Set color needed by image masks (fixes issues 3226 and 8741).\n current.fillColor = cssColor;\n current.strokeColor = cssColor;\n break;\n default:\n throw new FormatError(`Unsupported paint type: ${paintType}`);\n }\n }\n\n isModifyingCurrentTransform() {\n return false;\n }\n\n getPattern(ctx, owner, inverse, pathType) {\n // PDF spec 8.7.2 NOTE 1: pattern's matrix is relative to initial matrix.\n let matrix = inverse;\n if (pathType !== PathType.SHADING) {\n matrix = Util.transform(matrix, owner.baseTransform);\n if (this.matrix) {\n matrix = Util.transform(matrix, this.matrix);\n }\n }\n\n const temporaryPatternCanvas = this.createPatternCanvas(owner);\n\n let domMatrix = new DOMMatrix(matrix);\n // Rescale and so that the ctx.createPattern call generates a pattern with\n // the desired size.\n domMatrix = domMatrix.translate(\n temporaryPatternCanvas.offsetX,\n temporaryPatternCanvas.offsetY\n );\n domMatrix = domMatrix.scale(\n 1 / temporaryPatternCanvas.scaleX,\n 1 / temporaryPatternCanvas.scaleY\n );\n\n const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, \"repeat\");\n pattern.setTransform(domMatrix);\n\n return pattern;\n }\n}\n\nexport { getShadingPattern, PathType, TilingPattern };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, ImageKind } from \"./util.js\";\n\nfunction convertToRGBA(params) {\n switch (params.kind) {\n case ImageKind.GRAYSCALE_1BPP:\n return convertBlackAndWhiteToRGBA(params);\n case ImageKind.RGB_24BPP:\n return convertRGBToRGBA(params);\n }\n\n return null;\n}\n\nfunction convertBlackAndWhiteToRGBA({\n src,\n srcPos = 0,\n dest,\n width,\n height,\n nonBlackColor = 0xffffffff,\n inverseDecode = false,\n}) {\n const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n const [zeroMapping, oneMapping] = inverseDecode\n ? [nonBlackColor, black]\n : [black, nonBlackColor];\n const widthInSource = width >> 3;\n const widthRemainder = width & 7;\n const srcLength = src.length;\n dest = new Uint32Array(dest.buffer);\n let destPos = 0;\n\n for (let i = 0; i < height; i++) {\n for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {\n const elem = srcPos < srcLength ? src[srcPos] : 255;\n dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;\n dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;\n }\n if (widthRemainder === 0) {\n continue;\n }\n const elem = srcPos < srcLength ? src[srcPos++] : 255;\n for (let j = 0; j < widthRemainder; j++) {\n dest[destPos++] = elem & (1 << (7 - j)) ? oneMapping : zeroMapping;\n }\n }\n return { srcPos, destPos };\n}\n\nfunction convertRGBToRGBA({\n src,\n srcPos = 0,\n dest,\n destPos = 0,\n width,\n height,\n}) {\n let i = 0;\n const len = width * height * 3;\n const len32 = len >> 2;\n const src32 = new Uint32Array(src.buffer, srcPos, len32);\n\n if (FeatureTest.isLittleEndian) {\n // It's a way faster to do the shuffle manually instead of working\n // component by component with some Uint8 arrays.\n for (; i < len32 - 2; i += 3, destPos += 4) {\n const s1 = src32[i]; // R2B1G1R1\n const s2 = src32[i + 1]; // G3R3B2G2\n const s3 = src32[i + 2]; // B4G4R4B3\n\n dest[destPos] = s1 | 0xff000000;\n dest[destPos + 1] = (s1 >>> 24) | (s2 << 8) | 0xff000000;\n dest[destPos + 2] = (s2 >>> 16) | (s3 << 16) | 0xff000000;\n dest[destPos + 3] = (s3 >>> 8) | 0xff000000;\n }\n\n for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n dest[destPos++] =\n src[j] | (src[j + 1] << 8) | (src[j + 2] << 16) | 0xff000000;\n }\n } else {\n for (; i < len32 - 2; i += 3, destPos += 4) {\n const s1 = src32[i]; // R1G1B1R2\n const s2 = src32[i + 1]; // G2B2R3G3\n const s3 = src32[i + 2]; // B3R4G4B4\n\n dest[destPos] = s1 | 0xff;\n dest[destPos + 1] = (s1 << 24) | (s2 >>> 8) | 0xff;\n dest[destPos + 2] = (s2 << 16) | (s3 >>> 16) | 0xff;\n dest[destPos + 3] = (s3 << 8) | 0xff;\n }\n\n for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {\n dest[destPos++] =\n (src[j] << 24) | (src[j + 1] << 16) | (src[j + 2] << 8) | 0xff;\n }\n }\n\n return { srcPos: srcPos + len, destPos };\n}\n\nfunction grayToRGBA(src, dest) {\n if (FeatureTest.isLittleEndian) {\n for (let i = 0, ii = src.length; i < ii; i++) {\n dest[i] = (src[i] * 0x10101) | 0xff000000;\n }\n } else {\n for (let i = 0, ii = src.length; i < ii; i++) {\n dest[i] = (src[i] * 0x1010100) | 0x000000ff;\n }\n }\n}\n\nexport { convertBlackAndWhiteToRGBA, convertToRGBA, grayToRGBA };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n DrawOPS,\n FeatureTest,\n FONT_IDENTITY_MATRIX,\n ImageKind,\n info,\n OPS,\n shadow,\n TextRenderingMode,\n unreachable,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport {\n getCurrentTransform,\n getCurrentTransformInverse,\n OutputScale,\n PixelsPerInch,\n} from \"./display_utils.js\";\nimport {\n getShadingPattern,\n PathType,\n TilingPattern,\n} from \"./pattern_helper.js\";\nimport { convertBlackAndWhiteToRGBA } from \"../shared/image_utils.js\";\n\n// contexts store most of the state we need natively.\n// However, PDF needs a bit more state, which we store here.\n// Minimal font size that would be used during canvas fillText operations.\nconst MIN_FONT_SIZE = 16;\n// Maximum font size that would be used during canvas fillText operations.\nconst MAX_FONT_SIZE = 100;\n\n// Defines the time the `executeOperatorList`-method is going to be executing\n// before it stops and schedules a continue of execution.\nconst EXECUTION_TIME = 15; // ms\n// Defines the number of steps before checking the execution time.\nconst EXECUTION_STEPS = 10;\n\nconst FULL_CHUNK_HEIGHT = 16;\n\n// Only used in rescaleAndStroke. The goal is to avoid\n// creating a new DOMMatrix object each time we need it.\nconst SCALE_MATRIX = new DOMMatrix();\n\n// Used to get some coordinates.\nconst XY = new Float32Array(2);\n\n// Initial rectangle values for the minMax array.\nconst MIN_MAX_INIT = new Float32Array([\n Infinity,\n Infinity,\n -Infinity,\n -Infinity,\n]);\n\n/**\n * Overrides certain methods on a 2d ctx so that when they are called they\n * will also call the same method on the destCtx. The methods that are\n * overridden are all the transformation state modifiers, path creation, and\n * save/restore. We only forward these specific methods because they are the\n * only state modifiers that we cannot copy over when we switch contexts.\n *\n * To remove mirroring call `ctx._removeMirroring()`.\n *\n * @param {Object} ctx - The 2d canvas context that will duplicate its calls on\n * the destCtx.\n * @param {Object} destCtx - The 2d canvas context that will receive the\n * forwarded calls.\n */\nfunction mirrorContextOperations(ctx, destCtx) {\n if (ctx._removeMirroring) {\n throw new Error(\"Context is already forwarding operations.\");\n }\n ctx.__originalSave = ctx.save;\n ctx.__originalRestore = ctx.restore;\n ctx.__originalRotate = ctx.rotate;\n ctx.__originalScale = ctx.scale;\n ctx.__originalTranslate = ctx.translate;\n ctx.__originalTransform = ctx.transform;\n ctx.__originalSetTransform = ctx.setTransform;\n ctx.__originalResetTransform = ctx.resetTransform;\n ctx.__originalClip = ctx.clip;\n ctx.__originalMoveTo = ctx.moveTo;\n ctx.__originalLineTo = ctx.lineTo;\n ctx.__originalBezierCurveTo = ctx.bezierCurveTo;\n ctx.__originalRect = ctx.rect;\n ctx.__originalClosePath = ctx.closePath;\n ctx.__originalBeginPath = ctx.beginPath;\n\n ctx._removeMirroring = () => {\n ctx.save = ctx.__originalSave;\n ctx.restore = ctx.__originalRestore;\n ctx.rotate = ctx.__originalRotate;\n ctx.scale = ctx.__originalScale;\n ctx.translate = ctx.__originalTranslate;\n ctx.transform = ctx.__originalTransform;\n ctx.setTransform = ctx.__originalSetTransform;\n ctx.resetTransform = ctx.__originalResetTransform;\n\n ctx.clip = ctx.__originalClip;\n ctx.moveTo = ctx.__originalMoveTo;\n ctx.lineTo = ctx.__originalLineTo;\n ctx.bezierCurveTo = ctx.__originalBezierCurveTo;\n ctx.rect = ctx.__originalRect;\n ctx.closePath = ctx.__originalClosePath;\n ctx.beginPath = ctx.__originalBeginPath;\n delete ctx._removeMirroring;\n };\n\n ctx.save = function () {\n destCtx.save();\n this.__originalSave();\n };\n\n ctx.restore = function () {\n destCtx.restore();\n this.__originalRestore();\n };\n\n ctx.translate = function (x, y) {\n destCtx.translate(x, y);\n this.__originalTranslate(x, y);\n };\n\n ctx.scale = function (x, y) {\n destCtx.scale(x, y);\n this.__originalScale(x, y);\n };\n\n ctx.transform = function (a, b, c, d, e, f) {\n destCtx.transform(a, b, c, d, e, f);\n this.__originalTransform(a, b, c, d, e, f);\n };\n\n ctx.setTransform = function (a, b, c, d, e, f) {\n destCtx.setTransform(a, b, c, d, e, f);\n this.__originalSetTransform(a, b, c, d, e, f);\n };\n\n ctx.resetTransform = function () {\n destCtx.resetTransform();\n this.__originalResetTransform();\n };\n\n ctx.rotate = function (angle) {\n destCtx.rotate(angle);\n this.__originalRotate(angle);\n };\n\n ctx.clip = function (rule) {\n destCtx.clip(rule);\n this.__originalClip(rule);\n };\n\n ctx.moveTo = function (x, y) {\n destCtx.moveTo(x, y);\n this.__originalMoveTo(x, y);\n };\n\n ctx.lineTo = function (x, y) {\n destCtx.lineTo(x, y);\n this.__originalLineTo(x, y);\n };\n\n ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {\n destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n };\n\n ctx.rect = function (x, y, width, height) {\n destCtx.rect(x, y, width, height);\n this.__originalRect(x, y, width, height);\n };\n\n ctx.closePath = function () {\n destCtx.closePath();\n this.__originalClosePath();\n };\n\n ctx.beginPath = function () {\n destCtx.beginPath();\n this.__originalBeginPath();\n };\n}\n\nclass CachedCanvases {\n constructor(canvasFactory) {\n this.canvasFactory = canvasFactory;\n this.cache = Object.create(null);\n }\n\n getCanvas(id, width, height) {\n let canvasEntry;\n if (this.cache[id] !== undefined) {\n canvasEntry = this.cache[id];\n this.canvasFactory.reset(canvasEntry, width, height);\n } else {\n canvasEntry = this.canvasFactory.create(width, height);\n this.cache[id] = canvasEntry;\n }\n return canvasEntry;\n }\n\n delete(id) {\n delete this.cache[id];\n }\n\n clear() {\n for (const id in this.cache) {\n const canvasEntry = this.cache[id];\n this.canvasFactory.destroy(canvasEntry);\n delete this.cache[id];\n }\n }\n}\n\nfunction drawImageAtIntegerCoords(\n ctx,\n srcImg,\n srcX,\n srcY,\n srcW,\n srcH,\n destX,\n destY,\n destW,\n destH\n) {\n const [a, b, c, d, tx, ty] = getCurrentTransform(ctx);\n if (b === 0 && c === 0) {\n // top-left corner is at (X, Y) and\n // bottom-right one is at (X + width, Y + height).\n\n // If leftX is 4.321 then it's rounded to 4.\n // If width is 10.432 then it's rounded to 11 because\n // rightX = leftX + width = 14.753 which is rounded to 15\n // so after rounding the total width is 11 (15 - 4).\n // It's why we can't just floor/ceil uniformly, it just depends\n // on the values we've.\n\n const tlX = destX * a + tx;\n const rTlX = Math.round(tlX);\n const tlY = destY * d + ty;\n const rTlY = Math.round(tlY);\n const brX = (destX + destW) * a + tx;\n\n // Some pdf contains images with 1x1 images so in case of 0-width after\n // scaling we must fallback on 1 to be sure there is something.\n const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n const brY = (destY + destH) * d + ty;\n const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n // We must apply a transformation in order to apply it on the image itself.\n // For example if a == 1 && d == -1, it means that the image itself is\n // mirrored w.r.t. the x-axis.\n ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY);\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight);\n ctx.setTransform(a, b, c, d, tx, ty);\n\n return [rWidth, rHeight];\n }\n\n if (a === 0 && d === 0) {\n // This path is taken in issue9462.pdf (page 3).\n const tlX = destY * c + tx;\n const rTlX = Math.round(tlX);\n const tlY = destX * b + ty;\n const rTlY = Math.round(tlY);\n const brX = (destY + destH) * c + tx;\n const rWidth = Math.abs(Math.round(brX) - rTlX) || 1;\n const brY = (destX + destW) * b + ty;\n const rHeight = Math.abs(Math.round(brY) - rTlY) || 1;\n\n ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY);\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth);\n ctx.setTransform(a, b, c, d, tx, ty);\n\n return [rHeight, rWidth];\n }\n\n // Not a scale matrix so let the render handle the case without rounding.\n ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH);\n\n const scaleX = Math.hypot(a, b);\n const scaleY = Math.hypot(c, d);\n return [scaleX * destW, scaleY * destH];\n}\n\nclass CanvasExtraState {\n // Are soft masks and alpha values shapes or opacities?\n alphaIsShape = false;\n\n fontSize = 0;\n\n fontSizeScale = 1;\n\n textMatrix = null;\n\n textMatrixScale = 1;\n\n fontMatrix = FONT_IDENTITY_MATRIX;\n\n leading = 0;\n\n // Current point (in user coordinates)\n x = 0;\n\n y = 0;\n\n // Start of text line (in text coordinates)\n lineX = 0;\n\n lineY = 0;\n\n // Character and word spacing\n charSpacing = 0;\n\n wordSpacing = 0;\n\n textHScale = 1;\n\n textRenderingMode = TextRenderingMode.FILL;\n\n textRise = 0;\n\n // Default fore and background colors\n fillColor = \"#000000\";\n\n strokeColor = \"#000000\";\n\n patternFill = false;\n\n patternStroke = false;\n\n // Note: fill alpha applies to all non-stroking operations\n fillAlpha = 1;\n\n strokeAlpha = 1;\n\n lineWidth = 1;\n\n activeSMask = null;\n\n transferMaps = \"none\";\n\n constructor(width, height) {\n this.clipBox = new Float32Array([0, 0, width, height]);\n this.minMax = MIN_MAX_INIT.slice();\n }\n\n clone() {\n const clone = Object.create(this);\n clone.clipBox = this.clipBox.slice();\n clone.minMax = this.minMax.slice();\n return clone;\n }\n\n getPathBoundingBox(pathType = PathType.FILL, transform = null) {\n const box = this.minMax.slice();\n if (pathType === PathType.STROKE) {\n if (!transform) {\n unreachable(\"Stroke bounding box must include transform.\");\n }\n // Stroked paths can be outside of the path bounding box by 1/2 the line\n // width.\n Util.singularValueDecompose2dScale(transform, XY);\n const xStrokePad = (XY[0] * this.lineWidth) / 2;\n const yStrokePad = (XY[1] * this.lineWidth) / 2;\n box[0] -= xStrokePad;\n box[1] -= yStrokePad;\n box[2] += xStrokePad;\n box[3] += yStrokePad;\n }\n return box;\n }\n\n updateClipFromPath() {\n const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox());\n this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);\n }\n\n isEmptyClip() {\n return this.minMax[0] === Infinity;\n }\n\n startNewPathAndClipBox(box) {\n this.clipBox.set(box, 0);\n this.minMax.set(MIN_MAX_INIT, 0);\n }\n\n getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {\n return Util.intersect(\n this.clipBox,\n this.getPathBoundingBox(pathType, transform)\n );\n }\n}\n\nfunction putBinaryImageData(ctx, imgData) {\n if (imgData instanceof ImageData) {\n ctx.putImageData(imgData, 0, 0);\n return;\n }\n\n // Put the image data to the canvas in chunks, rather than putting the\n // whole image at once. This saves JS memory, because the ImageData object\n // is smaller. It also possibly saves C++ memory within the implementation\n // of putImageData(). (E.g. in Firefox we make two short-lived copies of\n // the data passed to putImageData()). |n| shouldn't be too small, however,\n // because too many putImageData() calls will slow things down.\n //\n // Note: as written, if the last chunk is partial, the putImageData() call\n // will (conceptually) put pixels past the bounds of the canvas. But\n // that's ok; any such pixels are ignored.\n\n const height = imgData.height,\n width = imgData.width;\n const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n let srcPos = 0,\n destPos;\n const src = imgData.data;\n const dest = chunkImgData.data;\n let i, j, thisChunkHeight, elemsInThisChunk;\n\n // There are multiple forms in which the pixel data can be passed, and\n // imgData.kind tells us which one this is.\n if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {\n // Grayscale, 1 bit per pixel (i.e. black-and-white).\n const srcLength = src.byteLength;\n const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\n const dest32DataLength = dest32.length;\n const fullSrcDiff = (width + 7) >> 3;\n const white = 0xffffffff;\n const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;\n\n for (i = 0; i < totalChunks; i++) {\n thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n destPos = 0;\n for (j = 0; j < thisChunkHeight; j++) {\n const srcDiff = srcLength - srcPos;\n let k = 0;\n const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\n const kEndUnrolled = kEnd & ~7;\n let mask = 0;\n let srcByte = 0;\n for (; k < kEndUnrolled; k += 8) {\n srcByte = src[srcPos++];\n dest32[destPos++] = srcByte & 128 ? white : black;\n dest32[destPos++] = srcByte & 64 ? white : black;\n dest32[destPos++] = srcByte & 32 ? white : black;\n dest32[destPos++] = srcByte & 16 ? white : black;\n dest32[destPos++] = srcByte & 8 ? white : black;\n dest32[destPos++] = srcByte & 4 ? white : black;\n dest32[destPos++] = srcByte & 2 ? white : black;\n dest32[destPos++] = srcByte & 1 ? white : black;\n }\n for (; k < kEnd; k++) {\n if (mask === 0) {\n srcByte = src[srcPos++];\n mask = 128;\n }\n\n dest32[destPos++] = srcByte & mask ? white : black;\n mask >>= 1;\n }\n }\n // We ran out of input. Make all remaining pixels transparent.\n while (destPos < dest32DataLength) {\n dest32[destPos++] = 0;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else if (imgData.kind === ImageKind.RGBA_32BPP) {\n // RGBA, 32-bits per pixel.\n j = 0;\n elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\n for (i = 0; i < fullChunks; i++) {\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n srcPos += elemsInThisChunk;\n\n ctx.putImageData(chunkImgData, 0, j);\n j += FULL_CHUNK_HEIGHT;\n }\n if (i < totalChunks) {\n elemsInThisChunk = width * partialChunkHeight * 4;\n dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\n\n ctx.putImageData(chunkImgData, 0, j);\n }\n } else if (imgData.kind === ImageKind.RGB_24BPP) {\n // RGB, 24-bits per pixel.\n thisChunkHeight = FULL_CHUNK_HEIGHT;\n elemsInThisChunk = width * thisChunkHeight;\n for (i = 0; i < totalChunks; i++) {\n if (i >= fullChunks) {\n thisChunkHeight = partialChunkHeight;\n elemsInThisChunk = width * thisChunkHeight;\n }\n\n destPos = 0;\n for (j = elemsInThisChunk; j--; ) {\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = src[srcPos++];\n dest[destPos++] = 255;\n }\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n } else {\n throw new Error(`bad image kind: ${imgData.kind}`);\n }\n}\n\nfunction putBinaryImageMask(ctx, imgData) {\n if (imgData.bitmap) {\n // The bitmap has been created in the worker.\n ctx.drawImage(imgData.bitmap, 0, 0);\n return;\n }\n\n // Slow path: OffscreenCanvas isn't available in the worker.\n const height = imgData.height,\n width = imgData.width;\n const partialChunkHeight = height % FULL_CHUNK_HEIGHT;\n const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\n const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\n\n const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\n let srcPos = 0;\n const src = imgData.data;\n const dest = chunkImgData.data;\n\n for (let i = 0; i < totalChunks; i++) {\n const thisChunkHeight =\n i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\n\n // Expand the mask so it can be used by the canvas. Any required\n // inversion has already been handled.\n\n ({ srcPos } = convertBlackAndWhiteToRGBA({\n src,\n srcPos,\n dest,\n width,\n height: thisChunkHeight,\n nonBlackColor: 0,\n }));\n\n ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\n }\n}\n\nfunction copyCtxState(sourceCtx, destCtx) {\n const properties = [\n \"strokeStyle\",\n \"fillStyle\",\n \"fillRule\",\n \"globalAlpha\",\n \"lineWidth\",\n \"lineCap\",\n \"lineJoin\",\n \"miterLimit\",\n \"globalCompositeOperation\",\n \"font\",\n \"filter\",\n ];\n for (const property of properties) {\n if (sourceCtx[property] !== undefined) {\n destCtx[property] = sourceCtx[property];\n }\n }\n if (sourceCtx.setLineDash !== undefined) {\n destCtx.setLineDash(sourceCtx.getLineDash());\n destCtx.lineDashOffset = sourceCtx.lineDashOffset;\n }\n}\n\nfunction resetCtxToDefault(ctx) {\n ctx.strokeStyle = ctx.fillStyle = \"#000000\";\n ctx.fillRule = \"nonzero\";\n ctx.globalAlpha = 1;\n ctx.lineWidth = 1;\n ctx.lineCap = \"butt\";\n ctx.lineJoin = \"miter\";\n ctx.miterLimit = 10;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.font = \"10px sans-serif\";\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n ctx.lineDashOffset = 0;\n }\n const { filter } = ctx;\n if (filter !== \"none\" && filter !== \"\") {\n ctx.filter = \"none\";\n }\n}\n\nfunction getImageSmoothingEnabled(transform, interpolate) {\n // In section 8.9.5.3 of the PDF spec, it's mentioned that the interpolate\n // flag should be used when the image is upscaled.\n // In Firefox, smoothing is always used when downscaling images (bug 1360415).\n\n if (interpolate) {\n return true;\n }\n\n Util.singularValueDecompose2dScale(transform, XY);\n // Round to a 32bit float so that `<=` check below will pass for numbers that\n // are very close, but not exactly the same 64bit floats.\n const actualScale = Math.fround(\n OutputScale.pixelRatio * PixelsPerInch.PDF_TO_CSS_UNITS\n );\n // `XY` is a Float32Array.\n return XY[0] <= actualScale && XY[1] <= actualScale;\n}\n\nconst LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\nconst LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\nconst NORMAL_CLIP = {};\nconst EO_CLIP = {};\n\nclass CanvasGraphics {\n constructor(\n canvasCtx,\n commonObjs,\n objs,\n canvasFactory,\n filterFactory,\n { optionalContentConfig, markedContentStack = null },\n annotationCanvasMap,\n pageColors\n ) {\n this.ctx = canvasCtx;\n this.current = new CanvasExtraState(\n this.ctx.canvas.width,\n this.ctx.canvas.height\n );\n this.stateStack = [];\n this.pendingClip = null;\n this.pendingEOFill = false;\n this.res = null;\n this.xobjs = null;\n this.commonObjs = commonObjs;\n this.objs = objs;\n this.canvasFactory = canvasFactory;\n this.filterFactory = filterFactory;\n this.groupStack = [];\n // Patterns are painted relative to the initial page/form transform, see\n // PDF spec 8.7.2 NOTE 1.\n this.baseTransform = null;\n this.baseTransformStack = [];\n this.groupLevel = 0;\n this.smaskStack = [];\n this.smaskCounter = 0;\n this.tempSMask = null;\n this.suspendedCtx = null;\n this.contentVisible = true;\n this.markedContentStack = markedContentStack || [];\n this.optionalContentConfig = optionalContentConfig;\n this.cachedCanvases = new CachedCanvases(this.canvasFactory);\n this.cachedPatterns = new Map();\n this.annotationCanvasMap = annotationCanvasMap;\n this.viewportScale = 1;\n this.outputScaleX = 1;\n this.outputScaleY = 1;\n this.pageColors = pageColors;\n\n this._cachedScaleForStroking = [-1, 0];\n this._cachedGetSinglePixelWidth = null;\n this._cachedBitmapsMap = new Map();\n }\n\n getObject(data, fallback = null) {\n if (typeof data === \"string\") {\n return data.startsWith(\"g_\")\n ? this.commonObjs.get(data)\n : this.objs.get(data);\n }\n return fallback;\n }\n\n beginDrawing({\n transform,\n viewport,\n transparency = false,\n background = null,\n }) {\n // For pdfs that use blend modes we have to clear the canvas else certain\n // blend modes can look wrong since we'd be blending with a white\n // backdrop. The problem with a transparent backdrop though is we then\n // don't get sub pixel anti aliasing on text, creating temporary\n // transparent canvas when we have blend modes.\n const width = this.ctx.canvas.width;\n const height = this.ctx.canvas.height;\n\n const savedFillStyle = this.ctx.fillStyle;\n this.ctx.fillStyle = background || \"#ffffff\";\n this.ctx.fillRect(0, 0, width, height);\n this.ctx.fillStyle = savedFillStyle;\n\n if (transparency) {\n const transparentCanvas = this.cachedCanvases.getCanvas(\n \"transparent\",\n width,\n height\n );\n this.compositeCtx = this.ctx;\n this.transparentCanvas = transparentCanvas.canvas;\n this.ctx = transparentCanvas.context;\n this.ctx.save();\n // The transform can be applied before rendering, transferring it to\n // the new canvas.\n this.ctx.transform(...getCurrentTransform(this.compositeCtx));\n }\n\n this.ctx.save();\n resetCtxToDefault(this.ctx);\n if (transform) {\n this.ctx.transform(...transform);\n this.outputScaleX = transform[0];\n this.outputScaleY = transform[0];\n }\n this.ctx.transform(...viewport.transform);\n this.viewportScale = viewport.scale;\n\n this.baseTransform = getCurrentTransform(this.ctx);\n }\n\n executeOperatorList(\n operatorList,\n executionStartIdx,\n continueCallback,\n stepper\n ) {\n const argsArray = operatorList.argsArray;\n const fnArray = operatorList.fnArray;\n let i = executionStartIdx || 0;\n const argsArrayLen = argsArray.length;\n\n // Sometimes the OperatorList to execute is empty.\n if (argsArrayLen === i) {\n return i;\n }\n\n const chunkOperations =\n argsArrayLen - i > EXECUTION_STEPS &&\n typeof continueCallback === \"function\";\n const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\n let steps = 0;\n\n const commonObjs = this.commonObjs;\n const objs = this.objs;\n let fnId;\n\n while (true) {\n if (stepper !== undefined && i === stepper.nextBreakPoint) {\n stepper.breakIt(i, continueCallback);\n return i;\n }\n\n fnId = fnArray[i];\n\n if (fnId !== OPS.dependency) {\n // eslint-disable-next-line prefer-spread\n this[fnId].apply(this, argsArray[i]);\n } else {\n for (const depObjId of argsArray[i]) {\n const objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\n\n // If the promise isn't resolved yet, add the continueCallback\n // to the promise and bail out.\n if (!objsPool.has(depObjId)) {\n objsPool.get(depObjId, continueCallback);\n return i;\n }\n }\n }\n\n i++;\n\n // If the entire operatorList was executed, stop as were done.\n if (i === argsArrayLen) {\n return i;\n }\n\n // If the execution took longer then a certain amount of time and\n // `continueCallback` is specified, interrupt the execution.\n if (chunkOperations && ++steps > EXECUTION_STEPS) {\n if (Date.now() > endTime) {\n continueCallback();\n return i;\n }\n steps = 0;\n }\n\n // If the operatorList isn't executed completely yet OR the execution\n // time was short enough, do another execution round.\n }\n }\n\n #restoreInitialState() {\n // Finishing all opened operations such as SMask group painting.\n while (this.stateStack.length || this.inSMaskMode) {\n this.restore();\n }\n\n this.current.activeSMask = null;\n this.ctx.restore();\n\n if (this.transparentCanvas) {\n this.ctx = this.compositeCtx;\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0); // Avoid apply transform twice\n this.ctx.drawImage(this.transparentCanvas, 0, 0);\n this.ctx.restore();\n this.transparentCanvas = null;\n }\n }\n\n endDrawing() {\n this.#restoreInitialState();\n\n this.cachedCanvases.clear();\n this.cachedPatterns.clear();\n\n for (const cache of this._cachedBitmapsMap.values()) {\n for (const canvas of cache.values()) {\n if (\n typeof HTMLCanvasElement !== \"undefined\" &&\n canvas instanceof HTMLCanvasElement\n ) {\n canvas.width = canvas.height = 0;\n }\n }\n cache.clear();\n }\n this._cachedBitmapsMap.clear();\n this.#drawFilter();\n }\n\n #drawFilter() {\n if (this.pageColors) {\n const hcmFilterId = this.filterFactory.addHCMFilter(\n this.pageColors.foreground,\n this.pageColors.background\n );\n if (hcmFilterId !== \"none\") {\n const savedFilter = this.ctx.filter;\n this.ctx.filter = hcmFilterId;\n this.ctx.drawImage(this.ctx.canvas, 0, 0);\n this.ctx.filter = savedFilter;\n }\n }\n }\n\n _scaleImage(img, inverseTransform) {\n // Vertical or horizontal scaling shall not be more than 2 to not lose the\n // pixels during drawImage operation, painting on the temporary canvas(es)\n // that are twice smaller in size.\n\n // displayWidth and displayHeight are used for VideoFrame.\n const width = img.width ?? img.displayWidth;\n const height = img.height ?? img.displayHeight;\n let widthScale = Math.max(\n Math.hypot(inverseTransform[0], inverseTransform[1]),\n 1\n );\n let heightScale = Math.max(\n Math.hypot(inverseTransform[2], inverseTransform[3]),\n 1\n );\n\n let paintWidth = width,\n paintHeight = height;\n let tmpCanvasId = \"prescale1\";\n let tmpCanvas, tmpCtx;\n while (\n (widthScale > 2 && paintWidth > 1) ||\n (heightScale > 2 && paintHeight > 1)\n ) {\n let newWidth = paintWidth,\n newHeight = paintHeight;\n if (widthScale > 2 && paintWidth > 1) {\n // See bug 1820511 (Windows specific bug).\n // TODO: once the above bug is fixed we could revert to:\n // newWidth = Math.ceil(paintWidth / 2);\n newWidth =\n paintWidth >= 16384\n ? Math.floor(paintWidth / 2) - 1 || 1\n : Math.ceil(paintWidth / 2);\n widthScale /= paintWidth / newWidth;\n }\n if (heightScale > 2 && paintHeight > 1) {\n // TODO: see the comment above.\n newHeight =\n paintHeight >= 16384\n ? Math.floor(paintHeight / 2) - 1 || 1\n : Math.ceil(paintHeight) / 2;\n heightScale /= paintHeight / newHeight;\n }\n tmpCanvas = this.cachedCanvases.getCanvas(\n tmpCanvasId,\n newWidth,\n newHeight\n );\n tmpCtx = tmpCanvas.context;\n tmpCtx.clearRect(0, 0, newWidth, newHeight);\n tmpCtx.drawImage(\n img,\n 0,\n 0,\n paintWidth,\n paintHeight,\n 0,\n 0,\n newWidth,\n newHeight\n );\n img = tmpCanvas.canvas;\n paintWidth = newWidth;\n paintHeight = newHeight;\n tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\n }\n return {\n img,\n paintWidth,\n paintHeight,\n };\n }\n\n _createMaskCanvas(img) {\n const ctx = this.ctx;\n const { width, height } = img;\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n const currentTransform = getCurrentTransform(ctx);\n\n let cache, cacheKey, scaled, maskCanvas;\n if ((img.bitmap || img.data) && img.count > 1) {\n const mainKey = img.bitmap || img.data.buffer;\n // We're reusing the same image several times, so we can cache it.\n // In case we've a pattern fill we just keep the scaled version of\n // the image.\n // Only the scaling part matters, the translation part is just used\n // to compute offsets (but not when filling patterns see #15573).\n // TODO: handle the case of a pattern fill if it's possible.\n cacheKey = JSON.stringify(\n isPatternFill\n ? currentTransform\n : [currentTransform.slice(0, 4), fillColor]\n );\n\n cache = this._cachedBitmapsMap.get(mainKey);\n if (!cache) {\n cache = new Map();\n this._cachedBitmapsMap.set(mainKey, cache);\n }\n const cachedImage = cache.get(cacheKey);\n if (cachedImage && !isPatternFill) {\n const offsetX = Math.round(\n Math.min(currentTransform[0], currentTransform[2]) +\n currentTransform[4]\n );\n const offsetY = Math.round(\n Math.min(currentTransform[1], currentTransform[3]) +\n currentTransform[5]\n );\n return {\n canvas: cachedImage,\n offsetX,\n offsetY,\n };\n }\n scaled = cachedImage;\n }\n\n if (!scaled) {\n maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\n putBinaryImageMask(maskCanvas.context, img);\n }\n\n // Create the mask canvas at the size it will be drawn at and also set\n // its transform to match the current transform so if there are any\n // patterns applied they will be applied relative to the correct\n // transform.\n\n let maskToCanvas = Util.transform(currentTransform, [\n 1 / width,\n 0,\n 0,\n -1 / height,\n 0,\n 0,\n ]);\n maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);\n const minMax = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox([0, 0, width, height], maskToCanvas, minMax);\n const [minX, minY, maxX, maxY] = minMax;\n const drawnWidth = Math.round(maxX - minX) || 1;\n const drawnHeight = Math.round(maxY - minY) || 1;\n const fillCanvas = this.cachedCanvases.getCanvas(\n \"fillCanvas\",\n drawnWidth,\n drawnHeight\n );\n const fillCtx = fillCanvas.context;\n\n // The offset will be the top-left cordinate mask.\n // If objToCanvas is [a,b,c,d,e,f] then:\n // - offsetX = min(a, c) + e\n // - offsetY = min(b, d) + f\n const offsetX = minX;\n const offsetY = minY;\n fillCtx.translate(-offsetX, -offsetY);\n fillCtx.transform(...maskToCanvas);\n\n if (!scaled) {\n // Pre-scale if needed to improve image smoothing.\n scaled = this._scaleImage(\n maskCanvas.canvas,\n getCurrentTransformInverse(fillCtx)\n );\n scaled = scaled.img;\n if (cache && isPatternFill) {\n cache.set(cacheKey, scaled);\n }\n }\n\n fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(\n getCurrentTransform(fillCtx),\n img.interpolate\n );\n\n drawImageAtIntegerCoords(\n fillCtx,\n scaled,\n 0,\n 0,\n scaled.width,\n scaled.height,\n 0,\n 0,\n width,\n height\n );\n fillCtx.globalCompositeOperation = \"source-in\";\n\n const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [\n 1,\n 0,\n 0,\n 1,\n -offsetX,\n -offsetY,\n ]);\n fillCtx.fillStyle = isPatternFill\n ? fillColor.getPattern(ctx, this, inverse, PathType.FILL)\n : fillColor;\n\n fillCtx.fillRect(0, 0, width, height);\n\n if (cache && !isPatternFill) {\n // The fill canvas is put in the cache associated to the mask image\n // so we must remove from the cached canvas: it mustn't be used again.\n this.cachedCanvases.delete(\"fillCanvas\");\n cache.set(cacheKey, fillCanvas.canvas);\n }\n\n // Round the offsets to avoid drawing fractional pixels.\n return {\n canvas: fillCanvas.canvas,\n offsetX: Math.round(offsetX),\n offsetY: Math.round(offsetY),\n };\n }\n\n // Graphics state\n setLineWidth(width) {\n if (width !== this.current.lineWidth) {\n this._cachedScaleForStroking[0] = -1;\n }\n this.current.lineWidth = width;\n this.ctx.lineWidth = width;\n }\n\n setLineCap(style) {\n this.ctx.lineCap = LINE_CAP_STYLES[style];\n }\n\n setLineJoin(style) {\n this.ctx.lineJoin = LINE_JOIN_STYLES[style];\n }\n\n setMiterLimit(limit) {\n this.ctx.miterLimit = limit;\n }\n\n setDash(dashArray, dashPhase) {\n const ctx = this.ctx;\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashPhase;\n }\n }\n\n setRenderingIntent(intent) {\n // This operation is ignored since we haven't found a use case for it yet.\n }\n\n setFlatness(flatness) {\n // This operation is ignored since we haven't found a use case for it yet.\n }\n\n setGState(states) {\n for (const [key, value] of states) {\n switch (key) {\n case \"LW\":\n this.setLineWidth(value);\n break;\n case \"LC\":\n this.setLineCap(value);\n break;\n case \"LJ\":\n this.setLineJoin(value);\n break;\n case \"ML\":\n this.setMiterLimit(value);\n break;\n case \"D\":\n this.setDash(value[0], value[1]);\n break;\n case \"RI\":\n this.setRenderingIntent(value);\n break;\n case \"FL\":\n this.setFlatness(value);\n break;\n case \"Font\":\n this.setFont(value[0], value[1]);\n break;\n case \"CA\":\n this.current.strokeAlpha = value;\n break;\n case \"ca\":\n this.ctx.globalAlpha = this.current.fillAlpha = value;\n break;\n case \"BM\":\n this.ctx.globalCompositeOperation = value;\n break;\n case \"SMask\":\n this.current.activeSMask = value ? this.tempSMask : null;\n this.tempSMask = null;\n this.checkSMaskState();\n break;\n case \"TR\":\n this.ctx.filter = this.current.transferMaps =\n this.filterFactory.addFilter(value);\n break;\n }\n }\n }\n\n get inSMaskMode() {\n return !!this.suspendedCtx;\n }\n\n checkSMaskState() {\n const inSMaskMode = this.inSMaskMode;\n if (this.current.activeSMask && !inSMaskMode) {\n this.beginSMaskMode();\n } else if (!this.current.activeSMask && inSMaskMode) {\n this.endSMaskMode();\n }\n // Else, the state is okay and nothing needs to be done.\n }\n\n /**\n * Soft mask mode takes the current main drawing canvas and replaces it with\n * a temporary canvas. Any drawing operations that happen on the temporary\n * canvas need to be composed with the main canvas that was suspended (see\n * `compose()`). The temporary canvas also duplicates many of its operations\n * on the suspended canvas to keep them in sync, so that when the soft mask\n * mode ends any clipping paths or transformations will still be active and in\n * the right order on the canvas' graphics state stack.\n */\n beginSMaskMode() {\n if (this.inSMaskMode) {\n throw new Error(\"beginSMaskMode called while already in smask mode\");\n }\n const drawnWidth = this.ctx.canvas.width;\n const drawnHeight = this.ctx.canvas.height;\n const cacheId = \"smaskGroupAt\" + this.groupLevel;\n const scratchCanvas = this.cachedCanvases.getCanvas(\n cacheId,\n drawnWidth,\n drawnHeight\n );\n this.suspendedCtx = this.ctx;\n const ctx = (this.ctx = scratchCanvas.context);\n ctx.setTransform(this.suspendedCtx.getTransform());\n copyCtxState(this.suspendedCtx, ctx);\n mirrorContextOperations(ctx, this.suspendedCtx);\n\n this.setGState([[\"BM\", \"source-over\"]]);\n }\n\n endSMaskMode() {\n if (!this.inSMaskMode) {\n throw new Error(\"endSMaskMode called while not in smask mode\");\n }\n // The soft mask is done, now restore the suspended canvas as the main\n // drawing canvas.\n this.ctx._removeMirroring();\n copyCtxState(this.ctx, this.suspendedCtx);\n this.ctx = this.suspendedCtx;\n\n this.suspendedCtx = null;\n }\n\n compose(dirtyBox) {\n if (!this.current.activeSMask) {\n return;\n }\n\n if (!dirtyBox) {\n dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\n } else {\n dirtyBox[0] = Math.floor(dirtyBox[0]);\n dirtyBox[1] = Math.floor(dirtyBox[1]);\n dirtyBox[2] = Math.ceil(dirtyBox[2]);\n dirtyBox[3] = Math.ceil(dirtyBox[3]);\n }\n const smask = this.current.activeSMask;\n const suspendedCtx = this.suspendedCtx;\n\n this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);\n // Whatever was drawn has been moved to the suspended canvas, now clear it\n // out of the current canvas.\n this.ctx.save();\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n this.ctx.restore();\n }\n\n composeSMask(ctx, smask, layerCtx, layerBox) {\n const layerOffsetX = layerBox[0];\n const layerOffsetY = layerBox[1];\n const layerWidth = layerBox[2] - layerOffsetX;\n const layerHeight = layerBox[3] - layerOffsetY;\n if (layerWidth === 0 || layerHeight === 0) {\n return;\n }\n this.genericComposeSMask(\n smask.context,\n layerCtx,\n layerWidth,\n layerHeight,\n smask.subtype,\n smask.backdrop,\n smask.transferMap,\n layerOffsetX,\n layerOffsetY,\n smask.offsetX,\n smask.offsetY\n );\n ctx.save();\n ctx.globalAlpha = 1;\n ctx.globalCompositeOperation = \"source-over\";\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(layerCtx.canvas, 0, 0);\n ctx.restore();\n }\n\n genericComposeSMask(\n maskCtx,\n layerCtx,\n width,\n height,\n subtype,\n backdrop,\n transferMap,\n layerOffsetX,\n layerOffsetY,\n maskOffsetX,\n maskOffsetY\n ) {\n let maskCanvas = maskCtx.canvas;\n let maskX = layerOffsetX - maskOffsetX;\n let maskY = layerOffsetY - maskOffsetY;\n\n if (backdrop) {\n const backdropRGB = Util.makeHexColor(...backdrop);\n if (\n maskX < 0 ||\n maskY < 0 ||\n maskX + width > maskCanvas.width ||\n maskY + height > maskCanvas.height\n ) {\n const canvas = this.cachedCanvases.getCanvas(\n \"maskExtension\",\n width,\n height\n );\n const ctx = canvas.context;\n ctx.drawImage(maskCanvas, -maskX, -maskY);\n ctx.globalCompositeOperation = \"destination-atop\";\n ctx.fillStyle = backdropRGB;\n ctx.fillRect(0, 0, width, height);\n ctx.globalCompositeOperation = \"source-over\";\n\n maskCanvas = canvas.canvas;\n maskX = maskY = 0;\n } else {\n maskCtx.save();\n maskCtx.globalAlpha = 1;\n maskCtx.setTransform(1, 0, 0, 1, 0, 0);\n const clip = new Path2D();\n clip.rect(maskX, maskY, width, height);\n maskCtx.clip(clip);\n maskCtx.globalCompositeOperation = \"destination-atop\";\n maskCtx.fillStyle = backdropRGB;\n maskCtx.fillRect(maskX, maskY, width, height);\n maskCtx.restore();\n }\n }\n\n layerCtx.save();\n layerCtx.globalAlpha = 1;\n layerCtx.setTransform(1, 0, 0, 1, 0, 0);\n\n if (subtype === \"Alpha\" && transferMap) {\n layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);\n } else if (subtype === \"Luminosity\") {\n layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);\n }\n\n const clip = new Path2D();\n clip.rect(layerOffsetX, layerOffsetY, width, height);\n layerCtx.clip(clip);\n layerCtx.globalCompositeOperation = \"destination-in\";\n layerCtx.drawImage(\n maskCanvas,\n maskX,\n maskY,\n width,\n height,\n layerOffsetX,\n layerOffsetY,\n width,\n height\n );\n layerCtx.restore();\n }\n\n save() {\n if (this.inSMaskMode) {\n // SMask mode may be turned on/off causing us to lose graphics state.\n // Copy the temporary canvas state to the main(suspended) canvas to keep\n // it in sync.\n copyCtxState(this.ctx, this.suspendedCtx);\n }\n this.ctx.save();\n const old = this.current;\n this.stateStack.push(old);\n this.current = old.clone();\n }\n\n restore() {\n if (this.stateStack.length === 0) {\n if (this.inSMaskMode) {\n this.endSMaskMode();\n }\n return;\n }\n\n this.current = this.stateStack.pop();\n this.ctx.restore();\n if (this.inSMaskMode) {\n // Graphics state is stored on the main(suspended) canvas. Restore its\n // state then copy it over to the temporary canvas.\n copyCtxState(this.suspendedCtx, this.ctx);\n }\n this.checkSMaskState();\n\n // Ensure that the clipping path is reset (fixes issue6413.pdf).\n this.pendingClip = null;\n\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n }\n\n transform(a, b, c, d, e, f) {\n this.ctx.transform(a, b, c, d, e, f);\n\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n }\n\n // Path\n constructPath(op, data, minMax) {\n let [path] = data;\n if (!minMax) {\n // The path is empty, so no need to update the current minMax.\n path ||= data[0] = new Path2D();\n this[op](path);\n return;\n }\n if (!(path instanceof Path2D)) {\n // Using a SVG string is slightly slower than using the following loop.\n const path2d = (data[0] = new Path2D());\n for (let i = 0, ii = path.length; i < ii; ) {\n switch (path[i++]) {\n case DrawOPS.moveTo:\n path2d.moveTo(path[i++], path[i++]);\n break;\n case DrawOPS.lineTo:\n path2d.lineTo(path[i++], path[i++]);\n break;\n case DrawOPS.curveTo:\n path2d.bezierCurveTo(\n path[i++],\n path[i++],\n path[i++],\n path[i++],\n path[i++],\n path[i++]\n );\n break;\n case DrawOPS.closePath:\n path2d.closePath();\n break;\n default:\n warn(`Unrecognized drawing path operator: ${path[i - 1]}`);\n break;\n }\n }\n path = path2d;\n }\n Util.axialAlignedBoundingBox(\n minMax,\n getCurrentTransform(this.ctx),\n this.current.minMax\n );\n this[op](path);\n }\n\n closePath() {\n this.ctx.closePath();\n }\n\n stroke(path, consumePath = true) {\n const ctx = this.ctx;\n const strokeColor = this.current.strokeColor;\n // For stroke we want to temporarily change the global alpha to the\n // stroking alpha.\n ctx.globalAlpha = this.current.strokeAlpha;\n if (this.contentVisible) {\n if (typeof strokeColor === \"object\" && strokeColor?.getPattern) {\n const baseTransform = strokeColor.isModifyingCurrentTransform()\n ? ctx.getTransform()\n : null;\n ctx.save();\n ctx.strokeStyle = strokeColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.STROKE\n );\n if (baseTransform) {\n const newPath = new Path2D();\n newPath.addPath(\n path,\n ctx.getTransform().invertSelf().multiplySelf(baseTransform)\n );\n path = newPath;\n }\n this.rescaleAndStroke(path, /* saveRestore */ false);\n ctx.restore();\n } else {\n this.rescaleAndStroke(path, /* saveRestore */ true);\n }\n }\n if (consumePath) {\n this.consumePath(\n path,\n this.current.getClippedPathBoundingBox(\n PathType.STROKE,\n getCurrentTransform(this.ctx)\n )\n );\n }\n // Restore the global alpha to the fill alpha\n ctx.globalAlpha = this.current.fillAlpha;\n }\n\n closeStroke(path) {\n this.stroke(path);\n }\n\n fill(path, consumePath = true) {\n const ctx = this.ctx;\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n let needRestore = false;\n\n if (isPatternFill) {\n const baseTransform = fillColor.isModifyingCurrentTransform()\n ? ctx.getTransform()\n : null;\n ctx.save();\n ctx.fillStyle = fillColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL\n );\n if (baseTransform) {\n const newPath = new Path2D();\n newPath.addPath(\n path,\n ctx.getTransform().invertSelf().multiplySelf(baseTransform)\n );\n path = newPath;\n }\n needRestore = true;\n }\n\n const intersect = this.current.getClippedPathBoundingBox();\n if (this.contentVisible && intersect !== null) {\n if (this.pendingEOFill) {\n ctx.fill(path, \"evenodd\");\n this.pendingEOFill = false;\n } else {\n ctx.fill(path);\n }\n }\n\n if (needRestore) {\n ctx.restore();\n }\n if (consumePath) {\n this.consumePath(path, intersect);\n }\n }\n\n eoFill(path) {\n this.pendingEOFill = true;\n this.fill(path);\n }\n\n fillStroke(path) {\n this.fill(path, false);\n this.stroke(path, false);\n\n this.consumePath(path);\n }\n\n eoFillStroke(path) {\n this.pendingEOFill = true;\n this.fillStroke(path);\n }\n\n closeFillStroke(path) {\n this.fillStroke(path);\n }\n\n closeEOFillStroke(path) {\n this.pendingEOFill = true;\n this.fillStroke(path);\n }\n\n endPath(path) {\n this.consumePath(path);\n }\n\n rawFillPath(path) {\n this.ctx.fill(path);\n }\n\n // Clipping\n clip() {\n this.pendingClip = NORMAL_CLIP;\n }\n\n eoClip() {\n this.pendingClip = EO_CLIP;\n }\n\n // Text\n beginText() {\n this.current.textMatrix = null;\n this.current.textMatrixScale = 1;\n this.current.x = this.current.lineX = 0;\n this.current.y = this.current.lineY = 0;\n }\n\n endText() {\n const paths = this.pendingTextPaths;\n const ctx = this.ctx;\n if (paths === undefined) {\n return;\n }\n\n const newPath = new Path2D();\n const invTransf = ctx.getTransform().invertSelf();\n for (const { transform, x, y, fontSize, path } of paths) {\n newPath.addPath(\n path,\n new DOMMatrix(transform)\n .preMultiplySelf(invTransf)\n .translate(x, y)\n .scale(fontSize, -fontSize)\n );\n }\n\n ctx.clip(newPath);\n delete this.pendingTextPaths;\n }\n\n setCharSpacing(spacing) {\n this.current.charSpacing = spacing;\n }\n\n setWordSpacing(spacing) {\n this.current.wordSpacing = spacing;\n }\n\n setHScale(scale) {\n this.current.textHScale = scale / 100;\n }\n\n setLeading(leading) {\n this.current.leading = -leading;\n }\n\n setFont(fontRefName, size) {\n const fontObj = this.commonObjs.get(fontRefName);\n const current = this.current;\n\n if (!fontObj) {\n throw new Error(`Can't find font for ${fontRefName}`);\n }\n current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX;\n\n // A valid matrix needs all main diagonal elements to be non-zero\n // This also ensures we bypass FF bugzilla bug #719844.\n if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\n warn(\"Invalid font matrix for font \" + fontRefName);\n }\n\n // The spec for Tf (setFont) says that 'size' specifies the font 'scale',\n // and in some docs this can be negative (inverted x-y axes).\n if (size < 0) {\n size = -size;\n current.fontDirection = -1;\n } else {\n current.fontDirection = 1;\n }\n\n this.current.font = fontObj;\n this.current.fontSize = size;\n\n if (fontObj.isType3Font) {\n return; // we don't need ctx.font for Type3 fonts\n }\n\n const name = fontObj.loadedName || \"sans-serif\";\n const typeface =\n fontObj.systemFontInfo?.css || `\"${name}\", ${fontObj.fallbackName}`;\n\n let bold = \"normal\";\n if (fontObj.black) {\n bold = \"900\";\n } else if (fontObj.bold) {\n bold = \"bold\";\n }\n const italic = fontObj.italic ? \"italic\" : \"normal\";\n\n // Some font backends cannot handle fonts below certain size.\n // Keeping the font at minimal size and using the fontSizeScale to change\n // the current transformation matrix before the fillText/strokeText.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227\n let browserFontSize = size;\n if (size < MIN_FONT_SIZE) {\n browserFontSize = MIN_FONT_SIZE;\n } else if (size > MAX_FONT_SIZE) {\n browserFontSize = MAX_FONT_SIZE;\n }\n this.current.fontSizeScale = size / browserFontSize;\n\n this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;\n }\n\n setTextRenderingMode(mode) {\n this.current.textRenderingMode = mode;\n }\n\n setTextRise(rise) {\n this.current.textRise = rise;\n }\n\n moveText(x, y) {\n this.current.x = this.current.lineX += x;\n this.current.y = this.current.lineY += y;\n }\n\n setLeadingMoveText(x, y) {\n this.setLeading(-y);\n this.moveText(x, y);\n }\n\n setTextMatrix(matrix) {\n const { current } = this;\n current.textMatrix = matrix;\n current.textMatrixScale = Math.hypot(matrix[0], matrix[1]);\n\n current.x = current.lineX = 0;\n current.y = current.lineY = 0;\n }\n\n nextLine() {\n this.moveText(0, this.current.leading);\n }\n\n #getScaledPath(path, currentTransform, transform) {\n const newPath = new Path2D();\n newPath.addPath(\n path,\n new DOMMatrix(transform).invertSelf().multiplySelf(currentTransform)\n );\n return newPath;\n }\n\n paintChar(character, x, y, patternFillTransform, patternStrokeTransform) {\n const ctx = this.ctx;\n const current = this.current;\n const font = current.font;\n const textRenderingMode = current.textRenderingMode;\n const fontSize = current.fontSize / current.fontSizeScale;\n const fillStrokeMode =\n textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n const isAddToPathSet = !!(\n textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG\n );\n const patternFill = current.patternFill && !font.missingFile;\n const patternStroke = current.patternStroke && !font.missingFile;\n\n let path;\n if (\n font.disableFontFace ||\n isAddToPathSet ||\n patternFill ||\n patternStroke\n ) {\n path = font.getPathGenerator(this.commonObjs, character);\n }\n\n if (font.disableFontFace || patternFill || patternStroke) {\n ctx.save();\n ctx.translate(x, y);\n ctx.scale(fontSize, -fontSize);\n let currentTransform;\n if (\n fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n if (patternFillTransform) {\n currentTransform = ctx.getTransform();\n ctx.setTransform(...patternFillTransform);\n ctx.fill(\n this.#getScaledPath(path, currentTransform, patternFillTransform)\n );\n } else {\n ctx.fill(path);\n }\n }\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n if (patternStrokeTransform) {\n currentTransform ||= ctx.getTransform();\n ctx.setTransform(...patternStrokeTransform);\n const { a, b, c, d } = currentTransform;\n const invPatternTransform = Util.inverseTransform(\n patternStrokeTransform\n );\n const transf = Util.transform(\n [a, b, c, d, 0, 0],\n invPatternTransform\n );\n Util.singularValueDecompose2dScale(transf, XY);\n\n // Cancel the pattern scaling of the line width.\n // If sx and sy are different, unfortunately we can't do anything and\n // we'll have a rendering bug.\n ctx.lineWidth *= Math.max(XY[0], XY[1]) / fontSize;\n ctx.stroke(\n this.#getScaledPath(path, currentTransform, patternStrokeTransform)\n );\n } else {\n ctx.lineWidth /= fontSize;\n ctx.stroke(path);\n }\n }\n ctx.restore();\n } else {\n if (\n fillStrokeMode === TextRenderingMode.FILL ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.fillText(character, x, y);\n }\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n ctx.strokeText(character, x, y);\n }\n }\n\n if (isAddToPathSet) {\n const paths = (this.pendingTextPaths ||= []);\n paths.push({\n transform: getCurrentTransform(ctx),\n x,\n y,\n fontSize,\n path,\n });\n }\n }\n\n get isFontSubpixelAAEnabled() {\n // Checks if anti-aliasing is enabled when scaled text is painted.\n // On Windows GDI scaled fonts looks bad.\n const { context: ctx } = this.cachedCanvases.getCanvas(\n \"isFontSubpixelAAEnabled\",\n 10,\n 10\n );\n ctx.scale(1.5, 1);\n ctx.fillText(\"I\", 0, 10);\n const data = ctx.getImageData(0, 0, 10, 10).data;\n let enabled = false;\n for (let i = 3; i < data.length; i += 4) {\n if (data[i] > 0 && data[i] < 255) {\n enabled = true;\n break;\n }\n }\n return shadow(this, \"isFontSubpixelAAEnabled\", enabled);\n }\n\n showText(glyphs) {\n const current = this.current;\n const font = current.font;\n if (font.isType3Font) {\n return this.showType3Text(glyphs);\n }\n\n const fontSize = current.fontSize;\n if (fontSize === 0) {\n return undefined;\n }\n\n const ctx = this.ctx;\n const fontSizeScale = current.fontSizeScale;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const fontDirection = current.fontDirection;\n const textHScale = current.textHScale * fontDirection;\n const glyphsLength = glyphs.length;\n const vertical = font.vertical;\n const spacingDir = vertical ? 1 : -1;\n const defaultVMetrics = font.defaultVMetrics;\n const widthAdvanceScale = fontSize * current.fontMatrix[0];\n\n const simpleFillText =\n current.textRenderingMode === TextRenderingMode.FILL &&\n !font.disableFontFace &&\n !current.patternFill;\n\n ctx.save();\n if (current.textMatrix) {\n ctx.transform(...current.textMatrix);\n }\n ctx.translate(current.x, current.y + current.textRise);\n\n if (fontDirection > 0) {\n ctx.scale(textHScale, -1);\n } else {\n ctx.scale(textHScale, 1);\n }\n\n let patternFillTransform, patternStrokeTransform;\n if (current.patternFill) {\n ctx.save();\n const pattern = current.fillColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL\n );\n patternFillTransform = getCurrentTransform(ctx);\n ctx.restore();\n ctx.fillStyle = pattern;\n }\n\n if (current.patternStroke) {\n ctx.save();\n const pattern = current.strokeColor.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.STROKE\n );\n patternStrokeTransform = getCurrentTransform(ctx);\n ctx.restore();\n ctx.strokeStyle = pattern;\n }\n\n let lineWidth = current.lineWidth;\n const scale = current.textMatrixScale;\n if (scale === 0 || lineWidth === 0) {\n const fillStrokeMode =\n current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK;\n if (\n fillStrokeMode === TextRenderingMode.STROKE ||\n fillStrokeMode === TextRenderingMode.FILL_STROKE\n ) {\n lineWidth = this.getSinglePixelWidth();\n }\n } else {\n lineWidth /= scale;\n }\n\n if (fontSizeScale !== 1.0) {\n ctx.scale(fontSizeScale, fontSizeScale);\n lineWidth /= fontSizeScale;\n }\n\n ctx.lineWidth = lineWidth;\n\n if (font.isInvalidPDFjsFont) {\n const chars = [];\n let width = 0;\n for (const glyph of glyphs) {\n chars.push(glyph.unicode);\n width += glyph.width;\n }\n ctx.fillText(chars.join(\"\"), 0, 0);\n current.x += width * widthAdvanceScale * textHScale;\n ctx.restore();\n this.compose();\n\n return undefined;\n }\n\n let x = 0,\n i;\n for (i = 0; i < glyphsLength; ++i) {\n const glyph = glyphs[i];\n if (typeof glyph === \"number\") {\n x += (spacingDir * glyph * fontSize) / 1000;\n continue;\n }\n\n let restoreNeeded = false;\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const character = glyph.fontChar;\n const accent = glyph.accent;\n let scaledX, scaledY;\n let width = glyph.width;\n if (vertical) {\n const vmetric = glyph.vmetric || defaultVMetrics;\n const vx =\n -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\n const vy = vmetric[2] * widthAdvanceScale;\n\n width = vmetric ? -vmetric[0] : width;\n scaledX = vx / fontSizeScale;\n scaledY = (x + vy) / fontSizeScale;\n } else {\n scaledX = x / fontSizeScale;\n scaledY = 0;\n }\n\n if (font.remeasure && width > 0) {\n // Some standard fonts may not have the exact width: rescale per\n // character if measured width is greater than expected glyph width\n // and subpixel-aa is enabled, otherwise just center the glyph.\n const measuredWidth =\n ((ctx.measureText(character).width * 1000) / fontSize) *\n fontSizeScale;\n if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\n const characterScaleX = width / measuredWidth;\n restoreNeeded = true;\n ctx.save();\n ctx.scale(characterScaleX, 1);\n scaledX /= characterScaleX;\n } else if (width !== measuredWidth) {\n scaledX +=\n (((width - measuredWidth) / 2000) * fontSize) / fontSizeScale;\n }\n }\n\n // Only attempt to draw the glyph if it is actually in the embedded font\n // file or if there isn't a font file so the fallback font is shown.\n if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\n if (simpleFillText && !accent) {\n // common case\n ctx.fillText(character, scaledX, scaledY);\n } else {\n this.paintChar(\n character,\n scaledX,\n scaledY,\n patternFillTransform,\n patternStrokeTransform\n );\n if (accent) {\n const scaledAccentX =\n scaledX + (fontSize * accent.offset.x) / fontSizeScale;\n const scaledAccentY =\n scaledY - (fontSize * accent.offset.y) / fontSizeScale;\n this.paintChar(\n accent.fontChar,\n scaledAccentX,\n scaledAccentY,\n patternFillTransform,\n patternStrokeTransform\n );\n }\n }\n }\n\n const charWidth = vertical\n ? width * widthAdvanceScale - spacing * fontDirection\n : width * widthAdvanceScale + spacing * fontDirection;\n x += charWidth;\n\n if (restoreNeeded) {\n ctx.restore();\n }\n }\n if (vertical) {\n current.y -= x;\n } else {\n current.x += x * textHScale;\n }\n ctx.restore();\n this.compose();\n\n return undefined;\n }\n\n showType3Text(glyphs) {\n // Type3 fonts - each glyph is a \"mini-PDF\"\n const ctx = this.ctx;\n const current = this.current;\n const font = current.font;\n const fontSize = current.fontSize;\n const fontDirection = current.fontDirection;\n const spacingDir = font.vertical ? 1 : -1;\n const charSpacing = current.charSpacing;\n const wordSpacing = current.wordSpacing;\n const textHScale = current.textHScale * fontDirection;\n const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;\n const glyphsLength = glyphs.length;\n const isTextInvisible =\n current.textRenderingMode === TextRenderingMode.INVISIBLE;\n let i, glyph, width, spacingLength;\n\n if (isTextInvisible || fontSize === 0) {\n return;\n }\n this._cachedScaleForStroking[0] = -1;\n this._cachedGetSinglePixelWidth = null;\n\n ctx.save();\n if (current.textMatrix) {\n ctx.transform(...current.textMatrix);\n }\n ctx.translate(current.x, current.y + current.textRise);\n\n ctx.scale(textHScale, fontDirection);\n\n for (i = 0; i < glyphsLength; ++i) {\n glyph = glyphs[i];\n if (typeof glyph === \"number\") {\n spacingLength = (spacingDir * glyph * fontSize) / 1000;\n this.ctx.translate(spacingLength, 0);\n current.x += spacingLength * textHScale;\n continue;\n }\n\n const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\n const operatorList = font.charProcOperatorList[glyph.operatorListId];\n if (!operatorList) {\n warn(`Type3 character \"${glyph.operatorListId}\" is not available.`);\n } else if (this.contentVisible) {\n this.save();\n ctx.scale(fontSize, fontSize);\n ctx.transform(...fontMatrix);\n this.executeOperatorList(operatorList);\n this.restore();\n }\n\n const p = [glyph.width, 0];\n Util.applyTransform(p, fontMatrix);\n width = p[0] * fontSize + spacing;\n\n ctx.translate(width, 0);\n current.x += width * textHScale;\n }\n ctx.restore();\n }\n\n // Type3 fonts\n setCharWidth(xWidth, yWidth) {\n // We can safely ignore this since the width should be the same\n // as the width in the Widths array.\n }\n\n setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {\n const clip = new Path2D();\n clip.rect(llx, lly, urx - llx, ury - lly);\n this.ctx.clip(clip);\n this.endPath();\n }\n\n // Color\n getColorN_Pattern(IR) {\n let pattern;\n if (IR[0] === \"TilingPattern\") {\n const baseTransform = this.baseTransform || getCurrentTransform(this.ctx);\n const canvasGraphicsFactory = {\n createCanvasGraphics: ctx =>\n new CanvasGraphics(\n ctx,\n this.commonObjs,\n this.objs,\n this.canvasFactory,\n this.filterFactory,\n {\n optionalContentConfig: this.optionalContentConfig,\n markedContentStack: this.markedContentStack,\n }\n ),\n };\n pattern = new TilingPattern(\n IR,\n this.ctx,\n canvasGraphicsFactory,\n baseTransform\n );\n } else {\n pattern = this._getPattern(IR[1], IR[2]);\n }\n return pattern;\n }\n\n setStrokeColorN() {\n this.current.strokeColor = this.getColorN_Pattern(arguments);\n this.current.patternStroke = true;\n }\n\n setFillColorN() {\n this.current.fillColor = this.getColorN_Pattern(arguments);\n this.current.patternFill = true;\n }\n\n setStrokeRGBColor(r, g, b) {\n this.ctx.strokeStyle = this.current.strokeColor = Util.makeHexColor(\n r,\n g,\n b\n );\n this.current.patternStroke = false;\n }\n\n setStrokeTransparent() {\n this.ctx.strokeStyle = this.current.strokeColor = \"transparent\";\n this.current.patternStroke = false;\n }\n\n setFillRGBColor(r, g, b) {\n this.ctx.fillStyle = this.current.fillColor = Util.makeHexColor(r, g, b);\n this.current.patternFill = false;\n }\n\n setFillTransparent() {\n this.ctx.fillStyle = this.current.fillColor = \"transparent\";\n this.current.patternFill = false;\n }\n\n _getPattern(objId, matrix = null) {\n let pattern;\n if (this.cachedPatterns.has(objId)) {\n pattern = this.cachedPatterns.get(objId);\n } else {\n pattern = getShadingPattern(this.getObject(objId));\n this.cachedPatterns.set(objId, pattern);\n }\n if (matrix) {\n pattern.matrix = matrix;\n }\n return pattern;\n }\n\n shadingFill(objId) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n\n this.save();\n const pattern = this._getPattern(objId);\n ctx.fillStyle = pattern.getPattern(\n ctx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.SHADING\n );\n\n const inv = getCurrentTransformInverse(ctx);\n if (inv) {\n const { width, height } = ctx.canvas;\n const minMax = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox([0, 0, width, height], inv, minMax);\n const [x0, y0, x1, y1] = minMax;\n\n this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\n } else {\n // HACK to draw the gradient onto an infinite rectangle.\n // PDF gradients are drawn across the entire image while\n // Canvas only allows gradients to be drawn in a rectangle\n // The following bug should allow us to remove this.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=664884\n\n this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\n }\n\n this.compose(this.current.getClippedPathBoundingBox());\n this.restore();\n }\n\n // Images\n beginInlineImage() {\n unreachable(\"Should not call beginInlineImage\");\n }\n\n beginImageData() {\n unreachable(\"Should not call beginImageData\");\n }\n\n paintFormXObjectBegin(matrix, bbox) {\n if (!this.contentVisible) {\n return;\n }\n this.save();\n this.baseTransformStack.push(this.baseTransform);\n\n if (matrix) {\n this.transform(...matrix);\n }\n this.baseTransform = getCurrentTransform(this.ctx);\n\n if (bbox) {\n Util.axialAlignedBoundingBox(\n bbox,\n this.baseTransform,\n this.current.minMax\n );\n const [x0, y0, x1, y1] = bbox;\n const clip = new Path2D();\n clip.rect(x0, y0, x1 - x0, y1 - y0);\n this.ctx.clip(clip);\n this.endPath();\n }\n }\n\n paintFormXObjectEnd() {\n if (!this.contentVisible) {\n return;\n }\n this.restore();\n this.baseTransform = this.baseTransformStack.pop();\n }\n\n beginGroup(group) {\n if (!this.contentVisible) {\n return;\n }\n\n this.save();\n // If there's an active soft mask we don't want it enabled for the group, so\n // clear it out. The mask and suspended canvas will be restored in endGroup.\n if (this.inSMaskMode) {\n this.endSMaskMode();\n this.current.activeSMask = null;\n }\n\n const currentCtx = this.ctx;\n // TODO non-isolated groups - according to Rik at adobe non-isolated\n // group results aren't usually that different and they even have tools\n // that ignore this setting. Notes from Rik on implementing:\n // - When you encounter an transparency group, create a new canvas with\n // the dimensions of the bbox\n // - copy the content from the previous canvas to the new canvas\n // - draw as usual\n // - remove the backdrop alpha:\n // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha\n // value of your transparency group and 'alphaBackdrop' the alpha of the\n // backdrop\n // - remove background color:\n // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)\n if (!group.isolated) {\n info(\"TODO: Support non-isolated groups.\");\n }\n\n // TODO knockout - supposedly possible with the clever use of compositing\n // modes.\n if (group.knockout) {\n warn(\"Knockout groups not supported.\");\n }\n\n const currentTransform = getCurrentTransform(currentCtx);\n if (group.matrix) {\n currentCtx.transform(...group.matrix);\n }\n if (!group.bbox) {\n throw new Error(\"Bounding box is required.\");\n }\n\n // Based on the current transform figure out how big the bounding box\n // will actually be.\n let bounds = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox(\n group.bbox,\n getCurrentTransform(currentCtx),\n bounds\n );\n\n // Clip the bounding box to the current canvas.\n const canvasBounds = [\n 0,\n 0,\n currentCtx.canvas.width,\n currentCtx.canvas.height,\n ];\n bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\n // Use ceil in case we're between sizes so we don't create canvas that is\n // too small and make the canvas at least 1x1 pixels.\n const offsetX = Math.floor(bounds[0]);\n const offsetY = Math.floor(bounds[1]);\n const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\n const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\n\n this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);\n\n let cacheId = \"groupAt\" + this.groupLevel;\n if (group.smask) {\n // Using two cache entries is case if masks are used one after another.\n cacheId += \"_smask_\" + (this.smaskCounter++ % 2);\n }\n const scratchCanvas = this.cachedCanvases.getCanvas(\n cacheId,\n drawnWidth,\n drawnHeight\n );\n const groupCtx = scratchCanvas.context;\n\n // Since we created a new canvas that is just the size of the bounding box\n // we have to translate the group ctx.\n groupCtx.translate(-offsetX, -offsetY);\n groupCtx.transform(...currentTransform);\n\n // Apply the bbox to the group context.\n let clip = new Path2D();\n const [x0, y0, x1, y1] = group.bbox;\n clip.rect(x0, y0, x1 - x0, y1 - y0);\n if (group.matrix) {\n const path = new Path2D();\n path.addPath(clip, new DOMMatrix(group.matrix));\n clip = path;\n }\n groupCtx.clip(clip);\n\n if (group.smask) {\n // Saving state and cached mask to be used in setGState.\n this.smaskStack.push({\n canvas: scratchCanvas.canvas,\n context: groupCtx,\n offsetX,\n offsetY,\n subtype: group.smask.subtype,\n backdrop: group.smask.backdrop,\n transferMap: group.smask.transferMap || null,\n startTransformInverse: null, // used during suspend operation\n });\n } else {\n // Setup the current ctx so when the group is popped we draw it at the\n // right location.\n currentCtx.setTransform(1, 0, 0, 1, 0, 0);\n currentCtx.translate(offsetX, offsetY);\n currentCtx.save();\n }\n // The transparency group inherits all off the current graphics state\n // except the blend mode, soft mask, and alpha constants.\n copyCtxState(currentCtx, groupCtx);\n this.ctx = groupCtx;\n this.setGState([\n [\"BM\", \"source-over\"],\n [\"ca\", 1],\n [\"CA\", 1],\n ]);\n this.groupStack.push(currentCtx);\n this.groupLevel++;\n }\n\n endGroup(group) {\n if (!this.contentVisible) {\n return;\n }\n this.groupLevel--;\n const groupCtx = this.ctx;\n const ctx = this.groupStack.pop();\n this.ctx = ctx;\n // Turn off image smoothing to avoid sub pixel interpolation which can\n // look kind of blurry for some pdfs.\n this.ctx.imageSmoothingEnabled = false;\n\n if (group.smask) {\n this.tempSMask = this.smaskStack.pop();\n this.restore();\n } else {\n this.ctx.restore();\n const currentMtx = getCurrentTransform(this.ctx);\n this.restore();\n this.ctx.save();\n this.ctx.setTransform(...currentMtx);\n const dirtyBox = MIN_MAX_INIT.slice();\n Util.axialAlignedBoundingBox(\n [0, 0, groupCtx.canvas.width, groupCtx.canvas.height],\n currentMtx,\n dirtyBox\n );\n this.ctx.drawImage(groupCtx.canvas, 0, 0);\n this.ctx.restore();\n this.compose(dirtyBox);\n }\n }\n\n beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {\n // The annotations are drawn just after the page content.\n // The page content drawing can potentially have set a transform,\n // a clipping path, whatever...\n // So in order to have something clean, we restore the initial state.\n this.#restoreInitialState();\n resetCtxToDefault(this.ctx);\n\n this.ctx.save();\n this.save();\n\n if (this.baseTransform) {\n this.ctx.setTransform(...this.baseTransform);\n }\n\n if (rect) {\n const width = rect[2] - rect[0];\n const height = rect[3] - rect[1];\n\n if (hasOwnCanvas && this.annotationCanvasMap) {\n transform = transform.slice();\n transform[4] -= rect[0];\n transform[5] -= rect[1];\n\n rect = rect.slice();\n rect[0] = rect[1] = 0;\n rect[2] = width;\n rect[3] = height;\n\n Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx), XY);\n const { viewportScale } = this;\n const canvasWidth = Math.ceil(\n width * this.outputScaleX * viewportScale\n );\n const canvasHeight = Math.ceil(\n height * this.outputScaleY * viewportScale\n );\n\n this.annotationCanvas = this.canvasFactory.create(\n canvasWidth,\n canvasHeight\n );\n const { canvas, context } = this.annotationCanvas;\n this.annotationCanvasMap.set(id, canvas);\n this.annotationCanvas.savedCtx = this.ctx;\n this.ctx = context;\n this.ctx.save();\n this.ctx.setTransform(XY[0], 0, 0, -XY[1], 0, height * XY[1]);\n\n resetCtxToDefault(this.ctx);\n } else {\n resetCtxToDefault(this.ctx);\n\n // Consume a potential path before clipping.\n this.endPath();\n\n const clip = new Path2D();\n clip.rect(rect[0], rect[1], width, height);\n this.ctx.clip(clip);\n }\n }\n\n this.current = new CanvasExtraState(\n this.ctx.canvas.width,\n this.ctx.canvas.height\n );\n\n this.transform(...transform);\n this.transform(...matrix);\n }\n\n endAnnotation() {\n if (this.annotationCanvas) {\n this.ctx.restore();\n this.#drawFilter();\n\n this.ctx = this.annotationCanvas.savedCtx;\n delete this.annotationCanvas.savedCtx;\n delete this.annotationCanvas;\n }\n }\n\n paintImageMaskXObject(img) {\n if (!this.contentVisible) {\n return;\n }\n const count = img.count;\n img = this.getObject(img.data, img);\n img.count = count;\n\n const ctx = this.ctx;\n const mask = this._createMaskCanvas(img);\n const maskCanvas = mask.canvas;\n\n ctx.save();\n // The mask is drawn with the transform applied. Reset the current\n // transform to draw to the identity.\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);\n ctx.restore();\n this.compose();\n }\n\n paintImageMaskXObjectRepeat(\n img,\n scaleX,\n skewX = 0,\n skewY = 0,\n scaleY,\n positions\n ) {\n if (!this.contentVisible) {\n return;\n }\n\n img = this.getObject(img.data, img);\n\n const ctx = this.ctx;\n ctx.save();\n const currentTransform = getCurrentTransform(ctx);\n ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);\n const mask = this._createMaskCanvas(img);\n\n ctx.setTransform(\n 1,\n 0,\n 0,\n 1,\n mask.offsetX - currentTransform[4],\n mask.offsetY - currentTransform[5]\n );\n for (let i = 0, ii = positions.length; i < ii; i += 2) {\n const trans = Util.transform(currentTransform, [\n scaleX,\n skewX,\n skewY,\n scaleY,\n positions[i],\n positions[i + 1],\n ]);\n\n // Here we want to apply the transform at the origin,\n // hence no additional computation is necessary.\n ctx.drawImage(mask.canvas, trans[4], trans[5]);\n }\n ctx.restore();\n this.compose();\n }\n\n paintImageMaskXObjectGroup(images) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n\n const fillColor = this.current.fillColor;\n const isPatternFill = this.current.patternFill;\n\n for (const image of images) {\n const { data, width, height, transform } = image;\n\n const maskCanvas = this.cachedCanvases.getCanvas(\n \"maskCanvas\",\n width,\n height\n );\n const maskCtx = maskCanvas.context;\n maskCtx.save();\n\n const img = this.getObject(data, image);\n putBinaryImageMask(maskCtx, img);\n\n maskCtx.globalCompositeOperation = \"source-in\";\n\n maskCtx.fillStyle = isPatternFill\n ? fillColor.getPattern(\n maskCtx,\n this,\n getCurrentTransformInverse(ctx),\n PathType.FILL\n )\n : fillColor;\n maskCtx.fillRect(0, 0, width, height);\n\n maskCtx.restore();\n\n ctx.save();\n ctx.transform(...transform);\n ctx.scale(1, -1);\n drawImageAtIntegerCoords(\n ctx,\n maskCanvas.canvas,\n 0,\n 0,\n width,\n height,\n 0,\n -1,\n 1,\n 1\n );\n ctx.restore();\n }\n this.compose();\n }\n\n paintImageXObject(objId) {\n if (!this.contentVisible) {\n return;\n }\n const imgData = this.getObject(objId);\n if (!imgData) {\n warn(\"Dependent image isn't ready yet\");\n return;\n }\n\n this.paintInlineImageXObject(imgData);\n }\n\n paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {\n if (!this.contentVisible) {\n return;\n }\n const imgData = this.getObject(objId);\n if (!imgData) {\n warn(\"Dependent image isn't ready yet\");\n return;\n }\n\n const width = imgData.width;\n const height = imgData.height;\n const map = [];\n for (let i = 0, ii = positions.length; i < ii; i += 2) {\n map.push({\n transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\n x: 0,\n y: 0,\n w: width,\n h: height,\n });\n }\n this.paintInlineImageXObjectGroup(imgData, map);\n }\n\n applyTransferMapsToCanvas(ctx) {\n if (this.current.transferMaps !== \"none\") {\n ctx.filter = this.current.transferMaps;\n ctx.drawImage(ctx.canvas, 0, 0);\n ctx.filter = \"none\";\n }\n return ctx.canvas;\n }\n\n applyTransferMapsToBitmap(imgData) {\n if (this.current.transferMaps === \"none\") {\n return imgData.bitmap;\n }\n const { bitmap, width, height } = imgData;\n const tmpCanvas = this.cachedCanvases.getCanvas(\n \"inlineImage\",\n width,\n height\n );\n const tmpCtx = tmpCanvas.context;\n tmpCtx.filter = this.current.transferMaps;\n tmpCtx.drawImage(bitmap, 0, 0);\n tmpCtx.filter = \"none\";\n\n return tmpCanvas.canvas;\n }\n\n paintInlineImageXObject(imgData) {\n if (!this.contentVisible) {\n return;\n }\n const width = imgData.width;\n const height = imgData.height;\n const ctx = this.ctx;\n\n this.save();\n\n // The filter, if any, will be applied in applyTransferMapsToBitmap.\n // It must be applied to the image before rescaling else some artifacts\n // could appear.\n // The final restore will reset it to its value.\n const { filter } = ctx;\n if (filter !== \"none\" && filter !== \"\") {\n ctx.filter = \"none\";\n }\n\n // scale the image to the unit square\n ctx.scale(1 / width, -1 / height);\n\n let imgToPaint;\n if (imgData.bitmap) {\n imgToPaint = this.applyTransferMapsToBitmap(imgData);\n } else if (\n (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement) ||\n !imgData.data\n ) {\n // typeof check is needed due to node.js support, see issue #8489\n imgToPaint = imgData;\n } else {\n const tmpCanvas = this.cachedCanvases.getCanvas(\n \"inlineImage\",\n width,\n height\n );\n const tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n }\n\n const scaled = this._scaleImage(\n imgToPaint,\n getCurrentTransformInverse(ctx)\n );\n ctx.imageSmoothingEnabled = getImageSmoothingEnabled(\n getCurrentTransform(ctx),\n imgData.interpolate\n );\n\n drawImageAtIntegerCoords(\n ctx,\n scaled.img,\n 0,\n 0,\n scaled.paintWidth,\n scaled.paintHeight,\n 0,\n -height,\n width,\n height\n );\n this.compose();\n this.restore();\n }\n\n paintInlineImageXObjectGroup(imgData, map) {\n if (!this.contentVisible) {\n return;\n }\n const ctx = this.ctx;\n let imgToPaint;\n if (imgData.bitmap) {\n imgToPaint = imgData.bitmap;\n } else {\n const w = imgData.width;\n const h = imgData.height;\n\n const tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\n const tmpCtx = tmpCanvas.context;\n putBinaryImageData(tmpCtx, imgData);\n imgToPaint = this.applyTransferMapsToCanvas(tmpCtx);\n }\n\n for (const entry of map) {\n ctx.save();\n ctx.transform(...entry.transform);\n ctx.scale(1, -1);\n drawImageAtIntegerCoords(\n ctx,\n imgToPaint,\n entry.x,\n entry.y,\n entry.w,\n entry.h,\n 0,\n -1,\n 1,\n 1\n );\n ctx.restore();\n }\n this.compose();\n }\n\n paintSolidColorImageMask() {\n if (!this.contentVisible) {\n return;\n }\n this.ctx.fillRect(0, 0, 1, 1);\n this.compose();\n }\n\n // Marked content\n\n markPoint(tag) {\n // TODO Marked content.\n }\n\n markPointProps(tag, properties) {\n // TODO Marked content.\n }\n\n beginMarkedContent(tag) {\n this.markedContentStack.push({\n visible: true,\n });\n }\n\n beginMarkedContentProps(tag, properties) {\n if (tag === \"OC\") {\n this.markedContentStack.push({\n visible: this.optionalContentConfig.isVisible(properties),\n });\n } else {\n this.markedContentStack.push({\n visible: true,\n });\n }\n this.contentVisible = this.isContentVisible();\n }\n\n endMarkedContent() {\n this.markedContentStack.pop();\n this.contentVisible = this.isContentVisible();\n }\n\n // Compatibility\n\n beginCompat() {\n // TODO ignore undefined operators (should we do that anyway?)\n }\n\n endCompat() {\n // TODO stop ignoring undefined operators\n }\n\n // Helper functions\n\n consumePath(path, clipBox) {\n const isEmpty = this.current.isEmptyClip();\n if (this.pendingClip) {\n this.current.updateClipFromPath();\n }\n if (!this.pendingClip) {\n this.compose(clipBox);\n }\n const ctx = this.ctx;\n if (this.pendingClip) {\n if (!isEmpty) {\n if (this.pendingClip === EO_CLIP) {\n ctx.clip(path, \"evenodd\");\n } else {\n ctx.clip(path);\n }\n }\n this.pendingClip = null;\n }\n this.current.startNewPathAndClipBox(this.current.clipBox);\n }\n\n getSinglePixelWidth() {\n if (!this._cachedGetSinglePixelWidth) {\n const m = getCurrentTransform(this.ctx);\n if (m[1] === 0 && m[2] === 0) {\n // Fast path\n this._cachedGetSinglePixelWidth =\n 1 / Math.min(Math.abs(m[0]), Math.abs(m[3]));\n } else {\n const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\n const normX = Math.hypot(m[0], m[2]);\n const normY = Math.hypot(m[1], m[3]);\n this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet;\n }\n }\n return this._cachedGetSinglePixelWidth;\n }\n\n getScaleForStroking() {\n // A pixel has thicknessX = thicknessY = 1;\n // A transformed pixel is a parallelogram and the thicknesses\n // corresponds to the heights.\n // The goal of this function is to rescale before setting the\n // lineWidth in order to have both thicknesses greater or equal\n // to 1 after transform.\n if (this._cachedScaleForStroking[0] === -1) {\n const { lineWidth } = this.current;\n const { a, b, c, d } = this.ctx.getTransform();\n let scaleX, scaleY;\n\n if (b === 0 && c === 0) {\n // Fast path\n const normX = Math.abs(a);\n const normY = Math.abs(d);\n if (normX === normY) {\n if (lineWidth === 0) {\n scaleX = scaleY = 1 / normX;\n } else {\n const scaledLineWidth = normX * lineWidth;\n scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1;\n }\n } else if (lineWidth === 0) {\n scaleX = 1 / normX;\n scaleY = 1 / normY;\n } else {\n const scaledXLineWidth = normX * lineWidth;\n const scaledYLineWidth = normY * lineWidth;\n scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1;\n scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1;\n }\n } else {\n // A pixel (base (x, y)) is transformed by M into a parallelogram:\n // - its area is |det(M)|;\n // - heightY (orthogonal to Mx) has a length: |det(M)| / norm(Mx);\n // - heightX (orthogonal to My) has a length: |det(M)| / norm(My).\n // heightX and heightY are the thicknesses of the transformed pixel\n // and they must be both greater or equal to 1.\n const absDet = Math.abs(a * d - b * c);\n const normX = Math.hypot(a, b);\n const normY = Math.hypot(c, d);\n if (lineWidth === 0) {\n scaleX = normY / absDet;\n scaleY = normX / absDet;\n } else {\n const baseArea = lineWidth * absDet;\n scaleX = normY > baseArea ? normY / baseArea : 1;\n scaleY = normX > baseArea ? normX / baseArea : 1;\n }\n }\n this._cachedScaleForStroking[0] = scaleX;\n this._cachedScaleForStroking[1] = scaleY;\n }\n return this._cachedScaleForStroking;\n }\n\n // Rescale before stroking in order to have a final lineWidth\n // with both thicknesses greater or equal to 1.\n rescaleAndStroke(path, saveRestore) {\n const {\n ctx,\n current: { lineWidth },\n } = this;\n const [scaleX, scaleY] = this.getScaleForStroking();\n\n if (scaleX === scaleY) {\n ctx.lineWidth = (lineWidth || 1) * scaleX;\n ctx.stroke(path);\n return;\n }\n\n const dashes = ctx.getLineDash();\n if (saveRestore) {\n ctx.save();\n }\n\n ctx.scale(scaleX, scaleY);\n SCALE_MATRIX.a = 1 / scaleX;\n SCALE_MATRIX.d = 1 / scaleY;\n const newPath = new Path2D();\n newPath.addPath(path, SCALE_MATRIX);\n\n // How the dashed line is rendered depends on the current transform...\n // so we added a rescale to handle too thin lines and consequently\n // the way the line is dashed will be modified.\n // If scaleX === scaleY, the dashed lines will be rendered correctly\n // else we'll have some bugs (but only with too thin lines).\n // Here we take the max... why not taking the min... or something else.\n // Anyway, as said it's buggy when scaleX !== scaleY.\n if (dashes.length > 0) {\n const scale = Math.max(scaleX, scaleY);\n ctx.setLineDash(dashes.map(x => x / scale));\n ctx.lineDashOffset /= scale;\n }\n\n ctx.lineWidth = lineWidth || 1;\n ctx.stroke(newPath);\n\n if (saveRestore) {\n ctx.restore();\n }\n }\n\n isContentVisible() {\n for (let i = this.markedContentStack.length - 1; i >= 0; i--) {\n if (!this.markedContentStack[i].visible) {\n return false;\n }\n }\n return true;\n }\n}\n\nfor (const op in OPS) {\n if (CanvasGraphics.prototype[op] !== undefined) {\n CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];\n }\n}\n\nexport { CanvasGraphics };\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass GlobalWorkerOptions {\n static #port = null;\n\n static #src = \"\";\n\n /**\n * @type {Worker | null}\n */\n static get workerPort() {\n return this.#port;\n }\n\n /**\n * @param {Worker | null} workerPort - Defines global port for worker process.\n * Overrides the `workerSrc` option.\n */\n static set workerPort(val) {\n if (\n !(typeof Worker !== \"undefined\" && val instanceof Worker) &&\n val !== null\n ) {\n throw new Error(\"Invalid `workerPort` type.\");\n }\n this.#port = val;\n }\n\n /**\n * @type {string}\n */\n static get workerSrc() {\n return this.#src;\n }\n\n /**\n * @param {string} workerSrc - A string containing the path and filename of\n * the worker file.\n *\n * NOTE: The `workerSrc` option should always be set, in order to prevent\n * any issues when using the PDF.js library.\n */\n static set workerSrc(val) {\n if (typeof val !== \"string\") {\n throw new Error(\"Invalid `workerSrc` type.\");\n }\n this.#src = val;\n }\n}\n\nexport { GlobalWorkerOptions };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass Metadata {\n #map;\n\n #data;\n\n constructor({ parsedData, rawData }) {\n this.#map = parsedData;\n this.#data = rawData;\n }\n\n getRaw() {\n return this.#data;\n }\n\n get(name) {\n return this.#map.get(name) ?? null;\n }\n\n [Symbol.iterator]() {\n return this.#map.entries();\n }\n}\n\nexport { Metadata };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n info,\n RenderingIntentFlag,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst INTERNAL = Symbol(\"INTERNAL\");\n\nclass OptionalContentGroup {\n #isDisplay = false;\n\n #isPrint = false;\n\n #userSet = false;\n\n #visible = true;\n\n constructor(renderingIntent, { name, intent, usage, rbGroups }) {\n this.#isDisplay = !!(renderingIntent & RenderingIntentFlag.DISPLAY);\n this.#isPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n this.name = name;\n this.intent = intent;\n this.usage = usage;\n this.rbGroups = rbGroups;\n }\n\n /**\n * @type {boolean}\n */\n get visible() {\n if (this.#userSet) {\n return this.#visible;\n }\n if (!this.#visible) {\n return false;\n }\n const { print, view } = this.usage;\n\n if (this.#isDisplay) {\n return view?.viewState !== \"OFF\";\n } else if (this.#isPrint) {\n return print?.printState !== \"OFF\";\n }\n return true;\n }\n\n /**\n * @ignore\n */\n _setVisible(internal, visible, userSet = false) {\n if (internal !== INTERNAL) {\n unreachable(\"Internal method `_setVisible` called.\");\n }\n this.#userSet = userSet;\n this.#visible = visible;\n }\n}\n\nclass OptionalContentConfig {\n #cachedGetHash = null;\n\n #groups = new Map();\n\n #initialHash = null;\n\n #order = null;\n\n constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) {\n this.renderingIntent = renderingIntent;\n\n this.name = null;\n this.creator = null;\n\n if (data === null) {\n return;\n }\n this.name = data.name;\n this.creator = data.creator;\n this.#order = data.order;\n for (const group of data.groups) {\n this.#groups.set(\n group.id,\n new OptionalContentGroup(renderingIntent, group)\n );\n }\n\n if (data.baseState === \"OFF\") {\n for (const group of this.#groups.values()) {\n group._setVisible(INTERNAL, false);\n }\n }\n\n for (const on of data.on) {\n this.#groups.get(on)._setVisible(INTERNAL, true);\n }\n\n for (const off of data.off) {\n this.#groups.get(off)._setVisible(INTERNAL, false);\n }\n\n // The following code must always run *last* in the constructor.\n this.#initialHash = this.getHash();\n }\n\n #evaluateVisibilityExpression(array) {\n const length = array.length;\n if (length < 2) {\n return true;\n }\n const operator = array[0];\n for (let i = 1; i < length; i++) {\n const element = array[i];\n let state;\n if (Array.isArray(element)) {\n state = this.#evaluateVisibilityExpression(element);\n } else if (this.#groups.has(element)) {\n state = this.#groups.get(element).visible;\n } else {\n warn(`Optional content group not found: ${element}`);\n return true;\n }\n switch (operator) {\n case \"And\":\n if (!state) {\n return false;\n }\n break;\n case \"Or\":\n if (state) {\n return true;\n }\n break;\n case \"Not\":\n return !state;\n default:\n return true;\n }\n }\n return operator === \"And\";\n }\n\n isVisible(group) {\n if (this.#groups.size === 0) {\n return true;\n }\n if (!group) {\n info(\"Optional content group not defined.\");\n return true;\n }\n if (group.type === \"OCG\") {\n if (!this.#groups.has(group.id)) {\n warn(`Optional content group not found: ${group.id}`);\n return true;\n }\n return this.#groups.get(group.id).visible;\n } else if (group.type === \"OCMD\") {\n // Per the spec, the expression should be preferred if available.\n if (group.expression) {\n return this.#evaluateVisibilityExpression(group.expression);\n }\n if (!group.policy || group.policy === \"AnyOn\") {\n // Default\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (this.#groups.get(id).visible) {\n return true;\n }\n }\n return false;\n } else if (group.policy === \"AllOn\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (!this.#groups.get(id).visible) {\n return false;\n }\n }\n return true;\n } else if (group.policy === \"AnyOff\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (!this.#groups.get(id).visible) {\n return true;\n }\n }\n return false;\n } else if (group.policy === \"AllOff\") {\n for (const id of group.ids) {\n if (!this.#groups.has(id)) {\n warn(`Optional content group not found: ${id}`);\n return true;\n }\n if (this.#groups.get(id).visible) {\n return false;\n }\n }\n return true;\n }\n warn(`Unknown optional content policy ${group.policy}.`);\n return true;\n }\n warn(`Unknown group type ${group.type}.`);\n return true;\n }\n\n setVisibility(id, visible = true, preserveRB = true) {\n const group = this.#groups.get(id);\n if (!group) {\n warn(`Optional content group not found: ${id}`);\n return;\n }\n\n // If the visibility is about to be set to `true` and the group belongs to\n // any radiobutton groups, hide all other OCGs in these radiobutton groups,\n // provided that radiobutton state relationships are to be preserved.\n if (preserveRB && visible && group.rbGroups.length) {\n for (const rbGroup of group.rbGroups) {\n for (const otherId of rbGroup) {\n if (otherId !== id) {\n this.#groups.get(otherId)?._setVisible(INTERNAL, false, true);\n }\n }\n }\n }\n\n group._setVisible(INTERNAL, !!visible, /* userSet = */ true);\n\n this.#cachedGetHash = null;\n }\n\n setOCGState({ state, preserveRB }) {\n let operator;\n\n for (const elem of state) {\n switch (elem) {\n case \"ON\":\n case \"OFF\":\n case \"Toggle\":\n operator = elem;\n continue;\n }\n\n const group = this.#groups.get(elem);\n if (!group) {\n continue;\n }\n switch (operator) {\n case \"ON\":\n this.setVisibility(elem, true, preserveRB);\n break;\n case \"OFF\":\n this.setVisibility(elem, false, preserveRB);\n break;\n case \"Toggle\":\n this.setVisibility(elem, !group.visible, preserveRB);\n break;\n }\n }\n\n this.#cachedGetHash = null;\n }\n\n get hasInitialVisibility() {\n return this.#initialHash === null || this.getHash() === this.#initialHash;\n }\n\n getOrder() {\n if (!this.#groups.size) {\n return null;\n }\n if (this.#order) {\n return this.#order.slice();\n }\n return [...this.#groups.keys()];\n }\n\n getGroup(id) {\n return this.#groups.get(id) || null;\n }\n\n getHash() {\n if (this.#cachedGetHash !== null) {\n return this.#cachedGetHash;\n }\n const hash = new MurmurHash3_64();\n\n for (const [id, group] of this.#groups) {\n hash.update(`${id}:${group.visible}`);\n }\n return (this.#cachedGetHash = hash.hexdigest());\n }\n\n [Symbol.iterator]() {\n return this.#groups.entries();\n }\n}\n\nexport { OptionalContentConfig };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"../interfaces\").IPDFStream} IPDFStream */\n/** @typedef {import(\"../interfaces\").IPDFStreamReader} IPDFStreamReader */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../interfaces\").IPDFStreamRangeReader} IPDFStreamRangeReader */\n\nimport { assert } from \"../shared/util.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\n/** @implements {IPDFStream} */\nclass PDFDataTransportStream {\n constructor(\n pdfDataRangeTransport,\n { disableRange = false, disableStream = false }\n ) {\n assert(\n pdfDataRangeTransport,\n 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.'\n );\n const { length, initialData, progressiveDone, contentDispositionFilename } =\n pdfDataRangeTransport;\n\n this._queuedChunks = [];\n this._progressiveDone = progressiveDone;\n this._contentDispositionFilename = contentDispositionFilename;\n\n if (initialData?.length > 0) {\n // Prevent any possible issues by only transferring a Uint8Array that\n // completely \"utilizes\" its underlying ArrayBuffer.\n const buffer =\n initialData instanceof Uint8Array &&\n initialData.byteLength === initialData.buffer.byteLength\n ? initialData.buffer\n : new Uint8Array(initialData).buffer;\n this._queuedChunks.push(buffer);\n }\n\n this._pdfDataRangeTransport = pdfDataRangeTransport;\n this._isStreamingSupported = !disableStream;\n this._isRangeSupported = !disableRange;\n this._contentLength = length;\n\n this._fullRequestReader = null;\n this._rangeReaders = [];\n\n pdfDataRangeTransport.addRangeListener((begin, chunk) => {\n this._onReceiveData({ begin, chunk });\n });\n\n pdfDataRangeTransport.addProgressListener((loaded, total) => {\n this._onProgress({ loaded, total });\n });\n\n pdfDataRangeTransport.addProgressiveReadListener(chunk => {\n this._onReceiveData({ chunk });\n });\n\n pdfDataRangeTransport.addProgressiveDoneListener(() => {\n this._onProgressiveDone();\n });\n\n pdfDataRangeTransport.transportReady();\n }\n\n _onReceiveData({ begin, chunk }) {\n // Prevent any possible issues by only transferring a Uint8Array that\n // completely \"utilizes\" its underlying ArrayBuffer.\n const buffer =\n chunk instanceof Uint8Array &&\n chunk.byteLength === chunk.buffer.byteLength\n ? chunk.buffer\n : new Uint8Array(chunk).buffer;\n\n if (begin === undefined) {\n if (this._fullRequestReader) {\n this._fullRequestReader._enqueue(buffer);\n } else {\n this._queuedChunks.push(buffer);\n }\n } else {\n const found = this._rangeReaders.some(function (rangeReader) {\n if (rangeReader._begin !== begin) {\n return false;\n }\n rangeReader._enqueue(buffer);\n return true;\n });\n assert(\n found,\n \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\"\n );\n }\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n _onProgress(evt) {\n if (evt.total === undefined) {\n // Reporting to first range reader, if it exists.\n this._rangeReaders[0]?.onProgress?.({ loaded: evt.loaded });\n } else {\n this._fullRequestReader?.onProgress?.({\n loaded: evt.loaded,\n total: evt.total,\n });\n }\n }\n\n _onProgressiveDone() {\n this._fullRequestReader?.progressiveDone();\n this._progressiveDone = true;\n }\n\n _removeRangeReader(reader) {\n const i = this._rangeReaders.indexOf(reader);\n if (i >= 0) {\n this._rangeReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFDataTransportStream.getFullReader can only be called once.\"\n );\n const queuedChunks = this._queuedChunks;\n this._queuedChunks = null;\n return new PDFDataTransportStreamReader(\n this,\n queuedChunks,\n this._progressiveDone,\n this._contentDispositionFilename\n );\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const reader = new PDFDataTransportStreamRangeReader(this, begin, end);\n this._pdfDataRangeTransport.requestDataRange(begin, end);\n this._rangeReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeReaders.slice(0)) {\n reader.cancel(reason);\n }\n this._pdfDataRangeTransport.abort();\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFDataTransportStreamReader {\n constructor(\n stream,\n queuedChunks,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this._stream = stream;\n this._done = progressiveDone || false;\n this._filename = isPdfFile(contentDispositionFilename)\n ? contentDispositionFilename\n : null;\n this._queuedChunks = queuedChunks || [];\n this._loaded = 0;\n for (const chunk of this._queuedChunks) {\n this._loaded += chunk.byteLength;\n }\n this._requests = [];\n this._headersReady = Promise.resolve();\n stream._fullRequestReader = this;\n\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return; // Ignore new data.\n }\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: chunk, done: false });\n } else {\n this._queuedChunks.push(chunk);\n }\n this._loaded += chunk.byteLength;\n }\n\n get headersReady() {\n return this._headersReady;\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._stream._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._stream._isStreamingSupported;\n }\n\n get contentLength() {\n return this._stream._contentLength;\n }\n\n async read() {\n if (this._queuedChunks.length > 0) {\n const chunk = this._queuedChunks.shift();\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n\n progressiveDone() {\n if (this._done) {\n return;\n }\n this._done = true;\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFDataTransportStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._begin = begin;\n this._end = end;\n this._queuedChunk = null;\n this._requests = [];\n this._done = false;\n\n this.onProgress = null;\n }\n\n _enqueue(chunk) {\n if (this._done) {\n return; // ignore new data\n }\n if (this._requests.length === 0) {\n this._queuedChunk = chunk;\n } else {\n const requestsCapability = this._requests.shift();\n requestsCapability.resolve({ value: chunk, done: false });\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n this._done = true;\n this._stream._removeRangeReader(this);\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._queuedChunk) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n this._stream._removeRangeReader(this);\n }\n}\n\nexport { PDFDataTransportStream };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { stringToBytes } from \"../shared/util.js\";\n\n// This getFilenameFromContentDispositionHeader function is adapted from\n// https://github.com/Rob--W/open-in-browser/blob/7e2e35a38b8b4e981b11da7b2f01df0149049e92/extension/content-disposition.js\n// with the following changes:\n// - Modified to conform to PDF.js's coding style.\n// - Move return to the end of the function to prevent Babel from dropping the\n// function declarations.\n\n/**\n * Extract file name from the Content-Disposition HTTP response header.\n *\n * @param {string} contentDisposition\n * @returns {string} Filename, if found in the Content-Disposition header.\n */\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\n let needsEncodingFixup = true;\n\n // filename*=ext-value (\"ext-value\" from RFC 5987, referenced by RFC 6266).\n let tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = unescape(filename);\n filename = rfc5987decode(filename);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n // Continuations (RFC 2231 section 3, referenced by RFC 5987 section 3.1).\n // filename*n*=part\n // filename*n=part\n tmp = rfc2231getparam(contentDisposition);\n if (tmp) {\n // RFC 2047, section\n const filename = rfc2047decode(tmp);\n return fixupEncoding(filename);\n }\n\n // filename=value (RFC 5987, section 4.1).\n tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\n if (tmp) {\n tmp = tmp[1];\n let filename = rfc2616unquote(tmp);\n filename = rfc2047decode(filename);\n return fixupEncoding(filename);\n }\n\n // After this line there are only function declarations. We cannot put\n // \"return\" here for readability because babel would then drop the function\n // declarations...\n function toParamRegExp(attributePattern, flags) {\n return new RegExp(\n \"(?:^|;)\\\\s*\" +\n attributePattern +\n \"\\\\s*=\\\\s*\" +\n // Captures: value = token | quoted-string\n // (RFC 2616, section 3.6 and referenced by RFC 6266 4.1)\n \"(\" +\n '[^\";\\\\s][^;\\\\s]*' +\n \"|\" +\n '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' +\n \")\",\n flags\n );\n }\n function textdecode(encoding, value) {\n if (encoding) {\n if (!/^[\\x00-\\xFF]+$/.test(value)) {\n return value;\n }\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(value);\n value = decoder.decode(buffer);\n needsEncodingFixup = false;\n } catch {\n // TextDecoder constructor threw - unrecognized encoding.\n }\n }\n return value;\n }\n function fixupEncoding(value) {\n if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\n // Maybe multi-byte UTF-8.\n value = textdecode(\"utf-8\", value);\n if (needsEncodingFixup) {\n // Try iso-8859-1 encoding.\n value = textdecode(\"iso-8859-1\", value);\n }\n }\n return value;\n }\n function rfc2231getparam(contentDispositionStr) {\n const matches = [];\n let match;\n // Iterate over all filename*n= and filename*n*= with n being an integer\n // of at least zero. Any non-zero number must not start with '0'.\n const iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\n while ((match = iter.exec(contentDispositionStr)) !== null) {\n let [, n, quot, part] = match; // eslint-disable-line prefer-const\n n = parseInt(n, 10);\n if (n in matches) {\n // Ignore anything after the invalid second filename*0.\n if (n === 0) {\n break;\n }\n continue;\n }\n matches[n] = [quot, part];\n }\n const parts = [];\n for (let n = 0; n < matches.length; ++n) {\n if (!(n in matches)) {\n // Numbers must be consecutive. Truncate when there is a hole.\n break;\n }\n let [quot, part] = matches[n]; // eslint-disable-line prefer-const\n part = rfc2616unquote(part);\n if (quot) {\n part = unescape(part);\n if (n === 0) {\n part = rfc5987decode(part);\n }\n }\n parts.push(part);\n }\n return parts.join(\"\");\n }\n function rfc2616unquote(value) {\n if (value.startsWith('\"')) {\n const parts = value.slice(1).split('\\\\\"');\n // Find the first unescaped \" and terminate there.\n for (let i = 0; i < parts.length; ++i) {\n const quotindex = parts[i].indexOf('\"');\n if (quotindex !== -1) {\n parts[i] = parts[i].slice(0, quotindex);\n parts.length = i + 1; // Truncates and stop the iteration.\n }\n parts[i] = parts[i].replaceAll(/\\\\(.)/g, \"$1\");\n }\n value = parts.join('\"');\n }\n return value;\n }\n function rfc5987decode(extvalue) {\n // Decodes \"ext-value\" from RFC 5987.\n const encodingend = extvalue.indexOf(\"'\");\n if (encodingend === -1) {\n // Some servers send \"filename*=\" without encoding 'language' prefix,\n // e.g. in https://github.com/Rob--W/open-in-browser/issues/26\n // Let's accept the value like Firefox (57) (Chrome 62 rejects it).\n return extvalue;\n }\n const encoding = extvalue.slice(0, encodingend);\n const langvalue = extvalue.slice(encodingend + 1);\n // Ignore language (RFC 5987 section 3.2.1, and RFC 6266 section 4.1 ).\n const value = langvalue.replace(/^[^']*'/, \"\");\n return textdecode(encoding, value);\n }\n function rfc2047decode(value) {\n // RFC 2047-decode the result. Firefox tried to drop support for it, but\n // backed out because some servers use it - https://bugzil.la/875615\n // Firefox's condition for decoding is here: https://searchfox.org/mozilla-central/rev/4a590a5a15e35d88a3b23dd6ac3c471cf85b04a8/netwerk/mime/nsMIMEHeaderParamImpl.cpp#742-748\n\n // We are more strict and only recognize RFC 2047-encoding if the value\n // starts with \"=?\", since then it is likely that the full value is\n // RFC 2047-encoded.\n\n // Firefox also decodes words even where RFC 2047 section 5 states:\n // \"An 'encoded-word' MUST NOT appear within a 'quoted-string'.\"\n if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\n return value;\n }\n // RFC 2047, section 2.4\n // encoded-word = \"=?\" charset \"?\" encoding \"?\" encoded-text \"?=\"\n // charset = token (but let's restrict to characters that denote a\n // possibly valid encoding).\n // encoding = q or b\n // encoded-text = any printable ASCII character other than ? or space.\n // ... but Firefox permits ? and space.\n return value.replaceAll(\n /=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g,\n function (matches, charset, encoding, text) {\n if (encoding === \"q\" || encoding === \"Q\") {\n // RFC 2047 section 4.2.\n text = text.replaceAll(\"_\", \" \");\n text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) {\n return String.fromCharCode(parseInt(hex, 16));\n });\n return textdecode(charset, text);\n } // else encoding is b or B - base64 (RFC 2047 section 4.1)\n try {\n text = atob(text);\n } catch {}\n return textdecode(charset, text);\n }\n );\n }\n\n return \"\";\n}\n\nexport { getFilenameFromContentDispositionHeader };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, ResponseException } from \"../shared/util.js\";\nimport { getFilenameFromContentDispositionHeader } from \"./content_disposition.js\";\nimport { isPdfFile } from \"./display_utils.js\";\n\nfunction createHeaders(isHttp, httpHeaders) {\n const headers = new Headers();\n\n if (!isHttp || !httpHeaders || typeof httpHeaders !== \"object\") {\n return headers;\n }\n for (const key in httpHeaders) {\n const val = httpHeaders[key];\n if (val !== undefined) {\n headers.append(key, val);\n }\n }\n return headers;\n}\n\nfunction getResponseOrigin(url) {\n // Notably, null is distinct from \"null\" string (e.g. from file:-URLs).\n return URL.parse(url)?.origin ?? null;\n}\n\nfunction validateRangeRequestCapabilities({\n responseHeaders,\n isHttp,\n rangeChunkSize,\n disableRange,\n}) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(rangeChunkSize) && rangeChunkSize > 0,\n \"rangeChunkSize must be an integer larger than zero.\"\n );\n }\n const returnValues = {\n allowRangeRequests: false,\n suggestedLength: undefined,\n };\n\n const length = parseInt(responseHeaders.get(\"Content-Length\"), 10);\n if (!Number.isInteger(length)) {\n return returnValues;\n }\n\n returnValues.suggestedLength = length;\n\n if (length <= 2 * rangeChunkSize) {\n // The file size is smaller than the size of two chunks, so it does not\n // make any sense to abort the request and retry with a range request.\n return returnValues;\n }\n\n if (disableRange || !isHttp) {\n return returnValues;\n }\n if (responseHeaders.get(\"Accept-Ranges\") !== \"bytes\") {\n return returnValues;\n }\n\n const contentEncoding = responseHeaders.get(\"Content-Encoding\") || \"identity\";\n if (contentEncoding !== \"identity\") {\n return returnValues;\n }\n\n returnValues.allowRangeRequests = true;\n return returnValues;\n}\n\nfunction extractFilenameFromHeader(responseHeaders) {\n const contentDisposition = responseHeaders.get(\"Content-Disposition\");\n if (contentDisposition) {\n let filename = getFilenameFromContentDispositionHeader(contentDisposition);\n if (filename.includes(\"%\")) {\n try {\n filename = decodeURIComponent(filename);\n } catch {}\n }\n if (isPdfFile(filename)) {\n return filename;\n }\n }\n return null;\n}\n\nfunction createResponseError(status, url) {\n return new ResponseException(\n `Unexpected server response (${status}) while retrieving PDF \"${url}\".`,\n status,\n /* missing = */ status === 404 || (status === 0 && url.startsWith(\"file:\"))\n );\n}\n\nfunction validateResponseStatus(status) {\n return status === 200 || status === 206;\n}\n\nexport {\n createHeaders,\n createResponseError,\n extractFilenameFromHeader,\n getResponseOrigin,\n validateRangeRequestCapabilities,\n validateResponseStatus,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AbortException, assert, warn } from \"../shared/util.js\";\nimport {\n createHeaders,\n createResponseError,\n extractFilenameFromHeader,\n getResponseOrigin,\n validateRangeRequestCapabilities,\n validateResponseStatus,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./fetch_stream.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nfunction createFetchOptions(headers, withCredentials, abortController) {\n return {\n method: \"GET\",\n headers,\n signal: abortController.signal,\n mode: \"cors\",\n credentials: withCredentials ? \"include\" : \"same-origin\",\n redirect: \"follow\",\n };\n}\n\nfunction getArrayBuffer(val) {\n if (val instanceof Uint8Array) {\n return val.buffer;\n }\n if (val instanceof ArrayBuffer) {\n return val;\n }\n warn(`getArrayBuffer - unexpected data format: ${val}`);\n return new Uint8Array(val).buffer;\n}\n\n/** @implements {IPDFStream} */\nclass PDFFetchStream {\n _responseOrigin = null;\n\n constructor(source) {\n this.source = source;\n this.isHttp = /^https?:/i.test(source.url);\n this.headers = createHeaders(this.isHttp, source.httpHeaders);\n\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFFetchStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFFetchStreamReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const reader = new PDFFetchStreamRangeReader(this, begin, end);\n this._rangeRequestReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFFetchStreamReader {\n constructor(stream) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n this._filename = null;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._contentLength = source.length;\n this._headersCapability = Promise.withResolvers();\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._abortController = new AbortController();\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n // Always create a copy of the headers.\n const headers = new Headers(stream.headers);\n\n const url = source.url;\n fetch(\n url,\n createFetchOptions(headers, this._withCredentials, this._abortController)\n )\n .then(response => {\n stream._responseOrigin = getResponseOrigin(response.url);\n\n if (!validateResponseStatus(response.status)) {\n throw createResponseError(response.status, url);\n }\n this._reader = response.body.getReader();\n this._headersCapability.resolve();\n\n const responseHeaders = response.headers;\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n responseHeaders,\n isHttp: stream.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n this._isRangeSupported = allowRangeRequests;\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(responseHeaders);\n\n // We need to stop reading when range is supported and streaming is\n // disabled.\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this.cancel(new AbortException(\"Streaming is disabled.\"));\n }\n })\n .catch(this._headersCapability.reject);\n\n this.onProgress = null;\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._headersCapability.promise;\n const { value, done } = await this._reader.read();\n if (done) {\n return { value, done };\n }\n this._loaded += value.byteLength;\n this.onProgress?.({\n loaded: this._loaded,\n total: this._contentLength,\n });\n\n return { value: getArrayBuffer(value), done: false };\n }\n\n cancel(reason) {\n this._reader?.cancel(reason);\n this._abortController.abort();\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFFetchStreamRangeReader {\n constructor(stream, begin, end) {\n this._stream = stream;\n this._reader = null;\n this._loaded = 0;\n const source = stream.source;\n this._withCredentials = source.withCredentials || false;\n this._readCapability = Promise.withResolvers();\n this._isStreamingSupported = !source.disableStream;\n\n this._abortController = new AbortController();\n // Always create a copy of the headers.\n const headers = new Headers(stream.headers);\n headers.append(\"Range\", `bytes=${begin}-${end - 1}`);\n\n const url = source.url;\n fetch(\n url,\n createFetchOptions(headers, this._withCredentials, this._abortController)\n )\n .then(response => {\n const responseOrigin = getResponseOrigin(response.url);\n\n if (responseOrigin !== stream._responseOrigin) {\n throw new Error(\n `Expected range response-origin \"${responseOrigin}\" to match \"${stream._responseOrigin}\".`\n );\n }\n if (!validateResponseStatus(response.status)) {\n throw createResponseError(response.status, url);\n }\n this._readCapability.resolve();\n this._reader = response.body.getReader();\n })\n .catch(this._readCapability.reject);\n\n this.onProgress = null;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n const { value, done } = await this._reader.read();\n if (done) {\n return { value, done };\n }\n this._loaded += value.byteLength;\n this.onProgress?.({ loaded: this._loaded });\n\n return { value: getArrayBuffer(value), done: false };\n }\n\n cancel(reason) {\n this._reader?.cancel(reason);\n this._abortController.abort();\n }\n}\n\nexport { PDFFetchStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert, stringToBytes, warn } from \"../shared/util.js\";\nimport {\n createHeaders,\n createResponseError,\n extractFilenameFromHeader,\n getResponseOrigin,\n validateRangeRequestCapabilities,\n} from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./network.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nconst OK_RESPONSE = 200;\nconst PARTIAL_CONTENT_RESPONSE = 206;\n\nfunction getArrayBuffer(xhr) {\n const data = xhr.response;\n if (typeof data !== \"string\") {\n return data;\n }\n return stringToBytes(data).buffer;\n}\n\nclass NetworkManager {\n _responseOrigin = null;\n\n constructor({ url, httpHeaders, withCredentials }) {\n this.url = url;\n this.isHttp = /^https?:/i.test(url);\n this.headers = createHeaders(this.isHttp, httpHeaders);\n this.withCredentials = withCredentials || false;\n\n this.currXhrId = 0;\n this.pendingRequests = Object.create(null);\n }\n\n request(args) {\n const xhr = new XMLHttpRequest();\n const xhrId = this.currXhrId++;\n const pendingRequest = (this.pendingRequests[xhrId] = { xhr });\n\n xhr.open(\"GET\", this.url);\n xhr.withCredentials = this.withCredentials;\n for (const [key, val] of this.headers) {\n xhr.setRequestHeader(key, val);\n }\n if (this.isHttp && \"begin\" in args && \"end\" in args) {\n xhr.setRequestHeader(\"Range\", `bytes=${args.begin}-${args.end - 1}`);\n pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\n } else {\n pendingRequest.expectedStatus = OK_RESPONSE;\n }\n xhr.responseType = \"arraybuffer\";\n\n assert(args.onError, \"Expected `onError` callback to be provided.\");\n xhr.onerror = () => {\n args.onError(xhr.status);\n };\n xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\n xhr.onprogress = this.onProgress.bind(this, xhrId);\n\n pendingRequest.onHeadersReceived = args.onHeadersReceived;\n pendingRequest.onDone = args.onDone;\n pendingRequest.onError = args.onError;\n pendingRequest.onProgress = args.onProgress;\n\n xhr.send(null);\n\n return xhrId;\n }\n\n onProgress(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n if (!pendingRequest) {\n return; // Maybe abortRequest was called...\n }\n pendingRequest.onProgress?.(evt);\n }\n\n onStateChange(xhrId, evt) {\n const pendingRequest = this.pendingRequests[xhrId];\n if (!pendingRequest) {\n return; // Maybe abortRequest was called...\n }\n\n const xhr = pendingRequest.xhr;\n if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\n pendingRequest.onHeadersReceived();\n delete pendingRequest.onHeadersReceived;\n }\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (!(xhrId in this.pendingRequests)) {\n // The XHR request might have been aborted in onHeadersReceived()\n // callback, in which case we should abort request.\n return;\n }\n\n delete this.pendingRequests[xhrId];\n\n // Success status == 0 can be on ftp, file and other protocols.\n if (xhr.status === 0 && this.isHttp) {\n pendingRequest.onError(xhr.status);\n return;\n }\n const xhrStatus = xhr.status || OK_RESPONSE;\n\n // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:\n // \"A server MAY ignore the Range header\". This means it's possible to\n // get a 200 rather than a 206 response from a range request.\n const ok_response_on_range_request =\n xhrStatus === OK_RESPONSE &&\n pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\n\n if (\n !ok_response_on_range_request &&\n xhrStatus !== pendingRequest.expectedStatus\n ) {\n pendingRequest.onError(xhr.status);\n return;\n }\n\n const chunk = getArrayBuffer(xhr);\n if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\n const rangeHeader = xhr.getResponseHeader(\"Content-Range\");\n const matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\n if (matches) {\n pendingRequest.onDone({\n begin: parseInt(matches[1], 10),\n chunk,\n });\n } else {\n warn(`Missing or invalid \"Content-Range\" header.`);\n pendingRequest.onError(0);\n }\n } else if (chunk) {\n pendingRequest.onDone({\n begin: 0,\n chunk,\n });\n } else {\n pendingRequest.onError(xhr.status);\n }\n }\n\n getRequestXhr(xhrId) {\n return this.pendingRequests[xhrId].xhr;\n }\n\n isPendingRequest(xhrId) {\n return xhrId in this.pendingRequests;\n }\n\n abortRequest(xhrId) {\n const xhr = this.pendingRequests[xhrId].xhr;\n delete this.pendingRequests[xhrId];\n xhr.abort();\n }\n}\n\n/** @implements {IPDFStream} */\nclass PDFNetworkStream {\n constructor(source) {\n this._source = source;\n this._manager = new NetworkManager(source);\n this._rangeChunkSize = source.rangeChunkSize;\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n _onRangeRequestReaderClosed(reader) {\n const i = this._rangeRequestReaders.indexOf(reader);\n if (i >= 0) {\n this._rangeRequestReaders.splice(i, 1);\n }\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFNetworkStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFNetworkStreamFullRequestReader(\n this._manager,\n this._source\n );\n return this._fullRequestReader;\n }\n\n getRangeReader(begin, end) {\n const reader = new PDFNetworkStreamRangeRequestReader(\n this._manager,\n begin,\n end\n );\n reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\n this._rangeRequestReaders.push(reader);\n return reader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\n/** @implements {IPDFStreamReader} */\nclass PDFNetworkStreamFullRequestReader {\n constructor(manager, source) {\n this._manager = manager;\n\n this._url = source.url;\n this._fullRequestId = manager.request({\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this),\n });\n this._headersCapability = Promise.withResolvers();\n this._disableRange = source.disableRange || false;\n this._contentLength = source.length; // Optional\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = false;\n this._isRangeSupported = false;\n\n this._cachedChunks = [];\n this._requests = [];\n this._done = false;\n this._storedError = undefined;\n this._filename = null;\n\n this.onProgress = null;\n }\n\n _onHeadersReceived() {\n const fullRequestXhrId = this._fullRequestId;\n const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\n\n this._manager._responseOrigin = getResponseOrigin(\n fullRequestXhr.responseURL\n );\n\n const rawResponseHeaders = fullRequestXhr.getAllResponseHeaders();\n const responseHeaders = new Headers(\n rawResponseHeaders\n ? rawResponseHeaders\n .trimStart()\n .replace(/[^\\S ]+$/, \"\") // Not `trimEnd`, to keep regular spaces.\n .split(/[\\r\\n]+/)\n .map(x => {\n const [key, ...val] = x.split(\": \");\n return [key, val.join(\": \")];\n })\n : []\n );\n\n const { allowRangeRequests, suggestedLength } =\n validateRangeRequestCapabilities({\n responseHeaders,\n isHttp: this._manager.isHttp,\n rangeChunkSize: this._rangeChunkSize,\n disableRange: this._disableRange,\n });\n\n if (allowRangeRequests) {\n this._isRangeSupported = true;\n }\n // Setting right content length.\n this._contentLength = suggestedLength || this._contentLength;\n\n this._filename = extractFilenameFromHeader(responseHeaders);\n\n if (this._isRangeSupported) {\n // NOTE: by cancelling the full request, and then issuing range\n // requests, there will be an issue for sites where you can only\n // request the pdf once. However, if this is the case, then the\n // server should not be returning that it can support range requests.\n this._manager.abortRequest(fullRequestXhrId);\n }\n\n this._headersCapability.resolve();\n }\n\n _onDone(data) {\n if (data) {\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: data.chunk, done: false });\n } else {\n this._cachedChunks.push(data.chunk);\n }\n }\n this._done = true;\n if (this._cachedChunks.length > 0) {\n return;\n }\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n }\n\n _onError(status) {\n this._storedError = createResponseError(status, this._url);\n this._headersCapability.reject(this._storedError);\n for (const requestCapability of this._requests) {\n requestCapability.reject(this._storedError);\n }\n this._requests.length = 0;\n this._cachedChunks.length = 0;\n }\n\n _onProgress(evt) {\n this.onProgress?.({\n loaded: evt.loaded,\n total: evt.lengthComputable ? evt.total : this._contentLength,\n });\n }\n\n get filename() {\n return this._filename;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n async read() {\n await this._headersCapability.promise;\n\n if (this._storedError) {\n throw this._storedError;\n }\n if (this._cachedChunks.length > 0) {\n const chunk = this._cachedChunks.shift();\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n this._headersCapability.reject(reason);\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n if (this._manager.isPendingRequest(this._fullRequestId)) {\n this._manager.abortRequest(this._fullRequestId);\n }\n this._fullRequestReader = null;\n }\n}\n\n/** @implements {IPDFStreamRangeReader} */\nclass PDFNetworkStreamRangeRequestReader {\n constructor(manager, begin, end) {\n this._manager = manager;\n\n this._url = manager.url;\n this._requestId = manager.request({\n begin,\n end,\n onHeadersReceived: this._onHeadersReceived.bind(this),\n onDone: this._onDone.bind(this),\n onError: this._onError.bind(this),\n onProgress: this._onProgress.bind(this),\n });\n this._requests = [];\n this._queuedChunk = null;\n this._done = false;\n this._storedError = undefined;\n\n this.onProgress = null;\n this.onClosed = null;\n }\n\n _onHeadersReceived() {\n const responseOrigin = getResponseOrigin(\n this._manager.getRequestXhr(this._requestId)?.responseURL\n );\n\n if (responseOrigin !== this._manager._responseOrigin) {\n this._storedError = new Error(\n `Expected range response-origin \"${responseOrigin}\" to match \"${this._manager._responseOrigin}\".`\n );\n this._onError(0);\n }\n }\n\n _close() {\n this.onClosed?.(this);\n }\n\n _onDone(data) {\n const chunk = data.chunk;\n if (this._requests.length > 0) {\n const requestCapability = this._requests.shift();\n requestCapability.resolve({ value: chunk, done: false });\n } else {\n this._queuedChunk = chunk;\n }\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n this._close();\n }\n\n _onError(status) {\n this._storedError ??= createResponseError(status, this._url);\n for (const requestCapability of this._requests) {\n requestCapability.reject(this._storedError);\n }\n this._requests.length = 0;\n this._queuedChunk = null;\n }\n\n _onProgress(evt) {\n if (!this.isStreamingSupported) {\n this.onProgress?.({ loaded: evt.loaded });\n }\n }\n\n get isStreamingSupported() {\n return false;\n }\n\n async read() {\n if (this._storedError) {\n throw this._storedError;\n }\n if (this._queuedChunk !== null) {\n const chunk = this._queuedChunk;\n this._queuedChunk = null;\n return { value: chunk, done: false };\n }\n if (this._done) {\n return { value: undefined, done: true };\n }\n const requestCapability = Promise.withResolvers();\n this._requests.push(requestCapability);\n return requestCapability.promise;\n }\n\n cancel(reason) {\n this._done = true;\n for (const requestCapability of this._requests) {\n requestCapability.resolve({ value: undefined, done: true });\n }\n this._requests.length = 0;\n if (this._manager.isPendingRequest(this._requestId)) {\n this._manager.abortRequest(this._requestId);\n }\n this._close();\n }\n}\n\nexport { PDFNetworkStream };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\nimport { AbortException, assert } from \"../shared/util.js\";\nimport { createResponseError } from \"./network_utils.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\n 'Module \"./node_stream.js\" shall not be used with MOZCENTRAL builds.'\n );\n}\n\nconst urlRegex = /^[a-z][a-z0-9\\-+.]+:/i;\n\nfunction parseUrlOrPath(sourceUrl) {\n if (urlRegex.test(sourceUrl)) {\n return new URL(sourceUrl);\n }\n const url = process.getBuiltinModule(\"url\");\n return new URL(url.pathToFileURL(sourceUrl));\n}\n\nclass PDFNodeStream {\n constructor(source) {\n this.source = source;\n this.url = parseUrlOrPath(source.url);\n assert(\n this.url.protocol === \"file:\",\n \"PDFNodeStream only supports file:// URLs.\"\n );\n\n this._fullRequestReader = null;\n this._rangeRequestReaders = [];\n }\n\n get _progressiveDataLength() {\n return this._fullRequestReader?._loaded ?? 0;\n }\n\n getFullReader() {\n assert(\n !this._fullRequestReader,\n \"PDFNodeStream.getFullReader can only be called once.\"\n );\n this._fullRequestReader = new PDFNodeStreamFsFullReader(this);\n return this._fullRequestReader;\n }\n\n getRangeReader(start, end) {\n if (end <= this._progressiveDataLength) {\n return null;\n }\n const rangeReader = new PDFNodeStreamFsRangeReader(this, start, end);\n this._rangeRequestReaders.push(rangeReader);\n return rangeReader;\n }\n\n cancelAllRequests(reason) {\n this._fullRequestReader?.cancel(reason);\n\n for (const reader of this._rangeRequestReaders.slice(0)) {\n reader.cancel(reason);\n }\n }\n}\n\nclass PDFNodeStreamFsFullReader {\n constructor(stream) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n const source = stream.source;\n this._contentLength = source.length; // optional\n this._loaded = 0;\n this._filename = null;\n\n this._disableRange = source.disableRange || false;\n this._rangeChunkSize = source.rangeChunkSize;\n if (!this._rangeChunkSize && !this._disableRange) {\n this._disableRange = true;\n }\n\n this._isStreamingSupported = !source.disableStream;\n this._isRangeSupported = !source.disableRange;\n\n this._readableStream = null;\n this._readCapability = Promise.withResolvers();\n this._headersCapability = Promise.withResolvers();\n\n const fs = process.getBuiltinModule(\"fs\");\n fs.promises.lstat(this._url).then(\n stat => {\n // Setting right content length.\n this._contentLength = stat.size;\n\n this._setReadableStream(fs.createReadStream(this._url));\n this._headersCapability.resolve();\n },\n error => {\n if (error.code === \"ENOENT\") {\n error = createResponseError(/* status = */ 0, this._url.href);\n }\n this._storedError = error;\n this._headersCapability.reject(error);\n }\n );\n }\n\n get headersReady() {\n return this._headersCapability.promise;\n }\n\n get filename() {\n return this._filename;\n }\n\n get contentLength() {\n return this._contentLength;\n }\n\n get isRangeSupported() {\n return this._isRangeSupported;\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n if (this._done) {\n return { value: undefined, done: true };\n }\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n if (chunk === null) {\n this._readCapability = Promise.withResolvers();\n return this.read();\n }\n this._loaded += chunk.length;\n this.onProgress?.({\n loaded: this._loaded,\n total: this._contentLength,\n });\n\n // Ensure that `read()` method returns ArrayBuffer.\n const buffer = new Uint8Array(chunk).buffer;\n return { value: buffer, done: false };\n }\n\n cancel(reason) {\n // Call `this._error()` method when cancel is called\n // before _readableStream is set.\n if (!this._readableStream) {\n this._error(reason);\n return;\n }\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n\n readableStream.on(\"end\", () => {\n // Destroy readable to minimize resource usage.\n readableStream.destroy();\n this._done = true;\n this._readCapability.resolve();\n });\n\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n // We need to stop reading when range is supported and streaming is\n // disabled.\n if (!this._isStreamingSupported && this._isRangeSupported) {\n this._error(new AbortException(\"streaming is disabled\"));\n }\n\n // Destroy ReadableStream if already in errored state.\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n}\n\nclass PDFNodeStreamFsRangeReader {\n constructor(stream, start, end) {\n this._url = stream.url;\n this._done = false;\n this._storedError = null;\n this.onProgress = null;\n this._loaded = 0;\n this._readableStream = null;\n this._readCapability = Promise.withResolvers();\n const source = stream.source;\n this._isStreamingSupported = !source.disableStream;\n\n const fs = process.getBuiltinModule(\"fs\");\n this._setReadableStream(\n fs.createReadStream(this._url, { start, end: end - 1 })\n );\n }\n\n get isStreamingSupported() {\n return this._isStreamingSupported;\n }\n\n async read() {\n await this._readCapability.promise;\n if (this._done) {\n return { value: undefined, done: true };\n }\n if (this._storedError) {\n throw this._storedError;\n }\n\n const chunk = this._readableStream.read();\n if (chunk === null) {\n this._readCapability = Promise.withResolvers();\n return this.read();\n }\n this._loaded += chunk.length;\n this.onProgress?.({ loaded: this._loaded });\n\n // Ensure that `read()` method returns ArrayBuffer.\n const buffer = new Uint8Array(chunk).buffer;\n return { value: buffer, done: false };\n }\n\n cancel(reason) {\n // Call `this._error()` method when cancel is called\n // before _readableStream is set.\n if (!this._readableStream) {\n this._error(reason);\n return;\n }\n this._readableStream.destroy(reason);\n }\n\n _error(reason) {\n this._storedError = reason;\n this._readCapability.resolve();\n }\n\n _setReadableStream(readableStream) {\n this._readableStream = readableStream;\n readableStream.on(\"readable\", () => {\n this._readCapability.resolve();\n });\n\n readableStream.on(\"end\", () => {\n // Destroy readableStream to minimize resource usage.\n readableStream.destroy();\n this._done = true;\n this._readCapability.resolve();\n });\n\n readableStream.on(\"error\", reason => {\n this._error(reason);\n });\n\n // Destroy readableStream if already in errored state.\n if (this._storedError) {\n this._readableStream.destroy(this._storedError);\n }\n }\n}\n\nexport { PDFNodeStream };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nimport {\n AbortException,\n FeatureTest,\n shadow,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport { OutputScale, setLayerDimensions } from \"./display_utils.js\";\n\n/**\n * @typedef {Object} TextLayerParameters\n * @property {ReadableStream | TextContent} textContentSource - Text content to\n * render, i.e. the value returned by the page's `streamTextContent` or\n * `getTextContent` method.\n * @property {HTMLElement} container - The DOM node that will contain the text\n * runs.\n * @property {PageViewport} viewport - The target viewport to properly layout\n * the text runs.\n */\n\n/**\n * @typedef {Object} TextLayerUpdateParameters\n * @property {PageViewport} viewport - The target viewport to properly layout\n * the text runs.\n * @property {function} [onBefore] - Callback invoked before the textLayer is\n * updated in the DOM.\n */\n\nconst MAX_TEXT_DIVS_TO_RENDER = 100000;\nconst DEFAULT_FONT_SIZE = 30;\n\nclass TextLayer {\n #capability = Promise.withResolvers();\n\n #container = null;\n\n #disableProcessItems = false;\n\n #fontInspectorEnabled = !!globalThis.FontInspector?.enabled;\n\n #lang = null;\n\n #layoutTextParams = null;\n\n #pageHeight = 0;\n\n #pageWidth = 0;\n\n #reader = null;\n\n #rootContainer = null;\n\n #rotation = 0;\n\n #scale = 0;\n\n #styleCache = Object.create(null);\n\n #textContentItemsStr = [];\n\n #textContentSource = null;\n\n #textDivs = [];\n\n #textDivProperties = new WeakMap();\n\n #transform = null;\n\n static #ascentCache = new Map();\n\n static #canvasContexts = new Map();\n\n static #canvasCtxFonts = new WeakMap();\n\n static #minFontSize = null;\n\n static #pendingTextLayers = new Set();\n\n /**\n * @param {TextLayerParameters} options\n */\n constructor({ textContentSource, container, viewport }) {\n if (textContentSource instanceof ReadableStream) {\n this.#textContentSource = textContentSource;\n } else if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n typeof textContentSource === \"object\"\n ) {\n this.#textContentSource = new ReadableStream({\n start(controller) {\n controller.enqueue(textContentSource);\n controller.close();\n },\n });\n } else {\n throw new Error('No \"textContentSource\" parameter specified.');\n }\n this.#container = this.#rootContainer = container;\n\n this.#scale = viewport.scale * OutputScale.pixelRatio;\n this.#rotation = viewport.rotation;\n this.#layoutTextParams = {\n div: null,\n properties: null,\n ctx: null,\n };\n const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims;\n this.#transform = [1, 0, 0, -1, -pageX, pageY + pageHeight];\n this.#pageWidth = pageWidth;\n this.#pageHeight = pageHeight;\n\n TextLayer.#ensureMinFontSizeComputed();\n\n setLayerDimensions(container, viewport);\n\n // Always clean-up the temporary canvas once rendering is no longer pending.\n this.#capability.promise\n .finally(() => {\n TextLayer.#pendingTextLayers.delete(this);\n this.#layoutTextParams = null;\n this.#styleCache = null;\n })\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"pageWidth\", {\n get() {\n return this.#pageWidth;\n },\n });\n Object.defineProperty(this, \"pageHeight\", {\n get() {\n return this.#pageHeight;\n },\n });\n }\n }\n\n static get fontFamilyMap() {\n const { isWindows, isFirefox } = FeatureTest.platform;\n return shadow(\n this,\n \"fontFamilyMap\",\n new Map([\n [\n \"sans-serif\",\n `${isWindows && isFirefox ? \"Calibri, \" : \"\"}sans-serif`,\n ],\n [\n \"monospace\",\n `${isWindows && isFirefox ? \"Lucida Console, \" : \"\"}monospace`,\n ],\n ])\n );\n }\n\n /**\n * Render the textLayer.\n * @returns {Promise}\n */\n render() {\n const pump = () => {\n this.#reader.read().then(({ value, done }) => {\n if (done) {\n this.#capability.resolve();\n return;\n }\n this.#lang ??= value.lang;\n Object.assign(this.#styleCache, value.styles);\n this.#processItems(value.items);\n pump();\n }, this.#capability.reject);\n };\n this.#reader = this.#textContentSource.getReader();\n TextLayer.#pendingTextLayers.add(this);\n pump();\n\n return this.#capability.promise;\n }\n\n /**\n * Update a previously rendered textLayer, if necessary.\n * @param {TextLayerUpdateParameters} options\n * @returns {undefined}\n */\n update({ viewport, onBefore = null }) {\n const scale = viewport.scale * OutputScale.pixelRatio;\n const rotation = viewport.rotation;\n\n if (rotation !== this.#rotation) {\n onBefore?.();\n this.#rotation = rotation;\n setLayerDimensions(this.#rootContainer, { rotation });\n }\n\n if (scale !== this.#scale) {\n onBefore?.();\n this.#scale = scale;\n const params = {\n div: null,\n properties: null,\n ctx: TextLayer.#getCtx(this.#lang),\n };\n for (const div of this.#textDivs) {\n params.properties = this.#textDivProperties.get(div);\n params.div = div;\n this.#layout(params);\n }\n }\n }\n\n /**\n * Cancel rendering of the textLayer.\n * @returns {undefined}\n */\n cancel() {\n const abortEx = new AbortException(\"TextLayer task cancelled.\");\n\n this.#reader?.cancel(abortEx).catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n this.#reader = null;\n\n this.#capability.reject(abortEx);\n }\n\n /**\n * @type {Array} HTML elements that correspond to the text items\n * of the textContent input.\n * This is output and will initially be set to an empty array.\n */\n get textDivs() {\n return this.#textDivs;\n }\n\n /**\n * @type {Array} Strings that correspond to the `str` property of\n * the text items of the textContent input.\n * This is output and will initially be set to an empty array\n */\n get textContentItemsStr() {\n return this.#textContentItemsStr;\n }\n\n #processItems(items) {\n if (this.#disableProcessItems) {\n return;\n }\n this.#layoutTextParams.ctx ??= TextLayer.#getCtx(this.#lang);\n\n const textDivs = this.#textDivs,\n textContentItemsStr = this.#textContentItemsStr;\n\n for (const item of items) {\n // No point in rendering many divs as it would make the browser\n // unusable even after the divs are rendered.\n if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {\n warn(\"Ignoring additional textDivs for performance reasons.\");\n\n this.#disableProcessItems = true; // Avoid multiple warnings for one page.\n return;\n }\n\n if (item.str === undefined) {\n if (\n item.type === \"beginMarkedContentProps\" ||\n item.type === \"beginMarkedContent\"\n ) {\n const parent = this.#container;\n this.#container = document.createElement(\"span\");\n this.#container.classList.add(\"markedContent\");\n if (item.id !== null) {\n this.#container.setAttribute(\"id\", `${item.id}`);\n }\n parent.append(this.#container);\n } else if (item.type === \"endMarkedContent\") {\n this.#container = this.#container.parentNode;\n }\n continue;\n }\n textContentItemsStr.push(item.str);\n this.#appendText(item);\n }\n }\n\n #appendText(geom) {\n // Initialize all used properties to keep the caches monomorphic.\n const textDiv = document.createElement(\"span\");\n const textDivProperties = {\n angle: 0,\n canvasWidth: 0,\n hasText: geom.str !== \"\",\n hasEOL: geom.hasEOL,\n fontSize: 0,\n };\n this.#textDivs.push(textDiv);\n\n const tx = Util.transform(this.#transform, geom.transform);\n let angle = Math.atan2(tx[1], tx[0]);\n const style = this.#styleCache[geom.fontName];\n if (style.vertical) {\n angle += Math.PI / 2;\n }\n\n let fontFamily =\n (this.#fontInspectorEnabled && style.fontSubstitution) ||\n style.fontFamily;\n\n // Workaround for bug 1922063.\n fontFamily = TextLayer.fontFamilyMap.get(fontFamily) || fontFamily;\n const fontHeight = Math.hypot(tx[2], tx[3]);\n const fontAscent =\n fontHeight * TextLayer.#getAscent(fontFamily, style, this.#lang);\n\n let left, top;\n if (angle === 0) {\n left = tx[4];\n top = tx[5] - fontAscent;\n } else {\n left = tx[4] + fontAscent * Math.sin(angle);\n top = tx[5] - fontAscent * Math.cos(angle);\n }\n\n const scaleFactorStr = \"calc(var(--total-scale-factor) *\";\n const divStyle = textDiv.style;\n // Setting the style properties individually, rather than all at once,\n // should be OK since the `textDiv` isn't appended to the document yet.\n if (this.#container === this.#rootContainer) {\n divStyle.left = `${((100 * left) / this.#pageWidth).toFixed(2)}%`;\n divStyle.top = `${((100 * top) / this.#pageHeight).toFixed(2)}%`;\n } else {\n // We're in a marked content span, hence we can't use percents.\n divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;\n divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;\n }\n // We multiply the font size by #minFontSize, and then #layout will\n // scale the element by 1/#minFontSize. This allows us to effectively\n // ignore the minimum font size enforced by the browser, so that the text\n // layer s can always match the size of the text in the canvas.\n divStyle.fontSize = `${scaleFactorStr}${(TextLayer.#minFontSize * fontHeight).toFixed(2)}px)`;\n divStyle.fontFamily = fontFamily;\n\n textDivProperties.fontSize = fontHeight;\n\n // Keeps screen readers from pausing on every new text span.\n textDiv.setAttribute(\"role\", \"presentation\");\n\n textDiv.textContent = geom.str;\n // geom.dir may be 'ttb' for vertical texts.\n textDiv.dir = geom.dir;\n\n // `fontName` is only used by the FontInspector, and we only use `dataset`\n // here to make the font name available in the debugger.\n if (this.#fontInspectorEnabled) {\n textDiv.dataset.fontName =\n style.fontSubstitutionLoadedName || geom.fontName;\n }\n if (angle !== 0) {\n textDivProperties.angle = angle * (180 / Math.PI);\n }\n // We don't bother scaling single-char text divs, because it has very\n // little effect on text highlighting. This makes scrolling on docs with\n // lots of such divs a lot faster.\n let shouldScaleText = false;\n if (geom.str.length > 1) {\n shouldScaleText = true;\n } else if (geom.str !== \" \" && geom.transform[0] !== geom.transform[3]) {\n const absScaleX = Math.abs(geom.transform[0]),\n absScaleY = Math.abs(geom.transform[3]);\n // When the horizontal/vertical scaling differs significantly, also scale\n // even single-char text to improve highlighting (fixes issue11713.pdf).\n if (\n absScaleX !== absScaleY &&\n Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5\n ) {\n shouldScaleText = true;\n }\n }\n if (shouldScaleText) {\n textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width;\n }\n this.#textDivProperties.set(textDiv, textDivProperties);\n\n // Finally, layout and append the text to the DOM.\n this.#layoutTextParams.div = textDiv;\n this.#layoutTextParams.properties = textDivProperties;\n this.#layout(this.#layoutTextParams);\n\n if (textDivProperties.hasText) {\n this.#container.append(textDiv);\n }\n if (textDivProperties.hasEOL) {\n const br = document.createElement(\"br\");\n br.setAttribute(\"role\", \"presentation\");\n this.#container.append(br);\n }\n }\n\n #layout(params) {\n const { div, properties, ctx } = params;\n const { style } = div;\n\n let transform = \"\";\n if (TextLayer.#minFontSize > 1) {\n transform = `scale(${1 / TextLayer.#minFontSize})`;\n }\n\n if (properties.canvasWidth !== 0 && properties.hasText) {\n const { fontFamily } = style;\n const { canvasWidth, fontSize } = properties;\n\n TextLayer.#ensureCtxFont(ctx, fontSize * this.#scale, fontFamily);\n // Only measure the width for multi-char text divs, see `appendText`.\n const { width } = ctx.measureText(div.textContent);\n\n if (width > 0) {\n transform = `scaleX(${(canvasWidth * this.#scale) / width}) ${transform}`;\n }\n }\n if (properties.angle !== 0) {\n transform = `rotate(${properties.angle}deg) ${transform}`;\n }\n if (transform.length > 0) {\n style.transform = transform;\n }\n }\n\n /**\n * Clean-up global textLayer data.\n * @returns {undefined}\n */\n static cleanup() {\n if (this.#pendingTextLayers.size > 0) {\n return;\n }\n this.#ascentCache.clear();\n\n for (const { canvas } of this.#canvasContexts.values()) {\n canvas.remove();\n }\n this.#canvasContexts.clear();\n }\n\n static #getCtx(lang = null) {\n let ctx = this.#canvasContexts.get((lang ||= \"\"));\n if (!ctx) {\n // We don't use an OffscreenCanvas here because we use serif/sans serif\n // fonts with it and they depends on the locale.\n // In Firefox, the element get a lang attribute that depends on\n // what Fluent returns for the locale and the OffscreenCanvas uses\n // the OS locale.\n // Those two locales can be different and consequently the used fonts will\n // be different (see bug 1869001).\n // Ideally, we should use in the text layer the fonts we've in the pdf (or\n // their replacements when they aren't embedded) and then we can use an\n // OffscreenCanvas.\n const canvas = document.createElement(\"canvas\");\n canvas.className = \"hiddenCanvasElement\";\n canvas.lang = lang;\n document.body.append(canvas);\n ctx = canvas.getContext(\"2d\", {\n alpha: false,\n willReadFrequently: true,\n });\n this.#canvasContexts.set(lang, ctx);\n\n // Also, initialize state for the `#ensureCtxFont` method.\n this.#canvasCtxFonts.set(ctx, { size: 0, family: \"\" });\n }\n return ctx;\n }\n\n static #ensureCtxFont(ctx, size, family) {\n const cached = this.#canvasCtxFonts.get(ctx);\n if (size === cached.size && family === cached.family) {\n return; // The font is already set.\n }\n ctx.font = `${size}px ${family}`;\n cached.size = size;\n cached.family = family;\n }\n\n /**\n * Compute the minimum font size enforced by the browser.\n */\n static #ensureMinFontSizeComputed() {\n if (this.#minFontSize !== null) {\n return;\n }\n const div = document.createElement(\"div\");\n div.style.opacity = 0;\n div.style.lineHeight = 1;\n div.style.fontSize = \"1px\";\n div.style.position = \"absolute\";\n div.textContent = \"X\";\n document.body.append(div);\n // In `display:block` elements contain a single line of text,\n // the height matches the line height (which, when set to 1,\n // matches the actual font size).\n this.#minFontSize = div.getBoundingClientRect().height;\n div.remove();\n }\n\n static #getAscent(fontFamily, style, lang) {\n const cachedAscent = this.#ascentCache.get(fontFamily);\n if (cachedAscent) {\n return cachedAscent;\n }\n const ctx = this.#getCtx(lang);\n\n ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;\n this.#ensureCtxFont(ctx, DEFAULT_FONT_SIZE, fontFamily);\n const metrics = ctx.measureText(\"\");\n\n const ascent = metrics.fontBoundingBoxAscent;\n const descent = Math.abs(metrics.fontBoundingBoxDescent);\n\n ctx.canvas.width = ctx.canvas.height = 0;\n let ratio = 0.8; // DEFAULT_FONT_ASCENT\n\n if (ascent) {\n ratio = ascent / (ascent + descent);\n } else {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n FeatureTest.platform.isFirefox\n ) {\n warn(\n \"Enable the `dom.textMetrics.fontBoundingBox.enabled` preference \" +\n \"in `about:config` to improve TextLayer rendering.\"\n );\n }\n if (style.ascent) {\n ratio = style.ascent;\n } else if (style.descent) {\n ratio = 1 + style.descent;\n }\n }\n\n this.#ascentCache.set(fontFamily, ratio);\n return ratio;\n }\n}\n\nexport { TextLayer };\n","/* Copyright 2021 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./api\").TextContent} TextContent */\n\nclass XfaText {\n /**\n * Walk an XFA tree and create an array of text nodes that is compatible\n * with a regular PDFs TextContent. Currently, only TextItem.str is supported,\n * all other fields and styles haven't been implemented.\n *\n * @param {Object} xfa - An XFA fake DOM object.\n *\n * @returns {TextContent}\n */\n static textContent(xfa) {\n const items = [];\n const output = {\n items,\n styles: Object.create(null),\n };\n function walk(node) {\n if (!node) {\n return;\n }\n let str = null;\n const name = node.name;\n if (name === \"#text\") {\n str = node.value;\n } else if (!XfaText.shouldBuildText(name)) {\n return;\n } else if (node?.attributes?.textContent) {\n str = node.attributes.textContent;\n } else if (node.value) {\n str = node.value;\n }\n if (str !== null) {\n items.push({\n str,\n });\n }\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n walk(child);\n }\n }\n walk(xfa);\n return output;\n }\n\n /**\n * @param {string} name - DOM node name. (lower case)\n *\n * @returns {boolean} true if the DOM node should have a corresponding text\n * node.\n */\n static shouldBuildText(name) {\n return !(\n name === \"textarea\" ||\n name === \"input\" ||\n name === \"option\" ||\n name === \"select\"\n );\n }\n}\n\nexport { XfaText };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n _isValidExplicitDest,\n AbortException,\n AnnotationMode,\n assert,\n FeatureTest,\n getVerbosityLevel,\n info,\n isNodeJS,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n AnnotationStorage,\n PrintAnnotationStorage,\n SerializableEmpty,\n} from \"./annotation_storage.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n isDataScheme,\n isValidFetchUrl,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { MessageHandler, wrapReason } from \"../shared/message_handler.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeFilterFactory,\n NodeStandardFontDataFactory,\n NodeWasmFactory,\n} from \"display-node_utils\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { DOMCanvasFactory } from \"./canvas_factory.js\";\nimport { DOMCMapReaderFactory } from \"display-cmap_reader_factory\";\nimport { DOMFilterFactory } from \"./filter_factory.js\";\nimport { DOMStandardFontDataFactory } from \"display-standard_fontdata_factory\";\nimport { DOMWasmFactory } from \"display-wasm_factory\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { PDFFetchStream } from \"display-fetch_stream\";\nimport { PDFNetworkStream } from \"display-network\";\nimport { PDFNodeStream } from \"display-node_stream\";\nimport { TextLayer } from \"./text_layer.js\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string | URL} [url] - The URL of the PDF.\n * @property {TypedArray | ArrayBuffer | Array | string} [data] -\n * Binary PDF data.\n * Use TypedArrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n *\n * NOTE: If TypedArrays are used they will generally be transferred to the\n * worker-thread. This will help reduce main-thread memory usage, however\n * it will take ownership of the TypedArrays.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not. The default value is `true`.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files.\n * The default value is {DOMCMapReaderFactory}.\n * @property {string} [iccUrl] - The URL where the predefined ICC profiles are\n * located. Include the trailing slash.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files.\n * The default value is {DOMStandardFontDataFactory}.\n * @property {string} [wasmUrl] - The URL where the wasm files are located.\n * Include the trailing slash.\n * @property {Object} [WasmFactory] - The factory that will be used\n * when reading the wasm files.\n * The default value is {DOMWasmFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory`, `StandardFontDataFactory`, and `WasmFactory`\n * options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [useWasm] - Attempt to use WebAssembly in order to\n * improve e.g. image decoding performance.\n * The default value is `true`.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of PDF functions.\n * The default value is `true`.\n * @property {boolean} [isOffscreenCanvasSupported] - Determines if we can use\n * `OffscreenCanvas` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [isImageDecoderSupported] - Determines if we can use\n * `ImageDecoder` in the worker. Primarily used to improve performance of\n * image conversion/rendering.\n * The default value is `true` in web environments and `false` in Node.js.\n *\n * NOTE: Also temporarily disabled in Chromium browsers, until we no longer\n * support the affected browser versions, because of various bugs:\n *\n * - Crashes when using the BMP decoder with huge images, e.g. issue6741.pdf;\n * see https://issues.chromium.org/issues/374807001\n *\n * - Broken images when using the JPEG decoder with images that have custom\n * colour profiles, e.g. GitHub discussion 19030;\n * see https://issues.chromium.org/issues/378869810\n *\n * @property {number} [canvasMaxAreaInBytes] - The integer value is used to\n * know when an image must be resized (uses `OffscreenCanvas` in the worker).\n * If it's -1 then a possibly slow algorithm is used to guess the max value.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n * @property {Object} [CanvasFactory] - The factory that will be used when\n * creating canvases. The default value is {DOMCanvasFactory}.\n * @property {Object} [FilterFactory] - The factory that will be used to\n * create SVG filters when rendering some images on the main canvas.\n * The default value is {DOMFilterFactory}.\n * @property {boolean} [enableHWA] - Enables hardware acceleration for\n * rendering. The default value is `false`.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string | URL | TypedArray | ArrayBuffer | DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src = {}) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (typeof src === \"string\" || src instanceof URL) {\n src = { url: src };\n } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) {\n src = { data: src };\n }\n }\n const task = new PDFDocumentLoadingTask();\n const { docId } = task;\n\n const url = src.url ? getUrlProp(src.url) : null;\n const data = src.data ? getDataProp(src.data) : null;\n const httpHeaders = src.httpHeaders || null;\n const withCredentials = src.withCredentials === true;\n const password = src.password ?? null;\n const rangeTransport =\n src.range instanceof PDFDataRangeTransport ? src.range : null;\n const rangeChunkSize =\n Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0\n ? src.rangeChunkSize\n : DEFAULT_RANGE_CHUNK_SIZE;\n let worker = src.worker instanceof PDFWorker ? src.worker : null;\n const verbosity = src.verbosity;\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n const docBaseUrl =\n typeof src.docBaseUrl === \"string\" && !isDataScheme(src.docBaseUrl)\n ? src.docBaseUrl\n : null;\n const cMapUrl = getFactoryUrlProp(src.cMapUrl);\n const cMapPacked = src.cMapPacked !== false;\n const CMapReaderFactory =\n src.CMapReaderFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory);\n const iccUrl = getFactoryUrlProp(src.iccUrl);\n const standardFontDataUrl = getFactoryUrlProp(src.standardFontDataUrl);\n const StandardFontDataFactory =\n src.StandardFontDataFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory);\n const wasmUrl = getFactoryUrlProp(src.wasmUrl);\n const WasmFactory =\n src.WasmFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeWasmFactory\n : DOMWasmFactory);\n const ignoreErrors = src.stopAtErrors !== true;\n const maxImageSize =\n Number.isInteger(src.maxImageSize) && src.maxImageSize > -1\n ? src.maxImageSize\n : -1;\n const isEvalSupported = src.isEvalSupported !== false;\n const isOffscreenCanvasSupported =\n typeof src.isOffscreenCanvasSupported === \"boolean\"\n ? src.isOffscreenCanvasSupported\n : !isNodeJS;\n const isImageDecoderSupported =\n // eslint-disable-next-line no-nested-ternary\n typeof src.isImageDecoderSupported === \"boolean\"\n ? src.isImageDecoderSupported\n : // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? true\n : typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n ? false\n : !isNodeJS && (FeatureTest.platform.isFirefox || !globalThis.chrome);\n const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)\n ? src.canvasMaxAreaInBytes\n : -1;\n const disableFontFace =\n typeof src.disableFontFace === \"boolean\" ? src.disableFontFace : isNodeJS;\n const fontExtraProperties = src.fontExtraProperties === true;\n const enableXfa = src.enableXfa === true;\n const ownerDocument = src.ownerDocument || globalThis.document;\n const disableRange = src.disableRange === true;\n const disableStream = src.disableStream === true;\n const disableAutoFetch = src.disableAutoFetch === true;\n const pdfBug = src.pdfBug === true;\n const CanvasFactory =\n src.CanvasFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory);\n const FilterFactory =\n src.FilterFactory ||\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\") && isNodeJS\n ? NodeFilterFactory\n : DOMFilterFactory);\n const enableHWA = src.enableHWA === true;\n const useWasm = src.useWasm !== false;\n\n // Parameters whose default values depend on other parameters.\n const length = rangeTransport ? rangeTransport.length : (src.length ?? NaN);\n const useSystemFonts =\n typeof src.useSystemFonts === \"boolean\"\n ? src.useSystemFonts\n : !isNodeJS && !disableFontFace;\n const useWorkerFetch =\n typeof src.useWorkerFetch === \"boolean\"\n ? src.useWorkerFetch\n : (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n !!(\n CMapReaderFactory === DOMCMapReaderFactory &&\n StandardFontDataFactory === DOMStandardFontDataFactory &&\n WasmFactory === DOMWasmFactory &&\n cMapUrl &&\n standardFontDataUrl &&\n wasmUrl &&\n isValidFetchUrl(cMapUrl, document.baseURI) &&\n isValidFetchUrl(standardFontDataUrl, document.baseURI) &&\n isValidFetchUrl(wasmUrl, document.baseURI)\n );\n\n // Parameters only intended for development/testing purposes.\n const styleElement =\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")\n ? src.styleElement\n : null;\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(verbosity);\n\n // Ensure that the various factories can be initialized, when necessary,\n // since the user may provide *custom* ones.\n const transportFactory = {\n canvasFactory: new CanvasFactory({ ownerDocument, enableHWA }),\n filterFactory: new FilterFactory({ docId, ownerDocument }),\n cMapReaderFactory:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n useWorkerFetch\n ? null\n : new CMapReaderFactory({ baseUrl: cMapUrl, isCompressed: cMapPacked }),\n standardFontDataFactory:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n useWorkerFetch\n ? null\n : new StandardFontDataFactory({ baseUrl: standardFontDataUrl }),\n wasmFactory:\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n useWorkerFetch\n ? null\n : new WasmFactory({ baseUrl: wasmUrl }),\n };\n\n if (!worker) {\n const workerParams = {\n verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n\n const docParams = {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n data,\n password,\n disableAutoFetch,\n rangeChunkSize,\n length,\n docBaseUrl,\n enableXfa,\n evaluatorOptions: {\n maxImageSize,\n disableFontFace,\n ignoreErrors,\n isEvalSupported,\n isOffscreenCanvasSupported,\n isImageDecoderSupported,\n canvasMaxAreaInBytes,\n fontExtraProperties,\n useSystemFonts,\n useWasm,\n useWorkerFetch,\n cMapUrl,\n iccUrl,\n standardFontDataUrl,\n wasmUrl,\n },\n };\n const transportParams = {\n ownerDocument,\n pdfBug,\n styleElement,\n loadingParams: {\n disableAutoFetch,\n enableXfa,\n },\n };\n\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n const workerIdPromise = worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n docParams,\n data ? [data.buffer] : null\n );\n\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(rangeTransport, {\n disableRange,\n disableStream,\n });\n } else if (!data) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: NetworkStream\");\n }\n if (!url) {\n throw new Error(\"getDocument - no `url` parameter provided.\");\n }\n let NetworkStream;\n\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n if (isValidFetchUrl(url)) {\n if (\n typeof fetch === \"undefined\" ||\n typeof Response === \"undefined\" ||\n !(\"body\" in Response.prototype)\n ) {\n throw new Error(\n \"getDocument - the Fetch API was disabled in Node.js, see `--no-experimental-fetch`.\"\n );\n }\n NetworkStream = PDFFetchStream;\n } else {\n NetworkStream = PDFNodeStream;\n }\n } else {\n NetworkStream = isValidFetchUrl(url)\n ? PDFFetchStream\n : PDFNetworkStream;\n }\n\n networkStream = new NetworkStream({\n url,\n length,\n httpHeaders,\n withCredentials,\n rangeChunkSize,\n disableRange,\n disableStream,\n });\n }\n\n return workerIdPromise.then(workerId => {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n const messageHandler = new MessageHandler(docId, workerId, worker.port);\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n transportParams,\n transportFactory\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n });\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\nfunction getUrlProp(val) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n return null; // The 'url' is unused with `PDFDataRangeTransport`.\n }\n if (val instanceof URL) {\n return val.href;\n }\n if (typeof val === \"string\") {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS\n ) {\n return val; // Use the url as-is in Node.js environments.\n }\n\n // The full path is required in the 'url' field.\n const url = URL.parse(val, window.location);\n if (url) {\n return url.href;\n }\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n}\n\nfunction getDataProp(val) {\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n val instanceof Buffer // eslint-disable-line no-undef\n ) {\n throw new Error(\n \"Please provide binary data as `Uint8Array`, rather than `Buffer`.\"\n );\n }\n if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) {\n // Use the data as-is when it's already a Uint8Array that completely\n // \"utilizes\" its underlying ArrayBuffer, to prevent any possible\n // issues when transferring it to the worker-thread.\n return val;\n }\n if (typeof val === \"string\") {\n return stringToBytes(val);\n }\n if (\n val instanceof ArrayBuffer ||\n ArrayBuffer.isView(val) ||\n (typeof val === \"object\" && !isNaN(val?.length))\n ) {\n return new Uint8Array(val);\n }\n throw new Error(\n \"Invalid PDF binary data: either TypedArray, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n}\n\nfunction getFactoryUrlProp(val) {\n if (typeof val !== \"string\") {\n return null;\n }\n if (val.endsWith(\"/\")) {\n return val;\n }\n throw new Error(`Invalid factory url: \"${val}\" must include trailing slash.`);\n}\n\nconst isRefProxy = v =>\n typeof v === \"object\" &&\n Number.isInteger(v?.num) &&\n v.num >= 0 &&\n Number.isInteger(v?.gen) &&\n v.gen >= 0;\n\nconst isNameProxy = v => typeof v === \"object\" && typeof v?.name === \"string\";\n\nconst isValidExplicitDest = _isValidExplicitDest.bind(\n null,\n /* validRef = */ isRefProxy,\n /* validName = */ isNameProxy\n);\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static #docId = 0;\n\n /**\n * @private\n */\n _capability = Promise.withResolvers();\n\n /**\n * @private\n */\n _transport = null;\n\n /**\n * @private\n */\n _worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n docId = `d${PDFDocumentLoadingTask.#docId++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n onProgress = null;\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n await this._transport?.destroy();\n } else {\n try {\n if (this._worker?.port) {\n this._worker._pendingDestroy = true;\n }\n await this._transport?.destroy();\n } catch (ex) {\n if (this._worker?.port) {\n delete this._worker._pendingDestroy;\n }\n throw ex;\n }\n }\n this._transport = null;\n\n this._worker?.destroy();\n this._worker = null;\n }\n\n /**\n * Attempt to fetch the raw data of the PDF document, when e.g.\n * - An exception was thrown during document initialization.\n * - An `onPassword` callback is delaying initialization.\n * @returns {Promise}\n */\n async getData() {\n return this._transport.getData();\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n *\n * NOTE: The TypedArrays passed to the constructor and relevant methods below\n * will generally be transferred to the worker-thread. This will help reduce\n * main-thread memory usage, however it will take ownership of the TypedArrays.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array|null} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = Promise.withResolvers();\n }\n\n /**\n * @param {function} listener\n */\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n /**\n * @param {function} listener\n */\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n /**\n * @param {number} begin\n * @param {Uint8Array|null} chunk\n */\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n /**\n * @param {number} loaded\n * @param {number|undefined} total\n */\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n /**\n * @param {Uint8Array|null} chunk\n */\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n /**\n * @param {number} begin\n * @param {number} end\n */\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // For testing purposes.\n Object.defineProperty(this, \"getNetworkStreamName\", {\n value: () => this._transport.getNetworkStreamName(),\n });\n Object.defineProperty(this, \"getXFADatasets\", {\n value: () => this._transport.getXFADatasets(),\n });\n Object.defineProperty(this, \"getXRefPrevValue\", {\n value: () => this._transport.getXRefPrevValue(),\n });\n Object.defineProperty(this, \"getStartXRefPos\", {\n value: () => this._transport.getStartXRefPos(),\n });\n Object.defineProperty(this, \"getAnnotArray\", {\n value: pageIndex => this._transport.getAnnotArray(pageIndex),\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {Object} The canvas factory instance.\n */\n get canvasFactory() {\n return this._transport.canvasFactory;\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to identify\n * the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise | null>} A promise that is resolved with all\n * information of the given named destination, or `null` when the named\n * destination is not present in the PDF file.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree.\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @typedef {Object} GetOptionalContentConfigParameters\n * @property {string} [intent] - Determines the optional content groups that\n * are visible by default; valid values are:\n * - 'display' (viewable groups).\n * - 'print' (printable groups).\n * - 'any' (all groups).\n * The default value is 'display'.\n */\n\n /**\n * @param {GetOptionalContentConfigParameters} [params] - Optional content\n * config parameters.\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig({ intent = \"display\" } = {}) {\n const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n return this._transport.getOptionalContentConfig(renderingIntent);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the raw data of the PDF document.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument() {\n return this._transport.saveDocument();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {number | null} The page number, if it's cached.\n */\n cachedPageNumber(ref) {\n return this._transport.cachedPageNumber(ref);\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are needed in the viewer.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @returns {Promise> | null>} A promise that is\n * resolved with an {Object} containing /AcroForm field data for the JS\n * sandbox, or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} [includeMarkedContent] - When true include marked\n * content items in the items array of TextContent. The default is `false`.\n * @property {boolean} [disableNormalization] - When true the text is *not*\n * normalized in the worker-thread. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of\n * {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n * items are included when includeMarkedContent is true.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n * @property {string | null} lang - The document /Lang attribute.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n * line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n * 'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n * 'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n * can be 'display' (viewable annotations), 'print' (printable annotations),\n * or 'any' (all annotations). The default value is 'display'.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {CanvasRenderingContext2D} canvasContext - A 2D context of a DOM\n * Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are rendered\n * onto the canvas, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {CanvasGradient | CanvasPattern | string} [background] - Background\n * to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n *\n * NOTE: This option may be partially, or completely, ignored when the\n * `pageColors`-option is used.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n * with user defined ones in order to improve readability in high contrast\n * mode.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n * @property {Map} [annotationCanvasMap] - Map some\n * annotation ids with canvases used to render them.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n * @property {boolean} [isEditing] - Render the page in editing mode.\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display', 'print',\n * or 'any'. The default value is 'display'.\n * @property {number} [annotationMode] Controls which annotations are included\n * in the operatorList, for annotations with appearance-data; the values from\n * {@link AnnotationMode} should be used. The following values are supported:\n * - `AnnotationMode.DISABLE`, which disables all annotations.\n * - `AnnotationMode.ENABLE`, which includes all possible annotations (thus\n * it also depends on the `intent`-option, see above).\n * - `AnnotationMode.ENABLE_FORMS`, which excludes annotations that contain\n * interactive form elements (those will be rendered in the display layer).\n * - `AnnotationMode.ENABLE_STORAGE`, which includes all possible annotations\n * (as above) but where interactive form elements are updated with data\n * from the {@link AnnotationStorage}-instance; useful e.g. for printing.\n * The default value is `AnnotationMode.ENABLE`.\n * @property {PrintAnnotationStorage} [printAnnotationStorage]\n * @property {boolean} [isEditing] - Render the page in editing mode.\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array} children - Array of\n * {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n * elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n #pendingCleanup = false;\n\n constructor(pageIndex, pageInfo, transport, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n /** @type {PDFObjects} */\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this._intentStates = new Map();\n this.destroyed = false;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {RefProxy | null} The reference that points to this page.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n userUnit: this.userUnit,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} [params] - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = \"display\" } = {}) {\n const { renderingIntent } = this._transport.getRenderingIntent(intent);\n\n return this._transport.getAnnotations(this._pageIndex, renderingIntent);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return this._transport.getPageJSActions(this._pageIndex);\n }\n\n /**\n * @type {Object} The filter factory instance.\n */\n get filterFactory() {\n return this._transport.filterFactory;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return shadow(this, \"isPureXfa\", !!this._transport._htmlForXfa);\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n async getXfa() {\n return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params - Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n transform = null,\n background = null,\n optionalContentConfigPromise = null,\n annotationCanvasMap = null,\n pageColors = null,\n printAnnotationStorage = null,\n isEditing = false,\n }) {\n this._stats?.time(\"Overall\");\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n isEditing\n );\n const { renderingIntent, cacheKey } = intentArgs;\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render.\n this.#pendingCleanup = false;\n\n optionalContentConfigPromise ||=\n this._transport.getOptionalContentConfig(renderingIntent);\n\n let intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(cacheKey, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT);\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = Promise.withResolvers();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup immediately once rendering has finished.\n if (intentPrint) {\n this.#pendingCleanup = true;\n }\n this.#tryCleanup();\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error instanceof Error ? error : new Error(error),\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n\n if (this._stats) {\n this._stats.timeEnd(\"Rendering\");\n this._stats.timeEnd(\"Overall\");\n\n if (globalThis.Stats?.enabled) {\n globalThis.Stats.add(this.pageNumber, this._stats);\n }\n }\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvasContext,\n viewport,\n transform,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n annotationCanvasMap,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: this._transport.canvasFactory,\n filterFactory: this._transport.filterFactory,\n useRequestAnimationFrame: !intentPrint,\n pdfBug: this._pdfBug,\n pageColors,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.destroyed) {\n complete();\n return;\n }\n this._stats?.time(\"Rendering\");\n\n if (!(optionalContentConfig.renderingIntent & renderingIntent)) {\n throw new Error(\n \"Must use the same `intent`-argument when calling the `PDFPageProxy.render` \" +\n \"and `PDFDocumentProxy.getOptionalContentConfig` methods.\"\n );\n }\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @param {GetOperatorListParameters} params - Page getOperatorList\n * parameters.\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents the page's operator list.\n */\n getOperatorList({\n intent = \"display\",\n annotationMode = AnnotationMode.ENABLE,\n printAnnotationStorage = null,\n isEditing = false,\n } = {}) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\"Not implemented: getOperatorList\");\n }\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const intentArgs = this._transport.getRenderingIntent(\n intent,\n annotationMode,\n printAnnotationStorage,\n isEditing,\n /* isOpList = */ true\n );\n let intentState = this._intentStates.get(intentArgs.cacheKey);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(intentArgs.cacheKey, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = Promise.withResolvers();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n separateAnnots: null,\n };\n\n this._stats?.time(\"Page Request\");\n this._pumpOperatorList(intentArgs);\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n includeMarkedContent = false,\n disableNormalization = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n includeMarkedContent: includeMarkedContent === true,\n disableNormalization: disableNormalization === true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * NOTE: All occurrences of whitespace will be replaced by\n * standard spaces (0x20).\n *\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n if (this._transport._htmlForXfa) {\n // TODO: We need to revisit this once the XFA foreground patch lands and\n // only do this for non-foreground XFA.\n return this.getXfa().then(xfa => XfaText.textContent(xfa));\n }\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n textContent.lang ??= value.lang;\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n lang: null,\n };\n pump();\n });\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {@link StructTreeNode} object that represents the page's structure tree,\n * or `null` when no structure tree is present for the current page.\n */\n getStructTree() {\n return this._transport.getStructTree(this._pageIndex);\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n\n const waitOn = [];\n for (const intentState of this._intentStates.values()) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intentState.opListReadCapability) {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this.#pendingCleanup = false;\n\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.#pendingCleanup = true;\n const success = this.#tryCleanup();\n\n if (resetStats && success) {\n this._stats &&= new StatTimer();\n }\n return success;\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n #tryCleanup() {\n if (!this.#pendingCleanup || this.destroyed) {\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n this._intentStates.clear();\n this.objs.clear();\n this.#pendingCleanup = false;\n return true;\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, cacheKey) {\n const intentState = this._intentStates.get(cacheKey);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n this._stats?.timeEnd(\"Page Request\");\n\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n intentState.displayReadyCapability?.resolve(transparency);\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this.#tryCleanup();\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList({\n renderingIntent,\n cacheKey,\n annotationStorageSerializable,\n modifiedIds,\n }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n Number.isInteger(renderingIntent) && renderingIntent > 0,\n '_pumpOperatorList: Expected valid \"renderingIntent\" argument.'\n );\n }\n const { map, transfer } = annotationStorageSerializable;\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n {\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n cacheKey,\n annotationStorage: map,\n modifiedIds,\n },\n transfer\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(cacheKey);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this.#tryCleanup();\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n assert(\n reason instanceof Error,\n '_abortOperatorList: Expected valid \"reason\" argument.'\n );\n }\n\n if (!intentState.streamReader) {\n return;\n }\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n let delay = RENDERING_CANCELLED_TIMEOUT;\n if (reason.extraDelay > 0 && reason.extraDelay < /* ms = */ 1000) {\n // Above, we prevent the total delay from becoming arbitrarily large.\n delay += reason.extraDelay;\n }\n\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n intentState.streamReaderCancelTimeout = null;\n this._abortOperatorList({ intentState, reason, force: true });\n }, delay);\n return;\n }\n }\n intentState.streamReader\n .cancel(new AbortException(reason.message))\n .catch(() => {\n // Avoid \"Uncaught promise\" messages in the console.\n });\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [curCacheKey, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(curCacheKey);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {StatTimer | null} Returns page stats, if enabled; returns `null`\n * otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\nclass LoopbackPort {\n #listeners = new Map();\n\n #deferred = Promise.resolve();\n\n postMessage(obj, transfer) {\n const event = {\n data: structuredClone(obj, transfer ? { transfer } : null),\n };\n\n this.#deferred.then(() => {\n for (const [listener] of this.#listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener, options = null) {\n let rmAbort = null;\n if (options?.signal instanceof AbortSignal) {\n const { signal } = options;\n if (signal.aborted) {\n warn(\"LoopbackPort - cannot use an `aborted` signal.\");\n return;\n }\n const onAbort = () => this.removeEventListener(name, listener);\n rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n signal.addEventListener(\"abort\", onAbort);\n }\n this.#listeners.set(listener, rmAbort);\n }\n\n removeEventListener(name, listener) {\n const rmAbort = this.#listeners.get(listener);\n rmAbort?.();\n\n this.#listeners.delete(listener);\n }\n\n terminate() {\n for (const [, rmAbort] of this.#listeners) {\n rmAbort?.();\n }\n this.#listeners.clear();\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Worker} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level;\n * the constants from {@link VerbosityLevel} should be used.\n */\n\n/**\n * PDF.js web worker abstraction that controls the instantiation of PDF\n * documents. Message handlers are used to pass information from the main\n * thread to the worker thread and vice versa. If the creation of a web\n * worker is not possible, a \"fake\" worker will be used instead.\n *\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n */\nclass PDFWorker {\n static #fakeWorkerId = 0;\n\n static #isWorkerDisabled = false;\n\n static #workerPorts;\n\n static {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n if (isNodeJS) {\n // Workers aren't supported in Node.js, force-disabling them there.\n this.#isWorkerDisabled = true;\n\n GlobalWorkerOptions.workerSrc ||= PDFJSDev.test(\"LIB\")\n ? \"../pdf.worker.js\"\n : \"./pdf.worker.mjs\";\n }\n\n // Check if URLs have the same origin. For non-HTTP based URLs, returns\n // false.\n this._isSameOrigin = (baseUrl, otherUrl) => {\n const base = URL.parse(baseUrl);\n if (!base?.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n };\n\n this._createCDNWrapper = url => {\n // We will rely on blob URL's property to specify origin.\n // We want this function to fail in case if createObjectURL or Blob do\n // not exist or fail for some reason -- our Worker creation will fail\n // anyway.\n const wrapper = `await import(\"${url}\");`;\n return URL.createObjectURL(\n new Blob([wrapper], { type: \"text/javascript\" })\n );\n };\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n this._resetGlobalState = () => {\n this.#isWorkerDisabled = false;\n delete globalThis.pdfjsWorker;\n };\n }\n }\n\n constructor({\n name = null,\n port = null,\n verbosity = getVerbosityLevel(),\n } = {}) {\n this.name = name;\n this.destroyed = false;\n this.verbosity = verbosity;\n\n this._readyCapability = Promise.withResolvers();\n this._port = null;\n this._webWorker = null;\n this._messageHandler = null;\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n port\n ) {\n if (PDFWorker.#workerPorts?.has(port)) {\n throw new Error(\"Cannot use more than one PDFWorker per port.\");\n }\n (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this);\n this._initializeFromPort(port);\n return;\n }\n this._initialize();\n }\n\n /**\n * Promise for worker initialization completion.\n * @type {Promise}\n */\n get promise() {\n return this._readyCapability.promise;\n }\n\n #resolve() {\n this._readyCapability.resolve();\n // Send global setting, e.g. verbosity level.\n this._messageHandler.send(\"configure\", {\n verbosity: this.verbosity,\n });\n }\n\n /**\n * The current `workerPort`, when it exists.\n * @type {Worker}\n */\n get port() {\n return this._port;\n }\n\n /**\n * The current MessageHandler-instance.\n * @type {MessageHandler}\n */\n get messageHandler() {\n return this._messageHandler;\n }\n\n _initializeFromPort(port) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: _initializeFromPort\");\n }\n this._port = port;\n this._messageHandler = new MessageHandler(\"main\", \"worker\", port);\n this._messageHandler.on(\"ready\", function () {\n // Ignoring \"ready\" event -- MessageHandler should already be initialized\n // and ready to accept messages.\n });\n this.#resolve();\n }\n\n _initialize() {\n // If worker support isn't disabled explicit and the browser has worker\n // support, create a new web worker and test if it/the browser fulfills\n // all requirements to run parts of pdf.js in a web worker.\n // Right now, the requirement is, that an Uint8Array is still an\n // Uint8Array as it arrives on the worker.\n if (\n PDFWorker.#isWorkerDisabled ||\n PDFWorker.#mainThreadWorkerMessageHandler\n ) {\n this._setupFakeWorker();\n return;\n }\n let { workerSrc } = PDFWorker;\n\n try {\n // Wraps workerSrc path into blob URL, if the former does not belong\n // to the same origin.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n !PDFWorker._isSameOrigin(window.location, workerSrc)\n ) {\n workerSrc = PDFWorker._createCDNWrapper(\n new URL(workerSrc, window.location).href\n );\n }\n\n const worker = new Worker(workerSrc, { type: \"module\" });\n const messageHandler = new MessageHandler(\"main\", \"worker\", worker);\n const terminateEarly = () => {\n ac.abort();\n messageHandler.destroy();\n worker.terminate();\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n } else {\n // Fall back to fake worker if the termination is caused by an\n // error (e.g. NetworkError / SecurityError).\n this._setupFakeWorker();\n }\n };\n\n const ac = new AbortController();\n worker.addEventListener(\n \"error\",\n () => {\n if (!this._webWorker) {\n // Worker failed to initialize due to an error. Clean up and fall\n // back to the fake worker.\n terminateEarly();\n }\n },\n { signal: ac.signal }\n );\n\n messageHandler.on(\"test\", data => {\n ac.abort();\n if (this.destroyed || !data) {\n terminateEarly();\n return;\n }\n this._messageHandler = messageHandler;\n this._port = worker;\n this._webWorker = worker;\n\n this.#resolve();\n });\n\n messageHandler.on(\"ready\", data => {\n ac.abort();\n if (this.destroyed) {\n terminateEarly();\n return;\n }\n try {\n sendTest();\n } catch {\n // We need fallback to a faked worker.\n this._setupFakeWorker();\n }\n });\n\n const sendTest = () => {\n const testObj = new Uint8Array();\n // Ensure that we can use `postMessage` transfers.\n messageHandler.send(\"test\", testObj, [testObj.buffer]);\n };\n\n // It might take time for the worker to initialize. We will try to send\n // the \"test\" message immediately, and once the \"ready\" message arrives.\n // The worker shall process only the first received \"test\" message.\n sendTest();\n return;\n } catch {\n info(\"The worker has been disabled.\");\n }\n // Either workers are not supported or have thrown an exception.\n // Thus, we fallback to a faked worker.\n this._setupFakeWorker();\n }\n\n _setupFakeWorker() {\n if (!PDFWorker.#isWorkerDisabled) {\n warn(\"Setting up fake worker.\");\n PDFWorker.#isWorkerDisabled = true;\n }\n\n PDFWorker._setupFakeWorkerGlobal\n .then(WorkerMessageHandler => {\n if (this.destroyed) {\n this._readyCapability.reject(new Error(\"Worker was destroyed\"));\n return;\n }\n const port = new LoopbackPort();\n this._port = port;\n\n // All fake workers use the same port, making id unique.\n const id = `fake${PDFWorker.#fakeWorkerId++}`;\n\n // If the main thread is our worker, setup the handling for the\n // messages -- the main thread sends to it self.\n const workerHandler = new MessageHandler(id + \"_worker\", id, port);\n WorkerMessageHandler.setup(workerHandler, port);\n\n this._messageHandler = new MessageHandler(id, id + \"_worker\", port);\n this.#resolve();\n })\n .catch(reason => {\n this._readyCapability.reject(\n new Error(`Setting up fake worker failed: \"${reason.message}\".`)\n );\n });\n }\n\n /**\n * Destroys the worker instance.\n */\n destroy() {\n this.destroyed = true;\n\n // We need to terminate only web worker created resource.\n this._webWorker?.terminate();\n this._webWorker = null;\n\n PDFWorker.#workerPorts?.delete(this._port);\n this._port = null;\n\n this._messageHandler?.destroy();\n this._messageHandler = null;\n }\n\n /**\n * @param {PDFWorkerParameters} params - The worker initialization parameters.\n * @returns {PDFWorker}\n */\n static fromPort(params) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: fromPort\");\n }\n if (!params?.port) {\n throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\n }\n const cachedPort = this.#workerPorts?.get(params.port);\n if (cachedPort) {\n if (cachedPort._pendingDestroy) {\n throw new Error(\n \"PDFWorker.fromPort - the worker is being destroyed.\\n\" +\n \"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls.\"\n );\n }\n return cachedPort;\n }\n return new PDFWorker(params);\n }\n\n /**\n * The current `workerSrc`, when it exists.\n * @type {string}\n */\n static get workerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n static get #mainThreadWorkerMessageHandler() {\n try {\n return globalThis.pdfjsWorker?.WorkerMessageHandler || null;\n } catch {\n return null;\n }\n }\n\n // Loads worker code into the main-thread.\n static get _setupFakeWorkerGlobal() {\n const loader = async () => {\n if (this.#mainThreadWorkerMessageHandler) {\n // The worker was already loaded using e.g. a ` + + + + + + + +
+ +
+
+
+
+ + + + +
+
+ +
+
+
+ + +
+
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+ +
+
+ + +
+
+ +
+ +
+
+ + + + +
+
+
+
+ +
+ +
+ + + +
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+ + + +
+ +
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+ + +
+
+ +
+ +

-

+
+
+ +

-

+
+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+ +

-

+
+
+
+ +

-

+
+
+ +
+
+ +
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+ +
+
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+ +
+
+
+ + +
+ +
+
+
+
+
+
+ + +
+ +
+
+
+ + + +
+
+
+ + +
+
+ +
+
+ +
+
+
+ + +
+
+ +
+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ +
+
+
+
+ +
+
+
+ + + +
+
+ +
+
+ + + +
+
+
+ +
+
+ + +
+
+ + +
+
+
+
+ +
+ + + +
+
+
+
+
+ + + + + +
+ +
+
+ + + + +
+
+ +
+ + +
+
+
+
+ + +
+
+ +
+
+
+ + + + + +
+ +
+
+ + +
+
+
+ + +
+ +
+
+ + 0% +
+
+ +
+
+
+ + + +
+
+ + diff --git a/resources/js/pdfjs-5.2.133-dist/web/viewer.mjs b/resources/js/pdfjs-5.2.133-dist/web/viewer.mjs new file mode 100644 index 0000000..e7f2f38 --- /dev/null +++ b/resources/js/pdfjs-5.2.133-dist/web/viewer.mjs @@ -0,0 +1,16934 @@ +/** + * @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 + */ + + +;// ./web/pdfjs.js +const { + AbortException, + AnnotationEditorLayer, + AnnotationEditorParamsType, + AnnotationEditorType, + AnnotationEditorUIManager, + AnnotationLayer, + AnnotationMode, + AnnotationType, + build, + ColorPicker, + createValidAbsoluteUrl, + DOMSVGFactory, + DrawLayer, + FeatureTest, + fetchData, + getDocument, + getFilenameFromUrl, + getPdfFilenameFromUrl: pdfjs_getPdfFilenameFromUrl, + getUuid, + getXfaPageViewport, + GlobalWorkerOptions, + ImageKind, + InvalidPDFException, + isDataScheme, + isPdfFile, + isValidExplicitDest, + MathClamp, + noContextMenu, + normalizeUnicode, + OPS, + OutputScale, + PasswordResponses, + PDFDataRangeTransport, + PDFDateString, + PDFWorker, + PermissionFlag, + PixelsPerInch, + RenderingCancelledException, + ResponseException, + setLayerDimensions, + shadow, + SignatureExtractor, + stopEvent, + SupportedImageMimeTypes, + TextLayer, + TouchManager, + updateUrlHash, + Util, + VerbosityLevel, + version, + XfaLayer +} = globalThis.pdfjsLib; + +;// ./web/ui_utils.js + +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, scrollMatches = false) { + let parent = element.offsetParent; + if (!parent) { + console.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) { + return; + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } + } + parent.scrollTop = offsetY; +} +function watchScroll(viewAreaElement, callback, abortSignal = 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, replaceInvisible = false) { + if (!InvisibleCharsRegExp.test(str)) { + return str; + } + if (replaceInvisible) { + return str.replaceAll(InvisibleCharsRegExp, m => m === "\x00" ? "" : " "); + } + return str.replaceAll("\x00", ""); +} +function binarySearchFirstItem(items, condition, start = 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({ + view, + userUnit, + rotate +}) { + 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({ + scrollEl, + views, + sortByVisibility = false, + horizontal = false, + rtl = false +}) { + 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; +class ProgressBar { + #classList = null; + #disableAutoFetchTimeout = null; + #percent = 0; + #style = null; + #visible = true; + constructor(bar) { + this.#classList = bar.classList; + this.#style = bar.style; + } + get percent() { + return this.#percent; + } + set percent(val) { + this.#percent = MathClamp(val, 0, 100); + if (isNaN(val)) { + this.#classList.add("indeterminate"); + return; + } + this.#classList.remove("indeterminate"); + this.#style.setProperty("--progressBar-percent", `${this.#percent}%`); + } + setWidth(viewer) { + if (!viewer) { + return; + } + const container = viewer.parentNode; + const scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + if (scrollbarWidth > 0) { + this.#style.setProperty("--progressBar-end-offset", `${scrollbarWidth}px`); + } + } + setDisableAutoFetch(delay = 5000) { + if (this.#percent === 100 || isNaN(this.#percent)) { + return; + } + if (this.#disableAutoFetchTimeout) { + clearTimeout(this.#disableAutoFetchTimeout); + } + this.show(); + this.#disableAutoFetchTimeout = setTimeout(() => { + this.#disableAutoFetchTimeout = null; + this.hide(); + }, delay); + } + hide() { + if (!this.#visible) { + return; + } + this.#visible = false; + this.#classList.add("hidden"); + } + show() { + if (this.#visible) { + return; + } + this.#visible = true; + this.#classList.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, view = null) { + button.classList.toggle("toggled", toggle); + button.setAttribute("aria-checked", toggle); + view?.classList.toggle("hidden", !toggle); +} +function toggleExpandedBtn(button, toggle, view = null) { + button.classList.toggle("toggled", toggle); + button.setAttribute("aria-expanded", toggle); + view?.classList.toggle("hidden", !toggle); +} +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; +}(); + +;// ./web/app_options.js +{ + var compatParams = new Map(); + const userAgent = navigator.userAgent || ""; + const platform = navigator.platform || ""; + const maxTouchPoints = navigator.maxTouchPoints || 1; + 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 = { + 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 + }, + 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: "", + 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 + }, + 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 + }, + 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 + }, + 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 + }, + 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: "../build/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 eventBus; + static #opts = new Map(); + static { + for (const name in defaultOptions) { + this.#opts.set(name, defaultOptions[name].value); + } + for (const [name, value] of compatParams) { + this.#opts.set(name, value); + } + this._hasInvokedSet = false; + this._checkDisablePreferences = () => { + if (this.get("disablePreferences")) { + return true; + } + if (this._hasInvokedSet) { + console.warn("The Preferences may override manually set AppOptions; " + 'please use the "disablePreferences"-option to prevent that.'); + } + return false; + }; + } + static get(name) { + return this.#opts.get(name); + } + static getAll(kind = null, defaultOnly = false) { + const options = Object.create(null); + for (const name in defaultOptions) { + const defaultOpt = defaultOptions[name]; + if (kind && !(kind & defaultOpt.kind)) { + continue; + } + options[name] = !defaultOnly ? this.#opts.get(name) : defaultOpt.value; + } + return options; + } + static set(name, value) { + this.setAll({ + [name]: value + }); + } + static setAll(options, prefs = false) { + this._hasInvokedSet ||= true; + let events; + for (const name in options) { + const defaultOpt = defaultOptions[name], + userOpt = options[name]; + if (!defaultOpt || !(typeof userOpt === typeof defaultOpt.value || Type[(typeof userOpt).toUpperCase()] & defaultOpt.type)) { + continue; + } + const { + kind + } = defaultOpt; + if (prefs && !(kind & OptionKind.BROWSER || kind & OptionKind.PREFERENCE)) { + continue; + } + if (this.eventBus && kind & OptionKind.EVENT_DISPATCH) { + (events ||= new Map()).set(name, userOpt); + } + this.#opts.set(name, userOpt); + } + if (events) { + for (const [name, value] of events) { + this.eventBus.dispatch(name.toLowerCase(), { + source: this, + value + }); + } + } + } +} + +;// ./web/pdf_link_service.js +const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; +const LinkTarget = { + NONE: 0, + SELF: 1, + BLANK: 2, + PARENT: 3, + TOP: 4 +}; + +class PDFLinkService { + externalLinkEnabled = true; + constructor({ + eventBus, + externalLinkTarget = null, + externalLinkRel = null, + ignoreDestinationZoom = false + } = {}) { + 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, baseUrl = 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 { + console.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) { + console.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)) { + console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.pushPage(pageNumber); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber + }); + } + addLinkAttributes(link, url, newWindow = 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) { + console.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 { + console.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, baseUrl = null) {} +} + +;// ./web/event_utils.js +const WaitOnType = { + EVENT: "event", + TIMEOUT: "timeout" +}; +async function waitOnEventOrTimeout({ + target, + name, + delay = 0 +}) { + 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; +} +class EventBus { + #listeners = Object.create(null); + on(eventName, listener, options = null) { + this._on(eventName, listener, { + external: true, + once: options?.once, + signal: options?.signal + }); + } + off(eventName, listener, options = null) { + this._off(eventName, listener); + } + dispatch(eventName, data) { + const eventListeners = this.#listeners[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, options = 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 = this.#listeners[eventName] ||= []; + eventListeners.push({ + listener, + external: options?.external === true, + once: options?.once === true, + rmAbort + }); + } + _off(eventName, listener, options = null) { + const eventListeners = this.#listeners[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; + } + } + } +} +class FirefoxEventBus extends EventBus { + #externalServices; + #globalEventNames; + #isInAutomation; + constructor(globalEventNames, externalServices, isInAutomation) { + super(); + this.#globalEventNames = globalEventNames; + this.#externalServices = externalServices; + this.#isInAutomation = 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 + +class BasePreferences { + #defaults = Object.freeze({ + altTextLearnMoreUrl: "", + annotationEditorMode: 0, + annotationMode: 2, + cursorToolOnLoad: 0, + defaultZoomDelay: 400, + defaultZoomValue: "", + disablePageLabels: false, + enableAltText: false, + enableAltTextModelDownload: true, + enableAutoLinking: true, + enableGuessAltText: true, + enableHighlightFloatingButton: false, + enableNewAltTextWhenAddingImage: true, + enablePermissions: false, + enablePrintAutoRotate: true, + enableScripting: true, + enableSignatureEditor: false, + 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, + sidebarViewOnLoad: -1, + scrollModeOnLoad: -1, + spreadModeOnLoad: -1, + textLayerMode: 1, + viewerCssTheme: 0, + viewOnLoad: 0, + disableAutoFetch: false, + disableFontFace: false, + disableRange: false, + disableStream: false, + enableHWA: true, + enableXfa: true + }); + #initializedPromise = null; + constructor() { + this.#initializedPromise = this._readFromStorage(this.#defaults).then(({ + browserPrefs, + prefs + }) => { + 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 this.#initializedPromise; + AppOptions.setAll(this.#defaults, true); + await this._writeToStorage(this.#defaults); + } + async set(name, value) { + await this.#initializedPromise; + AppOptions.setAll({ + [name]: value + }, true); + await this._writeToStorage(AppOptions.getAll(OptionKind.PREFERENCE)); + } + async get(name) { + await this.#initializedPromise; + return AppOptions.get(name); + } + get initializedPromise() { + return this.#initializedPromise; + } +} + +;// ./node_modules/@fluent/bundle/esm/types.js +class FluentType { + constructor(value) { + this.value = value; + } + valueOf() { + return this.value; + } +} +class FluentNone extends FluentType { + constructor(value = "???") { + super(value); + } + toString(scope) { + return `{${this.value}}`; + } +} +class FluentNumber extends FluentType { + constructor(value, opts = {}) { + 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, opts = {}) { + 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, { + name +}) { + 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, { + name, + attr +}) { + 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, { + name, + attr, + args +}) { + 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, { + name, + args +}) { + 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, { + selector, + variants, + star +}) { + 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, { + functions, + useIsolating = true, + transform = v => v + } = {}) { + 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, { + allowOverrides = false + } = {}) { + 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, args = null, errors = 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(elements = [], commonIndent) { + 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, explicitlyAllowed = 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(count = 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(count = 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(resourceIds = [], generateBundles) { + this.resourceIds = resourceIds; + this.generateBundles = generateBundles; + this.onChange(true); + } + addResourceIds(resourceIds, eager = 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(eager = 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(({ + id, + args + }, i) => { + 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(eager = 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 +class L10n { + #dir; + #elements; + #lang; + #l10n; + constructor({ + lang, + isRTL + }, l10n = null) { + this.#lang = L10n.#fixupLangCode(lang); + this.#l10n = l10n; + this.#dir = isRTL ?? L10n.#isRTL(this.#lang) ? "rtl" : "ltr"; + } + _setL10n(l10n) { + this.#l10n = l10n; + } + getLanguage() { + return this.#lang; + } + getDirection() { + return this.#dir; + } + async get(ids, args = null, fallback) { + if (Array.isArray(ids)) { + ids = ids.map(id => ({ + id + })); + const messages = await this.#l10n.formatMessages(ids); + return messages.map(message => message.value); + } + const messages = await this.#l10n.formatMessages([{ + id: ids, + args + }]); + return messages[0]?.value || fallback; + } + async translate(element) { + (this.#elements ||= new Set()).add(element); + try { + this.#l10n.connectRoot(element); + await this.#l10n.translateRoots(); + } catch {} + } + async translateOnce(element) { + try { + await this.#l10n.translateElements([element]); + } catch (ex) { + console.error("translateOnce:", ex); + } + } + async destroy() { + if (this.#elements) { + for (const element of this.#elements) { + this.#l10n.disconnectRoot(element); + } + this.#elements.clear(); + this.#elements = null; + } + this.#l10n.pauseObserving(); + } + pause() { + this.#l10n.pauseObserving(); + } + resume() { + this.#l10n.resumeObserving(); + } + static #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; + } + static #isRTL(lang) { + const shortCode = lang.split("-", 1)[0]; + return ["ar", "he", "fa", "ps", "ur"].includes(shortCode); + } +} +const GenericL10n = null; + +;// ./web/genericl10n.js + + + + +function PLATFORM() { + const { + isAndroid, + isLinux, + isMac, + isWindows + } = 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 ? genericl10n_GenericL10n.#generateBundlesFallback.bind(genericl10n_GenericL10n, this.getLanguage()) : genericl10n_GenericL10n.#generateBundles.bind(genericl10n_GenericL10n, "en-us", this.getLanguage()); + this._setL10n(new DOMLocalization([], generateBundles)); + } + static async *#generateBundles(defaultLang, baseLang) { + const { + baseURL, + paths + } = await this.#getPaths(); + 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, this.#createBundle(lang, baseURL, paths)]); + for (const [lang, bundlePromise] of bundles) { + const bundle = await bundlePromise; + if (bundle) { + yield bundle; + } else if (lang === "en-us") { + yield this.#createBundleFallback(lang); + } + } + } + static async #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); + } + static async #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) + }; + } + static async *#generateBundlesFallback(lang) { + yield this.#createBundleFallback(lang); + } + static async #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) { + 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 + +const KEY_STORAGE = "pdfjs.signature"; +class SignatureStorage { + #eventBus; + #signatures = null; + #signal = null; + constructor(eventBus, signal) { + this.#eventBus = eventBus; + this.#signal = signal; + } + #save() { + localStorage.setItem(KEY_STORAGE, JSON.stringify(Object.fromEntries(this.#signatures))); + } + async getAll() { + if (this.#signal) { + window.addEventListener("storage", ({ + key + }) => { + if (key === KEY_STORAGE) { + this.#signatures = null; + this.#eventBus?.dispatch("storedsignatureschanged", { + source: this + }); + } + }, { + signal: this.#signal + }); + this.#signal = null; + } + if (!this.#signatures) { + this.#signatures = new Map(); + const data = localStorage.getItem(KEY_STORAGE); + if (data) { + for (const [key, value] of Object.entries(JSON.parse(data))) { + this.#signatures.set(key, value); + } + } + } + return this.#signatures; + } + 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(); + this.#signatures.set(uuid, data); + this.#save(); + return uuid; + } + async delete(uuid) { + const signatures = await this.getAll(); + if (!signatures.has(uuid)) { + return false; + } + signatures.delete(uuid); + this.#save(); + return true; + } +} + +;// ./web/genericcom.js + + + + + + +function initCom(app) {} +class Preferences extends BasePreferences { + async _writeToStorage(prefObj) { + localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); + } + async _readFromStorage(prefObj) { + return { + prefs: JSON.parse(localStorage.getItem("pdfjs.preferences")) + }; + } +} +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) {} +} + +;// ./web/new_alt_text_manager.js + +class NewAltTextManager { + #boundCancel = this.#cancel.bind(this); + #createAutomaticallyButton; + #currentEditor = null; + #cancelButton; + #descriptionContainer; + #dialog; + #disclaimer; + #downloadModel; + #downloadModelDescription; + #eventBus; + #firstTime = false; + #guessedAltText; + #hasAI = null; + #isEditing = null; + #imagePreview; + #imageData; + #isAILoading = false; + #wasAILoading = false; + #learnMore; + #notNowButton; + #overlayManager; + #textarea; + #title; + #uiManager; + #previousAltText = null; + constructor({ + descriptionContainer, + dialog, + imagePreview, + cancelButton, + disclaimer, + notNowButton, + saveButton, + textarea, + learnMore, + errorCloseButton, + createAutomaticallyButton, + downloadModel, + downloadModelDescription, + title + }, overlayManager, eventBus) { + this.#cancelButton = cancelButton; + this.#createAutomaticallyButton = createAutomaticallyButton; + this.#descriptionContainer = descriptionContainer; + this.#dialog = dialog; + this.#disclaimer = disclaimer; + this.#notNowButton = notNowButton; + this.#imagePreview = imagePreview; + this.#textarea = textarea; + this.#learnMore = learnMore; + this.#title = title; + this.#downloadModel = downloadModel; + this.#downloadModelDescription = downloadModelDescription; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", event => { + if (event.target !== this.#textarea) { + event.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#boundCancel); + notNowButton.addEventListener("click", this.#boundCancel); + saveButton.addEventListener("click", this.#save.bind(this)); + errorCloseButton.addEventListener("click", () => { + this.#toggleError(false); + }); + createAutomaticallyButton.addEventListener("click", async () => { + const checked = createAutomaticallyButton.getAttribute("aria-pressed") !== "true"; + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.ai_generation_check", + data: { + status: checked + } + }); + if (this.#uiManager) { + this.#uiManager.setPreference("enableGuessAltText", checked); + await this.#uiManager.mlManager.toggleService("altText", checked); + } + this.#toggleGuessAltText(checked, false); + }); + textarea.addEventListener("focus", () => { + this.#wasAILoading = this.#isAILoading; + this.#toggleLoading(false); + this.#toggleTitleAndDisclaimer(); + }); + textarea.addEventListener("blur", () => { + if (!textarea.value) { + this.#toggleLoading(this.#wasAILoading); + } + this.#toggleTitleAndDisclaimer(); + }); + textarea.addEventListener("input", () => { + this.#toggleTitleAndDisclaimer(); + }); + eventBus._on("enableguessalttext", ({ + value + }) => { + this.#toggleGuessAltText(value, false); + }); + this.#overlayManager.register(dialog); + this.#learnMore.addEventListener("click", () => { + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.info", + data: { + topic: "alt_text" + } + }); + }); + } + #toggleLoading(value) { + if (!this.#uiManager || this.#isAILoading === value) { + return; + } + this.#isAILoading = value; + this.#descriptionContainer.classList.toggle("loading", value); + } + #toggleError(value) { + if (!this.#uiManager) { + return; + } + this.#dialog.classList.toggle("error", value); + } + async #toggleGuessAltText(value, isInitial = false) { + if (!this.#uiManager) { + return; + } + this.#dialog.classList.toggle("aiDisabled", !value); + this.#createAutomaticallyButton.setAttribute("aria-pressed", value); + if (value) { + const { + altTextLearnMoreUrl + } = this.#uiManager.mlManager; + if (altTextLearnMoreUrl) { + this.#learnMore.href = altTextLearnMoreUrl; + } + this.#mlGuessAltText(isInitial); + } else { + this.#toggleLoading(false); + this.#isAILoading = false; + this.#toggleTitleAndDisclaimer(); + } + } + #toggleNotNow() { + this.#notNowButton.classList.toggle("hidden", !this.#firstTime); + this.#cancelButton.classList.toggle("hidden", this.#firstTime); + } + #toggleAI(value) { + if (!this.#uiManager || this.#hasAI === value) { + return; + } + this.#hasAI = value; + this.#dialog.classList.toggle("noAi", !value); + this.#toggleTitleAndDisclaimer(); + } + #toggleTitleAndDisclaimer() { + const visible = this.#isAILoading || this.#guessedAltText && this.#guessedAltText === this.#textarea.value; + this.#disclaimer.hidden = !visible; + const isEditing = this.#isAILoading || !!this.#textarea.value; + if (this.#isEditing === isEditing) { + return; + } + this.#isEditing = isEditing; + this.#title.setAttribute("data-l10n-id", isEditing ? "pdfjs-editor-new-alt-text-dialog-edit-label" : "pdfjs-editor-new-alt-text-dialog-add-label"); + } + async #mlGuessAltText(isInitial) { + if (this.#isAILoading) { + return; + } + if (this.#textarea.value) { + return; + } + if (isInitial && this.#previousAltText !== null) { + return; + } + this.#guessedAltText = this.#currentEditor.guessedAltText; + if (this.#previousAltText === null && this.#guessedAltText) { + this.#addAltText(this.#guessedAltText); + return; + } + this.#toggleLoading(true); + this.#toggleTitleAndDisclaimer(); + let hasError = false; + try { + const altText = await this.#currentEditor.mlGuessAltText(this.#imageData, false); + if (altText) { + this.#guessedAltText = altText; + this.#wasAILoading = this.#isAILoading; + if (this.#isAILoading) { + this.#addAltText(altText); + } + } + } catch (e) { + console.error(e); + hasError = true; + } + this.#toggleLoading(false); + this.#toggleTitleAndDisclaimer(); + if (hasError && this.#uiManager) { + this.#toggleError(true); + } + } + #addAltText(altText) { + if (!this.#uiManager || this.#textarea.value) { + return; + } + this.#textarea.value = altText; + this.#toggleTitleAndDisclaimer(); + } + #setProgress() { + this.#downloadModel.classList.toggle("hidden", false); + const callback = async ({ + detail: { + finished, + total, + totalLoaded + } + }) => { + const ONE_MEGA_BYTES = 1e6; + totalLoaded = Math.min(0.99 * total, totalLoaded); + const totalSize = this.#downloadModelDescription.ariaValueMax = Math.round(total / ONE_MEGA_BYTES); + const downloadedSize = this.#downloadModelDescription.ariaValueNow = Math.round(totalLoaded / ONE_MEGA_BYTES); + this.#downloadModelDescription.setAttribute("data-l10n-args", JSON.stringify({ + totalSize, + downloadedSize + })); + if (!finished) { + return; + } + this.#eventBus._off("loadaiengineprogress", callback); + this.#downloadModel.classList.toggle("hidden", true); + this.#toggleAI(true); + if (!this.#uiManager) { + return; + } + const { + mlManager + } = this.#uiManager; + mlManager.toggleService("altText", true); + this.#toggleGuessAltText(await mlManager.isEnabledFor("altText"), true); + }; + this.#eventBus._on("loadaiengineprogress", callback); + } + async editAltText(uiManager, editor, firstTime) { + if (this.#currentEditor || !editor) { + return; + } + if (firstTime && editor.hasAltTextData()) { + editor.altTextFinish(); + return; + } + this.#firstTime = firstTime; + let { + mlManager + } = uiManager; + let hasAI = !!mlManager; + this.#toggleTitleAndDisclaimer(); + if (mlManager && !mlManager.isReady("altText")) { + hasAI = false; + if (mlManager.hasProgress) { + this.#setProgress(); + } else { + mlManager = null; + } + } else { + this.#downloadModel.classList.toggle("hidden", true); + } + const isAltTextEnabledPromise = mlManager?.isEnabledFor("altText"); + this.#currentEditor = editor; + this.#uiManager = uiManager; + this.#uiManager.removeEditListeners(); + ({ + altText: this.#previousAltText + } = editor.altTextData); + this.#textarea.value = this.#previousAltText ?? ""; + const AI_MAX_IMAGE_DIMENSION = 224; + const MAX_PREVIEW_DIMENSION = 180; + let canvas, width, height; + if (mlManager) { + ({ + canvas, + width, + height, + imageData: this.#imageData + } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, true)); + if (hasAI) { + this.#toggleGuessAltText(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`; + this.#imagePreview.append(canvas); + this.#toggleNotNow(); + this.#toggleAI(hasAI); + this.#toggleError(false); + try { + await this.#overlayManager.open(this.#dialog); + } catch (ex) { + this.#close(); + throw ex; + } + } + #cancel() { + this.#currentEditor.altTextData = { + cancel: true + }; + const altText = this.#textarea.value.trim(); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.dismiss", + data: { + alt_text_type: altText ? "present" : "empty", + flow: this.#firstTime ? "image_add" : "alt_text_edit" + } + }); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: true, + alt_text_type: "skipped" + } + }); + this.#finish(); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + const canvas = this.#imagePreview.firstChild; + canvas.remove(); + canvas.width = canvas.height = 0; + this.#imageData = null; + this.#toggleLoading(false); + this.#uiManager?.addEditListeners(); + this.#currentEditor.altTextFinish(); + this.#uiManager?.setSelected(this.#currentEditor); + this.#currentEditor = null; + this.#uiManager = null; + } + #extractWords(text) { + return new Set(text.toLowerCase().split(/[^\p{L}\p{N}]+/gu).filter(x => !!x)); + } + #save() { + const altText = this.#textarea.value.trim(); + this.#currentEditor.altTextData = { + altText, + decorative: false + }; + this.#currentEditor.altTextData.guessedAltText = this.#guessedAltText; + if (this.#guessedAltText && this.#guessedAltText !== altText) { + const guessedWords = this.#extractWords(this.#guessedAltText); + const words = this.#extractWords(altText); + this.#currentEditor._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 + } + }); + } + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: true, + alt_text_type: altText ? "present" : "empty" + } + }); + this.#currentEditor._reportTelemetry({ + action: "pdfjs.image.alt_text.save", + data: { + alt_text_type: altText ? "present" : "empty", + flow: this.#firstTime ? "image_add" : "alt_text_edit" + } + }); + this.#finish(); + } + destroy() { + this.#uiManager = null; + this.#finish(); + } +} +class ImageAltTextSettings { + #aiModelSettings; + #createModelButton; + #downloadModelButton; + #dialog; + #eventBus; + #mlManager; + #overlayManager; + #showAltTextDialogButton; + constructor({ + dialog, + createModelButton, + aiModelSettings, + learnMore, + closeButton, + deleteModelButton, + downloadModelButton, + showAltTextDialogButton + }, overlayManager, eventBus, mlManager) { + this.#dialog = dialog; + this.#aiModelSettings = aiModelSettings; + this.#createModelButton = createModelButton; + this.#downloadModelButton = downloadModelButton; + this.#showAltTextDialogButton = showAltTextDialogButton; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#mlManager = mlManager; + const { + altTextLearnMoreUrl + } = mlManager; + if (altTextLearnMoreUrl) { + learnMore.href = altTextLearnMoreUrl; + } + dialog.addEventListener("contextmenu", noContextMenu); + createModelButton.addEventListener("click", async e => { + const checked = this.#togglePref("enableGuessAltText", e); + await mlManager.toggleService("altText", checked); + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.settings_ai_generation_check", + data: { + status: checked + } + }); + }); + showAltTextDialogButton.addEventListener("click", e => { + const checked = this.#togglePref("enableNewAltTextWhenAddingImage", e); + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.settings_edit_alt_text_check", + data: { + status: checked + } + }); + }); + deleteModelButton.addEventListener("click", this.#delete.bind(this, true)); + downloadModelButton.addEventListener("click", this.#download.bind(this, true)); + closeButton.addEventListener("click", this.#finish.bind(this)); + learnMore.addEventListener("click", () => { + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.info", + data: { + topic: "ai_generation" + } + }); + }); + eventBus._on("enablealttextmodeldownload", ({ + value + }) => { + if (value) { + this.#download(false); + } else { + this.#delete(false); + } + }); + this.#overlayManager.register(dialog); + } + #reportTelemetry(data) { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + async #download(isFromUI = false) { + if (isFromUI) { + this.#downloadModelButton.disabled = true; + const span = this.#downloadModelButton.firstChild; + span.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-settings-downloading-model-button"); + await this.#mlManager.downloadModel("altText"); + span.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-settings-download-model-button"); + this.#createModelButton.disabled = false; + this.#setPref("enableGuessAltText", true); + this.#mlManager.toggleService("altText", true); + this.#setPref("enableAltTextModelDownload", true); + this.#downloadModelButton.disabled = false; + } + this.#aiModelSettings.classList.toggle("download", false); + this.#createModelButton.setAttribute("aria-pressed", true); + } + async #delete(isFromUI = false) { + if (isFromUI) { + await this.#mlManager.deleteModel("altText"); + this.#setPref("enableGuessAltText", false); + this.#setPref("enableAltTextModelDownload", false); + } + this.#aiModelSettings.classList.toggle("download", true); + this.#createModelButton.disabled = true; + this.#createModelButton.setAttribute("aria-pressed", false); + } + async open({ + enableGuessAltText, + enableNewAltTextWhenAddingImage + }) { + const { + enableAltTextModelDownload + } = this.#mlManager; + this.#createModelButton.disabled = !enableAltTextModelDownload; + this.#createModelButton.setAttribute("aria-pressed", enableAltTextModelDownload && enableGuessAltText); + this.#showAltTextDialogButton.setAttribute("aria-pressed", enableNewAltTextWhenAddingImage); + this.#aiModelSettings.classList.toggle("download", !enableAltTextModelDownload); + await this.#overlayManager.open(this.#dialog); + this.#reportTelemetry({ + type: "stamp", + action: "pdfjs.image.alt_text.settings_displayed" + }); + } + #togglePref(name, { + target + }) { + const checked = target.getAttribute("aria-pressed") !== "true"; + this.#setPref(name, checked); + target.setAttribute("aria-pressed", checked); + return checked; + } + #setPref(name, value) { + this.#eventBus.dispatch("setpreference", { + source: this, + name, + value + }); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } +} + +;// ./web/alt_text_manager.js + +class AltTextManager { + #clickAC = null; + #currentEditor = null; + #cancelButton; + #dialog; + #eventBus; + #hasUsedPointer = false; + #optionDescription; + #optionDecorative; + #overlayManager; + #saveButton; + #textarea; + #uiManager; + #previousAltText = null; + #resizeAC = null; + #svgElement = null; + #rectElement = null; + #container; + #telemetryData = null; + constructor({ + dialog, + optionDescription, + optionDecorative, + textarea, + cancelButton, + saveButton + }, container, overlayManager, eventBus) { + this.#dialog = dialog; + this.#optionDescription = optionDescription; + this.#optionDecorative = optionDecorative; + this.#textarea = textarea; + this.#cancelButton = cancelButton; + this.#saveButton = saveButton; + this.#overlayManager = overlayManager; + this.#eventBus = eventBus; + this.#container = container; + const onUpdateUIState = this.#updateUIState.bind(this); + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", event => { + if (event.target !== this.#textarea) { + event.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#finish.bind(this)); + saveButton.addEventListener("click", this.#save.bind(this)); + optionDescription.addEventListener("change", onUpdateUIState); + optionDecorative.addEventListener("change", onUpdateUIState); + this.#overlayManager.register(dialog); + } + #createSVGElement() { + if (this.#svgElement) { + return; + } + const svgFactory = new DOMSVGFactory(); + const svg = this.#svgElement = 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 = this.#rectElement = svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("fill", "black"); + this.#dialog.append(svg); + } + async editAltText(uiManager, editor) { + if (this.#currentEditor || !editor) { + return; + } + this.#createSVGElement(); + this.#hasUsedPointer = false; + this.#clickAC = new AbortController(); + const clickOpts = { + signal: this.#clickAC.signal + }, + onClick = this.#onClick.bind(this); + for (const element of [this.#optionDescription, this.#optionDecorative, this.#textarea, this.#saveButton, this.#cancelButton]) { + element.addEventListener("click", onClick, clickOpts); + } + const { + altText, + decorative + } = editor.altTextData; + if (decorative === true) { + this.#optionDecorative.checked = true; + this.#optionDescription.checked = false; + } else { + this.#optionDecorative.checked = false; + this.#optionDescription.checked = true; + } + this.#previousAltText = this.#textarea.value = altText?.trim() || ""; + this.#updateUIState(); + this.#currentEditor = editor; + this.#uiManager = uiManager; + this.#uiManager.removeEditListeners(); + this.#resizeAC = new AbortController(); + this.#eventBus._on("resize", this.#setPosition.bind(this), { + signal: this.#resizeAC.signal + }); + try { + await this.#overlayManager.open(this.#dialog); + this.#setPosition(); + } catch (ex) { + this.#close(); + throw ex; + } + } + #setPosition() { + if (!this.#currentEditor) { + return; + } + const dialog = this.#dialog; + const { + style + } = dialog; + const { + x: containerX, + y: containerY, + width: containerW, + height: containerH + } = this.#container.getBoundingClientRect(); + const { + innerWidth: windowW, + innerHeight: windowH + } = window; + const { + width: dialogW, + height: dialogH + } = dialog.getBoundingClientRect(); + const { + x, + y, + width, + height + } = this.#currentEditor.getClientDimensions(); + const MARGIN = 10; + const isLTR = this.#uiManager.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); + this.#rectElement.setAttribute("width", `${(xe - xs) / windowW}`); + this.#rectElement.setAttribute("height", `${(ye - ys) / windowH}`); + this.#rectElement.setAttribute("x", `${xs / windowW}`); + this.#rectElement.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 = ""; + } + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + this.#currentEditor._reportTelemetry(this.#telemetryData || { + action: "alt_text_cancel", + alt_text_keyboard: !this.#hasUsedPointer + }); + this.#telemetryData = null; + this.#removeOnClickListeners(); + this.#uiManager?.addEditListeners(); + this.#resizeAC?.abort(); + this.#resizeAC = null; + this.#currentEditor.altTextFinish(); + this.#currentEditor = null; + this.#uiManager = null; + } + #updateUIState() { + this.#textarea.disabled = this.#optionDecorative.checked; + } + #save() { + const altText = this.#textarea.value.trim(); + const decorative = this.#optionDecorative.checked; + this.#currentEditor.altTextData = { + altText, + decorative + }; + this.#telemetryData = { + action: "alt_text_save", + alt_text_description: !!altText, + alt_text_edit: !!this.#previousAltText && this.#previousAltText !== altText, + alt_text_decorative: decorative, + alt_text_keyboard: !this.#hasUsedPointer + }; + this.#finish(); + } + #onClick(evt) { + if (evt.detail === 0) { + return; + } + this.#hasUsedPointer = true; + this.#removeOnClickListeners(); + } + #removeOnClickListeners() { + this.#clickAC?.abort(); + this.#clickAC = null; + } + destroy() { + this.#uiManager = null; + this.#finish(); + this.#svgElement?.remove(); + this.#svgElement = this.#rectElement = null; + } +} + +;// ./web/annotation_editor_params.js + +class AnnotationEditorParams { + constructor(options, eventBus) { + this.eventBus = eventBus; + this.#bindListeners(options); + } + #bindListeners({ + editorFreeTextFontSize, + editorFreeTextColor, + editorInkColor, + editorInkThickness, + editorInkOpacity, + editorStampAddImage, + editorFreeHighlightThickness, + editorHighlightShowAll, + editorSignatureAddSignature + }) { + 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 +const PRECISION = 1e-1; +class CaretBrowsingMode { + #mainContainer; + #toolBarHeight = 0; + #viewerContainer; + constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) { + this.#mainContainer = mainContainer; + this.#viewerContainer = viewerContainer; + if (!toolbarContainer) { + return; + } + this.#toolBarHeight = toolbarContainer.getBoundingClientRect().height; + const toolbarObserver = new ResizeObserver(entries => { + for (const entry of entries) { + if (entry.target === toolbarContainer) { + this.#toolBarHeight = Math.floor(entry.borderBoxSize[0].blockSize); + break; + } + } + }); + toolbarObserver.observe(toolbarContainer); + abortSignal.addEventListener("abort", () => toolbarObserver.disconnect(), { + once: true + }); + } + #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; + } + #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; + } + #isVisible(rect) { + return rect.top >= this.#toolBarHeight && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && rect.right <= (window.innerWidth || document.documentElement.clientWidth); + } + #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]; + } + static #caretPositionFromPoint(x, y) { + if (!document.caretPositionFromPoint) { + const { + startContainer: offsetNode, + startOffset: offset + } = document.caretRangeFromPoint(x, y); + return { + offsetNode, + offset + }; + } + return document.caretPositionFromPoint(x, y); + } + #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 = CaretBrowsingMode.#caretPositionFromPoint(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 = CaretBrowsingMode.#caretPositionFromPoint(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); + } + } + #setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX) { + if (this.#isVisible(newLineElementRect)) { + this.#setCaretPositionHelper(selection, caretX, select, newLineElement, newLineElementRect); + return; + } + this.#mainContainer.addEventListener("scrollend", this.#setCaretPositionHelper.bind(this, selection, caretX, select, newLineElement, null), { + once: true + }); + newLineElement.scrollIntoView(); + } + #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 = this.#viewerContainer.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; + } + } + } + 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 (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) { + newLineElement = element; + break; + } + } + if (!newLineElement) { + const node = this.#getNodeOnNextPage(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] = this.#getCaretPosition(selection, isUp); + const { + parentElement + } = node; + this.#setCaretPosition(select, selection, parentElement, parentElement.getBoundingClientRect(), caretX); + return; + } + const [caretX, caretY] = this.#getCaretPosition(selection, isUp); + const newLineElementRect = newLineElement.getBoundingClientRect(); + if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) { + this.#setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX); + return; + } + while (nodeIterator()) { + const element = walker.currentNode.parentElement; + const elementRect = element.getBoundingClientRect(); + if (!this.#isOnSameLine(newLineElementRect, elementRect)) { + break; + } + if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) { + this.#setCaretPosition(select, selection, element, elementRect, caretX); + return; + } + } + this.#setCaretPosition(select, selection, newLineElement, newLineElementRect, caretX); + } +} + +;// ./web/download_manager.js + +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(); +} +class DownloadManager { + #openBlobUrls = new WeakMap(); + downloadData(data, filename, contentType) { + const blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + download(blobUrl, filename); + } + openOrDownloadData(data, filename, dest = null) { + const isPdfData = isPdfFile(filename); + const contentType = isPdfData ? "application/pdf" : ""; + if (isPdfData) { + let blobUrl = this.#openBlobUrls.get(data); + if (!blobUrl) { + blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + this.#openBlobUrls.set(data, blobUrl); + } + let viewerUrl; + viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename); + if (dest) { + viewerUrl += `#${escape(dest)}`; + } + try { + window.open(viewerUrl); + return true; + } catch (ex) { + console.error("openOrDownloadData:", ex); + URL.revokeObjectURL(blobUrl); + this.#openBlobUrls.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 + +class EditorUndoBar { + #closeButton = null; + #container; + #eventBus = null; + #focusTimeout = null; + #initController = null; + isOpen = false; + #message; + #showController = null; + #undoButton; + static #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" + }); + constructor({ + container, + message, + undoButton, + closeButton + }, eventBus) { + this.#container = container; + this.#message = message; + this.#undoButton = undoButton; + this.#closeButton = closeButton; + this.#eventBus = eventBus; + } + destroy() { + this.#initController?.abort(); + this.#initController = null; + this.hide(); + } + show(undoAction, messageData) { + if (!this.#initController) { + this.#initController = new AbortController(); + const opts = { + signal: this.#initController.signal + }; + const boundHide = this.hide.bind(this); + this.#container.addEventListener("contextmenu", noContextMenu, opts); + this.#closeButton.addEventListener("click", boundHide, opts); + this.#eventBus._on("beforeprint", boundHide, opts); + this.#eventBus._on("download", boundHide, opts); + } + this.hide(); + if (typeof messageData === "string") { + this.#message.setAttribute("data-l10n-id", EditorUndoBar.#l10nMessages[messageData]); + } else { + this.#message.setAttribute("data-l10n-id", EditorUndoBar.#l10nMessages._multiple); + this.#message.setAttribute("data-l10n-args", JSON.stringify({ + count: messageData + })); + } + this.isOpen = true; + this.#container.hidden = false; + this.#showController = new AbortController(); + this.#undoButton.addEventListener("click", () => { + undoAction(); + this.hide(); + }, { + signal: this.#showController.signal + }); + this.#focusTimeout = setTimeout(() => { + this.#container.focus(); + this.#focusTimeout = null; + }, 100); + } + hide() { + if (!this.isOpen) { + return; + } + this.isOpen = false; + this.#container.hidden = true; + this.#showController?.abort(); + this.#showController = null; + if (this.#focusTimeout) { + clearTimeout(this.#focusTimeout); + this.#focusTimeout = null; + } + } +} + +;// ./web/overlay_manager.js +class OverlayManager { + #overlays = new WeakMap(); + #active = null; + get active() { + return this.#active; + } + async register(dialog, canForceClose = false) { + if (typeof dialog !== "object") { + throw new Error("Not enough parameters."); + } else if (this.#overlays.has(dialog)) { + throw new Error("The overlay is already registered."); + } + this.#overlays.set(dialog, { + canForceClose + }); + dialog.addEventListener("cancel", ({ + target + }) => { + if (this.#active === target) { + this.#active = null; + } + }); + } + async open(dialog) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (this.#active) { + if (this.#active === dialog) { + throw new Error("The overlay is already active."); + } else if (this.#overlays.get(dialog).canForceClose) { + await this.close(); + } else { + throw new Error("Another overlay is currently active."); + } + } + this.#active = dialog; + dialog.showModal(); + } + async close(dialog = this.#active) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (!this.#active) { + throw new Error("The overlay is currently not active."); + } else if (this.#active !== dialog) { + throw new Error("Another overlay is currently active."); + } + dialog.close(); + this.#active = null; + } + async closeIfActive(dialog) { + if (this.#active === dialog) { + await this.close(dialog); + } + } +} + +;// ./web/password_prompt.js + +class PasswordPrompt { + #activeCapability = null; + #updateCallback = null; + #reason = null; + constructor(options, overlayManager, isViewerEmbedded = false) { + 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", this.#verify.bind(this)); + this.cancelButton.addEventListener("click", this.close.bind(this)); + this.input.addEventListener("keydown", e => { + if (e.keyCode === 13) { + this.#verify(); + } + }); + this.overlayManager.register(this.dialog, true); + this.dialog.addEventListener("close", this.#cancel.bind(this)); + } + async open() { + await this.#activeCapability?.promise; + this.#activeCapability = Promise.withResolvers(); + try { + await this.overlayManager.open(this.dialog); + } catch (ex) { + this.#activeCapability.resolve(); + throw ex; + } + const passwordIncorrect = this.#reason === 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); + } + #verify() { + const password = this.input.value; + if (password?.length > 0) { + this.#invokeCallback(password); + } + } + #cancel() { + this.#invokeCallback(new Error("PasswordPrompt cancelled.")); + this.#activeCapability.resolve(); + } + #invokeCallback(password) { + if (!this.#updateCallback) { + return; + } + this.close(); + this.input.value = ""; + this.#updateCallback(password); + this.#updateCallback = null; + } + async setUpdateCallback(updateCallback, reason) { + if (this.#activeCapability) { + await this.#activeCapability.promise; + } + this.#updateCallback = updateCallback; + this.#reason = reason; + } +} + +;// ./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, hidden = 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, show = 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, hasAnyNesting = 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(treeItem = 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 + + +class PDFAttachmentViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.downloadManager = options.downloadManager; + this.eventBus._on("fileattachmentannotation", this.#appendAttachment.bind(this)); + } + reset(keepRenderedCapability = 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, { + content, + description, + filename + }) { + if (description) { + element.title = description; + } + element.onclick = () => { + this.downloadManager.openOrDownloadData(content, filename); + return false; + }; + } + render({ + attachments, + keepRenderedCapability = false + }) { + 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); + } + #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 + +const CSS_CLASS_GRAB = "grab-to-pan-grab"; +class GrabToPan { + #activateAC = null; + #mouseDownAC = null; + #scrollAC = null; + constructor({ + element + }) { + this.element = element; + this.document = element.ownerDocument; + const overlay = this.overlay = document.createElement("div"); + overlay.className = "grab-to-pan-grabbing"; + } + activate() { + if (!this.#activateAC) { + this.#activateAC = new AbortController(); + this.element.addEventListener("mousedown", this.#onMouseDown.bind(this), { + capture: true, + signal: this.#activateAC.signal + }); + this.element.classList.add(CSS_CLASS_GRAB); + } + } + deactivate() { + if (this.#activateAC) { + this.#activateAC.abort(); + this.#activateAC = null; + this.#endPan(); + this.element.classList.remove(CSS_CLASS_GRAB); + } + } + toggle() { + if (this.#activateAC) { + this.deactivate(); + } else { + this.activate(); + } + } + ignoreTarget(node) { + return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option"); + } + #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; + this.#mouseDownAC = new AbortController(); + const boundEndPan = this.#endPan.bind(this), + mouseOpts = { + capture: true, + signal: this.#mouseDownAC.signal + }; + this.document.addEventListener("mousemove", this.#onMouseMove.bind(this), mouseOpts); + this.document.addEventListener("mouseup", boundEndPan, mouseOpts); + this.#scrollAC = new AbortController(); + this.element.addEventListener("scroll", boundEndPan, { + capture: true, + signal: this.#scrollAC.signal + }); + stopEvent(event); + const focusedElement = document.activeElement; + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); + } + } + #onMouseMove(event) { + this.#scrollAC?.abort(); + this.#scrollAC = null; + if (!(event.buttons & 1)) { + this.#endPan(); + 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); + } + } + #endPan() { + this.#mouseDownAC?.abort(); + this.#mouseDownAC = null; + this.#scrollAC?.abort(); + this.#scrollAC = null; + this.overlay.remove(); + } +} + +;// ./web/pdf_cursor_tools.js + + + +class PDFCursorTools { + #active = CursorTool.SELECT; + #prevActive = null; + constructor({ + container, + eventBus, + cursorToolOnLoad = CursorTool.SELECT + }) { + this.container = container; + this.eventBus = eventBus; + this.#addEventListeners(); + Promise.resolve().then(() => { + this.switchTool(cursorToolOnLoad); + }); + } + get activeTool() { + return this.#active; + } + switchTool(tool) { + if (this.#prevActive !== null) { + return; + } + this.#switchTool(tool); + } + #switchTool(tool, disabled = false) { + if (tool === this.#active) { + if (this.#prevActive !== null) { + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool, + disabled + }); + } + return; + } + const disableActiveTool = () => { + switch (this.#active) { + 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: + console.error(`switchTool: "${tool}" is an unsupported value.`); + return; + } + this.#active = tool; + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool, + disabled + }); + } + #addEventListeners() { + this.eventBus._on("switchcursortool", evt => { + if (!evt.reset) { + this.switchTool(evt.tool); + } else if (this.#prevActive !== null) { + annotationEditorMode = AnnotationEditorType.NONE; + presentationModeState = PresentationModeState.NORMAL; + enableActive(); + } + }); + let annotationEditorMode = AnnotationEditorType.NONE, + presentationModeState = PresentationModeState.NORMAL; + const disableActive = () => { + this.#prevActive ??= this.#active; + this.#switchTool(CursorTool.SELECT, true); + }; + const enableActive = () => { + if (this.#prevActive !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) { + this.#switchTool(this.#prevActive); + this.#prevActive = null; + } + }; + this.eventBus._on("annotationeditormodechanged", ({ + mode + }) => { + annotationEditorMode = mode; + if (mode === AnnotationEditorType.NONE) { + enableActive(); + } else { + disableActive(); + } + }); + this.eventBus._on("presentationmodechanged", ({ + state + }) => { + presentationModeState = state; + if (state === PresentationModeState.NORMAL) { + enableActive(); + } else if (state === PresentationModeState.FULLSCREEN) { + disableActive(); + } + }); + } + get _handTool() { + return shadow(this, "_handTool", new GrabToPan({ + element: this.container + })); + } +} + +;// ./web/pdf_document_properties.js + + +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}`]; +} +class PDFDocumentProperties { + #fieldData = null; + constructor({ + dialog, + fields, + closeButton + }, overlayManager, eventBus, l10n, fileNameLookup) { + this.dialog = dialog; + this.fields = fields; + this.overlayManager = overlayManager; + this.l10n = l10n; + this._fileNameLookup = fileNameLookup; + this.#reset(); + 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]); + const currentPageNumber = this._currentPageNumber; + const pagesRotation = this._pagesRotation; + if (this.#fieldData && currentPageNumber === this.#fieldData._currentPageNumber && pagesRotation === this.#fieldData._pagesRotation) { + this.#updateUI(); + return; + } + const [{ + info, + contentLength + }, pdfPage] = await Promise.all([this.pdfDocument.getMetadata(), this.pdfDocument.getPage(currentPageNumber)]); + const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), this.#parseFileSize(contentLength), this.#parseDate(info.CreationDate), this.#parseDate(info.ModDate), this.#parsePageSize(getPageSizeInches(pdfPage), pagesRotation), this.#parseLinearization(info.IsLinearized)]); + this.#fieldData = Object.freeze({ + fileName, + fileSize, + title: info.Title, + author: info.Author, + subject: info.Subject, + keywords: info.Keywords, + creationDate, + modificationDate, + creator: info.Creator, + producer: info.Producer, + version: info.PDFFormatVersion, + pageCount: this.pdfDocument.numPages, + pageSize, + linearized: isLinearized, + _currentPageNumber: currentPageNumber, + _pagesRotation: pagesRotation + }); + this.#updateUI(); + const { + length + } = await this.pdfDocument.getDownloadInfo(); + if (contentLength === length) { + return; + } + const data = Object.assign(Object.create(null), this.#fieldData); + data.fileSize = await this.#parseFileSize(length); + this.#fieldData = Object.freeze(data); + this.#updateUI(); + } + async close() { + this.overlayManager.close(this.dialog); + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.#reset(); + this.#updateUI(); + } + if (!pdfDocument) { + return; + } + this.pdfDocument = pdfDocument; + this._dataAvailableCapability.resolve(); + } + #reset() { + this.pdfDocument = null; + this.#fieldData = null; + this._dataAvailableCapability = Promise.withResolvers(); + this._currentPageNumber = 1; + this._pagesRotation = 0; + } + #updateUI() { + if (this.#fieldData && this.overlayManager.active !== this.dialog) { + return; + } + for (const id in this.fields) { + const content = this.#fieldData?.[id]; + this.fields[id].textContent = content || content === 0 ? content : "-"; + } + } + async #parseFileSize(b = 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 #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 #parseDate(inputDate) { + const dateObj = PDFDateString.toDateObject(inputDate); + return dateObj ? this.l10n.get("pdfjs-document-properties-date-time-string", { + dateObj: dateObj.valueOf() + }) : undefined; + } + #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 + + +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]; +} +class PDFFindController { + #state = null; + #updateMatchesCountOnProgress = true; + #visitedPagesCount = 0; + constructor({ + linkService, + eventBus, + updateMatchesCountOnProgress = true + }) { + this._linkService = linkService; + this._eventBus = eventBus; + this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress; + this.onIsPageVisible = null; + this.#reset(); + eventBus._on("find", this.#onFind.bind(this)); + eventBus._on("findbarclose", 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 this.#state; + } + setDocument(pdfDocument) { + if (this._pdfDocument) { + this.#reset(); + } + if (!pdfDocument) { + return; + } + this._pdfDocument = pdfDocument; + this._firstPageCapability.resolve(); + } + #onFind(state) { + if (!state) { + return; + } + const pdfDocument = this._pdfDocument; + const { + type + } = state; + if (this.#state === null || this.#shouldDirtyMatch(state)) { + this._dirtyMatch = true; + } + this.#state = state; + if (type !== "highlightallchange") { + this.#updateUIState(FindState.PENDING); + } + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + this.#extractText(); + const findbarClosed = !this._highlightMatches; + const pendingTimeout = !!this._findTimeout; + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (!type) { + this._findTimeout = setTimeout(() => { + this.#nextMatch(); + this._findTimeout = null; + }, FIND_TIMEOUT); + } else if (this._dirtyMatch) { + this.#nextMatch(); + } else if (type === "again") { + this.#nextMatch(); + if (findbarClosed && this.#state.highlightAll) { + this.#updateAllPages(); + } + } else if (type === "highlightallchange") { + if (pendingTimeout) { + this.#nextMatch(); + } else { + this._highlightMatches = true; + } + this.#updateAllPages(); + } else { + this.#nextMatch(); + } + }); + } + scrollMatchIntoView({ + element = null, + selectedLeft = 0, + pageIndex = -1, + matchIndex = -1 + }) { + if (!this._scrollMatches || !element) { + return; + } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) { + return; + } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) { + return; + } + this._scrollMatches = false; + const spot = { + top: MATCH_SCROLL_OFFSET_TOP, + left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT + }; + scrollIntoView(element, spot, true); + } + #reset() { + this._highlightMatches = false; + this._scrollMatches = false; + this._pdfDocument = null; + this._pageMatches = []; + this._pageMatchesLength = []; + this.#visitedPagesCount = 0; + this.#state = null; + this._selected = { + pageIdx: -1, + matchIdx: -1 + }; + this._offset = { + pageIdx: null, + matchIdx: null, + wrapped: false + }; + this._extractTextPromises = []; + 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(); + } + get #query() { + const { + query + } = this.#state; + 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]); + } + #shouldDirtyMatch(state) { + const newQuery = state.query, + prevQuery = this.#state.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; + } + #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; + } + #convertToRegExpString(query, hasDiacritics) { + const { + matchDiacritics + } = this.#state; + 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) { + if (!this.#state) { + return; + } + const query = this.#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(({ + index, + length + }) => { + const [matchPos, matchLen] = getOriginalIndex(diffs, index, length); + if (matchLen) { + matches.push(matchPos); + matchesLength.push(matchLen); + } + }); + if (this.#state.highlightAll) { + this.#updatePage(pageIndex); + } + if (this._resumePageIdx === pageIndex) { + this._resumePageIdx = null; + this.#nextPageMatch(); + } + const pageMatchesCount = matches.length; + this._matchesCountTotal += pageMatchesCount; + if (this.#updateMatchesCountOnProgress) { + if (pageMatchesCount > 0) { + this.#updateUIResultsCount(); + } + } else if (++this.#visitedPagesCount === this._linkService.pagesCount) { + this.#updateUIResultsCount(); + } + } + match(query, pageContent, pageIndex) { + const hasDiacritics = this._hasDiacritics[pageIndex]; + let isUnicode = false; + 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 { + caseSensitive, + entireWord + } = this.#state; + const flags = `g${isUnicode ? "u" : ""}${caseSensitive ? "" : "i"}`; + query = new RegExp(query, flags); + const matches = []; + let match; + while ((match = query.exec(pageContent)) !== null) { + if (entireWord && !this.#isEntireWord(pageContent, match.index, match[0].length)) { + continue; + } + matches.push({ + index: match.index, + length: match[0].length + }); + } + return matches; + } + #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 => { + console.error(`Unable to get text content for page ${i + 1}`, reason); + this._pageContents[i] = ""; + this._pageDiffs[i] = null; + this._hasDiacritics[i] = false; + resolve(); + }); + }); + } + } + #updatePage(index) { + if (this._scrollMatches && this._selected.pageIdx === index) { + this._linkService.page = index + 1; + } + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: index + }); + } + #updateAllPages() { + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: -1 + }); + } + #nextMatch() { + const previous = this.#state.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; + this.#visitedPagesCount = 0; + this._matchesCountTotal = 0; + this.#updateAllPages(); + 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 = this.#query; + if (query.length === 0) { + this.#updateUIState(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; + this.#updateMatch(true); + return; + } + this.#advanceOffsetPage(previous); + } + this.#nextPageMatch(); + } + #matchesReady(matches) { + const offset = this._offset; + const numMatches = matches.length; + const previous = this.#state.findPrevious; + if (numMatches) { + offset.matchIdx = previous ? numMatches - 1 : 0; + this.#updateMatch(true); + return true; + } + this.#advanceOffsetPage(previous); + if (offset.wrapped) { + offset.matchIdx = null; + if (this._pagesToSearch < 0) { + this.#updateMatch(false); + return true; + } + } + return false; + } + #nextPageMatch() { + if (this._resumePageIdx !== null) { + console.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 (!this.#matchesReady(matches)); + } + #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; + } + } + #updateMatch(found = 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) { + this.#updatePage(previousPage); + } + } + this.#updateUIState(state, this.#state.findPrevious); + if (this._selected.pageIdx !== -1) { + this._scrollMatches = true; + this.#updatePage(this._selected.pageIdx); + } + } + #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; + } + this.#updateUIState(FindState.FOUND); + this._highlightMatches = false; + this.#updateAllPages(); + }); + } + #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 + }; + } + #updateUIResultsCount() { + this._eventBus.dispatch("updatefindmatchescount", { + source: this, + matchesCount: this.#requestMatchesCount() + }); + } + #updateUIState(state, previous = false) { + if (!this.#updateMatchesCountOnProgress && (this.#visitedPagesCount !== this._linkService.pagesCount || state === FindState.PENDING)) { + return; + } + this._eventBus.dispatch("updatefindcontrolstate", { + source: this, + state, + previous, + entireWord: this.#state?.entireWord ?? null, + matchesCount: this.#requestMatchesCount(), + rawQuery: this.#state?.query ?? null + }); + } +} + +;// ./web/pdf_find_bar.js + + +const MATCHES_COUNT_LIMIT = 1000; +class PDFFindBar { + #mainContainer; + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + constructor(options, mainContainer, eventBus) { + this.opened = false; + this.bar = options.bar; + this.toggleButton = options.toggleButton; + this.findField = options.findField; + this.highlightAll = options.highlightAllCheckbox; + this.caseSensitive = options.caseSensitiveCheckbox; + 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; + this.#mainContainer = mainContainer; + const checkedInputs = new Map([[this.highlightAll, "highlightallchange"], [this.caseSensitive, "casesensitivitychange"], [this.entireWord, "entirewordchange"], [this.matchDiacritics, "diacriticmatchingchange"]]); + this.toggleButton.addEventListener("click", () => { + this.toggle(); + }); + this.findField.addEventListener("input", () => { + this.dispatchEvent(""); + }); + this.bar.addEventListener("keydown", ({ + keyCode, + shiftKey, + target + }) => { + 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(); + 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); + }); + } + } + reset() { + this.updateUIState(); + } + dispatchEvent(type, findPrev = false) { + this.eventBus.dispatch("find", { + source: this, + type, + query: this.findField.value, + caseSensitive: this.caseSensitive.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({ + current = 0, + total = 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) { + this.#resizeObserver.observe(this.#mainContainer); + this.#resizeObserver.observe(this.bar); + this.opened = true; + toggleExpandedBtn(this.toggleButton, true, this.bar); + } + this.findField.select(); + this.findField.focus(); + } + close() { + if (!this.opened) { + return; + } + this.#resizeObserver.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(); + } + } + #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 + + + +const HASH_CHANGE_TIMEOUT = 1000; +const POSITION_UPDATED_THRESHOLD = 50; +const UPDATE_VIEWAREA_TIMEOUT = 1000; +function getCurrentHash() { + return document.location.hash; +} +class PDFHistory { + #eventAbortController = null; + constructor({ + linkService, + eventBus + }) { + 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({ + fingerprint, + resetHistory = false, + updateUrl = false + }) { + if (!fingerprint || typeof fingerprint !== "string") { + console.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; + this.#bindEvents(); + 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 (!this.#isValidState(state, true) || resetHistory) { + const { + hash, + page, + rotation + } = this.#parseCurrentHash(true); + if (!hash || reInitialized || resetHistory) { + this.#pushOrReplaceState(null, true); + return; + } + this.#pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + const destination = state.destination; + this.#updateInternalState(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) { + this.#pageHide(); + this._initialized = false; + this.#unbindEvents(); + } + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._initialBookmark = null; + this._initialRotation = null; + } + push({ + namedDest = null, + explicitDest, + pageNumber + }) { + if (!this._initialized) { + return; + } + if (namedDest && typeof namedDest !== "string") { + console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`); + return; + } else if (!Array.isArray(explicitDest)) { + console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`); + return; + } else if (!this.#isValidPage(pageNumber)) { + if (pageNumber !== null || this._destination) { + console.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; + } + this.#pushOrReplaceState({ + 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 (!this.#isValidPage(pageNumber)) { + console.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`); + return; + } + if (this._destination?.page === pageNumber) { + return; + } + if (this._popStateInProgress) { + return; + } + this.#pushOrReplaceState({ + 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; + } + this.#tryPushCurrentPosition(); + } + back() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this.#isValidState(state) && state.uid > 0) { + window.history.back(); + } + } + forward() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this.#isValidState(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; + } + #pushOrReplaceState(destination, forceReplace = false) { + const shouldReplace = forceReplace || !this._destination; + const newState = { + fingerprint: this._fingerprint, + uid: shouldReplace ? this._uid : this._uid + 1, + destination + }; + this.#updateInternalState(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); + } + } + #tryPushCurrentPosition(temporary = 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) { + this.#pushOrReplaceState(position); + return; + } + if (this._destination.temporary) { + this.#pushOrReplaceState(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; + } + this.#pushOrReplaceState(position, forceReplace); + } + #isValidPage(val) { + return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount; + } + #isValidState(state, checkReload = 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; + } + #updateInternalState(destination, uid, removeTemporary = 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; + } + #parseCurrentHash(checkNameddest = false) { + const hash = unescape(getCurrentHash()).substring(1); + const params = parseQueryString(hash); + const nameddest = params.get("nameddest") || ""; + let page = params.get("page") | 0; + if (!this.#isValidPage(page) || checkNameddest && nameddest.length > 0) { + page = null; + } + return { + hash, + page, + rotation: this.linkService.rotation + }; + } + #updateViewarea({ + location + }) { + 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) { + this.#tryPushCurrentPosition(true); + } + this._updateViewareaTimeout = null; + }, UPDATE_VIEWAREA_TIMEOUT); + } + } + #popState({ + state + }) { + const newHash = getCurrentHash(), + hashChanged = this._currentHash !== newHash; + this._currentHash = newHash; + if (!state) { + this._uid++; + const { + hash, + page, + rotation + } = this.#parseCurrentHash(); + this.#pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + if (!this.#isValidState(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; + this.#updateInternalState(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) { + this.linkService.setHash(destination.hash); + } else if (destination.page) { + this.linkService.page = destination.page; + } + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + #pageHide() { + if (!this._destination || this._destination.temporary) { + this.#tryPushCurrentPosition(); + } + } + #bindEvents() { + if (this.#eventAbortController) { + return; + } + this.#eventAbortController = new AbortController(); + const { + signal + } = this.#eventAbortController; + this.eventBus._on("updateviewarea", this.#updateViewarea.bind(this), { + signal + }); + window.addEventListener("popstate", this.#popState.bind(this), { + signal + }); + window.addEventListener("pagehide", this.#pageHide.bind(this), { + signal + }); + } + #unbindEvents() { + this.#eventAbortController?.abort(); + this.#eventAbortController = 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 + +class PDFLayerViewer extends BaseTreeViewer { + constructor(options) { + super(options); + this.eventBus._on("optionalcontentconfigchanged", evt => { + this.#updateLayers(evt.promise); + }); + this.eventBus._on("resetlayers", () => { + this.#updateLayers(); + }); + 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, { + groupId, + input + }) { + 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, { + name = null + }) { + 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, { + name = null + }) { + super._addToggleButton(div, name === null); + } + _toggleAllTreeItems() { + if (!this._optionalContentConfig) { + return; + } + super._toggleAllTreeItems(); + } + render({ + optionalContentConfig, + pdfDocument + }) { + 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 #updateLayers(promise = 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, { + url, + newWindow, + action, + attachment, + dest, + setOCGState + }) { + 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, { + bold, + italic + }) { + if (bold) { + element.style.fontWeight = "bold"; + } + if (italic) { + element.style.fontStyle = "italic"; + } + } + _addToggleButton(div, { + count, + items + }) { + 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({ + outline, + pdfDocument + }) { + 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 + + +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; +class PDFPresentationMode { + #state = PresentationModeState.UNKNOWN; + #args = null; + #fullscreenChangeAbortController = null; + #windowAbortController = null; + constructor({ + container, + pdfViewer, + eventBus + }) { + 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; + } + this.#addFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.CHANGING); + const promise = container.requestFullscreen(); + this.#args = { + 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."); + this.#args.spreadMode = pdfViewer.spreadMode; + } + if (pdfViewer.annotationEditorMode !== AnnotationEditorType.DISABLE) { + this.#args.annotationEditorMode = pdfViewer.annotationEditorMode; + } + try { + await promise; + pdfViewer.focus(); + return true; + } catch { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.NORMAL); + } + return false; + } + get active() { + return this.#state === PresentationModeState.CHANGING || this.#state === PresentationModeState.FULLSCREEN; + } + #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) { + this.#resetMouseScrollState(); + } + this.mouseScrollDelta += delta; + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + const totalDelta = this.mouseScrollDelta; + this.#resetMouseScrollState(); + const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage(); + if (success) { + this.mouseScrollTimeStamp = currentTime; + } + } + } + #notifyStateChange(state) { + this.#state = state; + this.eventBus.dispatch("presentationmodechanged", { + source: this, + state + }); + } + #enter() { + this.#notifyStateChange(PresentationModeState.FULLSCREEN); + this.container.classList.add(ACTIVE_SELECTOR); + setTimeout(() => { + this.pdfViewer.scrollMode = ScrollMode.PAGE; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = SpreadMode.NONE; + } + this.pdfViewer.currentPageNumber = this.#args.pageNumber; + this.pdfViewer.currentScaleValue = "page-fit"; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = { + mode: AnnotationEditorType.NONE + }; + } + }, 0); + this.#addWindowListeners(); + this.#showControls(); + this.contextMenuOpen = false; + document.getSelection().empty(); + } + #exit() { + const pageNumber = this.pdfViewer.currentPageNumber; + this.container.classList.remove(ACTIVE_SELECTOR); + setTimeout(() => { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(PresentationModeState.NORMAL); + this.pdfViewer.scrollMode = this.#args.scrollMode; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = this.#args.spreadMode; + } + this.pdfViewer.currentScaleValue = this.#args.scaleValue; + this.pdfViewer.currentPageNumber = pageNumber; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = { + mode: this.#args.annotationEditorMode + }; + } + this.#args = null; + }, 0); + this.#removeWindowListeners(); + this.#hideControls(); + this.#resetMouseScrollState(); + this.contextMenuOpen = false; + } + #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(); + } + } + #contextMenu() { + this.contextMenuOpen = true; + } + #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); + } + #hideControls() { + if (!this.controlsTimeout) { + return; + } + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + } + #resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + } + #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; + } + } + #addWindowListeners() { + if (this.#windowAbortController) { + return; + } + this.#windowAbortController = new AbortController(); + const { + signal + } = this.#windowAbortController; + const touchSwipeBind = this.#touchSwipe.bind(this); + window.addEventListener("mousemove", this.#showControls.bind(this), { + signal + }); + window.addEventListener("mousedown", this.#mouseDown.bind(this), { + signal + }); + window.addEventListener("wheel", this.#mouseWheel.bind(this), { + passive: false, + signal + }); + window.addEventListener("keydown", this.#resetMouseScrollState.bind(this), { + signal + }); + window.addEventListener("contextmenu", this.#contextMenu.bind(this), { + signal + }); + window.addEventListener("touchstart", touchSwipeBind, { + signal + }); + window.addEventListener("touchmove", touchSwipeBind, { + signal + }); + window.addEventListener("touchend", touchSwipeBind, { + signal + }); + } + #removeWindowListeners() { + this.#windowAbortController?.abort(); + this.#windowAbortController = null; + } + #addFullscreenChangeListeners() { + if (this.#fullscreenChangeAbortController) { + return; + } + this.#fullscreenChangeAbortController = new AbortController(); + window.addEventListener("fullscreenchange", () => { + if (document.fullscreenElement) { + this.#enter(); + } else { + this.#exit(); + } + }, { + signal: this.#fullscreenChangeAbortController.signal + }); + } + #removeFullscreenChangeListeners() { + this.#fullscreenChangeAbortController?.abort(); + this.#fullscreenChangeAbortController = null; + } +} + +;// ./web/xfa_layer_builder.js + +class XfaLayerBuilder { + constructor({ + pdfPage, + annotationStorage = null, + linkService, + xfaHtml = null + }) { + this.pdfPage = pdfPage; + this.annotationStorage = annotationStorage; + this.linkService = linkService; + this.xfaHtml = xfaHtml; + this.div = null; + this._cancelled = false; + } + async render({ + viewport, + intent = "display" + }) { + 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); + } +} + +;// ./web/pdf_print_service.js + + +let activeService = null; +let dialog = null; +let overlayManager = null; +let viewerApp = { + initialized: false +}; +function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { + const scratchCanvas = activeService.scratchCanvas; + const PRINT_UNITS = printResolution / PixelsPerInch.PDF; + 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 ([pdfPage, printAnnotationStorage]) { + 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({ + pdfDocument, + pagesOverview, + printContainer, + printResolution, + printAnnotationStoragePromise = null + }) { + this.pdfDocument = pdfDocument; + this.pagesOverview = pagesOverview; + this.printContainer = printContainer; + this._printResolution = printResolution || 150; + this._optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({ + intent: "print" + }); + this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve(); + this.currentPage = -1; + this.scratchCanvas = document.createElement("canvas"); + } + layout() { + this.throwIfInactive(); + const body = document.querySelector("body"); + body.setAttribute("data-pdfjsprinting", true); + const { + width, + height + } = this.pagesOverview[0]; + const hasEqualPageSizes = this.pagesOverview.every(size => size.width === width && size.height === height); + if (!hasEqualPageSizes) { + console.warn("Not all pages have the same size. The printed result may be incorrect!"); + } + this.pageStyleSheet = document.createElement("style"); + this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`; + body.append(this.pageStyleSheet); + } + destroy() { + if (activeService !== this) { + return; + } + this.printContainer.textContent = ""; + const body = document.querySelector("body"); + body.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); + }); + } + renderPages() { + if (this.pdfDocument.isPureXfa) { + getXfaHtmlForPrinting(this.printContainer, this.pdfDocument); + return Promise.resolve(); + } + const pageCount = this.pagesOverview.length; + const renderNextPage = (resolve, reject) => { + this.throwIfInactive(); + if (++this.currentPage >= pageCount) { + renderProgress(pageCount, pageCount); + resolve(); + return; + } + const index = this.currentPage; + renderProgress(index, pageCount); + renderPage(this, this.pdfDocument, index + 1, 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); + setTimeout(resolve, 20); + }, 0); + }); + } + get active() { + return this === activeService; + } + throwIfInactive() { + if (!this.active) { + throw new Error("This print request was cancelled or completed."); + } + } +} +const print = window.print; +window.print = function () { + if (activeService) { + console.warn("Ignored window.print() because of a pending print job."); + return; + } + ensureOverlay().then(function () { + if (activeService) { + overlayManager.open(dialog); + } + }); + try { + dispatchEvent("beforeprint"); + } finally { + if (!activeService) { + console.error("Expected print service to be initialized."); + ensureOverlay().then(function () { + overlayManager.closeIfActive(dialog); + }); + } else { + const activeServiceOnEntry = activeService; + activeService.renderPages().then(() => 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) { + 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 + })); +} +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."); + } + return activeService = new PDFPrintService(params); + } +} + +;// ./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, preRenderExtra = false, ignoreDetailViews = 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; + } + console.error("renderView:", reason); + }); + break; + } + return true; + } +} + +;// ./web/pdf_scripting_manager.js + + +class PDFScriptingManager { + #closeCapability = null; + #destroyCapability = null; + #docProperties = null; + #eventAbortController = null; + #eventBus = null; + #externalServices = null; + #pdfDocument = null; + #pdfViewer = null; + #ready = false; + #scripting = null; + #willPrintCapability = null; + constructor({ + eventBus, + externalServices = null, + docProperties = null + }) { + this.#eventBus = eventBus; + this.#externalServices = externalServices; + this.#docProperties = docProperties; + } + setViewer(pdfViewer) { + this.#pdfViewer = pdfViewer; + } + async setDocument(pdfDocument) { + if (this.#pdfDocument) { + await this.#destroyScripting(); + } + this.#pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]); + if (!objects && !docActions) { + await this.#destroyScripting(); + return; + } + if (pdfDocument !== this.#pdfDocument) { + return; + } + try { + this.#scripting = this.#initScripting(); + } catch (error) { + console.error("setDocument:", error); + await this.#destroyScripting(); + return; + } + const eventBus = this.#eventBus; + this.#eventAbortController = new AbortController(); + const { + signal + } = this.#eventAbortController; + eventBus._on("updatefromsandbox", event => { + if (event?.source === window) { + this.#updateFromSandbox(event.detail); + } + }, { + signal + }); + eventBus._on("dispatcheventinsandbox", event => { + this.#scripting?.dispatchEventInSandbox(event.detail); + }, { + signal + }); + eventBus._on("pagechanging", ({ + pageNumber, + previous + }) => { + if (pageNumber === previous) { + return; + } + this.#dispatchPageClose(previous); + this.#dispatchPageOpen(pageNumber); + }, { + signal + }); + eventBus._on("pagerendered", ({ + pageNumber + }) => { + if (!this._pageOpenPending.has(pageNumber)) { + return; + } + if (pageNumber !== this.#pdfViewer.currentPageNumber) { + return; + } + this.#dispatchPageOpen(pageNumber); + }, { + signal + }); + eventBus._on("pagesdestroy", async () => { + await this.#dispatchPageClose(this.#pdfViewer.currentPageNumber); + await this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillClose" + }); + this.#closeCapability?.resolve(); + }, { + signal + }); + try { + const docProperties = await this.#docProperties(pdfDocument); + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting.createSandbox({ + objects, + calculationOrder, + appInfo: { + platform: navigator.platform, + language: navigator.language + }, + docInfo: { + ...docProperties, + actions: docActions + } + }); + eventBus.dispatch("sandboxcreated", { + source: this + }); + } catch (error) { + console.error("setDocument:", error); + await this.#destroyScripting(); + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "Open" + }); + await this.#dispatchPageOpen(this.#pdfViewer.currentPageNumber, true); + Promise.resolve().then(() => { + if (pdfDocument === this.#pdfDocument) { + this.#ready = true; + } + }); + } + async dispatchWillSave() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillSave" + }); + } + async dispatchDidSave() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidSave" + }); + } + async dispatchWillPrint() { + if (!this.#scripting) { + return; + } + await this.#willPrintCapability?.promise; + this.#willPrintCapability = Promise.withResolvers(); + try { + await this.#scripting.dispatchEventInSandbox({ + id: "doc", + name: "WillPrint" + }); + } catch (ex) { + this.#willPrintCapability.resolve(); + this.#willPrintCapability = null; + throw ex; + } + await this.#willPrintCapability.promise; + } + async dispatchDidPrint() { + return this.#scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidPrint" + }); + } + get destroyPromise() { + return this.#destroyCapability?.promise || null; + } + get ready() { + return this.#ready; + } + get _pageOpenPending() { + return shadow(this, "_pageOpenPending", new Set()); + } + get _visitedPages() { + return shadow(this, "_visitedPages", new Map()); + } + async #updateFromSandbox(detail) { + const pdfViewer = this.#pdfViewer; + const isInPresentationMode = pdfViewer.isInPresentationMode || pdfViewer.isChangingPresentationMode; + const { + id, + siblings, + command, + value + } = detail; + if (!id) { + switch (command) { + case "clear": + console.clear(); + break; + case "error": + console.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; + this.#eventBus.dispatch("print", { + source: this + }); + break; + case "println": + console.log(value); + break; + case "zoom": + if (!isInPresentationMode) { + pdfViewer.currentScaleValue = value; + } + break; + case "SaveAs": + this.#eventBus.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": + this.#willPrintCapability?.resolve(); + this.#willPrintCapability = 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 { + this.#pdfDocument?.annotationStorage.setValue(elementId, detail); + } + } + } + async #dispatchPageOpen(pageNumber, initialize = false) { + const pdfDocument = this.#pdfDocument, + visitedPages = this._visitedPages; + if (initialize) { + this.#closeCapability = Promise.withResolvers(); + } + if (!this.#closeCapability) { + return; + } + const pageView = this.#pdfViewer.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 !== this.#pdfDocument) { + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageOpen", + pageNumber, + actions + }); + })(); + visitedPages.set(pageNumber, actionsPromise); + } + async #dispatchPageClose(pageNumber) { + const pdfDocument = this.#pdfDocument, + visitedPages = this._visitedPages; + if (!this.#closeCapability) { + return; + } + if (this._pageOpenPending.has(pageNumber)) { + return; + } + const actionsPromise = visitedPages.get(pageNumber); + if (!actionsPromise) { + return; + } + visitedPages.set(pageNumber, null); + await actionsPromise; + if (pdfDocument !== this.#pdfDocument) { + return; + } + await this.#scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageClose", + pageNumber + }); + } + #initScripting() { + this.#destroyCapability = Promise.withResolvers(); + if (this.#scripting) { + throw new Error("#initScripting: Scripting already exists."); + } + return this.#externalServices.createScripting(); + } + async #destroyScripting() { + if (!this.#scripting) { + this.#pdfDocument = null; + this.#destroyCapability?.resolve(); + return; + } + if (this.#closeCapability) { + await Promise.race([this.#closeCapability.promise, new Promise(resolve => { + setTimeout(resolve, 1000); + })]).catch(() => {}); + this.#closeCapability = null; + } + this.#pdfDocument = null; + try { + await this.#scripting.destroySandbox(); + } catch {} + this.#willPrintCapability?.reject(new Error("Scripting destroyed.")); + this.#willPrintCapability = null; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + this._pageOpenPending.clear(); + this._visitedPages.clear(); + this.#scripting = null; + this.#ready = false; + this.#destroyCapability?.resolve(); + } +} + +;// ./web/pdf_sidebar.js + +const SIDEBAR_WIDTH_VAR = "--sidebar-width"; +const SIDEBAR_MIN_WIDTH = 200; +const SIDEBAR_RESIZING_CLASS = "sidebarResizing"; +const UI_NOTIFICATION_CLASS = "pdfSidebarNotification"; +class PDFSidebar { + #isRTL = false; + #mouseAC = null; + #outerContainerWidth = null; + #width = null; + constructor({ + elements, + eventBus, + l10n + }) { + 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; + this.#isRTL = l10n.getDirection() === "rtl"; + this.#addEventListeners(); + } + reset() { + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.#hideUINotification(true); + this.switchView(SidebarView.THUMBS); + this.outlineButton.disabled = false; + this.attachmentsButton.disabled = false; + this.layersButton.disabled = false; + this._currentOutlineItemButton.disabled = true; + } + get visibleView() { + return this.isOpen ? this.active : SidebarView.NONE; + } + setInitialView(view = SidebarView.NONE) { + if (this.isInitialViewSet) { + return; + } + this.isInitialViewSet = true; + if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) { + this.#dispatchEvent(); + return; + } + this.switchView(view, true); + if (!this.isInitialEventDispatched) { + this.#dispatchEvent(); + } + } + switchView(view, forceOpen = 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: + console.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) { + this.#dispatchEvent(); + } + } + 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(); + this.#dispatchEvent(); + this.#hideUINotification(); + } + close(evt = null) { + if (!this.isOpen) { + return; + } + this.isOpen = false; + toggleExpandedBtn(this.toggleButton, false); + this.outerContainer.classList.add("sidebarMoving"); + this.outerContainer.classList.remove("sidebarOpen"); + this.onToggled(); + this.#dispatchEvent(); + if (evt?.detail > 0) { + this.toggleButton.blur(); + } + } + toggle(evt = null) { + if (this.isOpen) { + this.close(evt); + } else { + this.open(); + } + } + #dispatchEvent() { + if (this.isInitialViewSet) { + this.isInitialEventDispatched ||= true; + } + this.eventBus.dispatch("sidebarviewchanged", { + source: this, + view: this.visibleView + }); + } + #showUINotification() { + this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-notification-button"); + if (!this.isOpen) { + this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); + } + } + #hideUINotification(reset = false) { + if (this.isOpen || reset) { + this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); + } + if (reset) { + this.toggleButton.setAttribute("data-l10n-id", "pdfjs-toggle-sidebar-button"); + } + } + #addEventListeners() { + const { + eventBus, + outerContainer + } = this; + this.sidebarContainer.addEventListener("transitionend", evt => { + if (evt.target === this.sidebarContainer) { + outerContainer.classList.remove("sidebarMoving"); + eventBus.dispatch("resize", { + source: this + }); + } + }); + 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; + if (count) { + this.#showUINotification(); + } else if (this.active === view) { + this.switchView(SidebarView.THUMBS); + } + }; + eventBus._on("outlineloaded", evt => { + onTreeLoaded(evt.outlineCount, this.outlineButton, SidebarView.OUTLINE); + 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); + this.#mouseAC = new AbortController(); + const opts = { + signal: this.#mouseAC.signal + }; + window.addEventListener("mousemove", this.#mouseMove.bind(this), opts); + window.addEventListener("mouseup", this.#mouseUp.bind(this), opts); + window.addEventListener("blur", this.#mouseUp.bind(this), opts); + }); + eventBus._on("resize", evt => { + if (evt.source !== window) { + return; + } + this.#outerContainerWidth = null; + if (!this.#width) { + return; + } + if (!this.isOpen) { + this.#updateWidth(this.#width); + return; + } + outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + const updated = this.#updateWidth(this.#width); + Promise.resolve().then(() => { + outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + if (updated) { + eventBus.dispatch("resize", { + source: this + }); + } + }); + }); + } + get outerContainerWidth() { + return this.#outerContainerWidth ||= this.outerContainer.clientWidth; + } + #updateWidth(width = 0) { + const maxWidth = Math.floor(this.outerContainerWidth / 2); + if (width > maxWidth) { + width = maxWidth; + } + if (width < SIDEBAR_MIN_WIDTH) { + width = SIDEBAR_MIN_WIDTH; + } + if (width === this.#width) { + return false; + } + this.#width = width; + docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`); + return true; + } + #mouseMove(evt) { + let width = evt.clientX; + if (this.#isRTL) { + width = this.outerContainerWidth - width; + } + this.#updateWidth(width); + } + #mouseUp(evt) { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + this.eventBus.dispatch("resize", { + source: this + }); + this.#mouseAC?.abort(); + this.#mouseAC = null; + } +} + +;// ./web/pdf_thumbnail_view.js + + + +const DRAW_UPSCALE_FACTOR = 2; +const MAX_NUM_SCALING_STEPS = 3; +const THUMBNAIL_WIDTH = 98; +function zeroCanvas(c) { + c.width = 0; + c.height = 0; +} +class TempImageFactory { + static #tempCanvas = null; + static getCanvas(width, height) { + const tempCanvas = this.#tempCanvas ||= 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 (this.#tempCanvas) { + zeroCanvas(this.#tempCanvas); + } + this.#tempCanvas = null; + } +} +class PDFThumbnailView { + constructor({ + container, + eventBus, + id, + defaultViewport, + optionalContentConfigPromise, + linkService, + renderingQueue, + maxCanvasPixels, + maxCanvasDim, + pageColors, + enableHWA + }) { + 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.renderTask = null; + this.renderingState = RenderingStates.INITIAL; + this.resume = null; + 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", this.#pageL10nArgs); + 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); + this.div = div; + this.#updateDims(); + const img = document.createElement("div"); + img.className = "thumbnailImage"; + this._placeholderImg = img; + div.append(img); + anchor.append(div); + container.append(anchor); + } + #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`); + } + 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); + this.#updateDims(); + if (this.image) { + this.image.removeAttribute("src"); + delete this.image; + } + } + update({ + rotation = null + }) { + 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; + } + #getPageDrawContext(upscaleFactor = 1, enableHWA = 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 + }; + } + #convertCanvasToImage(canvas) { + if (this.renderingState !== RenderingStates.FINISHED) { + throw new Error("#convertCanvasToImage: Rendering has not finished."); + } + const reducedCanvas = this.#reduceImage(canvas); + const image = document.createElement("img"); + image.className = "thumbnailImage"; + image.setAttribute("data-l10n-id", "pdfjs-thumb-page-canvas"); + image.setAttribute("data-l10n-args", this.#pageL10nArgs); + image.src = reducedCanvas.toDataURL(); + this.image = image; + this.div.setAttribute("data-loaded", true); + this._placeholderImg.replaceWith(image); + zeroCanvas(reducedCanvas); + } + async draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.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 + } = this.#getPageDrawContext(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; + this.#convertCanvasToImage(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; + this.#convertCanvasToImage(canvas); + } + #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]; + } + #reduceImage(img) { + const { + ctx, + canvas + } = this.#getPageDrawContext(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] = this.#getReducedImageDims(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; + } + get #pageL10nArgs() { + return JSON.stringify({ + page: this.pageLabel ?? this.id + }); + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + this.anchor.setAttribute("data-l10n-args", this.#pageL10nArgs); + if (this.renderingState !== RenderingStates.FINISHED) { + return; + } + this.image?.setAttribute("data-l10n-args", this.#pageL10nArgs); + } +} + +;// ./web/pdf_thumbnail_viewer.js + + +const THUMBNAIL_SCROLL_MARGIN = -19; +const THUMBNAIL_SELECTED_CLASS = "selected"; +class PDFThumbnailViewer { + constructor({ + container, + eventBus, + linkService, + renderingQueue, + maxCanvasPixels, + maxCanvasDim, + pageColors, + abortSignal, + enableHWA + }) { + 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, this.#scrollUpdated.bind(this), abortSignal); + this.#resetView(); + } + #scrollUpdated() { + this.renderingQueue.renderHighestPriority(); + } + getThumbnail(index) { + return this._thumbnails[index]; + } + #getVisibleThumbs() { + return getVisibleElements({ + scrollEl: this.container, + views: this._thumbnails + }); + } + scrollThumbnailIntoView(pageNumber) { + if (!this.pdfDocument) { + return; + } + const thumbnailView = this._thumbnails[pageNumber - 1]; + if (!thumbnailView) { + console.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 + } = this.#getVisibleThumbs(); + 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); + } + } + cleanup() { + for (const thumbnail of this._thumbnails) { + if (thumbnail.renderingState !== RenderingStates.FINISHED) { + thumbnail.reset(); + } + } + TempImageFactory.destroyCanvas(); + } + #resetView() { + this._thumbnails = []; + this._currentPageNumber = 1; + this._pageLabels = null; + this._pagesRotation = 0; + this.container.textContent = ""; + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.#cancelRendering(); + this.#resetView(); + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + 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, + eventBus: this.eventBus, + id: pageNum, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + linkService: this.linkService, + renderingQueue: this.renderingQueue, + maxCanvasPixels: this.maxCanvasPixels, + maxCanvasDim: this.maxCanvasDim, + pageColors: this.pageColors, + 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 => { + console.error("Unable to initialize thumbnail viewer", reason); + }); + } + #cancelRendering() { + for (const thumbnail of this._thumbnails) { + thumbnail.cancelRendering(); + } + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.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); + } + } + async #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) { + console.error("Unable to get page for thumb view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this._thumbnails.length) { + return false; + } + return this.scroll.down; + } + forceRendering() { + const visibleThumbs = this.#getVisibleThumbs(); + const scrollAhead = this.#getScrollAhead(visibleThumbs); + const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead, false, true); + if (thumbView) { + this.#ensurePdfPageLoaded(thumbView).then(() => { + this.renderingQueue.renderView(thumbView); + }); + return true; + } + return false; + } +} + +;// ./web/annotation_editor_layer_builder.js + + +class AnnotationEditorLayerBuilder { + #annotationLayer = null; + #drawLayer = null; + #onAppend = null; + #structTreeLayer = null; + #textLayer = null; + #uiManager; + constructor(options) { + 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; + this.#uiManager = options.uiManager; + this.#annotationLayer = options.annotationLayer || null; + this.#textLayer = options.textLayer || null; + this.#drawLayer = options.drawLayer || null; + this.#onAppend = options.onAppend || null; + this.#structTreeLayer = options.structTreeLayer || null; + } + async render({ + viewport, + intent = "display" + }) { + 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 = this.#uiManager.direction; + this.#onAppend?.(div); + this.annotationEditorLayer = new AnnotationEditorLayer({ + uiManager: this.#uiManager, + div, + structTreeLayer: this.#structTreeLayer, + accessibilityManager: this.accessibilityManager, + pageIndex: this.pdfPage.pageNumber - 1, + l10n: this.l10n, + viewport: clonedViewport, + annotationLayer: this.#annotationLayer, + textLayer: this.#textLayer, + drawLayer: this.#drawLayer + }); + 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 + + +class AnnotationLayerBuilder { + #annotations = null; + #externalHide = false; + #onAppend = null; + #eventAbortController = null; + #linksInjected = false; + constructor({ + pdfPage, + linkService, + downloadManager, + annotationStorage = null, + imageResourcesPath = "", + renderForms = true, + enableScripting = false, + hasJSActionsPromise = null, + fieldObjectsPromise = null, + annotationCanvasMap = null, + accessibilityManager = null, + annotationEditorUIManager = null, + onAppend = null + }) { + 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; + this.#onAppend = onAppend; + this.annotationLayer = null; + this.div = null; + this._cancelled = false; + this._eventBus = linkService.eventBus; + } + async render({ + viewport, + intent = "display", + structTreeLayer = null + }) { + 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"; + this.#onAppend?.(div); + if (annotations.length === 0) { + this.#annotations = annotations; + this.hide(true); + return; + } + this.#initAnnotationLayer(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 + }); + this.#annotations = annotations; + if (this.linkService.isInPresentationMode) { + this.#updatePresentationModeState(PresentationModeState.FULLSCREEN); + } + if (!this.#eventAbortController) { + this.#eventAbortController = new AbortController(); + this._eventBus?._on("presentationmodechanged", evt => { + this.#updatePresentationModeState(evt.state); + }, { + signal: this.#eventAbortController.signal + }); + } + } + #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 + }); + } + cancel() { + this._cancelled = true; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + } + hide(internal = false) { + this.#externalHide = !internal; + if (!this.div) { + return; + } + this.div.hidden = true; + } + hasEditableAnnotations() { + return !!this.annotationLayer?.hasEditableAnnotations(); + } + async injectLinkAnnotations({ + inferredLinks, + viewport, + structTreeLayer = null + }) { + if (this.#annotations === null) { + throw new Error("`render` method must be called before `injectLinkAnnotations`."); + } + if (this._cancelled || this.#linksInjected) { + return; + } + this.#linksInjected = true; + const newLinks = this.#annotations.length ? this.#checkInferredLinks(inferredLinks) : inferredLinks; + if (!newLinks.length) { + return; + } + if (!this.annotationLayer) { + this.#initAnnotationLayer(viewport, structTreeLayer); + setLayerDimensions(this.div, viewport); + } + await this.annotationLayer.addLinkAnnotations(newLinks, this.linkService); + if (!this.#externalHide) { + this.div.hidden = false; + } + } + #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; + } + } + #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 this.#annotations) { + 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; + }); + } +} + +;// ./web/autolinker.js + + +function DOMRectToPDF({ + width, + height, + left, + top +}, pdfPageView) { + 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({ + url, + index, + length +}, pdfPageView, id) { + 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 #index = 0; + static #regex; + static findLinks(text) { + this.#regex ??= /\b(?:https?:\/\/|mailto:|www\.)(?:[\S--[\p{P}<>]]|\/|[\S--[\[\]]]+[\S--[\p{P}<>]])+|\b[\S--[@\p{Ps}\p{Pe}<>]]+@([\S--[\p{P}<>]]+(?:\.[\S--[\p{P}<>]]+)+)/gmv; + const [normalizedText, diffs] = normalize(text); + const matches = normalizedText.matchAll(this.#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 => createLinkAnnotation(link, pdfPageView, this.#index++)); + } +} + +;// ./web/base_pdf_page_view.js + + +class BasePDFPageView { + #enableHWA = false; + #loadingId = null; + #renderError = null; + #renderingState = RenderingStates.INITIAL; + #showCanvas = null; + canvas = null; + div = null; + eventBus = null; + id = null; + pageColors = null; + renderingQueue = null; + renderTask = null; + resume = null; + constructor(options) { + this.#enableHWA = #enableHWA in options ? options.#enableHWA : options.enableHWA || false; + this.eventBus = options.eventBus; + this.id = options.id; + this.pageColors = options.pageColors || null; + this.renderingQueue = options.renderingQueue; + } + get renderingState() { + return this.#renderingState; + } + set renderingState(state) { + if (state === this.#renderingState) { + return; + } + this.#renderingState = state; + if (this.#loadingId) { + clearTimeout(this.#loadingId); + this.#loadingId = null; + } + switch (state) { + case RenderingStates.PAUSED: + this.div.classList.remove("loading"); + break; + case RenderingStates.RUNNING: + this.div.classList.add("loadingIcon"); + this.#loadingId = setTimeout(() => { + this.div.classList.add("loading"); + this.#loadingId = null; + }, 0); + break; + case RenderingStates.INITIAL: + case RenderingStates.FINISHED: + this.div.classList.remove("loadingIcon", "loading"); + break; + } + } + _createCanvas(onShow, hideUntilComplete = false) { + const { + pageColors + } = this; + const hasHCM = !!(pageColors?.background && pageColors?.foreground); + const prevCanvas = this.canvas; + const updateOnFirstShow = !prevCanvas && !hasHCM && !hideUntilComplete; + const canvas = this.canvas = document.createElement("canvas"); + this.#showCanvas = isLastShow => { + if (updateOnFirstShow) { + onShow(canvas); + this.#showCanvas = 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: !this.#enableHWA + }); + return { + canvas, + prevCanvas, + ctx + }; + } + #renderContinueCallback = cont => { + this.#showCanvas?.(false); + if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) { + this.renderingState = RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + _resetCanvas() { + const { + canvas + } = this; + if (!canvas) { + return; + } + canvas.remove(); + canvas.width = canvas.height = 0; + this.canvas = null; + } + async _drawCanvas(options, onCancel, onFinish) { + const renderTask = this.renderTask = this.pdfPage.render(options); + renderTask.onContinue = this.#renderContinueCallback; + renderTask.onError = error => { + if (error instanceof RenderingCancelledException) { + onCancel(); + this.#renderError = null; + } + }; + let error = null; + try { + await renderTask.promise; + this.#showCanvas?.(true); + } catch (e) { + if (e instanceof RenderingCancelledException) { + return; + } + error = e; + this.#showCanvas?.(true); + } finally { + this.#renderError = error; + if (renderTask === this.renderTask) { + this.renderTask = null; + } + } + this.renderingState = RenderingStates.FINISHED; + onFinish(renderTask); + if (error) { + throw error; + } + } + cancelRendering({ + cancelExtraDelay = 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: this.#renderError + }); + } +} + +;// ./web/draw_layer_builder.js + +class DrawLayerBuilder { + #drawLayer = null; + constructor(options) { + this.pageIndex = options.pageIndex; + } + async render({ + intent = "display" + }) { + if (intent !== "display" || this.#drawLayer || this._cancelled) { + return; + } + this.#drawLayer = new DrawLayer({ + pageIndex: this.pageIndex + }); + } + cancel() { + this._cancelled = true; + if (!this.#drawLayer) { + return; + } + this.#drawLayer.destroy(); + this.#drawLayer = null; + } + setParent(parent) { + this.#drawLayer?.setParent(parent); + } + getDrawLayer() { + return this.#drawLayer; + } +} + +;// ./web/pdf_page_detail_view.js + + + +class PDFPageDetailView extends BasePDFPageView { + #detailArea = null; + renderingCancelled = false; + constructor({ + pageView + }) { + super(pageView); + 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({ + keepCanvas = false + } = {}) { + 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(); + } + } + #shouldRenderDifferentArea(visibleArea) { + if (!this.#detailArea) { + return true; + } + const minDetailX = this.#detailArea.minX; + const minDetailY = this.#detailArea.minY; + const maxDetailX = this.#detailArea.width + minDetailX; + const maxDetailY = this.#detailArea.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 (this.#detailArea.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; + } + update({ + visibleArea = null, + underlyingViewUpdated = false + } = {}) { + if (underlyingViewUpdated) { + this.cancelRendering(); + this.renderingState = RenderingStates.INITIAL; + return; + } + if (!this.#shouldRenderDifferentArea(visibleArea)) { + return; + } + const { + viewport, + maxCanvasPixels + } = 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(maxCanvasPixels / 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; + this.#detailArea = { + 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 = this.#detailArea; + 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; + } +} + +;// ./web/struct_tree_layer_builder.js + +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+)$/; +class StructTreeLayerBuilder { + #promise; + #treeDom = null; + #treePromise; + #elementAttributes = new Map(); + #rawDims; + #elementsToAddToTextLayer = null; + constructor(pdfPage, rawDims) { + this.#promise = pdfPage.getStructTree(); + this.#rawDims = rawDims; + } + async render() { + if (this.#treePromise) { + return this.#treePromise; + } + const { + promise, + resolve, + reject + } = Promise.withResolvers(); + this.#treePromise = promise; + try { + this.#treeDom = this.#walk(await this.#promise); + } catch (ex) { + reject(ex); + } + this.#promise = null; + this.#treeDom?.classList.add("structTree"); + resolve(this.#treeDom); + return promise; + } + async getAriaAttributes(annotationId) { + try { + await this.render(); + return this.#elementAttributes.get(annotationId); + } catch {} + return null; + } + hide() { + if (this.#treeDom && !this.#treeDom.hidden) { + this.#treeDom.hidden = true; + } + } + show() { + if (this.#treeDom?.hidden) { + this.#treeDom.hidden = false; + } + } + #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 = this.#elementAttributes.get(child.id); + if (!attrs) { + attrs = new Map(); + this.#elementAttributes.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)); + } + } + #addImageInTextLayer(node, element) { + const { + alt, + bbox, + children + } = node; + const child = children?.[0]; + if (!this.#rawDims || !alt || !bbox || child?.type !== "content") { + return false; + } + const { + id + } = child; + if (!id) { + return false; + } + element.setAttribute("aria-owns", id); + const img = document.createElement("span"); + (this.#elementsToAddToTextLayer ||= new Map()).set(id, img); + img.setAttribute("role", "img"); + img.setAttribute("aria-label", removeNullCharacters(alt)); + const { + pageHeight, + pageX, + pageY + } = this.#rawDims; + 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; + } + addElementsToTextLayer() { + if (!this.#elementsToAddToTextLayer) { + return; + } + for (const [id, img] of this.#elementsToAddToTextLayer) { + document.getElementById(id)?.append(img); + } + this.#elementsToAddToTextLayer.clear(); + this.#elementsToAddToTextLayer = null; + } + #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" && this.#addImageInTextLayer(node, element)) { + return element; + } + } + this.#setAttributes(node, element); + if (node.children) { + if (node.children.length === 1 && "id" in node.children[0]) { + this.#setAttributes(node.children[0], element); + } else { + for (const kid of node.children) { + element.append(this.#walk(kid)); + } + } + } + return element; + } +} + +;// ./web/text_accessibility.js + +class TextAccessibilityManager { + #enabled = false; + #textChildren = null; + #textNodes = new Map(); + #waitingElements = new Map(); + setTextMapping(textDivs) { + this.#textChildren = textDivs; + } + static #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; + } + enable() { + if (this.#enabled) { + throw new Error("TextAccessibilityManager is already enabled."); + } + if (!this.#textChildren) { + throw new Error("Text divs and strings have not been set."); + } + this.#enabled = true; + this.#textChildren = this.#textChildren.slice(); + this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions); + if (this.#textNodes.size > 0) { + const textChildren = this.#textChildren; + for (const [id, nodeIndex] of this.#textNodes) { + const element = document.getElementById(id); + if (!element) { + this.#textNodes.delete(id); + continue; + } + this.#addIdToAriaOwns(id, textChildren[nodeIndex]); + } + } + for (const [element, isRemovable] of this.#waitingElements) { + this.addPointerInTextLayer(element, isRemovable); + } + this.#waitingElements.clear(); + } + disable() { + if (!this.#enabled) { + return; + } + this.#waitingElements.clear(); + this.#textChildren = null; + this.#enabled = false; + } + removePointerInTextLayer(element) { + if (!this.#enabled) { + this.#waitingElements.delete(element); + return; + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return; + } + const { + id + } = element; + const nodeIndex = this.#textNodes.get(id); + if (nodeIndex === undefined) { + return; + } + const node = children[nodeIndex]; + this.#textNodes.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"); + } + } + } + #addIdToAriaOwns(id, node) { + const owns = node.getAttribute("aria-owns"); + if (!owns?.includes(id)) { + node.setAttribute("aria-owns", owns ? `${owns} ${id}` : id); + } + node.removeAttribute("role"); + } + addPointerInTextLayer(element, isRemovable) { + const { + id + } = element; + if (!id) { + return null; + } + if (!this.#enabled) { + this.#waitingElements.set(element, isRemovable); + return null; + } + if (isRemovable) { + this.removePointerInTextLayer(element); + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return null; + } + const index = binarySearchFirstItem(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0); + const nodeIndex = Math.max(0, index - 1); + const child = children[nodeIndex]; + this.#addIdToAriaOwns(id, child); + this.#textNodes.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 => TextAccessibilityManager.#compareElementPositions(elementToCompare, node) < 0); + if (index === 0) { + children[0].before(element); + } else { + children[index - 1].after(element); + } + return id; + } +} + +;// ./web/text_highlighter.js +class TextHighlighter { + #eventAbortController = null; + constructor({ + findController, + eventBus, + pageIndex + }) { + this.findController = findController; + 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) { + throw new Error("TextHighlighter is already enabled."); + } + this.enabled = true; + if (!this.#eventAbortController) { + this.#eventAbortController = new AbortController(); + this.eventBus._on("updatetextlayermatches", evt => { + if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) { + this._updateMatches(); + } + }, { + signal: this.#eventAbortController.signal + }); + } + this._updateMatches(); + } + disable() { + if (!this.enabled) { + return; + } + this.enabled = false; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + this._updateMatches(true); + } + _convertMatches(matches, matchesLength) { + 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) { + console.error("Could not find a matching mapping"); + } + const match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + 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) { + if (matches.length === 0) { + return; + } + const { + findController, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + const isSelectedPage = pageIdx === findController.selected.pageIdx; + const selectedMatchIdx = findController.selected.matchIdx; + const highlightAll = findController.state.highlightAll; + 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 i0 = selectedMatchIdx, + i1 = i0 + 1; + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + return; + } + let lastDivIdx = -1; + let lastOffset = -1; + for (let i = i0; i < i1; i++) { + const match = matches[i]; + const begin = match.begin; + if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) { + continue; + } + lastDivIdx = begin.divIdx; + lastOffset = begin.offset; + const end = match.end; + const isSelected = isSelectedPage && i === selectedMatchIdx; + const highlightSuffix = isSelected ? " 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, "highlight" + highlightSuffix); + } else { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); + for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = "highlight middle" + highlightSuffix; + } + beginText(end, "highlight end" + highlightSuffix); + } + prevEnd = end; + if (isSelected) { + findController.scrollMatchIntoView({ + element: textDivs[begin.divIdx], + selectedLeft, + pageIndex: pageIdx, + matchIndex: selectedMatchIdx + }); + } + } + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + } + _updateMatches(reset = false) { + if (!this.enabled && !reset) { + return; + } + const { + findController, + 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 (!findController?.highlightMatches || reset) { + return; + } + const pageMatches = findController.pageMatches[pageIdx] || null; + const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null; + this.matches = this._convertMatches(pageMatches, pageMatchesLength); + this._renderMatches(this.matches); + } +} + +;// ./web/text_layer_builder.js + + +class TextLayerBuilder { + #enablePermissions = false; + #onAppend = null; + #renderingDone = false; + #textLayer = null; + static #textLayers = new Map(); + static #selectionChangeAbortController = null; + constructor({ + pdfPage, + highlighter = null, + accessibilityManager = null, + enablePermissions = false, + onAppend = null + }) { + this.pdfPage = pdfPage; + this.highlighter = highlighter; + this.accessibilityManager = accessibilityManager; + this.#enablePermissions = enablePermissions === true; + this.#onAppend = onAppend; + this.div = document.createElement("div"); + this.div.tabIndex = 0; + this.div.className = "textLayer"; + } + async render({ + viewport, + textContentParams = null + }) { + if (this.#renderingDone && this.#textLayer) { + this.#textLayer.update({ + viewport, + onBefore: this.hide.bind(this) + }); + this.show(); + return; + } + this.cancel(); + this.#textLayer = new TextLayer({ + textContentSource: this.pdfPage.streamTextContent(textContentParams || { + includeMarkedContent: true, + disableNormalization: true + }), + container: this.div, + viewport + }); + const { + textDivs, + textContentItemsStr + } = this.#textLayer; + this.highlighter?.setTextMapping(textDivs, textContentItemsStr); + this.accessibilityManager?.setTextMapping(textDivs); + await this.#textLayer.render(); + this.#renderingDone = true; + const endOfContent = document.createElement("div"); + endOfContent.className = "endOfContent"; + this.div.append(endOfContent); + this.#bindMouse(endOfContent); + this.#onAppend?.(this.div); + this.highlighter?.enable(); + this.accessibilityManager?.enable(); + } + hide() { + if (!this.div.hidden && this.#renderingDone) { + this.highlighter?.disable(); + this.div.hidden = true; + } + } + show() { + if (this.div.hidden && this.#renderingDone) { + this.div.hidden = false; + this.highlighter?.enable(); + } + } + cancel() { + this.#textLayer?.cancel(); + this.#textLayer = null; + this.highlighter?.disable(); + this.accessibilityManager?.disable(); + TextLayerBuilder.#removeGlobalSelectionListener(this.div); + } + #bindMouse(end) { + const { + div + } = this; + div.addEventListener("mousedown", () => { + div.classList.add("selecting"); + }); + div.addEventListener("copy", event => { + if (!this.#enablePermissions) { + const selection = document.getSelection(); + event.clipboardData.setData("text/plain", removeNullCharacters(normalizeUnicode(selection.toString()))); + } + stopEvent(event); + }); + TextLayerBuilder.#textLayers.set(div, end); + TextLayerBuilder.#enableGlobalSelectionListener(); + } + static #removeGlobalSelectionListener(textLayerDiv) { + this.#textLayers.delete(textLayerDiv); + if (this.#textLayers.size === 0) { + this.#selectionChangeAbortController?.abort(); + this.#selectionChangeAbortController = null; + } + } + static #enableGlobalSelectionListener() { + if (this.#selectionChangeAbortController) { + return; + } + this.#selectionChangeAbortController = new AbortController(); + const { + signal + } = 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; + this.#textLayers.forEach(reset); + }, { + signal + }); + window.addEventListener("blur", () => { + isPointerDown = false; + this.#textLayers.forEach(reset); + }, { + signal + }); + document.addEventListener("keyup", () => { + if (!isPointerDown) { + this.#textLayers.forEach(reset); + } + }, { + signal + }); + var isFirefox, prevRange; + document.addEventListener("selectionchange", () => { + const selection = document.getSelection(); + if (selection.rangeCount === 0) { + this.#textLayers.forEach(reset); + return; + } + const activeTextLayers = new Set(); + for (let i = 0; i < selection.rangeCount; i++) { + const range = selection.getRangeAt(i); + for (const textLayerDiv of this.#textLayers.keys()) { + if (!activeTextLayers.has(textLayerDiv) && range.intersectsNode(textLayerDiv)) { + activeTextLayers.add(textLayerDiv); + } + } + } + for (const [textLayerDiv, endDiv] of this.#textLayers) { + if (activeTextLayers.has(textLayerDiv)) { + textLayerDiv.classList.add("selecting"); + } else { + reset(endDiv, textLayerDiv); + } + } + isFirefox ??= getComputedStyle(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 = 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 + }); + } +} + +;// ./web/pdf_page_view.js + + + + + + + + + + + + + + + + +const DEFAULT_LAYER_PROPERTIES = null; +const LAYERS_ORDER = new Map([["canvasWrapper", 0], ["textLayer", 1], ["annotationLayer", 2], ["annotationEditorLayer", 3], ["xfaLayer", 3]]); +class PDFPageView extends BasePDFPageView { + #annotationMode = AnnotationMode.ENABLE_FORMS; + #canvasWrapper = null; + #enableAutoLinking = true; + #hasRestrictedScaling = false; + #isEditing = false; + #layerProperties = null; + #needsRestrictedScaling = false; + #originalViewport = null; + #previousRotation = null; + #scaleRoundX = 1; + #scaleRoundY = 1; + #textLayerMode = TextLayerMode.ENABLE; + #userUnit = 1; + #useThumbnailCanvas = { + directDrawing: true, + initialOptionalContent: true, + regularAnnotations: true + }; + #layers = [null, null, null, null]; + constructor(options) { + super(options); + const container = options.container; + const defaultViewport = options.defaultViewport; + this.renderingId = "page" + this.id; + this.#layerProperties = 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; + this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE; + this.#annotationMode = 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.#enableAutoLinking = 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; + this.#setDimensions(); + 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; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + if (!options.l10n) { + this.l10n.translate(this.div); + } + } + } + #addLayer(div, name) { + const pos = LAYERS_ORDER.get(name); + const oldDiv = this.#layers[pos]; + this.#layers[pos] = div; + if (oldDiv) { + oldDiv.replaceWith(div); + return; + } + for (let i = pos - 1; i >= 0; i--) { + const layer = this.#layers[i]; + if (layer) { + layer.after(div); + return; + } + } + this.div.prepend(div); + } + #setDimensions() { + const { + div, + viewport + } = this; + if (viewport.userUnit !== this.#userUnit) { + if (viewport.userUnit !== 1) { + div.style.setProperty("--user-unit", viewport.userUnit); + } else { + div.style.removeProperty("--user-unit"); + } + this.#userUnit = viewport.userUnit; + } + if (this.pdfPage) { + if (this.#previousRotation === viewport.rotation) { + return; + } + this.#previousRotation = viewport.rotation; + } + setLayerDimensions(div, viewport, true, false); + } + 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 + }); + this.#setDimensions(); + 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: this.#layerProperties.findController + })); + } + #dispatchLayerRendered(name, error) { + this.eventBus.dispatch(name, { + source: this, + pageNumber: this.id, + error + }); + } + async #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 { + this.#dispatchLayerRendered("annotationlayerrendered", error); + } + } + async #renderAnnotationEditorLayer() { + let error = null; + try { + await this.annotationEditorLayer.render({ + viewport: this.viewport, + intent: "display" + }); + } catch (ex) { + console.error("#renderAnnotationEditorLayer:", ex); + error = ex; + } finally { + this.#dispatchLayerRendered("annotationeditorlayerrendered", error); + } + } + async #renderDrawLayer() { + try { + await this.drawLayer.render({ + intent: "display" + }); + } catch (ex) { + console.error("#renderDrawLayer:", ex); + } + } + async #renderXfaLayer() { + let error = null; + try { + const result = await this.xfaLayer.render({ + viewport: this.viewport, + intent: "display" + }); + if (result?.textDivs && this._textHighlighter) { + this.#buildXfaTextContentItems(result.textDivs); + } + } catch (ex) { + console.error("#renderXfaLayer:", ex); + error = ex; + } finally { + if (this.xfaLayer?.div) { + this.l10n.pause(); + this.#addLayer(this.xfaLayer.div, "xfaLayer"); + this.l10n.resume(); + } + this.#dispatchLayerRendered("xfalayerrendered", error); + } + } + async #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; + } + this.#dispatchLayerRendered("textlayerrendered", error); + this.#renderStructTreeLayer(); + } + async #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 #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 #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; + } + } + _resetCanvas() { + super._resetCanvas(); + this.#originalViewport = null; + } + reset({ + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false, + keepCanvasWrapper = false, + preserveDetailViewState = false + } = {}) { + 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 && this.#canvasWrapper || 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 = this.#layers.indexOf(node); + if (layerIndex >= 0) { + this.#layers[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 && this.#canvasWrapper) { + this.#canvasWrapper = null; + this._resetCanvas(); + } + if (!preserveDetailViewState) { + this.detailView?.reset({ + keepCanvas: keepCanvasWrapper + }); + if (!keepCanvasWrapper) { + this.detailView = null; + } + } + } + toggleEditingMode(isEditing) { + this.#isEditing = isEditing; + if (!this.hasEditableAnnotations()) { + return; + } + this.reset({ + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true, + keepCanvasWrapper: true + }); + } + updateVisibleArea(visibleArea) { + if (this.enableDetailCanvas) { + if (this.#needsRestrictedScaling && 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({ + scale = 0, + rotation = null, + optionalContentConfigPromise = null, + drawingDelay = -1 + }) { + 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; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + this.#useThumbnailCanvas.directDrawing = true; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + if (this._isStandalone) { + this._container?.style.setProperty("--scale-factor", this.viewport.scale); + } + this.#computeScale(); + if (this.canvas) { + const onlyCssZoom = this.#hasRestrictedScaling && this.#needsRestrictedScaling; + 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; + this.#useThumbnailCanvas.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 + }); + } + #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; + this.#needsRestrictedScaling = true; + } else { + this.#needsRestrictedScaling = outputScale.limitCanvas(width, height, this.maxCanvasPixels, this.maxCanvasDim); + } + } + cancelRendering({ + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false, + cancelExtraDelay = 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({ + redrawAnnotationLayer = false, + redrawAnnotationEditorLayer = false, + redrawXfaLayer = false, + redrawTextLayer = false, + hideTextLayer = false + }) { + const { + canvas + } = this; + if (!canvas) { + return; + } + const originalViewport = this.#originalViewport; + 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) { + this.#renderAnnotationLayer(); + } + if (redrawAnnotationEditorLayer && this.annotationEditorLayer) { + if (this.drawLayer) { + this.#renderDrawLayer(); + } + this.#renderAnnotationEditorLayer(); + } + if (redrawXfaLayer && this.xfaLayer) { + this.#renderXfaLayer(); + } + if (this.textLayer) { + if (hideTextLayer) { + this.textLayer.hide(); + this.structTreeLayer?.hide(); + } else if (redrawTextLayer) { + this.#renderTextLayer(); + } + } + } + get width() { + return this.viewport.width; + } + get height() { + return this.viewport.height; + } + getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + } + _ensureCanvasWrapper() { + let canvasWrapper = this.#canvasWrapper; + if (!canvasWrapper) { + canvasWrapper = this.#canvasWrapper = document.createElement("div"); + canvasWrapper.classList.add("canvasWrapper"); + this.#addLayer(canvasWrapper, "canvasWrapper"); + } + return canvasWrapper; + } + _getRenderingContext(canvasContext, transform) { + return { + canvasContext, + transform, + viewport: this.viewport, + annotationMode: this.#annotationMode, + optionalContentConfigPromise: this._optionalContentConfigPromise, + annotationCanvasMap: this._annotationCanvasMap, + pageColors: this.pageColors, + isEditing: this.#isEditing + }; + } + async draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.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 && this.#textLayerMode !== TextLayerMode.DISABLE && !pdfPage.isPureXfa) { + this._accessibilityManager ||= new TextAccessibilityManager(); + this.textLayer = new TextLayerBuilder({ + pdfPage, + highlighter: this._textHighlighter, + accessibilityManager: this._accessibilityManager, + enablePermissions: this.#textLayerMode === TextLayerMode.ENABLE_PERMISSIONS, + onAppend: textLayerDiv => { + this.l10n.pause(); + this.#addLayer(textLayerDiv, "textLayer"); + this.l10n.resume(); + } + }); + } + if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) { + const { + annotationStorage, + annotationEditorUIManager, + downloadManager, + enableScripting, + fieldObjectsPromise, + hasJSActionsPromise, + linkService + } = this.#layerProperties; + this._annotationCanvasMap ||= new Map(); + this.annotationLayer = new AnnotationLayerBuilder({ + pdfPage, + annotationStorage, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.#annotationMode === AnnotationMode.ENABLE_FORMS, + linkService, + downloadManager, + enableScripting, + hasJSActionsPromise, + fieldObjectsPromise, + annotationCanvasMap: this._annotationCanvasMap, + accessibilityManager: this._accessibilityManager, + annotationEditorUIManager, + onAppend: annotationLayerDiv => { + this.#addLayer(annotationLayerDiv, "annotationLayer"); + } + }); + } + const { + width, + height + } = viewport; + this.#originalViewport = viewport; + const { + canvas, + prevCanvas, + ctx + } = this._createCanvas(newCanvas => { + canvasWrapper.prepend(newCanvas); + }); + canvas.setAttribute("role", "presentation"); + if (!this.outputScale) { + this.#computeScale(); + } + const { + outputScale + } = this; + this.#hasRestrictedScaling = this.#needsRestrictedScaling; + const sfx = approximateFraction(outputScale.sx); + const sfy = approximateFraction(outputScale.sy); + const canvasWidth = canvas.width = floorToDivide(calcRound(width * outputScale.sx), sfx[0]); + const canvasHeight = canvas.height = floorToDivide(calcRound(height * outputScale.sy), sfy[0]); + const pageWidth = floorToDivide(calcRound(width), sfx[1]); + const pageHeight = floorToDivide(calcRound(height), sfy[1]); + outputScale.sx = canvasWidth / pageWidth; + outputScale.sy = canvasHeight / pageHeight; + if (this.#scaleRoundX !== sfx[1]) { + div.style.setProperty("--scale-round-x", `${sfx[1]}px`); + this.#scaleRoundX = sfx[1]; + } + if (this.#scaleRoundY !== sfy[1]) { + div.style.setProperty("--scale-round-y", `${sfy[1]}px`); + this.#scaleRoundY = 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 => { + this.#useThumbnailCanvas.regularAnnotations = !renderTask.separateAnnots; + this.dispatchPageRendered(false, false); + }).then(async () => { + this.structTreeLayer ||= new StructTreeLayerBuilder(pdfPage, viewport.rawDims); + const textLayerPromise = this.#renderTextLayer(); + if (this.annotationLayer) { + await this.#renderAnnotationLayer(); + if (this.#enableAutoLinking && this.annotationLayer && this.textLayer) { + await this.#injectLinkAnnotations(textLayerPromise); + } + } + const { + annotationEditorUIManager + } = this.#layerProperties; + if (!annotationEditorUIManager) { + return; + } + this.drawLayer ||= new DrawLayerBuilder({ + pageIndex: this.id + }); + await this.#renderDrawLayer(); + 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 => { + this.#addLayer(annotationEditorLayerDiv, "annotationEditorLayer"); + } + }); + this.#renderAnnotationEditorLayer(); + }); + if (pdfPage.isPureXfa) { + if (!this.xfaLayer) { + const { + annotationStorage, + linkService + } = this.#layerProperties; + this.xfaLayer = new XfaLayerBuilder({ + pdfPage, + annotationStorage, + linkService + }); + } + this.#renderXfaLayer(); + } + 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 + } = this.#useThumbnailCanvas; + return directDrawing && initialOptionalContent && regularAnnotations ? this.canvas : null; + } +} + +;// ./web/pdf_viewer.js + + + + + + +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; +} +class PDFPageViewBuffer { + #buf = new Set(); + #size = 0; + constructor(size) { + this.#size = size; + } + push(view) { + const buf = this.#buf; + if (buf.has(view)) { + buf.delete(view); + } + buf.add(view); + if (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + resize(newSize, idsToKeep = null) { + this.#size = newSize; + const buf = this.#buf; + 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 > this.#size) { + this.#destroyFirstView(); + } + } + has(view) { + return this.#buf.has(view); + } + [Symbol.iterator]() { + return this.#buf.keys(); + } + #destroyFirstView() { + const firstView = this.#buf.keys().next().value; + firstView?.destroy(); + this.#buf.delete(firstView); + } +} +class PDFViewer { + #buffer = null; + #altTextManager = null; + #annotationEditorHighlightColors = null; + #annotationEditorMode = AnnotationEditorType.NONE; + #annotationEditorUIManager = null; + #annotationMode = AnnotationMode.ENABLE_FORMS; + #containerTopLeft = null; + #editorUndoBar = null; + #enableHWA = false; + #enableHighlightFloatingButton = false; + #enablePermissions = false; + #enableUpdatedAddImage = false; + #enableNewAltTextWhenAddingImage = false; + #enableAutoLinking = true; + #eventAbortController = null; + #mlManager = null; + #scrollTimeoutId = null; + #switchAnnotationEditorModeAC = null; + #switchAnnotationEditorModeTimeoutId = null; + #getAllTextInProgress = false; + #hiddenCopyElement = null; + #interruptCopyCondition = false; + #previousContainerHeight = 0; + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + #scrollModePageState = null; + #scaleTimeoutId = null; + #signatureManager = null; + #supportsPinchToZoom = true; + #textLayerMode = TextLayerMode.ENABLE; + constructor(options) { + const viewerVersion = "5.2.133"; + 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; + 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."); + } + this.#resizeObserver.observe(this.container); + this.eventBus = options.eventBus; + this.linkService = options.linkService || new SimpleLinkService(); + this.downloadManager = options.downloadManager || null; + this.findController = options.findController || null; + this.#altTextManager = options.altTextManager || null; + this.#signatureManager = options.signatureManager || null; + this.#editorUndoBar = options.editorUndoBar || null; + if (this.findController) { + this.findController.onIsPageVisible = pageNumber => this._getVisiblePages().ids.has(pageNumber); + } + this._scriptingManager = options.scriptingManager || null; + this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? AnnotationMode.ENABLE_FORMS; + this.#annotationEditorMode = options.annotationEditorMode ?? AnnotationEditorType.NONE; + this.#annotationEditorHighlightColors = options.annotationEditorHighlightColors || null; + this.#enableHighlightFloatingButton = options.enableHighlightFloatingButton === true; + this.#enableUpdatedAddImage = options.enableUpdatedAddImage === true; + this.#enableNewAltTextWhenAddingImage = 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.enableDetailCanvas = options.enableDetailCanvas ?? true; + this.l10n = options.l10n; + this.l10n ||= new genericl10n_GenericL10n(); + this.#enablePermissions = options.enablePermissions || false; + this.pageColors = options.pageColors || null; + this.#mlManager = options.mlManager || null; + this.#enableHWA = options.enableHWA || false; + this.#supportsPinchToZoom = options.supportsPinchToZoom !== false; + this.#enableAutoLinking = options.enableAutoLinking !== false; + 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", () => { + this.#resizeObserver.disconnect(); + this.#resizeObserver = 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"); + } + this.#updateContainerHeightCss(); + this.eventBus._on("thumbnailrendered", ({ + pageNumber, + pdfPage + }) => { + const pageView = this._pages[pageNumber - 1]; + if (!this.#buffer.has(pageView)) { + pdfPage?.cleanup(); + } + }); + if (!options.l10n) { + this.l10n.translate(this.container); + } + } + get pagesCount() { + return this._pages.length; + } + getPageView(index) { + return this._pages[index]; + } + getCachedPageViews() { + return new Set(this.#buffer); + } + get pageViewsReady() { + return this._pages.every(pageView => pageView?.pdfPage); + } + get renderForms() { + return this.#annotationMode === 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; + } + if (!this._setCurrentPageNumber(val, true)) { + console.error(`currentPageNumber: "${val}" is not a valid page.`); + } + } + _setCurrentPageNumber(val, resetCurrentPageView = false) { + if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + if (!(0 < val && val <= this.pagesCount)) { + return false; + } + const previous = this._currentPageNumber; + this._currentPageNumber = val; + this.eventBus.dispatch("pagechanging", { + source: this, + pageNumber: val, + pageLabel: this._pageLabels?.[val - 1] ?? null, + previous + }); + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + 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)) { + console.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; + } + this.#setScale(val, { + noScroll: false + }); + } + get currentScaleValue() { + return this._currentScaleValue; + } + set currentScaleValue(val) { + if (!this.pdfDocument) { + return; + } + this.#setScale(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) { + this.#setScale(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 self.#annotationEditorUIManager; + }, + 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 hasJSActionsPromise() { + return self.pdfDocument?.hasJSActions(); + }, + get linkService() { + return self.linkService; + } + }); + } + #initializePermissions(permissions) { + const params = { + annotationEditorMode: this.#annotationEditorMode, + annotationMode: this.#annotationMode, + textLayerMode: this.#textLayerMode + }; + if (!permissions) { + return params; + } + if (!permissions.includes(PermissionFlag.COPY) && this.#textLayerMode === 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) && this.#annotationMode === AnnotationMode.ENABLE_FORMS) { + params.annotationMode = AnnotationMode.ENABLE; + } + return params; + } + async #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(); + } + async getAllText() { + const texts = []; + const buffer = []; + for (let pageNum = 1, pagesCount = this.pdfDocument.numPages; pageNum <= pagesCount; ++pageNum) { + if (this.#interruptCopyCondition) { + 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"); + } + #copyCallback(textLayerMode, event) { + const selection = document.getSelection(); + const { + focusNode, + anchorNode + } = selection; + if (anchorNode && focusNode && selection.containsNode(this.#hiddenCopyElement)) { + if (this.#getAllTextInProgress || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) { + stopEvent(event); + return; + } + this.#getAllTextInProgress = true; + const { + classList + } = this.viewer; + classList.add("copyAll"); + const ac = new AbortController(); + window.addEventListener("keydown", ev => this.#interruptCopyCondition = ev.key === "Escape", { + signal: ac.signal + }); + this.getAllText().then(async text => { + if (text !== null) { + await navigator.clipboard.writeText(text); + } + }).catch(reason => { + console.warn(`Something goes wrong when extracting the text: ${reason.message}`); + }).finally(() => { + this.#getAllTextInProgress = false; + this.#interruptCopyCondition = false; + ac.abort(); + classList.remove("copyAll"); + }); + stopEvent(event); + } + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.eventBus.dispatch("pagesdestroy", { + source: this + }); + this._cancelRendering(); + this._resetView(); + this.findController?.setDocument(null); + this._scriptingManager?.setDocument(null); + this.#annotationEditorUIManager?.destroy(); + this.#annotationEditorUIManager = null; + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const pagesCount = pdfDocument.numPages; + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({ + intent: "display" + }); + const permissionsPromise = this.#enablePermissions ? pdfDocument.getPermissions() : Promise.resolve(); + const { + eventBus, + pageColors, + viewer + } = this; + this.#eventAbortController = new AbortController(); + const { + signal + } = this.#eventAbortController; + if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + console.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; + } + this.#buffer.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(([firstPdfPage, permissions]) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this._firstPageCapability.resolve(firstPdfPage); + this._optionalContentConfigPromise = optionalContentConfigPromise; + const { + annotationEditorMode, + annotationMode, + textLayerMode + } = this.#initializePermissions(permissions); + if (textLayerMode !== TextLayerMode.DISABLE) { + const element = this.#hiddenCopyElement = document.createElement("div"); + element.id = "hiddenCopyElement"; + viewer.before(element); + } + if (annotationEditorMode !== AnnotationEditorType.DISABLE) { + const mode = annotationEditorMode; + if (pdfDocument.isPureXfa) { + console.warn("Warning: XFA-editing is not implemented."); + } else if (isValidAnnotationEditorMode(mode)) { + this.#annotationEditorUIManager = new AnnotationEditorUIManager(this.container, viewer, this.#altTextManager, this.#signatureManager, eventBus, pdfDocument, pageColors, this.#annotationEditorHighlightColors, this.#enableHighlightFloatingButton, this.#enableUpdatedAddImage, this.#enableNewAltTextWhenAddingImage, this.#mlManager, this.#editorUndoBar, this.#supportsPinchToZoom); + eventBus.dispatch("annotationeditoruimanager", { + source: this, + uiManager: this.#annotationEditorUIManager + }); + if (mode !== AnnotationEditorType.NONE) { + this.#preloadEditingData(mode); + this.#annotationEditorUIManager.updateMode(mode); + } + } else { + console.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, + enableDetailCanvas: this.enableDetailCanvas, + pageColors, + l10n: this.l10n, + layerProperties: this._layerProperties, + enableHWA: this.#enableHWA, + enableAutoLinking: this.#enableAutoLinking + }); + this._pages.push(pageView); + } + this._pages[0]?.setPdfPage(firstPdfPage); + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._spreadMode !== SpreadMode.NONE) { + this._updateSpreadMode(); + } + this.#onePageRenderedOrForceFetch(signal).then(async () => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.findController?.setDocument(pdfDocument); + this._scriptingManager?.setDocument(pdfDocument); + if (this.#hiddenCopyElement) { + document.addEventListener("copy", this.#copyCallback.bind(this, textLayerMode), { + signal + }); + } + if (this.#annotationEditorUIManager) { + eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode: this.#annotationEditorMode + }); + } + 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; + } + 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 => { + console.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; + } + } + }); + eventBus.dispatch("pagesinit", { + source: this + }); + pdfDocument.getMetadata().then(({ + info + }) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + if (info.Language) { + viewer.lang = info.Language; + } + }); + if (this.defaultRenderingQueue) { + this.update(); + } + }).catch(reason => { + console.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; + console.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; + this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + 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; + this.#scrollModePageState = { + previousPageNumber: 1, + scrollDown: true, + pages: [] + }; + this.#eventAbortController?.abort(); + this.#eventAbortController = null; + this.viewer.textContent = ""; + this._updateScrollMode(); + this.viewer.removeAttribute("lang"); + this.#hiddenCopyElement?.remove(); + this.#hiddenCopyElement = null; + this.#cleanupTimeouts(); + this.#cleanupSwitchAnnotationEditorMode(); + } + #ensurePageViewVisible() { + if (this._scrollMode !== ScrollMode.PAGE) { + throw new Error("#ensurePageViewVisible: Invalid scrollMode value."); + } + const pageNumber = this._currentPageNumber, + state = this.#scrollModePageState, + 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; + } + _scrollUpdate() { + if (this.pagesCount === 0) { + return; + } + if (this.#scrollTimeoutId) { + clearTimeout(this.#scrollTimeoutId); + } + this.#scrollTimeoutId = setTimeout(() => { + this.#scrollTimeoutId = null; + this.update(); + }, 100); + this.update(); + } + #scrollIntoView(pageView, pageSpot = null) { + const { + div, + id + } = pageView; + if (this._currentPageNumber !== id) { + this._setCurrentPageNumber(id); + } + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + 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); + if (!this._currentScaleValue && this._location) { + this._location = null; + } + } + #isSameScale(newScale) { + return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15; + } + #setScaleUpdatePages(newScale, newValue, { + noScroll = false, + preset = false, + drawingDelay = -1, + origin = null + }) { + this._currentScaleValue = newValue.toString(); + if (this.#isSameScale(newScale)) { + if (preset) { + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: newValue + }); + } + 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) { + this.#scaleTimeoutId = setTimeout(() => { + this.#scaleTimeoutId = null; + this.refresh(); + }, drawingDelay); + } + const previousScale = this._currentScale; + 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 + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get #pageWidthScaleFactor() { + if (this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL) { + return 2; + } + return 1; + } + #setScale(value, options) { + let scale = parseFloat(value); + if (scale > 0) { + options.preset = false; + this.#setScaleUpdatePages(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]; + } + const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this.#pageWidthScaleFactor; + 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: + console.error(`#setScale: "${value}" is an unknown zoom value.`); + return; + } + options.preset = true; + this.#setScaleUpdatePages(scale, value, options); + } + } + #resetCurrentPageView() { + const pageView = this._pages[this._currentPageNumber - 1]; + if (this.isInPresentationMode) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.#scrollIntoView(pageView); + } + pageLabelToPageNumber(label) { + if (!this._pageLabels) { + return null; + } + const i = this._pageLabels.indexOf(label); + if (i < 0) { + return null; + } + return i + 1; + } + scrollPageIntoView({ + pageNumber, + destArray = null, + allowNegativeOffset = false, + ignoreDestinationZoom = false + }) { + if (!this.pdfDocument) { + return; + } + const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1]; + if (!pageView) { + console.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: + console.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; + } + } + if (scale === "page-fit" && !destArray[4]) { + this.#scrollIntoView(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); + } + this.#scrollIntoView(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() { + const visible = this._getVisiblePages(); + const visiblePages = visible.views, + numVisiblePages = visiblePages.length; + if (numVisiblePages === 0) { + return; + } + const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); + this.#buffer.resize(newCacheSize, visible.ids); + for (const { + view, + visibleArea + } of visiblePages) { + view.updateVisibleArea(visibleArea); + } + for (const view of this.#buffer) { + 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; + } + } + this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id); + this._updateLocation(visible.first); + this.eventBus.dispatch("updateviewarea", { + source: this, + location: this._location + }); + } + #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; + } + 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 ? this.#scrollModePageState.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(); + } + } + async #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) { + console.error("Unable to get page for page view", reason); + return null; + } + } + #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 this.#scrollModePageState.scrollDown; + case ScrollMode.HORIZONTAL: + return this.scroll.right; + } + return this.scroll.down; + } + forceRendering(currentlyVisiblePages) { + const visiblePages = currentlyVisiblePages || this._getVisiblePages(); + const scrollAhead = this.#getScrollAhead(visiblePages); + const preRenderExtra = this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL; + const ignoreDetailViews = this.#scaleTimeoutId !== null || this.#scrollTimeoutId !== null && visiblePages.views.some(page => page.detailView?.renderingCancelled); + const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra, ignoreDetailViews); + if (pageView) { + this.#ensurePdfPageLoaded(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) { + console.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(pageNumber = 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) { + this.#ensurePageViewVisible(); + } else if (this._previousScrollMode === ScrollMode.PAGE) { + this._updateSpreadMode(); + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this.#setScale(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(pageNumber = null) { + if (!this.pdfDocument) { + return; + } + const viewer = this.viewer, + pages = this._pages; + if (this._scrollMode === ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } 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); + } + } + } + if (!pageNumber) { + return; + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this.#setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + _getPageAdvance(currentPageNumber, previous = false) { + 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({ + drawingDelay, + scaleFactor = null, + steps = null, + origin + }) { + 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); + } + newScale = MathClamp(newScale, MIN_SCALE, MAX_SCALE); + this.#setScale(newScale, { + noScroll: false, + drawingDelay, + origin + }); + } + increaseScale(options = {}) { + this.updateScale({ + ...options, + steps: options.steps ?? 1 + }); + } + decreaseScale(options = {}) { + this.updateScale({ + ...options, + steps: -(options.steps ?? 1) + }); + } + #updateContainerHeightCss(height = this.container.clientHeight) { + if (height !== this.#previousContainerHeight) { + this.#previousContainerHeight = height; + docStyle.setProperty("--viewer-container-height", `${height}px`); + } + } + #resizeObserverCallback(entries) { + for (const entry of entries) { + if (entry.target === this.container) { + this.#updateContainerHeightCss(Math.floor(entry.borderBoxSize[0].blockSize)); + this.#containerTopLeft = null; + break; + } + } + } + get containerTopLeft() { + return this.#containerTopLeft ||= [this.container.offsetTop, this.container.offsetLeft]; + } + #cleanupTimeouts() { + if (this.#scaleTimeoutId !== null) { + clearTimeout(this.#scaleTimeoutId); + this.#scaleTimeoutId = null; + } + if (this.#scrollTimeoutId !== null) { + clearTimeout(this.#scrollTimeoutId); + this.#scrollTimeoutId = null; + } + } + #cleanupSwitchAnnotationEditorMode() { + this.#switchAnnotationEditorModeAC?.abort(); + this.#switchAnnotationEditorModeAC = null; + if (this.#switchAnnotationEditorModeTimeoutId !== null) { + clearTimeout(this.#switchAnnotationEditorModeTimeoutId); + this.#switchAnnotationEditorModeTimeoutId = null; + } + } + #preloadEditingData(mode) { + switch (mode) { + case AnnotationEditorType.STAMP: + this.#mlManager?.loadModel("altText"); + break; + case AnnotationEditorType.SIGNATURE: + this.#signatureManager?.loadSignatures(); + break; + } + } + get annotationEditorMode() { + return this.#annotationEditorUIManager ? this.#annotationEditorMode : AnnotationEditorType.DISABLE; + } + set annotationEditorMode({ + mode, + editId = null, + isFromKeyboard = false + }) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + if (this.#annotationEditorMode === mode) { + return; + } + if (!isValidAnnotationEditorMode(mode)) { + throw new Error(`Invalid AnnotationEditor mode: ${mode}`); + } + if (!this.pdfDocument) { + return; + } + this.#preloadEditingData(mode); + const { + eventBus, + pdfDocument + } = this; + const updater = async () => { + this.#cleanupSwitchAnnotationEditorMode(); + this.#annotationEditorMode = mode; + await this.#annotationEditorUIManager.updateMode(mode, editId, isFromKeyboard); + if (mode !== this.#annotationEditorMode || pdfDocument !== this.pdfDocument) { + return; + } + eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode + }); + }; + if (mode === AnnotationEditorType.NONE || this.#annotationEditorMode === AnnotationEditorType.NONE) { + const isEditing = mode !== AnnotationEditorType.NONE; + if (!isEditing) { + this.pdfDocument.annotationStorage.resetModifiedIds(); + } + for (const pageView of this._pages) { + pageView.toggleEditingMode(isEditing); + } + const idsToRefresh = this.#switchToEditAnnotationMode(); + if (isEditing && idsToRefresh) { + this.#cleanupSwitchAnnotationEditorMode(); + this.#switchAnnotationEditorModeAC = new AbortController(); + const signal = AbortSignal.any([this.#eventAbortController.signal, this.#switchAnnotationEditorModeAC.signal]); + eventBus._on("pagerendered", ({ + pageNumber + }) => { + idsToRefresh.delete(pageNumber); + if (idsToRefresh.size === 0) { + this.#switchAnnotationEditorModeTimeoutId = setTimeout(updater, 0); + } + }, { + signal + }); + return; + } + } + updater(); + } + refresh(noUpdate = false, updateArgs = Object.create(null)) { + if (!this.pdfDocument) { + return; + } + for (const pageView of this._pages) { + pageView.update(updateArgs); + } + this.#cleanupTimeouts(); + if (!noUpdate) { + this.update(); + } + } +} + +;// ./web/secondary_toolbar.js +class SecondaryToolbar { + #opts; + constructor(options, eventBus) { + this.#opts = 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; + this.#bindListeners(buttons); + this.reset(); + } + get isOpen() { + return this.opened; + } + setPageNumber(pageNumber) { + this.pageNumber = pageNumber; + this.#updateUIState(); + } + setPagesCount(pagesCount) { + this.pagesCount = pagesCount; + this.#updateUIState(); + } + reset() { + this.pageNumber = 0; + this.pagesCount = 0; + this.#updateUIState(); + this.eventBus.dispatch("switchcursortool", { + source: this, + reset: true + }); + this.#scrollModeChanged({ + mode: ScrollMode.VERTICAL + }); + this.#spreadModeChanged({ + mode: SpreadMode.NONE + }); + } + #updateUIState() { + const { + firstPageButton, + lastPageButton, + pageRotateCwButton, + pageRotateCcwButton + } = this.#opts; + firstPageButton.disabled = this.pageNumber <= 1; + lastPageButton.disabled = this.pageNumber >= this.pagesCount; + pageRotateCwButton.disabled = this.pagesCount === 0; + pageRotateCcwButton.disabled = this.pagesCount === 0; + } + #bindListeners(buttons) { + const { + eventBus + } = this; + const { + toggleButton + } = this.#opts; + toggleButton.addEventListener("click", this.toggle.bind(this)); + for (const { + element, + eventName, + close, + eventDetails + } of buttons) { + 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", this.#cursorToolChanged.bind(this)); + eventBus._on("scrollmodechanged", this.#scrollModeChanged.bind(this)); + eventBus._on("spreadmodechanged", this.#spreadModeChanged.bind(this)); + } + #cursorToolChanged({ + tool, + disabled + }) { + const { + cursorSelectToolButton, + cursorHandToolButton + } = this.#opts; + toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT); + toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND); + cursorSelectToolButton.disabled = disabled; + cursorHandToolButton.disabled = disabled; + } + #scrollModeChanged({ + mode + }) { + const { + scrollPageButton, + scrollVerticalButton, + scrollHorizontalButton, + scrollWrappedButton, + spreadNoneButton, + spreadOddButton, + spreadEvenButton + } = this.#opts; + 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; + } + #spreadModeChanged({ + mode + }) { + const { + spreadNoneButton, + spreadOddButton, + spreadEvenButton + } = this.#opts; + toggleCheckedBtn(spreadNoneButton, mode === SpreadMode.NONE); + toggleCheckedBtn(spreadOddButton, mode === SpreadMode.ODD); + toggleCheckedBtn(spreadEvenButton, mode === SpreadMode.EVEN); + } + open() { + if (this.opened) { + return; + } + this.opened = true; + const { + toggleButton, + toolbar + } = this.#opts; + toggleExpandedBtn(toggleButton, true, toolbar); + } + close() { + if (!this.opened) { + return; + } + this.opened = false; + const { + toggleButton, + toolbar + } = this.#opts; + toggleExpandedBtn(toggleButton, false, toolbar); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } +} + +;// ./web/signature_manager.js + +const DEFAULT_HEIGHT_IN_PAGE = 40; +class SignatureManager { + #addButton; + #tabsToAltText = null; + #clearButton; + #clearDescription; + #currentEditor; + #description; + #dialog; + #drawCurves = null; + #drawPlaceholder; + #drawPath = null; + #drawPathString = ""; + #drawPoints = null; + #drawSVG; + #drawThickness; + #errorBar; + #extractedSignatureData = null; + #imagePath = null; + #imagePicker; + #imagePickerLink; + #imagePlaceholder; + #imageSVG; + #saveCheckbox; + #saveContainer; + #tabButtons; + #addSignatureToolbarButton; + #loadSignaturesPromise = null; + #typeInput; + #currentTab = null; + #currentTabAC = null; + #hasDescriptionChanged = false; + #eventBus; + #l10n; + #overlayManager; + #editDescriptionDialog; + #signatureStorage; + #uiManager = null; + static #l10nDescription = null; + constructor({ + dialog, + panels, + typeButton, + typeInput, + drawButton, + drawPlaceholder, + drawSVG, + drawThickness, + imageButton, + imageSVG, + imagePlaceholder, + imagePicker, + imagePickerLink, + description, + clearButton, + cancelButton, + addButton, + errorCloseButton, + errorBar, + saveCheckbox, + saveContainer + }, editSignatureElements, addSignatureToolbarButton, overlayManager, l10n, signatureStorage, eventBus) { + this.#addButton = addButton; + this.#clearButton = clearButton; + this.#clearDescription = description.lastElementChild; + this.#description = description.firstElementChild; + this.#dialog = dialog; + this.#drawSVG = drawSVG; + this.#drawPlaceholder = drawPlaceholder; + this.#drawThickness = drawThickness; + this.#errorBar = errorBar; + this.#imageSVG = imageSVG; + this.#imagePlaceholder = imagePlaceholder; + this.#imagePicker = imagePicker; + this.#imagePickerLink = imagePickerLink; + this.#overlayManager = overlayManager; + this.#saveCheckbox = saveCheckbox; + this.#saveContainer = saveContainer; + this.#addSignatureToolbarButton = addSignatureToolbarButton; + this.#typeInput = typeInput; + this.#l10n = l10n; + this.#signatureStorage = signatureStorage; + this.#eventBus = eventBus; + this.#editDescriptionDialog = new EditDescriptionDialog(editSignatureElements, overlayManager); + SignatureManager.#l10nDescription ||= Object.freeze({ + signature: "pdfjs-editor-add-signature-description-default-when-drawing" + }); + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", e => { + const { + target + } = e; + if (target !== this.#typeInput && target !== this.#description) { + e.preventDefault(); + } + }); + dialog.addEventListener("drop", e => { + stopEvent(e); + }); + cancelButton.addEventListener("click", this.#cancel.bind(this)); + addButton.addEventListener("click", this.#add.bind(this)); + clearButton.addEventListener("click", () => { + this.#reportTelemetry({ + type: "signature", + action: "pdfjs.signature.clear", + data: { + type: this.#currentTab + } + }); + this.#initTab(null); + }, { + passive: true + }); + this.#description.addEventListener("input", () => { + this.#clearDescription.disabled = this.#description.value === ""; + }, { + passive: true + }); + this.#clearDescription.addEventListener("click", () => { + this.#description.value = ""; + this.#clearDescription.disabled = true; + }, { + passive: true + }); + errorCloseButton.addEventListener("click", () => { + errorBar.hidden = true; + }, { + passive: true + }); + this.#initTabButtons(typeButton, drawButton, imageButton, panels); + imagePicker.accept = SupportedImageMimeTypes.join(","); + eventBus._on("storedsignatureschanged", this.#signaturesChanged.bind(this)); + overlayManager.register(dialog); + } + #initTabButtons(typeButton, drawButton, imageButton, panels) { + const buttons = this.#tabButtons = 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); + this.#initTab(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", ({ + key + }) => { + if (key !== "ArrowLeft" && key !== "ArrowRight") { + return; + } + buttonsArray[i + (key === "ArrowLeft" ? -1 : 1)]?.focus(); + }, { + passive: true + }); + } + } + #resetCommon() { + this.#hasDescriptionChanged = false; + this.#description.value = ""; + if (this.#currentTab) { + this.#tabsToAltText.get(this.#currentTab).value = ""; + } + } + #resetTab(name) { + switch (name) { + case "type": + this.#typeInput.value = ""; + break; + case "draw": + this.#drawCurves = null; + this.#drawPoints = null; + this.#drawPathString = ""; + this.#drawPath?.remove(); + this.#drawPath = null; + this.#drawPlaceholder.hidden = false; + this.#drawThickness.value = 1; + break; + case "image": + this.#imagePlaceholder.hidden = false; + this.#imagePath?.remove(); + this.#imagePath = null; + break; + } + } + #initTab(name) { + if (name && this.#currentTab === name) { + return; + } + if (this.#currentTab) { + this.#tabsToAltText.get(this.#currentTab).value = this.#description.value; + } + if (name) { + this.#currentTab = name; + } + this.#errorBar.hidden = true; + const reset = !name; + if (reset) { + this.#resetCommon(); + } else { + this.#description.value = this.#tabsToAltText.get(this.#currentTab).value; + } + this.#clearDescription.disabled = this.#description.value === ""; + this.#currentTabAC?.abort(); + this.#currentTabAC = new AbortController(); + switch (this.#currentTab) { + case "type": + this.#initTypeTab(reset); + break; + case "draw": + this.#initDrawTab(reset); + break; + case "image": + this.#initImageTab(reset); + break; + } + } + #disableButtons(value) { + this.#saveCheckbox.disabled = this.#clearButton.disabled = this.#addButton.disabled = this.#description.disabled = !value; + } + #initTypeTab(reset) { + if (reset) { + this.#resetTab("type"); + } + this.#disableButtons(this.#typeInput.value); + const { + signal + } = this.#currentTabAC; + const options = { + passive: true, + signal + }; + this.#typeInput.addEventListener("input", () => { + const { + value + } = this.#typeInput; + if (!this.#hasDescriptionChanged) { + this.#tabsToAltText.get("type").default = this.#description.value = value; + this.#clearDescription.disabled = value === ""; + } + this.#disableButtons(value); + }, options); + this.#description.addEventListener("input", () => { + this.#hasDescriptionChanged = this.#typeInput.value !== this.#description.value; + }, options); + } + #initDrawTab(reset) { + if (reset) { + this.#resetTab("draw"); + } + this.#disableButtons(this.#drawPath); + const { + signal + } = this.#currentTabAC; + const options = { + signal + }; + let currentPointerId = NaN; + const drawCallback = e => { + const { + pointerId + } = e; + if (!isNaN(currentPointerId) && currentPointerId !== pointerId) { + return; + } + currentPointerId = pointerId; + e.preventDefault(); + this.#drawSVG.setPointerCapture(pointerId); + const { + width: drawWidth, + height: drawHeight + } = this.#drawSVG.getBoundingClientRect(); + let { + offsetX, + offsetY + } = e; + offsetX = Math.round(offsetX); + offsetY = Math.round(offsetY); + if (e.target === this.#drawPlaceholder) { + this.#drawPlaceholder.hidden = true; + } + if (!this.#drawCurves) { + this.#drawCurves = { + width: drawWidth, + height: drawHeight, + thickness: parseInt(this.#drawThickness.value), + curves: [] + }; + this.#disableButtons(true); + const svgFactory = new DOMSVGFactory(); + const path = this.#drawPath = svgFactory.createElement("path"); + path.setAttribute("stroke-width", this.#drawThickness.value); + this.#drawSVG.append(path); + this.#drawSVG.addEventListener("pointerdown", drawCallback, options); + this.#drawPlaceholder.removeEventListener("pointerdown", drawCallback); + if (this.#description.value === "") { + this.#l10n.get(SignatureManager.#l10nDescription.signature).then(description => { + this.#tabsToAltText.get("draw").default = description; + this.#description.value ||= description; + this.#clearDescription.disabled = this.#description.value === ""; + }); + } + } + this.#drawPoints = [offsetX, offsetY]; + this.#drawCurves.curves.push({ + points: this.#drawPoints + }); + this.#drawPathString += `M ${offsetX} ${offsetY}`; + this.#drawPath.setAttribute("d", this.#drawPathString); + const finishDrawAC = new AbortController(); + const listenerDrawOptions = { + signal: AbortSignal.any([signal, finishDrawAC.signal]) + }; + this.#drawSVG.addEventListener("contextmenu", noContextMenu, listenerDrawOptions); + this.#drawSVG.addEventListener("pointermove", evt => { + evt.preventDefault(); + let { + offsetX: x, + offsetY: y + } = evt; + x = Math.round(x); + y = Math.round(y); + const drawPoints = this.#drawPoints; + 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); + this.#drawPathString += `C${(x1 + 5 * x2) / 6} ${(y1 + 5 * y2) / 6} ${(5 * x2 + x) / 6} ${(5 * y2 + y) / 6} ${(x2 + x) / 2} ${(y2 + y) / 2}`; + } else { + this.#drawPathString += `L${x} ${y}`; + } + drawPoints.push(x, y); + this.#drawPath.setAttribute("d", this.#drawPathString); + }, listenerDrawOptions); + this.#drawSVG.addEventListener("pointerup", evt => { + const { + pointerId: pId + } = evt; + if (!isNaN(currentPointerId) && currentPointerId !== pId) { + return; + } + currentPointerId = NaN; + evt.preventDefault(); + this.#drawSVG.releasePointerCapture(pId); + finishDrawAC.abort(); + if (this.#drawPoints.length === 2) { + this.#drawPathString += `L${this.#drawPoints[0]} ${this.#drawPoints[1]}`; + this.#drawPath.setAttribute("d", this.#drawPathString); + } + }, listenerDrawOptions); + }; + if (this.#drawCurves) { + this.#drawSVG.addEventListener("pointerdown", drawCallback, options); + } else { + this.#drawPlaceholder.addEventListener("pointerdown", drawCallback, options); + } + this.#drawThickness.addEventListener("input", () => { + const { + value: thickness + } = this.#drawThickness; + this.#drawThickness.setAttribute("data-l10n-args", JSON.stringify({ + thickness + })); + if (!this.#drawCurves) { + return; + } + this.#drawPath.setAttribute("stroke-width", thickness); + this.#drawCurves.thickness = thickness; + }, options); + } + #initImageTab(reset) { + if (reset) { + this.#resetTab("image"); + } + this.#disableButtons(this.#imagePath); + const { + signal + } = this.#currentTabAC; + const options = { + signal + }; + const passiveOptions = { + passive: true, + signal + }; + this.#imagePickerLink.addEventListener("keydown", e => { + const { + key + } = e; + if (key === "Enter" || key === " ") { + stopEvent(e); + this.#imagePicker.click(); + } + }, options); + this.#imagePicker.addEventListener("click", () => { + this.#dialog.classList.toggle("waiting", true); + }, passiveOptions); + this.#imagePicker.addEventListener("change", async () => { + const file = this.#imagePicker.files?.[0]; + if (!file || !SupportedImageMimeTypes.includes(file.type)) { + this.#errorBar.hidden = false; + this.#dialog.classList.toggle("waiting", false); + return; + } + await this.#extractSignature(file); + }, passiveOptions); + this.#imagePicker.addEventListener("cancel", () => { + this.#dialog.classList.toggle("waiting", false); + }, passiveOptions); + this.#imagePlaceholder.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); + this.#imagePlaceholder.addEventListener("drop", e => { + const { + dataTransfer: { + files + } + } = e; + if (!files?.length) { + return; + } + for (const file of files) { + if (SupportedImageMimeTypes.includes(file.type)) { + this.#extractSignature(file); + break; + } + } + stopEvent(e); + this.#dialog.classList.toggle("waiting", true); + }, options); + } + async #extractSignature(file) { + let data; + try { + data = await this.#uiManager.imageManager.getFromFile(file); + } catch (e) { + console.error("SignatureManager.#extractSignature.", e); + } + if (!data) { + this.#errorBar.hidden = false; + this.#dialog.classList.toggle("waiting", false); + return; + } + const { + outline + } = this.#extractedSignatureData = this.#currentEditor.getFromImage(data.bitmap); + if (!outline) { + this.#dialog.classList.toggle("waiting", false); + return; + } + this.#imagePlaceholder.hidden = true; + this.#disableButtons(true); + const svgFactory = new DOMSVGFactory(); + const path = this.#imagePath = svgFactory.createElement("path"); + this.#imageSVG.setAttribute("viewBox", outline.viewBox); + this.#imageSVG.setAttribute("preserveAspectRatio", "xMidYMid meet"); + this.#imageSVG.append(path); + path.setAttribute("d", outline.toSVGPath()); + this.#tabsToAltText.get("image").default = file.name; + if (this.#description.value === "") { + this.#description.value = file.name || ""; + this.#clearDescription.disabled = this.#description.value === ""; + } + this.#dialog.classList.toggle("waiting", false); + } + #getOutlineForType() { + return this.#currentEditor.getFromText(this.#typeInput.value, window.getComputedStyle(this.#typeInput)); + } + #getOutlineForDraw() { + const { + width, + height + } = this.#drawSVG.getBoundingClientRect(); + return this.#currentEditor.getDrawnSignature(this.#drawCurves, width, height); + } + #reportTelemetry(data) { + this.#eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + #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", () => { + this.#eventBus.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 this.#signatureStorage.delete(uuid)) { + div.remove(); + this.#reportTelemetry({ + type: "signature", + action: "pdfjs.signature.delete_saved", + data: { + savedCount: await this.#signatureStorage.size() + } + }); + } + }); + const deleteSpan = document.createElement("span"); + deleteButton.append(deleteSpan); + deleteSpan.setAttribute("data-l10n-id", "pdfjs-editor-delete-signature-button-label1"); + this.#addSignatureToolbarButton.before(div); + } + async #signaturesChanged() { + const parent = this.#addSignatureToolbarButton.parentElement; + while (parent.firstElementChild !== this.#addSignatureToolbarButton) { + parent.firstElementChild.remove(); + } + this.#loadSignaturesPromise = null; + await this.loadSignatures(true); + } + getSignature(params) { + return this.open(params); + } + async loadSignatures(reload = false) { + if (!this.#addSignatureToolbarButton || !reload && this.#addSignatureToolbarButton.previousElementSibling || !this.#signatureStorage) { + return; + } + if (!this.#loadSignaturesPromise) { + this.#loadSignaturesPromise = this.#signatureStorage.getAll().then(async signatures => [signatures, await Promise.all(Array.from(signatures.values(), ({ + signatureData + }) => SignatureExtractor.decompressSignature(signatureData)))]); + if (!reload) { + return; + } + } + const [signatures, signaturesData] = await this.#loadSignaturesPromise; + this.#loadSignaturesPromise = 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; + this.#addToolbarButton(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", () => { + this.#editDescriptionDialog.open(editor); + }, { + passive: true + }); + return button; + } + async open({ + uiManager, + editor + }) { + this.#tabsToAltText ||= new Map(this.#tabButtons.keys().map(name => [name, { + value: "", + default: "" + }])); + this.#uiManager = uiManager; + this.#currentEditor = editor; + this.#uiManager.removeEditListeners(); + const isStorageFull = await this.#signatureStorage.isFull(); + this.#saveContainer.classList.toggle("fullStorage", isStorageFull); + this.#saveCheckbox.checked = !isStorageFull; + await this.#overlayManager.open(this.#dialog); + const tabType = this.#tabButtons.get("type"); + tabType.focus(); + tabType.click(); + } + #cancel() { + this.#finish(); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + if (this.#currentEditor._drawId === null) { + this.#currentEditor.remove(); + } + this.#uiManager?.addEditListeners(); + this.#currentTabAC?.abort(); + this.#currentTabAC = null; + this.#uiManager = null; + this.#currentEditor = null; + this.#resetCommon(); + for (const [name] of this.#tabButtons) { + this.#resetTab(name); + } + this.#disableButtons(false); + this.#currentTab = null; + this.#tabsToAltText = null; + } + async #add() { + let data; + const type = this.#currentTab; + switch (type) { + case "type": + data = this.#getOutlineForType(); + break; + case "draw": + data = this.#getOutlineForDraw(); + break; + case "image": + data = this.#extractedSignatureData; + break; + } + let uuid = null; + const description = this.#description.value; + if (this.#saveCheckbox.checked) { + const { + newCurves, + areContours, + thickness, + width, + height + } = data; + const signatureData = await SignatureExtractor.compressSignature({ + outlines: newCurves, + areContours, + thickness, + width, + height + }); + uuid = await this.#signatureStorage.create({ + description, + signatureData + }); + if (uuid) { + this.#addToolbarButton({ + curves: newCurves.map(points => ({ + points + })), + areContours, + thickness, + width, + height + }, uuid, description); + } else { + console.warn("SignatureManager.add: cannot save the signature."); + } + } + const altText = this.#tabsToAltText.get(type); + this.#reportTelemetry({ + type: "signature", + action: "pdfjs.signature.created", + data: { + type, + saved: !!uuid, + savedCount: await this.#signatureStorage.size(), + descriptionChanged: description !== altText.default + } + }); + this.#currentEditor.addSignature(data, DEFAULT_HEIGHT_IN_PAGE, this.#description.value, uuid); + this.#finish(); + } + destroy() { + this.#uiManager = null; + this.#finish(); + } +} +class EditDescriptionDialog { + #currentEditor; + #previousDescription; + #description; + #dialog; + #overlayManager; + #signatureSVG; + #uiManager; + constructor({ + dialog, + description, + cancelButton, + updateButton, + editSignatureView + }, overlayManager) { + const descriptionInput = this.#description = description.firstElementChild; + this.#signatureSVG = editSignatureView; + this.#dialog = dialog; + this.#overlayManager = overlayManager; + dialog.addEventListener("close", this.#close.bind(this)); + dialog.addEventListener("contextmenu", e => { + if (e.target !== this.#description) { + e.preventDefault(); + } + }); + cancelButton.addEventListener("click", this.#cancel.bind(this)); + updateButton.addEventListener("click", this.#update.bind(this)); + const clearDescription = description.lastElementChild; + clearDescription.addEventListener("click", () => { + descriptionInput.value = ""; + clearDescription.disabled = true; + updateButton.disabled = this.#previousDescription === ""; + }); + descriptionInput.addEventListener("input", () => { + const { + value + } = descriptionInput; + clearDescription.disabled = value === ""; + updateButton.disabled = value === this.#previousDescription; + editSignatureView.setAttribute("aria-label", value); + }, { + passive: true + }); + overlayManager.register(dialog); + } + async open(editor) { + this.#uiManager = editor._uiManager; + this.#currentEditor = editor; + this.#previousDescription = this.#description.value = editor.description; + this.#description.dispatchEvent(new Event("input")); + this.#uiManager.removeEditListeners(); + const { + areContours, + outline + } = editor.getSignaturePreview(); + const svgFactory = new DOMSVGFactory(); + const path = svgFactory.createElement("path"); + this.#signatureSVG.append(path); + this.#signatureSVG.setAttribute("viewBox", outline.viewBox); + path.setAttribute("d", outline.toSVGPath()); + if (areContours) { + path.classList.add("contours"); + } + await this.#overlayManager.open(this.#dialog); + } + async #update() { + this.#currentEditor._reportTelemetry({ + action: "pdfjs.signature.edit_description", + data: { + hasBeenChanged: true + } + }); + this.#currentEditor.description = this.#description.value; + this.#finish(); + } + #cancel() { + this.#currentEditor._reportTelemetry({ + action: "pdfjs.signature.edit_description", + data: { + hasBeenChanged: false + } + }); + this.#finish(); + } + #finish() { + this.#overlayManager.closeIfActive(this.#dialog); + } + #close() { + this.#uiManager?.addEditListeners(); + this.#uiManager = null; + this.#currentEditor = null; + this.#signatureSVG.firstElementChild.remove(); + } +} + +;// ./web/toolbar.js + + +class Toolbar { + #colorPicker = null; + #opts; + constructor(options, eventBus, toolbarDensity = 0) { + this.#opts = options; + this.eventBus = eventBus; + const buttons = [{ + element: options.previous, + eventName: "previouspage" + }, { + element: options.next, + eventName: "nextpage" + }, { + element: options.zoomIn, + eventName: "zoomin" + }, { + element: options.zoomOut, + eventName: "zoomout" + }, { + element: options.print, + eventName: "print" + }, { + element: options.download, + eventName: "download" + }, { + element: options.editorFreeTextButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorFreeTextButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.FREETEXT; + } + } + }, { + element: options.editorHighlightButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorHighlightButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.HIGHLIGHT; + } + } + }, { + element: options.editorInkButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorInkButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.INK; + } + } + }, { + element: options.editorStampButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorStampButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.STAMP; + } + }, + telemetry: { + type: "editing", + data: { + action: "pdfjs.image.icon_click" + } + } + }, { + element: options.editorSignatureButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorSignatureButton; + return classList.contains("toggled") ? AnnotationEditorType.NONE : AnnotationEditorType.SIGNATURE; + } + } + }]; + this.#bindListeners(buttons); + this.#updateToolbarDensity({ + value: toolbarDensity + }); + this.reset(); + } + #updateToolbarDensity({ + value + }) { + let name = "normal"; + switch (value) { + case 1: + name = "compact"; + break; + case 2: + name = "touch"; + break; + } + document.documentElement.setAttribute("data-toolbar-density", name); + } + setPageNumber(pageNumber, pageLabel) { + this.pageNumber = pageNumber; + this.pageLabel = pageLabel; + this.#updateUIState(false); + } + setPagesCount(pagesCount, hasPageLabels) { + this.pagesCount = pagesCount; + this.hasPageLabels = hasPageLabels; + this.#updateUIState(true); + } + setPageScale(pageScaleValue, pageScale) { + this.pageScaleValue = (pageScaleValue || pageScale).toString(); + this.pageScale = pageScale; + this.#updateUIState(false); + } + reset() { + this.#colorPicker = null; + this.pageNumber = 0; + this.pageLabel = null; + this.hasPageLabels = false; + this.pagesCount = 0; + this.pageScaleValue = DEFAULT_SCALE_VALUE; + this.pageScale = DEFAULT_SCALE; + this.#updateUIState(true); + this.updateLoadingIndicatorState(); + this.#editorModeChanged({ + mode: AnnotationEditorType.DISABLE + }); + } + #bindListeners(buttons) { + const { + eventBus + } = this; + const { + editorHighlightColorPicker, + editorHighlightButton, + pageNumber, + scaleSelect + } = this.#opts; + const self = this; + for (const { + element, + eventName, + eventDetails, + telemetry + } of buttons) { + 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 ({ + target + }) { + if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === "OPTION") { + this.blur(); + } + }); + scaleSelect.oncontextmenu = noContextMenu; + eventBus._on("annotationeditormodechanged", this.#editorModeChanged.bind(this)); + eventBus._on("showannotationeditorui", ({ + mode + }) => { + switch (mode) { + case AnnotationEditorType.HIGHLIGHT: + editorHighlightButton.click(); + break; + } + }); + eventBus._on("toolbardensity", this.#updateToolbarDensity.bind(this)); + if (editorHighlightColorPicker) { + eventBus._on("annotationeditoruimanager", ({ + uiManager + }) => { + const cp = this.#colorPicker = new ColorPicker({ + uiManager + }); + uiManager.setMainHighlightColorPicker(cp); + editorHighlightColorPicker.append(cp.renderMainDropdown()); + }); + eventBus._on("mainhighlightcolorpickerupdatecolor", ({ + value + }) => { + this.#colorPicker?.updateColor(value); + }); + } + } + #editorModeChanged({ + mode + }) { + const { + editorFreeTextButton, + editorFreeTextParamsToolbar, + editorHighlightButton, + editorHighlightParamsToolbar, + editorInkButton, + editorInkParamsToolbar, + editorStampButton, + editorStampParamsToolbar, + editorSignatureButton, + editorSignatureParamsToolbar + } = this.#opts; + 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; + } + #updateUIState(resetNumPages = false) { + const { + pageNumber, + pagesCount, + pageScaleValue, + pageScale + } = this; + const opts = this.#opts; + 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; + opts.zoomOut.disabled = pageScale <= MIN_SCALE; + opts.zoomIn.disabled = pageScale >= MAX_SCALE; + let predefinedValueFound = false; + 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 + })); + } + } + updateLoadingIndicatorState(loading = false) { + const { + pageNumber + } = this.#opts; + pageNumber.classList.toggle("loading", loading); + } +} + +;// ./web/view_history.js +const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; +class ViewHistory { + constructor(fingerprint, cacheSize = 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() { + const databaseStr = JSON.stringify(this.database); + localStorage.setItem("pdfjs.history", databaseStr); + } + async _readFromStorage() { + return localStorage.getItem("pdfjs.history"); + } + 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 = 10000; +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, + 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, + async initialize(appConfig) { + this.appConfig = appConfig; + try { + await this.preferences.initializedPromise; + } catch (ex) { + console.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(); + }, + 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); + } catch (ex) { + console.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) { + console.error("_parseHashParams:", ex); + } + break; + } + } + if (params.has("pdfbug")) { + AppOptions.setAll({ + pdfBug: true, + fontExtraProperties: true + }); + const enabled = params.get("pdfbug").split(","); + try { + await loadPDFBug(); + this._PDFBug.init(mainContainer, enabled); + } catch (ex) { + console.error("_parseHashParams:", ex); + } + } + 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(); + const findController = this.findController = new PDFFindController({ + linkService, + eventBus, + updateMatchesCountOnProgress: true + }); + 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"); + const pdfViewer = this.pdfViewer = new PDFViewer({ + container, + viewer, + eventBus, + renderingQueue, + linkService, + downloadManager, + altTextManager, + signatureManager, + editorUndoBar: this.editorUndoBar, + findController, + 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"), + enablePrintAutoRotate: AppOptions.get("enablePrintAutoRotate"), + maxCanvasPixels, + maxCanvasDim, + enableDetailCanvas: AppOptions.get("enableDetailCanvas"), + enablePermissions: AppOptions.get("enablePermissions"), + pageColors, + mlManager, + abortSignal, + enableHWA, + supportsPinchToZoom: this.supportsPinchToZoom, + enableAutoLinking: AppOptions.get("enableAutoLinking") + }); + 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; + } + 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); + } + 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("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.secondaryToolbar?.presentationModeButton) { + this.pdfPresentationMode = new PDFPresentationMode({ + container, + pdfViewer, + eventBus + }); + } + if (appConfig.passwordOverlay) { + this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay, overlayManager, this.isViewerEmbedded); + } + 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.hidden = true; + fileInput.type = "file"; + fileInput.value = null; + 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) { + 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 (evt.dataTransfer.files?.[0].type !== "application/pdf") { + return; + } + stopEvent(evt); + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.dataTransfer + }); + }); + if (!AppOptions.get("supportsDocumentFonts")) { + AppOptions.set("disableFontFace", true); + this.l10n.get("pdfjs-web-fonts-disabled").then(msg => { + console.warn(msg); + }); + } + if (!this.supportsPrinting) { + appConfig.toolbar?.print?.classList.add("hidden"); + appConfig.secondaryToolbar?.printButton.classList.add("hidden"); + } + if (!this.supportsFullscreen) { + appConfig.secondaryToolbar?.presentationModeButton.classList.add("hidden"); + } + if (this.supportsIntegratedFind) { + appConfig.findBar?.toggleButton?.classList.add("hidden"); + } + if (file) { + this.open({ + url: file + }); + } else { + this._hideViewBookmark(); + } + }, + 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")); + }, + get loadingBar() { + const barElement = document.getElementById("loadingBar"); + const bar = barElement ? new ProgressBar(barElement) : null; + 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(url = "", downloadUrl = null) { + this.url = url; + this.baseUrl = updateUrlHash(url, "", true); + if (downloadUrl) { + this._downloadUrl = downloadUrl === url ? this.baseUrl : updateUrlHash(downloadUrl, "", true); + } + if (isDataScheme(url)) { + this._hideViewBookmark(); + } + let title = pdfjs_getPdfFilenameFromUrl(url, ""); + if (!title) { + try { + title = decodeURIComponent(getFilenameFromUrl(url)); + } catch {} + } + this.setTitle(title || url); + }, + setTitle(title = 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 || pdfjs_getPdfFilenameFromUrl(this.url); + }, + _hideViewBookmark() { + 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) { + if (this.pdfLoadingTask) { + await this.close(); + } + const workerParams = AppOptions.getAll(OptionKind.WORKER); + Object.assign(GlobalWorkerOptions, workerParams); + if (args.url) { + this.setTitleUsingUrl(args.originalUrl || args.url, args.url); + } + const apiParams = AppOptions.getAll(OptionKind.API); + const loadingTask = getDocument({ + ...apiParams, + ...args + }); + 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 = ({ + loaded, + total + }) => { + this.progress(loaded / total); + }; + return loadingTask.promise.then(pdfDocument => { + 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"; + } + 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() { + if (this._saveInProgress) { + return; + } + this._saveInProgress = true; + await this.pdfScriptingManager.dispatchWillSave(); + try { + const data = await this.pdfDocument.saveDocument(); + this.downloadManager.download(data, this._downloadUrl, this._docFilename); + } catch (reason) { + console.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"); + await (this.pdfDocument?.annotationStorage.size > 0 ? this.save() : this.download()); + classList.remove("wait"); + }, + async _documentError(key, moreInfo = 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, moreInfo = 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}`); + } + } + } + console.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(({ + length + }) => { + 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 ([timeStamp, stored, pageLayout, pageMode, openAction]) => { + const viewOnLoad = AppOptions.get("viewOnLoad"); + this._initializePdfHistory({ + fingerprint: pdfDocument.fingerprints[0], + viewOnLoad, + initialDest: openAction?.dest + }); + const initialBookmark = this.initialBookmark; + const zoom = AppOptions.get("defaultZoomValue"); + 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 => { + 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); + }, + 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) { + console.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; + console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${version || "?"} [${build || "?"}])`); + let pdfTitle = info.Title; + const metadataTitle = metadata?.get("dc:title"); + if (metadataTitle) { + if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) { + pdfTitle = metadataTitle; + } + } + 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) { + console.warn("Warning: XFA Foreground documents are not supported"); + } else { + console.warn("Warning: XFA support is not enabled"); + } + } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) { + console.warn("Warning: Interactive form support is not enabled"); + } + if (info.IsSignaturesPresent) { + console.warn("Warning: Digital signatures validation is not supported"); + } + this.eventBus.dispatch("metadataloaded", { + source: this + }); + }, + 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({ + fingerprint, + viewOnLoad, + initialDest = null + }) { + 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, { + rotation, + sidebarView, + scrollMode, + spreadMode + } = {}) { + 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; + this.pdfLinkService.setHash(this.initialBookmark); + this.initialBookmark = null; + } else if (storedHash) { + setRotation(rotation); + this.pdfLinkService.setHash(storedHash); + } + this.toolbar?.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); + this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber); + if (!this.pdfViewer.currentScaleValue) { + this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + } + }, + _cleanup() { + 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(), + printContainer: this.appConfig.printContainer, + printResolution: AppOptions.get("printResolution"), + printAnnotationStoragePromise: this._printAnnotationStoragePromise + }); + 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) { + window.print(); + } + }, + 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("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(evt = null) { + if (evt) { + pdfViewer.refresh(); + } + const mediaQueryList = window.matchMedia(`(resolution: ${OutputScale.pixelRatio}dppx)`); + mediaQueryList.addEventListener("change", addWindowResolutionChange, { + once: true, + signal + }); + } + addWindowResolutionChange(); + 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 + }); + 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 + }); + 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({ + pageNumber +}) { + if (pageNumber === this.page) { + this.toolbar?.updateLoadingIndicatorState(true); + } +} +function onPageRendered({ + pageNumber, + isDetailView, + error +}) { + 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({ + mode +}) { + 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: + console.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({ + view +}) { + this.pdfRenderingQueue.isThumbnailViewEnabled = view === SidebarView.THUMBS; + if (this.isInitialViewSet) { + this.store?.set("sidebarView", view).catch(() => {}); + } +} +function onUpdateViewarea({ + location +}) { + if (this.isInitialViewSet) { + this.store?.setMultiple({ + page: location.pageNumber, + zoom: location.scale, + scrollLeft: location.left, + scrollTop: location.top, + rotation: location.rotation + }).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) { + 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({ + matchesCount +}) { + if (this.supportsIntegratedFind) { + this.externalServices.updateFindMatchesCount(matchesCount); + } else { + this.findBar?.updateResultsCount(matchesCount); + } +} +function onUpdateFindControlState({ + state, + previous, + entireWord, + matchesCount, + rawQuery +}) { + 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(); +} +function onRotationChanging(evt) { + if (this.pdfThumbnailViewer) { + this.pdfThumbnailViewer.pagesRotation = evt.pagesRotation; + } + this.forceRendering(); + this.pdfViewer.currentPageNumber = evt.pageNumber; +} +function onPageChanging({ + pageNumber, + pageLabel +}) { + 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); +} +function onWheel(evt) { + const { + pdfViewer, + supportsMouseWheelZoomCtrlKey, + supportsMouseWheelZoomMetaKey, + supportsPinchToZoom + } = this; + if (pdfViewer.isInPresentationMode) { + 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({ + target +}) { + 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)) { + 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 (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + switch (evt.keyCode) { + case 70: + if (!this.supportsIntegratedFind && !evt.shiftKey) { + 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")) { + 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 (!handled && !isViewerInPresentationMode) { + if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") { + ensureViewerFocused = true; + } + } + if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } + if (handled) { + evt.preventDefault(); + } +} +function beforeUnload(evt) { + evt.preventDefault(); + evt.returnValue = ""; + return false; +} + +;// ./web/viewer.js +const pdfjsVersion = "5.2.133"; +const pdfjsBuild = "4f7761353"; +const AppConstants = { + LinkTarget: LinkTarget, + RenderingStates: RenderingStates, + ScrollMode: ScrollMode, + SpreadMode: SpreadMode +}; +window.PDFViewerApplication = PDFViewerApplication; +window.PDFViewerApplicationConstants = AppConstants; +window.PDFViewerApplicationOptions = AppOptions; +function getViewerConfiguration() { + return { + appContainer: 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("zoomInButton"), + zoomOut: document.getElementById("zoomOutButton"), + print: document.getElementById("printButton"), + editorFreeTextButton: document.getElementById("editorFreeTextButton"), + editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"), + editorHighlightButton: document.getElementById("editorHighlightButton"), + editorHighlightParamsToolbar: document.getElementById("editorHighlightParamsToolbar"), + editorHighlightColorPicker: document.getElementById("editorHighlightColorPicker"), + editorInkButton: document.getElementById("editorInkButton"), + editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"), + editorStampButton: document.getElementById("editorStampButton"), + editorStampParamsToolbar: document.getElementById("editorStampParamsToolbar"), + editorSignatureButton: document.getElementById("editorSignatureButton"), + editorSignatureParamsToolbar: document.getElementById("editorSignatureParamsToolbar"), + download: document.getElementById("downloadButton") + }, + secondaryToolbar: { + toolbar: document.getElementById("secondaryToolbar"), + toggleButton: document.getElementById("secondaryToolbarToggleButton"), + presentationModeButton: document.getElementById("presentationMode"), + openFileButton: document.getElementById("secondaryOpenFile"), + printButton: document.getElementById("secondaryPrint"), + 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("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("viewFindButton"), + findField: document.getElementById("findInput"), + highlightAllCheckbox: document.getElementById("findHighlightAll"), + caseSensitiveCheckbox: document.getElementById("findMatchCase"), + matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"), + entireWordCheckbox: document.getElementById("findEntireWord"), + findMsg: document.getElementById("findMsg"), + findResultsCount: document.getElementById("findResultsCount"), + findPreviousButton: document.getElementById("findPreviousButton"), + findNextButton: document.getElementById("findNextButton") + }, + 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") + }, + printContainer: document.getElementById("printContainer"), + editorUndoBar: { + container: document.getElementById("editorUndoBar"), + message: document.getElementById("editorUndoBarMessage"), + undoButton: document.getElementById("editorUndoBarUndoButton"), + closeButton: document.getElementById("editorUndoBarCloseButton") + } + }; +} +function webViewerLoad() { + const config = getViewerConfiguration(); + const event = new CustomEvent("webviewerloaded", { + bubbles: true, + cancelable: true, + detail: { + source: window + } + }); + try { + parent.document.dispatchEvent(event); + } catch (ex) { + console.error("webviewerloaded:", ex); + document.dispatchEvent(event); + } + PDFViewerApplication.run(config); +} +document.blockUnblockOnload?.(true); +if (document.readyState === "interactive" || document.readyState === "complete") { + webViewerLoad(); +} else { + document.addEventListener("DOMContentLoaded", webViewerLoad, true); +} + +export { PDFViewerApplication, AppConstants as PDFViewerApplicationConstants, AppOptions as PDFViewerApplicationOptions }; + +//# sourceMappingURL=viewer.mjs.map \ No newline at end of file diff --git a/resources/js/pdfjs-5.2.133-dist/web/viewer.mjs.map b/resources/js/pdfjs-5.2.133-dist/web/viewer.mjs.map new file mode 100644 index 0000000..ec2061f --- /dev/null +++ b/resources/js/pdfjs-5.2.133-dist/web/viewer.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"viewer.mjs","mappings":"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","sources":["webpack://pdf.js/./web/pdfjs.js","webpack://pdf.js/./web/ui_utils.js","webpack://pdf.js/./web/app_options.js","webpack://pdf.js/./web/pdf_link_service.js","webpack://pdf.js/./web/event_utils.js","webpack://pdf.js/./web/external_services.js","webpack://pdf.js/./web/preferences.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/types.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resolver.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/scope.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/builtins.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/memoizer.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/bundle.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resource.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/index.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/overlay.js","webpack://pdf.js/./node_modules/cached-iterable/src/cached_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_sync_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_async_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/index.mjs","webpack://pdf.js/./node_modules/@fluent/dom/esm/localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/dom_localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/index.js","webpack://pdf.js/./web/l10n.js","webpack://pdf.js/./web/genericl10n.js","webpack://pdf.js/./web/generic_scripting.js","webpack://pdf.js/./web/generic_signature_storage.js","webpack://pdf.js/./web/genericcom.js","webpack://pdf.js/./web/new_alt_text_manager.js","webpack://pdf.js/./web/alt_text_manager.js","webpack://pdf.js/./web/annotation_editor_params.js","webpack://pdf.js/./web/caret_browsing.js","webpack://pdf.js/./web/download_manager.js","webpack://pdf.js/./web/editor_undo_bar.js","webpack://pdf.js/./web/overlay_manager.js","webpack://pdf.js/./web/password_prompt.js","webpack://pdf.js/./web/base_tree_viewer.js","webpack://pdf.js/./web/pdf_attachment_viewer.js","webpack://pdf.js/./web/grab_to_pan.js","webpack://pdf.js/./web/pdf_cursor_tools.js","webpack://pdf.js/./web/pdf_document_properties.js","webpack://pdf.js/./web/pdf_find_utils.js","webpack://pdf.js/./web/pdf_find_controller.js","webpack://pdf.js/./web/pdf_find_bar.js","webpack://pdf.js/./web/pdf_history.js","webpack://pdf.js/./web/pdf_layer_viewer.js","webpack://pdf.js/./web/pdf_outline_viewer.js","webpack://pdf.js/./web/pdf_presentation_mode.js","webpack://pdf.js/./web/xfa_layer_builder.js","webpack://pdf.js/./web/print_utils.js","webpack://pdf.js/./web/pdf_print_service.js","webpack://pdf.js/./web/pdf_rendering_queue.js","webpack://pdf.js/./web/pdf_scripting_manager.js","webpack://pdf.js/./web/pdf_sidebar.js","webpack://pdf.js/./web/pdf_thumbnail_view.js","webpack://pdf.js/./web/pdf_thumbnail_viewer.js","webpack://pdf.js/./web/annotation_editor_layer_builder.js","webpack://pdf.js/./web/annotation_layer_builder.js","webpack://pdf.js/./web/autolinker.js","webpack://pdf.js/./web/base_pdf_page_view.js","webpack://pdf.js/./web/draw_layer_builder.js","webpack://pdf.js/./web/pdf_page_detail_view.js","webpack://pdf.js/./web/struct_tree_layer_builder.js","webpack://pdf.js/./web/text_accessibility.js","webpack://pdf.js/./web/text_highlighter.js","webpack://pdf.js/./web/text_layer_builder.js","webpack://pdf.js/./web/pdf_page_view.js","webpack://pdf.js/./web/pdf_viewer.js","webpack://pdf.js/./web/secondary_toolbar.js","webpack://pdf.js/./web/signature_manager.js","webpack://pdf.js/./web/toolbar.js","webpack://pdf.js/./web/view_history.js","webpack://pdf.js/./web/app.js","webpack://pdf.js/./web/viewer.js"],"sourcesContent":["/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n AnnotationType,\n build,\n ColorPicker,\n createValidAbsoluteUrl,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getUuid,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n isValidExplicitDest,\n MathClamp,\n noContextMenu,\n normalizeUnicode,\n OPS,\n OutputScale,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n ResponseException,\n setLayerDimensions,\n shadow,\n SignatureExtractor,\n stopEvent,\n SupportedImageMimeTypes,\n TextLayer,\n TouchManager,\n updateUrlHash,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n} = globalThis.pdfjsLib;\n\nexport {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n AnnotationType,\n build,\n ColorPicker,\n createValidAbsoluteUrl,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getUuid,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n isValidExplicitDest,\n MathClamp,\n noContextMenu,\n normalizeUnicode,\n OPS,\n OutputScale,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n ResponseException,\n setLayerDimensions,\n shadow,\n SignatureExtractor,\n stopEvent,\n SupportedImageMimeTypes,\n TextLayer,\n TouchManager,\n updateUrlHash,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MathClamp } from \"pdfjs-lib\";\n\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst SidebarView = {\n UNKNOWN: -1,\n NONE: 0,\n THUMBS: 1, // Default value.\n OUTLINE: 2,\n ATTACHMENTS: 3,\n LAYERS: 4,\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_PERMISSIONS: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n PAGE: 3,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\nconst CursorTool = {\n SELECT: 0, // The default value.\n HAND: 1,\n ZOOM: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {HTMLElement} element - The element to be visible.\n * @param {Object} [spot] - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {number} [spot.left]\n * @param {number} [spot.top]\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n * ignore elements that either: Contains marked content identifiers,\n * or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (scrollMatches &&\n (parent.classList.contains(\"markedContent\") ||\n getComputedStyle(parent).overflow === \"hidden\"))\n ) {\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n offsetX += spot.left;\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback, abortSignal = undefined) {\n const debounceScroll = function (evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n const currentX = viewAreaElement.scrollLeft;\n const lastX = state.lastX;\n if (currentX !== lastX) {\n state.right = currentX > lastX;\n }\n state.lastX = currentX;\n const currentY = viewAreaElement.scrollTop;\n const lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n const state = {\n right: true,\n down: true,\n lastX: viewAreaElement.scrollLeft,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener(\"scroll\", debounceScroll, {\n useCapture: true,\n signal: abortSignal,\n });\n abortSignal?.addEventListener(\n \"abort\",\n () => window.cancelAnimationFrame(rAF),\n { once: true }\n );\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value¶m2=...).\n * @param {string} query\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n const params = new Map();\n for (const [key, value] of new URLSearchParams(query)) {\n params.set(key.toLowerCase(), value);\n }\n return params;\n}\n\nconst InvisibleCharsRegExp = /[\\x00-\\x1F]/g;\n\n/**\n * @param {string} str\n * @param {boolean} [replaceInvisible]\n */\nfunction removeNullCharacters(str, replaceInvisible = false) {\n if (!InvisibleCharsRegExp.test(str)) {\n return str;\n }\n if (replaceInvisible) {\n return str.replaceAll(InvisibleCharsRegExp, m => (m === \"\\x00\" ? \"\" : \" \"));\n }\n return str.replaceAll(\"\\x00\", \"\");\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition, start = 0) {\n let minIndex = start;\n let maxIndex = items.length - 1;\n\n if (maxIndex < 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n const currentIndex = (minIndex + maxIndex) >> 1;\n const currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n * They are both natural numbers.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n const xinv = 1 / x;\n const limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n const x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0,\n b = 1,\n c = 1,\n d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n const p = a + c,\n q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p;\n d = q;\n } else {\n a = p;\n b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\n/**\n * @param {number} x - A positive number to round to a multiple of `div`.\n * @param {number} div - A natural number.\n */\nfunction floorToDivide(x, div) {\n return x - (x % div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = ((x2 - x1) / 72) * userUnit;\n const height = ((y2 - y1) / 72) * userUnit;\n\n return {\n width: changeOrientation ? height : width,\n height: changeOrientation ? width : height,\n };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n * before the first visible element in `views`, but not by too much. (Usually,\n * this will be the first element in the first partially visible row in\n * `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n // binarySearchFirstItem's assumption is that the input is ordered, with only\n // one index where the conditions flips from false to true: [false ...,\n // true...]. With vertical scrolling and spreads, it is possible to have\n // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n // similar sequence, with many more mixed true and false in the middle.\n //\n // So there is no guarantee that the binary search yields the index of the\n // first visible element. It could have been any of the other visible elements\n // that were preceded by a hidden element.\n\n // Of course, if either this element or the previous (hidden) element is also\n // the first element, there's nothing to worry about.\n if (index < 2) {\n return index;\n }\n\n // That aside, the possible cases are represented below.\n //\n // **** = fully hidden\n // A*B* = mix of partially visible and/or hidden pages\n // CDEF = fully visible\n //\n // (1) Binary search could have returned A, in which case we can stop.\n // (2) Binary search could also have returned B, in which case we need to\n // check the whole row.\n // (3) Binary search could also have returned C, in which case we need to\n // check the whole previous row.\n //\n // There's one other possibility:\n //\n // **** = fully hidden\n // ABCD = mix of fully and/or partially visible pages\n //\n // (4) Binary search could only have returned A.\n\n // Initially assume that we need to find the beginning of the current row\n // (case 1, 2, or 4), which means finding a page that is above the current\n // page's top. If the found page is partially visible, we're definitely not in\n // case 3, and this assumption is correct.\n let elt = views[index].div;\n let pageTop = elt.offsetTop + elt.clientTop;\n\n if (pageTop >= top) {\n // The found page is fully visible, so we're actually either in case 3 or 4,\n // and unfortunately we can't tell the difference between them without\n // scanning the entire previous row, so we just conservatively assume that\n // we do need to backtrack to that row. In both cases, the previous page is\n // in the previous row, so use its top instead.\n elt = views[index - 1].div;\n pageTop = elt.offsetTop + elt.clientTop;\n }\n\n // Now we backtrack to the first page that still has its bottom below\n // `pageTop`, which is the top of a page in the first visible row (unless\n // we're in case 4, in which case it's the row before that).\n // `index` is found by binary search, so the page at `index - 1` is\n // invisible and we can start looking for potentially visible pages from\n // `index - 2`. (However, if this loop terminates on its first iteration,\n // which is the case when pages are stacked vertically, `index` should remain\n // unchanged, so we use a distinct loop variable.)\n for (let i = index - 2; i >= 0; --i) {\n elt = views[i].div;\n if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n // We have reached the previous row, so stop now.\n // This loop is expected to terminate relatively quickly because the\n // number of pages per row is expected to be small.\n break;\n }\n index = i;\n }\n return index;\n}\n\n/**\n * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n * HTMLElement, which should all be descendants of `scrollEl` satisfying the\n * relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n * sorted in descending order of the percent of their padding box that is\n * visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n * laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n * be in right-to-left mode. The default value is `false`.\n */\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n * - If `horizontal`, no left of any earlier element is to the right of the\n * left of any later element.\n * - Otherwise, `views` can be split into contiguous rows where, within a row,\n * no top of any element is below the bottom of any other element, and\n * between rows, no bottom of any element in an earlier row is below the\n * top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param {GetVisibleElementsParameters} params\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n scrollEl,\n views,\n sortByVisibility = false,\n horizontal = false,\n rtl = false,\n}) {\n const top = scrollEl.scrollTop,\n bottom = top + scrollEl.clientHeight;\n const left = scrollEl.scrollLeft,\n right = left + scrollEl.clientWidth;\n\n // Throughout this \"generic\" function, comments will assume we're working with\n // PDF document pages, which is the most important and complex case. In this\n // case, the visible elements we're actually interested is the page canvas,\n // which is contained in a wrapper which adds no padding/border/margin, which\n // is itself contained in `view.div` which adds no padding (but does add a\n // border). So, as specified in this function's doc comment, this function\n // does all of its work on the padding edge of the provided views, starting at\n // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n // the border). Adding clientWidth/Height gets us the bottom-right corner of\n // the padding edge.\n function isElementBottomAfterViewTop(view) {\n const element = view.div;\n const elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n function isElementNextAfterViewHorizontally(view) {\n const element = view.div;\n const elementLeft = element.offsetLeft + element.clientLeft;\n const elementRight = elementLeft + element.clientWidth;\n return rtl ? elementLeft < right : elementRight > left;\n }\n\n const visible = [],\n ids = new Set(),\n numViews = views.length;\n let firstVisibleElementInd = binarySearchFirstItem(\n views,\n horizontal\n ? isElementNextAfterViewHorizontally\n : isElementBottomAfterViewTop\n );\n\n // Please note the return value of the `binarySearchFirstItem` function when\n // no valid element is found (hence the `firstVisibleElementInd` check below).\n if (\n firstVisibleElementInd > 0 &&\n firstVisibleElementInd < numViews &&\n !horizontal\n ) {\n // In wrapped scrolling (or vertical scrolling with spreads), with some page\n // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n // condition: there can be pages with bottoms above the view top between\n // pages with bottoms below. This function detects and corrects that error;\n // see it for more comments.\n firstVisibleElementInd = backtrackBeforeAllVisibleElements(\n firstVisibleElementInd,\n views,\n top\n );\n }\n\n // lastEdge acts as a cutoff for us to stop looping, because we know all\n // subsequent pages will be hidden.\n //\n // When using wrapped scrolling or vertical scrolling with spreads, we can't\n // simply stop the first time we reach a page below the bottom of the view;\n // the tops of subsequent pages on the same row could still be visible. In\n // horizontal scrolling, we don't have that issue, so we can stop as soon as\n // we pass `right`, without needing the code below that handles the -1 case.\n let lastEdge = horizontal ? right : -1;\n\n for (let i = firstVisibleElementInd; i < numViews; i++) {\n const view = views[i],\n element = view.div;\n const currentWidth = element.offsetLeft + element.clientLeft;\n const currentHeight = element.offsetTop + element.clientTop;\n const viewWidth = element.clientWidth,\n viewHeight = element.clientHeight;\n const viewRight = currentWidth + viewWidth;\n const viewBottom = currentHeight + viewHeight;\n\n if (lastEdge === -1) {\n // As commented above, this is only needed in non-horizontal cases.\n // Setting lastEdge to the bottom of the first page that is partially\n // visible ensures that the next page fully below lastEdge is on the\n // next row, which has to be fully hidden along with all subsequent rows.\n if (viewBottom >= bottom) {\n lastEdge = viewBottom;\n }\n } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n break;\n }\n\n if (\n viewBottom <= top ||\n currentHeight >= bottom ||\n viewRight <= left ||\n currentWidth >= right\n ) {\n continue;\n }\n\n const minY = Math.max(0, top - currentHeight);\n const minX = Math.max(0, left - currentWidth);\n\n const hiddenHeight = minY + Math.max(0, viewBottom - bottom);\n const hiddenWidth = minX + Math.max(0, viewRight - right);\n\n const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n visibleArea:\n // We only specify which part of the page is visible when it's not\n // the full page, as there is no point in handling a partial page\n // rendering otherwise.\n percent === 100\n ? null\n : {\n minX,\n minY,\n maxX: Math.min(viewRight, right) - currentWidth,\n maxY: Math.min(viewBottom, bottom) - currentHeight,\n },\n view,\n percent,\n widthPercent: (fractionWidth * 100) | 0,\n });\n ids.add(view.id);\n }\n\n const first = visible[0],\n last = visible.at(-1);\n\n if (sortByVisibility) {\n visible.sort(function (a, b) {\n const pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, ids };\n}\n\nfunction normalizeWheelEventDirection(evt) {\n let delta = Math.hypot(evt.deltaX, evt.deltaY);\n const angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n const deltaMode = evt.deltaMode; // Avoid being affected by bug 1392460.\n let delta = normalizeWheelEventDirection(evt);\n\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(ScrollMode).includes(mode) &&\n mode !== ScrollMode.UNKNOWN\n );\n}\n\nfunction isValidSpreadMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(SpreadMode).includes(mode) &&\n mode !== SpreadMode.UNKNOWN\n );\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof window === \"undefined\"\n ) {\n // Prevent \"ReferenceError: window is not defined\" errors when running the\n // unit-tests in Node.js environments.\n setTimeout(resolve, 20);\n return;\n }\n window.requestAnimationFrame(resolve);\n});\n\nconst docStyle =\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ? null\n : document.documentElement.style;\n\nclass ProgressBar {\n #classList = null;\n\n #disableAutoFetchTimeout = null;\n\n #percent = 0;\n\n #style = null;\n\n #visible = true;\n\n constructor(bar) {\n this.#classList = bar.classList;\n this.#style = bar.style;\n }\n\n get percent() {\n return this.#percent;\n }\n\n set percent(val) {\n this.#percent = MathClamp(val, 0, 100);\n\n if (isNaN(val)) {\n this.#classList.add(\"indeterminate\");\n return;\n }\n this.#classList.remove(\"indeterminate\");\n\n this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n const container = viewer.parentNode;\n const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.#style.setProperty(\n \"--progressBar-end-offset\",\n `${scrollbarWidth}px`\n );\n }\n }\n\n setDisableAutoFetch(delay = /* ms = */ 5000) {\n if (this.#percent === 100 || isNaN(this.#percent)) {\n return;\n }\n if (this.#disableAutoFetchTimeout) {\n clearTimeout(this.#disableAutoFetchTimeout);\n }\n this.show();\n\n this.#disableAutoFetchTimeout = setTimeout(() => {\n this.#disableAutoFetchTimeout = null;\n this.hide();\n }, delay);\n }\n\n hide() {\n if (!this.#visible) {\n return;\n }\n this.#visible = false;\n this.#classList.add(\"hidden\");\n }\n\n show() {\n if (this.#visible) {\n return;\n }\n this.#visible = true;\n this.#classList.remove(\"hidden\");\n }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n let curRoot = document;\n let curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n while (curActiveOrFocused?.shadowRoot) {\n curRoot = curActiveOrFocused.shadowRoot;\n curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n }\n\n return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * @param {string} layout - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n let scrollMode = ScrollMode.VERTICAL,\n spreadMode = SpreadMode.NONE;\n\n switch (layout) {\n case \"SinglePage\":\n scrollMode = ScrollMode.PAGE;\n break;\n case \"OneColumn\":\n break;\n case \"TwoPageLeft\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnLeft\":\n spreadMode = SpreadMode.ODD;\n break;\n case \"TwoPageRight\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnRight\":\n spreadMode = SpreadMode.EVEN;\n break;\n }\n return { scrollMode, spreadMode };\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n * since the Fullscreen API used in browsers requires that entering\n * fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n switch (mode) {\n case \"UseNone\":\n return SidebarView.NONE;\n case \"UseThumbs\":\n return SidebarView.THUMBS;\n case \"UseOutlines\":\n return SidebarView.OUTLINE;\n case \"UseAttachments\":\n return SidebarView.ATTACHMENTS;\n case \"UseOC\":\n return SidebarView.LAYERS;\n }\n return SidebarView.NONE; // Default value.\n}\n\nfunction toggleCheckedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-checked\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleExpandedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-expanded\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\n// In Firefox, the css calc function uses f32 precision but the Chrome or Safari\n// are using f64 one. So in order to have the same rendering in all browsers, we\n// need to use the right precision in order to have correct dimensions.\nconst calcRound =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? Math.fround\n : (function () {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ) {\n return x => x;\n }\n const e = document.createElement(\"div\");\n e.style.width = \"round(down, calc(1.6666666666666665 * 792px), 1px)\";\n return e.style.width === \"calc(1320px)\" ? Math.fround : x => x;\n })();\n\nexport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n approximateFraction,\n AutoPrintRegExp,\n backtrackBeforeAllVisibleElements, // only exported for testing\n binarySearchFirstItem,\n calcRound,\n CursorTool,\n DEFAULT_SCALE,\n DEFAULT_SCALE_DELTA,\n DEFAULT_SCALE_VALUE,\n docStyle,\n floorToDivide,\n getActiveOrFocusedElement,\n getPageSizeInches,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n normalizeWheelEventDelta,\n normalizeWheelEventDirection,\n parseQueryString,\n PresentationModeState,\n ProgressBar,\n removeNullCharacters,\n RenderingStates,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n toggleCheckedBtn,\n toggleExpandedBtn,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-var\n var compatParams = new Map();\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof navigator === \"undefined\"\n ) {\n globalThis.navigator = Object.create(null);\n }\n const userAgent = navigator.userAgent || \"\";\n const platform = navigator.platform || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 1;\n\n const isAndroid = /Android/.test(userAgent);\n const isIOS =\n /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n (platform === \"MacIntel\" && maxTouchPoints > 1);\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n (function () {\n if (isIOS || isAndroid) {\n compatParams.set(\"maxCanvasPixels\", 5242880);\n }\n })();\n\n // Don't use system fonts on Android (issue 18210).\n // Support: Android\n (function () {\n if (isAndroid) {\n compatParams.set(\"useSystemFonts\", false);\n }\n })();\n}\n\nconst OptionKind = {\n BROWSER: 0x01,\n VIEWER: 0x02,\n API: 0x04,\n WORKER: 0x08,\n EVENT_DISPATCH: 0x10,\n PREFERENCE: 0x80,\n};\n\n// Should only be used with options that allow multiple types.\nconst Type = {\n BOOLEAN: 0x01,\n NUMBER: 0x02,\n OBJECT: 0x04,\n STRING: 0x08,\n UNDEFINED: 0x10,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n * see `OptionKind.PREFERENCE`, hence the values below must use only\n * primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n allowedGlobalEvents: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.BROWSER,\n },\n canvasMaxAreaInBytes: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.BROWSER + OptionKind.API,\n },\n isInAutomation: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n localeProperties: {\n /** @type {Object} */\n value:\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")\n ? { lang: navigator.language || \"en-US\" }\n : null,\n kind: OptionKind.BROWSER,\n },\n maxCanvasDim: {\n /** @type {number} */\n value: 32767,\n kind: OptionKind.BROWSER + OptionKind.VIEWER,\n },\n nimbusDataStr: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.BROWSER,\n },\n supportsCaretBrowsingMode: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsDocumentFonts: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsIntegratedFind: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomCtrlKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomMetaKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPinchToZoom: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPrinting: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n toolbarDensity: {\n /** @type {number} */\n value: 0, // 0 = \"normal\", 1 = \"compact\", 2 = \"touch\"\n kind: OptionKind.BROWSER + OptionKind.EVENT_DISPATCH,\n },\n\n altTextLearnMoreUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/pdf-alt-text\"\n : \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationEditorMode: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationMode: {\n /** @type {number} */\n value: 2,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n cursorToolOnLoad: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n debuggerSrc: {\n /** @type {string} */\n value: \"./debugger.mjs\",\n kind: OptionKind.VIEWER,\n },\n defaultZoomDelay: {\n /** @type {number} */\n value: 400,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultZoomValue: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n disableHistory: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER,\n },\n disablePageLabels: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableAltText: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableAltTextModelDownload: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH,\n },\n enableAutoLinking: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableDetailCanvas: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER,\n },\n enableGuessAltText: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH,\n },\n enableHighlightFloatingButton: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableNewAltTextWhenAddingImage: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePermissions: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePrintAutoRotate: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableScripting: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableSignatureEditor: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableUpdatedAddImage: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n externalLinkRel: {\n /** @type {string} */\n value: \"noopener noreferrer nofollow\",\n kind: OptionKind.VIEWER,\n },\n externalLinkTarget: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n highlightEditorColors: {\n /** @type {string} */\n value: \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n historyUpdateUrl: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n ignoreDestinationZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n imageResourcesPath: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/images/\"\n : \"./images/\",\n kind: OptionKind.VIEWER,\n },\n maxCanvasPixels: {\n /** @type {number} */\n value: 2 ** 25,\n kind: OptionKind.VIEWER,\n },\n forcePageColors: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsBackground: {\n /** @type {string} */\n value: \"Canvas\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsForeground: {\n /** @type {string} */\n value: \"CanvasText\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pdfBugEnabled: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n printResolution: {\n /** @type {number} */\n value: 150,\n kind: OptionKind.VIEWER,\n },\n sidebarViewOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n scrollModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n spreadModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n textLayerMode: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewerCssTheme: {\n /** @type {number} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\") ? 2 : 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewOnLoad: {\n /** @type {boolean} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n\n cMapPacked: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n cMapUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/bcmaps/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/cmaps/\"\n : \"../web/cmaps/\",\n kind: OptionKind.API,\n },\n disableAutoFetch: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableFontFace: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableRange: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableStream: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n docBaseUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? // NOTE: We cannot use the `updateUrlHash` function here, because of\n // the default preferences generation (see `gulpfile.mjs`).\n // However, the following line is *only* used in development mode.\n document.URL.split(\"#\", 1)[0]\n : \"\",\n kind: OptionKind.API,\n },\n enableHWA: {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\"),\n kind: OptionKind.API + OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableXfa: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n fontExtraProperties: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n iccUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/iccs/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/iccs/\"\n : \"../web/iccs/\",\n kind: OptionKind.API,\n },\n isEvalSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n isOffscreenCanvasSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n maxImageSize: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.API,\n },\n pdfBug: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n standardFontDataUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/standard_fonts/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/standard_fonts/\"\n : \"../web/standard_fonts/\",\n kind: OptionKind.API,\n },\n useSystemFonts: {\n // On Android, there is almost no chance to have the font we want so we\n // don't use the system fonts in this case (bug 1882613).\n /** @type {boolean|undefined} */\n value: (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n )\n ? false\n : undefined,\n kind: OptionKind.API,\n type: Type.BOOLEAN + Type.UNDEFINED,\n },\n verbosity: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.API,\n },\n wasmUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/wasm/\"\n : \"../web/wasm/\",\n kind: OptionKind.API,\n },\n\n workerPort: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.WORKER,\n },\n workerSrc: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../src/pdf.worker.js\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/build/pdf.worker.mjs\"\n : \"../build/pdf.worker.mjs\",\n kind: OptionKind.WORKER,\n },\n};\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n defaultOptions.defaultUrl = {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n ? \"\"\n : \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? \"../build/dev-sandbox/pdf.sandbox.mjs\"\n : \"../build/pdf.sandbox.mjs\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.enableFakeMLManager = {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER,\n };\n}\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n defaultOptions.disablePreferences = {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER,\n };\n} else if (PDFJSDev.test(\"CHROME\")) {\n defaultOptions.disableTelemetry = {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING || LIB\")) {\n // Ensure that the `defaultOptions` are correctly specified.\n for (const name in defaultOptions) {\n const { value, kind, type } = defaultOptions[name];\n\n if (kind & OptionKind.PREFERENCE) {\n if (kind === OptionKind.PREFERENCE) {\n throw new Error(`Cannot use only \"PREFERENCE\" kind: ${name}`);\n }\n if (kind & OptionKind.BROWSER) {\n throw new Error(`Cannot mix \"PREFERENCE\" and \"BROWSER\" kind: ${name}`);\n }\n if (type !== undefined) {\n throw new Error(\n `Cannot have \\`type\\`-field for \"PREFERENCE\" kind: ${name}`\n );\n }\n if (typeof compatParams === \"object\" && compatParams.has(name)) {\n throw new Error(\n `Should not have compatibility-value for \"PREFERENCE\" kind: ${name}`\n );\n }\n // Only \"simple\" preference-values are allowed.\n if (\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n !Number.isInteger(value)\n ) {\n throw new Error(`Invalid value for \"PREFERENCE\" kind: ${name}`);\n }\n } else if (kind & OptionKind.BROWSER) {\n if (type !== undefined) {\n throw new Error(\n `Cannot have \\`type\\`-field for \"BROWSER\" kind: ${name}`\n );\n }\n if (typeof compatParams === \"object\" && compatParams.has(name)) {\n throw new Error(\n `Should not have compatibility-value for \"BROWSER\" kind: ${name}`\n );\n }\n if (value === undefined) {\n throw new Error(`Invalid value for \"BROWSER\" kind: ${name}`);\n }\n }\n }\n}\n\nclass AppOptions {\n static eventBus;\n\n static #opts = new Map();\n\n static {\n // Initialize all the user-options.\n for (const name in defaultOptions) {\n this.#opts.set(name, defaultOptions[name].value);\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // Apply any compatibility-values to the user-options.\n for (const [name, value] of compatParams) {\n this.#opts.set(name, value);\n }\n this._hasInvokedSet = false;\n\n this._checkDisablePreferences = () => {\n if (this.get(\"disablePreferences\")) {\n // Give custom implementations of the default viewer a simpler way to\n // opt-out of having the `Preferences` override existing `AppOptions`.\n return true;\n }\n if (this._hasInvokedSet) {\n console.warn(\n \"The Preferences may override manually set AppOptions; \" +\n 'please use the \"disablePreferences\"-option to prevent that.'\n );\n }\n return false;\n };\n }\n }\n\n constructor() {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Cannot initialize AppOptions.\");\n }\n }\n\n static get(name) {\n return this.#opts.get(name);\n }\n\n static getAll(kind = null, defaultOnly = false) {\n const options = Object.create(null);\n for (const name in defaultOptions) {\n const defaultOpt = defaultOptions[name];\n\n if (kind && !(kind & defaultOpt.kind)) {\n continue;\n }\n options[name] = !defaultOnly ? this.#opts.get(name) : defaultOpt.value;\n }\n return options;\n }\n\n static set(name, value) {\n this.setAll({ [name]: value });\n }\n\n static setAll(options, prefs = false) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this._hasInvokedSet ||= true;\n }\n let events;\n\n for (const name in options) {\n const defaultOpt = defaultOptions[name],\n userOpt = options[name];\n\n if (\n !defaultOpt ||\n !(\n typeof userOpt === typeof defaultOpt.value ||\n Type[(typeof userOpt).toUpperCase()] & defaultOpt.type\n )\n ) {\n continue;\n }\n const { kind } = defaultOpt;\n\n if (\n prefs &&\n !(kind & OptionKind.BROWSER || kind & OptionKind.PREFERENCE)\n ) {\n continue;\n }\n if (this.eventBus && kind & OptionKind.EVENT_DISPATCH) {\n (events ||= new Map()).set(name, userOpt);\n }\n this.#opts.set(name, userOpt);\n }\n\n if (events) {\n for (const [name, value] of events) {\n this.eventBus.dispatch(name.toLowerCase(), { source: this, value });\n }\n }\n }\n}\n\nexport { AppOptions, OptionKind };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { isValidExplicitDest } from \"pdfjs-lib\";\nimport { parseQueryString } from \"./ui_utils.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n * for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n * external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n * thus preserving the current zoom level in the viewer, when navigating\n * to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n externalLinkEnabled = true;\n\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({\n eventBus,\n externalLinkTarget = null,\n externalLinkRel = null,\n ignoreDestinationZoom = false,\n } = {}) {\n this.eventBus = eventBus;\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n }\n\n setDocument(pdfDocument, baseUrl = null) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n if (this.pdfDocument) {\n this.pdfViewer.currentPageNumber = value;\n }\n }\n\n /**\n * @type {number}\n */\n get rotation() {\n return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n if (this.pdfDocument) {\n this.pdfViewer.pagesRotation = value;\n }\n }\n\n /**\n * @type {boolean}\n */\n get isInPresentationMode() {\n return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false;\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {\n if (!this.pdfDocument) {\n return;\n }\n let namedDest, explicitDest, pageNumber;\n if (typeof dest === \"string\") {\n namedDest = dest;\n explicitDest = await this.pdfDocument.getDestination(dest);\n } else {\n namedDest = null;\n explicitDest = await dest;\n }\n if (!Array.isArray(explicitDest)) {\n console.error(\n `goToDestination: \"${explicitDest}\" is not a valid destination array, for dest=\"${dest}\".`\n );\n return;\n }\n // Dest array looks like that: \n const [destRef] = explicitDest;\n\n if (destRef && typeof destRef === \"object\") {\n pageNumber = this.pdfDocument.cachedPageNumber(destRef);\n\n if (!pageNumber) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n try {\n pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;\n } catch {\n console.error(\n `goToDestination: \"${destRef}\" is not a valid page reference, for dest=\"${dest}\".`\n );\n return;\n }\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `goToDestination: \"${pageNumber}\" is not a valid page number, for dest=\"${dest}\".`\n );\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new destination into\n // view, to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.push({ namedDest, explicitDest, pageNumber });\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n ignoreDestinationZoom: this._ignoreDestinationZoom,\n });\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {\n if (!this.pdfDocument) {\n return;\n }\n const pageNumber =\n (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n val | 0;\n if (\n !(\n Number.isInteger(pageNumber) &&\n pageNumber > 0 &&\n pageNumber <= this.pagesCount\n )\n ) {\n console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new page into view,\n // to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.pushPage(pageNumber);\n }\n\n this.pdfViewer.scrollPageIntoView({ pageNumber });\n }\n\n /**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLAnchorElement} link\n * @param {string} url\n * @param {boolean} [newWindow]\n */\n addLinkAttributes(link, url, newWindow = false) {\n if (!url || typeof url !== \"string\") {\n throw new Error('A valid \"url\" parameter must provided.');\n }\n const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n rel = this.externalLinkRel;\n\n if (this.externalLinkEnabled) {\n link.href = link.title = url;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${url}`;\n link.onclick = () => false;\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === \"string\") {\n if (dest.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(dest));\n }\n } else if (Array.isArray(dest)) {\n const str = JSON.stringify(dest);\n if (str.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(str));\n }\n }\n return this.getAnchorUrl(\"\");\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in .\n * @param {string} anchor - The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return this.baseUrl ? this.baseUrl + anchor : anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber, dest;\n if (hash.includes(\"=\")) {\n const params = parseQueryString(hash);\n if (params.has(\"search\")) {\n const query = params.get(\"search\").replaceAll('\"', \"\"),\n phrase = params.get(\"phrase\") === \"true\";\n\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: phrase ? query : query.match(/\\S+/g),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if (params.has(\"page\")) {\n pageNumber = params.get(\"page\") | 0 || 1;\n }\n if (params.has(\"zoom\")) {\n // Build the destination array.\n const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n const zoomArg = zoomArgs[0];\n const zoomArgNumber = parseFloat(zoomArg);\n\n if (!zoomArg.includes(\"Fit\")) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [\n null,\n { name: \"XYZ\" },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n ];\n } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n dest = [null, { name: zoomArg }];\n } else if (\n zoomArg === \"FitH\" ||\n zoomArg === \"FitBH\" ||\n zoomArg === \"FitV\" ||\n zoomArg === \"FitBV\"\n ) {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n ];\n } else if (zoomArg === \"FitR\") {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n );\n } else {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs[1] | 0,\n zoomArgs[2] | 0,\n zoomArgs[3] | 0,\n zoomArgs[4] | 0,\n ];\n }\n } else {\n console.error(\n `PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`\n );\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if (params.has(\"pagemode\")) {\n this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: params.get(\"pagemode\"),\n });\n }\n // Ensure that this parameter is *always* handled last, in order to\n // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n if (params.has(\"nameddest\")) {\n this.goToDestination(params.get(\"nameddest\"));\n }\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n return;\n }\n // Support opening of PDF attachments in the Firefox PDF Viewer,\n // which uses a couple of non-standard hash parameters; refer to\n // `DownloadManager.openOrDownloadData` in the firefoxcom.js file.\n if (!params.has(\"filename\") || !params.has(\"filedest\")) {\n return;\n }\n hash = params.get(\"filedest\");\n }\n\n // Named (or explicit) destination.\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!Array.isArray(dest)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch {}\n\n if (typeof dest === \"string\" || isValidExplicitDest(dest)) {\n this.goToDestination(dest);\n return;\n }\n console.error(\n `PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`\n );\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n if (!this.pdfDocument) {\n return;\n }\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case \"GoBack\":\n this.pdfHistory?.back();\n break;\n\n case \"GoForward\":\n this.pdfHistory?.forward();\n break;\n\n case \"NextPage\":\n this.pdfViewer.nextPage();\n break;\n\n case \"PrevPage\":\n this.pdfViewer.previousPage();\n break;\n\n case \"LastPage\":\n this.page = this.pagesCount;\n break;\n\n case \"FirstPage\":\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch(\"namedaction\", {\n source: this,\n action,\n });\n }\n\n /**\n * @param {Object} action\n */\n async executeSetOCGState(action) {\n if (!this.pdfDocument) {\n return;\n }\n const pdfDocument = this.pdfDocument,\n optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the optional content resolved.\n }\n optionalContentConfig.setOCGState(action);\n\n this.pdfViewer.optionalContentConfigPromise = Promise.resolve(\n optionalContentConfig\n );\n }\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService extends PDFLinkService {\n setDocument(pdfDocument, baseUrl = null) {}\n}\n\nexport { LinkTarget, PDFLinkService, SimpleLinkService };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst WaitOnType = {\n EVENT: \"event\",\n TIMEOUT: \"timeout\",\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n * `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n * timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nasync function waitOnEventOrTimeout({ target, name, delay = 0 }) {\n if (\n typeof target !== \"object\" ||\n !(name && typeof name === \"string\") ||\n !(Number.isInteger(delay) && delay >= 0)\n ) {\n throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n }\n const { promise, resolve } = Promise.withResolvers();\n const ac = new AbortController();\n\n function handler(type) {\n ac.abort(); // Remove event listener.\n clearTimeout(timeout);\n\n resolve(type);\n }\n\n const evtMethod = target instanceof EventBus ? \"_on\" : \"addEventListener\";\n target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {\n signal: ac.signal,\n });\n\n const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);\n\n return promise;\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n #listeners = Object.create(null);\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n on(eventName, listener, options = null) {\n this._on(eventName, listener, {\n external: true,\n once: options?.once,\n signal: options?.signal,\n });\n }\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n off(eventName, listener, options = null) {\n this._off(eventName, listener);\n }\n\n /**\n * @param {string} eventName\n * @param {Object} data\n */\n dispatch(eventName, data) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n let externalListeners;\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n for (const { listener, external, once } of eventListeners.slice(0)) {\n if (once) {\n this._off(eventName, listener);\n }\n if (external) {\n (externalListeners ||= []).push(listener);\n continue;\n }\n listener(data);\n }\n // Dispatch any \"external\" listeners *after* the internal ones, to give the\n // viewer components time to handle events and update their state first.\n if (externalListeners) {\n for (const listener of externalListeners) {\n listener(data);\n }\n externalListeners = null;\n }\n }\n\n /**\n * @ignore\n */\n _on(eventName, listener, options = null) {\n let rmAbort = null;\n if (options?.signal instanceof AbortSignal) {\n const { signal } = options;\n if (signal.aborted) {\n console.error(\"Cannot use an `aborted` signal.\");\n return;\n }\n const onAbort = () => this._off(eventName, listener);\n rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n signal.addEventListener(\"abort\", onAbort);\n }\n\n const eventListeners = (this.#listeners[eventName] ||= []);\n eventListeners.push({\n listener,\n external: options?.external === true,\n once: options?.once === true,\n rmAbort,\n });\n }\n\n /**\n * @ignore\n */\n _off(eventName, listener, options = null) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners) {\n return;\n }\n for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n const evt = eventListeners[i];\n if (evt.listener === listener) {\n evt.rmAbort?.(); // Ensure that the `AbortSignal` listener is removed.\n eventListeners.splice(i, 1);\n return;\n }\n }\n }\n}\n\n/**\n * NOTE: Only used in the Firefox build-in pdf viewer.\n */\nclass FirefoxEventBus extends EventBus {\n #externalServices;\n\n #globalEventNames;\n\n #isInAutomation;\n\n constructor(globalEventNames, externalServices, isInAutomation) {\n super();\n this.#globalEventNames = globalEventNames;\n this.#externalServices = externalServices;\n this.#isInAutomation = isInAutomation;\n }\n\n dispatch(eventName, data) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: FirefoxEventBus.dispatch\");\n }\n super.dispatch(eventName, data);\n\n if (this.#isInAutomation) {\n const detail = Object.create(null);\n if (data) {\n for (const key in data) {\n const value = data[key];\n if (key === \"source\") {\n if (value === window || value === document) {\n return; // No need to re-dispatch (already) global events.\n }\n continue; // Ignore the `source` property.\n }\n detail[key] = value;\n }\n }\n const event = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n detail,\n });\n document.dispatchEvent(event);\n }\n\n if (this.#globalEventNames?.has(eventName)) {\n this.#externalServices.dispatchGlobalEvent({\n eventName,\n detail: data,\n });\n }\n }\n}\n\nexport { EventBus, FirefoxEventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n\nclass BaseExternalServices {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseExternalServices\n ) {\n throw new Error(\"Cannot initialize BaseExternalServices.\");\n }\n }\n\n updateFindControlState(data) {}\n\n updateFindMatchesCount(data) {}\n\n initPassiveLoading() {}\n\n reportTelemetry(data) {}\n\n /**\n * @returns {Promise}\n */\n async createL10n() {\n throw new Error(\"Not implemented: createL10n\");\n }\n\n createScripting() {\n throw new Error(\"Not implemented: createScripting\");\n }\n\n createSignatureStorage() {\n throw new Error(\"Not implemented: createSignatureStorage\");\n }\n\n updateEditorStates(data) {\n throw new Error(\"Not implemented: updateEditorStates\");\n }\n\n dispatchGlobalEvent(_event) {}\n}\n\nexport { BaseExternalServices };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions, OptionKind } from \"./app_options.js\";\n\n/**\n * BasePreferences - Abstract base class for storing persistent settings.\n * Used for settings that should be applied to all opened documents,\n * or every time the viewer is loaded.\n */\nclass BasePreferences {\n #defaults = Object.freeze(\n typeof PDFJSDev === \"undefined\"\n ? AppOptions.getAll(OptionKind.PREFERENCE, /* defaultOnly = */ true)\n : PDFJSDev.eval(\"DEFAULT_PREFERENCES\")\n );\n\n #initializedPromise = null;\n\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BasePreferences\n ) {\n throw new Error(\"Cannot initialize BasePreferences.\");\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n Object.defineProperty(this, \"defaults\", {\n get() {\n return this.#defaults;\n },\n });\n }\n\n this.#initializedPromise = this._readFromStorage(this.#defaults).then(\n ({ browserPrefs, prefs }) => {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n AppOptions._checkDisablePreferences()\n ) {\n return;\n }\n AppOptions.setAll({ ...browserPrefs, ...prefs }, /* prefs = */ true);\n }\n );\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n window.addEventListener(\n \"updatedPreference\",\n async ({ detail: { name, value } }) => {\n await this.#initializedPromise;\n AppOptions.setAll({ [name]: value }, /* prefs = */ true);\n }\n );\n }\n }\n\n /**\n * Stub function for writing preferences to storage.\n * @param {Object} prefObj The preferences that should be written to storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been written.\n */\n async _writeToStorage(prefObj) {\n throw new Error(\"Not implemented: _writeToStorage\");\n }\n\n /**\n * Stub function for reading preferences from storage.\n * @param {Object} prefObj The preferences that should be read from storage.\n * @returns {Promise} A promise that is resolved with an {Object} containing\n * the preferences that have been read.\n */\n async _readFromStorage(prefObj) {\n throw new Error(\"Not implemented: _readFromStorage\");\n }\n\n /**\n * Reset the preferences to their default values and update storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been reset.\n */\n async reset() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Please use `about:config` to change preferences.\");\n }\n await this.#initializedPromise;\n AppOptions.setAll(this.#defaults, /* prefs = */ true);\n\n await this._writeToStorage(this.#defaults);\n }\n\n /**\n * Set the value of a preference.\n * @param {string} name The name of the preference that should be changed.\n * @param {boolean|number|string} value The new value of the preference.\n * @returns {Promise} A promise that is resolved when the value has been set,\n * provided that the preference exists and the types match.\n */\n async set(name, value) {\n await this.#initializedPromise;\n AppOptions.setAll({ [name]: value }, /* prefs = */ true);\n\n await this._writeToStorage(\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? { [name]: AppOptions.get(name) }\n : AppOptions.getAll(OptionKind.PREFERENCE)\n );\n }\n\n /**\n * Get the value of a preference.\n * @param {string} name The name of the preference whose value is requested.\n * @returns {Promise} A promise resolved with a {boolean|number|string}\n * containing the value of the preference.\n */\n async get(name) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: get\");\n }\n await this.#initializedPromise;\n return AppOptions.get(name);\n }\n\n get initializedPromise() {\n return this.#initializedPromise;\n }\n}\n\nexport { BasePreferences };\n","/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n /**\n * Create a `FluentType` instance.\n *\n * @param value The JavaScript value to wrap.\n */\n constructor(value) {\n this.value = value;\n }\n /**\n * Unwrap the raw value stored by this `FluentType`.\n */\n valueOf() {\n return this.value;\n }\n}\n/**\n * A {@link FluentType} representing no correct value.\n */\nexport class FluentNone extends FluentType {\n /**\n * Create an instance of `FluentNone` with an optional fallback value.\n * @param value The fallback value of this `FluentNone`.\n */\n constructor(value = \"???\") {\n super(value);\n }\n /**\n * Format this `FluentNone` to the fallback string.\n */\n toString(scope) {\n return `{${this.value}}`;\n }\n}\n/**\n * A {@link FluentType} representing a number.\n *\n * A `FluentNumber` instance stores the number value of the number it\n * represents. It may also store an option bag of options which will be passed\n * to `Intl.NumerFormat` when the `FluentNumber` is formatted to a string.\n */\nexport class FluentNumber extends FluentType {\n /**\n * Create an instance of `FluentNumber` with options to the\n * `Intl.NumberFormat` constructor.\n *\n * @param value The number value of this `FluentNumber`.\n * @param opts Options which will be passed to `Intl.NumberFormat`.\n */\n constructor(value, opts = {}) {\n super(value);\n this.opts = opts;\n }\n /**\n * Format this `FluentNumber` to a string.\n */\n toString(scope) {\n if (scope) {\n try {\n const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);\n return nf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n }\n }\n return this.value.toString(10);\n }\n}\n/**\n * A {@link FluentType} representing a date and time.\n *\n * A `FluentDateTime` instance stores a Date object, Temporal object, or a number\n * as a numerical timestamp in milliseconds. It may also store an\n * option bag of options which will be passed to `Intl.DateTimeFormat` when the\n * `FluentDateTime` is formatted to a string.\n */\nexport class FluentDateTime extends FluentType {\n static supportsValue(value) {\n if (typeof value === \"number\")\n return true;\n if (value instanceof Date)\n return true;\n if (value instanceof FluentType)\n return FluentDateTime.supportsValue(value.valueOf());\n // Temporary workaround to support environments without Temporal\n if (\"Temporal\" in globalThis) {\n // for TypeScript, which doesn't know about Temporal yet\n const _Temporal = globalThis.Temporal;\n if (value instanceof _Temporal.Instant ||\n value instanceof _Temporal.PlainDateTime ||\n value instanceof _Temporal.PlainDate ||\n value instanceof _Temporal.PlainMonthDay ||\n value instanceof _Temporal.PlainTime ||\n value instanceof _Temporal.PlainYearMonth) {\n return true;\n }\n }\n return false;\n }\n /**\n * Create an instance of `FluentDateTime` with options to the\n * `Intl.DateTimeFormat` constructor.\n *\n * @param value The number value of this `FluentDateTime`, in milliseconds.\n * @param opts Options which will be passed to `Intl.DateTimeFormat`.\n */\n constructor(value, opts = {}) {\n // unwrap any FluentType value, but only retain the opts from FluentDateTime\n if (value instanceof FluentDateTime) {\n opts = { ...value.opts, ...opts };\n value = value.value;\n }\n else if (value instanceof FluentType) {\n value = value.valueOf();\n }\n // Intl.DateTimeFormat defaults to gregorian calendar, but Temporal defaults to iso8601\n if (typeof value === \"object\" &&\n \"calendarId\" in value &&\n opts.calendar === undefined) {\n opts = { ...opts, calendar: value.calendarId };\n }\n super(value);\n this.opts = opts;\n }\n [Symbol.toPrimitive](hint) {\n return hint === \"string\" ? this.toString() : this.toNumber();\n }\n /**\n * Convert this `FluentDateTime` to a number.\n * Note that this isn't always possible due to the nature of Temporal objects.\n * In such cases, a TypeError will be thrown.\n */\n toNumber() {\n const value = this.value;\n if (typeof value === \"number\")\n return value;\n if (value instanceof Date)\n return value.getTime();\n if (\"epochMilliseconds\" in value) {\n return value.epochMilliseconds;\n }\n if (\"toZonedDateTime\" in value) {\n return value.toZonedDateTime(\"UTC\").epochMilliseconds;\n }\n throw new TypeError(\"Unwrapping a non-number value as a number\");\n }\n /**\n * Format this `FluentDateTime` to a string.\n */\n toString(scope) {\n if (scope) {\n try {\n const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);\n return dtf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n }\n }\n if (typeof this.value === \"number\" || this.value instanceof Date) {\n return new Date(this.value).toISOString();\n }\n return this.value.toString();\n }\n}\n","/**\n * The role of the Fluent resolver is to format a `Pattern` to an instance of\n * `FluentValue`. For performance reasons, primitive strings are considered\n * such instances, too.\n *\n * Translations can contain references to other messages or variables,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers and dates into the bundle's languages.\n * See the documentation of the Fluent syntax for more information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * All expressions resolve to an instance of `FluentValue`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n * Functions in this file pass around an instance of the `Scope` class, which\n * stores the data required for successful resolution and error recovery.\n */\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n/**\n * The maximum number of placeables which can be expanded in a single call to\n * `formatPattern`. The limit protects against the Billion Laughs and Quadratic\n * Blowup attacks. See https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.\n */\nconst MAX_PLACEABLES = 100;\n/** Unicode bidi isolation characters. */\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n/** Helper: match a variant key to the given selector. */\nfunction match(scope, selector, key) {\n if (key === selector) {\n // Both are strings.\n return true;\n }\n // XXX Consider comparing options too, e.g. minimumFractionDigits.\n if (key instanceof FluentNumber &&\n selector instanceof FluentNumber &&\n key.value === selector.value) {\n return true;\n }\n if (selector instanceof FluentNumber && typeof key === \"string\") {\n let category = scope\n .memoizeIntlObject(Intl.PluralRules, selector.opts)\n .select(selector.value);\n if (key === category) {\n return true;\n }\n }\n return false;\n}\n/** Helper: resolve the default variant from a list of variants. */\nfunction getDefault(scope, variants, star) {\n if (variants[star]) {\n return resolvePattern(scope, variants[star].value);\n }\n scope.reportError(new RangeError(\"No default\"));\n return new FluentNone();\n}\n/** Helper: resolve arguments to a call expression. */\nfunction getArguments(scope, args) {\n const positional = [];\n const named = Object.create(null);\n for (const arg of args) {\n if (arg.type === \"narg\") {\n named[arg.name] = resolveExpression(scope, arg.value);\n }\n else {\n positional.push(resolveExpression(scope, arg));\n }\n }\n return { positional, named };\n}\n/** Resolve an expression to a Fluent type. */\nfunction resolveExpression(scope, expr) {\n switch (expr.type) {\n case \"str\":\n return expr.value;\n case \"num\":\n return new FluentNumber(expr.value, {\n minimumFractionDigits: expr.precision,\n });\n case \"var\":\n return resolveVariableReference(scope, expr);\n case \"mesg\":\n return resolveMessageReference(scope, expr);\n case \"term\":\n return resolveTermReference(scope, expr);\n case \"func\":\n return resolveFunctionReference(scope, expr);\n case \"select\":\n return resolveSelectExpression(scope, expr);\n default:\n return new FluentNone();\n }\n}\n/** Resolve a reference to a variable. */\nfunction resolveVariableReference(scope, { name }) {\n let arg;\n if (scope.params) {\n // We're inside a TermReference. It's OK to reference undefined parameters.\n if (Object.prototype.hasOwnProperty.call(scope.params, name)) {\n arg = scope.params[name];\n }\n else {\n return new FluentNone(`$${name}`);\n }\n }\n else if (scope.args &&\n Object.prototype.hasOwnProperty.call(scope.args, name)) {\n // We're in the top-level Pattern or inside a MessageReference. Missing\n // variables references produce ReferenceErrors.\n arg = scope.args[name];\n }\n else {\n scope.reportError(new ReferenceError(`Unknown variable: $${name}`));\n return new FluentNone(`$${name}`);\n }\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (FluentDateTime.supportsValue(arg)) {\n return new FluentDateTime(arg);\n }\n // eslint-disable-next-line no-fallthrough\n default:\n scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));\n return new FluentNone(`$${name}`);\n }\n}\n/** Resolve a reference to another message. */\nfunction resolveMessageReference(scope, { name, attr }) {\n const message = scope.bundle._messages.get(name);\n if (!message) {\n scope.reportError(new ReferenceError(`Unknown message: ${name}`));\n return new FluentNone(name);\n }\n if (attr) {\n const attribute = message.attributes[attr];\n if (attribute) {\n return resolvePattern(scope, attribute);\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${name}.${attr}`);\n }\n if (message.value) {\n return resolvePattern(scope, message.value);\n }\n scope.reportError(new ReferenceError(`No value: ${name}`));\n return new FluentNone(name);\n}\n/** Resolve a call to a Term with key-value arguments. */\nfunction resolveTermReference(scope, { name, attr, args }) {\n const id = `-${name}`;\n const term = scope.bundle._terms.get(id);\n if (!term) {\n scope.reportError(new ReferenceError(`Unknown term: ${id}`));\n return new FluentNone(id);\n }\n if (attr) {\n const attribute = term.attributes[attr];\n if (attribute) {\n // Every TermReference has its own variables.\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, attribute);\n scope.params = null;\n return resolved;\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${id}.${attr}`);\n }\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, term.value);\n scope.params = null;\n return resolved;\n}\n/** Resolve a call to a Function with positional and key-value arguments. */\nfunction resolveFunctionReference(scope, { name, args }) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `FluentBundle` constructor.\n let func = scope.bundle._functions[name];\n if (!func) {\n scope.reportError(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n if (typeof func !== \"function\") {\n scope.reportError(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n try {\n let resolved = getArguments(scope, args);\n return func(resolved.positional, resolved.named);\n }\n catch (err) {\n scope.reportError(err);\n return new FluentNone(`${name}()`);\n }\n}\n/** Resolve a select expression to the member object. */\nfunction resolveSelectExpression(scope, { selector, variants, star }) {\n let sel = resolveExpression(scope, selector);\n if (sel instanceof FluentNone) {\n return getDefault(scope, variants, star);\n }\n // Match the selector against keys of each variant, in order.\n for (const variant of variants) {\n const key = resolveExpression(scope, variant.key);\n if (match(scope, sel, key)) {\n return resolvePattern(scope, variant.value);\n }\n }\n return getDefault(scope, variants, star);\n}\n/** Resolve a pattern (a complex string with placeables). */\nexport function resolveComplexPattern(scope, ptn) {\n if (scope.dirty.has(ptn)) {\n scope.reportError(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n // Tag the pattern as dirty for the purpose of the current resolution.\n scope.dirty.add(ptn);\n const result = [];\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = scope.bundle._useIsolating && ptn.length > 1;\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(scope.bundle._transform(elem));\n continue;\n }\n scope.placeables++;\n if (scope.placeables > MAX_PLACEABLES) {\n scope.dirty.delete(ptn);\n // This is a fatal error which causes the resolver to instantly bail out\n // on this pattern. The length check protects against excessive memory\n // usage, and throwing protects against eating up the CPU when long\n // placeables are deeply nested.\n throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` +\n `max allowed is ${MAX_PLACEABLES}`);\n }\n if (useIsolating) {\n result.push(FSI);\n }\n result.push(resolveExpression(scope, elem).toString(scope));\n if (useIsolating) {\n result.push(PDI);\n }\n }\n scope.dirty.delete(ptn);\n return result.join(\"\");\n}\n/**\n * Resolve a simple or a complex Pattern to a FluentString\n * (which is really the string primitive).\n */\nfunction resolvePattern(scope, value) {\n // Resolve a simple pattern.\n if (typeof value === \"string\") {\n return scope.bundle._transform(value);\n }\n return resolveComplexPattern(scope, value);\n}\n","export class Scope {\n constructor(bundle, errors, args) {\n /**\n * The Set of patterns already encountered during this resolution.\n * Used to detect and prevent cyclic resolutions.\n * @ignore\n */\n this.dirty = new WeakSet();\n /** A dict of parameters passed to a TermReference. */\n this.params = null;\n /**\n * The running count of placeables resolved so far.\n * Used to detect the Billion Laughs and Quadratic Blowup attacks.\n * @ignore\n */\n this.placeables = 0;\n this.bundle = bundle;\n this.errors = errors;\n this.args = args;\n }\n reportError(error) {\n if (!this.errors || !(error instanceof Error)) {\n throw error;\n }\n this.errors.push(error);\n }\n memoizeIntlObject(ctor, opts) {\n let cache = this.bundle._intls.get(ctor);\n if (!cache) {\n cache = {};\n this.bundle._intls.set(ctor, cache);\n }\n let id = JSON.stringify(opts);\n if (!cache[id]) {\n // @ts-expect-error This is fine.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n cache[id] = new ctor(this.bundle.locales, opts);\n }\n return cache[id];\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentValue`. Functions must return `FluentValues` as well.\n */\nimport { FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\nfunction values(opts, allowed) {\n const unwrapped = Object.create(null);\n for (const [name, opt] of Object.entries(opts)) {\n if (allowed.includes(name)) {\n unwrapped[name] = opt.valueOf();\n }\n }\n return unwrapped;\n}\nconst NUMBER_ALLOWED = [\n \"unitDisplay\",\n \"currencyDisplay\",\n \"useGrouping\",\n \"minimumIntegerDigits\",\n \"minimumFractionDigits\",\n \"maximumFractionDigits\",\n \"minimumSignificantDigits\",\n \"maximumSignificantDigits\",\n];\n/**\n * The implementation of the `NUMBER()` builtin available to translations.\n *\n * Translations may call the `NUMBER()` builtin in order to specify formatting\n * options of a number. For example:\n *\n * pi = The value of π is {NUMBER($pi, maximumFractionDigits: 2)}.\n *\n * The implementation expects an array of {@link FluentValue | FluentValues} representing the\n * positional arguments, and an object of named {@link FluentValue | FluentValues} representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * unitDisplay\n * currencyDisplay\n * useGrouping\n * minimumIntegerDigits\n * minimumFractionDigits\n * maximumFractionDigits\n * minimumSignificantDigits\n * maximumSignificantDigits\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `NUMBER()`.\n * @param opts The named argments passed to this `NUMBER()`.\n */\nexport function NUMBER(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`NUMBER(${arg.valueOf()})`);\n }\n if (arg instanceof FluentNumber) {\n return new FluentNumber(arg.valueOf(), {\n ...arg.opts,\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n if (arg instanceof FluentDateTime) {\n return new FluentNumber(arg.toNumber(), {\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst DATETIME_ALLOWED = [\n \"dateStyle\",\n \"timeStyle\",\n \"fractionalSecondDigits\",\n \"dayPeriod\",\n \"hour12\",\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n];\n/**\n * The implementation of the `DATETIME()` builtin available to translations.\n *\n * Translations may call the `DATETIME()` builtin in order to specify\n * formatting options of a number. For example:\n *\n * now = It's {DATETIME($today, month: \"long\")}.\n *\n * The implementation expects an array of {@link FluentValue | FluentValues} representing the\n * positional arguments, and an object of named {@link FluentValue | FluentValues} representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * dateStyle\n * timeStyle\n * fractionalSecondDigits\n * dayPeriod\n * hour12\n * weekday\n * era\n * year\n * month\n * day\n * hour\n * minute\n * second\n * timeZoneName\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `DATETIME()`.\n * @param opts The named argments passed to this `DATETIME()`.\n */\nexport function DATETIME(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`DATETIME(${arg.valueOf()})`);\n }\n if (arg instanceof FluentDateTime || arg instanceof FluentNumber) {\n return new FluentDateTime(arg, values(opts, DATETIME_ALLOWED));\n }\n throw new TypeError(\"Invalid argument to DATETIME\");\n}\n","const cache = new Map();\nexport function getMemoizerForLocale(locales) {\n const stringLocale = Array.isArray(locales) ? locales.join(\" \") : locales;\n let memoizer = cache.get(stringLocale);\n if (memoizer === undefined) {\n memoizer = new Map();\n cache.set(stringLocale, memoizer);\n }\n return memoizer;\n}\n","import { resolveComplexPattern } from \"./resolver.js\";\nimport { Scope } from \"./scope.js\";\nimport { FluentNone } from \"./types.js\";\nimport { NUMBER, DATETIME } from \"./builtins.js\";\nimport { getMemoizerForLocale } from \"./memoizer.js\";\n/**\n * Message bundles are single-language stores of translation resources. They are\n * responsible for formatting message values and attributes to strings.\n */\nexport class FluentBundle {\n /**\n * Create an instance of `FluentBundle`.\n *\n * @example\n * ```js\n * let bundle = new FluentBundle([\"en-US\", \"en\"]);\n *\n * let bundle = new FluentBundle(locales, {useIsolating: false});\n *\n * let bundle = new FluentBundle(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n * ```\n *\n * @param locales - Used to instantiate `Intl` formatters used by translations.\n * @param options - Optional configuration for the bundle.\n */\n constructor(locales, { functions, useIsolating = true, transform = (v) => v, } = {}) {\n /** @ignore */\n this._terms = new Map();\n /** @ignore */\n this._messages = new Map();\n this.locales = Array.isArray(locales) ? locales : [locales];\n this._functions = {\n NUMBER,\n DATETIME,\n ...functions,\n };\n this._useIsolating = useIsolating;\n this._transform = transform;\n this._intls = getMemoizerForLocale(locales);\n }\n /**\n * Check if a message is present in the bundle.\n *\n * @param id - The identifier of the message to check.\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n /**\n * Return a raw unformatted message object from the bundle.\n *\n * Raw messages are `{value, attributes}` shapes containing translation units\n * called `Patterns`. `Patterns` are implementation-specific; they should be\n * treated as black boxes and formatted with `FluentBundle.formatPattern`.\n *\n * @param id - The identifier of the message to check.\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n /**\n * Add a translation resource to the bundle.\n *\n * @example\n * ```js\n * let res = new FluentResource(\"foo = Foo\");\n * bundle.addResource(res);\n * bundle.getMessage(\"foo\");\n * // → {value: .., attributes: {..}}\n * ```\n *\n * @param res\n * @param options\n */\n addResource(res, { allowOverrides = false, } = {}) {\n const errors = [];\n for (let i = 0; i < res.body.length; i++) {\n let entry = res.body[i];\n if (entry.id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from FluentBundle.\n if (allowOverrides === false && this._terms.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing term: \"${entry.id}\"`));\n continue;\n }\n this._terms.set(entry.id, entry);\n }\n else {\n if (allowOverrides === false && this._messages.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing message: \"${entry.id}\"`));\n continue;\n }\n this._messages.set(entry.id, entry);\n }\n }\n return errors;\n }\n /**\n * Format a `Pattern` to a string.\n *\n * Format a raw `Pattern` into a string. `args` will be used to resolve\n * references to variables passed as arguments to the translation.\n *\n * In case of errors `formatPattern` will try to salvage as much of the\n * translation as possible and will still return a string. For performance\n * reasons, the encountered errors are not returned but instead are appended\n * to the `errors` array passed as the third argument.\n *\n * If `errors` is omitted, the first encountered error will be thrown.\n *\n * @example\n * ```js\n * let errors = [];\n * bundle.addResource(\n * new FluentResource(\"hello = Hello, {$name}!\"));\n *\n * let hello = bundle.getMessage(\"hello\");\n * if (hello.value) {\n * bundle.formatPattern(hello.value, {name: \"Jane\"}, errors);\n * // Returns \"Hello, Jane!\" and `errors` is empty.\n *\n * bundle.formatPattern(hello.value, undefined, errors);\n * // Returns \"Hello, {$name}!\" and `errors` is now:\n * // []\n * }\n * ```\n */\n formatPattern(pattern, args = null, errors = null) {\n // Resolve a simple pattern without creating a scope. No error handling is\n // required; by definition simple patterns don't have placeables.\n if (typeof pattern === \"string\") {\n return this._transform(pattern);\n }\n // Resolve a complex pattern.\n let scope = new Scope(this, errors, args);\n try {\n let value = resolveComplexPattern(scope, pattern);\n return value.toString(scope);\n }\n catch (err) {\n if (scope.errors && err instanceof Error) {\n scope.errors.push(err);\n return new FluentNone().toString(scope);\n }\n throw err;\n }\n }\n}\n","// This regex is used to iterate through the beginnings of messages and terms.\n// With the /m flag, the ^ matches at the beginning of every line.\nconst RE_MESSAGE_START = /^(-?[a-zA-Z][\\w-]*) *= */gm;\n// Both Attributes and Variants are parsed in while loops. These regexes are\n// used to break out of them.\nconst RE_ATTRIBUTE_START = /\\.([a-zA-Z][\\w-]*) *= */y;\nconst RE_VARIANT_START = /\\*?\\[/y;\nconst RE_NUMBER_LITERAL = /(-?[0-9]+(?:\\.([0-9]+))?)/y;\nconst RE_IDENTIFIER = /([a-zA-Z][\\w-]*)/y;\nconst RE_REFERENCE = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y;\nconst RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;\n// A \"run\" is a sequence of text or string literal characters which don't\n// require any special handling. For TextElements such special characters are: {\n// (starts a placeable), and line breaks which require additional logic to check\n// if the next line is indented. For StringLiterals they are: \\ (starts an\n// escape sequence), \" (ends the literal), and line breaks which are not allowed\n// in StringLiterals. Note that string runs may be empty; text runs may not.\nconst RE_TEXT_RUN = /([^{}\\n\\r]+)/y;\nconst RE_STRING_RUN = /([^\\\\\"\\n\\r]*)/y;\n// Escape sequences.\nconst RE_STRING_ESCAPE = /\\\\([\\\\\"])/y;\nconst RE_UNICODE_ESCAPE = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y;\n// Used for trimming TextElements and indents.\nconst RE_LEADING_NEWLINES = /^\\n+/;\nconst RE_TRAILING_SPACES = / +$/;\n// Used in makeIndent to strip spaces from blank lines and normalize CRLF to LF.\nconst RE_BLANK_LINES = / *\\r?\\n/g;\n// Used in makeIndent to measure the indentation.\nconst RE_INDENT = /( *)$/;\n// Common tokens.\nconst TOKEN_BRACE_OPEN = /{\\s*/y;\nconst TOKEN_BRACE_CLOSE = /\\s*}/y;\nconst TOKEN_BRACKET_OPEN = /\\[\\s*/y;\nconst TOKEN_BRACKET_CLOSE = /\\s*] */y;\nconst TOKEN_PAREN_OPEN = /\\s*\\(\\s*/y;\nconst TOKEN_ARROW = /\\s*->\\s*/y;\nconst TOKEN_COLON = /\\s*:\\s*/y;\n// Note the optional comma. As a deviation from the Fluent EBNF, the parser\n// doesn't enforce commas between call arguments.\nconst TOKEN_COMMA = /\\s*,?\\s*/y;\nconst TOKEN_BLANK = /\\s+/y;\n/**\n * Fluent Resource is a structure storing parsed localization entries.\n */\nexport class FluentResource {\n constructor(source) {\n this.body = [];\n RE_MESSAGE_START.lastIndex = 0;\n let cursor = 0;\n // Iterate over the beginnings of messages and terms to efficiently skip\n // comments and recover from errors.\n while (true) {\n let next = RE_MESSAGE_START.exec(source);\n if (next === null) {\n break;\n }\n cursor = RE_MESSAGE_START.lastIndex;\n try {\n this.body.push(parseMessage(next[1]));\n }\n catch (err) {\n if (err instanceof SyntaxError) {\n // Don't report any Fluent syntax errors. Skip directly to the\n // beginning of the next message or term.\n continue;\n }\n throw err;\n }\n }\n // The parser implementation is inlined below for performance reasons,\n // as well as for convenience of accessing `source` and `cursor`.\n // The parser focuses on minimizing the number of false negatives at the\n // expense of increasing the risk of false positives. In other words, it\n // aims at parsing valid Fluent messages with a success rate of 100%, but it\n // may also parse a few invalid messages which the reference parser would\n // reject. The parser doesn't perform any validation and may produce entries\n // which wouldn't make sense in the real world. For best results users are\n // advised to validate translations with the fluent-syntax parser\n // pre-runtime.\n // The parser makes an extensive use of sticky regexes which can be anchored\n // to any offset of the source string without slicing it. Errors are thrown\n // to bail out of parsing of ill-formed messages.\n function test(re) {\n re.lastIndex = cursor;\n return re.test(source);\n }\n // Advance the cursor by the char if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeChar(char, errorClass) {\n if (source[cursor] === char) {\n cursor++;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${char}`);\n }\n return false;\n }\n // Advance the cursor by the token if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeToken(re, errorClass) {\n if (test(re)) {\n cursor = re.lastIndex;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${re.toString()}`);\n }\n return false;\n }\n // Execute a regex, advance the cursor, and return all capture groups.\n function match(re) {\n re.lastIndex = cursor;\n let result = re.exec(source);\n if (result === null) {\n throw new SyntaxError(`Expected ${re.toString()}`);\n }\n cursor = re.lastIndex;\n return result;\n }\n // Execute a regex, advance the cursor, and return the capture group.\n function match1(re) {\n return match(re)[1];\n }\n function parseMessage(id) {\n let value = parsePattern();\n let attributes = parseAttributes();\n if (value === null && Object.keys(attributes).length === 0) {\n throw new SyntaxError(\"Expected message value or attributes\");\n }\n return { id, value, attributes };\n }\n function parseAttributes() {\n let attrs = Object.create(null);\n while (test(RE_ATTRIBUTE_START)) {\n let name = match1(RE_ATTRIBUTE_START);\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected attribute value\");\n }\n attrs[name] = value;\n }\n return attrs;\n }\n function parsePattern() {\n let first;\n // First try to parse any simple text on the same line as the id.\n if (test(RE_TEXT_RUN)) {\n first = match1(RE_TEXT_RUN);\n }\n // If there's a placeable on the first line, parse a complex pattern.\n if (source[cursor] === \"{\" || source[cursor] === \"}\") {\n // Re-use the text parsed above, if possible.\n return parsePatternElements(first ? [first] : [], Infinity);\n }\n // RE_TEXT_VALUE stops at newlines. Only continue parsing the pattern if\n // what comes after the newline is indented.\n let indent = parseIndent();\n if (indent) {\n if (first) {\n // If there's text on the first line, the blank block is part of the\n // translation content in its entirety.\n return parsePatternElements([first, indent], indent.length);\n }\n // Otherwise, we're dealing with a block pattern, i.e. a pattern which\n // starts on a new line. Discrad the leading newlines but keep the\n // inline indent; it will be used by the dedentation logic.\n indent.value = trim(indent.value, RE_LEADING_NEWLINES);\n return parsePatternElements([indent], indent.length);\n }\n if (first) {\n // It was just a simple inline text after all.\n return trim(first, RE_TRAILING_SPACES);\n }\n return null;\n }\n // Parse a complex pattern as an array of elements.\n function parsePatternElements(elements = [], commonIndent) {\n while (true) {\n if (test(RE_TEXT_RUN)) {\n elements.push(match1(RE_TEXT_RUN));\n continue;\n }\n if (source[cursor] === \"{\") {\n elements.push(parsePlaceable());\n continue;\n }\n if (source[cursor] === \"}\") {\n throw new SyntaxError(\"Unbalanced closing brace\");\n }\n let indent = parseIndent();\n if (indent) {\n elements.push(indent);\n commonIndent = Math.min(commonIndent, indent.length);\n continue;\n }\n break;\n }\n let lastIndex = elements.length - 1;\n let lastElement = elements[lastIndex];\n // Trim the trailing spaces in the last element if it's a TextElement.\n if (typeof lastElement === \"string\") {\n elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);\n }\n let baked = [];\n for (let element of elements) {\n if (element instanceof Indent) {\n // Dedent indented lines by the maximum common indent.\n element = element.value.slice(0, element.value.length - commonIndent);\n }\n if (element) {\n baked.push(element);\n }\n }\n return baked;\n }\n function parsePlaceable() {\n consumeToken(TOKEN_BRACE_OPEN, SyntaxError);\n let selector = parseInlineExpression();\n if (consumeToken(TOKEN_BRACE_CLOSE)) {\n return selector;\n }\n if (consumeToken(TOKEN_ARROW)) {\n let variants = parseVariants();\n consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);\n return {\n type: \"select\",\n selector,\n ...variants,\n };\n }\n throw new SyntaxError(\"Unclosed placeable\");\n }\n function parseInlineExpression() {\n if (source[cursor] === \"{\") {\n // It's a nested placeable.\n return parsePlaceable();\n }\n if (test(RE_REFERENCE)) {\n let [, sigil, name, attr = null] = match(RE_REFERENCE);\n if (sigil === \"$\") {\n return { type: \"var\", name };\n }\n if (consumeToken(TOKEN_PAREN_OPEN)) {\n let args = parseArguments();\n if (sigil === \"-\") {\n // A parameterized term: -term(...).\n return { type: \"term\", name, attr, args };\n }\n if (RE_FUNCTION_NAME.test(name)) {\n return { type: \"func\", name, args };\n }\n throw new SyntaxError(\"Function names must be all upper-case\");\n }\n if (sigil === \"-\") {\n // A non-parameterized term: -term.\n return {\n type: \"term\",\n name,\n attr,\n args: [],\n };\n }\n return { type: \"mesg\", name, attr };\n }\n return parseLiteral();\n }\n function parseArguments() {\n let args = [];\n while (true) {\n switch (source[cursor]) {\n case \")\": // End of the argument list.\n cursor++;\n return args;\n case undefined: // EOF\n throw new SyntaxError(\"Unclosed argument list\");\n }\n args.push(parseArgument());\n // Commas between arguments are treated as whitespace.\n consumeToken(TOKEN_COMMA);\n }\n }\n function parseArgument() {\n let expr = parseInlineExpression();\n if (expr.type !== \"mesg\") {\n return expr;\n }\n if (consumeToken(TOKEN_COLON)) {\n // The reference is the beginning of a named argument.\n return {\n type: \"narg\",\n name: expr.name,\n value: parseLiteral(),\n };\n }\n // It's a regular message reference.\n return expr;\n }\n function parseVariants() {\n let variants = [];\n let count = 0;\n let star;\n while (test(RE_VARIANT_START)) {\n if (consumeChar(\"*\")) {\n star = count;\n }\n let key = parseVariantKey();\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected variant value\");\n }\n variants[count++] = { key, value };\n }\n if (count === 0) {\n return null;\n }\n if (star === undefined) {\n throw new SyntaxError(\"Expected default variant\");\n }\n return { variants, star };\n }\n function parseVariantKey() {\n consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);\n let key;\n if (test(RE_NUMBER_LITERAL)) {\n key = parseNumberLiteral();\n }\n else {\n key = {\n type: \"str\",\n value: match1(RE_IDENTIFIER),\n };\n }\n consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);\n return key;\n }\n function parseLiteral() {\n if (test(RE_NUMBER_LITERAL)) {\n return parseNumberLiteral();\n }\n if (source[cursor] === '\"') {\n return parseStringLiteral();\n }\n throw new SyntaxError(\"Invalid expression\");\n }\n function parseNumberLiteral() {\n let [, value, fraction = \"\"] = match(RE_NUMBER_LITERAL);\n let precision = fraction.length;\n return {\n type: \"num\",\n value: parseFloat(value),\n precision,\n };\n }\n function parseStringLiteral() {\n consumeChar('\"', SyntaxError);\n let value = \"\";\n while (true) {\n value += match1(RE_STRING_RUN);\n if (source[cursor] === \"\\\\\") {\n value += parseEscapeSequence();\n continue;\n }\n if (consumeChar('\"')) {\n return { type: \"str\", value };\n }\n // We've reached an EOL of EOF.\n throw new SyntaxError(\"Unclosed string literal\");\n }\n }\n // Unescape known escape sequences.\n function parseEscapeSequence() {\n if (test(RE_STRING_ESCAPE)) {\n return match1(RE_STRING_ESCAPE);\n }\n if (test(RE_UNICODE_ESCAPE)) {\n let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);\n let codepoint = parseInt(codepoint4 || codepoint6, 16);\n return codepoint <= 0xd7ff || 0xe000 <= codepoint\n ? // It's a Unicode scalar value.\n String.fromCodePoint(codepoint)\n : // Lonely surrogates can cause trouble when the parsing result is\n // saved using UTF-8. Use U+FFFD REPLACEMENT CHARACTER instead.\n \"�\";\n }\n throw new SyntaxError(\"Unknown escape sequence\");\n }\n // Parse blank space. Return it if it looks like indent before a pattern\n // line. Skip it othwerwise.\n function parseIndent() {\n let start = cursor;\n consumeToken(TOKEN_BLANK);\n // Check the first non-blank character after the indent.\n switch (source[cursor]) {\n case \".\":\n case \"[\":\n case \"*\":\n case \"}\":\n case undefined: // EOF\n // A special character. End the Pattern.\n return false;\n case \"{\":\n // Placeables don't require indentation (in EBNF: block-placeable).\n // Continue the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // If the first character on the line is not one of the special characters\n // listed above, it's a regular text character. Check if there's at least\n // one space of indent before it.\n if (source[cursor - 1] === \" \") {\n // It's an indented text character (in EBNF: indented-char). Continue\n // the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // A not-indented text character is likely the identifier of the next\n // message. End the Pattern.\n return false;\n }\n // Trim blanks in text according to the given regex.\n function trim(text, re) {\n return text.replace(re, \"\");\n }\n // Normalize a blank block and extract the indent details.\n function makeIndent(blank) {\n let value = blank.replace(RE_BLANK_LINES, \"\\n\");\n let length = RE_INDENT.exec(blank)[1].length;\n return new Indent(value, length);\n }\n }\n}\nclass Indent {\n constructor(value, length) {\n this.value = value;\n this.length = length;\n }\n}\n","/**\n * A JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n * @module\n */\nexport { FluentBundle } from \"./bundle.js\";\nexport { FluentResource } from \"./resource.js\";\nexport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n","/* eslint no-console: [\"error\", {allow: [\"warn\"]}] */\n/* global console */\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &, &, &.\nconst reOverlay = /<|&#?\\w+;/;\n/**\n * Elements allowed in translations even if they are not present in the source\n * HTML. They are text-level elements as defined by the HTML5 spec:\n * https://www.w3.org/TR/html5/text-level-semantics.html with the exception of:\n *\n * - a - because we don't allow href on it anyways,\n * - ruby, rt, rp - because we don't allow nested elements to be inserted.\n */\nconst TEXT_LEVEL_ELEMENTS = {\n \"http://www.w3.org/1999/xhtml\": [\n \"em\",\n \"strong\",\n \"small\",\n \"s\",\n \"cite\",\n \"q\",\n \"dfn\",\n \"abbr\",\n \"data\",\n \"time\",\n \"code\",\n \"var\",\n \"samp\",\n \"kbd\",\n \"sub\",\n \"sup\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"bdi\",\n \"bdo\",\n \"span\",\n \"br\",\n \"wbr\",\n ],\n};\nconst LOCALIZABLE_ATTRIBUTES = {\n \"http://www.w3.org/1999/xhtml\": {\n global: [\"title\", \"aria-description\", \"aria-label\", \"aria-valuetext\"],\n a: [\"download\"],\n area: [\"download\", \"alt\"],\n // value is special-cased in isAttrNameLocalizable\n input: [\"alt\", \"placeholder\"],\n menuitem: [\"label\"],\n menu: [\"label\"],\n optgroup: [\"label\"],\n option: [\"label\"],\n track: [\"label\"],\n img: [\"alt\"],\n textarea: [\"placeholder\"],\n th: [\"abbr\"],\n },\n \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n global: [\n \"accesskey\",\n \"aria-label\",\n \"aria-valuetext\",\n \"label\",\n \"title\",\n \"tooltiptext\",\n ],\n description: [\"value\"],\n key: [\"key\", \"keycode\"],\n label: [\"value\"],\n textbox: [\"placeholder\", \"value\"],\n },\n};\n/**\n * Translate an element.\n *\n * Translate the element's text content and attributes. Some HTML markup is\n * allowed in the translation. The element's children with the data-l10n-name\n * attribute will be treated as arguments to the translation. If the\n * translation defines the same children, their attributes and text contents\n * will be used for translating the matching source child.\n *\n * @param {Element} element\n * @param {Object} translation\n * @private\n */\nexport default function translateElement(element, translation) {\n const { value } = translation;\n if (typeof value === \"string\") {\n if (element.localName === \"title\" &&\n element.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n // A special case for the HTML title element whose content must be text.\n element.textContent = value;\n }\n else if (!reOverlay.test(value)) {\n // If the translation doesn't contain any markup skip the overlay logic.\n element.textContent = value;\n }\n else {\n // Else parse the translation's HTML using an inert template element,\n // sanitize it and replace the element's content.\n const templateElement = element.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n templateElement.innerHTML = value;\n overlayChildNodes(templateElement.content, element);\n }\n }\n // Even if the translation doesn't define any localizable attributes, run\n // overlayAttributes to remove any localizable attributes set by previous\n // translations.\n overlayAttributes(translation, element);\n}\n/**\n * Replace child nodes of an element with child nodes of another element.\n *\n * The contents of the target element will be cleared and fully replaced with\n * sanitized contents of the source element.\n *\n * @param {DocumentFragment} fromFragment - The source of children to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayChildNodes(fromFragment, toElement) {\n for (const childNode of fromFragment.childNodes) {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n // Keep the translated text node.\n continue;\n }\n if (childNode.hasAttribute(\"data-l10n-name\")) {\n const sanitized = getNodeForNamedElement(toElement, childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n if (isElementAllowed(childNode)) {\n const sanitized = createSanitizedElement(childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n console.warn(`An element of forbidden type \"${childNode.localName}\" was found in ` +\n \"the translation. Only safe text-level elements and elements with \" +\n \"data-l10n-name are allowed.\");\n // If all else fails, replace the element with its text content.\n fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);\n }\n toElement.textContent = \"\";\n toElement.appendChild(fromFragment);\n}\nfunction hasAttribute(attributes, name) {\n if (!attributes) {\n return false;\n }\n for (let attr of attributes) {\n if (attr.name === name) {\n return true;\n }\n }\n return false;\n}\n/**\n * Transplant localizable attributes of an element to another element.\n *\n * Any localizable attributes already set on the target element will be\n * cleared.\n *\n * @param {Element|Object} fromElement - The source of child nodes to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayAttributes(fromElement, toElement) {\n const explicitlyAllowed = toElement.hasAttribute(\"data-l10n-attrs\")\n ? toElement\n .getAttribute(\"data-l10n-attrs\")\n .split(\",\")\n .map(i => i.trim())\n : null;\n // Remove existing localizable attributes if they\n // will not be used in the new translation.\n for (const attr of Array.from(toElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n !hasAttribute(fromElement.attributes, attr.name)) {\n toElement.removeAttribute(attr.name);\n }\n }\n // fromElement might be a {value, attributes} object as returned by\n // Localization.messageFromBundle. In which case attributes may be null to\n // save GC cycles.\n if (!fromElement.attributes) {\n return;\n }\n // Set localizable attributes.\n for (const attr of Array.from(fromElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n toElement.getAttribute(attr.name) !== attr.value) {\n toElement.setAttribute(attr.name, attr.value);\n }\n }\n}\n/**\n * Sanitize a child element created by the translation.\n *\n * Try to find a corresponding child in sourceElement and use it as the base\n * for the sanitization. This will preserve functional attribtues defined on\n * the child element in the source HTML.\n *\n * @param {Element} sourceElement - The source for data-l10n-name lookups.\n * @param {Element} translatedChild - The translated child to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction getNodeForNamedElement(sourceElement, translatedChild) {\n const childName = translatedChild.getAttribute(\"data-l10n-name\");\n const sourceChild = sourceElement.querySelector(`[data-l10n-name=\"${childName}\"]`);\n if (!sourceChild) {\n console.warn(`An element named \"${childName}\" wasn't found in the source.`);\n return createTextNodeFromTextContent(translatedChild);\n }\n if (sourceChild.localName !== translatedChild.localName) {\n console.warn(`An element named \"${childName}\" was found in the translation ` +\n `but its type ${translatedChild.localName} didn't match the ` +\n `element found in the source (${sourceChild.localName}).`);\n return createTextNodeFromTextContent(translatedChild);\n }\n // Remove it from sourceElement so that the translation cannot use\n // the same reference name again.\n sourceElement.removeChild(sourceChild);\n // We can't currently guarantee that a translation won't remove\n // sourceChild from the element completely, which could break the app if\n // it relies on an event handler attached to the sourceChild. Let's make\n // this limitation explicit for now by breaking the identitiy of the\n // sourceChild by cloning it. This will destroy all event handlers\n // attached to sourceChild via addEventListener and via on\n // properties.\n const clone = sourceChild.cloneNode(false);\n return shallowPopulateUsing(translatedChild, clone);\n}\n/**\n * Sanitize an allowed element.\n *\n * Text-level elements allowed in translations may only use safe attributes\n * and will have any nested markup stripped to text content.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction createSanitizedElement(element) {\n // Start with an empty element of the same type to remove nested children\n // and non-localizable attributes defined by the translation.\n const clone = element.ownerDocument.createElement(element.localName);\n return shallowPopulateUsing(element, clone);\n}\n/**\n * Convert an element to a text node.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Node}\n * @private\n */\nfunction createTextNodeFromTextContent(element) {\n return element.ownerDocument.createTextNode(element.textContent);\n}\n/**\n * Check if element is allowed in the translation.\n *\n * This method is used by the sanitizer when the translation markup contains\n * an element which is not present in the source code.\n *\n * @param {Element} element\n * @returns {boolean}\n * @private\n */\nfunction isElementAllowed(element) {\n const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];\n return allowed && allowed.includes(element.localName);\n}\n/**\n * Check if attribute is allowed for the given element.\n *\n * This method is used by the sanitizer when the translation markup contains\n * DOM attributes, or when the translation has traits which map to DOM\n * attributes.\n *\n * `explicitlyAllowed` can be passed as a list of attributes explicitly\n * allowed on this element.\n *\n * @param {string} name\n * @param {Element} element\n * @param {Array} explicitlyAllowed\n * @returns {boolean}\n * @private\n */\nfunction isAttrNameLocalizable(name, element, explicitlyAllowed = null) {\n if (explicitlyAllowed && explicitlyAllowed.includes(name)) {\n return true;\n }\n const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];\n if (!allowed) {\n return false;\n }\n const attrName = name.toLowerCase();\n const elemName = element.localName;\n // Is it a globally safe attribute?\n if (allowed.global.includes(attrName)) {\n return true;\n }\n // Are there no allowed attributes for this element?\n if (!allowed[elemName]) {\n return false;\n }\n // Is it allowed on this element?\n if (allowed[elemName].includes(attrName)) {\n return true;\n }\n // Special case for value on HTML inputs with type button, reset, submit\n if (element.namespaceURI === \"http://www.w3.org/1999/xhtml\" &&\n elemName === \"input\" &&\n attrName === \"value\") {\n const type = element.type.toLowerCase();\n if (type === \"submit\" || type === \"button\" || type === \"reset\") {\n return true;\n }\n }\n return false;\n}\n/**\n * Helper to set textContent and localizable attributes on an element.\n *\n * @param {Element} fromElement\n * @param {Element} toElement\n * @returns {Element}\n * @private\n */\nfunction shallowPopulateUsing(fromElement, toElement) {\n toElement.textContent = fromElement.textContent;\n overlayAttributes(fromElement, toElement);\n return toElement;\n}\n","/*\n * Base CachedIterable class.\n */\nexport default class CachedIterable extends Array {\n /**\n * Create a `CachedIterable` instance from an iterable or, if another\n * instance of `CachedIterable` is passed, return it without any\n * modifications.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n static from(iterable) {\n if (iterable instanceof this) {\n return iterable;\n }\n\n return new this(iterable);\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedSyncIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedSyncIterable extends CachedIterable {\n /**\n * Create an `CachedSyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedSyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n [Symbol.iterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && last.done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedAsyncIterable caches the elements yielded by an async iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedAsyncIterable extends CachedIterable {\n /**\n * Create an `CachedAsyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedAsyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n /**\n * Asynchronous iterator caching the yielded elements.\n *\n * Elements yielded by the original iterable will be cached and available\n * synchronously. Returns an async generator object implementing the\n * iterator protocol over the elements of the original (async or sync)\n * iterable.\n */\n [Symbol.asyncIterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n async next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n async touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && (await last).done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","export {default as CachedSyncIterable} from \"./cached_sync_iterable.mjs\";\nexport {default as CachedAsyncIterable} from \"./cached_async_iterable.mjs\";\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\n/* global console */\nimport { CachedAsyncIterable } from \"cached-iterable\";\n/**\n * The `Localization` class is a central high-level API for vanilla\n * JavaScript use of Fluent.\n * It combines language negotiation, FluentBundle and I/O to\n * provide a scriptable API to format translations.\n */\nexport default class Localization {\n /**\n * @param {Array} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n *\n * @returns {Localization}\n */\n constructor(resourceIds = [], generateBundles) {\n this.resourceIds = resourceIds;\n this.generateBundles = generateBundles;\n this.onChange(true);\n }\n addResourceIds(resourceIds, eager = false) {\n this.resourceIds.push(...resourceIds);\n this.onChange(eager);\n return this.resourceIds.length;\n }\n removeResourceIds(resourceIds) {\n this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));\n this.onChange();\n return this.resourceIds.length;\n }\n /**\n * Format translations and handle fallback if needed.\n *\n * Format translations for `keys` from `FluentBundle` instances on this\n * DOMLocalization. In case of errors, fetch the next context in the\n * fallback chain.\n *\n * @param {Array} keys - Translation keys to format.\n * @param {Function} method - Formatting function.\n * @returns {Promise>}\n * @private\n */\n async formatWithFallback(keys, method) {\n const translations = [];\n let hasAtLeastOneBundle = false;\n for await (const bundle of this.bundles) {\n hasAtLeastOneBundle = true;\n const missingIds = keysFromBundle(method, bundle, keys, translations);\n if (missingIds.size === 0) {\n break;\n }\n if (typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const ids = Array.from(missingIds).join(\", \");\n console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);\n }\n }\n if (!hasAtLeastOneBundle && typeof console !== \"undefined\") {\n console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n keys: ${JSON.stringify(keys)}.\n resourceIds: ${JSON.stringify(this.resourceIds)}.`);\n }\n return translations;\n }\n /**\n * Format translations into `{value, attributes}` objects.\n *\n * The fallback logic is the same as in `formatValues`\n * but it returns `{value, attributes}` objects\n * which are suitable for the translation of DOM elements.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatMessages([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // [\n * // { value: 'Hello, Mary!', attributes: null },\n * // {\n * // value: 'Welcome!',\n * // attributes: [ { name: \"title\", value: 'Hello' } ]\n * // }\n * // ]\n * ```\n *\n * @param {Array} keys\n * @returns {Promise>}\n * @private\n */\n formatMessages(keys) {\n return this.formatWithFallback(keys, messageFromBundle);\n }\n /**\n * Retrieve translations corresponding to the passed keys.\n *\n * A generalized version of `DOMLocalization.formatValue`. Keys must\n * be `{id, args}` objects.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatValues([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'hello', args: { who: 'John' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // ['Hello, Mary!', 'Hello, John!', 'Welcome!']\n * ```\n *\n * @param {Array} keys\n * @returns {Promise>}\n */\n formatValues(keys) {\n return this.formatWithFallback(keys, valueFromBundle);\n }\n /**\n * Retrieve the translation corresponding to the `id` identifier.\n *\n * If passed, `args` is a simple hash object with a list of variables that\n * will be interpolated in the value of the translation.\n *\n * Returns a Promise resolving to the translation string.\n *\n * Use this sparingly for one-off messages which don't need to be\n * retranslated when the user changes their language preferences, e.g. in\n * notifications.\n *\n * @example\n * ```js\n * docL10n.formatValue(\n * 'hello', { who: 'world' }\n * ).then(console.log);\n *\n * // 'Hello, world!'\n * ```\n *\n * @param {string} id - Identifier of the translation to format\n * @param {Object} [args] - Optional external arguments\n * @returns {Promise}\n */\n async formatValue(id, args) {\n const [val] = await this.formatValues([{ id, args }]);\n return val;\n }\n handleEvent() {\n this.onChange();\n }\n /**\n * This method should be called when there's a reason to believe\n * that language negotiation or available resources changed.\n */\n onChange(eager = false) {\n this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));\n if (eager) {\n this.bundles.touchNext(2);\n }\n }\n}\n/**\n * Format the value of a message into a string or `null`.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a value of a single L10n Entity using provided `FluentBundle`.\n *\n * If the message doesn't have a value, return `null`.\n *\n * @param {FluentBundle} bundle\n * @param {Array} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {string|null}\n * @private\n */\nfunction valueFromBundle(bundle, errors, message, args) {\n if (message.value) {\n return bundle.formatPattern(message.value, args, errors);\n }\n return null;\n}\n/**\n * Format all public values of a message into a {value, attributes} object.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a single L10n Entity using provided `FluentBundle`.\n *\n * The function will return an object with a value and attributes of the\n * entity.\n *\n * @param {FluentBundle} bundle\n * @param {Array} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {Object}\n * @private\n */\nfunction messageFromBundle(bundle, errors, message, args) {\n const formatted = {\n value: null,\n attributes: null,\n };\n if (message.value) {\n formatted.value = bundle.formatPattern(message.value, args, errors);\n }\n let attrNames = Object.keys(message.attributes);\n if (attrNames.length > 0) {\n formatted.attributes = new Array(attrNames.length);\n for (let [i, name] of attrNames.entries()) {\n let value = bundle.formatPattern(message.attributes[name], args, errors);\n formatted.attributes[i] = { name, value };\n }\n }\n return formatted;\n}\n/**\n * This function is an inner function for `Localization.formatWithFallback`.\n *\n * It takes a `FluentBundle`, list of l10n-ids and a method to be used for\n * key resolution (either `valueFromBundle` or `messageFromBundle`) and\n * optionally a value returned from `keysFromBundle` executed against\n * another `FluentBundle`.\n *\n * The idea here is that if the previous `FluentBundle` did not resolve\n * all keys, we're calling this function with the next context to resolve\n * the remaining ones.\n *\n * In the function, we loop over `keys` and check if we have the `prev`\n * passed and if it has an error entry for the position we're in.\n *\n * If it doesn't, it means that we have a good translation for this key and\n * we return it. If it does, we'll try to resolve the key using the passed\n * `FluentBundle`.\n *\n * In the end, we fill the translations array, and return the Set with\n * missing ids.\n *\n * See `Localization.formatWithFallback` for more info on how this is used.\n *\n * @param {Function} method\n * @param {FluentBundle} bundle\n * @param {Array} keys\n * @param {{Array<{value: string, attributes: Object}>}} translations\n *\n * @returns {Set}\n * @private\n */\nfunction keysFromBundle(method, bundle, keys, translations) {\n const messageErrors = [];\n const missingIds = new Set();\n keys.forEach(({ id, args }, i) => {\n if (translations[i] !== undefined) {\n return;\n }\n let message = bundle.getMessage(id);\n if (message) {\n messageErrors.length = 0;\n translations[i] = method(bundle, messageErrors, message, args);\n if (messageErrors.length > 0 && typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const errors = messageErrors.join(\", \");\n console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);\n }\n }\n else {\n missingIds.add(id);\n }\n });\n return missingIds;\n}\n","import translateElement from \"./overlay.js\";\nimport Localization from \"./localization.js\";\nconst L10NID_ATTR_NAME = \"data-l10n-id\";\nconst L10NARGS_ATTR_NAME = \"data-l10n-args\";\nconst L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;\n/**\n * The `DOMLocalization` class is responsible for fetching resources and\n * formatting translations.\n *\n * It implements the fallback strategy in case of errors encountered during the\n * formatting of translations and methods for observing DOM\n * trees with a `MutationObserver`.\n */\nexport default class DOMLocalization extends Localization {\n /**\n * @param {Array} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n * @returns {DOMLocalization}\n */\n constructor(resourceIds, generateBundles) {\n super(resourceIds, generateBundles);\n // A Set of DOM trees observed by the `MutationObserver`.\n this.roots = new Set();\n // requestAnimationFrame handler.\n this.pendingrAF = null;\n // list of elements pending for translation.\n this.pendingElements = new Set();\n this.windowElement = null;\n this.mutationObserver = null;\n this.observerConfig = {\n attributes: true,\n characterData: false,\n childList: true,\n subtree: true,\n attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME],\n };\n }\n onChange(eager = false) {\n super.onChange(eager);\n if (this.roots) {\n this.translateRoots();\n }\n }\n /**\n * Set the `data-l10n-id` and `data-l10n-args` attributes on DOM elements.\n * FluentDOM makes use of mutation observers to detect changes\n * to `data-l10n-*` attributes and translate elements asynchronously.\n * `setAttributes` is a convenience method which allows to translate\n * DOM elements declaratively.\n *\n * You should always prefer to use `data-l10n-id` on elements (statically in\n * HTML or dynamically via `setAttributes`) over manually retrieving\n * translations with `format`. The use of attributes ensures that the\n * elements can be retranslated when the user changes their language\n * preferences.\n *\n * ```javascript\n * localization.setAttributes(\n * document.querySelector('#welcome'), 'hello', { who: 'world' }\n * );\n * ```\n *\n * This will set the following attributes on the `#welcome` element.\n * The MutationObserver will pick up this change and will localize the element\n * asynchronously.\n *\n * ```html\n *

\n *

\n * ```\n *\n * @param {Element} element - Element to set attributes on\n * @param {string} id - l10n-id string\n * @param {Object} args - KVP list of l10n arguments\n * @returns {Element}\n */\n setAttributes(element, id, args) {\n element.setAttribute(L10NID_ATTR_NAME, id);\n if (args) {\n element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));\n }\n else {\n element.removeAttribute(L10NARGS_ATTR_NAME);\n }\n return element;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements.\n *\n * ```javascript\n * localization.getAttributes(\n * document.querySelector('#welcome')\n * );\n * // -> { id: 'hello', args: { who: 'world' } }\n * ```\n *\n * @param {Element} element - HTML element\n * @returns {{id: string, args: Object}}\n */\n getAttributes(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n /**\n * Add `newRoot` to the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, start observing\n * `newRoot` in order to translate mutations in it.\n *\n * @param {Element} newRoot - Root to observe.\n */\n connectRoot(newRoot) {\n for (const root of this.roots) {\n if (root === newRoot ||\n root.contains(newRoot) ||\n newRoot.contains(root)) {\n throw new Error(\"Cannot add a root that overlaps with existing root.\");\n }\n }\n if (this.windowElement) {\n if (this.windowElement !== newRoot.ownerDocument.defaultView) {\n throw new Error(`Cannot connect a root:\n DOMLocalization already has a root from a different window.`);\n }\n }\n else {\n this.windowElement = newRoot.ownerDocument.defaultView;\n this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));\n }\n this.roots.add(newRoot);\n this.mutationObserver.observe(newRoot, this.observerConfig);\n }\n /**\n * Remove `root` from the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, stop observing\n * `root`.\n *\n * Returns `true` if the root was the last one managed by this\n * `DOMLocalization`.\n *\n * @param {Element} root - Root to disconnect.\n * @returns {boolean}\n */\n disconnectRoot(root) {\n this.roots.delete(root);\n // Pause the mutation observer to stop observing `root`.\n this.pauseObserving();\n if (this.roots.size === 0) {\n this.mutationObserver = null;\n if (this.windowElement && this.pendingrAF) {\n this.windowElement.cancelAnimationFrame(this.pendingrAF);\n }\n this.windowElement = null;\n this.pendingrAF = null;\n this.pendingElements.clear();\n return true;\n }\n // Resume observing all other roots.\n this.resumeObserving();\n return false;\n }\n /**\n * Translate all roots associated with this `DOMLocalization`.\n *\n * @returns {Promise}\n */\n translateRoots() {\n const roots = Array.from(this.roots);\n return Promise.all(roots.map(root => this.translateFragment(root)));\n }\n /**\n * Pauses the `MutationObserver`.\n */\n pauseObserving() {\n if (!this.mutationObserver) {\n return;\n }\n this.translateMutations(this.mutationObserver.takeRecords());\n this.mutationObserver.disconnect();\n }\n /**\n * Resumes the `MutationObserver`.\n */\n resumeObserving() {\n if (!this.mutationObserver) {\n return;\n }\n for (const root of this.roots) {\n this.mutationObserver.observe(root, this.observerConfig);\n }\n }\n /**\n * Translate mutations detected by the `MutationObserver`.\n *\n * @private\n */\n translateMutations(mutations) {\n for (const mutation of mutations) {\n switch (mutation.type) {\n case \"attributes\":\n if (mutation.target.hasAttribute(\"data-l10n-id\")) {\n this.pendingElements.add(mutation.target);\n }\n break;\n case \"childList\":\n for (const addedNode of mutation.addedNodes) {\n if (addedNode.nodeType === addedNode.ELEMENT_NODE) {\n if (addedNode.childElementCount) {\n for (const element of this.getTranslatables(addedNode)) {\n this.pendingElements.add(element);\n }\n }\n else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {\n this.pendingElements.add(addedNode);\n }\n }\n }\n break;\n }\n }\n // This fragment allows us to coalesce all pending translations\n // into a single requestAnimationFrame.\n if (this.pendingElements.size > 0) {\n if (this.pendingrAF === null) {\n this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n this.translateElements(Array.from(this.pendingElements));\n this.pendingElements.clear();\n this.pendingrAF = null;\n });\n }\n }\n }\n /**\n * Translate a DOM element or fragment asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a DOM fragment.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {DOMFragment} frag - Element or DocumentFragment to be translated\n * @returns {Promise}\n */\n translateFragment(frag) {\n return this.translateElements(this.getTranslatables(frag));\n }\n /**\n * Translate a list of DOM elements asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a list of elements.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {Array} elements - List of elements to be translated\n * @returns {Promise}\n */\n async translateElements(elements) {\n if (!elements.length) {\n return undefined;\n }\n const keys = elements.map(this.getKeysForElement);\n const translations = await this.formatMessages(keys);\n return this.applyTranslations(elements, translations);\n }\n /**\n * Applies translations onto elements.\n *\n * @param {Array} elements\n * @param {Array} translations\n * @private\n */\n applyTranslations(elements, translations) {\n this.pauseObserving();\n for (let i = 0; i < elements.length; i++) {\n if (translations[i] !== undefined) {\n translateElement(elements[i], translations[i]);\n }\n }\n this.resumeObserving();\n }\n /**\n * Collects all translatable child elements of the element.\n *\n * @param {Element} element\n * @returns {Array}\n * @private\n */\n getTranslatables(element) {\n const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));\n if (typeof element.hasAttribute === \"function\" &&\n element.hasAttribute(L10NID_ATTR_NAME)) {\n nodes.push(element);\n }\n return nodes;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements as a two-element\n * array.\n *\n * @param {Element} element\n * @returns {Object}\n * @private\n */\n getKeysForElement(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n}\n","export { default as DOMLocalization } from \"./dom_localization.js\";\nexport { default as Localization } from \"./localization.js\";\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\n/**\n * NOTE: The L10n-implementations should use lowercase language-codes\n * internally.\n * @implements {IL10n}\n */\nclass L10n {\n #dir;\n\n #elements;\n\n #lang;\n\n #l10n;\n\n constructor({ lang, isRTL }, l10n = null) {\n this.#lang = L10n.#fixupLangCode(lang);\n this.#l10n = l10n;\n this.#dir = (isRTL ?? L10n.#isRTL(this.#lang)) ? \"rtl\" : \"ltr\";\n }\n\n _setL10n(l10n) {\n this.#l10n = l10n;\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n document.l10n = l10n;\n }\n }\n\n /** @inheritdoc */\n getLanguage() {\n return this.#lang;\n }\n\n /** @inheritdoc */\n getDirection() {\n return this.#dir;\n }\n\n /** @inheritdoc */\n async get(ids, args = null, fallback) {\n if (Array.isArray(ids)) {\n ids = ids.map(id => ({ id }));\n const messages = await this.#l10n.formatMessages(ids);\n return messages.map(message => message.value);\n }\n\n const messages = await this.#l10n.formatMessages([\n {\n id: ids,\n args,\n },\n ]);\n return messages[0]?.value || fallback;\n }\n\n /** @inheritdoc */\n async translate(element) {\n (this.#elements ||= new Set()).add(element);\n try {\n this.#l10n.connectRoot(element);\n await this.#l10n.translateRoots();\n } catch {\n // Element is under an existing root, so there is no need to add it again.\n }\n }\n\n /** @inheritdoc */\n async translateOnce(element) {\n try {\n await this.#l10n.translateElements([element]);\n } catch (ex) {\n console.error(\"translateOnce:\", ex);\n }\n }\n\n /** @inheritdoc */\n async destroy() {\n if (this.#elements) {\n for (const element of this.#elements) {\n this.#l10n.disconnectRoot(element);\n }\n this.#elements.clear();\n this.#elements = null;\n }\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n pause() {\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n resume() {\n this.#l10n.resumeObserving();\n }\n\n static #fixupLangCode(langCode) {\n // Use only lowercase language-codes internally, and fallback to English.\n langCode = langCode?.toLowerCase() || \"en-us\";\n\n // Try to support \"incompletely\" specified language codes (see issue 13689).\n const PARTIAL_LANG_CODES = {\n en: \"en-us\",\n es: \"es-es\",\n fy: \"fy-nl\",\n ga: \"ga-ie\",\n gu: \"gu-in\",\n hi: \"hi-in\",\n hy: \"hy-am\",\n nb: \"nb-no\",\n ne: \"ne-np\",\n nn: \"nn-no\",\n pa: \"pa-in\",\n pt: \"pt-pt\",\n sv: \"sv-se\",\n zh: \"zh-cn\",\n };\n return PARTIAL_LANG_CODES[langCode] || langCode;\n }\n\n static #isRTL(lang) {\n const shortCode = lang.split(\"-\", 1)[0];\n return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(shortCode);\n }\n}\n\nconst GenericL10n = null;\n\nexport { GenericL10n, L10n };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\nimport { FeatureTest, fetchData } from \"pdfjs-lib\";\nimport { FluentBundle, FluentResource } from \"fluent-bundle\";\nimport { DOMLocalization } from \"fluent-dom\";\nimport { L10n } from \"./l10n.js\";\n\nfunction PLATFORM() {\n const { isAndroid, isLinux, isMac, isWindows } = FeatureTest.platform;\n if (isLinux) {\n return \"linux\";\n }\n if (isWindows) {\n return \"windows\";\n }\n if (isMac) {\n return \"macos\";\n }\n if (isAndroid) {\n return \"android\";\n }\n return \"other\";\n}\n\nfunction createBundle(lang, text) {\n const resource = new FluentResource(text);\n const bundle = new FluentBundle(lang, {\n functions: { PLATFORM },\n });\n const errors = bundle.addResource(resource);\n if (errors.length) {\n console.error(\"L10n errors\", errors);\n }\n return bundle;\n}\n\n/**\n * @implements {IL10n}\n */\nclass GenericL10n extends L10n {\n constructor(lang) {\n super({ lang });\n\n const generateBundles = !lang\n ? GenericL10n.#generateBundlesFallback.bind(\n GenericL10n,\n this.getLanguage()\n )\n : GenericL10n.#generateBundles.bind(\n GenericL10n,\n \"en-us\",\n this.getLanguage()\n );\n this._setL10n(new DOMLocalization([], generateBundles));\n }\n\n /**\n * Generate the bundles for Fluent.\n * @param {String} defaultLang - The fallback language to use for\n * translations.\n * @param {String} baseLang - The base language to use for translations.\n */\n static async *#generateBundles(defaultLang, baseLang) {\n const { baseURL, paths } = await this.#getPaths();\n\n const langs = [baseLang];\n if (defaultLang !== baseLang) {\n // Also fallback to the short-format of the base language\n // (see issue 17269).\n const shortLang = baseLang.split(\"-\", 1)[0];\n\n if (shortLang !== baseLang) {\n langs.push(shortLang);\n }\n langs.push(defaultLang);\n }\n // Trigger fetching of bundles in parallel, to reduce overall load time.\n const bundles = langs.map(lang => [\n lang,\n this.#createBundle(lang, baseURL, paths),\n ]);\n\n for (const [lang, bundlePromise] of bundles) {\n const bundle = await bundlePromise;\n if (bundle) {\n yield bundle;\n } else if (lang === \"en-us\") {\n yield this.#createBundleFallback(lang);\n }\n }\n }\n\n static async #createBundle(lang, baseURL, paths) {\n const path = paths[lang];\n if (!path) {\n return null;\n }\n const url = new URL(path, baseURL);\n const text = await fetchData(url, /* type = */ \"text\");\n\n return createBundle(lang, text);\n }\n\n static async #getPaths() {\n try {\n const { href } = document.querySelector(`link[type=\"application/l10n\"]`);\n const paths = await fetchData(href, /* type = */ \"json\");\n\n return {\n baseURL: href.substring(0, href.lastIndexOf(\"/\") + 1) || \"./\",\n paths,\n };\n } catch {}\n return { baseURL: \"./\", paths: Object.create(null) };\n }\n\n static async *#generateBundlesFallback(lang) {\n yield this.#createBundleFallback(lang);\n }\n\n static async #createBundleFallback(lang) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Not implemented: #createBundleFallback\");\n }\n const text =\n typeof PDFJSDev === \"undefined\"\n ? await fetchData(\n new URL(\"../l10n/en-US/viewer.ftl\", window.location.href),\n /* type = */ \"text\"\n )\n : PDFJSDev.eval(\"DEFAULT_FTL\");\n\n return createBundle(lang, text);\n }\n}\n\nexport { GenericL10n };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getPdfFilenameFromUrl } from \"pdfjs-lib\";\n\nasync function docProperties(pdfDocument) {\n const url = \"\",\n baseUrl = \"\";\n const { info, metadata, contentDispositionFilename, contentLength } =\n await pdfDocument.getMetadata();\n\n return {\n ...info,\n baseURL: baseUrl,\n filesize: contentLength || (await pdfDocument.getDownloadInfo()).length,\n filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n metadata: metadata?.getRaw(),\n authors: metadata?.get(\"dc:creator\"),\n numPages: pdfDocument.numPages,\n URL: url,\n };\n}\n\nclass GenericScripting {\n constructor(sandboxBundleSrc) {\n this._ready = new Promise((resolve, reject) => {\n const sandbox =\n typeof PDFJSDev === \"undefined\"\n ? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method\n : __raw_import__(sandboxBundleSrc);\n sandbox\n .then(pdfjsSandbox => {\n resolve(pdfjsSandbox.QuickJSSandbox());\n })\n .catch(reject);\n });\n }\n\n async createSandbox(data) {\n const sandbox = await this._ready;\n sandbox.create(data);\n }\n\n async dispatchEventInSandbox(event) {\n const sandbox = await this._ready;\n setTimeout(() => sandbox.dispatchEvent(event), 0);\n }\n\n async destroySandbox() {\n const sandbox = await this._ready;\n sandbox.nukeSandbox();\n }\n}\n\nexport { docProperties, GenericScripting };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getUuid } from \"pdfjs-lib\";\n\nconst KEY_STORAGE = \"pdfjs.signature\";\n\nclass SignatureStorage {\n // TODO: Encrypt the data in using a password and add a UI for entering it.\n // We could use the Web Crypto API for this (see https://bradyjoslin.com/blog/encryption-webcrypto/\n // for an example).\n\n #eventBus;\n\n #signatures = null;\n\n #signal = null;\n\n constructor(eventBus, signal) {\n this.#eventBus = eventBus;\n this.#signal = signal;\n }\n\n #save() {\n localStorage.setItem(\n KEY_STORAGE,\n JSON.stringify(Object.fromEntries(this.#signatures))\n );\n }\n\n async getAll() {\n if (this.#signal) {\n window.addEventListener(\n \"storage\",\n ({ key }) => {\n if (key === KEY_STORAGE) {\n this.#signatures = null;\n this.#eventBus?.dispatch(\"storedsignatureschanged\", {\n source: this,\n });\n }\n },\n { signal: this.#signal }\n );\n this.#signal = null;\n }\n if (!this.#signatures) {\n this.#signatures = new Map();\n const data = localStorage.getItem(KEY_STORAGE);\n if (data) {\n for (const [key, value] of Object.entries(JSON.parse(data))) {\n this.#signatures.set(key, value);\n }\n }\n }\n return this.#signatures;\n }\n\n async isFull() {\n // Only allow 5 signatures to be saved.\n return (await this.size()) === 5;\n }\n\n async size() {\n return (await this.getAll()).size;\n }\n\n async create(data) {\n if (await this.isFull()) {\n return null;\n }\n const uuid = getUuid();\n this.#signatures.set(uuid, data);\n this.#save();\n\n return uuid;\n }\n\n async delete(uuid) {\n const signatures = await this.getAll();\n if (!signatures.has(uuid)) {\n return false;\n }\n signatures.delete(uuid);\n this.#save();\n\n return true;\n }\n}\n\nexport { SignatureStorage };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions } from \"./app_options.js\";\nimport { BaseExternalServices } from \"./external_services.js\";\nimport { BasePreferences } from \"./preferences.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { GenericScripting } from \"./generic_scripting.js\";\nimport { SignatureStorage } from \"./generic_signature_storage.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/genericcom\" shall not be used outside GENERIC build.'\n );\n}\n\nfunction initCom(app) {}\n\nclass Preferences extends BasePreferences {\n async _writeToStorage(prefObj) {\n localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n }\n\n async _readFromStorage(prefObj) {\n return { prefs: JSON.parse(localStorage.getItem(\"pdfjs.preferences\")) };\n }\n}\n\nclass ExternalServices extends BaseExternalServices {\n async createL10n() {\n return new GenericL10n(AppOptions.get(\"localeProperties\")?.lang);\n }\n\n createScripting() {\n return new GenericScripting(AppOptions.get(\"sandboxBundleSrc\"));\n }\n\n createSignatureStorage(eventBus, signal) {\n return new SignatureStorage(eventBus, signal);\n }\n}\n\nclass MLManager {\n static {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n this.getFakeMLManager = options => new FakeMLManager(options);\n }\n }\n\n async isEnabledFor(_name) {\n return false;\n }\n\n async deleteModel(_service) {\n return null;\n }\n\n isReady(_name) {\n return false;\n }\n\n guess(_data) {}\n\n toggleService(_name, _enabled) {}\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // eslint-disable-next-line no-var\n var FakeMLManager = class {\n eventBus = null;\n\n hasProgress = false;\n\n constructor({ enableGuessAltText, enableAltTextModelDownload }) {\n this.enableGuessAltText = enableGuessAltText;\n this.enableAltTextModelDownload = enableAltTextModelDownload;\n }\n\n setEventBus(eventBus, abortSignal) {\n this.eventBus = eventBus;\n }\n\n async isEnabledFor(_name) {\n return this.enableGuessAltText;\n }\n\n async deleteModel(_name) {\n this.enableAltTextModelDownload = false;\n return null;\n }\n\n async loadModel(_name) {}\n\n async downloadModel(_name) {\n // Simulate downloading the model but with progress.\n // The progress can be seen in the new alt-text dialog.\n this.hasProgress = true;\n\n const { promise, resolve } = Promise.withResolvers();\n const total = 1e8;\n const end = 1.5 * total;\n const increment = 5e6;\n let loaded = 0;\n const id = setInterval(() => {\n loaded += increment;\n if (loaded <= end) {\n this.eventBus.dispatch(\"loadaiengineprogress\", {\n source: this,\n detail: {\n total,\n totalLoaded: loaded,\n finished: loaded + increment >= end,\n },\n });\n return;\n }\n clearInterval(id);\n this.hasProgress = false;\n this.enableAltTextModelDownload = true;\n resolve(true);\n }, 900);\n return promise;\n }\n\n isReady(_name) {\n return this.enableAltTextModelDownload;\n }\n\n guess({ request: { data } }) {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(data ? { output: \"Fake alt text.\" } : { error: true });\n }, 3000);\n });\n }\n\n toggleService(_name, enabled) {\n this.enableGuessAltText = enabled;\n }\n };\n}\n\nexport { ExternalServices, initCom, MLManager, Preferences };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"pdfjs-lib\";\n\nclass NewAltTextManager {\n #boundCancel = this.#cancel.bind(this);\n\n #createAutomaticallyButton;\n\n #currentEditor = null;\n\n #cancelButton;\n\n #descriptionContainer;\n\n #dialog;\n\n #disclaimer;\n\n #downloadModel;\n\n #downloadModelDescription;\n\n #eventBus;\n\n #firstTime = false;\n\n #guessedAltText;\n\n #hasAI = null;\n\n #isEditing = null;\n\n #imagePreview;\n\n #imageData;\n\n #isAILoading = false;\n\n #wasAILoading = false;\n\n #learnMore;\n\n #notNowButton;\n\n #overlayManager;\n\n #textarea;\n\n #title;\n\n #uiManager;\n\n #previousAltText = null;\n\n constructor(\n {\n descriptionContainer,\n dialog,\n imagePreview,\n cancelButton,\n disclaimer,\n notNowButton,\n saveButton,\n textarea,\n learnMore,\n errorCloseButton,\n createAutomaticallyButton,\n downloadModel,\n downloadModelDescription,\n title,\n },\n overlayManager,\n eventBus\n ) {\n this.#cancelButton = cancelButton;\n this.#createAutomaticallyButton = createAutomaticallyButton;\n this.#descriptionContainer = descriptionContainer;\n this.#dialog = dialog;\n this.#disclaimer = disclaimer;\n this.#notNowButton = notNowButton;\n this.#imagePreview = imagePreview;\n this.#textarea = textarea;\n this.#learnMore = learnMore;\n this.#title = title;\n this.#downloadModel = downloadModel;\n this.#downloadModelDescription = downloadModelDescription;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#boundCancel);\n notNowButton.addEventListener(\"click\", this.#boundCancel);\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n errorCloseButton.addEventListener(\"click\", () => {\n this.#toggleError(false);\n });\n createAutomaticallyButton.addEventListener(\"click\", async () => {\n const checked =\n createAutomaticallyButton.getAttribute(\"aria-pressed\") !== \"true\";\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.ai_generation_check\",\n data: { status: checked },\n });\n\n if (this.#uiManager) {\n this.#uiManager.setPreference(\"enableGuessAltText\", checked);\n await this.#uiManager.mlManager.toggleService(\"altText\", checked);\n }\n this.#toggleGuessAltText(checked, /* isInitial = */ false);\n });\n textarea.addEventListener(\"focus\", () => {\n this.#wasAILoading = this.#isAILoading;\n this.#toggleLoading(false);\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"blur\", () => {\n if (!textarea.value) {\n this.#toggleLoading(this.#wasAILoading);\n }\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"input\", () => {\n this.#toggleTitleAndDisclaimer();\n });\n\n eventBus._on(\"enableguessalttext\", ({ value }) => {\n this.#toggleGuessAltText(value, /* isInitial = */ false);\n });\n\n this.#overlayManager.register(dialog);\n\n this.#learnMore.addEventListener(\"click\", () => {\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.info\",\n data: { topic: \"alt_text\" },\n });\n });\n }\n\n #toggleLoading(value) {\n if (!this.#uiManager || this.#isAILoading === value) {\n return;\n }\n this.#isAILoading = value;\n this.#descriptionContainer.classList.toggle(\"loading\", value);\n }\n\n #toggleError(value) {\n if (!this.#uiManager) {\n return;\n }\n this.#dialog.classList.toggle(\"error\", value);\n }\n\n async #toggleGuessAltText(value, isInitial = false) {\n if (!this.#uiManager) {\n return;\n }\n this.#dialog.classList.toggle(\"aiDisabled\", !value);\n this.#createAutomaticallyButton.setAttribute(\"aria-pressed\", value);\n\n if (value) {\n const { altTextLearnMoreUrl } = this.#uiManager.mlManager;\n if (altTextLearnMoreUrl) {\n this.#learnMore.href = altTextLearnMoreUrl;\n }\n this.#mlGuessAltText(isInitial);\n } else {\n this.#toggleLoading(false);\n this.#isAILoading = false;\n this.#toggleTitleAndDisclaimer();\n }\n }\n\n #toggleNotNow() {\n this.#notNowButton.classList.toggle(\"hidden\", !this.#firstTime);\n this.#cancelButton.classList.toggle(\"hidden\", this.#firstTime);\n }\n\n #toggleAI(value) {\n if (!this.#uiManager || this.#hasAI === value) {\n return;\n }\n this.#hasAI = value;\n this.#dialog.classList.toggle(\"noAi\", !value);\n this.#toggleTitleAndDisclaimer();\n }\n\n #toggleTitleAndDisclaimer() {\n // Disclaimer is visible when the AI is loading or the user didn't change\n // the guessed alt text.\n const visible =\n this.#isAILoading ||\n (this.#guessedAltText && this.#guessedAltText === this.#textarea.value);\n this.#disclaimer.hidden = !visible;\n\n // The title changes depending if the text area is empty or not.\n const isEditing = this.#isAILoading || !!this.#textarea.value;\n if (this.#isEditing === isEditing) {\n return;\n }\n this.#isEditing = isEditing;\n this.#title.setAttribute(\n \"data-l10n-id\",\n isEditing\n ? \"pdfjs-editor-new-alt-text-dialog-edit-label\"\n : \"pdfjs-editor-new-alt-text-dialog-add-label\"\n );\n }\n\n async #mlGuessAltText(isInitial) {\n if (this.#isAILoading) {\n // We're still loading the previous guess.\n return;\n }\n\n if (this.#textarea.value) {\n // The user has already set an alt text.\n return;\n }\n\n if (isInitial && this.#previousAltText !== null) {\n // The user has already set an alt text (empty or not).\n return;\n }\n\n this.#guessedAltText = this.#currentEditor.guessedAltText;\n if (this.#previousAltText === null && this.#guessedAltText) {\n // We have a guessed alt text and the user didn't change it.\n this.#addAltText(this.#guessedAltText);\n return;\n }\n\n this.#toggleLoading(true);\n this.#toggleTitleAndDisclaimer();\n\n let hasError = false;\n try {\n // When calling #mlGuessAltText we don't wait for it, so we must take care\n // that the alt text dialog can have been closed before the response is.\n\n const altText = await this.#currentEditor.mlGuessAltText(\n this.#imageData,\n /* updateAltTextData = */ false\n );\n if (altText) {\n this.#guessedAltText = altText;\n this.#wasAILoading = this.#isAILoading;\n if (this.#isAILoading) {\n this.#addAltText(altText);\n }\n }\n } catch (e) {\n console.error(e);\n hasError = true;\n }\n\n this.#toggleLoading(false);\n this.#toggleTitleAndDisclaimer();\n\n if (hasError && this.#uiManager) {\n this.#toggleError(true);\n }\n }\n\n #addAltText(altText) {\n if (!this.#uiManager || this.#textarea.value) {\n return;\n }\n this.#textarea.value = altText;\n this.#toggleTitleAndDisclaimer();\n }\n\n #setProgress() {\n // Show the download model progress.\n this.#downloadModel.classList.toggle(\"hidden\", false);\n\n const callback = async ({ detail: { finished, total, totalLoaded } }) => {\n const ONE_MEGA_BYTES = 1e6;\n // totalLoaded can be greater than total if the download is compressed.\n // So we cheat to avoid any confusion.\n totalLoaded = Math.min(0.99 * total, totalLoaded);\n\n // Update the progress.\n const totalSize = (this.#downloadModelDescription.ariaValueMax =\n Math.round(total / ONE_MEGA_BYTES));\n const downloadedSize = (this.#downloadModelDescription.ariaValueNow =\n Math.round(totalLoaded / ONE_MEGA_BYTES));\n this.#downloadModelDescription.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ totalSize, downloadedSize })\n );\n if (!finished) {\n return;\n }\n\n // We're done, remove the listener and hide the download model progress.\n this.#eventBus._off(\"loadaiengineprogress\", callback);\n this.#downloadModel.classList.toggle(\"hidden\", true);\n\n this.#toggleAI(true);\n if (!this.#uiManager) {\n return;\n }\n const { mlManager } = this.#uiManager;\n\n // The model has been downloaded, we can now enable the AI service.\n mlManager.toggleService(\"altText\", true);\n this.#toggleGuessAltText(\n await mlManager.isEnabledFor(\"altText\"),\n /* isInitial = */ true\n );\n };\n this.#eventBus._on(\"loadaiengineprogress\", callback);\n }\n\n async editAltText(uiManager, editor, firstTime) {\n if (this.#currentEditor || !editor) {\n return;\n }\n\n if (firstTime && editor.hasAltTextData()) {\n editor.altTextFinish();\n return;\n }\n\n this.#firstTime = firstTime;\n let { mlManager } = uiManager;\n let hasAI = !!mlManager;\n this.#toggleTitleAndDisclaimer();\n\n if (mlManager && !mlManager.isReady(\"altText\")) {\n hasAI = false;\n if (mlManager.hasProgress) {\n this.#setProgress();\n } else {\n mlManager = null;\n }\n } else {\n this.#downloadModel.classList.toggle(\"hidden\", true);\n }\n\n const isAltTextEnabledPromise = mlManager?.isEnabledFor(\"altText\");\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n\n ({ altText: this.#previousAltText } = editor.altTextData);\n this.#textarea.value = this.#previousAltText ?? \"\";\n\n // TODO: get this value from Firefox\n // (https://bugzilla.mozilla.org/show_bug.cgi?id=1908184)\n const AI_MAX_IMAGE_DIMENSION = 224;\n const MAX_PREVIEW_DIMENSION = 180;\n\n // The max dimension of the preview in the dialog is 180px, so we keep 224px\n // and rescale it thanks to css.\n\n let canvas, width, height;\n if (mlManager) {\n ({\n canvas,\n width,\n height,\n imageData: this.#imageData,\n } = editor.copyCanvas(\n AI_MAX_IMAGE_DIMENSION,\n MAX_PREVIEW_DIMENSION,\n /* createImageData = */ true\n ));\n if (hasAI) {\n this.#toggleGuessAltText(\n await isAltTextEnabledPromise,\n /* isInitial = */ true\n );\n }\n } else {\n ({ canvas, width, height } = editor.copyCanvas(\n AI_MAX_IMAGE_DIMENSION,\n MAX_PREVIEW_DIMENSION,\n /* createImageData = */ false\n ));\n }\n\n canvas.setAttribute(\"role\", \"presentation\");\n const { style } = canvas;\n style.width = `${width}px`;\n style.height = `${height}px`;\n this.#imagePreview.append(canvas);\n\n this.#toggleNotNow();\n this.#toggleAI(hasAI);\n this.#toggleError(false);\n\n try {\n await this.#overlayManager.open(this.#dialog);\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #cancel() {\n this.#currentEditor.altTextData = {\n cancel: true,\n };\n const altText = this.#textarea.value.trim();\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.dismiss\",\n data: {\n alt_text_type: altText ? \"present\" : \"empty\",\n flow: this.#firstTime ? \"image_add\" : \"alt_text_edit\",\n },\n });\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: { alt_text_modal: true, alt_text_type: \"skipped\" },\n });\n this.#finish();\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n\n #close() {\n const canvas = this.#imagePreview.firstChild;\n canvas.remove();\n canvas.width = canvas.height = 0;\n this.#imageData = null;\n\n this.#toggleLoading(false);\n\n this.#uiManager?.addEditListeners();\n this.#currentEditor.altTextFinish();\n this.#uiManager?.setSelected(this.#currentEditor);\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #extractWords(text) {\n return new Set(\n text\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/gu)\n .filter(x => !!x)\n );\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n this.#currentEditor.altTextData = {\n altText,\n decorative: false,\n };\n this.#currentEditor.altTextData.guessedAltText = this.#guessedAltText;\n\n if (this.#guessedAltText && this.#guessedAltText !== altText) {\n const guessedWords = this.#extractWords(this.#guessedAltText);\n const words = this.#extractWords(altText);\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.user_edit\",\n data: {\n total_words: guessedWords.size,\n words_removed: guessedWords.difference(words).size,\n words_added: words.difference(guessedWords).size,\n },\n });\n }\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: {\n alt_text_modal: true,\n alt_text_type: altText ? \"present\" : \"empty\",\n },\n });\n\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.save\",\n data: {\n alt_text_type: altText ? \"present\" : \"empty\",\n flow: this.#firstTime ? \"image_add\" : \"alt_text_edit\",\n },\n });\n\n this.#finish();\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n }\n}\n\nclass ImageAltTextSettings {\n #aiModelSettings;\n\n #createModelButton;\n\n #downloadModelButton;\n\n #dialog;\n\n #eventBus;\n\n #mlManager;\n\n #overlayManager;\n\n #showAltTextDialogButton;\n\n constructor(\n {\n dialog,\n createModelButton,\n aiModelSettings,\n learnMore,\n closeButton,\n deleteModelButton,\n downloadModelButton,\n showAltTextDialogButton,\n },\n overlayManager,\n eventBus,\n mlManager\n ) {\n this.#dialog = dialog;\n this.#aiModelSettings = aiModelSettings;\n this.#createModelButton = createModelButton;\n this.#downloadModelButton = downloadModelButton;\n this.#showAltTextDialogButton = showAltTextDialogButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#mlManager = mlManager;\n\n const { altTextLearnMoreUrl } = mlManager;\n if (altTextLearnMoreUrl) {\n learnMore.href = altTextLearnMoreUrl;\n }\n\n dialog.addEventListener(\"contextmenu\", noContextMenu);\n\n createModelButton.addEventListener(\"click\", async e => {\n const checked = this.#togglePref(\"enableGuessAltText\", e);\n await mlManager.toggleService(\"altText\", checked);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_ai_generation_check\",\n data: { status: checked },\n });\n });\n\n showAltTextDialogButton.addEventListener(\"click\", e => {\n const checked = this.#togglePref(\"enableNewAltTextWhenAddingImage\", e);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_edit_alt_text_check\",\n data: { status: checked },\n });\n });\n\n deleteModelButton.addEventListener(\"click\", this.#delete.bind(this, true));\n downloadModelButton.addEventListener(\n \"click\",\n this.#download.bind(this, true)\n );\n\n closeButton.addEventListener(\"click\", this.#finish.bind(this));\n\n learnMore.addEventListener(\"click\", () => {\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.info\",\n data: { topic: \"ai_generation\" },\n });\n });\n\n eventBus._on(\"enablealttextmodeldownload\", ({ value }) => {\n if (value) {\n this.#download(false);\n } else {\n this.#delete(false);\n }\n });\n\n this.#overlayManager.register(dialog);\n }\n\n #reportTelemetry(data) {\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data,\n },\n });\n }\n\n async #download(isFromUI = false) {\n if (isFromUI) {\n this.#downloadModelButton.disabled = true;\n const span = this.#downloadModelButton.firstChild;\n span.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-alt-text-settings-downloading-model-button\"\n );\n\n await this.#mlManager.downloadModel(\"altText\");\n\n span.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-alt-text-settings-download-model-button\"\n );\n\n this.#createModelButton.disabled = false;\n this.#setPref(\"enableGuessAltText\", true);\n this.#mlManager.toggleService(\"altText\", true);\n this.#setPref(\"enableAltTextModelDownload\", true);\n this.#downloadModelButton.disabled = false;\n }\n\n this.#aiModelSettings.classList.toggle(\"download\", false);\n this.#createModelButton.setAttribute(\"aria-pressed\", true);\n }\n\n async #delete(isFromUI = false) {\n if (isFromUI) {\n await this.#mlManager.deleteModel(\"altText\");\n this.#setPref(\"enableGuessAltText\", false);\n this.#setPref(\"enableAltTextModelDownload\", false);\n }\n\n this.#aiModelSettings.classList.toggle(\"download\", true);\n this.#createModelButton.disabled = true;\n this.#createModelButton.setAttribute(\"aria-pressed\", false);\n }\n\n async open({ enableGuessAltText, enableNewAltTextWhenAddingImage }) {\n const { enableAltTextModelDownload } = this.#mlManager;\n this.#createModelButton.disabled = !enableAltTextModelDownload;\n this.#createModelButton.setAttribute(\n \"aria-pressed\",\n enableAltTextModelDownload && enableGuessAltText\n );\n this.#showAltTextDialogButton.setAttribute(\n \"aria-pressed\",\n enableNewAltTextWhenAddingImage\n );\n this.#aiModelSettings.classList.toggle(\n \"download\",\n !enableAltTextModelDownload\n );\n\n await this.#overlayManager.open(this.#dialog);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_displayed\",\n });\n }\n\n #togglePref(name, { target }) {\n const checked = target.getAttribute(\"aria-pressed\") !== \"true\";\n this.#setPref(name, checked);\n target.setAttribute(\"aria-pressed\", checked);\n return checked;\n }\n\n #setPref(name, value) {\n this.#eventBus.dispatch(\"setpreference\", {\n source: this,\n name,\n value,\n });\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n}\n\nexport { ImageAltTextSettings, NewAltTextManager };\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DOMSVGFactory } from \"pdfjs-lib\";\n\nclass AltTextManager {\n #clickAC = null;\n\n #currentEditor = null;\n\n #cancelButton;\n\n #dialog;\n\n #eventBus;\n\n #hasUsedPointer = false;\n\n #optionDescription;\n\n #optionDecorative;\n\n #overlayManager;\n\n #saveButton;\n\n #textarea;\n\n #uiManager;\n\n #previousAltText = null;\n\n #resizeAC = null;\n\n #svgElement = null;\n\n #rectElement = null;\n\n #container;\n\n #telemetryData = null;\n\n constructor(\n {\n dialog,\n optionDescription,\n optionDecorative,\n textarea,\n cancelButton,\n saveButton,\n },\n container,\n overlayManager,\n eventBus\n ) {\n this.#dialog = dialog;\n this.#optionDescription = optionDescription;\n this.#optionDecorative = optionDecorative;\n this.#textarea = textarea;\n this.#cancelButton = cancelButton;\n this.#saveButton = saveButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#container = container;\n\n const onUpdateUIState = this.#updateUIState.bind(this);\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n optionDescription.addEventListener(\"change\", onUpdateUIState);\n optionDecorative.addEventListener(\"change\", onUpdateUIState);\n\n this.#overlayManager.register(dialog);\n }\n\n #createSVGElement() {\n if (this.#svgElement) {\n return;\n }\n\n // We create a mask to add to the dialog backdrop: the idea is to have a\n // darken background everywhere except on the editor to clearly see the\n // picture to describe.\n\n const svgFactory = new DOMSVGFactory();\n const svg = (this.#svgElement = svgFactory.createElement(\"svg\"));\n svg.setAttribute(\"width\", \"0\");\n svg.setAttribute(\"height\", \"0\");\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const mask = svgFactory.createElement(\"mask\");\n defs.append(mask);\n mask.setAttribute(\"id\", \"alttext-manager-mask\");\n mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n let rect = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"white\");\n rect.setAttribute(\"width\", \"1\");\n rect.setAttribute(\"height\", \"1\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n\n rect = this.#rectElement = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"black\");\n this.#dialog.append(svg);\n }\n\n async editAltText(uiManager, editor) {\n if (this.#currentEditor || !editor) {\n return;\n }\n this.#createSVGElement();\n\n this.#hasUsedPointer = false;\n\n this.#clickAC = new AbortController();\n const clickOpts = { signal: this.#clickAC.signal },\n onClick = this.#onClick.bind(this);\n for (const element of [\n this.#optionDescription,\n this.#optionDecorative,\n this.#textarea,\n this.#saveButton,\n this.#cancelButton,\n ]) {\n element.addEventListener(\"click\", onClick, clickOpts);\n }\n\n const { altText, decorative } = editor.altTextData;\n if (decorative === true) {\n this.#optionDecorative.checked = true;\n this.#optionDescription.checked = false;\n } else {\n this.#optionDecorative.checked = false;\n this.#optionDescription.checked = true;\n }\n this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n this.#updateUIState();\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n\n this.#resizeAC = new AbortController();\n this.#eventBus._on(\"resize\", this.#setPosition.bind(this), {\n signal: this.#resizeAC.signal,\n });\n\n try {\n await this.#overlayManager.open(this.#dialog);\n this.#setPosition();\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #setPosition() {\n if (!this.#currentEditor) {\n return;\n }\n const dialog = this.#dialog;\n const { style } = dialog;\n const {\n x: containerX,\n y: containerY,\n width: containerW,\n height: containerH,\n } = this.#container.getBoundingClientRect();\n const { innerWidth: windowW, innerHeight: windowH } = window;\n const { width: dialogW, height: dialogH } = dialog.getBoundingClientRect();\n const { x, y, width, height } = this.#currentEditor.getClientDimensions();\n const MARGIN = 10;\n const isLTR = this.#uiManager.direction === \"ltr\";\n\n const xs = Math.max(x, containerX);\n const xe = Math.min(x + width, containerX + containerW);\n const ys = Math.max(y, containerY);\n const ye = Math.min(y + height, containerY + containerH);\n this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n\n let left = null;\n let top = Math.max(y, 0);\n top += Math.min(windowH - (top + dialogH), 0);\n\n if (isLTR) {\n // Prefer to position the dialog \"after\" (so on the right) the editor.\n if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n }\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n } else if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n }\n\n if (left === null) {\n top = null;\n left = Math.max(x, 0);\n left += Math.min(windowW - (left + dialogW), 0);\n if (y > dialogH + MARGIN) {\n top = y - dialogH - MARGIN;\n } else if (y + height + MARGIN + dialogH < windowH) {\n top = y + height + MARGIN;\n }\n }\n\n if (top !== null) {\n dialog.classList.add(\"positioned\");\n if (isLTR) {\n style.left = `${left}px`;\n } else {\n style.right = `${windowW - left - dialogW}px`;\n }\n style.top = `${top}px`;\n } else {\n dialog.classList.remove(\"positioned\");\n style.left = \"\";\n style.top = \"\";\n }\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n\n #close() {\n this.#currentEditor._reportTelemetry(\n this.#telemetryData || {\n action: \"alt_text_cancel\",\n alt_text_keyboard: !this.#hasUsedPointer,\n }\n );\n this.#telemetryData = null;\n\n this.#removeOnClickListeners();\n this.#uiManager?.addEditListeners();\n this.#resizeAC?.abort();\n this.#resizeAC = null;\n this.#currentEditor.altTextFinish();\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #updateUIState() {\n this.#textarea.disabled = this.#optionDecorative.checked;\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n const decorative = this.#optionDecorative.checked;\n this.#currentEditor.altTextData = {\n altText,\n decorative,\n };\n this.#telemetryData = {\n action: \"alt_text_save\",\n alt_text_description: !!altText,\n alt_text_edit:\n !!this.#previousAltText && this.#previousAltText !== altText,\n alt_text_decorative: decorative,\n alt_text_keyboard: !this.#hasUsedPointer,\n };\n this.#finish();\n }\n\n #onClick(evt) {\n if (evt.detail === 0) {\n return; // The keyboard was used.\n }\n this.#hasUsedPointer = true;\n this.#removeOnClickListeners();\n }\n\n #removeOnClickListeners() {\n this.#clickAC?.abort();\n this.#clickAC = null;\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n this.#svgElement?.remove();\n this.#svgElement = this.#rectElement = null;\n }\n}\n\nexport { AltTextManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorParamsType } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} AnnotationEditorParamsOptions\n * @property {HTMLInputElement} editorFreeTextFontSize\n * @property {HTMLInputElement} editorFreeTextColor\n * @property {HTMLInputElement} editorInkColor\n * @property {HTMLInputElement} editorInkThickness\n * @property {HTMLInputElement} editorInkOpacity\n * @property {HTMLButtonElement} editorStampAddImage\n * @property {HTMLInputElement} editorFreeHighlightThickness\n * @property {HTMLButtonElement} editorHighlightShowAll\n * @property {HTMLButtonElement} editorSignatureAddSignature\n */\n\nclass AnnotationEditorParams {\n /**\n * @param {AnnotationEditorParamsOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.eventBus = eventBus;\n this.#bindListeners(options);\n }\n\n /**\n * @param {AnnotationEditorParamsOptions} options\n */\n #bindListeners({\n editorFreeTextFontSize,\n editorFreeTextColor,\n editorInkColor,\n editorInkThickness,\n editorInkOpacity,\n editorStampAddImage,\n editorFreeHighlightThickness,\n editorHighlightShowAll,\n editorSignatureAddSignature,\n }) {\n const { eventBus } = this;\n\n const dispatchEvent = (typeStr, value) => {\n eventBus.dispatch(\"switchannotationeditorparams\", {\n source: this,\n type: AnnotationEditorParamsType[typeStr],\n value,\n });\n };\n editorFreeTextFontSize.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n });\n editorFreeTextColor.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_COLOR\", this.value);\n });\n editorInkColor.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_COLOR\", this.value);\n });\n editorInkThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n });\n editorInkOpacity.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n });\n editorStampAddImage.addEventListener(\"click\", () => {\n eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: { action: \"pdfjs.image.add_image_click\" },\n },\n });\n dispatchEvent(\"CREATE\");\n });\n editorFreeHighlightThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"HIGHLIGHT_THICKNESS\", this.valueAsNumber);\n });\n editorHighlightShowAll.addEventListener(\"click\", function () {\n const checked = this.getAttribute(\"aria-pressed\") === \"true\";\n this.setAttribute(\"aria-pressed\", !checked);\n dispatchEvent(\"HIGHLIGHT_SHOW_ALL\", !checked);\n });\n editorSignatureAddSignature.addEventListener(\"click\", () => {\n dispatchEvent(\"CREATE\");\n });\n\n eventBus._on(\"annotationeditorparamschanged\", evt => {\n for (const [type, value] of evt.details) {\n switch (type) {\n case AnnotationEditorParamsType.FREETEXT_SIZE:\n editorFreeTextFontSize.value = value;\n break;\n case AnnotationEditorParamsType.FREETEXT_COLOR:\n editorFreeTextColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_COLOR:\n editorInkColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_THICKNESS:\n editorInkThickness.value = value;\n break;\n case AnnotationEditorParamsType.INK_OPACITY:\n editorInkOpacity.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:\n eventBus.dispatch(\"mainhighlightcolorpickerupdatecolor\", {\n source: this,\n value,\n });\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n editorFreeHighlightThickness.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_FREE:\n editorFreeHighlightThickness.disabled = !value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n editorHighlightShowAll.setAttribute(\"aria-pressed\", value);\n break;\n }\n }\n });\n }\n}\n\nexport { AnnotationEditorParams };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Used to compare floats: there is no exact equality due to rounding errors.\nconst PRECISION = 1e-1;\n\nclass CaretBrowsingMode {\n #mainContainer;\n\n #toolBarHeight = 0;\n\n #viewerContainer;\n\n constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) {\n this.#mainContainer = mainContainer;\n this.#viewerContainer = viewerContainer;\n\n if (!toolbarContainer) {\n return;\n }\n this.#toolBarHeight = toolbarContainer.getBoundingClientRect().height;\n\n const toolbarObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.target === toolbarContainer) {\n this.#toolBarHeight = Math.floor(entry.borderBoxSize[0].blockSize);\n break;\n }\n }\n });\n toolbarObserver.observe(toolbarContainer);\n\n abortSignal.addEventListener(\"abort\", () => toolbarObserver.disconnect(), {\n once: true,\n });\n }\n\n /**\n * Return true if the two rectangles are on the same line.\n * @param {DOMRect} rect1\n * @param {DOMRect} rect2\n * @returns {boolean}\n */\n #isOnSameLine(rect1, rect2) {\n const top1 = rect1.y;\n const bot1 = rect1.bottom;\n const mid1 = rect1.y + rect1.height / 2;\n\n const top2 = rect2.y;\n const bot2 = rect2.bottom;\n const mid2 = rect2.y + rect2.height / 2;\n\n return (top1 <= mid2 && mid2 <= bot1) || (top2 <= mid1 && mid1 <= bot2);\n }\n\n /**\n * Return `true` if the rectangle is:\n * - under the caret when `isUp === false`.\n * - over the caret when `isUp === true`.\n * @param {DOMRect} rect\n * @param {number} x\n * @param {number} y\n * @param {boolean} isUp\n * @returns {boolean}\n */\n #isUnderOver(rect, x, y, isUp) {\n const midY = rect.y + rect.height / 2;\n return (\n (isUp ? y >= midY : y <= midY) &&\n rect.x - PRECISION <= x &&\n x <= rect.right + PRECISION\n );\n }\n\n /**\n * Check if the rectangle is visible.\n * @param {DOMRect} rect\n * @returns {boolean}\n */\n #isVisible(rect) {\n return (\n rect.top >= this.#toolBarHeight &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n\n /**\n * Get the position of the caret.\n * @param {Selection} selection\n * @param {boolean} isUp\n * @returns {Array}\n */\n #getCaretPosition(selection, isUp) {\n const { focusNode, focusOffset } = selection;\n const range = document.createRange();\n range.setStart(focusNode, focusOffset);\n range.setEnd(focusNode, focusOffset);\n const rect = range.getBoundingClientRect();\n\n return [rect.x, isUp ? rect.top : rect.bottom];\n }\n\n static #caretPositionFromPoint(x, y) {\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n !document.caretPositionFromPoint\n ) {\n const { startContainer: offsetNode, startOffset: offset } =\n document.caretRangeFromPoint(x, y);\n return { offsetNode, offset };\n }\n return document.caretPositionFromPoint(x, y);\n }\n\n #setCaretPositionHelper(selection, caretX, select, element, rect) {\n rect ||= element.getBoundingClientRect();\n if (caretX <= rect.x + PRECISION) {\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (rect.right - PRECISION <= caretX) {\n const { lastChild } = element;\n if (select) {\n selection.extend(lastChild, lastChild.length);\n } else {\n selection.setPosition(lastChild, lastChild.length);\n }\n return;\n }\n\n const midY = rect.y + rect.height / 2;\n let caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n let parentElement = caretPosition.offsetNode?.parentElement;\n if (parentElement && parentElement !== element) {\n // There is an element on top of the one in the text layer, so we\n // need to hide all the elements (except the one in the text layer)\n // at this position in order to get the correct caret position.\n const elementsAtPoint = document.elementsFromPoint(caretX, midY);\n const savedVisibilities = [];\n for (const el of elementsAtPoint) {\n if (el === element) {\n break;\n }\n const { style } = el;\n savedVisibilities.push([el, style.visibility]);\n style.visibility = \"hidden\";\n }\n caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n parentElement = caretPosition.offsetNode?.parentElement;\n for (const [el, visibility] of savedVisibilities) {\n el.style.visibility = visibility;\n }\n }\n if (parentElement !== element) {\n // The element targeted by caretPositionFromPoint isn't in the text\n // layer.\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (select) {\n selection.extend(caretPosition.offsetNode, caretPosition.offset);\n } else {\n selection.setPosition(caretPosition.offsetNode, caretPosition.offset);\n }\n }\n\n /**\n * Set the caret position or extend the selection (it depends on the select\n * parameter).\n * @param {boolean} select\n * @param {Selection} selection\n * @param {Element} newLineElement\n * @param {DOMRect} newLineElementRect\n * @param {number} caretX\n */\n #setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n ) {\n if (this.#isVisible(newLineElementRect)) {\n this.#setCaretPositionHelper(\n selection,\n caretX,\n select,\n newLineElement,\n newLineElementRect\n );\n return;\n }\n this.#mainContainer.addEventListener(\n \"scrollend\",\n this.#setCaretPositionHelper.bind(\n this,\n selection,\n caretX,\n select,\n newLineElement,\n null\n ),\n { once: true }\n );\n newLineElement.scrollIntoView();\n }\n\n /**\n * Get the node on the next page.\n * @param {Element} textLayer\n * @param {boolean} isUp\n * @returns {Node}\n */\n #getNodeOnNextPage(textLayer, isUp) {\n while (true) {\n const page = textLayer.closest(\".page\");\n const pageNumber = parseInt(page.getAttribute(\"data-page-number\"));\n const nextPage = isUp ? pageNumber - 1 : pageNumber + 1;\n textLayer = this.#viewerContainer.querySelector(\n `.page[data-page-number=\"${nextPage}\"] .textLayer`\n );\n if (!textLayer) {\n return null;\n }\n const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT);\n const node = isUp ? walker.lastChild() : walker.firstChild();\n if (node) {\n return node;\n }\n }\n }\n\n /**\n * Move the caret in the given direction.\n * @param {boolean} isUp\n * @param {boolean} select\n */\n moveCaret(isUp, select) {\n const selection = document.getSelection();\n if (selection.rangeCount === 0) {\n return;\n }\n const { focusNode } = selection;\n const focusElement =\n focusNode.nodeType !== Node.ELEMENT_NODE\n ? focusNode.parentElement\n : focusNode;\n const root = focusElement.closest(\".textLayer\");\n if (!root) {\n return;\n }\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n walker.currentNode = focusNode;\n\n // Move to the next element which is not on the same line as the focus\n // element.\n const focusRect = focusElement.getBoundingClientRect();\n let newLineElement = null;\n const nodeIterator = (\n isUp ? walker.previousSibling : walker.nextSibling\n ).bind(walker);\n while (nodeIterator()) {\n const element = walker.currentNode.parentElement;\n if (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) {\n newLineElement = element;\n break;\n }\n }\n\n if (!newLineElement) {\n // Need to find the next line on the next page.\n const node = this.#getNodeOnNextPage(root, isUp);\n if (!node) {\n return;\n }\n if (select) {\n const lastNode =\n (isUp ? walker.firstChild() : walker.lastChild()) || focusNode;\n selection.extend(lastNode, isUp ? 0 : lastNode.length);\n const range = document.createRange();\n range.setStart(node, isUp ? node.length : 0);\n range.setEnd(node, isUp ? node.length : 0);\n selection.addRange(range);\n return;\n }\n const [caretX] = this.#getCaretPosition(selection, isUp);\n const { parentElement } = node;\n this.#setCaretPosition(\n select,\n selection,\n parentElement,\n parentElement.getBoundingClientRect(),\n caretX\n );\n return;\n }\n\n // We've a candidate for the next line now we want to find the first element\n // which is under/over the caret.\n const [caretX, caretY] = this.#getCaretPosition(selection, isUp);\n const newLineElementRect = newLineElement.getBoundingClientRect();\n\n // Maybe the element on the new line is a valid candidate.\n if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) {\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n return;\n }\n\n while (nodeIterator()) {\n // Search an element on the same line as newLineElement\n // which could be under/over the caret.\n const element = walker.currentNode.parentElement;\n const elementRect = element.getBoundingClientRect();\n if (!this.#isOnSameLine(newLineElementRect, elementRect)) {\n break;\n }\n if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) {\n // We found the element.\n this.#setCaretPosition(select, selection, element, elementRect, caretX);\n return;\n }\n }\n\n // No element has been found so just put the caret on the element on the new\n // line.\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n }\n}\n\nexport { CaretBrowsingMode };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n\nimport { createValidAbsoluteUrl, isPdfFile } from \"pdfjs-lib\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"CHROME || GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/download_manager\" shall not be used ' +\n \"outside CHROME and GENERIC builds.\"\n );\n}\n\nfunction download(blobUrl, filename) {\n const a = document.createElement(\"a\");\n if (!a.click) {\n throw new Error('DownloadManager: \"a.click()\" is not supported.');\n }\n a.href = blobUrl;\n a.target = \"_parent\";\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if (\"download\" in a) {\n a.download = filename;\n }\n // must be in the document for recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).append(a);\n a.click();\n a.remove();\n}\n\n/**\n * @implements {IDownloadManager}\n */\nclass DownloadManager {\n #openBlobUrls = new WeakMap();\n\n downloadData(data, filename, contentType) {\n const blobUrl = URL.createObjectURL(\n new Blob([data], { type: contentType })\n );\n download(blobUrl, filename);\n }\n\n /**\n * @returns {boolean} Indicating if the data was opened.\n */\n openOrDownloadData(data, filename, dest = null) {\n const isPdfData = isPdfFile(filename);\n const contentType = isPdfData ? \"application/pdf\" : \"\";\n\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"COMPONENTS\")) &&\n isPdfData\n ) {\n let blobUrl = this.#openBlobUrls.get(data);\n if (!blobUrl) {\n blobUrl = URL.createObjectURL(new Blob([data], { type: contentType }));\n this.#openBlobUrls.set(data, blobUrl);\n }\n let viewerUrl;\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // The current URL is the viewer, let's use it and append the file.\n viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n } else if (PDFJSDev.test(\"CHROME\")) {\n // In the Chrome extension, the URL is rewritten using the history API\n // in viewer.js, so an absolute URL must be generated.\n viewerUrl =\n // eslint-disable-next-line no-undef\n chrome.runtime.getURL(\"/content/web/viewer.html\") +\n \"?file=\" +\n encodeURIComponent(blobUrl + \"#\" + filename);\n }\n if (dest) {\n viewerUrl += `#${escape(dest)}`;\n }\n\n try {\n window.open(viewerUrl);\n return true;\n } catch (ex) {\n console.error(\"openOrDownloadData:\", ex);\n // Release the `blobUrl`, since opening it failed, and fallback to\n // downloading the PDF file.\n URL.revokeObjectURL(blobUrl);\n this.#openBlobUrls.delete(data);\n }\n }\n\n this.downloadData(data, filename, contentType);\n return false;\n }\n\n download(data, url, filename) {\n let blobUrl;\n if (data) {\n blobUrl = URL.createObjectURL(\n new Blob([data], { type: \"application/pdf\" })\n );\n } else {\n if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n console.error(`download - not a valid URL: ${url}`);\n return;\n }\n blobUrl = url + \"#pdfjs.action=download\";\n }\n download(blobUrl, filename);\n }\n}\n\nexport { DownloadManager };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"pdfjs-lib\";\n\nclass EditorUndoBar {\n #closeButton = null;\n\n #container;\n\n #eventBus = null;\n\n #focusTimeout = null;\n\n #initController = null;\n\n isOpen = false;\n\n #message;\n\n #showController = null;\n\n #undoButton;\n\n static #l10nMessages = Object.freeze({\n highlight: \"pdfjs-editor-undo-bar-message-highlight\",\n freetext: \"pdfjs-editor-undo-bar-message-freetext\",\n stamp: \"pdfjs-editor-undo-bar-message-stamp\",\n ink: \"pdfjs-editor-undo-bar-message-ink\",\n signature: \"pdfjs-editor-undo-bar-message-signature\",\n _multiple: \"pdfjs-editor-undo-bar-message-multiple\",\n });\n\n constructor({ container, message, undoButton, closeButton }, eventBus) {\n this.#container = container;\n this.#message = message;\n this.#undoButton = undoButton;\n this.#closeButton = closeButton;\n this.#eventBus = eventBus;\n }\n\n destroy() {\n this.#initController?.abort();\n this.#initController = null;\n\n this.hide();\n }\n\n show(undoAction, messageData) {\n if (!this.#initController) {\n this.#initController = new AbortController();\n const opts = { signal: this.#initController.signal };\n const boundHide = this.hide.bind(this);\n\n this.#container.addEventListener(\"contextmenu\", noContextMenu, opts);\n this.#closeButton.addEventListener(\"click\", boundHide, opts);\n this.#eventBus._on(\"beforeprint\", boundHide, opts);\n this.#eventBus._on(\"download\", boundHide, opts);\n }\n\n this.hide();\n\n if (typeof messageData === \"string\") {\n this.#message.setAttribute(\n \"data-l10n-id\",\n EditorUndoBar.#l10nMessages[messageData]\n );\n } else {\n this.#message.setAttribute(\n \"data-l10n-id\",\n EditorUndoBar.#l10nMessages._multiple\n );\n this.#message.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ count: messageData })\n );\n }\n this.isOpen = true;\n this.#container.hidden = false;\n\n this.#showController = new AbortController();\n\n this.#undoButton.addEventListener(\n \"click\",\n () => {\n undoAction();\n this.hide();\n },\n { signal: this.#showController.signal }\n );\n\n // Without the setTimeout, VoiceOver will read out the document title\n // instead of the popup label.\n this.#focusTimeout = setTimeout(() => {\n this.#container.focus();\n this.#focusTimeout = null;\n }, 100);\n }\n\n hide() {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n this.#container.hidden = true;\n\n this.#showController?.abort();\n this.#showController = null;\n\n if (this.#focusTimeout) {\n clearTimeout(this.#focusTimeout);\n this.#focusTimeout = null;\n }\n }\n}\n\nexport { EditorUndoBar };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass OverlayManager {\n #overlays = new WeakMap();\n\n #active = null;\n\n get active() {\n return this.#active;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @param {boolean} [canForceClose] - Indicates if opening the overlay closes\n * an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n */\n async register(dialog, canForceClose = false) {\n if (typeof dialog !== \"object\") {\n throw new Error(\"Not enough parameters.\");\n } else if (this.#overlays.has(dialog)) {\n throw new Error(\"The overlay is already registered.\");\n }\n this.#overlays.set(dialog, { canForceClose });\n\n dialog.addEventListener(\"cancel\", ({ target }) => {\n if (this.#active === target) {\n this.#active = null;\n }\n });\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n async open(dialog) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this.#active) {\n if (this.#active === dialog) {\n throw new Error(\"The overlay is already active.\");\n } else if (this.#overlays.get(dialog).canForceClose) {\n await this.close();\n } else {\n throw new Error(\"Another overlay is currently active.\");\n }\n }\n this.#active = dialog;\n dialog.showModal();\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async close(dialog = this.#active) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (!this.#active) {\n throw new Error(\"The overlay is currently not active.\");\n } else if (this.#active !== dialog) {\n throw new Error(\"Another overlay is currently active.\");\n }\n dialog.close();\n this.#active = null;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async closeIfActive(dialog) {\n if (this.#active === dialog) {\n await this.close(dialog);\n }\n }\n}\n\nexport { OverlayManager };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./overlay_manager.js\").OverlayManager} OverlayManager */\n\nimport { PasswordResponses } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PasswordPromptOptions\n * @property {HTMLDialogElement} dialog - The overlay's DOM element.\n * @property {HTMLParagraphElement} label - Label containing instructions for\n * entering the password.\n * @property {HTMLInputElement} input - Input field for entering the password.\n * @property {HTMLButtonElement} submitButton - Button for submitting the\n * password.\n * @property {HTMLButtonElement} cancelButton - Button for cancelling password\n * entry.\n */\n\nclass PasswordPrompt {\n #activeCapability = null;\n\n #updateCallback = null;\n\n #reason = null;\n\n /**\n * @param {PasswordPromptOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {boolean} [isViewerEmbedded] - If the viewer is embedded, in e.g.\n * an