blocks inside this element; for each one, look for things of the form `= ...`.
+ let codeblocks = el.querySelectorAll("code");
+ for (let index = 0; index < codeblocks.length; index++) {
+ let codeblock = codeblocks.item(index);
+ // Skip code inside of pre elements if not explicitly enabled.
+ if (codeblock.parentElement &&
+ codeblock.parentElement.nodeName.toLowerCase() == "pre" &&
+ !this.settings.inlineQueriesInCodeblocks)
+ continue;
+ let text = codeblock.innerText.trim();
+ if (this.settings.inlineJsQueryPrefix.length > 0 && text.startsWith(this.settings.inlineJsQueryPrefix)) {
+ let code = text.substring(this.settings.inlineJsQueryPrefix.length).trim();
+ if (code.length == 0)
+ continue;
+ component.addChild(new DataviewInlineJSRenderer(this.api, code, el, codeblock, sourcePath));
+ }
+ else if (this.settings.inlineQueryPrefix.length > 0 && text.startsWith(this.settings.inlineQueryPrefix)) {
+ let potentialField = text.substring(this.settings.inlineQueryPrefix.length).trim();
+ if (potentialField.length == 0)
+ continue;
+ let field = tryOrPropagate(() => parseField(potentialField));
+ if (!field.successful) {
+ let errorBlock = el.createEl("div");
+ renderErrorPre(errorBlock, `Dataview (inline field '${potentialField}'): ${field.error}`);
+ }
+ else {
+ let fieldValue = field.value;
+ component.addChild(new DataviewInlineRenderer(fieldValue, text, el, codeblock, this.index, sourcePath, this.settings, this.app));
+ }
+ }
+ }
+ }
+ /** Update plugin settings. */
+ async updateSettings(settings) {
+ Object.assign(this.settings, settings);
+ this.updateRefreshSettings();
+ await this.saveData(this.settings);
+ }
+ /** @deprecated Call the given callback when the dataview API has initialized. */
+ withApi(callback) {
+ callback(this.api);
+ }
+ /**
+ * Create an API element localized to the given path, with lifecycle management managed by the given component.
+ * The API will output results to the given HTML element.
+ */
+ localApi(path, component, el) {
+ return new DataviewInlineApi(this.api, component, el, path);
+ }
+}
+/** All of the dataview settings in a single, nice tab. */
+class GeneralSettingsTab extends obsidian.PluginSettingTab {
+ plugin;
+ constructor(app, plugin) {
+ super(app, plugin);
+ this.plugin = plugin;
+ }
+ display() {
+ this.containerEl.empty();
+ new obsidian.Setting(this.containerEl)
+ .setName("Enable inline queries")
+ .setDesc("Enable or disable executing regular inline Dataview queries.")
+ .addToggle(toggle => toggle
+ .setValue(this.plugin.settings.enableInlineDataview)
+ .onChange(async (value) => await this.plugin.updateSettings({ enableInlineDataview: value })));
+ new obsidian.Setting(this.containerEl)
+ .setName("Enable JavaScript queries")
+ .setDesc("Enable or disable executing DataviewJS queries.")
+ .addToggle(toggle => toggle
+ .setValue(this.plugin.settings.enableDataviewJs)
+ .onChange(async (value) => await this.plugin.updateSettings({ enableDataviewJs: value })));
+ new obsidian.Setting(this.containerEl)
+ .setName("Enable inline JavaScript queries")
+ .setDesc("Enable or disable executing inline DataviewJS queries. Requires that DataviewJS queries are enabled.")
+ .addToggle(toggle => toggle
+ .setValue(this.plugin.settings.enableInlineDataviewJs)
+ .onChange(async (value) => await this.plugin.updateSettings({ enableInlineDataviewJs: value })));
+ new obsidian.Setting(this.containerEl)
+ .setName("Enable inline field highlighting in reading view")
+ .setDesc("Enables or disables visual highlighting / pretty rendering for inline fields in reading view.")
+ .addToggle(toggle => toggle
+ .setValue(this.plugin.settings.prettyRenderInlineFields)
+ .onChange(async (value) => await this.plugin.updateSettings({ prettyRenderInlineFields: value })));
+ new obsidian.Setting(this.containerEl)
+ .setName("Enable inline field highlighting in Live Preview")
+ .setDesc("Enables or disables visual highlighting / pretty rendering for inline fields in Live Preview.")
+ .addToggle(toggle => toggle.setValue(this.plugin.settings.prettyRenderInlineFieldsInLivePreview).onChange(async (value) => {
+ await this.plugin.updateSettings({ prettyRenderInlineFieldsInLivePreview: value });
+ this.plugin.updateEditorExtensions();
+ }));
+ new obsidian.Setting(this.containerEl).setName("Codeblocks").setHeading();
+ new obsidian.Setting(this.containerEl)
+ .setName("DataviewJS keyword")
+ .setDesc("Keyword for DataviewJS blocks. Defaults to 'dataviewjs'. Reload required for changes to take effect.")
+ .addText(text => text
+ .setPlaceholder("dataviewjs")
+ .setValue(this.plugin.settings.dataviewJsKeyword)
+ .onChange(async (value) => {
+ if (value.length == 0)
+ return;
+ this.plugin.unregisterDataviewjsCodeHighlighting();
+ await this.plugin.updateSettings({ dataviewJsKeyword: value });
+ this.plugin.registerDataviewjsCodeHighlighting();
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Inline query prefix")
+ .setDesc("The prefix to inline queries (to mark them as Dataview queries). Defaults to '='.")
+ .addText(text => text
+ .setPlaceholder("=")
+ .setValue(this.plugin.settings.inlineQueryPrefix)
+ .onChange(async (value) => {
+ if (value.length == 0)
+ return;
+ await this.plugin.updateSettings({ inlineQueryPrefix: value });
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("JavaScript inline query prefix")
+ .setDesc("The prefix to JavaScript inline queries (to mark them as DataviewJS queries). Defaults to '$='.")
+ .addText(text => text
+ .setPlaceholder("$=")
+ .setValue(this.plugin.settings.inlineJsQueryPrefix)
+ .onChange(async (value) => {
+ if (value.length == 0)
+ return;
+ await this.plugin.updateSettings({ inlineJsQueryPrefix: value });
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Code block inline queries")
+ .setDesc("If enabled, inline queries will also be evaluated inside full code blocks.")
+ .addToggle(toggle => toggle
+ .setValue(this.plugin.settings.inlineQueriesInCodeblocks)
+ .onChange(async (value) => await this.plugin.updateSettings({ inlineQueriesInCodeblocks: value })));
+ new obsidian.Setting(this.containerEl).setName("View").setHeading();
+ new obsidian.Setting(this.containerEl)
+ .setName("Display result count")
+ .setDesc("If toggled off, the small number in the result header of TASK and TABLE queries will be hidden.")
+ .addToggle(toggle => toggle.setValue(this.plugin.settings.showResultCount).onChange(async (value) => {
+ await this.plugin.updateSettings({ showResultCount: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Warn on empty result")
+ .setDesc("If set, queries which return 0 results will render a warning message.")
+ .addToggle(toggle => toggle.setValue(this.plugin.settings.warnOnEmptyResult).onChange(async (value) => {
+ await this.plugin.updateSettings({ warnOnEmptyResult: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Render null as")
+ .setDesc("What null/non-existent should show up as in tables, by default. This supports Markdown notation.")
+ .addText(text => text
+ .setPlaceholder("-")
+ .setValue(this.plugin.settings.renderNullAs)
+ .onChange(async (value) => {
+ await this.plugin.updateSettings({ renderNullAs: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Automatic view refreshing")
+ .setDesc("If enabled, views will automatically refresh when files in your vault change; this can negatively affect" +
+ " some functionality like embeds in views, so turn it off if such functionality is not working.")
+ .addToggle(toggle => toggle.setValue(this.plugin.settings.refreshEnabled).onChange(async (value) => {
+ await this.plugin.updateSettings({ refreshEnabled: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Refresh interval")
+ .setDesc("How long to wait (in milliseconds) for files to stop changing before updating views.")
+ .addText(text => text
+ .setPlaceholder("500")
+ .setValue("" + this.plugin.settings.refreshInterval)
+ .onChange(async (value) => {
+ let parsed = parseInt(value);
+ if (isNaN(parsed))
+ return;
+ parsed = parsed < 100 ? 100 : parsed;
+ await this.plugin.updateSettings({ refreshInterval: parsed });
+ }));
+ let dformat = new obsidian.Setting(this.containerEl)
+ .setName("Date format")
+ .setDesc("The default date format (see Luxon date format options)." +
+ " Currently: " +
+ DateTime.now().toFormat(this.plugin.settings.defaultDateFormat, { locale: currentLocale() }))
+ .addText(text => text
+ .setPlaceholder(DEFAULT_QUERY_SETTINGS.defaultDateFormat)
+ .setValue(this.plugin.settings.defaultDateFormat)
+ .onChange(async (value) => {
+ dformat.setDesc("The default date format (see Luxon date format options)." +
+ " Currently: " +
+ DateTime.now().toFormat(value, { locale: currentLocale() }));
+ await this.plugin.updateSettings({ defaultDateFormat: value });
+ this.plugin.index.touch();
+ }));
+ let dtformat = new obsidian.Setting(this.containerEl)
+ .setName("Date + time format")
+ .setDesc("The default date and time format (see Luxon date format options)." +
+ " Currently: " +
+ DateTime.now().toFormat(this.plugin.settings.defaultDateTimeFormat, { locale: currentLocale() }))
+ .addText(text => text
+ .setPlaceholder(DEFAULT_QUERY_SETTINGS.defaultDateTimeFormat)
+ .setValue(this.plugin.settings.defaultDateTimeFormat)
+ .onChange(async (value) => {
+ dtformat.setDesc("The default date and time format (see Luxon date format options)." +
+ " Currently: " +
+ DateTime.now().toFormat(value, { locale: currentLocale() }));
+ await this.plugin.updateSettings({ defaultDateTimeFormat: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl).setName("Tables").setHeading();
+ new obsidian.Setting(this.containerEl)
+ .setName("Primary column name")
+ .setDesc("The name of the default ID column in tables; this is the auto-generated first column that links to the source file.")
+ .addText(text => text
+ .setPlaceholder("File")
+ .setValue(this.plugin.settings.tableIdColumnName)
+ .onChange(async (value) => {
+ await this.plugin.updateSettings({ tableIdColumnName: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl)
+ .setName("Grouped column name")
+ .setDesc("The name of the default ID column in tables, when the table is on grouped data; this is the auto-generated first column" +
+ "that links to the source file/group.")
+ .addText(text => text
+ .setPlaceholder("Group")
+ .setValue(this.plugin.settings.tableGroupColumnName)
+ .onChange(async (value) => {
+ await this.plugin.updateSettings({ tableGroupColumnName: value });
+ this.plugin.index.touch();
+ }));
+ new obsidian.Setting(this.containerEl).setName("Tasks").setHeading();
+ let taskCompletionSubsettingsEnabled = this.plugin.settings.taskCompletionTracking;
+ let taskCompletionInlineSubsettingsEnabled = taskCompletionSubsettingsEnabled && !this.plugin.settings.taskCompletionUseEmojiShorthand;
+ new obsidian.Setting(this.containerEl)
+ .setName("Automatic task completion tracking")
+ .setDesc(createFragment(el => {
+ el.appendText("If enabled, Dataview will automatically append tasks with their completion date when they are checked in Dataview views.");
+ el.createEl("br");
+ el.appendText("Example with default field name and date format: - [x] my task [completion:: 2022-01-01]");
+ }))
+ .addToggle(toggle => toggle.setValue(this.plugin.settings.taskCompletionTracking).onChange(async (value) => {
+ await this.plugin.updateSettings({ taskCompletionTracking: value });
+ taskCompletionSubsettingsEnabled = value;
+ this.display();
+ }));
+ let taskEmojiShorthand = new obsidian.Setting(this.containerEl)
+ .setName("Use emoji shorthand for completion")
+ .setDisabled(!taskCompletionSubsettingsEnabled);
+ if (taskCompletionSubsettingsEnabled)
+ taskEmojiShorthand
+ .setDesc(createFragment(el => {
+ el.appendText('If enabled, will use emoji shorthand instead of inline field formatting to fill out implicit task field "completion".');
+ el.createEl("br");
+ el.appendText("Example: - [x] my task ✅ 2022-01-01");
+ el.createEl("br");
+ el.appendText("Disable this to customize the completion date format or field name, or to use Dataview inline field formatting.");
+ el.createEl("br");
+ el.appendText('Only available when "automatic task completion tracking" is enabled.');
+ }))
+ .addToggle(toggle => toggle.setValue(this.plugin.settings.taskCompletionUseEmojiShorthand).onChange(async (value) => {
+ await this.plugin.updateSettings({ taskCompletionUseEmojiShorthand: value });
+ taskCompletionInlineSubsettingsEnabled = taskCompletionSubsettingsEnabled && !value;
+ this.display();
+ }));
+ else
+ taskEmojiShorthand.setDesc('Only available when "automatic task completion tracking" is enabled.');
+ let taskFieldName = new obsidian.Setting(this.containerEl)
+ .setName("Completion field name")
+ .setDisabled(!taskCompletionInlineSubsettingsEnabled);
+ if (taskCompletionInlineSubsettingsEnabled)
+ taskFieldName
+ .setDesc(createFragment(el => {
+ el.appendText("Text used as inline field key for task completion date when toggling a task's checkbox in a Dataview view.");
+ el.createEl("br");
+ el.appendText('Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.');
+ }))
+ .addText(text => text.setValue(this.plugin.settings.taskCompletionText).onChange(async (value) => {
+ await this.plugin.updateSettings({ taskCompletionText: value.trim() });
+ }));
+ else
+ taskFieldName.setDesc('Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.');
+ let taskDtFormat = new obsidian.Setting(this.containerEl)
+ .setName("Completion date format")
+ .setDisabled(!taskCompletionInlineSubsettingsEnabled);
+ if (taskCompletionInlineSubsettingsEnabled) {
+ let descTextLines = [
+ "Date-time format for task completion date when toggling a task's checkbox in a Dataview view (see Luxon date format options).",
+ 'Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.',
+ "Currently: ",
+ ];
+ taskDtFormat
+ .setDesc(createFragment(el => {
+ el.appendText(descTextLines[0]);
+ el.createEl("br");
+ el.appendText(descTextLines[1]);
+ el.createEl("br");
+ el.appendText(descTextLines[2] +
+ DateTime.now().toFormat(this.plugin.settings.taskCompletionDateFormat, {
+ locale: currentLocale(),
+ }));
+ }))
+ .addText(text => text
+ .setPlaceholder(DEFAULT_SETTINGS.taskCompletionDateFormat)
+ .setValue(this.plugin.settings.taskCompletionDateFormat)
+ .onChange(async (value) => {
+ taskDtFormat.setDesc(createFragment(el => {
+ el.appendText(descTextLines[0]);
+ el.createEl("br");
+ el.appendText(descTextLines[1]);
+ el.createEl("br");
+ el.appendText(descTextLines[2] +
+ DateTime.now().toFormat(value.trim(), { locale: currentLocale() }));
+ }));
+ await this.plugin.updateSettings({ taskCompletionDateFormat: value.trim() });
+ this.plugin.index.touch();
+ }));
+ }
+ else {
+ taskDtFormat.setDesc('Only available when "automatic task completion tracking" is enabled and "use emoji shorthand for completion" is disabled.');
+ }
+ new obsidian.Setting(this.containerEl)
+ .setName("Recursive sub-task completion")
+ // I gotta word this better :/
+ .setDesc("If enabled, completing a task in a Dataview will automatically complete its subtasks too.")
+ .addToggle(toggle => toggle
+ .setValue(this.plugin.settings.recursiveSubTaskCompletion)
+ .onChange(async (value) => await this.plugin.updateSettings({ recursiveSubTaskCompletion: value })));
+ }
+}
+
+module.exports = DataviewPlugin;
+
+
+/* nosourcemap */
\ No newline at end of file
diff --git a/.obsidian/plugins/dataview/manifest.json b/.obsidian/plugins/dataview/manifest.json
new file mode 100644
index 0000000..926b2a6
--- /dev/null
+++ b/.obsidian/plugins/dataview/manifest.json
@@ -0,0 +1,11 @@
+{
+ "id": "dataview",
+ "name": "Dataview",
+ "version": "0.5.68",
+ "minAppVersion": "0.13.11",
+ "description": "Complex data views for the data-obsessed.",
+ "author": "Michael Brenan ",
+ "authorUrl": "https://github.com/blacksmithgu",
+ "helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
+ "isDesktopOnly": false
+}
diff --git a/.obsidian/plugins/dataview/styles.css b/.obsidian/plugins/dataview/styles.css
new file mode 100644
index 0000000..618821a
--- /dev/null
+++ b/.obsidian/plugins/dataview/styles.css
@@ -0,0 +1,141 @@
+.block-language-dataview {
+ overflow-y: auto;
+}
+
+/*****************/
+/** Table Views **/
+/*****************/
+
+/* List View Default Styling; rendered internally as a table. */
+.table-view-table {
+ width: 100%;
+}
+
+.table-view-table > thead > tr, .table-view-table > tbody > tr {
+ margin-top: 1em;
+ margin-bottom: 1em;
+ text-align: left;
+}
+
+.table-view-table > tbody > tr:hover {
+ background-color: var(--table-row-background-hover);
+}
+
+.table-view-table > thead > tr > th {
+ font-weight: 700;
+ font-size: larger;
+ border-top: none;
+ border-left: none;
+ border-right: none;
+ border-bottom: solid;
+
+ max-width: 100%;
+}
+
+.table-view-table > tbody > tr > td {
+ text-align: left;
+ border: none;
+ font-weight: 400;
+ max-width: 100%;
+}
+
+.table-view-table ul, .table-view-table ol {
+ margin-block-start: 0.2em !important;
+ margin-block-end: 0.2em !important;
+}
+
+/** Rendered value styling for any view. */
+.dataview-result-list-root-ul {
+ padding: 0em !important;
+ margin: 0em !important;
+}
+
+.dataview-result-list-ul {
+ margin-block-start: 0.2em !important;
+ margin-block-end: 0.2em !important;
+}
+
+/** Generic grouping styling. */
+.dataview.result-group {
+ padding-left: 8px;
+}
+
+/*******************/
+/** Inline Fields **/
+/*******************/
+
+.dataview.inline-field-key {
+ padding-left: 8px;
+ padding-right: 8px;
+ font-family: var(--font-monospace);
+ background-color: var(--background-primary-alt);
+ color: var(--nav-item-color-selected);
+}
+
+.dataview.inline-field-value {
+ padding-left: 8px;
+ padding-right: 8px;
+ font-family: var(--font-monospace);
+ background-color: var(--background-secondary-alt);
+ color: var(--nav-item-color-selected);
+}
+
+.dataview.inline-field-standalone-value {
+ padding-left: 8px;
+ padding-right: 8px;
+ font-family: var(--font-monospace);
+ background-color: var(--background-secondary-alt);
+ color: var(--nav-item-color-selected);
+}
+
+/***************/
+/** Task View **/
+/***************/
+
+.dataview.task-list-item, .dataview.task-list-basic-item {
+ margin-top: 3px;
+ margin-bottom: 3px;
+ transition: 0.4s;
+}
+
+.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
+ background-color: var(--text-selection);
+ box-shadow: -40px 0 0 var(--text-selection);
+ cursor: pointer;
+}
+
+/*****************/
+/** Error Views **/
+/*****************/
+
+div.dataview-error-box {
+ width: 100%;
+ min-height: 150px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 4px dashed var(--background-secondary);
+}
+
+.dataview-error-message {
+ color: var(--text-muted);
+ text-align: center;
+}
+
+/*************************/
+/** Additional Metadata **/
+/*************************/
+
+.dataview.small-text {
+ font-size: smaller;
+ color: var(--text-muted);
+ margin-left: 3px;
+}
+
+.dataview.small-text::before {
+ content: "(";
+}
+
+.dataview.small-text::after {
+ content: ")";
+}
diff --git a/.obsidian/plugins/local-gpt/data.json b/.obsidian/plugins/local-gpt/data.json
new file mode 100644
index 0000000..1cdaba6
--- /dev/null
+++ b/.obsidian/plugins/local-gpt/data.json
@@ -0,0 +1,57 @@
+{
+ "aiProviders": {
+ "main": "id-1766822455151",
+ "embedding": "id-1766822455151",
+ "vision": null
+ },
+ "defaults": {
+ "creativity": "low",
+ "contextLimit": "local"
+ },
+ "actions": [
+ {
+ "name": "文档归档",
+ "prompt": "",
+ "system": "你是一个专业的文字工作者。能够平衡文档的完整性和读者的理解性。将文档进行整理排版归档,作为知识库供未来人工/程序检索查询。",
+ "replace": false
+ },
+ {
+ "name": "Hotfix助手",
+ "prompt": "",
+ "system": "你是一个专业的hotfix人员,专业技能完全值得信赖",
+ "replace": false
+ },
+ {
+ "name": "🪄 General help",
+ "prompt": "",
+ "system": "You are an assistant helping a user write more content in a document based on a prompt. Output in markdown format. Do not use links. Do not include literal content from the original document."
+ },
+ {
+ "name": "✍️ Continue writing",
+ "prompt": "Act as a professional editor with many years of experience as a writer. Carefully finalize the following text, add details, use facts and make sure that the meaning and original style are preserved. Purposely write in detail, with examples, so that your reader is comfortable, even if they don't understand the specifics. Don't use clericalisms, evaluations without proof with facts, passive voice. Use Markdown markup language for formatting. Answer only content and nothing else, no introductory words, only substance.",
+ "system": "You are an AI assistant that follows instruction extremely well. Help as much as you can."
+ },
+ {
+ "name": "🍭 Summarize",
+ "prompt": "Make a concise summary of the key points of the following text.",
+ "system": "You are an AI assistant that follows instruction extremely well. Help as much as you can."
+ },
+ {
+ "name": "📖 Fix spelling and grammar",
+ "prompt": "Proofread the below for spelling and grammar.",
+ "system": "You are an AI assistant that follows instruction extremely well. Help as much as you can.",
+ "replace": true
+ },
+ {
+ "name": "✅ Find action items",
+ "prompt": "Act as an assistant helping find action items inside a document. An action item is an extracted task or to-do found inside of an unstructured document. Use Markdown checkbox format: each line starts with \"- [ ] \"",
+ "system": "You are an AI assistant that follows instruction extremely well. Help as much as you can."
+ },
+ {
+ "name": "🧠 New System Prompt",
+ "prompt": "",
+ "system": "You are a highly skilled AI prompt engineer with expertise in creating tailored prompts for a wide range of professional roles. You have a deep knowledge of how to craft prompts that effectively guide the language model to produce high-quality, contextually appropriate responses.\n\nYour task is to generate a custom system prompt for different roles based on user input. This involves understanding the specific requirements of each role, the context in which the prompt will be used, and the desired output format. You are skilled in structuring prompts that ensure clarity, relevance, and utility.\n\nCreate a custom system prompt for an LLM to assist users in generating contextually appropriate and highly effective responses for various roles. The prompt should provide clear instructions to the LLM on how to handle specific scenarios related to the role, including the tone and format of the response.\n\nStart by providing a role \"You are...\" and context as a summary of the situation or background information relevant to the prompt. Define the main objective, outlining what the LLM needs to accomplish.\n\nInclude instructions on the appropriate style and tone (e.g., formal, casual, technical, empathetic) based on the role and audience. Identify the target audience to tailor the LLM's output effectively. Specify the format of the response, whether it should be a narrative, bullet points, step-by-step guide, code, or another format. Avoid using headings or examples; the prompt should read as a continuous, cohesive set of instructions.\nANSWER PROMPT AND NOTHING ELSE!"
+ }
+ ],
+ "_version": 8
+}
\ No newline at end of file
diff --git a/.obsidian/plugins/local-gpt/main.js b/.obsidian/plugins/local-gpt/main.js
new file mode 100644
index 0000000..777bdcb
--- /dev/null
+++ b/.obsidian/plugins/local-gpt/main.js
@@ -0,0 +1,29671 @@
+/*
+THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
+if you want to view the source, please visit the github repository of this plugin
+*/
+
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+};
+var __export = (target, all) => {
+ for (var name in all)
+ __defProp(target, name, { get: all[name], enumerable: true });
+};
+var __copyProps = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames(from))
+ if (!__hasOwnProp.call(to, key) && key !== except)
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
+ }
+ return to;
+};
+var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
+ // If the importer is in node compatibility mode or this is not an ESM
+ // file that has been converted to a CommonJS file using a Babel-
+ // compatible transform (i.e. "__esModule" has not been set), then set
+ // "default" to the CommonJS "module.exports" for node compatibility.
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
+ mod
+));
+var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
+var __publicField = (obj, key, value) => {
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+ return value;
+};
+var __accessCheck = (obj, member, msg) => {
+ if (!member.has(obj))
+ throw TypeError("Cannot " + msg);
+};
+var __privateGet = (obj, member, getter) => {
+ __accessCheck(obj, member, "read from private field");
+ return getter ? getter.call(obj) : member.get(obj);
+};
+var __privateAdd = (obj, member, value) => {
+ if (member.has(obj))
+ throw TypeError("Cannot add the same private member more than once");
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
+};
+var __privateSet = (obj, member, value, setter) => {
+ __accessCheck(obj, member, "write to private field");
+ setter ? setter.call(obj, value) : member.set(obj, value);
+ return value;
+};
+var __privateWrapper = (obj, member, setter, getter) => ({
+ set _(value) {
+ __privateSet(obj, member, value, setter);
+ },
+ get _() {
+ return __privateGet(obj, member, getter);
+ }
+});
+var __privateMethod = (obj, member, method) => {
+ __accessCheck(obj, member, "access private method");
+ return method;
+};
+
+// node_modules/@obsidian-ai-providers/sdk/dist/index.js
+var require_dist = __commonJS({
+ "node_modules/@obsidian-ai-providers/sdk/dist/index.js"(exports, module2) {
+ var __defProp2 = Object.defineProperty;
+ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
+ var __getOwnPropNames2 = Object.getOwnPropertyNames;
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
+ var __name = (target, value) => __defProp2(target, "name", { value, configurable: true });
+ var __export2 = (target, all) => {
+ for (var name in all)
+ __defProp2(target, name, { get: all[name], enumerable: true });
+ };
+ var __copyProps2 = (to, from, except, desc) => {
+ if (from && typeof from === "object" || typeof from === "function") {
+ for (let key of __getOwnPropNames2(from))
+ if (!__hasOwnProp2.call(to, key) && key !== except)
+ __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
+ }
+ return to;
+ };
+ var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
+ var sdk_exports = {};
+ __export2(sdk_exports, {
+ initAI: () => initAI2,
+ waitForAI: () => waitForAI3
+ });
+ module2.exports = __toCommonJS2(sdk_exports);
+ var import_obsidian4 = require("obsidian");
+ var FALLBACK_TIMEOUT = 100;
+ var REQUIRED_AI_PROVIDERS_VERSION = 3;
+ var AI_PROVIDERS_READY_EVENT = "ai-providers-ready";
+ var aiProvidersReadyAiResolver = null;
+ async function waitForAIProviders(app, plugin) {
+ if (aiProvidersReadyAiResolver) {
+ return aiProvidersReadyAiResolver;
+ }
+ const abortController = new AbortController();
+ let aiProvidersReady = /* @__PURE__ */ __name(() => {
+ }, "aiProvidersReady");
+ const result = {
+ promise: new Promise((resolve, reject) => {
+ aiProvidersReady = /* @__PURE__ */ __name(() => {
+ app.workspace.off(AI_PROVIDERS_READY_EVENT, aiProvidersReady);
+ aiProvidersReadyAiResolver = null;
+ resolve(app.aiProviders);
+ }, "aiProvidersReady");
+ if (app.aiProviders) {
+ aiProvidersReady();
+ } else {
+ const eventRef = app.workspace.on(
+ AI_PROVIDERS_READY_EVENT,
+ aiProvidersReady
+ );
+ plugin.registerEvent(eventRef);
+ }
+ abortController.signal.addEventListener("abort", () => {
+ app.workspace.off(AI_PROVIDERS_READY_EVENT, aiProvidersReady);
+ aiProvidersReadyAiResolver = null;
+ reject(new Error("Waiting for AI Providers was cancelled"));
+ });
+ }),
+ cancel: () => abortController.abort()
+ };
+ if (!app.aiProviders) {
+ aiProvidersReadyAiResolver = result;
+ }
+ return result;
+ }
+ __name(waitForAIProviders, "waitForAIProviders");
+ var _AIProvidersManager = class {
+ constructor(app, plugin) {
+ this.app = app;
+ this.plugin = plugin;
+ }
+ static getInstance(app, plugin) {
+ if (!this.instance) {
+ if (!app || !plugin) {
+ throw new Error(
+ "AIProvidersManager not initialized. Call initialize() first"
+ );
+ }
+ this.instance = new _AIProvidersManager(app, plugin);
+ }
+ return this.instance;
+ }
+ static reset() {
+ this.instance = null;
+ }
+ getApp() {
+ return this.app;
+ }
+ getPlugin() {
+ return this.plugin;
+ }
+ };
+ var AIProvidersManager = _AIProvidersManager;
+ __name(AIProvidersManager, "AIProvidersManager");
+ AIProvidersManager.instance = null;
+ async function initAI2(app, plugin, onDone, options) {
+ AIProvidersManager.getInstance(app, plugin);
+ let isFallbackShown = false;
+ if (options == null ? void 0 : options.disableFallback) {
+ await onDone();
+ return;
+ }
+ try {
+ const timeout = setTimeout(async () => {
+ plugin.addSettingTab(
+ new AIProvidersFallbackSettingsTab(app, plugin)
+ );
+ isFallbackShown = true;
+ }, FALLBACK_TIMEOUT);
+ const aiProvidersAiResolver = await waitForAIProviders(app, plugin);
+ const aiProviders = await aiProvidersAiResolver.promise;
+ clearTimeout(timeout);
+ try {
+ aiProviders.checkCompatibility(REQUIRED_AI_PROVIDERS_VERSION);
+ } catch (error) {
+ console.error(`AI Providers compatibility check failed: ${error}`);
+ if (error.code === "version_mismatch") {
+ plugin.addSettingTab(
+ new AIProvidersFallbackSettingsTab(app, plugin)
+ );
+ throw new Error(
+ `AI Providers version ${REQUIRED_AI_PROVIDERS_VERSION} is required`
+ );
+ }
+ throw error;
+ }
+ await onDone();
+ } finally {
+ if (isFallbackShown && app.plugins) {
+ await app.plugins.disablePlugin(plugin.manifest.id);
+ await app.plugins.enablePlugin(plugin.manifest.id);
+ }
+ }
+ }
+ __name(initAI2, "initAI");
+ async function waitForAI3() {
+ const manager = AIProvidersManager.getInstance();
+ return waitForAIProviders(manager.getApp(), manager.getPlugin());
+ }
+ __name(waitForAI3, "waitForAI");
+ var AIProvidersFallbackSettingsTab = class extends import_obsidian4.PluginSettingTab {
+ constructor(app, plugin) {
+ super(app, plugin);
+ this.plugin = plugin;
+ }
+ async display() {
+ const { containerEl } = this;
+ containerEl.empty();
+ const aiProvidersNotice = containerEl.createEl("div");
+ aiProvidersNotice.addClass("ai-providers-notice");
+ aiProvidersNotice.appendChild(
+ (0, import_obsidian4.sanitizeHTMLToDom)(`
+ \u26A0\uFE0F This plugin requires AI Providers plugin to be installed.
+ Please install and configure AI Providers plugin first.
+ `)
+ );
+ }
+ };
+ __name(AIProvidersFallbackSettingsTab, "AIProvidersFallbackSettingsTab");
+ }
+});
+
+// src/main.ts
+var main_exports = {};
+__export(main_exports, {
+ default: () => LocalGPT
+});
+module.exports = __toCommonJS(main_exports);
+var import_obsidian3 = require("obsidian");
+
+// src/LocalGPTSettingTab.ts
+var import_obsidian = require("obsidian");
+
+// src/defaultSettings.ts
+var DEFAULT_SETTINGS = {
+ aiProviders: {
+ main: null,
+ embedding: null,
+ vision: null
+ },
+ defaults: {
+ creativity: "low",
+ contextLimit: "local"
+ },
+ actions: [
+ {
+ name: "\u{1FA84} General help",
+ prompt: "",
+ system: "You are an assistant helping a user write more content in a document based on a prompt. Output in markdown format. Do not use links. Do not include literal content from the original document."
+ },
+ {
+ name: "\u270D\uFE0F Continue writing",
+ prompt: "Act as a professional editor with many years of experience as a writer. Carefully finalize the following text, add details, use facts and make sure that the meaning and original style are preserved. Purposely write in detail, with examples, so that your reader is comfortable, even if they don't understand the specifics. Don't use clericalisms, evaluations without proof with facts, passive voice. Use Markdown markup language for formatting. Answer only content and nothing else, no introductory words, only substance.",
+ system: "You are an AI assistant that follows instruction extremely well. Help as much as you can."
+ },
+ {
+ name: "\u{1F36D} Summarize",
+ prompt: "Make a concise summary of the key points of the following text.",
+ system: "You are an AI assistant that follows instruction extremely well. Help as much as you can."
+ },
+ {
+ name: "\u{1F4D6} Fix spelling and grammar",
+ prompt: "Proofread the below for spelling and grammar.",
+ system: "You are an AI assistant that follows instruction extremely well. Help as much as you can.",
+ replace: true
+ },
+ {
+ name: "\u2705 Find action items",
+ prompt: 'Act as an assistant helping find action items inside a document. An action item is an extracted task or to-do found inside of an unstructured document. Use Markdown checkbox format: each line starts with "- [ ] "',
+ system: "You are an AI assistant that follows instruction extremely well. Help as much as you can."
+ },
+ {
+ name: "\u{1F9E0} New System Prompt",
+ prompt: "",
+ system: `You are a highly skilled AI prompt engineer with expertise in creating tailored prompts for a wide range of professional roles. You have a deep knowledge of how to craft prompts that effectively guide the language model to produce high-quality, contextually appropriate responses.
+
+Your task is to generate a custom system prompt for different roles based on user input. This involves understanding the specific requirements of each role, the context in which the prompt will be used, and the desired output format. You are skilled in structuring prompts that ensure clarity, relevance, and utility.
+
+Create a custom system prompt for an LLM to assist users in generating contextually appropriate and highly effective responses for various roles. The prompt should provide clear instructions to the LLM on how to handle specific scenarios related to the role, including the tone and format of the response.
+
+Start by providing a role "You are..." and context as a summary of the situation or background information relevant to the prompt. Define the main objective, outlining what the LLM needs to accomplish.
+
+Include instructions on the appropriate style and tone (e.g., formal, casual, technical, empathetic) based on the role and audience. Identify the target audience to tailor the LLM's output effectively. Specify the format of the response, whether it should be a narrative, bullet points, step-by-step guide, code, or another format. Avoid using headings or examples; the prompt should read as a continuous, cohesive set of instructions.
+ANSWER PROMPT AND NOTHING ELSE!`
+ }
+ ],
+ _version: 8
+};
+var CREATIVITY = {
+ "": {
+ temperature: 0
+ },
+ low: {
+ temperature: 0.2
+ },
+ medium: {
+ temperature: 0.5
+ },
+ high: {
+ temperature: 1
+ }
+};
+var SELECTION_KEYWORD = "{{=SELECTION=}}";
+var CONTEXT_KEYWORD = "{{=CONTEXT=}}";
+var CONTEXT_CONDITION_START = "{{=CONTEXT_START=}}";
+var CONTEXT_CONDITION_END = "{{=CONTEXT_END=}}";
+
+// src/LocalGPTSettingTab.ts
+var import_sdk = __toESM(require_dist());
+
+// src/i18n/de.json
+var de_default = {
+ commands: {
+ showContextMenu: "Kontextmen\xFC anzeigen",
+ actionPalette: {
+ name: "Aktionspalette",
+ placeholder: "Ihr Prompt... | Enter: senden, Esc: abbrechen",
+ changeProvider: "KI\u2011Provider wechseln",
+ changeModel: "Modell wechseln",
+ changeCreativity: "Kreativit\xE4t \xE4ndern",
+ changeSystemPrompt: "System-Prompt wechseln",
+ unknownModel: "Unbekanntes Modell"
+ }
+ },
+ statusBar: {
+ enhancing: "\u2728 Verbessern",
+ enhancingWithProgress: "\u2728 Verbessern {{percent}}%"
+ },
+ notices: {
+ errorGenerating: "Fehler bei der Texterzeugung: {{message}}",
+ errorProcessingRag: "Fehler bei der Verarbeitung verkn\xFCpfter Dokumente: {{message}}. Fahre mit dem Originaltext fort.",
+ importantUpdate: "\uFE0F\u{1F6A8} WICHTIG! Aktualisiere die Local GPT Einstellungen!",
+ newVersion: "\u2B06\uFE0F Local GPT: Eine neue Version ist verf\xFCgbar",
+ actionNameRequired: "Bitte gib einen Namen f\xFCr die Aktion ein.",
+ actionNameExists: 'Eine Aktion mit dem Namen "{{name}}" existiert bereits.',
+ actionRewritten: 'Aktion "{{name}}" \xFCberschrieben',
+ actionAdded: 'Aktion "{{name}}" hinzugef\xFCgt',
+ copied: "Kopiert"
+ },
+ settings: {
+ mainProvider: "Haupt-AI-Provider",
+ embeddingProvider: "Embedding AI Provider",
+ embeddingProviderDesc: "Optional. Wird f\xFCr \u2728\xA0Erweiterte\xA0Aktionen.",
+ visionProvider: "Vision AI Provider",
+ visionProviderDesc: "Optional. Dies wird f\xFCr Bilder verwendet. Wenn nicht festgelegt, wird der Haupt-AI-Provider verwendet.",
+ creativity: "Kreativit\xE4t",
+ creativityNone: "\u26AA Keine",
+ creativityLow: "\uFE0F\u{1F4A1} Niedrig",
+ creativityMedium: "\u{1F3A8} Mittel",
+ creativityHigh: "\u{1F680} Hoch",
+ actions: "Aktionen",
+ quickAdd: "Schnell hinzuf\xFCgen",
+ quickAddPlaceholder: "Aktion einf\xFCgen",
+ quickAddDesc: 'Sie k\xF6nnen die besten S\xE4tze von Prompts teilen oder einen aus der Community erhalten.
Wichtig: Wenn Sie bereits eine Aktion mit demselben Namen haben, wird sie \xFCberschrieben.',
+ addNewManually: "Manuell hinzuf\xFCgen",
+ actionName: "Aktionsname",
+ actionNamePlaceholder: "Auswahl zusammenfassen",
+ systemPrompt: "System-Prompt",
+ systemPromptDesc: "Optional",
+ systemPromptPlaceholder: "Du bist ein hilfreicher Assistent.",
+ prompt: "Prompt",
+ promptDesc: 'Bitte lesen Sie \xFCber
Prompt-Vorlagen
, wenn Sie Ihre
resultierenden Prompts anpassen m\xF6chten',
+ replaceSelected: "Ausgew\xE4hlten Text ersetzen",
+ replaceSelectedDesc: "Wenn diese Option aktiviert ist, wird der hervorgehobene Text durch eine Antwort des Modells ersetzt.",
+ remove: "Entfernen",
+ close: "Schlie\xDFen",
+ save: "Speichern",
+ actionsList: "Aktionsliste",
+ changeOrder: "Reihenfolge \xE4ndern",
+ done: "Fertig",
+ advancedSettings: "Erweiterte Einstellungen",
+ advancedSettingsDesc: "\u2728 Erweiterte Aktionen (RAG), Alle Aktionen zur\xFCcksetzen",
+ enhancedActions: "Erweiterte Aktionen",
+ enhancedActionsLabel: "RAG\u2011Kontext",
+ enhancedActionsDesc: "Mehr Kontext kann die Antwortqualit\xE4t bei leistungsstarken Modellen verbessern, bei schw\xE4cheren jedoch verschlechtern. Gr\xF6\xDFerer Kontext verbraucht au\xDFerdem mehr Tokens und erh\xF6ht die Kosten pro Anfrage (bei kostenpflichtigen Modellen).",
+ contextLimitLocal: "Lokale Modelle",
+ contextLimitCloud: "Cloud\u2011Modelle",
+ contextLimitAdvanced: "Top: GPT, Claude, Gemini",
+ contextLimitMax: "Keine Limits (Achtung)",
+ dangerZone: "Gefahrenzone",
+ resetActions: "Aktionen zur\xFCcksetzen",
+ resetActionsDesc: "\u{1F6A8} Setzt alle Aktionen auf die Standardeinstellungen zur\xFCck. Dies kann nicht r\xFCckg\xE4ngig gemacht werden und l\xF6scht alle Ihre benutzerdefinierten Aktionen.",
+ reset: "Zur\xFCcksetzen",
+ confirmReset: "Zur\xFCcksetzen best\xE4tigen"
+ }
+};
+
+// src/i18n/en.json
+var en_default = {
+ commands: {
+ showContextMenu: "Show context menu",
+ actionPalette: {
+ name: "Action Palette",
+ placeholder: "Your prompt... | Enter: send, Esc: cancel",
+ changeProvider: "Change the AI provider",
+ changeModel: "Change the model",
+ changeCreativity: "Change creativity",
+ changeSystemPrompt: "Change system prompt",
+ unknownModel: "Unknown model"
+ }
+ },
+ statusBar: {
+ enhancing: "\u2728 Enhancing",
+ enhancingWithProgress: "\u2728 Enhancing {{percent}}%"
+ },
+ notices: {
+ errorGenerating: "Error while generating text: {{message}}",
+ errorProcessingRag: "Error processing related documents: {{message}}. Continuing with original text.",
+ importantUpdate: "\uFE0F\u{1F6A8} IMPORTANT! Update Local GPT settings!",
+ newVersion: "\u2B06\uFE0F Local GPT: a new version is available",
+ actionNameRequired: "Please enter a name for the action.",
+ actionNameExists: 'An action with the name "{{name}}" already exists.',
+ actionRewritten: 'Rewritten "{{name}}" action',
+ actionAdded: 'Added "{{name}}" action',
+ copied: "Copied"
+ },
+ settings: {
+ mainProvider: "Main AI Provider",
+ embeddingProvider: "Embedding AI Provider",
+ embeddingProviderDesc: "Optional. Used for \u2728\xA0Enhanced\xA0Actions.",
+ visionProvider: "Vision AI Provider",
+ visionProviderDesc: "Optional. This is used for images. If not set, the main AI provider will be used.",
+ creativity: "Creativity",
+ creativityNone: "\u26AA None",
+ creativityLow: "\uFE0F\u{1F4A1} Low",
+ creativityMedium: "\u{1F3A8} Medium",
+ creativityHigh: "\u{1F680} High",
+ actions: "Actions",
+ quickAdd: "Quick add",
+ quickAddPlaceholder: "Paste action",
+ quickAddDesc: 'You can share the best sets prompts or get one from the community.
Important: if you already have an action with the same name it will be overwritten.',
+ addNewManually: "Add new manually",
+ actionName: "Action name",
+ actionNamePlaceholder: "Summarize selection",
+ systemPrompt: "System prompt",
+ systemPromptDesc: "Optional",
+ systemPromptPlaceholder: "You are a helpful assistant.",
+ prompt: "Prompt",
+ promptDesc: 'Please read about
Prompt templating
if you want to customize
your resulting prompts',
+ replaceSelected: "Replace selected text",
+ replaceSelectedDesc: "If checked, the highlighted text will be replaced with a response from the model.",
+ remove: "Remove",
+ close: "Close",
+ save: "Save",
+ actionsList: "Actions list",
+ changeOrder: "Change order",
+ done: "Done",
+ advancedSettings: "Advanced settings",
+ advancedSettingsDesc: "\u2728 Enhanced Actions (RAG), Reset all actions",
+ enhancedActions: "Enhanced Actions",
+ enhancedActionsLabel: "RAG context",
+ enhancedActionsDesc: "More context can improve answer quality for powerful models, but may reduce quality for weaker ones. Larger context also consumes more tokens and increases request cost for paid models.",
+ contextLimitLocal: "Local models",
+ contextLimitCloud: "Cloud models",
+ contextLimitAdvanced: "Top: GPT, Claude, Gemini",
+ contextLimitMax: "No limits (danger)",
+ dangerZone: "Danger zone",
+ resetActions: "Reset actions",
+ resetActionsDesc: "\u{1F6A8} Reset all actions to the default. This cannot be undone and will delete all your custom actions.",
+ reset: "Reset",
+ confirmReset: "Confirm reset"
+ }
+};
+
+// src/i18n/ru.json
+var ru_default = {
+ commands: {
+ showContextMenu: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435 \u043C\u0435\u043D\u044E",
+ actionPalette: {
+ name: "\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439",
+ placeholder: "\u0412\u0430\u0448 \u043F\u0440\u043E\u043C\u043F\u0442... | Enter: \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C, Esc: \u043E\u0442\u043C\u0435\u043D\u0430",
+ changeProvider: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C AI\u2011\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",
+ changeModel: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C",
+ changeCreativity: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u0440\u0435\u0430\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C",
+ changeSystemPrompt: "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0443\u044E \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044E",
+ unknownModel: "\u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043C\u043E\u0434\u0435\u043B\u044C"
+ }
+ },
+ statusBar: {
+ enhancing: "\u2728 \u0423\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435",
+ enhancingWithProgress: "\u2728 \u0423\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435 {{percent}}%"
+ },
+ notices: {
+ errorGenerating: "\u041E\u0448\u0438\u0431\u043A\u0430 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043A\u0441\u0442\u0430: {{message}}",
+ errorProcessingRag: "\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432: {{message}}. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u044E \u0441 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u043C \u0442\u0435\u043A\u0441\u0442\u043E\u043C.",
+ importantUpdate: "\uFE0F\u{1F6A8} \u0412\u0410\u0416\u041D\u041E! \u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 Local GPT!",
+ newVersion: "\u2B06\uFE0F Local GPT: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F",
+ actionNameRequired: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.",
+ actionNameExists: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \xAB{{name}}\xBB \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.",
+ actionRewritten: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \xAB{{name}}\xBB \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E",
+ actionAdded: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \xAB{{name}}\xBB \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E",
+ copied: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E"
+ },
+ settings: {
+ mainProvider: "\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440",
+ embeddingProvider: "\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043B\u044F \u044D\u043C\u0431\u0435\u0434\u0434\u0438\u043D\u0433\u043E\u0432",
+ embeddingProviderDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u2728\xA0\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0445\xA0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.",
+ visionProvider: "\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439",
+ visionProviderDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C\u0438. \u0415\u0441\u043B\u0438 \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440.",
+ creativity: "\u041A\u0440\u0435\u0430\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C",
+ creativityNone: "\u26AA \u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442",
+ creativityLow: "\uFE0F\u{1F4A1} \u041D\u0438\u0437\u043A\u0430\u044F",
+ creativityMedium: "\u{1F3A8} \u0421\u0440\u0435\u0434\u043D\u044F\u044F",
+ creativityHigh: "\u{1F680} \u0412\u044B\u0441\u043E\u043A\u0430\u044F",
+ actions: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F",
+ quickAdd: "\u0411\u044B\u0441\u0442\u0440\u043E\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435",
+ quickAddPlaceholder: "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0433\u043E\u0442\u043E\u0432\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435",
+ quickAddDesc: '\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F \u0441\u0432\u043E\u0438\u043C\u0438 \u043D\u0430\u0431\u043E\u0440\u0430\u043C\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432 \u0438\u043B\u0438 \u043D\u0430\u0439\u0442\u0438 \u043D\u043E\u0432\u044B\u0435 \u0432 \u0441\u043E\u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435.
\u0412\u0430\u0436\u043D\u043E: \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0430\u043A\u0438\u043C \u0436\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C, \u043E\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E.',
+ addNewManually: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E",
+ actionName: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",
+ actionNamePlaceholder: "\u041A\u0440\u0430\u0442\u043A\u043E \u043F\u0435\u0440\u0435\u0441\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435",
+ systemPrompt: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F",
+ systemPromptDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E",
+ systemPromptPlaceholder: "\u0412\u044B \u2014 \u043F\u043E\u043B\u0435\u0437\u043D\u044B\u0439 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442.",
+ prompt: "\u041F\u0440\u043E\u043C\u043F\u0442",
+ promptDesc: '\u0423\u0437\u043D\u0430\u0439\u0442\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043E \u0448\u0430\u0431\u043B\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u0438\u0445 \u043F\u043E\u0434 \u0441\u0435\u0431\u044F.',
+ replaceSelected: "\u0417\u0430\u043C\u0435\u043D\u044F\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442",
+ replaceSelectedDesc: "\u0415\u0441\u043B\u0438 \u043E\u043F\u0446\u0438\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430, \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043C\u0435\u043D\u0451\u043D \u043E\u0442\u0432\u0435\u0442\u043E\u043C \u043E\u0442 \u043C\u043E\u0434\u0435\u043B\u0438.",
+ remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
+ save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",
+ actionsList: "\u0421\u043F\u0438\u0441\u043E\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439",
+ changeOrder: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0440\u044F\u0434\u043E\u043A",
+ done: "\u0413\u043E\u0442\u043E\u0432\u043E",
+ advancedSettings: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
+ advancedSettingsDesc: "\u2728 \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F (RAG), \u0421\u0431\u0440\u043E\u0441 \u0432\u0441\u0435\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439",
+ enhancedActions: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",
+ enhancedActionsLabel: "RAG\u2011\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442",
+ enhancedActionsDesc: "\u0427\u0435\u043C \u0431\u043E\u043B\u044C\u0448\u0435 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u2014 \u0442\u0435\u043C \u0432\u044B\u0448\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0443 \u043C\u043E\u0449\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439, \u043D\u043E \u043D\u0438\u0436\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u0443 \u0441\u043B\u0430\u0431\u044B\u0445. \u0411\u043E\u043B\u044C\u0448\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u0442\u0430\u043A\u0436\u0435 \u0440\u0430\u0441\u0445\u043E\u0434\u0443\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0434\u043B\u044F \u043F\u043B\u0430\u0442\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439.",
+ contextLimitLocal: "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438",
+ contextLimitCloud: "\u041E\u0431\u043B\u0430\u0447\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438",
+ contextLimitAdvanced: "\u0422\u043E\u043F: GPT, Claude, Gemini",
+ contextLimitMax: "\u0411\u0435\u0437 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0439 (\u043E\u043F\u0430\u0441\u043D\u043E)",
+ dangerZone: "\u041E\u043F\u0430\u0441\u043D\u0430\u044F \u0437\u043E\u043D\u0430",
+ resetActions: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F",
+ resetActionsDesc: "\u{1F6A8} \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0434\u043E \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0445. \u042D\u0442\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0435\u043E\u0431\u0440\u0430\u0442\u0438\u043C\u043E \u0438 \u0443\u0434\u0430\u043B\u0438\u0442 \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.",
+ reset: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C",
+ confirmReset: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u0441\u0431\u0440\u043E\u0441"
+ }
+};
+
+// src/i18n/zh.json
+var zh_default = {
+ commands: {
+ showContextMenu: "\u663E\u793A\u4E0A\u4E0B\u6587\u83DC\u5355",
+ actionPalette: {
+ name: "\u52A8\u4F5C\u9762\u677F",
+ placeholder: "\u60A8\u7684\u63D0\u793A... | Enter: \u53D1\u9001, Esc: \u53D6\u6D88",
+ changeProvider: "\u5207\u6362 AI \u63D0\u4F9B\u5546",
+ changeModel: "\u5207\u6362\u6A21\u578B",
+ changeCreativity: "\u66F4\u6539\u521B\u9020\u529B",
+ changeSystemPrompt: "\u66F4\u6539\u7CFB\u7EDF\u63D0\u793A",
+ unknownModel: "\u672A\u77E5\u6A21\u578B"
+ }
+ },
+ statusBar: {
+ enhancing: "\u2728 \u589E\u5F3A\u4E2D",
+ enhancingWithProgress: "\u2728 \u589E\u5F3A\u4E2D {{percent}}%"
+ },
+ notices: {
+ errorGenerating: "\u751F\u6210\u6587\u672C\u65F6\u51FA\u9519: {{message}}",
+ errorProcessingRag: "\u5904\u7406\u76F8\u5173\u6587\u6863\u65F6\u51FA\u9519: {{message}}\u3002\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u59CB\u6587\u672C\u3002",
+ importantUpdate: "\uFE0F\u{1F6A8} \u91CD\u8981\u63D0\u793A\uFF01\u8BF7\u66F4\u65B0 Local GPT \u8BBE\u7F6E\uFF01",
+ newVersion: "\u2B06\uFE0F Local GPT: \u65B0\u7248\u672C\u53EF\u7528",
+ actionNameRequired: "\u8BF7\u8F93\u5165\u64CD\u4F5C\u540D\u79F0\u3002",
+ actionNameExists: '\u540D\u4E3A"{{name}}"\u7684\u64CD\u4F5C\u5DF2\u5B58\u5728\u3002',
+ actionRewritten: '\u5DF2\u91CD\u5199\u64CD\u4F5C"{{name}}"',
+ actionAdded: '\u5DF2\u6DFB\u52A0\u64CD\u4F5C"{{name}}"',
+ copied: "\u5DF2\u590D\u5236"
+ },
+ settings: {
+ mainProvider: "\u4E3B\u8981AI\u63D0\u4F9B\u5546",
+ embeddingProvider: "\u5D4C\u5165AI\u63D0\u4F9B\u5546",
+ embeddingProviderDesc: "\u53EF\u9009\u3002\u7528\u4E8E\u2728\u589E\u5F3A\u64CD\u4F5C\u3002",
+ visionProvider: "\u89C6\u89C9AI\u63D0\u4F9B\u5546",
+ visionProviderDesc: "\u53EF\u9009\u3002\u6B64\u9009\u9879\u7528\u4E8E\u56FE\u7247\u3002\u5982\u679C\u672A\u8BBE\u7F6E\uFF0C\u5C06\u4F7F\u7528\u4E3B\u8981\u7684AI\u63D0\u4F9B\u5546\u3002",
+ creativity: "\u521B\u9020\u529B",
+ creativityNone: "\u26AA \u65E0",
+ creativityLow: "\uFE0F\u{1F4A1} \u4F4E",
+ creativityMedium: "\u{1F3A8} \u4E2D",
+ creativityHigh: "\u{1F680} \u9AD8",
+ actions: "\u64CD\u4F5C",
+ quickAdd: "\u5FEB\u901F\u6DFB\u52A0",
+ quickAddPlaceholder: "\u7C98\u8D34\u64CD\u4F5C",
+ quickAddDesc: '\u60A8\u53EF\u4EE5\u5206\u4EAB\u6700\u4F73\u7684\u63D0\u793A\u96C6\uFF0C\u6216\u4ECE\u793E\u533A\u83B7\u53D6\u4E00\u4E2A\u3002
\u91CD\u8981\u63D0\u793A: \u5982\u679C\u60A8\u5DF2\u7ECF\u6709\u4E00\u4E2A\u540C\u540D\u64CD\u4F5C\uFF0C\u5B83\u5C06\u88AB\u8986\u76D6\u3002',
+ addNewManually: "\u624B\u52A8\u6DFB\u52A0",
+ actionName: "\u64CD\u4F5C\u540D\u79F0",
+ actionNamePlaceholder: "\u603B\u7ED3\u9009\u62E9",
+ systemPrompt: "\u7CFB\u7EDF\u63D0\u793A",
+ systemPromptDesc: "\u53EF\u9009",
+ systemPromptPlaceholder: "\u4F60\u662F\u4E00\u4E2A\u4E50\u4E8E\u52A9\u4EBA\u7684\u52A9\u624B\u3002",
+ prompt: "\u63D0\u793A",
+ promptDesc: '\u5982\u679C\u60A8\u60F3\u81EA\u5B9A\u4E49
\u60A8\u7684\u7ED3\u679C\u63D0\u793A\uFF0C
\u8BF7\u9605\u8BFB\u63D0\u793A\u6A21\u677F',
+ replaceSelected: "\u66FF\u6362\u9009\u5B9A\u7684\u6587\u672C",
+ replaceSelectedDesc: "\u5982\u679C\u9009\u4E2D\uFF0C\u7A81\u51FA\u663E\u793A\u7684\u6587\u672C\u5C06\u88AB\u6A21\u578B\u7684\u54CD\u5E94\u66FF\u6362\u3002",
+ remove: "\u5220\u9664",
+ close: "\u5173\u95ED",
+ save: "\u4FDD\u5B58",
+ actionsList: "\u64CD\u4F5C\u5217\u8868",
+ changeOrder: "\u66F4\u6539\u987A\u5E8F",
+ done: "\u5B8C\u6210",
+ advancedSettings: "\u9AD8\u7EA7\u8BBE\u7F6E",
+ advancedSettingsDesc: "\u2728 \u589E\u5F3A\u64CD\u4F5C\uFF08RAG\uFF09\u3001\u91CD\u7F6E\u6240\u6709\u64CD\u4F5C",
+ enhancedActions: "\u589E\u5F3A\u64CD\u4F5C",
+ enhancedActionsLabel: "RAG \u4E0A\u4E0B\u6587",
+ enhancedActionsDesc: "\u66F4\u591A\u4E0A\u4E0B\u6587\u53EF\u63D0\u5347\u5F3A\u5927\u6A21\u578B\u7684\u7B54\u6848\u8D28\u91CF\uFF0C\u4F46\u53EF\u80FD\u964D\u4F4E\u8F83\u5F31\u6A21\u578B\u7684\u8D28\u91CF\u3002\u66F4\u5927\u7684\u4E0A\u4E0B\u6587\u4E5F\u4F1A\u6D88\u8017\u66F4\u591A Token\uFF0C\u5E76\u63D0\u9AD8\u6BCF\u6B21\u8BF7\u6C42\u6210\u672C\uFF08\u5BF9\u4ED8\u8D39\u6A21\u578B\u800C\u8A00\uFF09\u3002",
+ contextLimitLocal: "\u672C\u5730\u6A21\u578B",
+ contextLimitCloud: "\u4E91\u7AEF\u6A21\u578B",
+ contextLimitAdvanced: "\u9876\u7EA7\uFF1AGPT\u3001Claude\u3001Gemini",
+ contextLimitMax: "\u65E0\u9650\u5236\uFF08\u6CE8\u610F\uFF09",
+ dangerZone: "\u5371\u9669\u533A\u57DF",
+ resetActions: "\u91CD\u7F6E\u64CD\u4F5C",
+ resetActionsDesc: "\u{1F6A8} \u5C06\u6240\u6709\u64CD\u4F5C\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u503C\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\uFF0C\u5E76\u5C06\u5220\u9664\u6240\u6709\u60A8\u7684\u81EA\u5B9A\u4E49\u64CD\u4F5C\u3002",
+ reset: "\u91CD\u7F6E",
+ confirmReset: "\u786E\u8BA4\u91CD\u7F6E"
+ }
+};
+
+// src/logger.ts
+var Logger = class {
+ constructor() {
+ this.logLevel = 0 /* DEBUG */;
+ this.timers = /* @__PURE__ */ new Map();
+ this.colorIndex = 0;
+ this.colors = [
+ "#FFB3BA",
+ "#BAFFC9",
+ "#BAE1FF",
+ "#FFFFBA",
+ "#FFDFBA",
+ "#E0BBE4"
+ ];
+ this.isDevMode = false;
+ }
+ static getInstance() {
+ if (!Logger.instance) {
+ Logger.instance = new Logger();
+ }
+ return Logger.instance;
+ }
+ setLogLevel(level) {
+ this.logLevel = level;
+ }
+ logWithEmoji(level, message, ...args) {
+ if (this.isDevMode && level >= this.logLevel) {
+ const emoji = this.getEmojiForLevel(level);
+ if (args.length === 0) {
+ console.log(`${emoji} %c${message}`, "font-weight: bold;");
+ } else {
+ console.group(`${emoji} %c${message}`, "font-weight: bold;");
+ this.logArgs(args);
+ console.groupEnd();
+ }
+ }
+ }
+ logArgs(args) {
+ args.forEach((arg) => {
+ console.log(arg);
+ });
+ }
+ getEmojiForLevel(level) {
+ switch (level) {
+ case 0 /* DEBUG */:
+ return "\u{1F41B}";
+ case 1 /* INFO */:
+ return "\u2139\uFE0F";
+ case 2 /* WARN */:
+ return "\u26A0\uFE0F";
+ case 3 /* ERROR */:
+ return "\u{1F6AB}";
+ case 4 /* SUCCESS */:
+ return "\u2705";
+ default:
+ return "";
+ }
+ }
+ debug(message, ...args) {
+ this.logWithEmoji(0 /* DEBUG */, message, ...args);
+ }
+ info(message, ...args) {
+ this.logWithEmoji(1 /* INFO */, message, ...args);
+ }
+ warn(message, ...args) {
+ this.logWithEmoji(2 /* WARN */, message, ...args);
+ }
+ error(message, ...args) {
+ this.logWithEmoji(3 /* ERROR */, message, ...args);
+ }
+ success(message, ...args) {
+ this.logWithEmoji(4 /* SUCCESS */, message, ...args);
+ }
+ table(message, ...args) {
+ if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) {
+ console.group(`\u{1F4CA} %c${message}`, "font-weight: bold;");
+ this.logNestedGroups(args);
+ console.groupEnd();
+ }
+ }
+ logNestedGroups(args) {
+ args.forEach((arg) => {
+ if (typeof arg === "object" && arg !== null) {
+ this.logObjectAsGroups(arg);
+ } else {
+ console.log(arg);
+ }
+ });
+ }
+ logObjectAsGroups(obj) {
+ Object.entries(obj).forEach(([key, value]) => {
+ if (typeof value === "object" && value !== null) {
+ console.group(`${key}:`);
+ this.logObjectAsGroups(value);
+ console.groupEnd();
+ } else {
+ console.log(`${key}: ${value}`);
+ }
+ });
+ }
+ time(label) {
+ if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) {
+ const color = this.getNextColor();
+ this.timers.set(label, { startTime: performance.now(), color });
+ console.log(
+ `\u23F1\uFE0F %c${label}: timer started`,
+ `color: black; font-weight: bold; background-color: ${color}; padding: 2px 5px; border-radius: 3px;`
+ );
+ }
+ }
+ timeEnd(label) {
+ if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) {
+ const timerData = this.timers.get(label);
+ if (timerData) {
+ const duration = performance.now() - timerData.startTime;
+ console.log(
+ `\u23F1\uFE0F %c${label}: ${duration.toFixed(2)}ms`,
+ `color: black; font-weight: bold; background-color: ${timerData.color}; padding: 2px 5px; border-radius: 3px;`
+ );
+ this.timers.delete(label);
+ } else {
+ console.warn(`Timer '${label}' does not exist`);
+ }
+ }
+ }
+ getNextColor() {
+ const color = this.colors[this.colorIndex];
+ this.colorIndex = (this.colorIndex + 1) % this.colors.length;
+ return color;
+ }
+ // Добавляем новый метод для создания разделителя
+ separator(message = "") {
+ if (this.isDevMode) {
+ const lineLength = 20;
+ const line = "\u2501".repeat(lineLength);
+ const paddedMessage = message ? ` ${message} ` : "";
+ const leftPadding = Math.floor(
+ (lineLength - paddedMessage.length) / 2
+ );
+ const rightPadding = lineLength - paddedMessage.length - leftPadding;
+ const separatorLine = message ? line.slice(0, leftPadding) + paddedMessage + line.slice(lineLength - rightPadding) : line;
+ console.log(
+ "\n%c" + separatorLine,
+ "color: #FF4500; font-weight: bold; font-size: 1.2em;"
+ );
+ }
+ }
+};
+var logger = Logger.getInstance();
+
+// src/i18n/index.ts
+var locales = {
+ en: en_default,
+ ru: ru_default,
+ de: de_default,
+ zh: zh_default
+};
+var I18n = class {
+ static t(key, params) {
+ const locale = window.localStorage.getItem("language") || "en";
+ const keys = key.split(".");
+ let translations = locales[locale] || locales["en"];
+ for (const k of keys) {
+ if ((translations == null ? void 0 : translations[k]) === void 0) {
+ logger.warn(`Translation missing: ${key}`);
+ translations = locales["en"];
+ let engValue = translations;
+ for (const ek of keys) {
+ engValue = engValue == null ? void 0 : engValue[ek];
+ }
+ return engValue || key;
+ }
+ translations = translations[k];
+ }
+ let result = translations;
+ if (params) {
+ Object.entries(params).forEach(([key2, value]) => {
+ result = result.replace(`{{${key2}}}`, value);
+ });
+ }
+ return result;
+ }
+};
+
+// node_modules/sortablejs/modular/sortable.esm.js
+function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ if (enumerableOnly) {
+ symbols = symbols.filter(function(sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ });
+ }
+ keys.push.apply(keys, symbols);
+ }
+ return keys;
+}
+function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+ if (i % 2) {
+ ownKeys(Object(source), true).forEach(function(key) {
+ _defineProperty(target, key, source[key]);
+ });
+ } else if (Object.getOwnPropertyDescriptors) {
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+ } else {
+ ownKeys(Object(source)).forEach(function(key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ }
+ return target;
+}
+function _typeof(obj) {
+ "@babel/helpers - typeof";
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof = function(obj2) {
+ return typeof obj2;
+ };
+ } else {
+ _typeof = function(obj2) {
+ return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
+ };
+ }
+ return _typeof(obj);
+}
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+function _extends() {
+ _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+ return _extends.apply(this, arguments);
+}
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null)
+ return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0)
+ continue;
+ target[key] = source[key];
+ }
+ return target;
+}
+function _objectWithoutProperties(source, excluded) {
+ if (source == null)
+ return {};
+ var target = _objectWithoutPropertiesLoose(source, excluded);
+ var key, i;
+ if (Object.getOwnPropertySymbols) {
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
+ key = sourceSymbolKeys[i];
+ if (excluded.indexOf(key) >= 0)
+ continue;
+ if (!Object.prototype.propertyIsEnumerable.call(source, key))
+ continue;
+ target[key] = source[key];
+ }
+ }
+ return target;
+}
+var version = "1.15.6";
+function userAgent(pattern) {
+ if (typeof window !== "undefined" && window.navigator) {
+ return !!/* @__PURE__ */ navigator.userAgent.match(pattern);
+ }
+}
+var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
+var Edge = userAgent(/Edge/i);
+var FireFox = userAgent(/firefox/i);
+var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
+var IOS = userAgent(/iP(ad|od|hone)/i);
+var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);
+var captureMode = {
+ capture: false,
+ passive: false
+};
+function on(el, event, fn) {
+ el.addEventListener(event, fn, !IE11OrLess && captureMode);
+}
+function off(el, event, fn) {
+ el.removeEventListener(event, fn, !IE11OrLess && captureMode);
+}
+function matches(el, selector) {
+ if (!selector)
+ return;
+ selector[0] === ">" && (selector = selector.substring(1));
+ if (el) {
+ try {
+ if (el.matches) {
+ return el.matches(selector);
+ } else if (el.msMatchesSelector) {
+ return el.msMatchesSelector(selector);
+ } else if (el.webkitMatchesSelector) {
+ return el.webkitMatchesSelector(selector);
+ }
+ } catch (_) {
+ return false;
+ }
+ }
+ return false;
+}
+function getParentOrHost(el) {
+ return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
+}
+function closest(el, selector, ctx, includeCTX) {
+ if (el) {
+ ctx = ctx || document;
+ do {
+ if (selector != null && (selector[0] === ">" ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
+ return el;
+ }
+ if (el === ctx)
+ break;
+ } while (el = getParentOrHost(el));
+ }
+ return null;
+}
+var R_SPACE = /\s+/g;
+function toggleClass(el, name, state) {
+ if (el && name) {
+ if (el.classList) {
+ el.classList[state ? "add" : "remove"](name);
+ } else {
+ var className = (" " + el.className + " ").replace(R_SPACE, " ").replace(" " + name + " ", " ");
+ el.className = (className + (state ? " " + name : "")).replace(R_SPACE, " ");
+ }
+ }
+}
+function css(el, prop, val) {
+ var style = el && el.style;
+ if (style) {
+ if (val === void 0) {
+ if (document.defaultView && document.defaultView.getComputedStyle) {
+ val = document.defaultView.getComputedStyle(el, "");
+ } else if (el.currentStyle) {
+ val = el.currentStyle;
+ }
+ return prop === void 0 ? val : val[prop];
+ } else {
+ if (!(prop in style) && prop.indexOf("webkit") === -1) {
+ prop = "-webkit-" + prop;
+ }
+ style[prop] = val + (typeof val === "string" ? "" : "px");
+ }
+ }
+}
+function matrix(el, selfOnly) {
+ var appliedTransforms = "";
+ if (typeof el === "string") {
+ appliedTransforms = el;
+ } else {
+ do {
+ var transform = css(el, "transform");
+ if (transform && transform !== "none") {
+ appliedTransforms = transform + " " + appliedTransforms;
+ }
+ } while (!selfOnly && (el = el.parentNode));
+ }
+ var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
+ return matrixFn && new matrixFn(appliedTransforms);
+}
+function find(ctx, tagName, iterator) {
+ if (ctx) {
+ var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;
+ if (iterator) {
+ for (; i < n; i++) {
+ iterator(list[i], i);
+ }
+ }
+ return list;
+ }
+ return [];
+}
+function getWindowScrollingElement() {
+ var scrollingElement = document.scrollingElement;
+ if (scrollingElement) {
+ return scrollingElement;
+ } else {
+ return document.documentElement;
+ }
+}
+function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
+ if (!el.getBoundingClientRect && el !== window)
+ return;
+ var elRect, top, left, bottom, right, height, width;
+ if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {
+ elRect = el.getBoundingClientRect();
+ top = elRect.top;
+ left = elRect.left;
+ bottom = elRect.bottom;
+ right = elRect.right;
+ height = elRect.height;
+ width = elRect.width;
+ } else {
+ top = 0;
+ left = 0;
+ bottom = window.innerHeight;
+ right = window.innerWidth;
+ height = window.innerHeight;
+ width = window.innerWidth;
+ }
+ if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
+ container = container || el.parentNode;
+ if (!IE11OrLess) {
+ do {
+ if (container && container.getBoundingClientRect && (css(container, "transform") !== "none" || relativeToNonStaticParent && css(container, "position") !== "static")) {
+ var containerRect = container.getBoundingClientRect();
+ top -= containerRect.top + parseInt(css(container, "border-top-width"));
+ left -= containerRect.left + parseInt(css(container, "border-left-width"));
+ bottom = top + elRect.height;
+ right = left + elRect.width;
+ break;
+ }
+ } while (container = container.parentNode);
+ }
+ }
+ if (undoScale && el !== window) {
+ var elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d;
+ if (elMatrix) {
+ top /= scaleY;
+ left /= scaleX;
+ width /= scaleX;
+ height /= scaleY;
+ bottom = top + height;
+ right = left + width;
+ }
+ }
+ return {
+ top,
+ left,
+ bottom,
+ right,
+ width,
+ height
+ };
+}
+function isScrolledPast(el, elSide, parentSide) {
+ var parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide];
+ while (parent) {
+ var parentSideVal = getRect(parent)[parentSide], visible = void 0;
+ if (parentSide === "top" || parentSide === "left") {
+ visible = elSideVal >= parentSideVal;
+ } else {
+ visible = elSideVal <= parentSideVal;
+ }
+ if (!visible)
+ return parent;
+ if (parent === getWindowScrollingElement())
+ break;
+ parent = getParentAutoScrollElement(parent, false);
+ }
+ return false;
+}
+function getChild(el, childNum, options, includeDragEl) {
+ var currentChild = 0, i = 0, children2 = el.children;
+ while (i < children2.length) {
+ if (children2[i].style.display !== "none" && children2[i] !== Sortable.ghost && (includeDragEl || children2[i] !== Sortable.dragged) && closest(children2[i], options.draggable, el, false)) {
+ if (currentChild === childNum) {
+ return children2[i];
+ }
+ currentChild++;
+ }
+ i++;
+ }
+ return null;
+}
+function lastChild(el, selector) {
+ var last = el.lastElementChild;
+ while (last && (last === Sortable.ghost || css(last, "display") === "none" || selector && !matches(last, selector))) {
+ last = last.previousElementSibling;
+ }
+ return last || null;
+}
+function index(el, selector) {
+ var index2 = 0;
+ if (!el || !el.parentNode) {
+ return -1;
+ }
+ while (el = el.previousElementSibling) {
+ if (el.nodeName.toUpperCase() !== "TEMPLATE" && el !== Sortable.clone && (!selector || matches(el, selector))) {
+ index2++;
+ }
+ }
+ return index2;
+}
+function getRelativeScrollOffset(el) {
+ var offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement();
+ if (el) {
+ do {
+ var elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d;
+ offsetLeft += el.scrollLeft * scaleX;
+ offsetTop += el.scrollTop * scaleY;
+ } while (el !== winScroller && (el = el.parentNode));
+ }
+ return [offsetLeft, offsetTop];
+}
+function indexOfObject(arr, obj) {
+ for (var i in arr) {
+ if (!arr.hasOwnProperty(i))
+ continue;
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key) && obj[key] === arr[i][key])
+ return Number(i);
+ }
+ }
+ return -1;
+}
+function getParentAutoScrollElement(el, includeSelf) {
+ if (!el || !el.getBoundingClientRect)
+ return getWindowScrollingElement();
+ var elem = el;
+ var gotSelf = false;
+ do {
+ if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
+ var elemCSS = css(elem);
+ if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll") || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) {
+ if (!elem.getBoundingClientRect || elem === document.body)
+ return getWindowScrollingElement();
+ if (gotSelf || includeSelf)
+ return elem;
+ gotSelf = true;
+ }
+ }
+ } while (elem = elem.parentNode);
+ return getWindowScrollingElement();
+}
+function extend(dst, src) {
+ if (dst && src) {
+ for (var key in src) {
+ if (src.hasOwnProperty(key)) {
+ dst[key] = src[key];
+ }
+ }
+ }
+ return dst;
+}
+function isRectEqual(rect1, rect2) {
+ return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
+}
+var _throttleTimeout;
+function throttle(callback, ms) {
+ return function() {
+ if (!_throttleTimeout) {
+ var args = arguments, _this = this;
+ if (args.length === 1) {
+ callback.call(_this, args[0]);
+ } else {
+ callback.apply(_this, args);
+ }
+ _throttleTimeout = setTimeout(function() {
+ _throttleTimeout = void 0;
+ }, ms);
+ }
+ };
+}
+function cancelThrottle() {
+ clearTimeout(_throttleTimeout);
+ _throttleTimeout = void 0;
+}
+function scrollBy(el, x, y) {
+ el.scrollLeft += x;
+ el.scrollTop += y;
+}
+function clone(el) {
+ var Polymer = window.Polymer;
+ var $ = window.jQuery || window.Zepto;
+ if (Polymer && Polymer.dom) {
+ return Polymer.dom(el).cloneNode(true);
+ } else if ($) {
+ return $(el).clone(true)[0];
+ } else {
+ return el.cloneNode(true);
+ }
+}
+function getChildContainingRectFromElement(container, options, ghostEl2) {
+ var rect = {};
+ Array.from(container.children).forEach(function(child) {
+ var _rect$left, _rect$top, _rect$right, _rect$bottom;
+ if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl2)
+ return;
+ var childRect = getRect(child);
+ rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);
+ rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);
+ rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);
+ rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);
+ });
+ rect.width = rect.right - rect.left;
+ rect.height = rect.bottom - rect.top;
+ rect.x = rect.left;
+ rect.y = rect.top;
+ return rect;
+}
+var expando = "Sortable" + new Date().getTime();
+function AnimationStateManager() {
+ var animationStates = [], animationCallbackId;
+ return {
+ captureAnimationState: function captureAnimationState() {
+ animationStates = [];
+ if (!this.options.animation)
+ return;
+ var children2 = [].slice.call(this.el.children);
+ children2.forEach(function(child) {
+ if (css(child, "display") === "none" || child === Sortable.ghost)
+ return;
+ animationStates.push({
+ target: child,
+ rect: getRect(child)
+ });
+ var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);
+ if (child.thisAnimationDuration) {
+ var childMatrix = matrix(child, true);
+ if (childMatrix) {
+ fromRect.top -= childMatrix.f;
+ fromRect.left -= childMatrix.e;
+ }
+ }
+ child.fromRect = fromRect;
+ });
+ },
+ addAnimationState: function addAnimationState(state) {
+ animationStates.push(state);
+ },
+ removeAnimationState: function removeAnimationState(target) {
+ animationStates.splice(indexOfObject(animationStates, {
+ target
+ }), 1);
+ },
+ animateAll: function animateAll(callback) {
+ var _this = this;
+ if (!this.options.animation) {
+ clearTimeout(animationCallbackId);
+ if (typeof callback === "function")
+ callback();
+ return;
+ }
+ var animating = false, animationTime = 0;
+ animationStates.forEach(function(state) {
+ var time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), prevFromRect = target.prevFromRect, prevToRect = target.prevToRect, animatingRect = state.rect, targetMatrix = matrix(target, true);
+ if (targetMatrix) {
+ toRect.top -= targetMatrix.f;
+ toRect.left -= targetMatrix.e;
+ }
+ target.toRect = toRect;
+ if (target.thisAnimationDuration) {
+ if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect
+ (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
+ time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
+ }
+ }
+ if (!isRectEqual(toRect, fromRect)) {
+ target.prevFromRect = fromRect;
+ target.prevToRect = toRect;
+ if (!time) {
+ time = _this.options.animation;
+ }
+ _this.animate(target, animatingRect, toRect, time);
+ }
+ if (time) {
+ animating = true;
+ animationTime = Math.max(animationTime, time);
+ clearTimeout(target.animationResetTimer);
+ target.animationResetTimer = setTimeout(function() {
+ target.animationTime = 0;
+ target.prevFromRect = null;
+ target.fromRect = null;
+ target.prevToRect = null;
+ target.thisAnimationDuration = null;
+ }, time);
+ target.thisAnimationDuration = time;
+ }
+ });
+ clearTimeout(animationCallbackId);
+ if (!animating) {
+ if (typeof callback === "function")
+ callback();
+ } else {
+ animationCallbackId = setTimeout(function() {
+ if (typeof callback === "function")
+ callback();
+ }, animationTime);
+ }
+ animationStates = [];
+ },
+ animate: function animate(target, currentRect, toRect, duration) {
+ if (duration) {
+ css(target, "transition", "");
+ css(target, "transform", "");
+ var elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), translateY = (currentRect.top - toRect.top) / (scaleY || 1);
+ target.animatingX = !!translateX;
+ target.animatingY = !!translateY;
+ css(target, "transform", "translate3d(" + translateX + "px," + translateY + "px,0)");
+ this.forRepaintDummy = repaint(target);
+ css(target, "transition", "transform " + duration + "ms" + (this.options.easing ? " " + this.options.easing : ""));
+ css(target, "transform", "translate3d(0,0,0)");
+ typeof target.animated === "number" && clearTimeout(target.animated);
+ target.animated = setTimeout(function() {
+ css(target, "transition", "");
+ css(target, "transform", "");
+ target.animated = false;
+ target.animatingX = false;
+ target.animatingY = false;
+ }, duration);
+ }
+ }
+ };
+}
+function repaint(target) {
+ return target.offsetWidth;
+}
+function calculateRealTime(animatingRect, fromRect, toRect, options) {
+ return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
+}
+var plugins = [];
+var defaults = {
+ initializeByDefault: true
+};
+var PluginManager = {
+ mount: function mount(plugin) {
+ for (var option2 in defaults) {
+ if (defaults.hasOwnProperty(option2) && !(option2 in plugin)) {
+ plugin[option2] = defaults[option2];
+ }
+ }
+ plugins.forEach(function(p) {
+ if (p.pluginName === plugin.pluginName) {
+ throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once");
+ }
+ });
+ plugins.push(plugin);
+ },
+ pluginEvent: function pluginEvent(eventName, sortable, evt) {
+ var _this = this;
+ this.eventCanceled = false;
+ evt.cancel = function() {
+ _this.eventCanceled = true;
+ };
+ var eventNameGlobal = eventName + "Global";
+ plugins.forEach(function(plugin) {
+ if (!sortable[plugin.pluginName])
+ return;
+ if (sortable[plugin.pluginName][eventNameGlobal]) {
+ sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({
+ sortable
+ }, evt));
+ }
+ if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
+ sortable[plugin.pluginName][eventName](_objectSpread2({
+ sortable
+ }, evt));
+ }
+ });
+ },
+ initializePlugins: function initializePlugins(sortable, el, defaults2, options) {
+ plugins.forEach(function(plugin) {
+ var pluginName = plugin.pluginName;
+ if (!sortable.options[pluginName] && !plugin.initializeByDefault)
+ return;
+ var initialized = new plugin(sortable, el, sortable.options);
+ initialized.sortable = sortable;
+ initialized.options = sortable.options;
+ sortable[pluginName] = initialized;
+ _extends(defaults2, initialized.defaults);
+ });
+ for (var option2 in sortable.options) {
+ if (!sortable.options.hasOwnProperty(option2))
+ continue;
+ var modified = this.modifyOption(sortable, option2, sortable.options[option2]);
+ if (typeof modified !== "undefined") {
+ sortable.options[option2] = modified;
+ }
+ }
+ },
+ getEventProperties: function getEventProperties(name, sortable) {
+ var eventProperties = {};
+ plugins.forEach(function(plugin) {
+ if (typeof plugin.eventProperties !== "function")
+ return;
+ _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
+ });
+ return eventProperties;
+ },
+ modifyOption: function modifyOption(sortable, name, value) {
+ var modifiedValue;
+ plugins.forEach(function(plugin) {
+ if (!sortable[plugin.pluginName])
+ return;
+ if (plugin.optionListeners && typeof plugin.optionListeners[name] === "function") {
+ modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
+ }
+ });
+ return modifiedValue;
+ }
+};
+function dispatchEvent(_ref) {
+ var sortable = _ref.sortable, rootEl2 = _ref.rootEl, name = _ref.name, targetEl = _ref.targetEl, cloneEl2 = _ref.cloneEl, toEl = _ref.toEl, fromEl = _ref.fromEl, oldIndex2 = _ref.oldIndex, newIndex2 = _ref.newIndex, oldDraggableIndex2 = _ref.oldDraggableIndex, newDraggableIndex2 = _ref.newDraggableIndex, originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, extraEventProperties = _ref.extraEventProperties;
+ sortable = sortable || rootEl2 && rootEl2[expando];
+ if (!sortable)
+ return;
+ var evt, options = sortable.options, onName = "on" + name.charAt(0).toUpperCase() + name.substr(1);
+ if (window.CustomEvent && !IE11OrLess && !Edge) {
+ evt = new CustomEvent(name, {
+ bubbles: true,
+ cancelable: true
+ });
+ } else {
+ evt = document.createEvent("Event");
+ evt.initEvent(name, true, true);
+ }
+ evt.to = toEl || rootEl2;
+ evt.from = fromEl || rootEl2;
+ evt.item = targetEl || rootEl2;
+ evt.clone = cloneEl2;
+ evt.oldIndex = oldIndex2;
+ evt.newIndex = newIndex2;
+ evt.oldDraggableIndex = oldDraggableIndex2;
+ evt.newDraggableIndex = newDraggableIndex2;
+ evt.originalEvent = originalEvent;
+ evt.pullMode = putSortable2 ? putSortable2.lastPutMode : void 0;
+ var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));
+ for (var option2 in allEventProperties) {
+ evt[option2] = allEventProperties[option2];
+ }
+ if (rootEl2) {
+ rootEl2.dispatchEvent(evt);
+ }
+ if (options[onName]) {
+ options[onName].call(sortable, evt);
+ }
+}
+var _excluded = ["evt"];
+var pluginEvent2 = function pluginEvent3(eventName, sortable) {
+ var _ref = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, originalEvent = _ref.evt, data = _objectWithoutProperties(_ref, _excluded);
+ PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({
+ dragEl,
+ parentEl,
+ ghostEl,
+ rootEl,
+ nextEl,
+ lastDownEl,
+ cloneEl,
+ cloneHidden,
+ dragStarted: moved,
+ putSortable,
+ activeSortable: Sortable.active,
+ originalEvent,
+ oldIndex,
+ oldDraggableIndex,
+ newIndex,
+ newDraggableIndex,
+ hideGhostForTarget: _hideGhostForTarget,
+ unhideGhostForTarget: _unhideGhostForTarget,
+ cloneNowHidden: function cloneNowHidden() {
+ cloneHidden = true;
+ },
+ cloneNowShown: function cloneNowShown() {
+ cloneHidden = false;
+ },
+ dispatchSortableEvent: function dispatchSortableEvent(name) {
+ _dispatchEvent({
+ sortable,
+ name,
+ originalEvent
+ });
+ }
+ }, data));
+};
+function _dispatchEvent(info2) {
+ dispatchEvent(_objectSpread2({
+ putSortable,
+ cloneEl,
+ targetEl: dragEl,
+ rootEl,
+ oldIndex,
+ oldDraggableIndex,
+ newIndex,
+ newDraggableIndex
+ }, info2));
+}
+var dragEl;
+var parentEl;
+var ghostEl;
+var rootEl;
+var nextEl;
+var lastDownEl;
+var cloneEl;
+var cloneHidden;
+var oldIndex;
+var newIndex;
+var oldDraggableIndex;
+var newDraggableIndex;
+var activeGroup;
+var putSortable;
+var awaitingDragStarted = false;
+var ignoreNextClick = false;
+var sortables = [];
+var tapEvt;
+var touchEvt;
+var lastDx;
+var lastDy;
+var tapDistanceLeft;
+var tapDistanceTop;
+var moved;
+var lastTarget;
+var lastDirection;
+var pastFirstInvertThresh = false;
+var isCircumstantialInvert = false;
+var targetMoveDistance;
+var ghostRelativeParent;
+var ghostRelativeParentInitialScroll = [];
+var _silent = false;
+var savedInputChecked = [];
+var documentExists = typeof document !== "undefined";
+var PositionGhostAbsolutely = IOS;
+var CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float";
+var supportDraggable = documentExists && !ChromeForAndroid && !IOS && "draggable" in document.createElement("div");
+var supportCssPointerEvents = function() {
+ if (!documentExists)
+ return;
+ if (IE11OrLess) {
+ return false;
+ }
+ var el = document.createElement("x");
+ el.style.cssText = "pointer-events:auto";
+ return el.style.pointerEvents === "auto";
+}();
+var _detectDirection = function _detectDirection2(el, options) {
+ var elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;
+ if (elCSS.display === "flex") {
+ return elCSS.flexDirection === "column" || elCSS.flexDirection === "column-reverse" ? "vertical" : "horizontal";
+ }
+ if (elCSS.display === "grid") {
+ return elCSS.gridTemplateColumns.split(" ").length <= 1 ? "vertical" : "horizontal";
+ }
+ if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== "none") {
+ var touchingSideChild2 = firstChildCSS["float"] === "left" ? "left" : "right";
+ return child2 && (secondChildCSS.clear === "both" || secondChildCSS.clear === touchingSideChild2) ? "vertical" : "horizontal";
+ }
+ return child1 && (firstChildCSS.display === "block" || firstChildCSS.display === "flex" || firstChildCSS.display === "table" || firstChildCSS.display === "grid" || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none" || child2 && elCSS[CSSFloatProperty] === "none" && firstChildWidth + secondChildWidth > elWidth) ? "vertical" : "horizontal";
+};
+var _dragElInRowColumn = function _dragElInRowColumn2(dragRect, targetRect, vertical) {
+ var dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height;
+ return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
+};
+var _detectNearestEmptySortable = function _detectNearestEmptySortable2(x, y) {
+ var ret;
+ sortables.some(function(sortable) {
+ var threshold = sortable[expando].options.emptyInsertThreshold;
+ if (!threshold || lastChild(sortable))
+ return;
+ var rect = getRect(sortable), insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;
+ if (insideHorizontally && insideVertically) {
+ return ret = sortable;
+ }
+ });
+ return ret;
+};
+var _prepareGroup = function _prepareGroup2(options) {
+ function toFn(value, pull) {
+ return function(to, from, dragEl2, evt) {
+ var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;
+ if (value == null && (pull || sameGroup)) {
+ return true;
+ } else if (value == null || value === false) {
+ return false;
+ } else if (pull && value === "clone") {
+ return value;
+ } else if (typeof value === "function") {
+ return toFn(value(to, from, dragEl2, evt), pull)(to, from, dragEl2, evt);
+ } else {
+ var otherGroup = (pull ? to : from).options.group.name;
+ return value === true || typeof value === "string" && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
+ }
+ };
+ }
+ var group = {};
+ var originalGroup = options.group;
+ if (!originalGroup || _typeof(originalGroup) != "object") {
+ originalGroup = {
+ name: originalGroup
+ };
+ }
+ group.name = originalGroup.name;
+ group.checkPull = toFn(originalGroup.pull, true);
+ group.checkPut = toFn(originalGroup.put);
+ group.revertClone = originalGroup.revertClone;
+ options.group = group;
+};
+var _hideGhostForTarget = function _hideGhostForTarget2() {
+ if (!supportCssPointerEvents && ghostEl) {
+ css(ghostEl, "display", "none");
+ }
+};
+var _unhideGhostForTarget = function _unhideGhostForTarget2() {
+ if (!supportCssPointerEvents && ghostEl) {
+ css(ghostEl, "display", "");
+ }
+};
+if (documentExists && !ChromeForAndroid) {
+ document.addEventListener("click", function(evt) {
+ if (ignoreNextClick) {
+ evt.preventDefault();
+ evt.stopPropagation && evt.stopPropagation();
+ evt.stopImmediatePropagation && evt.stopImmediatePropagation();
+ ignoreNextClick = false;
+ return false;
+ }
+ }, true);
+}
+var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent2(evt) {
+ if (dragEl) {
+ evt = evt.touches ? evt.touches[0] : evt;
+ var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);
+ if (nearest) {
+ var event = {};
+ for (var i in evt) {
+ if (evt.hasOwnProperty(i)) {
+ event[i] = evt[i];
+ }
+ }
+ event.target = event.rootEl = nearest;
+ event.preventDefault = void 0;
+ event.stopPropagation = void 0;
+ nearest[expando]._onDragOver(event);
+ }
+ }
+};
+var _checkOutsideTargetEl = function _checkOutsideTargetEl2(evt) {
+ if (dragEl) {
+ dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
+ }
+};
+function Sortable(el, options) {
+ if (!(el && el.nodeType && el.nodeType === 1)) {
+ throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
+ }
+ this.el = el;
+ this.options = options = _extends({}, options);
+ el[expando] = this;
+ var defaults2 = {
+ group: null,
+ sort: true,
+ disabled: false,
+ store: null,
+ handle: null,
+ draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*",
+ swapThreshold: 1,
+ // percentage; 0 <= x <= 1
+ invertSwap: false,
+ // invert always
+ invertedSwapThreshold: null,
+ // will be set to same as swapThreshold if default
+ removeCloneOnHide: true,
+ direction: function direction() {
+ return _detectDirection(el, this.options);
+ },
+ ghostClass: "sortable-ghost",
+ chosenClass: "sortable-chosen",
+ dragClass: "sortable-drag",
+ ignore: "a, img",
+ filter: null,
+ preventOnFilter: true,
+ animation: 0,
+ easing: null,
+ setData: function setData(dataTransfer, dragEl2) {
+ dataTransfer.setData("Text", dragEl2.textContent);
+ },
+ dropBubble: false,
+ dragoverBubble: false,
+ dataIdAttr: "data-id",
+ delay: 0,
+ delayOnTouchOnly: false,
+ touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
+ forceFallback: false,
+ fallbackClass: "sortable-fallback",
+ fallbackOnBody: false,
+ fallbackTolerance: 0,
+ fallbackOffset: {
+ x: 0,
+ y: 0
+ },
+ // Disabled on Safari: #1571; Enabled on Safari IOS: #2244
+ supportPointer: Sortable.supportPointer !== false && "PointerEvent" in window && (!Safari || IOS),
+ emptyInsertThreshold: 5
+ };
+ PluginManager.initializePlugins(this, el, defaults2);
+ for (var name in defaults2) {
+ !(name in options) && (options[name] = defaults2[name]);
+ }
+ _prepareGroup(options);
+ for (var fn in this) {
+ if (fn.charAt(0) === "_" && typeof this[fn] === "function") {
+ this[fn] = this[fn].bind(this);
+ }
+ }
+ this.nativeDraggable = options.forceFallback ? false : supportDraggable;
+ if (this.nativeDraggable) {
+ this.options.touchStartThreshold = 1;
+ }
+ if (options.supportPointer) {
+ on(el, "pointerdown", this._onTapStart);
+ } else {
+ on(el, "mousedown", this._onTapStart);
+ on(el, "touchstart", this._onTapStart);
+ }
+ if (this.nativeDraggable) {
+ on(el, "dragover", this);
+ on(el, "dragenter", this);
+ }
+ sortables.push(this.el);
+ options.store && options.store.get && this.sort(options.store.get(this) || []);
+ _extends(this, AnimationStateManager());
+}
+Sortable.prototype = /** @lends Sortable.prototype */
+{
+ constructor: Sortable,
+ _isOutsideThisEl: function _isOutsideThisEl(target) {
+ if (!this.el.contains(target) && target !== this.el) {
+ lastTarget = null;
+ }
+ },
+ _getDirection: function _getDirection(evt, target) {
+ return typeof this.options.direction === "function" ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
+ },
+ _onTapStart: function _onTapStart(evt) {
+ if (!evt.cancelable)
+ return;
+ var _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, type = evt.type, touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === "touch" && evt, target = (touch || evt).target, originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, filter = options.filter;
+ _saveInputCheckedState(el);
+ if (dragEl) {
+ return;
+ }
+ if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
+ return;
+ }
+ if (originalTarget.isContentEditable) {
+ return;
+ }
+ if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === "SELECT") {
+ return;
+ }
+ target = closest(target, options.draggable, el, false);
+ if (target && target.animated) {
+ return;
+ }
+ if (lastDownEl === target) {
+ return;
+ }
+ oldIndex = index(target);
+ oldDraggableIndex = index(target, options.draggable);
+ if (typeof filter === "function") {
+ if (filter.call(this, evt, target, this)) {
+ _dispatchEvent({
+ sortable: _this,
+ rootEl: originalTarget,
+ name: "filter",
+ targetEl: target,
+ toEl: el,
+ fromEl: el
+ });
+ pluginEvent2("filter", _this, {
+ evt
+ });
+ preventOnFilter && evt.preventDefault();
+ return;
+ }
+ } else if (filter) {
+ filter = filter.split(",").some(function(criteria) {
+ criteria = closest(originalTarget, criteria.trim(), el, false);
+ if (criteria) {
+ _dispatchEvent({
+ sortable: _this,
+ rootEl: criteria,
+ name: "filter",
+ targetEl: target,
+ fromEl: el,
+ toEl: el
+ });
+ pluginEvent2("filter", _this, {
+ evt
+ });
+ return true;
+ }
+ });
+ if (filter) {
+ preventOnFilter && evt.preventDefault();
+ return;
+ }
+ }
+ if (options.handle && !closest(originalTarget, options.handle, el, false)) {
+ return;
+ }
+ this._prepareDragStart(evt, touch, target);
+ },
+ _prepareDragStart: function _prepareDragStart(evt, touch, target) {
+ var _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn;
+ if (target && !dragEl && target.parentNode === el) {
+ var dragRect = getRect(target);
+ rootEl = el;
+ dragEl = target;
+ parentEl = dragEl.parentNode;
+ nextEl = dragEl.nextSibling;
+ lastDownEl = target;
+ activeGroup = options.group;
+ Sortable.dragged = dragEl;
+ tapEvt = {
+ target: dragEl,
+ clientX: (touch || evt).clientX,
+ clientY: (touch || evt).clientY
+ };
+ tapDistanceLeft = tapEvt.clientX - dragRect.left;
+ tapDistanceTop = tapEvt.clientY - dragRect.top;
+ this._lastX = (touch || evt).clientX;
+ this._lastY = (touch || evt).clientY;
+ dragEl.style["will-change"] = "all";
+ dragStartFn = function dragStartFn2() {
+ pluginEvent2("delayEnded", _this, {
+ evt
+ });
+ if (Sortable.eventCanceled) {
+ _this._onDrop();
+ return;
+ }
+ _this._disableDelayedDragEvents();
+ if (!FireFox && _this.nativeDraggable) {
+ dragEl.draggable = true;
+ }
+ _this._triggerDragStart(evt, touch);
+ _dispatchEvent({
+ sortable: _this,
+ name: "choose",
+ originalEvent: evt
+ });
+ toggleClass(dragEl, options.chosenClass, true);
+ };
+ options.ignore.split(",").forEach(function(criteria) {
+ find(dragEl, criteria.trim(), _disableDraggable);
+ });
+ on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent);
+ if (options.supportPointer) {
+ on(ownerDocument, "pointerup", _this._onDrop);
+ !this.nativeDraggable && on(ownerDocument, "pointercancel", _this._onDrop);
+ } else {
+ on(ownerDocument, "mouseup", _this._onDrop);
+ on(ownerDocument, "touchend", _this._onDrop);
+ on(ownerDocument, "touchcancel", _this._onDrop);
+ }
+ if (FireFox && this.nativeDraggable) {
+ this.options.touchStartThreshold = 4;
+ dragEl.draggable = true;
+ }
+ pluginEvent2("delayStart", this, {
+ evt
+ });
+ if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
+ if (Sortable.eventCanceled) {
+ this._onDrop();
+ return;
+ }
+ if (options.supportPointer) {
+ on(ownerDocument, "pointerup", _this._disableDelayedDrag);
+ on(ownerDocument, "pointercancel", _this._disableDelayedDrag);
+ } else {
+ on(ownerDocument, "mouseup", _this._disableDelayedDrag);
+ on(ownerDocument, "touchend", _this._disableDelayedDrag);
+ on(ownerDocument, "touchcancel", _this._disableDelayedDrag);
+ }
+ on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler);
+ on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler);
+ options.supportPointer && on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler);
+ _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
+ } else {
+ dragStartFn();
+ }
+ }
+ },
+ _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(e) {
+ var touch = e.touches ? e.touches[0] : e;
+ if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
+ this._disableDelayedDrag();
+ }
+ },
+ _disableDelayedDrag: function _disableDelayedDrag() {
+ dragEl && _disableDraggable(dragEl);
+ clearTimeout(this._dragStartTimer);
+ this._disableDelayedDragEvents();
+ },
+ _disableDelayedDragEvents: function _disableDelayedDragEvents() {
+ var ownerDocument = this.el.ownerDocument;
+ off(ownerDocument, "mouseup", this._disableDelayedDrag);
+ off(ownerDocument, "touchend", this._disableDelayedDrag);
+ off(ownerDocument, "touchcancel", this._disableDelayedDrag);
+ off(ownerDocument, "pointerup", this._disableDelayedDrag);
+ off(ownerDocument, "pointercancel", this._disableDelayedDrag);
+ off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler);
+ off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler);
+ off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler);
+ },
+ _triggerDragStart: function _triggerDragStart(evt, touch) {
+ touch = touch || evt.pointerType == "touch" && evt;
+ if (!this.nativeDraggable || touch) {
+ if (this.options.supportPointer) {
+ on(document, "pointermove", this._onTouchMove);
+ } else if (touch) {
+ on(document, "touchmove", this._onTouchMove);
+ } else {
+ on(document, "mousemove", this._onTouchMove);
+ }
+ } else {
+ on(dragEl, "dragend", this);
+ on(rootEl, "dragstart", this._onDragStart);
+ }
+ try {
+ if (document.selection) {
+ _nextTick(function() {
+ document.selection.empty();
+ });
+ } else {
+ window.getSelection().removeAllRanges();
+ }
+ } catch (err) {
+ }
+ },
+ _dragStarted: function _dragStarted(fallback, evt) {
+ awaitingDragStarted = false;
+ if (rootEl && dragEl) {
+ pluginEvent2("dragStarted", this, {
+ evt
+ });
+ if (this.nativeDraggable) {
+ on(document, "dragover", _checkOutsideTargetEl);
+ }
+ var options = this.options;
+ !fallback && toggleClass(dragEl, options.dragClass, false);
+ toggleClass(dragEl, options.ghostClass, true);
+ Sortable.active = this;
+ fallback && this._appendGhost();
+ _dispatchEvent({
+ sortable: this,
+ name: "start",
+ originalEvent: evt
+ });
+ } else {
+ this._nulling();
+ }
+ },
+ _emulateDragOver: function _emulateDragOver() {
+ if (touchEvt) {
+ this._lastX = touchEvt.clientX;
+ this._lastY = touchEvt.clientY;
+ _hideGhostForTarget();
+ var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
+ var parent = target;
+ while (target && target.shadowRoot) {
+ target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
+ if (target === parent)
+ break;
+ parent = target;
+ }
+ dragEl.parentNode[expando]._isOutsideThisEl(target);
+ if (parent) {
+ do {
+ if (parent[expando]) {
+ var inserted = void 0;
+ inserted = parent[expando]._onDragOver({
+ clientX: touchEvt.clientX,
+ clientY: touchEvt.clientY,
+ target,
+ rootEl: parent
+ });
+ if (inserted && !this.options.dragoverBubble) {
+ break;
+ }
+ }
+ target = parent;
+ } while (parent = getParentOrHost(parent));
+ }
+ _unhideGhostForTarget();
+ }
+ },
+ _onTouchMove: function _onTouchMove(evt) {
+ if (tapEvt) {
+ var options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, ghostMatrix = ghostEl && matrix(ghostEl, true), scaleX = ghostEl && ghostMatrix && ghostMatrix.a, scaleY = ghostEl && ghostMatrix && ghostMatrix.d, relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);
+ if (!Sortable.active && !awaitingDragStarted) {
+ if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
+ return;
+ }
+ this._onDragStart(evt, true);
+ }
+ if (ghostEl) {
+ if (ghostMatrix) {
+ ghostMatrix.e += dx - (lastDx || 0);
+ ghostMatrix.f += dy - (lastDy || 0);
+ } else {
+ ghostMatrix = {
+ a: 1,
+ b: 0,
+ c: 0,
+ d: 1,
+ e: dx,
+ f: dy
+ };
+ }
+ var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
+ css(ghostEl, "webkitTransform", cssMatrix);
+ css(ghostEl, "mozTransform", cssMatrix);
+ css(ghostEl, "msTransform", cssMatrix);
+ css(ghostEl, "transform", cssMatrix);
+ lastDx = dx;
+ lastDy = dy;
+ touchEvt = touch;
+ }
+ evt.cancelable && evt.preventDefault();
+ }
+ },
+ _appendGhost: function _appendGhost() {
+ if (!ghostEl) {
+ var container = this.options.fallbackOnBody ? document.body : rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options;
+ if (PositionGhostAbsolutely) {
+ ghostRelativeParent = container;
+ while (css(ghostRelativeParent, "position") === "static" && css(ghostRelativeParent, "transform") === "none" && ghostRelativeParent !== document) {
+ ghostRelativeParent = ghostRelativeParent.parentNode;
+ }
+ if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
+ if (ghostRelativeParent === document)
+ ghostRelativeParent = getWindowScrollingElement();
+ rect.top += ghostRelativeParent.scrollTop;
+ rect.left += ghostRelativeParent.scrollLeft;
+ } else {
+ ghostRelativeParent = getWindowScrollingElement();
+ }
+ ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
+ }
+ ghostEl = dragEl.cloneNode(true);
+ toggleClass(ghostEl, options.ghostClass, false);
+ toggleClass(ghostEl, options.fallbackClass, true);
+ toggleClass(ghostEl, options.dragClass, true);
+ css(ghostEl, "transition", "");
+ css(ghostEl, "transform", "");
+ css(ghostEl, "box-sizing", "border-box");
+ css(ghostEl, "margin", 0);
+ css(ghostEl, "top", rect.top);
+ css(ghostEl, "left", rect.left);
+ css(ghostEl, "width", rect.width);
+ css(ghostEl, "height", rect.height);
+ css(ghostEl, "opacity", "0.8");
+ css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed");
+ css(ghostEl, "zIndex", "100000");
+ css(ghostEl, "pointerEvents", "none");
+ Sortable.ghost = ghostEl;
+ container.appendChild(ghostEl);
+ css(ghostEl, "transform-origin", tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + "% " + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + "%");
+ }
+ },
+ _onDragStart: function _onDragStart(evt, fallback) {
+ var _this = this;
+ var dataTransfer = evt.dataTransfer;
+ var options = _this.options;
+ pluginEvent2("dragStart", this, {
+ evt
+ });
+ if (Sortable.eventCanceled) {
+ this._onDrop();
+ return;
+ }
+ pluginEvent2("setupClone", this);
+ if (!Sortable.eventCanceled) {
+ cloneEl = clone(dragEl);
+ cloneEl.removeAttribute("id");
+ cloneEl.draggable = false;
+ cloneEl.style["will-change"] = "";
+ this._hideClone();
+ toggleClass(cloneEl, this.options.chosenClass, false);
+ Sortable.clone = cloneEl;
+ }
+ _this.cloneId = _nextTick(function() {
+ pluginEvent2("clone", _this);
+ if (Sortable.eventCanceled)
+ return;
+ if (!_this.options.removeCloneOnHide) {
+ rootEl.insertBefore(cloneEl, dragEl);
+ }
+ _this._hideClone();
+ _dispatchEvent({
+ sortable: _this,
+ name: "clone"
+ });
+ });
+ !fallback && toggleClass(dragEl, options.dragClass, true);
+ if (fallback) {
+ ignoreNextClick = true;
+ _this._loopId = setInterval(_this._emulateDragOver, 50);
+ } else {
+ off(document, "mouseup", _this._onDrop);
+ off(document, "touchend", _this._onDrop);
+ off(document, "touchcancel", _this._onDrop);
+ if (dataTransfer) {
+ dataTransfer.effectAllowed = "move";
+ options.setData && options.setData.call(_this, dataTransfer, dragEl);
+ }
+ on(document, "drop", _this);
+ css(dragEl, "transform", "translateZ(0)");
+ }
+ awaitingDragStarted = true;
+ _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
+ on(document, "selectstart", _this);
+ moved = true;
+ window.getSelection().removeAllRanges();
+ if (Safari) {
+ css(document.body, "user-select", "none");
+ }
+ },
+ // Returns true - if no further action is needed (either inserted or another condition)
+ _onDragOver: function _onDragOver(evt) {
+ var el = this.el, target = evt.target, dragRect, targetRect, revert, options = this.options, group = options.group, activeSortable = Sortable.active, isOwner = activeGroup === group, canSort = options.sort, fromSortable = putSortable || activeSortable, vertical, _this = this, completedFired = false;
+ if (_silent)
+ return;
+ function dragOverEvent(name, extra) {
+ pluginEvent2(name, _this, _objectSpread2({
+ evt,
+ isOwner,
+ axis: vertical ? "vertical" : "horizontal",
+ revert,
+ dragRect,
+ targetRect,
+ canSort,
+ fromSortable,
+ target,
+ completed,
+ onMove: function onMove(target2, after2) {
+ return _onMove(rootEl, el, dragEl, dragRect, target2, getRect(target2), evt, after2);
+ },
+ changed
+ }, extra));
+ }
+ function capture() {
+ dragOverEvent("dragOverAnimationCapture");
+ _this.captureAnimationState();
+ if (_this !== fromSortable) {
+ fromSortable.captureAnimationState();
+ }
+ }
+ function completed(insertion) {
+ dragOverEvent("dragOverCompleted", {
+ insertion
+ });
+ if (insertion) {
+ if (isOwner) {
+ activeSortable._hideClone();
+ } else {
+ activeSortable._showClone(_this);
+ }
+ if (_this !== fromSortable) {
+ toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
+ toggleClass(dragEl, options.ghostClass, true);
+ }
+ if (putSortable !== _this && _this !== Sortable.active) {
+ putSortable = _this;
+ } else if (_this === Sortable.active && putSortable) {
+ putSortable = null;
+ }
+ if (fromSortable === _this) {
+ _this._ignoreWhileAnimating = target;
+ }
+ _this.animateAll(function() {
+ dragOverEvent("dragOverAnimationComplete");
+ _this._ignoreWhileAnimating = null;
+ });
+ if (_this !== fromSortable) {
+ fromSortable.animateAll();
+ fromSortable._ignoreWhileAnimating = null;
+ }
+ }
+ if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
+ lastTarget = null;
+ }
+ if (!options.dragoverBubble && !evt.rootEl && target !== document) {
+ dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
+ !insertion && nearestEmptyInsertDetectEvent(evt);
+ }
+ !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
+ return completedFired = true;
+ }
+ function changed() {
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ _dispatchEvent({
+ sortable: _this,
+ name: "change",
+ toEl: el,
+ newIndex,
+ newDraggableIndex,
+ originalEvent: evt
+ });
+ }
+ if (evt.preventDefault !== void 0) {
+ evt.cancelable && evt.preventDefault();
+ }
+ target = closest(target, options.draggable, el, true);
+ dragOverEvent("dragOver");
+ if (Sortable.eventCanceled)
+ return completedFired;
+ if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
+ return completed(false);
+ }
+ ignoreNextClick = false;
+ if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
+ vertical = this._getDirection(evt, target) === "vertical";
+ dragRect = getRect(dragEl);
+ dragOverEvent("dragOverValid");
+ if (Sortable.eventCanceled)
+ return completedFired;
+ if (revert) {
+ parentEl = rootEl;
+ capture();
+ this._hideClone();
+ dragOverEvent("revert");
+ if (!Sortable.eventCanceled) {
+ if (nextEl) {
+ rootEl.insertBefore(dragEl, nextEl);
+ } else {
+ rootEl.appendChild(dragEl);
+ }
+ }
+ return completed(true);
+ }
+ var elLastChild = lastChild(el, options.draggable);
+ if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
+ if (elLastChild === dragEl) {
+ return completed(false);
+ }
+ if (elLastChild && el === evt.target) {
+ target = elLastChild;
+ }
+ if (target) {
+ targetRect = getRect(target);
+ }
+ if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
+ capture();
+ if (elLastChild && elLastChild.nextSibling) {
+ el.insertBefore(dragEl, elLastChild.nextSibling);
+ } else {
+ el.appendChild(dragEl);
+ }
+ parentEl = el;
+ changed();
+ return completed(true);
+ }
+ } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {
+ var firstChild = getChild(el, 0, options, true);
+ if (firstChild === dragEl) {
+ return completed(false);
+ }
+ target = firstChild;
+ targetRect = getRect(target);
+ if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {
+ capture();
+ el.insertBefore(dragEl, firstChild);
+ parentEl = el;
+ changed();
+ return completed(true);
+ }
+ } else if (target.parentNode === el) {
+ targetRect = getRect(target);
+ var direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), side1 = vertical ? "top" : "left", scrolledPastTop = isScrolledPast(target, "top", "top") || isScrolledPast(dragEl, "top", "top"), scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;
+ if (lastTarget !== target) {
+ targetBeforeFirstSwap = targetRect[side1];
+ pastFirstInvertThresh = false;
+ isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
+ }
+ direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
+ var sibling;
+ if (direction !== 0) {
+ var dragIndex = index(dragEl);
+ do {
+ dragIndex -= direction;
+ sibling = parentEl.children[dragIndex];
+ } while (sibling && (css(sibling, "display") === "none" || sibling === ghostEl));
+ }
+ if (direction === 0 || sibling === target) {
+ return completed(false);
+ }
+ lastTarget = target;
+ lastDirection = direction;
+ var nextSibling = target.nextElementSibling, after = false;
+ after = direction === 1;
+ var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);
+ if (moveVector !== false) {
+ if (moveVector === 1 || moveVector === -1) {
+ after = moveVector === 1;
+ }
+ _silent = true;
+ setTimeout(_unsilent, 30);
+ capture();
+ if (after && !nextSibling) {
+ el.appendChild(dragEl);
+ } else {
+ target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
+ }
+ if (scrolledPastTop) {
+ scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
+ }
+ parentEl = dragEl.parentNode;
+ if (targetBeforeFirstSwap !== void 0 && !isCircumstantialInvert) {
+ targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
+ }
+ changed();
+ return completed(true);
+ }
+ }
+ if (el.contains(dragEl)) {
+ return completed(false);
+ }
+ }
+ return false;
+ },
+ _ignoreWhileAnimating: null,
+ _offMoveEvents: function _offMoveEvents() {
+ off(document, "mousemove", this._onTouchMove);
+ off(document, "touchmove", this._onTouchMove);
+ off(document, "pointermove", this._onTouchMove);
+ off(document, "dragover", nearestEmptyInsertDetectEvent);
+ off(document, "mousemove", nearestEmptyInsertDetectEvent);
+ off(document, "touchmove", nearestEmptyInsertDetectEvent);
+ },
+ _offUpEvents: function _offUpEvents() {
+ var ownerDocument = this.el.ownerDocument;
+ off(ownerDocument, "mouseup", this._onDrop);
+ off(ownerDocument, "touchend", this._onDrop);
+ off(ownerDocument, "pointerup", this._onDrop);
+ off(ownerDocument, "pointercancel", this._onDrop);
+ off(ownerDocument, "touchcancel", this._onDrop);
+ off(document, "selectstart", this);
+ },
+ _onDrop: function _onDrop(evt) {
+ var el = this.el, options = this.options;
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ pluginEvent2("drop", this, {
+ evt
+ });
+ parentEl = dragEl && dragEl.parentNode;
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ if (Sortable.eventCanceled) {
+ this._nulling();
+ return;
+ }
+ awaitingDragStarted = false;
+ isCircumstantialInvert = false;
+ pastFirstInvertThresh = false;
+ clearInterval(this._loopId);
+ clearTimeout(this._dragStartTimer);
+ _cancelNextTick(this.cloneId);
+ _cancelNextTick(this._dragStartId);
+ if (this.nativeDraggable) {
+ off(document, "drop", this);
+ off(el, "dragstart", this._onDragStart);
+ }
+ this._offMoveEvents();
+ this._offUpEvents();
+ if (Safari) {
+ css(document.body, "user-select", "");
+ }
+ css(dragEl, "transform", "");
+ if (evt) {
+ if (moved) {
+ evt.cancelable && evt.preventDefault();
+ !options.dropBubble && evt.stopPropagation();
+ }
+ ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);
+ if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== "clone") {
+ cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
+ }
+ if (dragEl) {
+ if (this.nativeDraggable) {
+ off(dragEl, "dragend", this);
+ }
+ _disableDraggable(dragEl);
+ dragEl.style["will-change"] = "";
+ if (moved && !awaitingDragStarted) {
+ toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
+ }
+ toggleClass(dragEl, this.options.chosenClass, false);
+ _dispatchEvent({
+ sortable: this,
+ name: "unchoose",
+ toEl: parentEl,
+ newIndex: null,
+ newDraggableIndex: null,
+ originalEvent: evt
+ });
+ if (rootEl !== parentEl) {
+ if (newIndex >= 0) {
+ _dispatchEvent({
+ rootEl: parentEl,
+ name: "add",
+ toEl: parentEl,
+ fromEl: rootEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "remove",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ rootEl: parentEl,
+ name: "sort",
+ toEl: parentEl,
+ fromEl: rootEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "sort",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ }
+ putSortable && putSortable.save();
+ } else {
+ if (newIndex !== oldIndex) {
+ if (newIndex >= 0) {
+ _dispatchEvent({
+ sortable: this,
+ name: "update",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "sort",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ }
+ }
+ }
+ if (Sortable.active) {
+ if (newIndex == null || newIndex === -1) {
+ newIndex = oldIndex;
+ newDraggableIndex = oldDraggableIndex;
+ }
+ _dispatchEvent({
+ sortable: this,
+ name: "end",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ this.save();
+ }
+ }
+ }
+ this._nulling();
+ },
+ _nulling: function _nulling() {
+ pluginEvent2("nulling", this);
+ rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
+ savedInputChecked.forEach(function(el) {
+ el.checked = true;
+ });
+ savedInputChecked.length = lastDx = lastDy = 0;
+ },
+ handleEvent: function handleEvent(evt) {
+ switch (evt.type) {
+ case "drop":
+ case "dragend":
+ this._onDrop(evt);
+ break;
+ case "dragenter":
+ case "dragover":
+ if (dragEl) {
+ this._onDragOver(evt);
+ _globalDragOver(evt);
+ }
+ break;
+ case "selectstart":
+ evt.preventDefault();
+ break;
+ }
+ },
+ /**
+ * Serializes the item into an array of string.
+ * @returns {String[]}
+ */
+ toArray: function toArray() {
+ var order = [], el, children2 = this.el.children, i = 0, n = children2.length, options = this.options;
+ for (; i < n; i++) {
+ el = children2[i];
+ if (closest(el, options.draggable, this.el, false)) {
+ order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
+ }
+ }
+ return order;
+ },
+ /**
+ * Sorts the elements according to the array.
+ * @param {String[]} order order of the items
+ */
+ sort: function sort(order, useAnimation) {
+ var items = {}, rootEl2 = this.el;
+ this.toArray().forEach(function(id, i) {
+ var el = rootEl2.children[i];
+ if (closest(el, this.options.draggable, rootEl2, false)) {
+ items[id] = el;
+ }
+ }, this);
+ useAnimation && this.captureAnimationState();
+ order.forEach(function(id) {
+ if (items[id]) {
+ rootEl2.removeChild(items[id]);
+ rootEl2.appendChild(items[id]);
+ }
+ });
+ useAnimation && this.animateAll();
+ },
+ /**
+ * Save the current sorting
+ */
+ save: function save() {
+ var store = this.options.store;
+ store && store.set && store.set(this);
+ },
+ /**
+ * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+ * @param {HTMLElement} el
+ * @param {String} [selector] default: `options.draggable`
+ * @returns {HTMLElement|null}
+ */
+ closest: function closest$1(el, selector) {
+ return closest(el, selector || this.options.draggable, this.el, false);
+ },
+ /**
+ * Set/get option
+ * @param {string} name
+ * @param {*} [value]
+ * @returns {*}
+ */
+ option: function option(name, value) {
+ var options = this.options;
+ if (value === void 0) {
+ return options[name];
+ } else {
+ var modifiedValue = PluginManager.modifyOption(this, name, value);
+ if (typeof modifiedValue !== "undefined") {
+ options[name] = modifiedValue;
+ } else {
+ options[name] = value;
+ }
+ if (name === "group") {
+ _prepareGroup(options);
+ }
+ }
+ },
+ /**
+ * Destroy
+ */
+ destroy: function destroy() {
+ pluginEvent2("destroy", this);
+ var el = this.el;
+ el[expando] = null;
+ off(el, "mousedown", this._onTapStart);
+ off(el, "touchstart", this._onTapStart);
+ off(el, "pointerdown", this._onTapStart);
+ if (this.nativeDraggable) {
+ off(el, "dragover", this);
+ off(el, "dragenter", this);
+ }
+ Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function(el2) {
+ el2.removeAttribute("draggable");
+ });
+ this._onDrop();
+ this._disableDelayedDragEvents();
+ sortables.splice(sortables.indexOf(this.el), 1);
+ this.el = el = null;
+ },
+ _hideClone: function _hideClone() {
+ if (!cloneHidden) {
+ pluginEvent2("hideClone", this);
+ if (Sortable.eventCanceled)
+ return;
+ css(cloneEl, "display", "none");
+ if (this.options.removeCloneOnHide && cloneEl.parentNode) {
+ cloneEl.parentNode.removeChild(cloneEl);
+ }
+ cloneHidden = true;
+ }
+ },
+ _showClone: function _showClone(putSortable2) {
+ if (putSortable2.lastPutMode !== "clone") {
+ this._hideClone();
+ return;
+ }
+ if (cloneHidden) {
+ pluginEvent2("showClone", this);
+ if (Sortable.eventCanceled)
+ return;
+ if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {
+ rootEl.insertBefore(cloneEl, dragEl);
+ } else if (nextEl) {
+ rootEl.insertBefore(cloneEl, nextEl);
+ } else {
+ rootEl.appendChild(cloneEl);
+ }
+ if (this.options.group.revertClone) {
+ this.animate(dragEl, cloneEl);
+ }
+ css(cloneEl, "display", "");
+ cloneHidden = false;
+ }
+ }
+};
+function _globalDragOver(evt) {
+ if (evt.dataTransfer) {
+ evt.dataTransfer.dropEffect = "move";
+ }
+ evt.cancelable && evt.preventDefault();
+}
+function _onMove(fromEl, toEl, dragEl2, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
+ var evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal;
+ if (window.CustomEvent && !IE11OrLess && !Edge) {
+ evt = new CustomEvent("move", {
+ bubbles: true,
+ cancelable: true
+ });
+ } else {
+ evt = document.createEvent("Event");
+ evt.initEvent("move", true, true);
+ }
+ evt.to = toEl;
+ evt.from = fromEl;
+ evt.dragged = dragEl2;
+ evt.draggedRect = dragRect;
+ evt.related = targetEl || toEl;
+ evt.relatedRect = targetRect || getRect(toEl);
+ evt.willInsertAfter = willInsertAfter;
+ evt.originalEvent = originalEvent;
+ fromEl.dispatchEvent(evt);
+ if (onMoveFn) {
+ retVal = onMoveFn.call(sortable, evt, originalEvent);
+ }
+ return retVal;
+}
+function _disableDraggable(el) {
+ el.draggable = false;
+}
+function _unsilent() {
+ _silent = false;
+}
+function _ghostIsFirst(evt, vertical, sortable) {
+ var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));
+ var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);
+ var spacer = 10;
+ return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;
+}
+function _ghostIsLast(evt, vertical, sortable) {
+ var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));
+ var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);
+ var spacer = 10;
+ return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;
+}
+function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
+ var mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, invert = false;
+ if (!invertSwap) {
+ if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
+ if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
+ pastFirstInvertThresh = true;
+ }
+ if (!pastFirstInvertThresh) {
+ if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance : mouseOnAxis > targetS2 - targetMoveDistance) {
+ return -lastDirection;
+ }
+ } else {
+ invert = true;
+ }
+ } else {
+ if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
+ return _getInsertDirection(target);
+ }
+ }
+ }
+ invert = invert || invertSwap;
+ if (invert) {
+ if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
+ return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
+ }
+ }
+ return 0;
+}
+function _getInsertDirection(target) {
+ if (index(dragEl) < index(target)) {
+ return 1;
+ } else {
+ return -1;
+ }
+}
+function _generateId(el) {
+ var str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0;
+ while (i--) {
+ sum += str.charCodeAt(i);
+ }
+ return sum.toString(36);
+}
+function _saveInputCheckedState(root) {
+ savedInputChecked.length = 0;
+ var inputs = root.getElementsByTagName("input");
+ var idx = inputs.length;
+ while (idx--) {
+ var el = inputs[idx];
+ el.checked && savedInputChecked.push(el);
+ }
+}
+function _nextTick(fn) {
+ return setTimeout(fn, 0);
+}
+function _cancelNextTick(id) {
+ return clearTimeout(id);
+}
+if (documentExists) {
+ on(document, "touchmove", function(evt) {
+ if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
+ evt.preventDefault();
+ }
+ });
+}
+Sortable.utils = {
+ on,
+ off,
+ css,
+ find,
+ is: function is(el, selector) {
+ return !!closest(el, selector, el, false);
+ },
+ extend,
+ throttle,
+ closest,
+ toggleClass,
+ clone,
+ index,
+ nextTick: _nextTick,
+ cancelNextTick: _cancelNextTick,
+ detectDirection: _detectDirection,
+ getChild,
+ expando
+};
+Sortable.get = function(element2) {
+ return element2[expando];
+};
+Sortable.mount = function() {
+ for (var _len = arguments.length, plugins2 = new Array(_len), _key = 0; _key < _len; _key++) {
+ plugins2[_key] = arguments[_key];
+ }
+ if (plugins2[0].constructor === Array)
+ plugins2 = plugins2[0];
+ plugins2.forEach(function(plugin) {
+ if (!plugin.prototype || !plugin.prototype.constructor) {
+ throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
+ }
+ if (plugin.utils)
+ Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);
+ PluginManager.mount(plugin);
+ });
+};
+Sortable.create = function(el, options) {
+ return new Sortable(el, options);
+};
+Sortable.version = version;
+var autoScrolls = [];
+var scrollEl;
+var scrollRootEl;
+var scrolling = false;
+var lastAutoScrollX;
+var lastAutoScrollY;
+var touchEvt$1;
+var pointerElemChangedInterval;
+function AutoScrollPlugin() {
+ function AutoScroll() {
+ this.defaults = {
+ scroll: true,
+ forceAutoScrollFallback: false,
+ scrollSensitivity: 30,
+ scrollSpeed: 10,
+ bubbleScroll: true
+ };
+ for (var fn in this) {
+ if (fn.charAt(0) === "_" && typeof this[fn] === "function") {
+ this[fn] = this[fn].bind(this);
+ }
+ }
+ }
+ AutoScroll.prototype = {
+ dragStarted: function dragStarted(_ref) {
+ var originalEvent = _ref.originalEvent;
+ if (this.sortable.nativeDraggable) {
+ on(document, "dragover", this._handleAutoScroll);
+ } else {
+ if (this.options.supportPointer) {
+ on(document, "pointermove", this._handleFallbackAutoScroll);
+ } else if (originalEvent.touches) {
+ on(document, "touchmove", this._handleFallbackAutoScroll);
+ } else {
+ on(document, "mousemove", this._handleFallbackAutoScroll);
+ }
+ }
+ },
+ dragOverCompleted: function dragOverCompleted(_ref2) {
+ var originalEvent = _ref2.originalEvent;
+ if (!this.options.dragOverBubble && !originalEvent.rootEl) {
+ this._handleAutoScroll(originalEvent);
+ }
+ },
+ drop: function drop3() {
+ if (this.sortable.nativeDraggable) {
+ off(document, "dragover", this._handleAutoScroll);
+ } else {
+ off(document, "pointermove", this._handleFallbackAutoScroll);
+ off(document, "touchmove", this._handleFallbackAutoScroll);
+ off(document, "mousemove", this._handleFallbackAutoScroll);
+ }
+ clearPointerElemChangedInterval();
+ clearAutoScrolls();
+ cancelThrottle();
+ },
+ nulling: function nulling() {
+ touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
+ autoScrolls.length = 0;
+ },
+ _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
+ this._handleAutoScroll(evt, true);
+ },
+ _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
+ var _this = this;
+ var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, elem = document.elementFromPoint(x, y);
+ touchEvt$1 = evt;
+ if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {
+ autoScroll(evt, this.options, elem, fallback);
+ var ogElemScroller = getParentAutoScrollElement(elem, true);
+ if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
+ pointerElemChangedInterval && clearPointerElemChangedInterval();
+ pointerElemChangedInterval = setInterval(function() {
+ var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);
+ if (newElem !== ogElemScroller) {
+ ogElemScroller = newElem;
+ clearAutoScrolls();
+ }
+ autoScroll(evt, _this.options, newElem, fallback);
+ }, 10);
+ lastAutoScrollX = x;
+ lastAutoScrollY = y;
+ }
+ } else {
+ if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
+ clearAutoScrolls();
+ return;
+ }
+ autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
+ }
+ }
+ };
+ return _extends(AutoScroll, {
+ pluginName: "scroll",
+ initializeByDefault: true
+ });
+}
+function clearAutoScrolls() {
+ autoScrolls.forEach(function(autoScroll2) {
+ clearInterval(autoScroll2.pid);
+ });
+ autoScrolls = [];
+}
+function clearPointerElemChangedInterval() {
+ clearInterval(pointerElemChangedInterval);
+}
+var autoScroll = throttle(function(evt, options, rootEl2, isFallback) {
+ if (!options.scroll)
+ return;
+ var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, sens = options.scrollSensitivity, speed = options.scrollSpeed, winScroller = getWindowScrollingElement();
+ var scrollThisInstance = false, scrollCustomFn;
+ if (scrollRootEl !== rootEl2) {
+ scrollRootEl = rootEl2;
+ clearAutoScrolls();
+ scrollEl = options.scroll;
+ scrollCustomFn = options.scrollFn;
+ if (scrollEl === true) {
+ scrollEl = getParentAutoScrollElement(rootEl2, true);
+ }
+ }
+ var layersOut = 0;
+ var currentParent = scrollEl;
+ do {
+ var el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, left = rect.left, right = rect.right, width = rect.width, height = rect.height, canScrollX = void 0, canScrollY = void 0, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), scrollPosX = el.scrollLeft, scrollPosY = el.scrollTop;
+ if (el === winScroller) {
+ canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll" || elCSS.overflowX === "visible");
+ canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll" || elCSS.overflowY === "visible");
+ } else {
+ canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll");
+ canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll");
+ }
+ var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
+ var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);
+ if (!autoScrolls[layersOut]) {
+ for (var i = 0; i <= layersOut; i++) {
+ if (!autoScrolls[i]) {
+ autoScrolls[i] = {};
+ }
+ }
+ }
+ if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
+ autoScrolls[layersOut].el = el;
+ autoScrolls[layersOut].vx = vx;
+ autoScrolls[layersOut].vy = vy;
+ clearInterval(autoScrolls[layersOut].pid);
+ if (vx != 0 || vy != 0) {
+ scrollThisInstance = true;
+ autoScrolls[layersOut].pid = setInterval(function() {
+ if (isFallback && this.layer === 0) {
+ Sortable.active._onTouchMove(touchEvt$1);
+ }
+ var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
+ var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;
+ if (typeof scrollCustomFn === "function") {
+ if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== "continue") {
+ return;
+ }
+ }
+ scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
+ }.bind({
+ layer: layersOut
+ }), 24);
+ }
+ }
+ layersOut++;
+ } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));
+ scrolling = scrollThisInstance;
+}, 30);
+var drop = function drop2(_ref) {
+ var originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, dragEl2 = _ref.dragEl, activeSortable = _ref.activeSortable, dispatchSortableEvent = _ref.dispatchSortableEvent, hideGhostForTarget = _ref.hideGhostForTarget, unhideGhostForTarget = _ref.unhideGhostForTarget;
+ if (!originalEvent)
+ return;
+ var toSortable = putSortable2 || activeSortable;
+ hideGhostForTarget();
+ var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
+ var target = document.elementFromPoint(touch.clientX, touch.clientY);
+ unhideGhostForTarget();
+ if (toSortable && !toSortable.el.contains(target)) {
+ dispatchSortableEvent("spill");
+ this.onSpill({
+ dragEl: dragEl2,
+ putSortable: putSortable2
+ });
+ }
+};
+function Revert() {
+}
+Revert.prototype = {
+ startIndex: null,
+ dragStart: function dragStart(_ref2) {
+ var oldDraggableIndex2 = _ref2.oldDraggableIndex;
+ this.startIndex = oldDraggableIndex2;
+ },
+ onSpill: function onSpill(_ref3) {
+ var dragEl2 = _ref3.dragEl, putSortable2 = _ref3.putSortable;
+ this.sortable.captureAnimationState();
+ if (putSortable2) {
+ putSortable2.captureAnimationState();
+ }
+ var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);
+ if (nextSibling) {
+ this.sortable.el.insertBefore(dragEl2, nextSibling);
+ } else {
+ this.sortable.el.appendChild(dragEl2);
+ }
+ this.sortable.animateAll();
+ if (putSortable2) {
+ putSortable2.animateAll();
+ }
+ },
+ drop
+};
+_extends(Revert, {
+ pluginName: "revertOnSpill"
+});
+function Remove() {
+}
+Remove.prototype = {
+ onSpill: function onSpill2(_ref4) {
+ var dragEl2 = _ref4.dragEl, putSortable2 = _ref4.putSortable;
+ var parentSortable = putSortable2 || this.sortable;
+ parentSortable.captureAnimationState();
+ dragEl2.parentNode && dragEl2.parentNode.removeChild(dragEl2);
+ parentSortable.animateAll();
+ },
+ drop
+};
+_extends(Remove, {
+ pluginName: "removeOnSpill"
+});
+Sortable.mount(new AutoScrollPlugin());
+Sortable.mount(Remove, Revert);
+var sortable_esm_default = Sortable;
+
+// src/LocalGPTSettingTab.ts
+var SEPARATOR = "\u2702\uFE0F";
+function escapeTitle(title) {
+ if (!title) {
+ return "";
+ }
+ return title.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'");
+}
+var LocalGPTSettingTab = class extends import_obsidian.PluginSettingTab {
+ constructor(app, plugin) {
+ super(app, plugin);
+ this.editEnabled = false;
+ this.modelsOptions = {};
+ this.changingOrder = false;
+ // Controls visibility of the Advanced settings section
+ this.isAdvancedMode = false;
+ // Guard to require a second click before destructive reset
+ this.isConfirmingReset = false;
+ this.plugin = plugin;
+ }
+ async display() {
+ const { containerEl } = this;
+ containerEl.empty();
+ try {
+ const aiProvidersWaiter = await (0, import_sdk.waitForAI)();
+ const aiProvidersResponse = await aiProvidersWaiter.promise;
+ const providers = aiProvidersResponse.providers.reduce(
+ (acc, provider) => ({
+ ...acc,
+ [provider.id]: provider.model ? [provider.name, provider.model].join(" ~ ") : provider.name
+ }),
+ {
+ "": ""
+ }
+ );
+ new import_obsidian.Setting(containerEl).setHeading().setName(I18n.t("settings.mainProvider")).setClass("ai-providers-select").addDropdown(
+ (dropdown) => dropdown.addOptions(providers).setValue(String(this.plugin.settings.aiProviders.main)).onChange(async (value) => {
+ this.plugin.settings.aiProviders.main = value;
+ this.plugin.actionPaletteProviderId = value;
+ await this.plugin.saveSettings();
+ await this.display();
+ })
+ );
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.embeddingProvider")).setDesc(I18n.t("settings.embeddingProviderDesc")).setClass("ai-providers-select").addDropdown(
+ (dropdown) => dropdown.addOptions(providers).setValue(
+ String(this.plugin.settings.aiProviders.embedding)
+ ).onChange(async (value) => {
+ this.plugin.settings.aiProviders.embedding = value;
+ await this.plugin.saveSettings();
+ await this.display();
+ })
+ );
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.visionProvider")).setClass("ai-providers-select").setDesc(I18n.t("settings.visionProviderDesc")).addDropdown(
+ (dropdown) => dropdown.addOptions(providers).setValue(
+ String(this.plugin.settings.aiProviders.vision)
+ ).onChange(async (value) => {
+ this.plugin.settings.aiProviders.vision = value;
+ await this.plugin.saveSettings();
+ await this.display();
+ })
+ );
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.creativity")).setDesc("").addDropdown((dropdown) => {
+ dropdown.addOption("", I18n.t("settings.creativityNone")).addOptions({
+ low: I18n.t("settings.creativityLow"),
+ medium: I18n.t("settings.creativityMedium"),
+ high: I18n.t("settings.creativityHigh")
+ }).setValue(
+ String(this.plugin.settings.defaults.creativity) || ""
+ ).onChange(async (value) => {
+ this.plugin.settings.defaults.creativity = value;
+ await this.plugin.saveSettings();
+ await this.display();
+ });
+ });
+ } catch (error) {
+ console.error(error);
+ }
+ const editingAction = this.editExistingAction || {
+ name: "",
+ prompt: "",
+ temperature: void 0,
+ system: "",
+ replace: false
+ };
+ const sharingActionsMapping = {
+ name: "Name: ",
+ system: "System: ",
+ prompt: "Prompt: ",
+ replace: "Replace: ",
+ model: "Model: "
+ };
+ containerEl.createEl("div", { cls: "local-gpt-settings-separator" });
+ containerEl.createEl("h3", { text: I18n.t("settings.actions") });
+ if (!this.editEnabled) {
+ const quickAdd = new import_obsidian.Setting(containerEl).setName(I18n.t("settings.quickAdd")).setDesc("").addText((text2) => {
+ text2.inputEl.style.minWidth = "100%";
+ text2.setPlaceholder(I18n.t("settings.quickAddPlaceholder"));
+ text2.onChange(async (value) => {
+ const quickAddAction = value.split(SEPARATOR).map((part) => part.trim()).reduce((acc, part) => {
+ const foundMatchKey = Object.keys(
+ sharingActionsMapping
+ ).find((key) => {
+ return part.startsWith(
+ sharingActionsMapping[key]
+ );
+ });
+ if (foundMatchKey) {
+ acc[foundMatchKey] = part.substring(
+ sharingActionsMapping[foundMatchKey].length,
+ part.length
+ );
+ }
+ return acc;
+ }, {});
+ if (quickAddAction.name) {
+ await this.addNewAction(quickAddAction);
+ text2.setValue("");
+ this.display();
+ }
+ });
+ });
+ quickAdd.descEl.innerHTML = I18n.t("settings.quickAddDesc");
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.addNewManually")).addButton(
+ (button) => button.setIcon("plus").onClick(async () => {
+ this.editEnabled = true;
+ this.editExistingAction = void 0;
+ this.display();
+ })
+ );
+ } else {
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.actionName")).addText((text2) => {
+ (editingAction == null ? void 0 : editingAction.name) && text2.setValue(editingAction.name);
+ text2.inputEl.style.minWidth = "100%";
+ text2.setPlaceholder(
+ I18n.t("settings.actionNamePlaceholder")
+ );
+ text2.onChange(async (value) => {
+ editingAction.name = value;
+ });
+ });
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.systemPrompt")).setDesc(I18n.t("settings.systemPromptDesc")).addTextArea((text2) => {
+ (editingAction == null ? void 0 : editingAction.system) && text2.setValue(editingAction.system);
+ text2.inputEl.style.minWidth = "100%";
+ text2.inputEl.style.minHeight = "6em";
+ text2.inputEl.style.resize = "vertical";
+ text2.setPlaceholder(
+ I18n.t("settings.systemPromptPlaceholder")
+ );
+ text2.onChange(async (value) => {
+ editingAction.system = value;
+ });
+ });
+ const promptSetting = new import_obsidian.Setting(containerEl).setName(I18n.t("settings.prompt")).setDesc("").addTextArea((text2) => {
+ (editingAction == null ? void 0 : editingAction.prompt) && text2.setValue(editingAction.prompt);
+ text2.inputEl.style.minWidth = "100%";
+ text2.inputEl.style.minHeight = "6em";
+ text2.inputEl.style.resize = "vertical";
+ text2.setPlaceholder("");
+ text2.onChange(async (value) => {
+ editingAction.prompt = value;
+ });
+ });
+ promptSetting.descEl.innerHTML = I18n.t("settings.promptDesc");
+ new import_obsidian.Setting(containerEl).setName(I18n.t("settings.replaceSelected")).setDesc(I18n.t("settings.replaceSelectedDesc")).addToggle((component) => {
+ (editingAction == null ? void 0 : editingAction.replace) && component.setValue(editingAction.replace);
+ component.onChange(async (value) => {
+ editingAction.replace = value;
+ });
+ });
+ const actionButtonsRow = new import_obsidian.Setting(containerEl).setName("");
+ if (this.editExistingAction) {
+ actionButtonsRow.addButton((button) => {
+ button.buttonEl.style.marginRight = "2em";
+ button.setButtonText(I18n.t("settings.remove")).onClick(async () => {
+ if (!button.buttonEl.hasClass("mod-warning")) {
+ button.setClass("mod-warning");
+ return;
+ }
+ this.plugin.settings.actions = this.plugin.settings.actions.filter(
+ (innerAction) => innerAction !== editingAction
+ );
+ await this.plugin.saveSettings();
+ this.editExistingAction = void 0;
+ this.editEnabled = false;
+ this.display();
+ });
+ });
+ }
+ actionButtonsRow.addButton((button) => {
+ button.setButtonText(I18n.t("settings.close")).onClick(async () => {
+ this.editEnabled = false;
+ this.editExistingAction = void 0;
+ this.display();
+ });
+ }).addButton(
+ (button) => button.setCta().setButtonText(I18n.t("settings.save")).onClick(async () => {
+ if (!editingAction.name) {
+ new import_obsidian.Notice(
+ I18n.t("notices.actionNameRequired")
+ );
+ return;
+ }
+ if (!this.editExistingAction) {
+ if (this.plugin.settings.actions.find(
+ (action) => action.name === editingAction.name
+ )) {
+ new import_obsidian.Notice(
+ I18n.t("notices.actionNameExists", {
+ name: editingAction.name
+ })
+ );
+ return;
+ }
+ await this.addNewAction(editingAction);
+ } else {
+ if (this.plugin.settings.actions.filter(
+ (action) => action.name === editingAction.name
+ ).length > 1) {
+ new import_obsidian.Notice(
+ I18n.t("notices.actionNameExists", {
+ name: editingAction.name
+ })
+ );
+ return;
+ }
+ const index2 = this.plugin.settings.actions.findIndex(
+ (innerAction) => innerAction === editingAction
+ );
+ this.plugin.settings.actions[index2] = editingAction;
+ }
+ await this.plugin.saveSettings();
+ this.editEnabled = false;
+ this.editExistingAction = void 0;
+ this.display();
+ })
+ );
+ }
+ containerEl.createEl("h4", { text: I18n.t("settings.actionsList") });
+ const actionsContainer = containerEl.createDiv(
+ "local-gpt-actions-container"
+ );
+ this.plugin.settings.actions.forEach((action, actionIndex) => {
+ const sharingString = [
+ action.name && `${sharingActionsMapping.name}${action.name}`,
+ action.system && `${sharingActionsMapping.system}${action.system}`,
+ action.prompt && `${sharingActionsMapping.prompt}${action.prompt}`,
+ action.replace && `${sharingActionsMapping.replace}${action.replace}`
+ ].filter(Boolean).join(` ${SEPARATOR}
+`);
+ if (!this.changingOrder) {
+ const actionRow = new import_obsidian.Setting(actionsContainer).setName(action.name).setDesc("").addButton(
+ (button) => button.setIcon("copy").onClick(async () => {
+ navigator.clipboard.writeText(sharingString);
+ new import_obsidian.Notice(I18n.t("notices.copied"));
+ })
+ ).addButton(
+ (button) => button.setButtonText("Edit").onClick(async () => {
+ this.editEnabled = true;
+ this.editExistingAction = this.plugin.settings.actions.find(
+ (innerAction) => innerAction.name == action.name
+ );
+ this.display();
+ })
+ );
+ const systemTitle = escapeTitle(action.system);
+ const promptTitle = escapeTitle(action.prompt);
+ actionRow.descEl.innerHTML = [
+ action.system && ``,
+ action.prompt && ``
+ ].filter(Boolean).join("
\n");
+ } else {
+ const actionRow = new import_obsidian.Setting(actionsContainer).setName(action.name).setDesc("");
+ actionRow.settingEl.addClass("local-gpt-action-row");
+ const handle = actionRow.settingEl.createDiv(
+ "local-gpt-drag-handle"
+ );
+ (0, import_obsidian.setIcon)(handle, "grip-vertical");
+ actionRow.settingEl.prepend(handle);
+ }
+ });
+ if (this.changingOrder) {
+ const getScrollableParent = (el) => {
+ let node = el.parentElement;
+ while (node) {
+ const style = getComputedStyle(node);
+ const overflowY = style.overflowY;
+ if (node.scrollHeight > node.clientHeight && (overflowY === "auto" || overflowY === "scroll")) {
+ return node;
+ }
+ node = node.parentElement;
+ }
+ return document.scrollingElement || document.documentElement;
+ };
+ let autoScrollFrame = null;
+ let autoScrollDelta = 0;
+ let scrollEl2 = null;
+ const stepScroll = () => {
+ if (!scrollEl2)
+ return;
+ if (autoScrollDelta !== 0) {
+ scrollEl2.scrollTop += autoScrollDelta;
+ autoScrollFrame = requestAnimationFrame(stepScroll);
+ } else {
+ autoScrollFrame = null;
+ }
+ };
+ const handleEdgeScroll = (evt) => {
+ var _a2, _b, _c, _d;
+ if (!scrollEl2)
+ return;
+ const clientY = (_d = (_c = evt == null ? void 0 : evt.clientY) != null ? _c : (_b = (_a2 = evt == null ? void 0 : evt.touches) == null ? void 0 : _a2[0]) == null ? void 0 : _b.clientY) != null ? _d : 0;
+ const rect = scrollEl2.getBoundingClientRect();
+ const threshold = 48;
+ const maxStep = 18;
+ if (clientY < rect.top + threshold) {
+ const dist = rect.top + threshold - clientY;
+ autoScrollDelta = -Math.min(maxStep, Math.ceil(dist / 4));
+ } else if (clientY > rect.bottom - threshold) {
+ const dist = clientY - (rect.bottom - threshold);
+ autoScrollDelta = Math.min(maxStep, Math.ceil(dist / 4));
+ } else {
+ autoScrollDelta = 0;
+ }
+ if (autoScrollDelta !== 0 && autoScrollFrame === null) {
+ autoScrollFrame = requestAnimationFrame(stepScroll);
+ }
+ };
+ const addEdgeScrollListeners = () => {
+ if (!scrollEl2)
+ return;
+ scrollEl2.addEventListener("dragover", handleEdgeScroll);
+ scrollEl2.addEventListener("pointermove", handleEdgeScroll, {
+ passive: true
+ });
+ scrollEl2.addEventListener("touchmove", handleEdgeScroll, {
+ passive: true
+ });
+ };
+ const removeEdgeScrollListeners = () => {
+ if (!scrollEl2)
+ return;
+ scrollEl2.removeEventListener("dragover", handleEdgeScroll);
+ scrollEl2.removeEventListener(
+ "pointermove",
+ handleEdgeScroll
+ );
+ scrollEl2.removeEventListener(
+ "touchmove",
+ handleEdgeScroll
+ );
+ };
+ sortable_esm_default.create(actionsContainer, {
+ animation: 150,
+ // Allow dragging by the whole item (not just the handle)
+ draggable: ".setting-item",
+ // We provide manual edge autoscroll for reliability in Obsidian's settings modal
+ ghostClass: "local-gpt-sortable-ghost",
+ chosenClass: "local-gpt-sortable-chosen",
+ dragClass: "local-gpt-sortable-drag",
+ onStart: (evt) => {
+ scrollEl2 = getScrollableParent(actionsContainer);
+ addEdgeScrollListeners();
+ },
+ onEnd: async (evt) => {
+ removeEdgeScrollListeners();
+ if (autoScrollFrame !== null) {
+ cancelAnimationFrame(autoScrollFrame);
+ autoScrollFrame = null;
+ }
+ autoScrollDelta = 0;
+ scrollEl2 = null;
+ const droppedEl = evt == null ? void 0 : evt.item;
+ if (droppedEl) {
+ droppedEl.classList.add("local-gpt-drop-animate");
+ droppedEl.addEventListener(
+ "animationend",
+ () => droppedEl.classList.remove(
+ "local-gpt-drop-animate"
+ ),
+ { once: true }
+ );
+ const prevEl = droppedEl.previousElementSibling;
+ const nextEl2 = droppedEl.nextElementSibling;
+ if (prevEl && prevEl.classList.contains("setting-item")) {
+ prevEl.classList.add(
+ "local-gpt-drop-neighbor-prev"
+ );
+ prevEl.addEventListener(
+ "animationend",
+ () => prevEl.classList.remove(
+ "local-gpt-drop-neighbor-prev"
+ ),
+ { once: true }
+ );
+ }
+ if (nextEl2 && nextEl2.classList.contains("setting-item")) {
+ nextEl2.classList.add(
+ "local-gpt-drop-neighbor-next"
+ );
+ nextEl2.addEventListener(
+ "animationend",
+ () => nextEl2.classList.remove(
+ "local-gpt-drop-neighbor-next"
+ ),
+ { once: true }
+ );
+ }
+ }
+ if (evt.oldIndex !== void 0 && evt.newIndex !== void 0 && evt.oldIndex !== evt.newIndex) {
+ const [moved2] = this.plugin.settings.actions.splice(
+ evt.oldIndex,
+ 1
+ );
+ this.plugin.settings.actions.splice(
+ evt.newIndex,
+ 0,
+ moved2
+ );
+ await this.plugin.saveSettings();
+ }
+ }
+ });
+ }
+ if (this.plugin.settings.actions.length) {
+ new import_obsidian.Setting(containerEl).setName("").addButton((button) => {
+ this.changingOrder && button.setCta();
+ button.setButtonText(
+ this.changingOrder ? I18n.t("settings.done") : I18n.t("settings.changeOrder")
+ ).onClick(async () => {
+ this.changingOrder = !this.changingOrder;
+ this.display();
+ });
+ });
+ }
+ new import_obsidian.Setting(containerEl).setHeading().setName(I18n.t("settings.advancedSettings")).setDesc(I18n.t("settings.advancedSettingsDesc")).setClass("local-gpt-advanced-toggle").addToggle(
+ (toggle) => toggle.setValue(this.isAdvancedMode).onChange((value) => {
+ this.isAdvancedMode = value;
+ this.display();
+ })
+ );
+ if (this.isAdvancedMode) {
+ const enhancedSection = containerEl.createDiv(
+ "local-gpt-advanced-group"
+ );
+ enhancedSection.createEl("h4", {
+ text: I18n.t("settings.enhancedActions")
+ });
+ new import_obsidian.Setting(enhancedSection).setName(I18n.t("settings.enhancedActionsLabel")).setDesc(I18n.t("settings.enhancedActionsDesc")).setClass("ai-providers-select").addDropdown((dropdown) => {
+ dropdown.addOptions({
+ local: I18n.t("settings.contextLimitLocal"),
+ cloud: I18n.t("settings.contextLimitCloud"),
+ advanced: I18n.t("settings.contextLimitAdvanced"),
+ max: I18n.t("settings.contextLimitMax")
+ }).setValue(
+ String(
+ this.plugin.settings.defaults.contextLimit || "local"
+ )
+ ).onChange(async (value) => {
+ this.plugin.settings.defaults.contextLimit = value;
+ await this.plugin.saveSettings();
+ });
+ });
+ const dangerSection = containerEl.createDiv(
+ "local-gpt-advanced-group"
+ );
+ dangerSection.createEl("h4", {
+ text: I18n.t("settings.dangerZone")
+ });
+ new import_obsidian.Setting(dangerSection).setName(I18n.t("settings.resetActions")).setDesc(I18n.t("settings.resetActionsDesc")).addButton(
+ (button) => button.setClass("mod-warning").setButtonText(I18n.t("settings.reset")).onClick(async () => {
+ if (!this.isConfirmingReset) {
+ this.isConfirmingReset = true;
+ button.setButtonText(
+ I18n.t("settings.confirmReset")
+ );
+ return;
+ }
+ button.setDisabled(true);
+ button.buttonEl.setAttribute("disabled", "true");
+ button.buttonEl.classList.remove("mod-warning");
+ this.plugin.settings.actions = DEFAULT_SETTINGS.actions;
+ await this.plugin.saveSettings();
+ this.isConfirmingReset = false;
+ this.display();
+ })
+ );
+ }
+ }
+ async addNewAction(editingAction) {
+ const alreadyExistingActionIndex = this.plugin.settings.actions.findIndex(
+ (action) => action.name === editingAction.name
+ );
+ if (alreadyExistingActionIndex >= 0) {
+ this.plugin.settings.actions[alreadyExistingActionIndex] = editingAction;
+ new import_obsidian.Notice(
+ I18n.t("notices.actionRewritten", { name: editingAction.name })
+ );
+ } else {
+ this.plugin.settings.actions = [
+ editingAction,
+ ...this.plugin.settings.actions
+ ];
+ new import_obsidian.Notice(
+ I18n.t("notices.actionAdded", { name: editingAction.name })
+ );
+ }
+ await this.plugin.saveSettings();
+ }
+};
+
+// src/spinnerPlugin.ts
+var import_state = require("@codemirror/state");
+var import_view = require("@codemirror/view");
+var _LoaderWidget = class extends import_view.WidgetType {
+ toDOM(view) {
+ return _LoaderWidget.element.cloneNode(true);
+ }
+};
+var LoaderWidget = _LoaderWidget;
+LoaderWidget.element = document.createElement("span");
+(() => {
+ _LoaderWidget.element.addClasses(["local-gpt-loading", "local-gpt-dots"]);
+})();
+var ThinkingWidget = class extends import_view.WidgetType {
+ static createDOMStructure() {
+ const container = document.createElement("div");
+ container.addClass("local-gpt-thinking-container");
+ container.appendChild(document.createElement("br"));
+ const textElement = document.createElement("span");
+ textElement.addClass("local-gpt-thinking");
+ textElement.textContent = "Thinking";
+ textElement.setAttribute("data-text", "Thinking");
+ container.appendChild(textElement);
+ return container;
+ }
+ toDOM(view) {
+ return ThinkingWidget.createDOMStructure();
+ }
+};
+var ContentWidget = class extends import_view.WidgetType {
+ constructor(text2) {
+ super();
+ this.text = text2;
+ this.dom = null;
+ }
+ eq(other) {
+ return other.text === this.text;
+ }
+ updateText(newText) {
+ if (this.dom && this.text !== newText) {
+ const addedText = newText.slice(this.text.length);
+ this.dom.textContent = newText.slice(0, -addedText.length);
+ let lastSpan = this.dom.querySelector("span:last-child");
+ if (!lastSpan) {
+ lastSpan = document.createElement("span");
+ this.dom.appendChild(lastSpan);
+ }
+ lastSpan.textContent = addedText;
+ this.text = newText;
+ }
+ }
+ toDOM(view) {
+ if (!this.dom) {
+ this.dom = document.createElement("div");
+ this.dom.addClass("local-gpt-content");
+ this.updateText(this.text);
+ }
+ return this.dom;
+ }
+};
+var SpinnerPlugin = class {
+ constructor(editorView) {
+ this.editorView = editorView;
+ this.positions = /* @__PURE__ */ new Map();
+ this.decorations = import_view.Decoration.none;
+ }
+ /**
+ * Process text with potential tags and update UI accordingly
+ *
+ * @param text Raw text that may include tags
+ * @param processFunc Optional function to process the display text
+ * @param position Optional position to update specific spinner
+ * @returns void
+ */
+ processText(text2, processFunc, position) {
+ const result = this.processThinkingTags(text2);
+ this.showThinking(result.isThinking, position);
+ if (result.displayText.trim()) {
+ const displayText = processFunc ? processFunc(result.displayText) : result.displayText;
+ this.updateContent(displayText, position);
+ }
+ }
+ /**
+ * Process text with potential tags
+ *
+ * @param text Raw text that may contain tags
+ * @returns Object with parsed thinking state and display text
+ */
+ processThinkingTags(text2) {
+ if (!text2.startsWith("")) {
+ return {
+ isThinking: false,
+ displayText: text2
+ };
+ }
+ const thinkingMatch = text2.match(
+ /^([\s\S]*?)(<\/think>\s*([\s\S]*))?$/
+ );
+ if (!thinkingMatch) {
+ return {
+ isThinking: true,
+ displayText: ""
+ // No display text while in thinking mode
+ };
+ }
+ if (thinkingMatch[2]) {
+ const afterThinkTag = thinkingMatch[3] || "";
+ return {
+ isThinking: false,
+ displayText: afterThinkTag
+ };
+ }
+ return {
+ isThinking: true,
+ displayText: ""
+ // No display text while in thinking mode
+ };
+ }
+ show(position) {
+ const isEndOfLine = this.isPositionAtEndOfLine(
+ this.editorView.state,
+ position
+ );
+ this.positions.set(position, {
+ isEndOfLine,
+ widget: new LoaderWidget(),
+ isThinking: false
+ });
+ this.updateDecorations();
+ return () => this.hide(position);
+ }
+ hide(position) {
+ this.positions.delete(position);
+ this.updateDecorations();
+ }
+ showThinking(enabled, position) {
+ let updated = false;
+ const updatePosition = (data) => {
+ if (enabled && !data.isThinking) {
+ data.widget = new ThinkingWidget();
+ data.isThinking = true;
+ updated = true;
+ } else if (!enabled && data.isThinking) {
+ data.widget = new LoaderWidget();
+ data.isThinking = false;
+ updated = true;
+ }
+ };
+ if (position !== void 0) {
+ const data = this.positions.get(position);
+ if (data)
+ updatePosition(data);
+ } else {
+ this.positions.forEach(updatePosition);
+ }
+ if (updated) {
+ this.updateDecorations();
+ }
+ }
+ updateContent(text2, position) {
+ let updated = false;
+ const updatePosition = (data) => {
+ if (data.isThinking)
+ return;
+ if (data.widget instanceof LoaderWidget) {
+ data.widget = new ContentWidget(text2);
+ updated = true;
+ } else if (data.widget instanceof ContentWidget) {
+ data.widget.updateText(text2);
+ updated = true;
+ }
+ };
+ if (position !== void 0) {
+ const data = this.positions.get(position);
+ if (data)
+ updatePosition(data);
+ } else {
+ this.positions.forEach(updatePosition);
+ }
+ if (updated) {
+ this.updateDecorations();
+ }
+ }
+ update(update2) {
+ if (update2.docChanged || update2.viewportChanged) {
+ this.updateDecorations();
+ }
+ }
+ updateDecorations() {
+ const builder = new import_state.RangeSetBuilder();
+ this.positions.forEach((data, position) => {
+ builder.add(
+ position,
+ position,
+ import_view.Decoration.widget({
+ widget: data.widget,
+ side: data.isEndOfLine ? 1 : -1
+ })
+ );
+ });
+ this.decorations = builder.finish();
+ this.editorView.requestMeasure();
+ }
+ isPositionAtEndOfLine(state, position) {
+ return position === state.doc.lineAt(position).to;
+ }
+};
+var spinnerPlugin = import_view.ViewPlugin.fromClass(SpinnerPlugin, {
+ decorations: (v) => v.decorations
+});
+
+// src/ui/actionPalettePlugin.ts
+var import_state2 = require("@codemirror/state");
+var import_view2 = require("@codemirror/view");
+
+// node_modules/svelte/src/runtime/internal/utils.js
+function noop() {
+}
+function run(fn) {
+ return fn();
+}
+function blank_object() {
+ return /* @__PURE__ */ Object.create(null);
+}
+function run_all(fns) {
+ fns.forEach(run);
+}
+function is_function(thing) {
+ return typeof thing === "function";
+}
+function safe_not_equal(a, b) {
+ return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function";
+}
+function is_empty(obj) {
+ return Object.keys(obj).length === 0;
+}
+
+// node_modules/svelte/src/runtime/internal/globals.js
+var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : (
+ // @ts-ignore Node typings have this
+ global
+);
+
+// node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js
+var ResizeObserverSingleton = class {
+ /** @param {ResizeObserverOptions} options */
+ constructor(options) {
+ /**
+ * @private
+ * @readonly
+ * @type {WeakMap}
+ */
+ __publicField(this, "_listeners", "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0);
+ /**
+ * @private
+ * @type {ResizeObserver}
+ */
+ __publicField(this, "_observer");
+ /** @type {ResizeObserverOptions} */
+ __publicField(this, "options");
+ this.options = options;
+ }
+ /**
+ * @param {Element} element
+ * @param {import('./private.js').Listener} listener
+ * @returns {() => void}
+ */
+ observe(element2, listener) {
+ this._listeners.set(element2, listener);
+ this._getObserver().observe(element2, this.options);
+ return () => {
+ this._listeners.delete(element2);
+ this._observer.unobserve(element2);
+ };
+ }
+ /**
+ * @private
+ */
+ _getObserver() {
+ var _a2;
+ return (_a2 = this._observer) != null ? _a2 : this._observer = new ResizeObserver((entries) => {
+ var _a3;
+ for (const entry of entries) {
+ ResizeObserverSingleton.entries.set(entry.target, entry);
+ (_a3 = this._listeners.get(entry.target)) == null ? void 0 : _a3(entry);
+ }
+ });
+ }
+};
+ResizeObserverSingleton.entries = "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0;
+
+// node_modules/svelte/src/runtime/internal/dom.js
+var is_hydrating = false;
+function start_hydrating() {
+ is_hydrating = true;
+}
+function end_hydrating() {
+ is_hydrating = false;
+}
+function append(target, node) {
+ target.appendChild(node);
+}
+function insert(target, node, anchor) {
+ target.insertBefore(node, anchor || null);
+}
+function detach(node) {
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+}
+function destroy_each(iterations, detaching) {
+ for (let i = 0; i < iterations.length; i += 1) {
+ if (iterations[i])
+ iterations[i].d(detaching);
+ }
+}
+function element(name) {
+ return document.createElement(name);
+}
+function text(data) {
+ return document.createTextNode(data);
+}
+function space() {
+ return text(" ");
+}
+function empty() {
+ return text("");
+}
+function listen(node, event, handler, options) {
+ node.addEventListener(event, handler, options);
+ return () => node.removeEventListener(event, handler, options);
+}
+function attr(node, attribute, value) {
+ if (value == null)
+ node.removeAttribute(attribute);
+ else if (node.getAttribute(attribute) !== value)
+ node.setAttribute(attribute, value);
+}
+function children(element2) {
+ return Array.from(element2.childNodes);
+}
+function set_data(text2, data) {
+ data = "" + data;
+ if (text2.data === data)
+ return;
+ text2.data = /** @type {string} */
+ data;
+}
+function set_style(node, key, value, important) {
+ if (value == null) {
+ node.style.removeProperty(key);
+ } else {
+ node.style.setProperty(key, value, important ? "important" : "");
+ }
+}
+function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
+ return new CustomEvent(type, { detail, bubbles, cancelable });
+}
+function get_custom_elements_slots(element2) {
+ const result = {};
+ element2.childNodes.forEach(
+ /** @param {Element} node */
+ (node) => {
+ result[node.slot || "default"] = true;
+ }
+ );
+ return result;
+}
+
+// node_modules/svelte/src/runtime/internal/lifecycle.js
+var current_component;
+function set_current_component(component) {
+ current_component = component;
+}
+function get_current_component() {
+ if (!current_component)
+ throw new Error("Function called outside component initialization");
+ return current_component;
+}
+function onMount(fn) {
+ get_current_component().$$.on_mount.push(fn);
+}
+function createEventDispatcher() {
+ const component = get_current_component();
+ return (type, detail, { cancelable = false } = {}) => {
+ const callbacks = component.$$.callbacks[type];
+ if (callbacks) {
+ const event = custom_event(
+ /** @type {string} */
+ type,
+ detail,
+ { cancelable }
+ );
+ callbacks.slice().forEach((fn) => {
+ fn.call(component, event);
+ });
+ return !event.defaultPrevented;
+ }
+ return true;
+ };
+}
+
+// node_modules/svelte/src/runtime/internal/scheduler.js
+var dirty_components = [];
+var binding_callbacks = [];
+var render_callbacks = [];
+var flush_callbacks = [];
+var resolved_promise = /* @__PURE__ */ Promise.resolve();
+var update_scheduled = false;
+function schedule_update() {
+ if (!update_scheduled) {
+ update_scheduled = true;
+ resolved_promise.then(flush);
+ }
+}
+function tick() {
+ schedule_update();
+ return resolved_promise;
+}
+function add_render_callback(fn) {
+ render_callbacks.push(fn);
+}
+var seen_callbacks = /* @__PURE__ */ new Set();
+var flushidx = 0;
+function flush() {
+ if (flushidx !== 0) {
+ return;
+ }
+ const saved_component = current_component;
+ do {
+ try {
+ while (flushidx < dirty_components.length) {
+ const component = dirty_components[flushidx];
+ flushidx++;
+ set_current_component(component);
+ update(component.$$);
+ }
+ } catch (e) {
+ dirty_components.length = 0;
+ flushidx = 0;
+ throw e;
+ }
+ set_current_component(null);
+ dirty_components.length = 0;
+ flushidx = 0;
+ while (binding_callbacks.length)
+ binding_callbacks.pop()();
+ for (let i = 0; i < render_callbacks.length; i += 1) {
+ const callback = render_callbacks[i];
+ if (!seen_callbacks.has(callback)) {
+ seen_callbacks.add(callback);
+ callback();
+ }
+ }
+ render_callbacks.length = 0;
+ } while (dirty_components.length);
+ while (flush_callbacks.length) {
+ flush_callbacks.pop()();
+ }
+ update_scheduled = false;
+ seen_callbacks.clear();
+ set_current_component(saved_component);
+}
+function update($$) {
+ if ($$.fragment !== null) {
+ $$.update();
+ run_all($$.before_update);
+ const dirty = $$.dirty;
+ $$.dirty = [-1];
+ $$.fragment && $$.fragment.p($$.ctx, dirty);
+ $$.after_update.forEach(add_render_callback);
+ }
+}
+function flush_render_callbacks(fns) {
+ const filtered = [];
+ const targets = [];
+ render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));
+ targets.forEach((c) => c());
+ render_callbacks = filtered;
+}
+
+// node_modules/svelte/src/runtime/internal/transitions.js
+var outroing = /* @__PURE__ */ new Set();
+function transition_in(block, local) {
+ if (block && block.i) {
+ outroing.delete(block);
+ block.i(local);
+ }
+}
+
+// node_modules/svelte/src/runtime/internal/each.js
+function ensure_array_like(array_like_or_iterator) {
+ return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator);
+}
+
+// node_modules/svelte/src/shared/boolean_attributes.js
+var _boolean_attributes = (
+ /** @type {const} */
+ [
+ "allowfullscreen",
+ "allowpaymentrequest",
+ "async",
+ "autofocus",
+ "autoplay",
+ "checked",
+ "controls",
+ "default",
+ "defer",
+ "disabled",
+ "formnovalidate",
+ "hidden",
+ "inert",
+ "ismap",
+ "loop",
+ "multiple",
+ "muted",
+ "nomodule",
+ "novalidate",
+ "open",
+ "playsinline",
+ "readonly",
+ "required",
+ "reversed",
+ "selected"
+ ]
+);
+var boolean_attributes = /* @__PURE__ */ new Set([..._boolean_attributes]);
+
+// node_modules/svelte/src/runtime/internal/Component.js
+function mount_component(component, target, anchor) {
+ const { fragment, after_update } = component.$$;
+ fragment && fragment.m(target, anchor);
+ add_render_callback(() => {
+ const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
+ if (component.$$.on_destroy) {
+ component.$$.on_destroy.push(...new_on_destroy);
+ } else {
+ run_all(new_on_destroy);
+ }
+ component.$$.on_mount = [];
+ });
+ after_update.forEach(add_render_callback);
+}
+function destroy_component(component, detaching) {
+ const $$ = component.$$;
+ if ($$.fragment !== null) {
+ flush_render_callbacks($$.after_update);
+ run_all($$.on_destroy);
+ $$.fragment && $$.fragment.d(detaching);
+ $$.on_destroy = $$.fragment = null;
+ $$.ctx = [];
+ }
+}
+function make_dirty(component, i) {
+ if (component.$$.dirty[0] === -1) {
+ dirty_components.push(component);
+ schedule_update();
+ component.$$.dirty.fill(0);
+ }
+ component.$$.dirty[i / 31 | 0] |= 1 << i % 31;
+}
+function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) {
+ const parent_component = current_component;
+ set_current_component(component);
+ const $$ = component.$$ = {
+ fragment: null,
+ ctx: [],
+ // state
+ props,
+ update: noop,
+ not_equal,
+ bound: blank_object(),
+ // lifecycle
+ on_mount: [],
+ on_destroy: [],
+ on_disconnect: [],
+ before_update: [],
+ after_update: [],
+ context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
+ // everything else
+ callbacks: blank_object(),
+ dirty,
+ skip_bound: false,
+ root: options.target || parent_component.$$.root
+ };
+ append_styles && append_styles($$.root);
+ let ready = false;
+ $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => {
+ const value = rest.length ? rest[0] : ret;
+ if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
+ if (!$$.skip_bound && $$.bound[i])
+ $$.bound[i](value);
+ if (ready)
+ make_dirty(component, i);
+ }
+ return ret;
+ }) : [];
+ $$.update();
+ ready = true;
+ run_all($$.before_update);
+ $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false;
+ if (options.target) {
+ if (options.hydrate) {
+ start_hydrating();
+ const nodes = children(options.target);
+ $$.fragment && $$.fragment.l(nodes);
+ nodes.forEach(detach);
+ } else {
+ $$.fragment && $$.fragment.c();
+ }
+ if (options.intro)
+ transition_in(component.$$.fragment);
+ mount_component(component, options.target, options.anchor);
+ end_hydrating();
+ flush();
+ }
+ set_current_component(parent_component);
+}
+var SvelteElement;
+if (typeof HTMLElement === "function") {
+ SvelteElement = class extends HTMLElement {
+ constructor($$componentCtor, $$slots, use_shadow_dom) {
+ super();
+ /** The Svelte component constructor */
+ __publicField(this, "$$ctor");
+ /** Slots */
+ __publicField(this, "$$s");
+ /** The Svelte component instance */
+ __publicField(this, "$$c");
+ /** Whether or not the custom element is connected */
+ __publicField(this, "$$cn", false);
+ /** Component props data */
+ __publicField(this, "$$d", {});
+ /** `true` if currently in the process of reflecting component props back to attributes */
+ __publicField(this, "$$r", false);
+ /** @type {Record} Props definition (name, reflected, type etc) */
+ __publicField(this, "$$p_d", {});
+ /** @type {Record} Event listeners */
+ __publicField(this, "$$l", {});
+ /** @type {Map} Event listener unsubscribe functions */
+ __publicField(this, "$$l_u", /* @__PURE__ */ new Map());
+ this.$$ctor = $$componentCtor;
+ this.$$s = $$slots;
+ if (use_shadow_dom) {
+ this.attachShadow({ mode: "open" });
+ }
+ }
+ addEventListener(type, listener, options) {
+ this.$$l[type] = this.$$l[type] || [];
+ this.$$l[type].push(listener);
+ if (this.$$c) {
+ const unsub = this.$$c.$on(type, listener);
+ this.$$l_u.set(listener, unsub);
+ }
+ super.addEventListener(type, listener, options);
+ }
+ removeEventListener(type, listener, options) {
+ super.removeEventListener(type, listener, options);
+ if (this.$$c) {
+ const unsub = this.$$l_u.get(listener);
+ if (unsub) {
+ unsub();
+ this.$$l_u.delete(listener);
+ }
+ }
+ if (this.$$l[type]) {
+ const idx = this.$$l[type].indexOf(listener);
+ if (idx >= 0) {
+ this.$$l[type].splice(idx, 1);
+ }
+ }
+ }
+ async connectedCallback() {
+ this.$$cn = true;
+ if (!this.$$c) {
+ let create_slot = function(name) {
+ return () => {
+ let node;
+ const obj = {
+ c: function create() {
+ node = element("slot");
+ if (name !== "default") {
+ attr(node, "name", name);
+ }
+ },
+ /**
+ * @param {HTMLElement} target
+ * @param {HTMLElement} [anchor]
+ */
+ m: function mount2(target, anchor) {
+ insert(target, node, anchor);
+ },
+ d: function destroy2(detaching) {
+ if (detaching) {
+ detach(node);
+ }
+ }
+ };
+ return obj;
+ };
+ };
+ await Promise.resolve();
+ if (!this.$$cn || this.$$c) {
+ return;
+ }
+ const $$slots = {};
+ const existing_slots = get_custom_elements_slots(this);
+ for (const name of this.$$s) {
+ if (name in existing_slots) {
+ $$slots[name] = [create_slot(name)];
+ }
+ }
+ for (const attribute of this.attributes) {
+ const name = this.$$g_p(attribute.name);
+ if (!(name in this.$$d)) {
+ this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp");
+ }
+ }
+ for (const key in this.$$p_d) {
+ if (!(key in this.$$d) && this[key] !== void 0) {
+ this.$$d[key] = this[key];
+ delete this[key];
+ }
+ }
+ this.$$c = new this.$$ctor({
+ target: this.shadowRoot || this,
+ props: {
+ ...this.$$d,
+ $$slots,
+ $$scope: {
+ ctx: []
+ }
+ }
+ });
+ const reflect_attributes = () => {
+ this.$$r = true;
+ for (const key in this.$$p_d) {
+ this.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];
+ if (this.$$p_d[key].reflect) {
+ const attribute_value = get_custom_element_value(
+ key,
+ this.$$d[key],
+ this.$$p_d,
+ "toAttribute"
+ );
+ if (attribute_value == null) {
+ this.removeAttribute(this.$$p_d[key].attribute || key);
+ } else {
+ this.setAttribute(this.$$p_d[key].attribute || key, attribute_value);
+ }
+ }
+ }
+ this.$$r = false;
+ };
+ this.$$c.$$.after_update.push(reflect_attributes);
+ reflect_attributes();
+ for (const type in this.$$l) {
+ for (const listener of this.$$l[type]) {
+ const unsub = this.$$c.$on(type, listener);
+ this.$$l_u.set(listener, unsub);
+ }
+ }
+ this.$$l = {};
+ }
+ }
+ // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte
+ // and setting attributes through setAttribute etc, this is helpful
+ attributeChangedCallback(attr2, _oldValue, newValue) {
+ var _a2;
+ if (this.$$r)
+ return;
+ attr2 = this.$$g_p(attr2);
+ this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp");
+ (_a2 = this.$$c) == null ? void 0 : _a2.$set({ [attr2]: this.$$d[attr2] });
+ }
+ disconnectedCallback() {
+ this.$$cn = false;
+ Promise.resolve().then(() => {
+ if (!this.$$cn && this.$$c) {
+ this.$$c.$destroy();
+ this.$$c = void 0;
+ }
+ });
+ }
+ $$g_p(attribute_name) {
+ return Object.keys(this.$$p_d).find(
+ (key) => this.$$p_d[key].attribute === attribute_name || !this.$$p_d[key].attribute && key.toLowerCase() === attribute_name
+ ) || attribute_name;
+ }
+ };
+}
+function get_custom_element_value(prop, value, props_definition, transform) {
+ var _a2;
+ const type = (_a2 = props_definition[prop]) == null ? void 0 : _a2.type;
+ value = type === "Boolean" && typeof value !== "boolean" ? value != null : value;
+ if (!transform || !props_definition[prop]) {
+ return value;
+ } else if (transform === "toAttribute") {
+ switch (type) {
+ case "Object":
+ case "Array":
+ return value == null ? null : JSON.stringify(value);
+ case "Boolean":
+ return value ? "" : null;
+ case "Number":
+ return value == null ? null : value;
+ default:
+ return value;
+ }
+ } else {
+ switch (type) {
+ case "Object":
+ case "Array":
+ return value && JSON.parse(value);
+ case "Boolean":
+ return value;
+ case "Number":
+ return value != null ? +value : value;
+ default:
+ return value;
+ }
+ }
+}
+var SvelteComponent = class {
+ constructor() {
+ /**
+ * ### PRIVATE API
+ *
+ * Do not use, may change at any time
+ *
+ * @type {any}
+ */
+ __publicField(this, "$$");
+ /**
+ * ### PRIVATE API
+ *
+ * Do not use, may change at any time
+ *
+ * @type {any}
+ */
+ __publicField(this, "$$set");
+ }
+ /** @returns {void} */
+ $destroy() {
+ destroy_component(this, 1);
+ this.$destroy = noop;
+ }
+ /**
+ * @template {Extract} K
+ * @param {K} type
+ * @param {((e: Events[K]) => void) | null | undefined} callback
+ * @returns {() => void}
+ */
+ $on(type, callback) {
+ if (!is_function(callback)) {
+ return noop;
+ }
+ const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
+ callbacks.push(callback);
+ return () => {
+ const index2 = callbacks.indexOf(callback);
+ if (index2 !== -1)
+ callbacks.splice(index2, 1);
+ };
+ }
+ /**
+ * @param {Partial} props
+ * @returns {void}
+ */
+ $set(props) {
+ if (this.$$set && !is_empty(props)) {
+ this.$$.skip_bound = true;
+ this.$$set(props);
+ this.$$.skip_bound = false;
+ }
+ }
+};
+
+// node_modules/svelte/src/shared/version.js
+var PUBLIC_VERSION = "4";
+
+// node_modules/svelte/src/runtime/internal/disclose-version/index.js
+if (typeof window !== "undefined")
+ (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION);
+
+// node_modules/tslib/tslib.es6.js
+function __awaiter(thisArg, _arguments, P, generator) {
+ function adopt(value) {
+ return value instanceof P ? value : new P(function(resolve) {
+ resolve(value);
+ });
+ }
+ return new (P || (P = Promise))(function(resolve, reject) {
+ function fulfilled(value) {
+ try {
+ step(generator.next(value));
+ } catch (e) {
+ reject(e);
+ }
+ }
+ function rejected(value) {
+ try {
+ step(generator["throw"](value));
+ } catch (e) {
+ reject(e);
+ }
+ }
+ function step(result) {
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
+ }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+}
+
+// src/ui/actionPaletteHistory.ts
+var PROMPT_HISTORY_LIMIT = 50;
+var HISTORY_STORAGE_KEY = "local-gpt-action-palette-history";
+var promptHistory = loadHistoryFromStorage();
+function loadHistoryFromStorage() {
+ if (typeof localStorage === "undefined")
+ return [];
+ try {
+ const raw = localStorage.getItem(HISTORY_STORAGE_KEY);
+ if (!raw)
+ return [];
+ const parsed = JSON.parse(raw);
+ if (!Array.isArray(parsed))
+ return [];
+ return parsed.filter((item) => typeof item === "string").slice(-PROMPT_HISTORY_LIMIT);
+ } catch (error) {
+ console.error("Failed to read Action Palette history:", error);
+ return [];
+ }
+}
+function persistHistory() {
+ if (typeof localStorage === "undefined")
+ return;
+ try {
+ localStorage.setItem(
+ HISTORY_STORAGE_KEY,
+ JSON.stringify(promptHistory.slice(-PROMPT_HISTORY_LIMIT))
+ );
+ } catch (error) {
+ console.error("Failed to save Action Palette history:", error);
+ }
+}
+function addToPromptHistory(entry) {
+ var _a2;
+ const normalized = entry.trim();
+ if (!normalized)
+ return;
+ const lastNormalized = (_a2 = promptHistory[promptHistory.length - 1]) == null ? void 0 : _a2.trim();
+ if (lastNormalized === normalized)
+ return;
+ promptHistory.push(entry);
+ if (promptHistory.length > PROMPT_HISTORY_LIMIT) {
+ promptHistory.shift();
+ }
+ persistHistory();
+}
+function getPromptHistoryEntry(index2) {
+ return promptHistory[index2];
+}
+function getPromptHistoryLength() {
+ return promptHistory.length;
+}
+
+// src/ui/ActionPalette.svelte
+function get_each_context(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[119] = list[i];
+ child_ctx[121] = i;
+ return child_ctx;
+}
+function get_each_context_1(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[119] = list[i];
+ child_ctx[121] = i;
+ return child_ctx;
+}
+function get_each_context_2(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[119] = list[i];
+ child_ctx[121] = i;
+ return child_ctx;
+}
+function get_each_context_3(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[119] = list[i];
+ child_ctx[121] = i;
+ return child_ctx;
+}
+function get_each_context_4(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[119] = list[i];
+ child_ctx[121] = i;
+ return child_ctx;
+}
+function get_each_context_5(ctx, list, i) {
+ const child_ctx = ctx.slice();
+ child_ctx[119] = list[i];
+ child_ctx[121] = i;
+ return child_ctx;
+}
+function create_if_block_1(ctx) {
+ let div0;
+ let t0;
+ let div1;
+ let t1;
+ let div2;
+ let t2;
+ let div3;
+ let t3;
+ let div4;
+ let t4;
+ let div5;
+ let each_value_5 = ensure_array_like(
+ /*fileItems*/
+ ctx[11]
+ );
+ let each_blocks_5 = [];
+ for (let i = 0; i < each_value_5.length; i += 1) {
+ each_blocks_5[i] = create_each_block_5(get_each_context_5(ctx, each_value_5, i));
+ }
+ let each_value_4 = ensure_array_like(
+ /*commandItems*/
+ ctx[12]
+ );
+ let each_blocks_4 = [];
+ for (let i = 0; i < each_value_4.length; i += 1) {
+ each_blocks_4[i] = create_each_block_4(get_each_context_4(ctx, each_value_4, i));
+ }
+ let each_value_3 = ensure_array_like(
+ /*providerItems*/
+ ctx[13]
+ );
+ let each_blocks_3 = [];
+ for (let i = 0; i < each_value_3.length; i += 1) {
+ each_blocks_3[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i));
+ }
+ let each_value_2 = ensure_array_like(
+ /*modelItems*/
+ ctx[14]
+ );
+ let each_blocks_2 = [];
+ for (let i = 0; i < each_value_2.length; i += 1) {
+ each_blocks_2[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i));
+ }
+ let each_value_1 = ensure_array_like(
+ /*creativityItems*/
+ ctx[15]
+ );
+ let each_blocks_1 = [];
+ for (let i = 0; i < each_value_1.length; i += 1) {
+ each_blocks_1[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i));
+ }
+ let each_value = ensure_array_like(
+ /*systemItems*/
+ ctx[16]
+ );
+ let each_blocks = [];
+ for (let i = 0; i < each_value.length; i += 1) {
+ each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
+ }
+ return {
+ c() {
+ div0 = element("div");
+ for (let i = 0; i < each_blocks_5.length; i += 1) {
+ each_blocks_5[i].c();
+ }
+ t0 = space();
+ div1 = element("div");
+ for (let i = 0; i < each_blocks_4.length; i += 1) {
+ each_blocks_4[i].c();
+ }
+ t1 = space();
+ div2 = element("div");
+ for (let i = 0; i < each_blocks_3.length; i += 1) {
+ each_blocks_3[i].c();
+ }
+ t2 = space();
+ div3 = element("div");
+ for (let i = 0; i < each_blocks_2.length; i += 1) {
+ each_blocks_2[i].c();
+ }
+ t3 = space();
+ div4 = element("div");
+ for (let i = 0; i < each_blocks_1.length; i += 1) {
+ each_blocks_1[i].c();
+ }
+ t4 = space();
+ div5 = element("div");
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ each_blocks[i].c();
+ }
+ attr(div0, "class", "local-gpt-dropdown");
+ set_style(
+ div0,
+ "display",
+ /*activeDropdown*/
+ ctx[2] === "file" ? "block" : "none"
+ );
+ attr(div1, "class", "local-gpt-dropdown");
+ set_style(
+ div1,
+ "display",
+ /*activeDropdown*/
+ ctx[2] === "command" ? "block" : "none"
+ );
+ attr(div2, "class", "local-gpt-dropdown");
+ set_style(
+ div2,
+ "display",
+ /*activeDropdown*/
+ ctx[2] === "provider" ? "block" : "none"
+ );
+ attr(div3, "class", "local-gpt-dropdown");
+ set_style(
+ div3,
+ "display",
+ /*activeDropdown*/
+ ctx[2] === "model" ? "block" : "none"
+ );
+ attr(div4, "class", "local-gpt-dropdown");
+ set_style(
+ div4,
+ "display",
+ /*activeDropdown*/
+ ctx[2] === "creativity" ? "block" : "none"
+ );
+ attr(div5, "class", "local-gpt-dropdown");
+ set_style(
+ div5,
+ "display",
+ /*activeDropdown*/
+ ctx[2] === "system" ? "block" : "none"
+ );
+ },
+ m(target, anchor) {
+ insert(target, div0, anchor);
+ for (let i = 0; i < each_blocks_5.length; i += 1) {
+ if (each_blocks_5[i]) {
+ each_blocks_5[i].m(div0, null);
+ }
+ }
+ ctx[36](div0);
+ insert(target, t0, anchor);
+ insert(target, div1, anchor);
+ for (let i = 0; i < each_blocks_4.length; i += 1) {
+ if (each_blocks_4[i]) {
+ each_blocks_4[i].m(div1, null);
+ }
+ }
+ ctx[39](div1);
+ insert(target, t1, anchor);
+ insert(target, div2, anchor);
+ for (let i = 0; i < each_blocks_3.length; i += 1) {
+ if (each_blocks_3[i]) {
+ each_blocks_3[i].m(div2, null);
+ }
+ }
+ ctx[42](div2);
+ insert(target, t2, anchor);
+ insert(target, div3, anchor);
+ for (let i = 0; i < each_blocks_2.length; i += 1) {
+ if (each_blocks_2[i]) {
+ each_blocks_2[i].m(div3, null);
+ }
+ }
+ ctx[45](div3);
+ insert(target, t3, anchor);
+ insert(target, div4, anchor);
+ for (let i = 0; i < each_blocks_1.length; i += 1) {
+ if (each_blocks_1[i]) {
+ each_blocks_1[i].m(div4, null);
+ }
+ }
+ ctx[48](div4);
+ insert(target, t4, anchor);
+ insert(target, div5, anchor);
+ for (let i = 0; i < each_blocks.length; i += 1) {
+ if (each_blocks[i]) {
+ each_blocks[i].m(div5, null);
+ }
+ }
+ ctx[51](div5);
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & /*selectedIndex, handleSelection, fileItems, activeDropdown*/
+ 2230276) {
+ each_value_5 = ensure_array_like(
+ /*fileItems*/
+ ctx2[11]
+ );
+ let i;
+ for (i = 0; i < each_value_5.length; i += 1) {
+ const child_ctx = get_each_context_5(ctx2, each_value_5, i);
+ if (each_blocks_5[i]) {
+ each_blocks_5[i].p(child_ctx, dirty);
+ } else {
+ each_blocks_5[i] = create_each_block_5(child_ctx);
+ each_blocks_5[i].c();
+ each_blocks_5[i].m(div0, null);
+ }
+ }
+ for (; i < each_blocks_5.length; i += 1) {
+ each_blocks_5[i].d(1);
+ }
+ each_blocks_5.length = each_value_5.length;
+ }
+ if (dirty[0] & /*activeDropdown*/
+ 4) {
+ set_style(
+ div0,
+ "display",
+ /*activeDropdown*/
+ ctx2[2] === "file" ? "block" : "none"
+ );
+ }
+ if (dirty[0] & /*selectedIndex, handleSelection, commandItems, activeDropdown*/
+ 2232324) {
+ each_value_4 = ensure_array_like(
+ /*commandItems*/
+ ctx2[12]
+ );
+ let i;
+ for (i = 0; i < each_value_4.length; i += 1) {
+ const child_ctx = get_each_context_4(ctx2, each_value_4, i);
+ if (each_blocks_4[i]) {
+ each_blocks_4[i].p(child_ctx, dirty);
+ } else {
+ each_blocks_4[i] = create_each_block_4(child_ctx);
+ each_blocks_4[i].c();
+ each_blocks_4[i].m(div1, null);
+ }
+ }
+ for (; i < each_blocks_4.length; i += 1) {
+ each_blocks_4[i].d(1);
+ }
+ each_blocks_4.length = each_value_4.length;
+ }
+ if (dirty[0] & /*activeDropdown*/
+ 4) {
+ set_style(
+ div1,
+ "display",
+ /*activeDropdown*/
+ ctx2[2] === "command" ? "block" : "none"
+ );
+ }
+ if (dirty[0] & /*selectedIndex, handleSelection, providerItems, activeDropdown*/
+ 2236420) {
+ each_value_3 = ensure_array_like(
+ /*providerItems*/
+ ctx2[13]
+ );
+ let i;
+ for (i = 0; i < each_value_3.length; i += 1) {
+ const child_ctx = get_each_context_3(ctx2, each_value_3, i);
+ if (each_blocks_3[i]) {
+ each_blocks_3[i].p(child_ctx, dirty);
+ } else {
+ each_blocks_3[i] = create_each_block_3(child_ctx);
+ each_blocks_3[i].c();
+ each_blocks_3[i].m(div2, null);
+ }
+ }
+ for (; i < each_blocks_3.length; i += 1) {
+ each_blocks_3[i].d(1);
+ }
+ each_blocks_3.length = each_value_3.length;
+ }
+ if (dirty[0] & /*activeDropdown*/
+ 4) {
+ set_style(
+ div2,
+ "display",
+ /*activeDropdown*/
+ ctx2[2] === "provider" ? "block" : "none"
+ );
+ }
+ if (dirty[0] & /*selectedIndex, handleSelection, modelItems, activeDropdown*/
+ 2244612) {
+ each_value_2 = ensure_array_like(
+ /*modelItems*/
+ ctx2[14]
+ );
+ let i;
+ for (i = 0; i < each_value_2.length; i += 1) {
+ const child_ctx = get_each_context_2(ctx2, each_value_2, i);
+ if (each_blocks_2[i]) {
+ each_blocks_2[i].p(child_ctx, dirty);
+ } else {
+ each_blocks_2[i] = create_each_block_2(child_ctx);
+ each_blocks_2[i].c();
+ each_blocks_2[i].m(div3, null);
+ }
+ }
+ for (; i < each_blocks_2.length; i += 1) {
+ each_blocks_2[i].d(1);
+ }
+ each_blocks_2.length = each_value_2.length;
+ }
+ if (dirty[0] & /*activeDropdown*/
+ 4) {
+ set_style(
+ div3,
+ "display",
+ /*activeDropdown*/
+ ctx2[2] === "model" ? "block" : "none"
+ );
+ }
+ if (dirty[0] & /*selectedIndex, handleSelection, creativityItems, activeDropdown*/
+ 2260996) {
+ each_value_1 = ensure_array_like(
+ /*creativityItems*/
+ ctx2[15]
+ );
+ let i;
+ for (i = 0; i < each_value_1.length; i += 1) {
+ const child_ctx = get_each_context_1(ctx2, each_value_1, i);
+ if (each_blocks_1[i]) {
+ each_blocks_1[i].p(child_ctx, dirty);
+ } else {
+ each_blocks_1[i] = create_each_block_1(child_ctx);
+ each_blocks_1[i].c();
+ each_blocks_1[i].m(div4, null);
+ }
+ }
+ for (; i < each_blocks_1.length; i += 1) {
+ each_blocks_1[i].d(1);
+ }
+ each_blocks_1.length = each_value_1.length;
+ }
+ if (dirty[0] & /*activeDropdown*/
+ 4) {
+ set_style(
+ div4,
+ "display",
+ /*activeDropdown*/
+ ctx2[2] === "creativity" ? "block" : "none"
+ );
+ }
+ if (dirty[0] & /*selectedIndex, handleSelection, systemItems, activeDropdown*/
+ 2293764) {
+ each_value = ensure_array_like(
+ /*systemItems*/
+ ctx2[16]
+ );
+ let i;
+ for (i = 0; i < each_value.length; i += 1) {
+ const child_ctx = get_each_context(ctx2, each_value, i);
+ if (each_blocks[i]) {
+ each_blocks[i].p(child_ctx, dirty);
+ } else {
+ each_blocks[i] = create_each_block(child_ctx);
+ each_blocks[i].c();
+ each_blocks[i].m(div5, null);
+ }
+ }
+ for (; i < each_blocks.length; i += 1) {
+ each_blocks[i].d(1);
+ }
+ each_blocks.length = each_value.length;
+ }
+ if (dirty[0] & /*activeDropdown*/
+ 4) {
+ set_style(
+ div5,
+ "display",
+ /*activeDropdown*/
+ ctx2[2] === "system" ? "block" : "none"
+ );
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div0);
+ detach(t0);
+ detach(div1);
+ detach(t1);
+ detach(div2);
+ detach(t2);
+ detach(div3);
+ detach(t3);
+ detach(div4);
+ detach(t4);
+ detach(div5);
+ }
+ destroy_each(each_blocks_5, detaching);
+ ctx[36](null);
+ destroy_each(each_blocks_4, detaching);
+ ctx[39](null);
+ destroy_each(each_blocks_3, detaching);
+ ctx[42](null);
+ destroy_each(each_blocks_2, detaching);
+ ctx[45](null);
+ destroy_each(each_blocks_1, detaching);
+ ctx[48](null);
+ destroy_each(each_blocks, detaching);
+ ctx[51](null);
+ }
+ };
+}
+function create_if_block_8(ctx) {
+ let div;
+ let span0;
+ let t0_value = (
+ /*item*/
+ ctx[119].basename + ""
+ );
+ let t0;
+ let t1;
+ let t2_value = (
+ /*item*/
+ ctx[119].extension + ""
+ );
+ let t2;
+ let t3;
+ let span1;
+ let t4_value = (
+ /*item*/
+ ctx[119].path + ""
+ );
+ let t4;
+ let t5;
+ let div_class_value;
+ let div_aria_selected_value;
+ let mounted;
+ let dispose;
+ function click_handler() {
+ return (
+ /*click_handler*/
+ ctx[34](
+ /*item*/
+ ctx[119]
+ )
+ );
+ }
+ function keydown_handler(...args) {
+ return (
+ /*keydown_handler*/
+ ctx[35](
+ /*item*/
+ ctx[119],
+ ...args
+ )
+ );
+ }
+ return {
+ c() {
+ div = element("div");
+ span0 = element("span");
+ t0 = text(t0_value);
+ t1 = text(".");
+ t2 = text(t2_value);
+ t3 = space();
+ span1 = element("span");
+ t4 = text(t4_value);
+ t5 = space();
+ attr(span0, "class", "local-gpt-file-name");
+ attr(span1, "class", "local-gpt-file-path");
+ attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""));
+ attr(div, "role", "option");
+ attr(div, "tabindex", "0");
+ attr(div, "aria-selected", div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17]);
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ append(div, span0);
+ append(span0, t0);
+ append(span0, t1);
+ append(span0, t2);
+ append(div, t3);
+ append(div, span1);
+ append(span1, t4);
+ append(div, t5);
+ if (!mounted) {
+ dispose = [
+ listen(div, "click", click_handler),
+ listen(div, "keydown", keydown_handler)
+ ];
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if (dirty[0] & /*fileItems*/
+ 2048 && t0_value !== (t0_value = /*item*/
+ ctx[119].basename + ""))
+ set_data(t0, t0_value);
+ if (dirty[0] & /*fileItems*/
+ 2048 && t2_value !== (t2_value = /*item*/
+ ctx[119].extension + ""))
+ set_data(t2, t2_value);
+ if (dirty[0] & /*fileItems*/
+ 2048 && t4_value !== (t4_value = /*item*/
+ ctx[119].path + ""))
+ set_data(t4, t4_value);
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""))) {
+ attr(div, "class", div_class_value);
+ }
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17])) {
+ attr(div, "aria-selected", div_aria_selected_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div);
+ }
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_each_block_5(ctx) {
+ let if_block_anchor;
+ let if_block = (
+ /*activeDropdown*/
+ ctx[2] === "file" && create_if_block_8(ctx)
+ );
+ return {
+ c() {
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ },
+ p(ctx2, dirty) {
+ if (
+ /*activeDropdown*/
+ ctx2[2] === "file"
+ ) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block_8(ctx2);
+ if_block.c();
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(if_block_anchor);
+ }
+ if (if_block)
+ if_block.d(detaching);
+ }
+ };
+}
+function create_if_block_7(ctx) {
+ let div;
+ let span0;
+ let t0;
+ let t1_value = (
+ /*item*/
+ ctx[119].name + ""
+ );
+ let t1;
+ let t2;
+ let span1;
+ let t3_value = (
+ /*item*/
+ ctx[119].description + ""
+ );
+ let t3;
+ let t4;
+ let div_class_value;
+ let div_aria_selected_value;
+ let mounted;
+ let dispose;
+ function click_handler_1() {
+ return (
+ /*click_handler_1*/
+ ctx[37](
+ /*item*/
+ ctx[119]
+ )
+ );
+ }
+ function keydown_handler_1(...args) {
+ return (
+ /*keydown_handler_1*/
+ ctx[38](
+ /*item*/
+ ctx[119],
+ ...args
+ )
+ );
+ }
+ return {
+ c() {
+ div = element("div");
+ span0 = element("span");
+ t0 = text("/");
+ t1 = text(t1_value);
+ t2 = space();
+ span1 = element("span");
+ t3 = text(t3_value);
+ t4 = space();
+ attr(span0, "class", "local-gpt-command-name");
+ attr(span1, "class", "local-gpt-command-description");
+ attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""));
+ attr(div, "role", "option");
+ attr(div, "tabindex", "0");
+ attr(div, "aria-selected", div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17]);
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ append(div, span0);
+ append(span0, t0);
+ append(span0, t1);
+ append(div, t2);
+ append(div, span1);
+ append(span1, t3);
+ append(div, t4);
+ if (!mounted) {
+ dispose = [
+ listen(div, "click", click_handler_1),
+ listen(div, "keydown", keydown_handler_1)
+ ];
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if (dirty[0] & /*commandItems*/
+ 4096 && t1_value !== (t1_value = /*item*/
+ ctx[119].name + ""))
+ set_data(t1, t1_value);
+ if (dirty[0] & /*commandItems*/
+ 4096 && t3_value !== (t3_value = /*item*/
+ ctx[119].description + ""))
+ set_data(t3, t3_value);
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""))) {
+ attr(div, "class", div_class_value);
+ }
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17])) {
+ attr(div, "aria-selected", div_aria_selected_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div);
+ }
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_each_block_4(ctx) {
+ let if_block_anchor;
+ let if_block = (
+ /*activeDropdown*/
+ ctx[2] === "command" && create_if_block_7(ctx)
+ );
+ return {
+ c() {
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ },
+ p(ctx2, dirty) {
+ if (
+ /*activeDropdown*/
+ ctx2[2] === "command"
+ ) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block_7(ctx2);
+ if_block.c();
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(if_block_anchor);
+ }
+ if (if_block)
+ if_block.d(detaching);
+ }
+ };
+}
+function create_if_block_5(ctx) {
+ let div1;
+ let div0;
+ let span0;
+ let t0_value = (
+ /*item*/
+ ctx[119].providerName + ""
+ );
+ let t0;
+ let t1;
+ let t2;
+ let span1;
+ let t3_value = (
+ /*item*/
+ ctx[119].name + ""
+ );
+ let t3;
+ let t4;
+ let div1_class_value;
+ let div1_aria_selected_value;
+ let mounted;
+ let dispose;
+ let if_block = (
+ /*item*/
+ ctx[119].providerUrl && create_if_block_6(ctx)
+ );
+ function click_handler_2() {
+ return (
+ /*click_handler_2*/
+ ctx[40](
+ /*item*/
+ ctx[119]
+ )
+ );
+ }
+ function keydown_handler_2(...args) {
+ return (
+ /*keydown_handler_2*/
+ ctx[41](
+ /*item*/
+ ctx[119],
+ ...args
+ )
+ );
+ }
+ return {
+ c() {
+ div1 = element("div");
+ div0 = element("div");
+ span0 = element("span");
+ t0 = text(t0_value);
+ t1 = space();
+ if (if_block)
+ if_block.c();
+ t2 = space();
+ span1 = element("span");
+ t3 = text(t3_value);
+ t4 = space();
+ attr(span0, "class", "local-gpt-provider-name");
+ attr(div0, "class", "local-gpt-provider-header");
+ attr(span1, "class", "local-gpt-provider-model");
+ attr(div1, "class", div1_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""));
+ attr(div1, "role", "option");
+ attr(div1, "tabindex", "0");
+ attr(div1, "aria-selected", div1_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17]);
+ },
+ m(target, anchor) {
+ insert(target, div1, anchor);
+ append(div1, div0);
+ append(div0, span0);
+ append(span0, t0);
+ append(div0, t1);
+ if (if_block)
+ if_block.m(div0, null);
+ append(div1, t2);
+ append(div1, span1);
+ append(span1, t3);
+ append(div1, t4);
+ if (!mounted) {
+ dispose = [
+ listen(div1, "click", click_handler_2),
+ listen(div1, "keydown", keydown_handler_2)
+ ];
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if (dirty[0] & /*providerItems*/
+ 8192 && t0_value !== (t0_value = /*item*/
+ ctx[119].providerName + ""))
+ set_data(t0, t0_value);
+ if (
+ /*item*/
+ ctx[119].providerUrl
+ ) {
+ if (if_block) {
+ if_block.p(ctx, dirty);
+ } else {
+ if_block = create_if_block_6(ctx);
+ if_block.c();
+ if_block.m(div0, null);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ if (dirty[0] & /*providerItems*/
+ 8192 && t3_value !== (t3_value = /*item*/
+ ctx[119].name + ""))
+ set_data(t3, t3_value);
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div1_class_value !== (div1_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""))) {
+ attr(div1, "class", div1_class_value);
+ }
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div1_aria_selected_value !== (div1_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17])) {
+ attr(div1, "aria-selected", div1_aria_selected_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div1);
+ }
+ if (if_block)
+ if_block.d();
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_if_block_6(ctx) {
+ let span;
+ let t_value = (
+ /*item*/
+ ctx[119].providerUrl + ""
+ );
+ let t;
+ return {
+ c() {
+ span = element("span");
+ t = text(t_value);
+ attr(span, "class", "local-gpt-provider-url");
+ },
+ m(target, anchor) {
+ insert(target, span, anchor);
+ append(span, t);
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & /*providerItems*/
+ 8192 && t_value !== (t_value = /*item*/
+ ctx2[119].providerUrl + ""))
+ set_data(t, t_value);
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(span);
+ }
+ }
+ };
+}
+function create_each_block_3(ctx) {
+ let if_block_anchor;
+ let if_block = (
+ /*activeDropdown*/
+ ctx[2] === "provider" && create_if_block_5(ctx)
+ );
+ return {
+ c() {
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ },
+ p(ctx2, dirty) {
+ if (
+ /*activeDropdown*/
+ ctx2[2] === "provider"
+ ) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block_5(ctx2);
+ if_block.c();
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(if_block_anchor);
+ }
+ if (if_block)
+ if_block.d(detaching);
+ }
+ };
+}
+function create_if_block_4(ctx) {
+ let div;
+ let span;
+ let t0_value = (
+ /*item*/
+ ctx[119].name + ""
+ );
+ let t0;
+ let t1;
+ let div_class_value;
+ let div_aria_selected_value;
+ let mounted;
+ let dispose;
+ function click_handler_3() {
+ return (
+ /*click_handler_3*/
+ ctx[43](
+ /*item*/
+ ctx[119]
+ )
+ );
+ }
+ function keydown_handler_3(...args) {
+ return (
+ /*keydown_handler_3*/
+ ctx[44](
+ /*item*/
+ ctx[119],
+ ...args
+ )
+ );
+ }
+ return {
+ c() {
+ div = element("div");
+ span = element("span");
+ t0 = text(t0_value);
+ t1 = space();
+ attr(span, "class", "local-gpt-model-name");
+ attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""));
+ attr(div, "role", "option");
+ attr(div, "tabindex", "0");
+ attr(div, "aria-selected", div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17]);
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ append(div, span);
+ append(span, t0);
+ append(div, t1);
+ if (!mounted) {
+ dispose = [
+ listen(div, "click", click_handler_3),
+ listen(div, "keydown", keydown_handler_3)
+ ];
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if (dirty[0] & /*modelItems*/
+ 16384 && t0_value !== (t0_value = /*item*/
+ ctx[119].name + ""))
+ set_data(t0, t0_value);
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""))) {
+ attr(div, "class", div_class_value);
+ }
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17])) {
+ attr(div, "aria-selected", div_aria_selected_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div);
+ }
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_each_block_2(ctx) {
+ let if_block_anchor;
+ let if_block = (
+ /*activeDropdown*/
+ ctx[2] === "model" && create_if_block_4(ctx)
+ );
+ return {
+ c() {
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ },
+ p(ctx2, dirty) {
+ if (
+ /*activeDropdown*/
+ ctx2[2] === "model"
+ ) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block_4(ctx2);
+ if_block.c();
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(if_block_anchor);
+ }
+ if (if_block)
+ if_block.d(detaching);
+ }
+ };
+}
+function create_if_block_3(ctx) {
+ let div;
+ let span;
+ let t0_value = (
+ /*item*/
+ ctx[119].name + ""
+ );
+ let t0;
+ let t1;
+ let div_class_value;
+ let div_aria_selected_value;
+ let mounted;
+ let dispose;
+ function click_handler_4() {
+ return (
+ /*click_handler_4*/
+ ctx[46](
+ /*item*/
+ ctx[119]
+ )
+ );
+ }
+ function keydown_handler_4(...args) {
+ return (
+ /*keydown_handler_4*/
+ ctx[47](
+ /*item*/
+ ctx[119],
+ ...args
+ )
+ );
+ }
+ return {
+ c() {
+ div = element("div");
+ span = element("span");
+ t0 = text(t0_value);
+ t1 = space();
+ attr(span, "class", "local-gpt-creativity-name");
+ attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""));
+ attr(div, "role", "option");
+ attr(div, "tabindex", "0");
+ attr(div, "aria-selected", div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17]);
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ append(div, span);
+ append(span, t0);
+ append(div, t1);
+ if (!mounted) {
+ dispose = [
+ listen(div, "click", click_handler_4),
+ listen(div, "keydown", keydown_handler_4)
+ ];
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if (dirty[0] & /*creativityItems*/
+ 32768 && t0_value !== (t0_value = /*item*/
+ ctx[119].name + ""))
+ set_data(t0, t0_value);
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""))) {
+ attr(div, "class", div_class_value);
+ }
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17])) {
+ attr(div, "aria-selected", div_aria_selected_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div);
+ }
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_each_block_1(ctx) {
+ let if_block_anchor;
+ let if_block = (
+ /*activeDropdown*/
+ ctx[2] === "creativity" && create_if_block_3(ctx)
+ );
+ return {
+ c() {
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ },
+ p(ctx2, dirty) {
+ if (
+ /*activeDropdown*/
+ ctx2[2] === "creativity"
+ ) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block_3(ctx2);
+ if_block.c();
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(if_block_anchor);
+ }
+ if (if_block)
+ if_block.d(detaching);
+ }
+ };
+}
+function create_if_block_2(ctx) {
+ let div;
+ let span0;
+ let t0_value = (
+ /*item*/
+ ctx[119].name + ""
+ );
+ let t0;
+ let t1;
+ let span1;
+ let t2_value = formatSystemPreview(
+ /*item*/
+ ctx[119].system
+ ) + "";
+ let t2;
+ let t3;
+ let div_class_value;
+ let div_aria_selected_value;
+ let mounted;
+ let dispose;
+ function click_handler_5() {
+ return (
+ /*click_handler_5*/
+ ctx[49](
+ /*item*/
+ ctx[119]
+ )
+ );
+ }
+ function keydown_handler_5(...args) {
+ return (
+ /*keydown_handler_5*/
+ ctx[50](
+ /*item*/
+ ctx[119],
+ ...args
+ )
+ );
+ }
+ return {
+ c() {
+ div = element("div");
+ span0 = element("span");
+ t0 = text(t0_value);
+ t1 = space();
+ span1 = element("span");
+ t2 = text(t2_value);
+ t3 = space();
+ attr(span0, "class", "local-gpt-system-name");
+ attr(span1, "class", "local-gpt-system-detail");
+ attr(div, "class", div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""));
+ attr(div, "role", "option");
+ attr(div, "tabindex", "0");
+ attr(div, "aria-selected", div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17]);
+ },
+ m(target, anchor) {
+ insert(target, div, anchor);
+ append(div, span0);
+ append(span0, t0);
+ append(div, t1);
+ append(div, span1);
+ append(span1, t2);
+ append(div, t3);
+ if (!mounted) {
+ dispose = [
+ listen(div, "click", click_handler_5),
+ listen(div, "keydown", keydown_handler_5)
+ ];
+ mounted = true;
+ }
+ },
+ p(new_ctx, dirty) {
+ ctx = new_ctx;
+ if (dirty[0] & /*systemItems*/
+ 65536 && t0_value !== (t0_value = /*item*/
+ ctx[119].name + ""))
+ set_data(t0, t0_value);
+ if (dirty[0] & /*systemItems*/
+ 65536 && t2_value !== (t2_value = formatSystemPreview(
+ /*item*/
+ ctx[119].system
+ ) + ""))
+ set_data(t2, t2_value);
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_class_value !== (div_class_value = "local-gpt-dropdown-item " + /*index*/
+ (ctx[121] === /*selectedIndex*/
+ ctx[17] ? "local-gpt-selected" : ""))) {
+ attr(div, "class", div_class_value);
+ }
+ if (dirty[0] & /*selectedIndex*/
+ 131072 && div_aria_selected_value !== (div_aria_selected_value = /*index*/
+ ctx[121] === /*selectedIndex*/
+ ctx[17])) {
+ attr(div, "aria-selected", div_aria_selected_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div);
+ }
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+function create_each_block(ctx) {
+ let if_block_anchor;
+ let if_block = (
+ /*activeDropdown*/
+ ctx[2] === "system" && create_if_block_2(ctx)
+ );
+ return {
+ c() {
+ if (if_block)
+ if_block.c();
+ if_block_anchor = empty();
+ },
+ m(target, anchor) {
+ if (if_block)
+ if_block.m(target, anchor);
+ insert(target, if_block_anchor, anchor);
+ },
+ p(ctx2, dirty) {
+ if (
+ /*activeDropdown*/
+ ctx2[2] === "system"
+ ) {
+ if (if_block) {
+ if_block.p(ctx2, dirty);
+ } else {
+ if_block = create_if_block_2(ctx2);
+ if_block.c();
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
+ }
+ } else if (if_block) {
+ if_block.d(1);
+ if_block = null;
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(if_block_anchor);
+ }
+ if (if_block)
+ if_block.d(detaching);
+ }
+ };
+}
+function create_if_block(ctx) {
+ let div1;
+ let div0;
+ let t;
+ let div0_class_value;
+ return {
+ c() {
+ div1 = element("div");
+ div0 = element("div");
+ t = text(
+ /*providerLabel*/
+ ctx[0]
+ );
+ attr(div0, "class", div0_class_value = /*badgeHighlight*/
+ ctx[18] ? "local-gpt-provider-badge-label local-gpt-badge-highlight" : "local-gpt-provider-badge-label");
+ attr(div1, "class", "local-gpt-provider-badge");
+ attr(div1, "aria-hidden", "true");
+ },
+ m(target, anchor) {
+ insert(target, div1, anchor);
+ append(div1, div0);
+ append(div0, t);
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & /*providerLabel*/
+ 1)
+ set_data(
+ t,
+ /*providerLabel*/
+ ctx2[0]
+ );
+ if (dirty[0] & /*badgeHighlight*/
+ 262144 && div0_class_value !== (div0_class_value = /*badgeHighlight*/
+ ctx2[18] ? "local-gpt-provider-badge-label local-gpt-badge-highlight" : "local-gpt-provider-badge-label")) {
+ attr(div0, "class", div0_class_value);
+ }
+ },
+ d(detaching) {
+ if (detaching) {
+ detach(div1);
+ }
+ }
+ };
+}
+function create_fragment(ctx) {
+ let div1;
+ let div0;
+ let t0;
+ let t1;
+ let mounted;
+ let dispose;
+ let if_block0 = (
+ /*activeDropdown*/
+ ctx[2] !== "none" && /*filteredItems*/
+ ctx[3].length > 0 && create_if_block_1(ctx)
+ );
+ let if_block1 = (
+ /*providerLabel*/
+ ctx[0] && create_if_block(ctx)
+ );
+ return {
+ c() {
+ div1 = element("div");
+ div0 = element("div");
+ t0 = space();
+ if (if_block0)
+ if_block0.c();
+ t1 = space();
+ if (if_block1)
+ if_block1.c();
+ attr(div0, "class", "local-gpt-action-palette");
+ attr(div0, "contenteditable", "true");
+ attr(div0, "role", "textbox");
+ attr(div0, "tabindex", "0");
+ attr(
+ div0,
+ "aria-label",
+ /*placeholder*/
+ ctx[1]
+ );
+ attr(
+ div0,
+ "data-placeholder",
+ /*placeholder*/
+ ctx[1]
+ );
+ attr(div0, "spellcheck", "false");
+ attr(div1, "class", "local-gpt-action-palette-shell");
+ },
+ m(target, anchor) {
+ insert(target, div1, anchor);
+ append(div1, div0);
+ ctx[33](div0);
+ append(div1, t0);
+ if (if_block0)
+ if_block0.m(div1, null);
+ append(div1, t1);
+ if (if_block1)
+ if_block1.m(div1, null);
+ if (!mounted) {
+ dispose = [
+ listen(
+ div0,
+ "keydown",
+ /*handleKeydown*/
+ ctx[19]
+ ),
+ listen(
+ div0,
+ "input",
+ /*handleInput*/
+ ctx[20]
+ ),
+ listen(
+ div0,
+ "keyup",
+ /*handleKeyup*/
+ ctx[23]
+ ),
+ listen(
+ div0,
+ "click",
+ /*handleContentClick*/
+ ctx[22]
+ )
+ ];
+ mounted = true;
+ }
+ },
+ p(ctx2, dirty) {
+ if (dirty[0] & /*placeholder*/
+ 2) {
+ attr(
+ div0,
+ "aria-label",
+ /*placeholder*/
+ ctx2[1]
+ );
+ }
+ if (dirty[0] & /*placeholder*/
+ 2) {
+ attr(
+ div0,
+ "data-placeholder",
+ /*placeholder*/
+ ctx2[1]
+ );
+ }
+ if (
+ /*activeDropdown*/
+ ctx2[2] !== "none" && /*filteredItems*/
+ ctx2[3].length > 0
+ ) {
+ if (if_block0) {
+ if_block0.p(ctx2, dirty);
+ } else {
+ if_block0 = create_if_block_1(ctx2);
+ if_block0.c();
+ if_block0.m(div1, t1);
+ }
+ } else if (if_block0) {
+ if_block0.d(1);
+ if_block0 = null;
+ }
+ if (
+ /*providerLabel*/
+ ctx2[0]
+ ) {
+ if (if_block1) {
+ if_block1.p(ctx2, dirty);
+ } else {
+ if_block1 = create_if_block(ctx2);
+ if_block1.c();
+ if_block1.m(div1, null);
+ }
+ } else if (if_block1) {
+ if_block1.d(1);
+ if_block1 = null;
+ }
+ },
+ i: noop,
+ o: noop,
+ d(detaching) {
+ if (detaching) {
+ detach(div1);
+ }
+ ctx[33](null);
+ if (if_block0)
+ if_block0.d();
+ if (if_block1)
+ if_block1.d();
+ mounted = false;
+ run_all(dispose);
+ }
+ };
+}
+var MAX_DROPDOWN_RESULTS = 15;
+var FILE_MENTION_REGEX = /@([^@]+?\.[a-zA-Z0-9]+)(?=\s|$|@)/g;
+var MENTION_PREFIX = "@";
+var SPACE_AFTER_MENTION = " ";
+var COMMAND_REGEX = /\/([^\/\s]+)(?=\s|$|\/)/g;
+var COMMAND_PREFIX = "/";
+var SPACE_AFTER_COMMAND = " ";
+var SYSTEM_PREVIEW_LENGTH = 80;
+function findMatchingFile(fileName, availableFiles) {
+ const normalizedFileName = fileName.toLowerCase();
+ return availableFiles.find((file) => {
+ const fullFileName = `${file.basename}.${file.extension}`;
+ return fullFileName.toLowerCase() === normalizedFileName;
+ });
+}
+function escapeHtmlContent(text2) {
+ const temporaryElement = document.createElement("div");
+ temporaryElement.textContent = text2;
+ return temporaryElement.innerHTML;
+}
+function isCharacterWhitespace(character) {
+ return /\s/.test(character);
+}
+function scrollSelectedIntoView(container, index2) {
+ if (!container || index2 < 0)
+ return;
+ const selectedItem = container.children[index2];
+ if (!selectedItem)
+ return;
+ const dropdownRect = container.getBoundingClientRect();
+ const itemRect = selectedItem.getBoundingClientRect();
+ const isItemVisible = itemRect.top >= dropdownRect.top && itemRect.bottom <= dropdownRect.bottom;
+ if (!isItemVisible) {
+ selectedItem.scrollIntoView({ block: "nearest", behavior: "smooth" });
+ }
+}
+function formatSystemPreview(text2) {
+ const singleLine = text2.replace(/\r?\n/g, " ");
+ if (singleLine.length <= SYSTEM_PREVIEW_LENGTH)
+ return singleLine;
+ return `${singleLine.slice(0, SYSTEM_PREVIEW_LENGTH - 1)}\u2026`;
+}
+function fuzzyMatch(target, query) {
+ if (!query)
+ return true;
+ let ti = 0;
+ const t = target.toLowerCase();
+ for (const qc of query) {
+ ti = t.indexOf(qc, ti);
+ if (ti === -1)
+ return false;
+ ti++;
+ }
+ return true;
+}
+function createFileRemovalPattern(file) {
+ const fullFileName = `${file.basename}.${file.extension}`;
+ const escapedFileName = fullFileName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+ return new RegExp(`${MENTION_PREFIX}${escapedFileName}\\s?`, "g");
+}
+function instance($$self, $$props, $$invalidate) {
+ let { placeholder = I18n.t("commands.actionPalette.placeholder") } = $$props;
+ let { value = "" } = $$props;
+ let { providerLabel = "" } = $$props;
+ let { providerId = void 0 } = $$props;
+ let { getFiles = void 0 } = $$props;
+ let { getProviders = void 0 } = $$props;
+ let { onProviderChange = void 0 } = $$props;
+ let { getModels = void 0 } = $$props;
+ let { onModelChange = void 0 } = $$props;
+ let { onCreativityChange = void 0 } = $$props;
+ let { getSystemPrompts = void 0 } = $$props;
+ const dispatch = createEventDispatcher();
+ let contentElement = null;
+ let dropdownElement = null;
+ let commandDropdownElement = null;
+ let providerDropdownElement = null;
+ let modelDropdownElement = null;
+ let creativityDropdownElement = null;
+ let systemDropdownElement = null;
+ let activeDropdown = "none";
+ let filteredItems = [];
+ let fileItems = [];
+ let commandItems = [];
+ let providerItems = [];
+ let modelItems = [];
+ let creativityItems = [];
+ let systemItems = [];
+ let allProviders = [];
+ let allModels = [];
+ let allCreativities = [];
+ let allSystemPrompts = [];
+ function updateFilteredDropdownItems(matches2) {
+ $$invalidate(3, filteredItems = matches2);
+ if (matches2.length === 0) {
+ $$invalidate(17, selectedIndex = -1);
+ return;
+ }
+ if (selectedIndex < 0 || selectedIndex >= matches2.length) {
+ $$invalidate(17, selectedIndex = 0);
+ }
+ }
+ const dropdownControllers = {
+ provider: {
+ kind: "provider",
+ show: () => showProviderDropdown(),
+ refresh: () => applyProviderFilter()
+ },
+ model: {
+ kind: "model",
+ show: () => showModelDropdown(),
+ refresh: () => applyModelFilter()
+ },
+ creativity: {
+ kind: "creativity",
+ show: () => showCreativityDropdown(),
+ refresh: () => applyCreativityFilter()
+ },
+ system: {
+ kind: "system",
+ show: () => showSystemDropdown(),
+ refresh: () => applySystemFilter()
+ }
+ };
+ let selectedIndex = -1;
+ let badgeHighlight = false;
+ let selectedSystemPromptValue = void 0;
+ let historyIndex = getPromptHistoryLength();
+ let draftBeforeHistory = value;
+ let selectedFiles = [];
+ let textContent = "";
+ let cursorPosition = 0;
+ let mentionStartIndex = -1;
+ let commandStartIndex = -1;
+ let textTokens = [];
+ let providerName = providerLabel.split(" \xB7 ")[0] || "";
+ let modelName = (providerLabel.split(" \xB7 ")[1] || "").trim();
+ let creativityBadge = (providerLabel.split(" \xB7 ")[2] || "").trim();
+ let systemPromptBadge = "";
+ function getCreativityOptions() {
+ return [
+ {
+ id: "",
+ name: I18n.t("settings.creativityNone")
+ },
+ {
+ id: "low",
+ name: I18n.t("settings.creativityLow")
+ },
+ {
+ id: "medium",
+ name: I18n.t("settings.creativityMedium")
+ },
+ {
+ id: "high",
+ name: I18n.t("settings.creativityHigh")
+ }
+ ];
+ }
+ function extractMentionsFromText(text2) {
+ if (!getFiles) {
+ return { mentions: [], newSelectedFiles: [] };
+ }
+ const availableFiles = getFiles();
+ const mentions = [];
+ const newSelectedFiles = [];
+ const mentionMatches = Array.from(text2.matchAll(FILE_MENTION_REGEX));
+ for (const match of mentionMatches) {
+ const fileName = (match[1] || "").trim();
+ const matchedFile = findMatchingFile(fileName, availableFiles);
+ if (matchedFile && !selectedFiles.includes(matchedFile.path)) {
+ newSelectedFiles.push(matchedFile.path);
+ }
+ mentions.push(match[0]);
+ }
+ return { mentions, newSelectedFiles };
+ }
+ function getAvailableCommands() {
+ return [
+ {
+ name: "provider",
+ description: I18n.t("commands.actionPalette.changeProvider")
+ },
+ {
+ name: "model",
+ description: I18n.t("commands.actionPalette.changeModel")
+ },
+ {
+ name: "creativity",
+ description: I18n.t("commands.actionPalette.changeCreativity")
+ },
+ {
+ name: "system",
+ description: I18n.t("commands.actionPalette.changeSystemPrompt")
+ }
+ ];
+ }
+ function fetchAvailableProviders() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!getProviders)
+ return [];
+ try {
+ return yield getProviders();
+ } catch (error) {
+ console.error("Error fetching providers:", error);
+ return [];
+ }
+ });
+ }
+ function fetchAvailableModels() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!getModels || !providerId)
+ return [];
+ try {
+ return yield getModels(providerId);
+ } catch (error) {
+ console.error("Error fetching models:", error);
+ return [];
+ }
+ });
+ }
+ function parseTextToTokens(text2) {
+ var _a2;
+ const tokens = [];
+ if (getFiles) {
+ const availableFiles = getFiles();
+ const { newSelectedFiles } = extractMentionsFromText(text2);
+ if (newSelectedFiles.length > 0) {
+ selectedFiles = [...selectedFiles, ...newSelectedFiles];
+ }
+ }
+ const mentionMatches = getFiles ? Array.from(text2.matchAll(FILE_MENTION_REGEX)) : [];
+ const commandMatches = Array.from(text2.matchAll(COMMAND_REGEX));
+ const allMatches = [
+ ...mentionMatches.map((match) => ({ type: "file", match })),
+ ...commandMatches.map((match) => ({ type: "command", match }))
+ ].sort((a, b) => {
+ var _a3, _b;
+ return ((_a3 = a.match.index) !== null && _a3 !== void 0 ? _a3 : 0) - ((_b = b.match.index) !== null && _b !== void 0 ? _b : 0);
+ });
+ let lastIndex = 0;
+ for (const { type, match } of allMatches) {
+ const matchStart = (_a2 = match.index) !== null && _a2 !== void 0 ? _a2 : 0;
+ const matchEnd = matchStart + match[0].length;
+ if (matchStart > lastIndex) {
+ tokens.push({
+ type: "text",
+ content: text2.substring(lastIndex, matchStart),
+ start: lastIndex,
+ end: matchStart
+ });
+ }
+ if (type === "file" && getFiles) {
+ const fileName = (match[1] || "").trim();
+ const availableFiles = getFiles();
+ const matchedFile = findMatchingFile(fileName, availableFiles);
+ if (matchedFile) {
+ tokens.push({
+ type: "file",
+ content: match[0],
+ start: matchStart,
+ end: matchEnd,
+ filePath: matchedFile.path
+ });
+ } else {
+ tokens.push({
+ type: "text",
+ content: match[0],
+ start: matchStart,
+ end: matchEnd
+ });
+ }
+ } else if (type === "command") {
+ const commandName = (match[1] || "").trim();
+ const availableCommands = getAvailableCommands();
+ const matchedCommand = availableCommands.find((cmd) => cmd.name === commandName);
+ if (matchedCommand) {
+ tokens.push({
+ type: "command",
+ content: match[0],
+ start: matchStart,
+ end: matchEnd,
+ commandName: matchedCommand.name
+ });
+ } else {
+ tokens.push({
+ type: "text",
+ content: match[0],
+ start: matchStart,
+ end: matchEnd
+ });
+ }
+ }
+ lastIndex = matchEnd;
+ }
+ if (lastIndex < text2.length) {
+ tokens.push({
+ type: "text",
+ content: text2.substring(lastIndex),
+ start: lastIndex,
+ end: text2.length
+ });
+ }
+ return tokens;
+ }
+ function getCurrentCursorPosition() {
+ var _a2;
+ if (!contentElement)
+ return 0;
+ const selection = window.getSelection();
+ if (!selection || selection.rangeCount === 0)
+ return 0;
+ const range = selection.getRangeAt(0);
+ let position = 0;
+ const walker = document.createTreeWalker(contentElement, NodeFilter.SHOW_TEXT, null);
+ let textNode;
+ while (textNode = walker.nextNode()) {
+ if (textNode === range.startContainer) {
+ return position + range.startOffset;
+ }
+ position += ((_a2 = textNode.textContent) === null || _a2 === void 0 ? void 0 : _a2.length) || 0;
+ }
+ return position;
+ }
+ function setCursorPosition(position) {
+ var _a2;
+ if (!contentElement)
+ return;
+ const selection = window.getSelection();
+ const range = document.createRange();
+ let currentPosition = 0;
+ const walker = document.createTreeWalker(contentElement, NodeFilter.SHOW_TEXT, null);
+ let textNode;
+ while (textNode = walker.nextNode()) {
+ const nodeLength = ((_a2 = textNode.textContent) === null || _a2 === void 0 ? void 0 : _a2.length) || 0;
+ if (currentPosition + nodeLength >= position) {
+ const offset = position - currentPosition;
+ range.setStart(textNode, offset);
+ range.setEnd(textNode, offset);
+ selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
+ selection === null || selection === void 0 ? void 0 : selection.addRange(range);
+ return;
+ }
+ currentPosition += nodeLength;
+ }
+ }
+ function renderTokensAsHtml() {
+ return textTokens.map((token) => {
+ if (token.type === "file") {
+ return `${escapeHtmlContent(token.content)}`;
+ }
+ if (token.type === "command") {
+ return `${escapeHtmlContent(token.content)}`;
+ }
+ return escapeHtmlContent(token.content);
+ }).join("");
+ }
+ function updateContentDisplay() {
+ if (!contentElement)
+ return;
+ const currentCursor = getCurrentCursorPosition();
+ $$invalidate(4, contentElement.innerHTML = renderTokensAsHtml(), contentElement);
+ tick().then(() => {
+ setCursorPosition(currentCursor);
+ });
+ }
+ function setProviderBadgeLabel(pName, mName) {
+ providerName = pName;
+ modelName = mName;
+ const base = [providerName, modelName].filter(Boolean).join(" \xB7 ");
+ const extras = [creativityBadge, systemPromptBadge].filter(Boolean).join(" \xB7 ");
+ $$invalidate(0, providerLabel = extras ? `${base} \xB7 ${extras}` : base);
+ }
+ function highlightBadgeTemporarily() {
+ $$invalidate(18, badgeHighlight = true);
+ setTimeout(
+ () => {
+ $$invalidate(18, badgeHighlight = false);
+ },
+ 900
+ );
+ }
+ function applyHistoryEntry(text2) {
+ textContent = text2;
+ cursorPosition = textContent.length;
+ selectedFiles = [];
+ textTokens = parseTextToTokens(textContent);
+ hideDropdown();
+ updateContentDisplay();
+ tick().then(() => {
+ setCursorPosition(textContent.length);
+ });
+ }
+ onMount(() => {
+ queueMicrotask(() => {
+ contentElement === null || contentElement === void 0 ? void 0 : contentElement.focus();
+ if (value) {
+ textContent = value;
+ textTokens = parseTextToTokens(textContent);
+ updateContentDisplay();
+ }
+ });
+ });
+ function handleDropdownNavigation(event) {
+ if (activeDropdown === "none" || filteredItems.length === 0)
+ return false;
+ function moveSelection(delta) {
+ $$invalidate(17, selectedIndex = Math.min(Math.max(selectedIndex + delta, -1), filteredItems.length - 1));
+ scrollSelectedIntoView(getDropdownElementForActiveType(), selectedIndex);
+ }
+ switch (event.key) {
+ case "ArrowDown":
+ event.preventDefault();
+ moveSelection(1);
+ return true;
+ case "ArrowUp":
+ event.preventDefault();
+ moveSelection(-1);
+ return true;
+ case "Enter":
+ if (event.shiftKey)
+ return false;
+ case "Tab":
+ event.preventDefault();
+ if (selectedIndex >= 0 && filteredItems[selectedIndex]) {
+ handleSelection(filteredItems[selectedIndex]);
+ }
+ return true;
+ case "Escape":
+ event.preventDefault();
+ hideDropdown();
+ return true;
+ default:
+ return false;
+ }
+ }
+ function getDropdownElementForActiveType() {
+ switch (activeDropdown) {
+ case "file":
+ return dropdownElement;
+ case "command":
+ return commandDropdownElement;
+ case "provider":
+ return providerDropdownElement;
+ case "model":
+ return modelDropdownElement;
+ case "creativity":
+ return creativityDropdownElement;
+ case "system":
+ return systemDropdownElement;
+ default:
+ return null;
+ }
+ }
+ function handleGeneralNavigation(event) {
+ switch (event.key) {
+ case "Enter":
+ if (event.shiftKey)
+ return;
+ event.preventDefault();
+ submitAction();
+ break;
+ case "Escape":
+ event.preventDefault();
+ dispatch("cancel");
+ break;
+ }
+ }
+ function handleKeydown(event) {
+ if (handleDropdownNavigation(event)) {
+ return;
+ }
+ if (handleHistoryNavigation(event)) {
+ return;
+ }
+ handleGeneralNavigation(event);
+ }
+ function handleHistoryNavigation(event) {
+ const isHistoryKey = event.key === "ArrowUp" || event.key === "ArrowDown";
+ if (!isHistoryKey || activeDropdown !== "none") {
+ return false;
+ }
+ const currentPosition = getCurrentCursorPosition();
+ cursorPosition = currentPosition;
+ if (event.key === "ArrowUp" && !isCursorOnFirstLine(currentPosition)) {
+ return false;
+ }
+ if (event.key === "ArrowDown" && !isCursorOnLastLine(currentPosition)) {
+ return false;
+ }
+ const historyLength = getPromptHistoryLength();
+ if (historyLength === 0)
+ return false;
+ if (historyIndex === historyLength) {
+ draftBeforeHistory = textContent;
+ }
+ if (event.key === "ArrowUp") {
+ if (historyIndex > 0) {
+ historyIndex -= 1;
+ }
+ } else if (event.key === "ArrowDown") {
+ if (historyIndex < historyLength) {
+ historyIndex += 1;
+ }
+ }
+ const entry = historyIndex >= 0 && historyIndex < historyLength ? getPromptHistoryEntry(historyIndex) : draftBeforeHistory;
+ event.preventDefault();
+ applyHistoryEntry(entry || "");
+ return true;
+ }
+ function isCursorOnFirstLine(position) {
+ const index2 = Math.max(position - 1, 0);
+ return textContent.lastIndexOf("\n", index2) === -1;
+ }
+ function isCursorOnLastLine(position) {
+ return textContent.indexOf("\n", position) === -1;
+ }
+ function handleInput(event) {
+ const target = event.target;
+ const newTextContent = target.textContent || "";
+ textContent = newTextContent;
+ cursorPosition = getCurrentCursorPosition();
+ historyIndex = getPromptHistoryLength();
+ draftBeforeHistory = textContent;
+ textTokens = parseTextToTokens(textContent);
+ checkForMentionTrigger();
+ checkForCommandTrigger();
+ if (activeDropdown === "provider") {
+ applyProviderFilter();
+ }
+ if (activeDropdown === "model") {
+ applyModelFilter();
+ }
+ const newHtmlContent = renderTokensAsHtml();
+ if (target.innerHTML !== newHtmlContent) {
+ updateContentDisplay();
+ }
+ }
+ function isCompleteMention(mentionText) {
+ if (!getFiles)
+ return false;
+ return selectedFiles.some((filePath) => {
+ var _a2;
+ const file = (_a2 = getFiles()) === null || _a2 === void 0 ? void 0 : _a2.find((f) => f.path === filePath);
+ if (!file)
+ return false;
+ const fullFileName = `${file.basename}.${file.extension}`;
+ return mentionText === `${MENTION_PREFIX}${fullFileName}`;
+ });
+ }
+ function isCompleteCommand(commandText) {
+ const availableCommands = getAvailableCommands();
+ return availableCommands.some((cmd) => commandText === `${COMMAND_PREFIX}${cmd.name}`);
+ }
+ function getCommandQuery(commandName) {
+ const beforeCursor = textContent.substring(0, cursorPosition);
+ const token = `${COMMAND_PREFIX}${commandName}`;
+ const foundIndex = beforeCursor.lastIndexOf(token);
+ if (foundIndex === -1)
+ return "";
+ const charBefore = foundIndex > 0 ? beforeCursor[foundIndex - 1] : " ";
+ if (foundIndex > 0 && !isCharacterWhitespace(charBefore))
+ return "";
+ const afterNameIndex = foundIndex + token.length;
+ const afterName = textContent.substring(afterNameIndex);
+ const hasSpace = afterName.startsWith(SPACE_AFTER_COMMAND);
+ const queryStart = hasSpace ? afterNameIndex + SPACE_AFTER_COMMAND.length : afterNameIndex;
+ return textContent.substring(queryStart, cursorPosition).trim().toLowerCase();
+ }
+ function filterAvailableCommands(query) {
+ const availableCommands = getAvailableCommands();
+ const normalizedQuery = query.toLowerCase();
+ return availableCommands.filter((command) => {
+ return command.name.toLowerCase().includes(normalizedQuery) || command.description.toLowerCase().includes(normalizedQuery);
+ }).slice(0, MAX_DROPDOWN_RESULTS);
+ }
+ function filterAvailableFiles(query) {
+ if (!getFiles)
+ return [];
+ const availableFiles = getFiles();
+ const normalizedQuery = query.toLowerCase();
+ return availableFiles.filter((file) => {
+ const fullFileName = `${file.basename}.${file.extension}`;
+ const isQueryMatch = file.basename.toLowerCase().includes(normalizedQuery) || fullFileName.toLowerCase().includes(normalizedQuery);
+ const isNotAlreadySelected = !selectedFiles.includes(file.path);
+ return isQueryMatch && isNotAlreadySelected;
+ }).slice(0, MAX_DROPDOWN_RESULTS);
+ }
+ function checkForMentionTrigger() {
+ if (!getFiles)
+ return;
+ const beforeCursor = textContent.substring(0, cursorPosition);
+ const mentionIndex = beforeCursor.lastIndexOf(MENTION_PREFIX);
+ if (mentionIndex === -1) {
+ hideDropdown();
+ return;
+ }
+ const characterBeforeMention = mentionIndex > 0 ? beforeCursor[mentionIndex - 1] : " ";
+ if (mentionIndex > 0 && !isCharacterWhitespace(characterBeforeMention)) {
+ hideDropdown();
+ return;
+ }
+ const textAfterMention = beforeCursor.substring(mentionIndex + 1);
+ const possibleMention = MENTION_PREFIX + textAfterMention;
+ if (isCompleteMention(possibleMention)) {
+ hideDropdown();
+ return;
+ }
+ mentionStartIndex = mentionIndex;
+ $$invalidate(3, filteredItems = filterAvailableFiles(textAfterMention));
+ if (filteredItems.length > 0) {
+ $$invalidate(2, activeDropdown = "file");
+ $$invalidate(17, selectedIndex = 0);
+ } else {
+ hideDropdown();
+ }
+ }
+ function hideDropdown() {
+ $$invalidate(2, activeDropdown = "none");
+ $$invalidate(3, filteredItems = []);
+ $$invalidate(17, selectedIndex = -1);
+ mentionStartIndex = -1;
+ commandStartIndex = -1;
+ allProviders = [];
+ allModels = [];
+ allCreativities = [];
+ allSystemPrompts = [];
+ }
+ function insertFileAtCursor(file) {
+ if (mentionStartIndex === -1)
+ return;
+ if (!selectedFiles.includes(file.path)) {
+ selectedFiles = [...selectedFiles, file.path];
+ }
+ const fullFileName = `${file.basename}.${file.extension}`;
+ const beforeMention = textContent.substring(0, mentionStartIndex);
+ const afterCursor = textContent.substring(cursorPosition);
+ const newText = beforeMention + MENTION_PREFIX + fullFileName + SPACE_AFTER_MENTION + afterCursor;
+ textContent = newText;
+ textTokens = parseTextToTokens(textContent);
+ hideDropdown();
+ if (contentElement) {
+ updateContentDisplay();
+ tick().then(() => {
+ const newCursorPosition = beforeMention.length + fullFileName.length + 2;
+ setCursorPosition(newCursorPosition);
+ });
+ }
+ }
+ function checkForCommandTrigger() {
+ const beforeCursor = textContent.substring(0, cursorPosition);
+ const commandIndex = beforeCursor.lastIndexOf(COMMAND_PREFIX);
+ if (commandIndex === -1) {
+ if (activeDropdown !== "file") {
+ hideDropdown();
+ }
+ return;
+ }
+ const characterBeforeCommand = commandIndex > 0 ? beforeCursor[commandIndex - 1] : " ";
+ if (commandIndex > 0 && !isCharacterWhitespace(characterBeforeCommand)) {
+ if (activeDropdown !== "file") {
+ hideDropdown();
+ }
+ return;
+ }
+ const textAfterCommand = beforeCursor.substring(commandIndex + 1);
+ const firstTokenMatch = textAfterCommand.match(/([^\s\/]+)/);
+ const typedName = firstTokenMatch ? firstTokenMatch[1] : "";
+ const commandName = typedName.toLowerCase();
+ commandStartIndex = commandIndex;
+ const dropdownController = dropdownControllers[commandName];
+ if (dropdownController) {
+ if (activeDropdown !== dropdownController.kind) {
+ void dropdownController.show();
+ } else {
+ dropdownController.refresh();
+ }
+ return;
+ }
+ if (["provider", "model", "creativity", "system"].includes(activeDropdown)) {
+ hideDropdown();
+ }
+ $$invalidate(3, filteredItems = filterAvailableCommands(textAfterCommand));
+ if (filteredItems.length > 0) {
+ $$invalidate(2, activeDropdown = "command");
+ $$invalidate(17, selectedIndex = 0);
+ } else {
+ hideDropdown();
+ }
+ }
+ function insertCommandAtCursor(command) {
+ if (commandStartIndex === -1)
+ return;
+ const dropdownController = dropdownControllers[command.name];
+ if (dropdownController) {
+ insertCommand(command.name);
+ void dropdownController.show();
+ return;
+ }
+ insertCommand(command.name);
+ const commandLength = COMMAND_PREFIX.length + command.name.length + SPACE_AFTER_COMMAND.length;
+ removeCommandFromText(commandStartIndex, commandLength);
+ }
+ function insertCommand(commandName) {
+ if (commandStartIndex === -1)
+ return;
+ const beforeCommand = textContent.substring(0, commandStartIndex);
+ const afterCursor = textContent.substring(cursorPosition);
+ const newText = beforeCommand + COMMAND_PREFIX + commandName + SPACE_AFTER_COMMAND + afterCursor;
+ textContent = newText;
+ textTokens = parseTextToTokens(textContent);
+ hideDropdown();
+ if (contentElement) {
+ updateContentDisplay();
+ tick().then(() => {
+ const newCursorPosition = beforeCommand.length + commandName.length + 2;
+ setCursorPosition(newCursorPosition);
+ });
+ }
+ }
+ const selectionHandlers = {
+ none: () => void 0,
+ file: (item) => insertFileAtCursor(item),
+ command: (item) => insertCommandAtCursor(item),
+ provider: (item) => selectProvider(item),
+ model: (item) => selectModel(item),
+ creativity: (item) => selectCreativity(item),
+ system: (item) => selectSystemPrompt(item)
+ };
+ function handleSelection(item) {
+ var _a2;
+ void ((_a2 = selectionHandlers[activeDropdown]) === null || _a2 === void 0 ? void 0 : _a2.call(selectionHandlers, item));
+ }
+ function selectProvider(provider) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ if (onProviderChange) {
+ yield onProviderChange(provider.id);
+ }
+ setProviderBadgeLabel(provider.providerName, provider.name);
+ $$invalidate(24, providerId = provider.id);
+ providerName = provider.providerName;
+ highlightBadgeTemporarily();
+ removeCommandAndQuery("provider");
+ hideDropdown();
+ } catch (error) {
+ console.error("Error selecting provider:", error);
+ hideDropdown();
+ }
+ });
+ }
+ function selectModel(model) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ if (onModelChange) {
+ yield onModelChange(model.name);
+ }
+ setProviderBadgeLabel(providerName, model.name);
+ highlightBadgeTemporarily();
+ removeCommandAndQuery("model");
+ hideDropdown();
+ } catch (error) {
+ console.error("Error selecting model:", error);
+ hideDropdown();
+ }
+ });
+ }
+ function applyCreativityFilter() {
+ if (!allCreativities || allCreativities.length === 0)
+ return;
+ const q = getCommandQuery("creativity");
+ const matches2 = allCreativities.filter((c) => fuzzyMatch(c.name, q)).slice(0, MAX_DROPDOWN_RESULTS);
+ updateFilteredDropdownItems(matches2);
+ if (q) {
+ const norm = (s) => s.toLowerCase();
+ const exact = matches2.find((c) => norm(c.name) === norm(q));
+ if (exact) {
+ void selectCreativity(exact);
+ }
+ }
+ }
+ function showCreativityDropdown() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ allCreativities = getCreativityOptions();
+ applyCreativityFilter();
+ if (filteredItems.length > 0) {
+ $$invalidate(2, activeDropdown = "creativity");
+ $$invalidate(17, selectedIndex = 0);
+ }
+ } catch (error) {
+ console.error("Error showing creativity dropdown:", error);
+ }
+ });
+ }
+ function selectCreativity(option2) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ if (onCreativityChange) {
+ yield onCreativityChange(option2.id);
+ }
+ creativityBadge = option2.name;
+ setProviderBadgeLabel(providerName, modelName);
+ highlightBadgeTemporarily();
+ removeCommandAndQuery("creativity");
+ hideDropdown();
+ } catch (error) {
+ console.error("Error selecting creativity:", error);
+ hideDropdown();
+ }
+ });
+ }
+ function applySystemFilter() {
+ if (!allSystemPrompts || allSystemPrompts.length === 0)
+ return;
+ const q = getCommandQuery("system");
+ const normalizedQuery = q.toLowerCase();
+ const matches2 = allSystemPrompts.filter((s) => normalizedQuery ? s.name.toLowerCase().includes(normalizedQuery) : true).sort((a, b) => a.name.localeCompare(b.name)).slice(0, MAX_DROPDOWN_RESULTS);
+ updateFilteredDropdownItems(matches2);
+ if (q) {
+ const norm = (s) => s.toLowerCase();
+ const exact = matches2.find((s) => norm(s.name) === norm(q));
+ if (exact) {
+ void selectSystemPrompt(exact);
+ }
+ }
+ }
+ function showSystemDropdown() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!getSystemPrompts)
+ return;
+ try {
+ allSystemPrompts = getSystemPrompts();
+ applySystemFilter();
+ if (filteredItems.length > 0) {
+ $$invalidate(2, activeDropdown = "system");
+ $$invalidate(17, selectedIndex = 0);
+ }
+ } catch (error) {
+ console.error("Error showing system dropdown:", error);
+ }
+ });
+ }
+ function selectSystemPrompt(option2) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ selectedSystemPromptValue = option2.system;
+ systemPromptBadge = option2.name;
+ setProviderBadgeLabel(providerName, modelName);
+ highlightBadgeTemporarily();
+ removeCommandAndQuery("system");
+ hideDropdown();
+ } catch (error) {
+ console.error("Error selecting system prompt:", error);
+ hideDropdown();
+ }
+ });
+ }
+ function applyProviderFilter() {
+ if (!allProviders || allProviders.length === 0)
+ return;
+ const q = getCommandQuery("provider");
+ const matches2 = allProviders.filter((p) => fuzzyMatch(p.name, q) || fuzzyMatch(p.providerName, q)).slice(0, MAX_DROPDOWN_RESULTS);
+ updateFilteredDropdownItems(matches2);
+ if (q && matches2.length === 1 && matches2[0].name.toLowerCase() === q) {
+ void selectProvider(matches2[0]);
+ }
+ }
+ function removeCommandAndQuery(commandName) {
+ const token = `${COMMAND_PREFIX}${commandName}`;
+ const foundIndex = textContent.lastIndexOf(token);
+ if (foundIndex === -1)
+ return;
+ const charBefore = foundIndex > 0 ? textContent[foundIndex - 1] : " ";
+ if (foundIndex > 0 && !isCharacterWhitespace(charBefore))
+ return;
+ let removalStart = foundIndex;
+ let idx = foundIndex + token.length;
+ if (textContent[idx] === SPACE_AFTER_COMMAND) {
+ idx += SPACE_AFTER_COMMAND.length;
+ }
+ while (idx < textContent.length) {
+ const ch = textContent[idx];
+ if (isCharacterWhitespace(ch) || ch === "/" || ch === "@")
+ break;
+ idx++;
+ }
+ const removalEnd = idx;
+ const before = textContent.substring(0, removalStart);
+ const after = textContent.substring(removalEnd);
+ textContent = before + after;
+ textTokens = parseTextToTokens(textContent);
+ if (contentElement) {
+ updateContentDisplay();
+ tick().then(() => {
+ setCursorPosition(before.length);
+ });
+ }
+ }
+ function showProviderDropdown() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!getProviders)
+ return;
+ try {
+ const providers = yield fetchAvailableProviders();
+ allProviders = providers;
+ applyProviderFilter();
+ if (filteredItems.length > 0) {
+ $$invalidate(2, activeDropdown = "provider");
+ $$invalidate(17, selectedIndex = 0);
+ } else {
+ console.warn("No providers available");
+ }
+ } catch (error) {
+ console.error("Error showing provider dropdown:", error);
+ }
+ });
+ }
+ function applyModelFilter() {
+ if (!allModels || allModels.length === 0)
+ return;
+ const q = getCommandQuery("model");
+ const matches2 = allModels.filter((m) => fuzzyMatch(m.name, q)).slice(0, MAX_DROPDOWN_RESULTS);
+ updateFilteredDropdownItems(matches2);
+ if (q && matches2.length === 1 && matches2[0].name.toLowerCase() === q) {
+ void selectModel(matches2[0]);
+ }
+ }
+ function showModelDropdown() {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!getModels || !providerId)
+ return;
+ try {
+ const models = yield fetchAvailableModels();
+ allModels = models;
+ applyModelFilter();
+ if (filteredItems.length > 0) {
+ $$invalidate(2, activeDropdown = "model");
+ $$invalidate(17, selectedIndex = 0);
+ } else {
+ console.warn("No models available");
+ }
+ } catch (error) {
+ console.error("Error showing model dropdown:", error);
+ }
+ });
+ }
+ function handleContentClick(event) {
+ const target = event.target;
+ if (target.classList.contains("file-mention")) {
+ const filePath = target.dataset.path;
+ if (filePath) {
+ removeFileReference(filePath);
+ }
+ }
+ }
+ function removeCommandFromText(commandStartIndex2, commandLength) {
+ if (commandStartIndex2 === -1)
+ return;
+ const beforeCommand = textContent.substring(0, commandStartIndex2);
+ const afterCommand = textContent.substring(commandStartIndex2 + commandLength);
+ textContent = beforeCommand + afterCommand;
+ textTokens = parseTextToTokens(textContent);
+ if (contentElement) {
+ updateContentDisplay();
+ tick().then(() => {
+ setCursorPosition(beforeCommand.length);
+ });
+ }
+ }
+ function removeFileReference(filePath) {
+ var _a2;
+ selectedFiles = selectedFiles.filter((path) => path !== filePath);
+ const file = (_a2 = getFiles === null || getFiles === void 0 ? void 0 : getFiles()) === null || _a2 === void 0 ? void 0 : _a2.find((f) => f.path === filePath);
+ if (file) {
+ const removalPattern = createFileRemovalPattern(file);
+ textContent = textContent.replace(removalPattern, "");
+ textTokens = parseTextToTokens(textContent);
+ updateContentDisplay();
+ }
+ }
+ function submitAction() {
+ addToPromptHistory(textContent);
+ historyIndex = getPromptHistoryLength();
+ draftBeforeHistory = textContent;
+ dispatch("submit", {
+ text: textContent,
+ selectedFiles,
+ systemPrompt: selectedSystemPromptValue
+ });
+ }
+ function handleKeyup(event) {
+ if (event.key === "Backspace" || event.key === "Delete") {
+ const currentlyMentionedFiles = textTokens.filter((token) => token.type === "file" && token.filePath).map((token) => token.filePath);
+ const filesToRemove = selectedFiles.filter((filePath) => !currentlyMentionedFiles.includes(filePath));
+ if (filesToRemove.length > 0) {
+ selectedFiles = selectedFiles.filter((path) => currentlyMentionedFiles.includes(path));
+ }
+ }
+ }
+ function div0_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ contentElement = $$value;
+ $$invalidate(4, contentElement);
+ });
+ }
+ const click_handler = (item) => handleSelection(item);
+ const keydown_handler = (item, event) => event.key === "Enter" && handleSelection(item);
+ function div0_binding_1($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ dropdownElement = $$value;
+ $$invalidate(5, dropdownElement);
+ });
+ }
+ const click_handler_1 = (item) => handleSelection(item);
+ const keydown_handler_1 = (item, event) => event.key === "Enter" && handleSelection(item);
+ function div1_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ commandDropdownElement = $$value;
+ $$invalidate(6, commandDropdownElement);
+ });
+ }
+ const click_handler_2 = (item) => handleSelection(item);
+ const keydown_handler_2 = (item, event) => event.key === "Enter" && handleSelection(item);
+ function div2_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ providerDropdownElement = $$value;
+ $$invalidate(7, providerDropdownElement);
+ });
+ }
+ const click_handler_3 = (item) => handleSelection(item);
+ const keydown_handler_3 = (item, event) => event.key === "Enter" && handleSelection(item);
+ function div3_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ modelDropdownElement = $$value;
+ $$invalidate(8, modelDropdownElement);
+ });
+ }
+ const click_handler_4 = (item) => handleSelection(item);
+ const keydown_handler_4 = (item, event) => event.key === "Enter" && handleSelection(item);
+ function div4_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ creativityDropdownElement = $$value;
+ $$invalidate(9, creativityDropdownElement);
+ });
+ }
+ const click_handler_5 = (item) => handleSelection(item);
+ const keydown_handler_5 = (item, event) => event.key === "Enter" && handleSelection(item);
+ function div5_binding($$value) {
+ binding_callbacks[$$value ? "unshift" : "push"](() => {
+ systemDropdownElement = $$value;
+ $$invalidate(10, systemDropdownElement);
+ });
+ }
+ $$self.$$set = ($$props2) => {
+ if ("placeholder" in $$props2)
+ $$invalidate(1, placeholder = $$props2.placeholder);
+ if ("value" in $$props2)
+ $$invalidate(25, value = $$props2.value);
+ if ("providerLabel" in $$props2)
+ $$invalidate(0, providerLabel = $$props2.providerLabel);
+ if ("providerId" in $$props2)
+ $$invalidate(24, providerId = $$props2.providerId);
+ if ("getFiles" in $$props2)
+ $$invalidate(26, getFiles = $$props2.getFiles);
+ if ("getProviders" in $$props2)
+ $$invalidate(27, getProviders = $$props2.getProviders);
+ if ("onProviderChange" in $$props2)
+ $$invalidate(28, onProviderChange = $$props2.onProviderChange);
+ if ("getModels" in $$props2)
+ $$invalidate(29, getModels = $$props2.getModels);
+ if ("onModelChange" in $$props2)
+ $$invalidate(30, onModelChange = $$props2.onModelChange);
+ if ("onCreativityChange" in $$props2)
+ $$invalidate(31, onCreativityChange = $$props2.onCreativityChange);
+ if ("getSystemPrompts" in $$props2)
+ $$invalidate(32, getSystemPrompts = $$props2.getSystemPrompts);
+ };
+ $$self.$$.update = () => {
+ if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/
+ 12) {
+ $:
+ $$invalidate(11, fileItems = activeDropdown === "file" ? filteredItems : []);
+ }
+ if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/
+ 12) {
+ $:
+ $$invalidate(12, commandItems = activeDropdown === "command" ? filteredItems : []);
+ }
+ if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/
+ 12) {
+ $:
+ $$invalidate(13, providerItems = activeDropdown === "provider" ? filteredItems : []);
+ }
+ if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/
+ 12) {
+ $:
+ $$invalidate(14, modelItems = activeDropdown === "model" ? filteredItems : []);
+ }
+ if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/
+ 12) {
+ $:
+ $$invalidate(15, creativityItems = activeDropdown === "creativity" ? filteredItems : []);
+ }
+ if ($$self.$$.dirty[0] & /*activeDropdown, filteredItems*/
+ 12) {
+ $:
+ $$invalidate(16, systemItems = activeDropdown === "system" ? filteredItems : []);
+ }
+ };
+ return [
+ providerLabel,
+ placeholder,
+ activeDropdown,
+ filteredItems,
+ contentElement,
+ dropdownElement,
+ commandDropdownElement,
+ providerDropdownElement,
+ modelDropdownElement,
+ creativityDropdownElement,
+ systemDropdownElement,
+ fileItems,
+ commandItems,
+ providerItems,
+ modelItems,
+ creativityItems,
+ systemItems,
+ selectedIndex,
+ badgeHighlight,
+ handleKeydown,
+ handleInput,
+ handleSelection,
+ handleContentClick,
+ handleKeyup,
+ providerId,
+ value,
+ getFiles,
+ getProviders,
+ onProviderChange,
+ getModels,
+ onModelChange,
+ onCreativityChange,
+ getSystemPrompts,
+ div0_binding,
+ click_handler,
+ keydown_handler,
+ div0_binding_1,
+ click_handler_1,
+ keydown_handler_1,
+ div1_binding,
+ click_handler_2,
+ keydown_handler_2,
+ div2_binding,
+ click_handler_3,
+ keydown_handler_3,
+ div3_binding,
+ click_handler_4,
+ keydown_handler_4,
+ div4_binding,
+ click_handler_5,
+ keydown_handler_5,
+ div5_binding
+ ];
+}
+var ActionPalette = class extends SvelteComponent {
+ constructor(options) {
+ super();
+ init(
+ this,
+ options,
+ instance,
+ create_fragment,
+ safe_not_equal,
+ {
+ placeholder: 1,
+ value: 25,
+ providerLabel: 0,
+ providerId: 24,
+ getFiles: 26,
+ getProviders: 27,
+ onProviderChange: 28,
+ getModels: 29,
+ onModelChange: 30,
+ onCreativityChange: 31,
+ getSystemPrompts: 32
+ },
+ null,
+ [-1, -1, -1, -1, -1]
+ );
+ }
+};
+var ActionPalette_default = ActionPalette;
+
+// src/ui/actionPalettePlugin.ts
+var SvelteActionPaletteWidget = class extends import_view2.WidgetType {
+ constructor(options) {
+ super();
+ this.options = options;
+ this.container = null;
+ this.app = null;
+ }
+ toDOM(view) {
+ this.container = document.createElement("div");
+ this.container.addClass("local-gpt-action-palette-container");
+ const mountTarget = document.createElement("div");
+ this.container.appendChild(mountTarget);
+ this.app = new ActionPalette_default({
+ target: mountTarget,
+ props: {
+ placeholder: this.options.placeholder || I18n.t("commands.actionPalette.placeholder"),
+ providerLabel: this.options.modelLabel || "",
+ providerId: this.options.providerId,
+ getFiles: this.options.getFiles,
+ getProviders: this.options.getProviders,
+ onProviderChange: this.options.onProviderChange,
+ getModels: this.options.getModels,
+ onModelChange: this.options.onModelChange,
+ onCreativityChange: this.options.onCreativityChange,
+ getSystemPrompts: this.options.getSystemPrompts
+ }
+ });
+ this.app.$on(
+ "submit",
+ (e) => {
+ var _a2, _b;
+ (_b = (_a2 = this.options).onSubmit) == null ? void 0 : _b.call(
+ _a2,
+ e.detail.text,
+ e.detail.selectedFiles,
+ e.detail.systemPrompt
+ );
+ }
+ );
+ this.app.$on("cancel", () => {
+ var _a2, _b;
+ (_b = (_a2 = this.options).onCancel) == null ? void 0 : _b.call(_a2);
+ });
+ return this.container;
+ }
+ destroy(dom) {
+ var _a2;
+ (_a2 = this.app) == null ? void 0 : _a2.$destroy();
+ this.app = null;
+ this.container = null;
+ }
+};
+var ShowActionPaletteEffect = import_state2.StateEffect.define();
+var HideActionPaletteEffect = import_state2.StateEffect.define();
+function captureSelectionSnapshot(view) {
+ const rangesAll = view.state.selection.ranges.map((r) => ({
+ from: r.from,
+ to: r.to
+ }));
+ const nonEmpty = rangesAll.filter((r) => r.from !== r.to);
+ return {
+ fakeSelections: nonEmpty.length ? nonEmpty : null,
+ previousSelectionRanges: rangesAll.length ? rangesAll : null,
+ previousCursor: view.state.selection.main.head
+ };
+}
+function mapRanges(ranges, changes) {
+ return ranges ? ranges.map((r) => ({
+ from: changes.mapPos(r.from),
+ to: changes.mapPos(r.to)
+ })) : null;
+}
+function buildDecorations(pos, options, fakeSelections) {
+ const builder = new import_state2.RangeSetBuilder();
+ const widget = new SvelteActionPaletteWidget(options);
+ builder.add(pos, pos, import_view2.Decoration.widget({ widget, side: -1, block: true }));
+ if (fakeSelections) {
+ for (const r of fakeSelections) {
+ builder.add(
+ r.from,
+ r.to,
+ import_view2.Decoration.mark({ class: "local-gpt-fake-selection" })
+ );
+ }
+ }
+ return builder.finish();
+}
+var actionPaletteStateField = import_state2.StateField.define({
+ create() {
+ return {
+ deco: import_view2.Decoration.none,
+ pos: null,
+ fakeSelections: null,
+ previousSelectionRanges: null,
+ previousCursor: null
+ };
+ },
+ update(value, tr) {
+ let {
+ deco,
+ pos,
+ fakeSelections,
+ previousSelectionRanges,
+ previousCursor
+ } = value;
+ if (tr.docChanged) {
+ deco = deco.map(tr.changes);
+ if (pos !== null)
+ pos = tr.changes.mapPos(pos);
+ fakeSelections = mapRanges(fakeSelections, tr.changes);
+ previousSelectionRanges = mapRanges(
+ previousSelectionRanges,
+ tr.changes
+ );
+ if (previousCursor !== null)
+ previousCursor = tr.changes.mapPos(previousCursor);
+ }
+ for (const e of tr.effects) {
+ if (e.is(ShowActionPaletteEffect)) {
+ pos = e.value.pos;
+ fakeSelections = e.value.fakeSelections;
+ previousSelectionRanges = e.value.previousSelectionRanges;
+ previousCursor = e.value.previousCursor;
+ deco = buildDecorations(pos, e.value.options, fakeSelections);
+ } else if (e.is(HideActionPaletteEffect)) {
+ pos = null;
+ fakeSelections = null;
+ previousSelectionRanges = null;
+ previousCursor = null;
+ deco = import_view2.Decoration.none;
+ }
+ }
+ return {
+ deco,
+ pos,
+ fakeSelections,
+ previousSelectionRanges,
+ previousCursor
+ };
+ },
+ provide: (f) => import_view2.EditorView.decorations.from(f, (v) => v.deco)
+});
+var actionPalettePlugin = [actionPaletteStateField];
+function showActionPalette(view, pos, options) {
+ const { fakeSelections, previousSelectionRanges, previousCursor } = captureSelectionSnapshot(view);
+ view.dispatch({
+ effects: ShowActionPaletteEffect.of({
+ pos,
+ options,
+ fakeSelections,
+ previousSelectionRanges,
+ previousCursor
+ })
+ });
+}
+function hideActionPalette(view) {
+ const state = view.state.field(actionPaletteStateField, false);
+ if (state) {
+ if (state.previousSelectionRanges && state.previousSelectionRanges.length) {
+ const selection = import_state2.EditorSelection.create(
+ state.previousSelectionRanges.map(
+ (r) => import_state2.EditorSelection.range(r.from, r.to)
+ )
+ );
+ view.dispatch({ selection });
+ view.focus();
+ } else if (state.previousCursor !== null) {
+ view.dispatch({ selection: { anchor: state.previousCursor } });
+ view.focus();
+ }
+ }
+ view.dispatch({ effects: HideActionPaletteEffect.of(null) });
+}
+
+// src/rag.ts
+var import_obsidian2 = require("obsidian");
+
+// node_modules/pdfjs-dist/build/pdf.mjs
+var __webpack_require__ = {};
+(() => {
+ __webpack_require__.d = (exports, definition) => {
+ for (var key in definition) {
+ if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+ }
+ }
+ };
+})();
+(() => {
+ __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
+})();
+var __webpack_exports__ = globalThis.pdfjsLib = {};
+__webpack_require__.d(__webpack_exports__, {
+ AbortException: () => (
+ /* reexport */
+ AbortException
+ ),
+ AnnotationEditorLayer: () => (
+ /* reexport */
+ AnnotationEditorLayer
+ ),
+ AnnotationEditorParamsType: () => (
+ /* reexport */
+ AnnotationEditorParamsType
+ ),
+ AnnotationEditorType: () => (
+ /* reexport */
+ AnnotationEditorType
+ ),
+ AnnotationEditorUIManager: () => (
+ /* reexport */
+ AnnotationEditorUIManager
+ ),
+ AnnotationLayer: () => (
+ /* reexport */
+ AnnotationLayer
+ ),
+ AnnotationMode: () => (
+ /* reexport */
+ AnnotationMode
+ ),
+ CMapCompressionType: () => (
+ /* reexport */
+ CMapCompressionType
+ ),
+ ColorPicker: () => (
+ /* reexport */
+ ColorPicker
+ ),
+ DOMSVGFactory: () => (
+ /* reexport */
+ DOMSVGFactory
+ ),
+ DrawLayer: () => (
+ /* reexport */
+ DrawLayer
+ ),
+ FeatureTest: () => (
+ /* reexport */
+ util_FeatureTest
+ ),
+ GlobalWorkerOptions: () => (
+ /* reexport */
+ GlobalWorkerOptions
+ ),
+ ImageKind: () => (
+ /* reexport */
+ util_ImageKind
+ ),
+ InvalidPDFException: () => (
+ /* reexport */
+ InvalidPDFException
+ ),
+ MissingPDFException: () => (
+ /* reexport */
+ MissingPDFException
+ ),
+ OPS: () => (
+ /* reexport */
+ OPS
+ ),
+ PDFDataRangeTransport: () => (
+ /* reexport */
+ PDFDataRangeTransport
+ ),
+ PDFDateString: () => (
+ /* reexport */
+ PDFDateString
+ ),
+ PDFWorker: () => (
+ /* reexport */
+ PDFWorker
+ ),
+ PasswordResponses: () => (
+ /* reexport */
+ PasswordResponses
+ ),
+ PermissionFlag: () => (
+ /* reexport */
+ PermissionFlag
+ ),
+ PixelsPerInch: () => (
+ /* reexport */
+ PixelsPerInch
+ ),
+ RenderingCancelledException: () => (
+ /* reexport */
+ RenderingCancelledException
+ ),
+ TextLayer: () => (
+ /* reexport */
+ TextLayer
+ ),
+ UnexpectedResponseException: () => (
+ /* reexport */
+ UnexpectedResponseException
+ ),
+ Util: () => (
+ /* reexport */
+ Util
+ ),
+ VerbosityLevel: () => (
+ /* reexport */
+ VerbosityLevel
+ ),
+ XfaLayer: () => (
+ /* reexport */
+ XfaLayer
+ ),
+ build: () => (
+ /* reexport */
+ build
+ ),
+ createValidAbsoluteUrl: () => (
+ /* reexport */
+ createValidAbsoluteUrl
+ ),
+ fetchData: () => (
+ /* reexport */
+ fetchData
+ ),
+ getDocument: () => (
+ /* reexport */
+ getDocument
+ ),
+ getFilenameFromUrl: () => (
+ /* reexport */
+ getFilenameFromUrl
+ ),
+ getPdfFilenameFromUrl: () => (
+ /* reexport */
+ getPdfFilenameFromUrl
+ ),
+ getXfaPageViewport: () => (
+ /* reexport */
+ getXfaPageViewport
+ ),
+ isDataScheme: () => (
+ /* reexport */
+ isDataScheme
+ ),
+ isPdfFile: () => (
+ /* reexport */
+ isPdfFile
+ ),
+ noContextMenu: () => (
+ /* reexport */
+ noContextMenu
+ ),
+ normalizeUnicode: () => (
+ /* reexport */
+ normalizeUnicode
+ ),
+ setLayerDimensions: () => (
+ /* reexport */
+ setLayerDimensions
+ ),
+ shadow: () => (
+ /* reexport */
+ shadow
+ ),
+ version: () => (
+ /* reexport */
+ version2
+ )
+});
+var isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+var FONT_IDENTITY_MATRIX = [1e-3, 0, 0, 1e-3, 0, 0];
+var MAX_IMAGE_SIZE_TO_CACHE = 1e7;
+var LINE_FACTOR = 1.35;
+var LINE_DESCENT_FACTOR = 0.35;
+var BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;
+var RenderingIntentFlag = {
+ ANY: 1,
+ DISPLAY: 2,
+ PRINT: 4,
+ SAVE: 8,
+ ANNOTATIONS_FORMS: 16,
+ ANNOTATIONS_STORAGE: 32,
+ ANNOTATIONS_DISABLE: 64,
+ IS_EDITING: 128,
+ OPLIST: 256
+};
+var AnnotationMode = {
+ DISABLE: 0,
+ ENABLE: 1,
+ ENABLE_FORMS: 2,
+ ENABLE_STORAGE: 3
+};
+var AnnotationEditorPrefix = "pdfjs_internal_editor_";
+var AnnotationEditorType = {
+ DISABLE: -1,
+ NONE: 0,
+ FREETEXT: 3,
+ HIGHLIGHT: 9,
+ STAMP: 13,
+ INK: 15
+};
+var 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
+};
+var PermissionFlag = {
+ PRINT: 4,
+ MODIFY_CONTENTS: 8,
+ COPY: 16,
+ MODIFY_ANNOTATIONS: 32,
+ FILL_INTERACTIVE_FORMS: 256,
+ COPY_FOR_ACCESSIBILITY: 512,
+ ASSEMBLE: 1024,
+ PRINT_HIGH_QUALITY: 2048
+};
+var 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
+};
+var util_ImageKind = {
+ GRAYSCALE_1BPP: 1,
+ RGB_24BPP: 2,
+ RGBA_32BPP: 3
+};
+var 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
+};
+var AnnotationBorderStyleType = {
+ SOLID: 1,
+ DASHED: 2,
+ BEVELED: 3,
+ INSET: 4,
+ UNDERLINE: 5
+};
+var VerbosityLevel = {
+ ERRORS: 0,
+ WARNINGS: 1,
+ INFOS: 5
+};
+var CMapCompressionType = {
+ NONE: 0,
+ BINARY: 1
+};
+var 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
+};
+var PasswordResponses = {
+ NEED_PASSWORD: 1,
+ INCORRECT_PASSWORD: 2
+};
+var 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 == null ? void 0 : 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;
+ }
+ try {
+ if (options && typeof url === "string") {
+ if (options.addDefaultProtocol && url.startsWith("www.")) {
+ const dots = url.match(/\./g);
+ if ((dots == null ? void 0 : dots.length) >= 2) {
+ url = `http://${url}`;
+ }
+ }
+ if (options.tryConvertEncoding) {
+ try {
+ url = stringToUTF8String(url);
+ } catch (e) {
+ }
+ }
+ }
+ const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
+ if (_isValidProtocol(absoluteUrl)) {
+ return absoluteUrl;
+ }
+ } catch (e) {
+ }
+ return null;
+}
+function shadow(obj, prop, value, nonSerializable = false) {
+ Object.defineProperty(obj, prop, {
+ value,
+ enumerable: !nonSerializable,
+ configurable: true,
+ writable: false
+ });
+ return value;
+}
+var BaseException = function BaseExceptionClosure() {
+ function BaseException2(message, name) {
+ this.message = message;
+ this.name = name;
+ }
+ BaseException2.prototype = new Error();
+ BaseException2.constructor = BaseException2;
+ return BaseException2;
+}();
+var PasswordException = class extends BaseException {
+ constructor(msg, code) {
+ super(msg, "PasswordException");
+ this.code = code;
+ }
+};
+var UnknownErrorException = class extends BaseException {
+ constructor(msg, details) {
+ super(msg, "UnknownErrorException");
+ this.details = details;
+ }
+};
+var InvalidPDFException = class extends BaseException {
+ constructor(msg) {
+ super(msg, "InvalidPDFException");
+ }
+};
+var MissingPDFException = class extends BaseException {
+ constructor(msg) {
+ super(msg, "MissingPDFException");
+ }
+};
+var UnexpectedResponseException = class extends BaseException {
+ constructor(msg, status) {
+ super(msg, "UnexpectedResponseException");
+ this.status = status;
+ }
+};
+var FormatError = class extends BaseException {
+ constructor(msg) {
+ super(msg, "FormatError");
+ }
+};
+var AbortException = class extends BaseException {
+ constructor(msg) {
+ super(msg, "AbortException");
+ }
+};
+function bytesToString(bytes) {
+ if (typeof bytes !== "object" || (bytes == null ? void 0 : bytes.length) === void 0) {
+ 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) & 255;
+ }
+ return bytes;
+}
+function string32(value) {
+ return String.fromCharCode(value >> 24 & 255, value >> 16 & 255, value >> 8 & 255, value & 255);
+}
+function objectFromMap(map) {
+ const obj = /* @__PURE__ */ Object.create(null);
+ for (const [key, value] of map) {
+ obj[key] = value;
+ }
+ return obj;
+}
+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 (e) {
+ return false;
+ }
+}
+var util_FeatureTest = class {
+ 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 platform() {
+ if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.platform) === "string") {
+ return shadow(this, "platform", {
+ isMac: navigator.platform.includes("Mac")
+ });
+ }
+ return shadow(this, "platform", {
+ isMac: false
+ });
+ }
+ static get isCSSRoundSupported() {
+ var _a2, _b;
+ return shadow(this, "isCSSRoundSupported", (_b = (_a2 = globalThis.CSS) == null ? void 0 : _a2.supports) == null ? void 0 : _b.call(_a2, "width: round(1.5px, 1px)"));
+ }
+};
+var hexNumbers = Array.from(Array(256).keys(), (n) => n.toString(16).padStart(2, "0"));
+var _getExtremumOnCurve, getExtremumOnCurve_fn, _getExtremum, getExtremum_fn;
+var Util = class {
+ 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) {
+ const xt = p[0] * m[0] + p[1] * m[2] + m[4];
+ const yt = p[0] * m[1] + p[1] * m[3] + m[5];
+ return [xt, yt];
+ }
+ static applyInverseTransform(p, m) {
+ const d = m[0] * m[3] - m[1] * m[2];
+ const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+ const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+ return [xt, yt];
+ }
+ static getAxialAlignedBoundingBox(r, m) {
+ const p1 = this.applyTransform(r, m);
+ const p2 = this.applyTransform(r.slice(2, 4), m);
+ const p3 = this.applyTransform([r[0], r[3]], m);
+ const p4 = this.applyTransform([r[2], r[1]], m);
+ return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
+ }
+ 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(m) {
+ const transpose = [m[0], m[2], m[1], m[3]];
+ const a = m[0] * transpose[0] + m[1] * transpose[2];
+ const b = m[0] * transpose[1] + m[1] * transpose[3];
+ const c = m[2] * transpose[0] + m[3] * transpose[2];
+ const d = m[2] * transpose[1] + m[3] * transpose[3];
+ const first = (a + d) / 2;
+ const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
+ const sx = first + second || 1;
+ const sy = first - second || 1;
+ return [Math.sqrt(sx), Math.sqrt(sy)];
+ }
+ 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 bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {
+ if (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);
+ } else {
+ minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)];
+ }
+ __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax);
+ __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax);
+ return minMax;
+ }
+};
+_getExtremumOnCurve = new WeakSet();
+getExtremumOnCurve_fn = function(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);
+};
+_getExtremum = new WeakSet();
+getExtremum_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {
+ if (Math.abs(a) < 1e-12) {
+ if (Math.abs(b) >= 1e-12) {
+ __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax);
+ }
+ return;
+ }
+ const delta = b ** 2 - 4 * c * a;
+ if (delta < 0) {
+ return;
+ }
+ const sqrtDelta = Math.sqrt(delta);
+ const a2 = 2 * a;
+ __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax);
+ __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax);
+};
+__privateAdd(Util, _getExtremumOnCurve);
+__privateAdd(Util, _getExtremum);
+function stringToUTF8String(str) {
+ return decodeURIComponent(escape(str));
+}
+var NormalizeRegex = null;
+var 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 = /* @__PURE__ */ new Map([["\uFB05", "\u017Ft"]]);
+ }
+ return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2));
+}
+function getUuid() {
+ if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.randomUUID) === "function") {
+ return crypto.randomUUID();
+ }
+ const buf = new Uint8Array(32);
+ if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.getRandomValues) === "function") {
+ crypto.getRandomValues(buf);
+ } else {
+ for (let i = 0; i < 32; i++) {
+ buf[i] = Math.floor(Math.random() * 255);
+ }
+ }
+ return bytesToString(buf);
+}
+var AnnotationPrefix = "pdfjs_internal_id_";
+var FontRenderOps = {
+ BEZIER_CURVE_TO: 0,
+ MOVE_TO: 1,
+ LINE_TO: 2,
+ QUADRATIC_CURVE_TO: 3,
+ RESTORE: 4,
+ SAVE: 5,
+ SCALE: 6,
+ TRANSFORM: 7,
+ TRANSLATE: 8
+};
+var BaseFilterFactory = class {
+ 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) {
+ }
+};
+var _enableHWA;
+var BaseCanvasFactory = class {
+ constructor({
+ enableHWA = false
+ } = {}) {
+ __privateAdd(this, _enableHWA, false);
+ __privateSet(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: !__privateGet(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.");
+ }
+};
+_enableHWA = new WeakMap();
+var BaseCMapReaderFactory = class {
+ 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" : "");
+ const compressionType = this.isCompressed ? CMapCompressionType.BINARY : CMapCompressionType.NONE;
+ return this._fetchData(url, compressionType).catch((reason) => {
+ throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`);
+ });
+ }
+ _fetchData(url, compressionType) {
+ unreachable("Abstract method `_fetchData` called.");
+ }
+};
+var BaseStandardFontDataFactory = class {
+ 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._fetchData(url).catch((reason) => {
+ throw new Error(`Unable to load font data at: ${url}`);
+ });
+ }
+ _fetchData(url) {
+ unreachable("Abstract method `_fetchData` called.");
+ }
+};
+var BaseSVGFactory = class {
+ 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.");
+ }
+};
+var SVG_NS = "http://www.w3.org/2000/svg";
+var _PixelsPerInch = class {
+};
+var PixelsPerInch = _PixelsPerInch;
+__publicField(PixelsPerInch, "CSS", 96);
+__publicField(PixelsPerInch, "PDF", 72);
+__publicField(PixelsPerInch, "PDF_TO_CSS_UNITS", _PixelsPerInch.CSS / _PixelsPerInch.PDF);
+var _baseUrl, __cache, __defs, _docId, _document, __hcmCache, _id, _cache, cache_get, _hcmCache, hcmCache_get, _defs, defs_get, _createTables, createTables_fn, _createUrl, createUrl_fn, _addLuminosityConversion, addLuminosityConversion_fn, _addGrayConversion, addGrayConversion_fn, _createFilter, createFilter_fn, _appendFeFunc, appendFeFunc_fn, _addTransferMapConversion, addTransferMapConversion_fn, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn, _getRGB, getRGB_fn;
+var DOMFilterFactory = class extends BaseFilterFactory {
+ constructor({
+ docId,
+ ownerDocument = globalThis.document
+ } = {}) {
+ super();
+ __privateAdd(this, _cache);
+ __privateAdd(this, _hcmCache);
+ __privateAdd(this, _defs);
+ __privateAdd(this, _createTables);
+ __privateAdd(this, _createUrl);
+ __privateAdd(this, _addLuminosityConversion);
+ __privateAdd(this, _addGrayConversion);
+ __privateAdd(this, _createFilter);
+ __privateAdd(this, _appendFeFunc);
+ __privateAdd(this, _addTransferMapConversion);
+ __privateAdd(this, _addTransferMapAlphaConversion);
+ __privateAdd(this, _getRGB);
+ __privateAdd(this, _baseUrl, void 0);
+ __privateAdd(this, __cache, void 0);
+ __privateAdd(this, __defs, void 0);
+ __privateAdd(this, _docId, void 0);
+ __privateAdd(this, _document, void 0);
+ __privateAdd(this, __hcmCache, void 0);
+ __privateAdd(this, _id, 0);
+ __privateSet(this, _docId, docId);
+ __privateSet(this, _document, ownerDocument);
+ }
+ addFilter(maps) {
+ if (!maps) {
+ return "none";
+ }
+ let value = __privateGet(this, _cache, cache_get).get(maps);
+ if (value) {
+ return value;
+ }
+ const [tableR, tableG, tableB] = __privateMethod(this, _createTables, createTables_fn).call(this, maps);
+ const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`;
+ value = __privateGet(this, _cache, cache_get).get(key);
+ if (value) {
+ __privateGet(this, _cache, cache_get).set(maps, value);
+ return value;
+ }
+ const id = `g_${__privateGet(this, _docId)}_transfer_map_${__privateWrapper(this, _id)._++}`;
+ const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id);
+ __privateGet(this, _cache, cache_get).set(maps, url);
+ __privateGet(this, _cache, cache_get).set(key, url);
+ const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id);
+ __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, tableR, tableG, tableB, filter);
+ return url;
+ }
+ addHCMFilter(fgColor, bgColor) {
+ var _a2;
+ const key = `${fgColor}-${bgColor}`;
+ const filterName = "base";
+ let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName);
+ if ((info2 == null ? void 0 : info2.key) === key) {
+ return info2.url;
+ }
+ if (info2) {
+ (_a2 = info2.filter) == null ? void 0 : _a2.remove();
+ info2.key = key;
+ info2.url = "none";
+ info2.filter = null;
+ } else {
+ info2 = {
+ key,
+ url: "none",
+ filter: null
+ };
+ __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2);
+ }
+ if (!fgColor || !bgColor) {
+ return info2.url;
+ }
+ const fgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, fgColor);
+ fgColor = Util.makeHexColor(...fgRGB);
+ const bgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, bgColor);
+ bgColor = Util.makeHexColor(...bgRGB);
+ __privateGet(this, _defs, defs_get).style.color = "";
+ if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) {
+ return info2.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_${__privateGet(this, _docId)}_hcm_filter`;
+ const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id);
+ __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, table, table, table, filter);
+ __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter);
+ const getSteps = (c, n) => {
+ const start = fgRGB[c] / 255;
+ const end = bgRGB[c] / 255;
+ const arr = new Array(n + 1);
+ for (let i = 0; i <= n; i++) {
+ arr[i] = start + i / n * (end - start);
+ }
+ return arr.join(",");
+ };
+ __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter);
+ info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id);
+ return info2.url;
+ }
+ addAlphaFilter(map) {
+ let value = __privateGet(this, _cache, cache_get).get(map);
+ if (value) {
+ return value;
+ }
+ const [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]);
+ const key = `alpha_${tableA}`;
+ value = __privateGet(this, _cache, cache_get).get(key);
+ if (value) {
+ __privateGet(this, _cache, cache_get).set(map, value);
+ return value;
+ }
+ const id = `g_${__privateGet(this, _docId)}_alpha_map_${__privateWrapper(this, _id)._++}`;
+ const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id);
+ __privateGet(this, _cache, cache_get).set(map, url);
+ __privateGet(this, _cache, cache_get).set(key, url);
+ const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id);
+ __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter);
+ return url;
+ }
+ addLuminosityFilter(map) {
+ let value = __privateGet(this, _cache, cache_get).get(map || "luminosity");
+ if (value) {
+ return value;
+ }
+ let tableA, key;
+ if (map) {
+ [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]);
+ key = `luminosity_${tableA}`;
+ } else {
+ key = "luminosity";
+ }
+ value = __privateGet(this, _cache, cache_get).get(key);
+ if (value) {
+ __privateGet(this, _cache, cache_get).set(map, value);
+ return value;
+ }
+ const id = `g_${__privateGet(this, _docId)}_luminosity_map_${__privateWrapper(this, _id)._++}`;
+ const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id);
+ __privateGet(this, _cache, cache_get).set(map, url);
+ __privateGet(this, _cache, cache_get).set(key, url);
+ const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id);
+ __privateMethod(this, _addLuminosityConversion, addLuminosityConversion_fn).call(this, filter);
+ if (map) {
+ __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter);
+ }
+ return url;
+ }
+ addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {
+ var _a2;
+ const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;
+ let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName);
+ if ((info2 == null ? void 0 : info2.key) === key) {
+ return info2.url;
+ }
+ if (info2) {
+ (_a2 = info2.filter) == null ? void 0 : _a2.remove();
+ info2.key = key;
+ info2.url = "none";
+ info2.filter = null;
+ } else {
+ info2 = {
+ key,
+ url: "none",
+ filter: null
+ };
+ __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2);
+ }
+ if (!fgColor || !bgColor) {
+ return info2.url;
+ }
+ const [fgRGB, bgRGB] = [fgColor, bgColor].map(__privateMethod(this, _getRGB, getRGB_fn).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(__privateMethod(this, _getRGB, getRGB_fn).bind(this));
+ if (bgGray < fgGray) {
+ [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB];
+ }
+ __privateGet(this, _defs, defs_get).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_${__privateGet(this, _docId)}_hcm_${filterName}_filter`;
+ const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id);
+ __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter);
+ __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter);
+ info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id);
+ return info2.url;
+ }
+ destroy(keepHCM = false) {
+ if (keepHCM && __privateGet(this, _hcmCache, hcmCache_get).size !== 0) {
+ return;
+ }
+ if (__privateGet(this, __defs)) {
+ __privateGet(this, __defs).parentNode.parentNode.remove();
+ __privateSet(this, __defs, null);
+ }
+ if (__privateGet(this, __cache)) {
+ __privateGet(this, __cache).clear();
+ __privateSet(this, __cache, null);
+ }
+ __privateSet(this, _id, 0);
+ }
+};
+_baseUrl = new WeakMap();
+__cache = new WeakMap();
+__defs = new WeakMap();
+_docId = new WeakMap();
+_document = new WeakMap();
+__hcmCache = new WeakMap();
+_id = new WeakMap();
+_cache = new WeakSet();
+cache_get = function() {
+ return __privateGet(this, __cache) || __privateSet(this, __cache, /* @__PURE__ */ new Map());
+};
+_hcmCache = new WeakSet();
+hcmCache_get = function() {
+ return __privateGet(this, __hcmCache) || __privateSet(this, __hcmCache, /* @__PURE__ */ new Map());
+};
+_defs = new WeakSet();
+defs_get = function() {
+ if (!__privateGet(this, __defs)) {
+ const div = __privateGet(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 = __privateGet(this, _document).createElementNS(SVG_NS, "svg");
+ svg.setAttribute("width", 0);
+ svg.setAttribute("height", 0);
+ __privateSet(this, __defs, __privateGet(this, _document).createElementNS(SVG_NS, "defs"));
+ div.append(svg);
+ svg.append(__privateGet(this, __defs));
+ __privateGet(this, _document).body.append(div);
+ }
+ return __privateGet(this, __defs);
+};
+_createTables = new WeakSet();
+createTables_fn = function(maps) {
+ if (maps.length === 1) {
+ const mapR2 = maps[0];
+ const buffer = new Array(256);
+ for (let i = 0; i < 256; i++) {
+ buffer[i] = mapR2[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 = new WeakSet();
+createUrl_fn = function(id) {
+ if (__privateGet(this, _baseUrl) === void 0) {
+ __privateSet(this, _baseUrl, "");
+ const url = __privateGet(this, _document).URL;
+ if (url !== __privateGet(this, _document).baseURI) {
+ if (isDataScheme(url)) {
+ warn('#createUrl: ignore "data:"-URL for performance reasons.');
+ } else {
+ __privateSet(this, _baseUrl, url.split("#", 1)[0]);
+ }
+ }
+ }
+ return `url(${__privateGet(this, _baseUrl)}#${id})`;
+};
+_addLuminosityConversion = new WeakSet();
+addLuminosityConversion_fn = function(filter) {
+ const feColorMatrix = __privateGet(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 = new WeakSet();
+addGrayConversion_fn = function(filter) {
+ const feColorMatrix = __privateGet(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 = new WeakSet();
+createFilter_fn = function(id) {
+ const filter = __privateGet(this, _document).createElementNS(SVG_NS, "filter");
+ filter.setAttribute("color-interpolation-filters", "sRGB");
+ filter.setAttribute("id", id);
+ __privateGet(this, _defs, defs_get).append(filter);
+ return filter;
+};
+_appendFeFunc = new WeakSet();
+appendFeFunc_fn = function(feComponentTransfer, func, table) {
+ const feFunc = __privateGet(this, _document).createElementNS(SVG_NS, func);
+ feFunc.setAttribute("type", "discrete");
+ feFunc.setAttribute("tableValues", table);
+ feComponentTransfer.append(feFunc);
+};
+_addTransferMapConversion = new WeakSet();
+addTransferMapConversion_fn = function(rTable, gTable, bTable, filter) {
+ const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer");
+ filter.append(feComponentTransfer);
+ __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncR", rTable);
+ __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncG", gTable);
+ __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncB", bTable);
+};
+_addTransferMapAlphaConversion = new WeakSet();
+addTransferMapAlphaConversion_fn = function(aTable, filter) {
+ const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer");
+ filter.append(feComponentTransfer);
+ __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncA", aTable);
+};
+_getRGB = new WeakSet();
+getRGB_fn = function(color) {
+ __privateGet(this, _defs, defs_get).style.color = color;
+ return getRGB(getComputedStyle(__privateGet(this, _defs, defs_get)).getPropertyValue("color"));
+};
+var DOMCanvasFactory = class 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;
+ }
+};
+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);
+ });
+}
+var DOMCMapReaderFactory = class extends BaseCMapReaderFactory {
+ _fetchData(url, compressionType) {
+ return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then((data) => ({
+ cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data),
+ compressionType
+ }));
+ }
+};
+var DOMStandardFontDataFactory = class extends BaseStandardFontDataFactory {
+ _fetchData(url) {
+ return fetchData(url, "arraybuffer").then((data) => new Uint8Array(data));
+ }
+};
+var DOMSVGFactory = class extends BaseSVGFactory {
+ _createSVG(type) {
+ return document.createElementNS(SVG_NS, type);
+ }
+};
+var PageViewport = class {
+ constructor({
+ viewBox,
+ scale,
+ rotation,
+ offsetX = 0,
+ offsetY = 0,
+ dontFlip = false
+ }) {
+ this.viewBox = viewBox;
+ this.scale = scale;
+ this.rotation = rotation;
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ 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 {
+ viewBox
+ } = this;
+ return shadow(this, "rawDims", {
+ pageWidth: viewBox[2] - viewBox[0],
+ pageHeight: viewBox[3] - viewBox[1],
+ pageX: viewBox[0],
+ pageY: viewBox[1]
+ });
+ }
+ clone({
+ scale = this.scale,
+ rotation = this.rotation,
+ offsetX = this.offsetX,
+ offsetY = this.offsetY,
+ dontFlip = false
+ } = {}) {
+ return new PageViewport({
+ viewBox: this.viewBox.slice(),
+ scale,
+ rotation,
+ offsetX,
+ offsetY,
+ dontFlip
+ });
+ }
+ convertToViewportPoint(x, y) {
+ return Util.applyTransform([x, y], this.transform);
+ }
+ convertToViewportRectangle(rect) {
+ const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);
+ const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);
+ return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
+ }
+ convertToPdfPoint(x, y) {
+ return Util.applyInverseTransform([x, y], this.transform);
+ }
+};
+var RenderingCancelledException = class 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 (e) {
+ }
+ }
+ }
+ return suggestedFilename || defaultFilename;
+}
+var StatTimer = class {
+ constructor() {
+ __publicField(this, "started", /* @__PURE__ */ Object.create(null));
+ __publicField(this, "times", []);
+ }
+ time(name) {
+ if (name in this.started) {
+ warn(`Timer is already running for ${name}`);
+ }
+ this.started[name] = Date.now();
+ }
+ timeEnd(name) {
+ if (!(name in this.started)) {
+ warn(`Timer has not been started for ${name}`);
+ }
+ this.times.push({
+ name,
+ start: this.started[name],
+ end: Date.now()
+ });
+ delete this.started[name];
+ }
+ toString() {
+ const outBuf = [];
+ let longest = 0;
+ for (const {
+ name
+ } of this.times) {
+ longest = Math.max(name.length, longest);
+ }
+ for (const {
+ name,
+ start,
+ end
+ } of this.times) {
+ outBuf.push(`${name.padEnd(longest)} ${end - start}ms
+`);
+ }
+ return outBuf.join("");
+ }
+};
+function isValidFetchUrl(url, baseUrl) {
+ try {
+ const {
+ protocol
+ } = baseUrl ? new URL(url, baseUrl) : new URL(url);
+ return protocol === "http:" || protocol === "https:";
+ } catch (e) {
+ return false;
+ }
+}
+function noContextMenu(e) {
+ e.preventDefault();
+}
+var pdfDateStringRegex;
+var PDFDateString = class {
+ static toDateObject(input) {
+ if (!input || typeof input !== "string") {
+ return null;
+ }
+ pdfDateStringRegex || (pdfDateStringRegex = new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));
+ const matches2 = pdfDateStringRegex.exec(input);
+ if (!matches2) {
+ return null;
+ }
+ const year = parseInt(matches2[1], 10);
+ let month = parseInt(matches2[2], 10);
+ month = month >= 1 && month <= 12 ? month - 1 : 0;
+ let day = parseInt(matches2[3], 10);
+ day = day >= 1 && day <= 31 ? day : 1;
+ let hour = parseInt(matches2[4], 10);
+ hour = hour >= 0 && hour <= 23 ? hour : 0;
+ let minute = parseInt(matches2[5], 10);
+ minute = minute >= 0 && minute <= 59 ? minute : 0;
+ let second = parseInt(matches2[6], 10);
+ second = second >= 0 && second <= 59 ? second : 0;
+ const universalTimeRelation = matches2[7] || "Z";
+ let offsetHour = parseInt(matches2[8], 10);
+ offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
+ let offsetMinute = parseInt(matches2[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,
+ scale,
+ rotation
+ });
+}
+function getRGB(color) {
+ if (color.startsWith("#")) {
+ const colorRGB = parseInt(color.slice(1), 16);
+ return [(colorRGB & 16711680) >> 16, (colorRGB & 65280) >> 8, colorRGB & 255];
+ }
+ 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";
+ 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(--scale-factor) * ${pageWidth}px`, h = `var(--scale-factor) * ${pageHeight}px`;
+ const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, heightStr = useRound ? `round(${h}, 1px)` : `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);
+ }
+}
+var _toolbar, _colorPicker, _editor, _buttons, _altText, _l10nRemove, _pointerDown, pointerDown_fn, _focusIn, focusIn_fn, _focusOut, focusOut_fn, _addListenersToElement, addListenersToElement_fn, _addDeleteButton, addDeleteButton_fn, _divider, divider_get;
+var _EditorToolbar = class {
+ constructor(editor) {
+ __privateAdd(this, _focusIn);
+ __privateAdd(this, _focusOut);
+ __privateAdd(this, _addListenersToElement);
+ __privateAdd(this, _addDeleteButton);
+ __privateAdd(this, _divider);
+ __privateAdd(this, _toolbar, null);
+ __privateAdd(this, _colorPicker, null);
+ __privateAdd(this, _editor, void 0);
+ __privateAdd(this, _buttons, null);
+ __privateAdd(this, _altText, null);
+ __privateSet(this, _editor, editor);
+ __privateGet(_EditorToolbar, _l10nRemove) || __privateSet(_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"
+ }));
+ }
+ render() {
+ const editToolbar = __privateSet(this, _toolbar, document.createElement("div"));
+ editToolbar.className = "editToolbar";
+ editToolbar.setAttribute("role", "toolbar");
+ const signal = __privateGet(this, _editor)._uiManager._signal;
+ editToolbar.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+ editToolbar.addEventListener("pointerdown", __privateMethod(_EditorToolbar, _pointerDown, pointerDown_fn), {
+ signal
+ });
+ const buttons = __privateSet(this, _buttons, document.createElement("div"));
+ buttons.className = "buttons";
+ editToolbar.append(buttons);
+ const position = __privateGet(this, _editor).toolbarPosition;
+ if (position) {
+ const {
+ style
+ } = editToolbar;
+ const x = __privateGet(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))`;
+ }
+ __privateMethod(this, _addDeleteButton, addDeleteButton_fn).call(this);
+ return editToolbar;
+ }
+ hide() {
+ var _a2;
+ __privateGet(this, _toolbar).classList.add("hidden");
+ (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.hideDropdown();
+ }
+ show() {
+ var _a2;
+ __privateGet(this, _toolbar).classList.remove("hidden");
+ (_a2 = __privateGet(this, _altText)) == null ? void 0 : _a2.shown();
+ }
+ async addAltText(altText) {
+ const button = await altText.render();
+ __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button);
+ __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get));
+ __privateSet(this, _altText, altText);
+ }
+ addColorPicker(colorPicker) {
+ __privateSet(this, _colorPicker, colorPicker);
+ const button = colorPicker.renderButton();
+ __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button);
+ __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get));
+ }
+ remove() {
+ var _a2;
+ __privateGet(this, _toolbar).remove();
+ (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.destroy();
+ __privateSet(this, _colorPicker, null);
+ }
+};
+var EditorToolbar = _EditorToolbar;
+_toolbar = new WeakMap();
+_colorPicker = new WeakMap();
+_editor = new WeakMap();
+_buttons = new WeakMap();
+_altText = new WeakMap();
+_l10nRemove = new WeakMap();
+_pointerDown = new WeakSet();
+pointerDown_fn = function(e) {
+ e.stopPropagation();
+};
+_focusIn = new WeakSet();
+focusIn_fn = function(e) {
+ __privateGet(this, _editor)._focusEventsAllowed = false;
+ e.preventDefault();
+ e.stopPropagation();
+};
+_focusOut = new WeakSet();
+focusOut_fn = function(e) {
+ __privateGet(this, _editor)._focusEventsAllowed = true;
+ e.preventDefault();
+ e.stopPropagation();
+};
+_addListenersToElement = new WeakSet();
+addListenersToElement_fn = function(element2) {
+ const signal = __privateGet(this, _editor)._uiManager._signal;
+ element2.addEventListener("focusin", __privateMethod(this, _focusIn, focusIn_fn).bind(this), {
+ capture: true,
+ signal
+ });
+ element2.addEventListener("focusout", __privateMethod(this, _focusOut, focusOut_fn).bind(this), {
+ capture: true,
+ signal
+ });
+ element2.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+};
+_addDeleteButton = new WeakSet();
+addDeleteButton_fn = function() {
+ const {
+ editorType,
+ _uiManager: _uiManager4
+ } = __privateGet(this, _editor);
+ const button = document.createElement("button");
+ button.className = "delete";
+ button.tabIndex = 0;
+ button.setAttribute("data-l10n-id", __privateGet(_EditorToolbar, _l10nRemove)[editorType]);
+ __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button);
+ button.addEventListener("click", (e) => {
+ _uiManager4.delete();
+ }, {
+ signal: _uiManager4._signal
+ });
+ __privateGet(this, _buttons).append(button);
+};
+_divider = new WeakSet();
+divider_get = function() {
+ const divider = document.createElement("div");
+ divider.className = "divider";
+ return divider;
+};
+__privateAdd(EditorToolbar, _pointerDown);
+__privateAdd(EditorToolbar, _l10nRemove, null);
+var _buttons2, _toolbar2, _uiManager, _render, render_fn, _getLastPoint, getLastPoint_fn, _addHighlightButton, addHighlightButton_fn;
+var HighlightToolbar = class {
+ constructor(uiManager) {
+ __privateAdd(this, _render);
+ __privateAdd(this, _getLastPoint);
+ __privateAdd(this, _addHighlightButton);
+ __privateAdd(this, _buttons2, null);
+ __privateAdd(this, _toolbar2, null);
+ __privateAdd(this, _uiManager, void 0);
+ __privateSet(this, _uiManager, uiManager);
+ }
+ show(parent, boxes, isLTR) {
+ const [x, y] = __privateMethod(this, _getLastPoint, getLastPoint_fn).call(this, boxes, isLTR);
+ const {
+ style
+ } = __privateGet(this, _toolbar2) || __privateSet(this, _toolbar2, __privateMethod(this, _render, render_fn).call(this));
+ parent.append(__privateGet(this, _toolbar2));
+ style.insetInlineEnd = `${100 * x}%`;
+ style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;
+ }
+ hide() {
+ __privateGet(this, _toolbar2).remove();
+ }
+};
+_buttons2 = new WeakMap();
+_toolbar2 = new WeakMap();
+_uiManager = new WeakMap();
+_render = new WeakSet();
+render_fn = function() {
+ const editToolbar = __privateSet(this, _toolbar2, document.createElement("div"));
+ editToolbar.className = "editToolbar";
+ editToolbar.setAttribute("role", "toolbar");
+ editToolbar.addEventListener("contextmenu", noContextMenu, {
+ signal: __privateGet(this, _uiManager)._signal
+ });
+ const buttons = __privateSet(this, _buttons2, document.createElement("div"));
+ buttons.className = "buttons";
+ editToolbar.append(buttons);
+ __privateMethod(this, _addHighlightButton, addHighlightButton_fn).call(this);
+ return editToolbar;
+};
+_getLastPoint = new WeakSet();
+getLastPoint_fn = function(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];
+};
+_addHighlightButton = new WeakSet();
+addHighlightButton_fn = function() {
+ 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 = __privateGet(this, _uiManager)._signal;
+ button.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+ button.addEventListener("click", () => {
+ __privateGet(this, _uiManager).highlightSelection("floating_button");
+ }, {
+ signal
+ });
+ __privateGet(this, _buttons2).append(button);
+};
+function bindEvents(obj, element2, names) {
+ for (const name of names) {
+ element2.addEventListener(name, obj[name].bind(obj));
+ }
+}
+function opacityToHex(opacity) {
+ return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0");
+}
+var _id2;
+var IdManager = class {
+ constructor() {
+ __privateAdd(this, _id2, 0);
+ }
+ get id() {
+ return `${AnnotationEditorPrefix}${__privateWrapper(this, _id2)._++}`;
+ }
+};
+_id2 = new WeakMap();
+var _baseId, _id3, _cache2, _get, get_fn;
+var _ImageManager = class {
+ constructor() {
+ __privateAdd(this, _get);
+ __privateAdd(this, _baseId, getUuid());
+ __privateAdd(this, _id3, 0);
+ __privateAdd(this, _cache2, 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 getFromFile(file) {
+ const {
+ lastModified,
+ name,
+ size,
+ type
+ } = file;
+ return __privateMethod(this, _get, get_fn).call(this, `${lastModified}_${name}_${size}_${type}`, file);
+ }
+ async getFromUrl(url) {
+ return __privateMethod(this, _get, get_fn).call(this, url, url);
+ }
+ async getFromId(id) {
+ __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map());
+ const data = __privateGet(this, _cache2).get(id);
+ if (!data) {
+ return null;
+ }
+ if (data.bitmap) {
+ data.refCounter += 1;
+ return data;
+ }
+ if (data.file) {
+ return this.getFromFile(data.file);
+ }
+ return this.getFromUrl(data.url);
+ }
+ getSvgUrl(id) {
+ const data = __privateGet(this, _cache2).get(id);
+ if (!(data == null ? void 0 : data.isSvg)) {
+ return null;
+ }
+ return data.svgUrl;
+ }
+ deleteId(id) {
+ __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map());
+ const data = __privateGet(this, _cache2).get(id);
+ if (!data) {
+ return;
+ }
+ data.refCounter -= 1;
+ if (data.refCounter !== 0) {
+ return;
+ }
+ data.bitmap = null;
+ }
+ isValidId(id) {
+ return id.startsWith(`image_${__privateGet(this, _baseId)}_`);
+ }
+};
+var ImageManager = _ImageManager;
+_baseId = new WeakMap();
+_id3 = new WeakMap();
+_cache2 = new WeakMap();
+_get = new WeakSet();
+get_fn = async function(key, rawData) {
+ __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map());
+ let data = __privateGet(this, _cache2).get(key);
+ if (data === null) {
+ return null;
+ }
+ if (data == null ? void 0 : data.bitmap) {
+ data.refCounter += 1;
+ return data;
+ }
+ try {
+ data || (data = {
+ bitmap: null,
+ id: `image_${__privateGet(this, _baseId)}_${__privateWrapper(this, _id3)._++}`,
+ refCounter: 0,
+ isSvg: false
+ });
+ let image;
+ if (typeof rawData === "string") {
+ data.url = rawData;
+ image = await fetchData(rawData, "blob");
+ } else {
+ image = data.file = 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) {
+ console.error(e);
+ data = null;
+ }
+ __privateGet(this, _cache2).set(key, data);
+ if (data) {
+ __privateGet(this, _cache2).set(data.id, data);
+ }
+ return data;
+};
+var _commands, _locked, _maxSize, _position;
+var CommandManager = class {
+ constructor(maxSize = 128) {
+ __privateAdd(this, _commands, []);
+ __privateAdd(this, _locked, false);
+ __privateAdd(this, _maxSize, void 0);
+ __privateAdd(this, _position, -1);
+ __privateSet(this, _maxSize, maxSize);
+ }
+ add({
+ cmd,
+ undo,
+ post,
+ mustExec,
+ type = NaN,
+ overwriteIfSameType = false,
+ keepUndo = false
+ }) {
+ if (mustExec) {
+ cmd();
+ }
+ if (__privateGet(this, _locked)) {
+ return;
+ }
+ const save2 = {
+ cmd,
+ undo,
+ post,
+ type
+ };
+ if (__privateGet(this, _position) === -1) {
+ if (__privateGet(this, _commands).length > 0) {
+ __privateGet(this, _commands).length = 0;
+ }
+ __privateSet(this, _position, 0);
+ __privateGet(this, _commands).push(save2);
+ return;
+ }
+ if (overwriteIfSameType && __privateGet(this, _commands)[__privateGet(this, _position)].type === type) {
+ if (keepUndo) {
+ save2.undo = __privateGet(this, _commands)[__privateGet(this, _position)].undo;
+ }
+ __privateGet(this, _commands)[__privateGet(this, _position)] = save2;
+ return;
+ }
+ const next = __privateGet(this, _position) + 1;
+ if (next === __privateGet(this, _maxSize)) {
+ __privateGet(this, _commands).splice(0, 1);
+ } else {
+ __privateSet(this, _position, next);
+ if (next < __privateGet(this, _commands).length) {
+ __privateGet(this, _commands).splice(next);
+ }
+ }
+ __privateGet(this, _commands).push(save2);
+ }
+ undo() {
+ if (__privateGet(this, _position) === -1) {
+ return;
+ }
+ __privateSet(this, _locked, true);
+ const {
+ undo,
+ post
+ } = __privateGet(this, _commands)[__privateGet(this, _position)];
+ undo();
+ post == null ? void 0 : post();
+ __privateSet(this, _locked, false);
+ __privateSet(this, _position, __privateGet(this, _position) - 1);
+ }
+ redo() {
+ if (__privateGet(this, _position) < __privateGet(this, _commands).length - 1) {
+ __privateSet(this, _position, __privateGet(this, _position) + 1);
+ __privateSet(this, _locked, true);
+ const {
+ cmd,
+ post
+ } = __privateGet(this, _commands)[__privateGet(this, _position)];
+ cmd();
+ post == null ? void 0 : post();
+ __privateSet(this, _locked, false);
+ }
+ }
+ hasSomethingToUndo() {
+ return __privateGet(this, _position) !== -1;
+ }
+ hasSomethingToRedo() {
+ return __privateGet(this, _position) < __privateGet(this, _commands).length - 1;
+ }
+ destroy() {
+ __privateSet(this, _commands, null);
+ }
+};
+_commands = new WeakMap();
+_locked = new WeakMap();
+_maxSize = new WeakMap();
+_position = new WeakMap();
+var _serialize, serialize_fn;
+var KeyboardManager = class {
+ constructor(callbacks) {
+ __privateAdd(this, _serialize);
+ this.buffer = [];
+ this.callbacks = /* @__PURE__ */ new Map();
+ this.allKeys = /* @__PURE__ */ new Set();
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ for (const [keys, callback, options = {}] of callbacks) {
+ for (const key of keys) {
+ const isMacKey = key.startsWith("mac+");
+ if (isMac && isMacKey) {
+ this.callbacks.set(key.slice(4), {
+ callback,
+ options
+ });
+ this.allKeys.add(key.split("+").at(-1));
+ } else if (!isMac && !isMacKey) {
+ this.callbacks.set(key, {
+ callback,
+ options
+ });
+ this.allKeys.add(key.split("+").at(-1));
+ }
+ }
+ }
+ }
+ exec(self, event) {
+ if (!this.allKeys.has(event.key)) {
+ return;
+ }
+ const info2 = this.callbacks.get(__privateMethod(this, _serialize, serialize_fn).call(this, event));
+ if (!info2) {
+ return;
+ }
+ const {
+ callback,
+ options: {
+ bubbles = false,
+ args = [],
+ checker = null
+ }
+ } = info2;
+ if (checker && !checker(self, event)) {
+ return;
+ }
+ callback.bind(self, ...args, event)();
+ if (!bubbles) {
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ }
+};
+_serialize = new WeakSet();
+serialize_fn = function(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;
+};
+var _ColorManager = class {
+ get _colors() {
+ const colors = /* @__PURE__ */ 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);
+ }
+};
+var ColorManager = _ColorManager;
+__publicField(ColorManager, "_colorsMapping", /* @__PURE__ */ new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]));
+var _abortController, _activeEditor, _allEditors, _allLayers, _altTextManager, _annotationStorage, _changedExistingAnnotations, _commandManager, _copyPasteAC, _currentPageIndex, _deletedAnnotationsElementIds, _draggingEditors, _editorTypes, _editorsToRescale, _enableHighlightFloatingButton, _enableUpdatedAddImage, _enableNewAltTextWhenAddingImage, _filterFactory, _focusMainContainerTimeoutId, _focusManagerAC, _highlightColors, _highlightWhenShiftUp, _highlightToolbar, _idManager, _isEnabled, _isWaiting, _keyboardManagerAC, _lastActiveElement, _mainHighlightColorPicker, _mlManager, _mode, _selectedEditors, _selectedTextNode, _pageColors, _showAllStates, _previousStates, _translation, _translationTimeoutId, _container, _viewer, _getAnchorElementForSelection, getAnchorElementForSelection_fn, _getLayerForTextLayer, getLayerForTextLayer_fn, _displayHighlightToolbar, displayHighlightToolbar_fn, _selectionChange, selectionChange_fn, _onSelectEnd, onSelectEnd_fn, _addSelectionListener, addSelectionListener_fn, _addFocusManager, addFocusManager_fn, _removeFocusManager, removeFocusManager_fn, _addKeyboardManager, addKeyboardManager_fn, _removeKeyboardManager, removeKeyboardManager_fn, _addCopyPasteListeners, addCopyPasteListeners_fn, _removeCopyPasteListeners, removeCopyPasteListeners_fn, _addDragAndDropListeners, addDragAndDropListeners_fn, _dispatchUpdateStates, dispatchUpdateStates_fn, _dispatchUpdateUI, dispatchUpdateUI_fn, _enableAll, enableAll_fn, _disableAll, disableAll_fn, _addEditorToLayer, addEditorToLayer_fn, _lastSelectedEditor, lastSelectedEditor_get, _isEmpty, isEmpty_fn, _selectEditors, selectEditors_fn;
+var _AnnotationEditorUIManager = class {
+ constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager) {
+ __privateAdd(this, _getAnchorElementForSelection);
+ __privateAdd(this, _getLayerForTextLayer);
+ __privateAdd(this, _displayHighlightToolbar);
+ __privateAdd(this, _selectionChange);
+ __privateAdd(this, _onSelectEnd);
+ __privateAdd(this, _addSelectionListener);
+ __privateAdd(this, _addFocusManager);
+ __privateAdd(this, _removeFocusManager);
+ __privateAdd(this, _addKeyboardManager);
+ __privateAdd(this, _removeKeyboardManager);
+ __privateAdd(this, _addCopyPasteListeners);
+ __privateAdd(this, _removeCopyPasteListeners);
+ __privateAdd(this, _addDragAndDropListeners);
+ __privateAdd(this, _dispatchUpdateStates);
+ __privateAdd(this, _dispatchUpdateUI);
+ __privateAdd(this, _enableAll);
+ __privateAdd(this, _disableAll);
+ __privateAdd(this, _addEditorToLayer);
+ __privateAdd(this, _lastSelectedEditor);
+ __privateAdd(this, _isEmpty);
+ __privateAdd(this, _selectEditors);
+ __privateAdd(this, _abortController, new AbortController());
+ __privateAdd(this, _activeEditor, null);
+ __privateAdd(this, _allEditors, /* @__PURE__ */ new Map());
+ __privateAdd(this, _allLayers, /* @__PURE__ */ new Map());
+ __privateAdd(this, _altTextManager, null);
+ __privateAdd(this, _annotationStorage, null);
+ __privateAdd(this, _changedExistingAnnotations, null);
+ __privateAdd(this, _commandManager, new CommandManager());
+ __privateAdd(this, _copyPasteAC, null);
+ __privateAdd(this, _currentPageIndex, 0);
+ __privateAdd(this, _deletedAnnotationsElementIds, /* @__PURE__ */ new Set());
+ __privateAdd(this, _draggingEditors, null);
+ __privateAdd(this, _editorTypes, null);
+ __privateAdd(this, _editorsToRescale, /* @__PURE__ */ new Set());
+ __privateAdd(this, _enableHighlightFloatingButton, false);
+ __privateAdd(this, _enableUpdatedAddImage, false);
+ __privateAdd(this, _enableNewAltTextWhenAddingImage, false);
+ __privateAdd(this, _filterFactory, null);
+ __privateAdd(this, _focusMainContainerTimeoutId, null);
+ __privateAdd(this, _focusManagerAC, null);
+ __privateAdd(this, _highlightColors, null);
+ __privateAdd(this, _highlightWhenShiftUp, false);
+ __privateAdd(this, _highlightToolbar, null);
+ __privateAdd(this, _idManager, new IdManager());
+ __privateAdd(this, _isEnabled, false);
+ __privateAdd(this, _isWaiting, false);
+ __privateAdd(this, _keyboardManagerAC, null);
+ __privateAdd(this, _lastActiveElement, null);
+ __privateAdd(this, _mainHighlightColorPicker, null);
+ __privateAdd(this, _mlManager, null);
+ __privateAdd(this, _mode, AnnotationEditorType.NONE);
+ __privateAdd(this, _selectedEditors, /* @__PURE__ */ new Set());
+ __privateAdd(this, _selectedTextNode, null);
+ __privateAdd(this, _pageColors, null);
+ __privateAdd(this, _showAllStates, null);
+ __privateAdd(this, _previousStates, {
+ isEditing: false,
+ isEmpty: true,
+ hasSomethingToUndo: false,
+ hasSomethingToRedo: false,
+ hasSelectedEditor: false,
+ hasSelectedText: false
+ });
+ __privateAdd(this, _translation, [0, 0]);
+ __privateAdd(this, _translationTimeoutId, null);
+ __privateAdd(this, _container, null);
+ __privateAdd(this, _viewer, null);
+ const signal = this._signal = __privateGet(this, _abortController).signal;
+ __privateSet(this, _container, container);
+ __privateSet(this, _viewer, viewer);
+ __privateSet(this, _altTextManager, altTextManager);
+ 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
+ });
+ __privateMethod(this, _addSelectionListener, addSelectionListener_fn).call(this);
+ __privateMethod(this, _addDragAndDropListeners, addDragAndDropListeners_fn).call(this);
+ __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this);
+ __privateSet(this, _annotationStorage, pdfDocument.annotationStorage);
+ __privateSet(this, _filterFactory, pdfDocument.filterFactory);
+ __privateSet(this, _pageColors, pageColors);
+ __privateSet(this, _highlightColors, highlightColors || null);
+ __privateSet(this, _enableHighlightFloatingButton, enableHighlightFloatingButton);
+ __privateSet(this, _enableUpdatedAddImage, enableUpdatedAddImage);
+ __privateSet(this, _enableNewAltTextWhenAddingImage, enableNewAltTextWhenAddingImage);
+ __privateSet(this, _mlManager, mlManager || null);
+ this.viewParameters = {
+ realScale: PixelsPerInch.PDF_TO_CSS_UNITS,
+ rotation: 0
+ };
+ this.isShiftKeyDown = false;
+ }
+ static get _keyboardManager() {
+ const proto = _AnnotationEditorUIManager.prototype;
+ const arrowChecker = (self) => __privateGet(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) && __privateGet(self, _container).contains(el) && !self.isEnterHandled
+ }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, {
+ checker: (self, {
+ target: el
+ }) => !(el instanceof HTMLButtonElement) && __privateGet(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
+ }]]));
+ }
+ destroy() {
+ var _a2, _b, _c;
+ (_a2 = __privateGet(this, _abortController)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _abortController, null);
+ this._signal = null;
+ for (const layer of __privateGet(this, _allLayers).values()) {
+ layer.destroy();
+ }
+ __privateGet(this, _allLayers).clear();
+ __privateGet(this, _allEditors).clear();
+ __privateGet(this, _editorsToRescale).clear();
+ __privateSet(this, _activeEditor, null);
+ __privateGet(this, _selectedEditors).clear();
+ __privateGet(this, _commandManager).destroy();
+ (_b = __privateGet(this, _altTextManager)) == null ? void 0 : _b.destroy();
+ (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide();
+ __privateSet(this, _highlightToolbar, null);
+ if (__privateGet(this, _focusMainContainerTimeoutId)) {
+ clearTimeout(__privateGet(this, _focusMainContainerTimeoutId));
+ __privateSet(this, _focusMainContainerTimeoutId, null);
+ }
+ if (__privateGet(this, _translationTimeoutId)) {
+ clearTimeout(__privateGet(this, _translationTimeoutId));
+ __privateSet(this, _translationTimeoutId, null);
+ }
+ }
+ combinedSignal(ac) {
+ return AbortSignal.any([this._signal, ac.signal]);
+ }
+ get mlManager() {
+ return __privateGet(this, _mlManager);
+ }
+ get useNewAltTextFlow() {
+ return __privateGet(this, _enableUpdatedAddImage);
+ }
+ get useNewAltTextWhenAddingImage() {
+ return __privateGet(this, _enableNewAltTextWhenAddingImage);
+ }
+ get hcmFilter() {
+ return shadow(this, "hcmFilter", __privateGet(this, _pageColors) ? __privateGet(this, _filterFactory).addHCMFilter(__privateGet(this, _pageColors).foreground, __privateGet(this, _pageColors).background) : "none");
+ }
+ get direction() {
+ return shadow(this, "direction", getComputedStyle(__privateGet(this, _container)).direction);
+ }
+ get highlightColors() {
+ return shadow(this, "highlightColors", __privateGet(this, _highlightColors) ? new Map(__privateGet(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);
+ }
+ setMainHighlightColorPicker(colorPicker) {
+ __privateSet(this, _mainHighlightColorPicker, colorPicker);
+ }
+ editAltText(editor, firstTime = false) {
+ var _a2;
+ (_a2 = __privateGet(this, _altTextManager)) == null ? void 0 : _a2.editAltText(this, editor, firstTime);
+ }
+ 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":
+ __privateSet(this, _enableNewAltTextWhenAddingImage, value);
+ break;
+ }
+ }
+ onPageChanging({
+ pageNumber
+ }) {
+ __privateSet(this, _currentPageIndex, pageNumber - 1);
+ }
+ focusMainContainer() {
+ __privateGet(this, _container).focus();
+ }
+ findParent(x, y) {
+ for (const layer of __privateGet(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) {
+ __privateGet(this, _viewer).classList.toggle("noUserSelect", value);
+ }
+ addShouldRescale(editor) {
+ __privateGet(this, _editorsToRescale).add(editor);
+ }
+ removeShouldRescale(editor) {
+ __privateGet(this, _editorsToRescale).delete(editor);
+ }
+ onScaleChanging({
+ scale
+ }) {
+ this.commitOrRemove();
+ this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;
+ for (const editor of __privateGet(this, _editorsToRescale)) {
+ editor.onScaleChanging();
+ }
+ }
+ onRotationChanging({
+ pagesRotation
+ }) {
+ this.commitOrRemove();
+ this.viewParameters.rotation = pagesRotation;
+ }
+ highlightSelection(methodOfCreation = "") {
+ const selection = document.getSelection();
+ if (!selection || selection.isCollapsed) {
+ return;
+ }
+ const {
+ anchorNode,
+ anchorOffset,
+ focusNode,
+ focusOffset
+ } = selection;
+ const text2 = selection.toString();
+ const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection);
+ const textLayer = anchorElement.closest(".textLayer");
+ const boxes = this.getSelectionBoxes(textLayer);
+ if (!boxes) {
+ return;
+ }
+ selection.empty();
+ const layer = __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer);
+ const isNoneMode = __privateGet(this, _mode) === AnnotationEditorType.NONE;
+ const callback = () => {
+ layer == null ? void 0 : layer.createAndAddNewEditor({
+ x: 0,
+ y: 0
+ }, false, {
+ methodOfCreation,
+ boxes,
+ anchorNode,
+ anchorOffset,
+ focusNode,
+ focusOffset,
+ text: text2
+ });
+ if (isNoneMode) {
+ this.showAllEditors("highlight", true, true);
+ }
+ };
+ if (isNoneMode) {
+ this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback);
+ return;
+ }
+ callback();
+ }
+ addToAnnotationStorage(editor) {
+ if (!editor.isEmpty() && __privateGet(this, _annotationStorage) && !__privateGet(this, _annotationStorage).has(editor.id)) {
+ __privateGet(this, _annotationStorage).setValue(editor.id, editor);
+ }
+ }
+ blur() {
+ this.isShiftKeyDown = false;
+ if (__privateGet(this, _highlightWhenShiftUp)) {
+ __privateSet(this, _highlightWhenShiftUp, false);
+ __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar");
+ }
+ if (!this.hasSelection) {
+ return;
+ }
+ const {
+ activeElement
+ } = document;
+ for (const editor of __privateGet(this, _selectedEditors)) {
+ if (editor.div.contains(activeElement)) {
+ __privateSet(this, _lastActiveElement, [editor, activeElement]);
+ editor._focusEventsAllowed = false;
+ break;
+ }
+ }
+ }
+ focus() {
+ if (!__privateGet(this, _lastActiveElement)) {
+ return;
+ }
+ const [lastEditor, lastActiveElement] = __privateGet(this, _lastActiveElement);
+ __privateSet(this, _lastActiveElement, null);
+ lastActiveElement.addEventListener("focusin", () => {
+ lastEditor._focusEventsAllowed = true;
+ }, {
+ once: true,
+ signal: this._signal
+ });
+ lastActiveElement.focus();
+ }
+ addEditListeners() {
+ __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this);
+ __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this);
+ }
+ removeEditListeners() {
+ __privateMethod(this, _removeKeyboardManager, removeKeyboardManager_fn).call(this);
+ __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this);
+ }
+ dragOver(event) {
+ for (const {
+ type
+ } of event.dataTransfer.items) {
+ for (const editorType of __privateGet(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 __privateGet(this, _editorTypes)) {
+ if (editorType.isHandlingMimeForPasting(item.type)) {
+ editorType.paste(item, this.currentLayer);
+ event.preventDefault();
+ return;
+ }
+ }
+ }
+ }
+ copy(event) {
+ var _a2;
+ event.preventDefault();
+ (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove();
+ if (!this.hasSelection) {
+ return;
+ }
+ const editors = [];
+ for (const editor of __privateGet(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();
+ }
+ paste(event) {
+ event.preventDefault();
+ const {
+ clipboardData
+ } = event;
+ for (const item of clipboardData.items) {
+ for (const editorType of __privateGet(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 = layer.deserialize(editor);
+ if (!deserializedEditor) {
+ return;
+ }
+ newEditors.push(deserializedEditor);
+ }
+ const cmd = () => {
+ for (const editor of newEditors) {
+ __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor);
+ }
+ __privateMethod(this, _selectEditors, selectEditors_fn).call(this, 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 (__privateGet(this, _mode) !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) {
+ _AnnotationEditorUIManager._keyboardManager.exec(this, event);
+ }
+ }
+ keyup(event) {
+ if (this.isShiftKeyDown && event.key === "Shift") {
+ this.isShiftKeyDown = false;
+ if (__privateGet(this, _highlightWhenShiftUp)) {
+ __privateSet(this, _highlightWhenShiftUp, false);
+ __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar");
+ }
+ }
+ }
+ onEditingAction({
+ name
+ }) {
+ switch (name) {
+ case "undo":
+ case "redo":
+ case "delete":
+ case "selectAll":
+ this[name]();
+ break;
+ case "highlightSelection":
+ this.highlightSelection("context_menu");
+ break;
+ }
+ }
+ setEditingState(isEditing) {
+ if (isEditing) {
+ __privateMethod(this, _addFocusManager, addFocusManager_fn).call(this);
+ __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ isEditing: __privateGet(this, _mode) !== AnnotationEditorType.NONE,
+ isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this),
+ hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(),
+ hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(),
+ hasSelectedEditor: false
+ });
+ } else {
+ __privateMethod(this, _removeFocusManager, removeFocusManager_fn).call(this);
+ __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ isEditing: false
+ });
+ this.disableUserSelect(false);
+ }
+ }
+ registerEditorTypes(types) {
+ if (__privateGet(this, _editorTypes)) {
+ return;
+ }
+ __privateSet(this, _editorTypes, types);
+ for (const editorType of __privateGet(this, _editorTypes)) {
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editorType.defaultPropertiesToUpdate);
+ }
+ }
+ getId() {
+ return __privateGet(this, _idManager).id;
+ }
+ get currentLayer() {
+ return __privateGet(this, _allLayers).get(__privateGet(this, _currentPageIndex));
+ }
+ getLayer(pageIndex) {
+ return __privateGet(this, _allLayers).get(pageIndex);
+ }
+ get currentPageIndex() {
+ return __privateGet(this, _currentPageIndex);
+ }
+ addLayer(layer) {
+ __privateGet(this, _allLayers).set(layer.pageIndex, layer);
+ if (__privateGet(this, _isEnabled)) {
+ layer.enable();
+ } else {
+ layer.disable();
+ }
+ }
+ removeLayer(layer) {
+ __privateGet(this, _allLayers).delete(layer.pageIndex);
+ }
+ updateMode(mode, editId = null, isFromKeyboard = false) {
+ if (__privateGet(this, _mode) === mode) {
+ return;
+ }
+ __privateSet(this, _mode, mode);
+ if (mode === AnnotationEditorType.NONE) {
+ this.setEditingState(false);
+ __privateMethod(this, _disableAll, disableAll_fn).call(this);
+ return;
+ }
+ this.setEditingState(true);
+ __privateMethod(this, _enableAll, enableAll_fn).call(this);
+ this.unselectAll();
+ for (const layer of __privateGet(this, _allLayers).values()) {
+ layer.updateMode(mode);
+ }
+ if (!editId && isFromKeyboard) {
+ this.addNewEditorFromKeyboard();
+ return;
+ }
+ if (!editId) {
+ return;
+ }
+ for (const editor of __privateGet(this, _allEditors).values()) {
+ if (editor.annotationElementId === editId) {
+ this.setSelected(editor);
+ editor.enterInEditMode();
+ break;
+ }
+ }
+ }
+ addNewEditorFromKeyboard() {
+ if (this.currentLayer.canCreateNewEmptyEditor()) {
+ this.currentLayer.addNewEditor();
+ }
+ }
+ updateToolbar(mode) {
+ if (mode === __privateGet(this, _mode)) {
+ return;
+ }
+ this._eventBus.dispatch("switchannotationeditormode", {
+ source: this,
+ mode
+ });
+ }
+ updateParams(type, value) {
+ var _a2;
+ if (!__privateGet(this, _editorTypes)) {
+ return;
+ }
+ switch (type) {
+ case AnnotationEditorParamsType.CREATE:
+ this.currentLayer.addNewEditor();
+ return;
+ case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:
+ (_a2 = __privateGet(this, _mainHighlightColorPicker)) == null ? void 0 : _a2.updateColor(value);
+ break;
+ case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:
+ this._eventBus.dispatch("reporttelemetry", {
+ source: this,
+ details: {
+ type: "editing",
+ data: {
+ type: "highlight",
+ action: "toggle_visibility"
+ }
+ }
+ });
+ (__privateGet(this, _showAllStates) || __privateSet(this, _showAllStates, /* @__PURE__ */ new Map())).set(type, value);
+ this.showAllEditors("highlight", value);
+ break;
+ }
+ for (const editor of __privateGet(this, _selectedEditors)) {
+ editor.updateParams(type, value);
+ }
+ for (const editorType of __privateGet(this, _editorTypes)) {
+ editorType.updateDefaultParams(type, value);
+ }
+ }
+ showAllEditors(type, visible, updateButton = false) {
+ var _a2, _b;
+ for (const editor of __privateGet(this, _allEditors).values()) {
+ if (editor.editorType === type) {
+ editor.show(visible);
+ }
+ }
+ const state = (_b = (_a2 = __privateGet(this, _showAllStates)) == null ? void 0 : _a2.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL)) != null ? _b : true;
+ if (state !== visible) {
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]);
+ }
+ }
+ enableWaiting(mustWait = false) {
+ if (__privateGet(this, _isWaiting) === mustWait) {
+ return;
+ }
+ __privateSet(this, _isWaiting, mustWait);
+ for (const layer of __privateGet(this, _allLayers).values()) {
+ if (mustWait) {
+ layer.disableClick();
+ } else {
+ layer.enableClick();
+ }
+ layer.div.classList.toggle("waiting", mustWait);
+ }
+ }
+ getEditors(pageIndex) {
+ const editors = [];
+ for (const editor of __privateGet(this, _allEditors).values()) {
+ if (editor.pageIndex === pageIndex) {
+ editors.push(editor);
+ }
+ }
+ return editors;
+ }
+ getEditor(id) {
+ return __privateGet(this, _allEditors).get(id);
+ }
+ addEditor(editor) {
+ __privateGet(this, _allEditors).set(editor.id, editor);
+ }
+ removeEditor(editor) {
+ var _a2;
+ if (editor.div.contains(document.activeElement)) {
+ if (__privateGet(this, _focusMainContainerTimeoutId)) {
+ clearTimeout(__privateGet(this, _focusMainContainerTimeoutId));
+ }
+ __privateSet(this, _focusMainContainerTimeoutId, setTimeout(() => {
+ this.focusMainContainer();
+ __privateSet(this, _focusMainContainerTimeoutId, null);
+ }, 0));
+ }
+ __privateGet(this, _allEditors).delete(editor.id);
+ this.unselect(editor);
+ if (!editor.annotationElementId || !__privateGet(this, _deletedAnnotationsElementIds).has(editor.annotationElementId)) {
+ (_a2 = __privateGet(this, _annotationStorage)) == null ? void 0 : _a2.remove(editor.id);
+ }
+ }
+ addDeletedAnnotationElement(editor) {
+ __privateGet(this, _deletedAnnotationsElementIds).add(editor.annotationElementId);
+ this.addChangedExistingAnnotation(editor);
+ editor.deleted = true;
+ }
+ isDeletedAnnotationElement(annotationElementId) {
+ return __privateGet(this, _deletedAnnotationsElementIds).has(annotationElementId);
+ }
+ removeDeletedAnnotationElement(editor) {
+ __privateGet(this, _deletedAnnotationsElementIds).delete(editor.annotationElementId);
+ this.removeChangedExistingAnnotation(editor);
+ editor.deleted = false;
+ }
+ setActiveEditor(editor) {
+ if (__privateGet(this, _activeEditor) === editor) {
+ return;
+ }
+ __privateSet(this, _activeEditor, editor);
+ if (editor) {
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate);
+ }
+ }
+ updateUI(editor) {
+ if (__privateGet(this, _lastSelectedEditor, lastSelectedEditor_get) === editor) {
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate);
+ }
+ }
+ toggleSelected(editor) {
+ if (__privateGet(this, _selectedEditors).has(editor)) {
+ __privateGet(this, _selectedEditors).delete(editor);
+ editor.unselect();
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedEditor: this.hasSelection
+ });
+ return;
+ }
+ __privateGet(this, _selectedEditors).add(editor);
+ editor.select();
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedEditor: true
+ });
+ }
+ setSelected(editor) {
+ for (const ed of __privateGet(this, _selectedEditors)) {
+ if (ed !== editor) {
+ ed.unselect();
+ }
+ }
+ __privateGet(this, _selectedEditors).clear();
+ __privateGet(this, _selectedEditors).add(editor);
+ editor.select();
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedEditor: true
+ });
+ }
+ isSelected(editor) {
+ return __privateGet(this, _selectedEditors).has(editor);
+ }
+ get firstSelectedEditor() {
+ return __privateGet(this, _selectedEditors).values().next().value;
+ }
+ unselect(editor) {
+ editor.unselect();
+ __privateGet(this, _selectedEditors).delete(editor);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedEditor: this.hasSelection
+ });
+ }
+ get hasSelection() {
+ return __privateGet(this, _selectedEditors).size !== 0;
+ }
+ get isEnterHandled() {
+ return __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.isEnterHandled;
+ }
+ undo() {
+ __privateGet(this, _commandManager).undo();
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(),
+ hasSomethingToRedo: true,
+ isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this)
+ });
+ }
+ redo() {
+ __privateGet(this, _commandManager).redo();
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSomethingToUndo: true,
+ hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(),
+ isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this)
+ });
+ }
+ addCommands(params) {
+ __privateGet(this, _commandManager).add(params);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSomethingToUndo: true,
+ hasSomethingToRedo: false,
+ isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this)
+ });
+ }
+ delete() {
+ this.commitOrRemove();
+ if (!this.hasSelection) {
+ return;
+ }
+ const editors = [...__privateGet(this, _selectedEditors)];
+ const cmd = () => {
+ for (const editor of editors) {
+ editor.remove();
+ }
+ };
+ const undo = () => {
+ for (const editor of editors) {
+ __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor);
+ }
+ };
+ this.addCommands({
+ cmd,
+ undo,
+ mustExec: true
+ });
+ }
+ commitOrRemove() {
+ var _a2;
+ (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove();
+ }
+ hasSomethingToControl() {
+ return __privateGet(this, _activeEditor) || this.hasSelection;
+ }
+ selectAll() {
+ for (const editor of __privateGet(this, _selectedEditors)) {
+ editor.commit();
+ }
+ __privateMethod(this, _selectEditors, selectEditors_fn).call(this, __privateGet(this, _allEditors).values());
+ }
+ unselectAll() {
+ if (__privateGet(this, _activeEditor)) {
+ __privateGet(this, _activeEditor).commitOrRemove();
+ if (__privateGet(this, _mode) !== AnnotationEditorType.NONE) {
+ return;
+ }
+ }
+ if (!this.hasSelection) {
+ return;
+ }
+ for (const editor of __privateGet(this, _selectedEditors)) {
+ editor.unselect();
+ }
+ __privateGet(this, _selectedEditors).clear();
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedEditor: false
+ });
+ }
+ translateSelectedEditors(x, y, noCommit = false) {
+ if (!noCommit) {
+ this.commitOrRemove();
+ }
+ if (!this.hasSelection) {
+ return;
+ }
+ __privateGet(this, _translation)[0] += x;
+ __privateGet(this, _translation)[1] += y;
+ const [totalX, totalY] = __privateGet(this, _translation);
+ const editors = [...__privateGet(this, _selectedEditors)];
+ const TIME_TO_WAIT = 1e3;
+ if (__privateGet(this, _translationTimeoutId)) {
+ clearTimeout(__privateGet(this, _translationTimeoutId));
+ }
+ __privateSet(this, _translationTimeoutId, setTimeout(() => {
+ __privateSet(this, _translationTimeoutId, null);
+ __privateGet(this, _translation)[0] = __privateGet(this, _translation)[1] = 0;
+ this.addCommands({
+ cmd: () => {
+ for (const editor of editors) {
+ if (__privateGet(this, _allEditors).has(editor.id)) {
+ editor.translateInPage(totalX, totalY);
+ }
+ }
+ },
+ undo: () => {
+ for (const editor of editors) {
+ if (__privateGet(this, _allEditors).has(editor.id)) {
+ editor.translateInPage(-totalX, -totalY);
+ }
+ }
+ },
+ mustExec: false
+ });
+ }, TIME_TO_WAIT));
+ for (const editor of editors) {
+ editor.translateInPage(x, y);
+ }
+ }
+ setUpDragSession() {
+ if (!this.hasSelection) {
+ return;
+ }
+ this.disableUserSelect(true);
+ __privateSet(this, _draggingEditors, /* @__PURE__ */ new Map());
+ for (const editor of __privateGet(this, _selectedEditors)) {
+ __privateGet(this, _draggingEditors).set(editor, {
+ savedX: editor.x,
+ savedY: editor.y,
+ savedPageIndex: editor.pageIndex,
+ newX: 0,
+ newY: 0,
+ newPageIndex: -1
+ });
+ }
+ }
+ endDragSession() {
+ if (!__privateGet(this, _draggingEditors)) {
+ return false;
+ }
+ this.disableUserSelect(false);
+ const map = __privateGet(this, _draggingEditors);
+ __privateSet(this, _draggingEditors, null);
+ let mustBeAddedInUndoStack = false;
+ for (const [{
+ x,
+ y,
+ pageIndex
+ }, value] of map) {
+ value.newX = x;
+ value.newY = y;
+ value.newPageIndex = pageIndex;
+ mustBeAddedInUndoStack || (mustBeAddedInUndoStack = x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex);
+ }
+ if (!mustBeAddedInUndoStack) {
+ return false;
+ }
+ const move = (editor, x, y, pageIndex) => {
+ if (__privateGet(this, _allEditors).has(editor.id)) {
+ const parent = __privateGet(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 (!__privateGet(this, _draggingEditors)) {
+ return;
+ }
+ for (const editor of __privateGet(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() {
+ var _a2;
+ return ((_a2 = this.getActive()) == null ? void 0 : _a2.shouldGetKeyboardEvents()) || __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();
+ }
+ isActive(editor) {
+ return __privateGet(this, _activeEditor) === editor;
+ }
+ getActive() {
+ return __privateGet(this, _activeEditor);
+ }
+ getMode() {
+ return __privateGet(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
+ }) {
+ (__privateGet(this, _changedExistingAnnotations) || __privateSet(this, _changedExistingAnnotations, /* @__PURE__ */ new Map())).set(annotationElementId, id);
+ }
+ removeChangedExistingAnnotation({
+ annotationElementId
+ }) {
+ var _a2;
+ (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.delete(annotationElementId);
+ }
+ renderAnnotationElement(annotation) {
+ var _a2;
+ const editorId = (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.get(annotation.data.id);
+ if (!editorId) {
+ return;
+ }
+ const editor = __privateGet(this, _annotationStorage).getRawValue(editorId);
+ if (!editor) {
+ return;
+ }
+ if (__privateGet(this, _mode) === AnnotationEditorType.NONE && !editor.hasBeenModified) {
+ return;
+ }
+ editor.renderAnnotationElement(annotation);
+ }
+};
+var AnnotationEditorUIManager = _AnnotationEditorUIManager;
+_abortController = new WeakMap();
+_activeEditor = new WeakMap();
+_allEditors = new WeakMap();
+_allLayers = new WeakMap();
+_altTextManager = new WeakMap();
+_annotationStorage = new WeakMap();
+_changedExistingAnnotations = new WeakMap();
+_commandManager = new WeakMap();
+_copyPasteAC = new WeakMap();
+_currentPageIndex = new WeakMap();
+_deletedAnnotationsElementIds = new WeakMap();
+_draggingEditors = new WeakMap();
+_editorTypes = new WeakMap();
+_editorsToRescale = new WeakMap();
+_enableHighlightFloatingButton = new WeakMap();
+_enableUpdatedAddImage = new WeakMap();
+_enableNewAltTextWhenAddingImage = new WeakMap();
+_filterFactory = new WeakMap();
+_focusMainContainerTimeoutId = new WeakMap();
+_focusManagerAC = new WeakMap();
+_highlightColors = new WeakMap();
+_highlightWhenShiftUp = new WeakMap();
+_highlightToolbar = new WeakMap();
+_idManager = new WeakMap();
+_isEnabled = new WeakMap();
+_isWaiting = new WeakMap();
+_keyboardManagerAC = new WeakMap();
+_lastActiveElement = new WeakMap();
+_mainHighlightColorPicker = new WeakMap();
+_mlManager = new WeakMap();
+_mode = new WeakMap();
+_selectedEditors = new WeakMap();
+_selectedTextNode = new WeakMap();
+_pageColors = new WeakMap();
+_showAllStates = new WeakMap();
+_previousStates = new WeakMap();
+_translation = new WeakMap();
+_translationTimeoutId = new WeakMap();
+_container = new WeakMap();
+_viewer = new WeakMap();
+_getAnchorElementForSelection = new WeakSet();
+getAnchorElementForSelection_fn = function({
+ anchorNode
+}) {
+ return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode;
+};
+_getLayerForTextLayer = new WeakSet();
+getLayerForTextLayer_fn = function(textLayer) {
+ const {
+ currentLayer
+ } = this;
+ if (currentLayer.hasTextLayer(textLayer)) {
+ return currentLayer;
+ }
+ for (const layer of __privateGet(this, _allLayers).values()) {
+ if (layer.hasTextLayer(textLayer)) {
+ return layer;
+ }
+ }
+ return null;
+};
+_displayHighlightToolbar = new WeakSet();
+displayHighlightToolbar_fn = function() {
+ const selection = document.getSelection();
+ if (!selection || selection.isCollapsed) {
+ return;
+ }
+ const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection);
+ const textLayer = anchorElement.closest(".textLayer");
+ const boxes = this.getSelectionBoxes(textLayer);
+ if (!boxes) {
+ return;
+ }
+ __privateGet(this, _highlightToolbar) || __privateSet(this, _highlightToolbar, new HighlightToolbar(this));
+ __privateGet(this, _highlightToolbar).show(textLayer, boxes, this.direction === "ltr");
+};
+_selectionChange = new WeakSet();
+selectionChange_fn = function() {
+ var _a2, _b, _c;
+ const selection = document.getSelection();
+ if (!selection || selection.isCollapsed) {
+ if (__privateGet(this, _selectedTextNode)) {
+ (_a2 = __privateGet(this, _highlightToolbar)) == null ? void 0 : _a2.hide();
+ __privateSet(this, _selectedTextNode, null);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedText: false
+ });
+ }
+ return;
+ }
+ const {
+ anchorNode
+ } = selection;
+ if (anchorNode === __privateGet(this, _selectedTextNode)) {
+ return;
+ }
+ const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection);
+ const textLayer = anchorElement.closest(".textLayer");
+ if (!textLayer) {
+ if (__privateGet(this, _selectedTextNode)) {
+ (_b = __privateGet(this, _highlightToolbar)) == null ? void 0 : _b.hide();
+ __privateSet(this, _selectedTextNode, null);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedText: false
+ });
+ }
+ return;
+ }
+ (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide();
+ __privateSet(this, _selectedTextNode, anchorNode);
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedText: true
+ });
+ if (__privateGet(this, _mode) !== AnnotationEditorType.HIGHLIGHT && __privateGet(this, _mode) !== AnnotationEditorType.NONE) {
+ return;
+ }
+ if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) {
+ this.showAllEditors("highlight", true, true);
+ }
+ __privateSet(this, _highlightWhenShiftUp, this.isShiftKeyDown);
+ if (!this.isShiftKeyDown) {
+ const activeLayer = __privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT ? __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer) : null;
+ activeLayer == null ? void 0 : 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 == null ? void 0 : activeLayer.toggleDrawing(true);
+ if (e.type === "pointerup") {
+ __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar");
+ }
+ };
+ window.addEventListener("pointerup", pointerup, {
+ signal
+ });
+ window.addEventListener("blur", pointerup, {
+ signal
+ });
+ }
+};
+_onSelectEnd = new WeakSet();
+onSelectEnd_fn = function(methodOfCreation = "") {
+ if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) {
+ this.highlightSelection(methodOfCreation);
+ } else if (__privateGet(this, _enableHighlightFloatingButton)) {
+ __privateMethod(this, _displayHighlightToolbar, displayHighlightToolbar_fn).call(this);
+ }
+};
+_addSelectionListener = new WeakSet();
+addSelectionListener_fn = function() {
+ document.addEventListener("selectionchange", __privateMethod(this, _selectionChange, selectionChange_fn).bind(this), {
+ signal: this._signal
+ });
+};
+_addFocusManager = new WeakSet();
+addFocusManager_fn = function() {
+ if (__privateGet(this, _focusManagerAC)) {
+ return;
+ }
+ __privateSet(this, _focusManagerAC, new AbortController());
+ const signal = this.combinedSignal(__privateGet(this, _focusManagerAC));
+ window.addEventListener("focus", this.focus.bind(this), {
+ signal
+ });
+ window.addEventListener("blur", this.blur.bind(this), {
+ signal
+ });
+};
+_removeFocusManager = new WeakSet();
+removeFocusManager_fn = function() {
+ var _a2;
+ (_a2 = __privateGet(this, _focusManagerAC)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _focusManagerAC, null);
+};
+_addKeyboardManager = new WeakSet();
+addKeyboardManager_fn = function() {
+ if (__privateGet(this, _keyboardManagerAC)) {
+ return;
+ }
+ __privateSet(this, _keyboardManagerAC, new AbortController());
+ const signal = this.combinedSignal(__privateGet(this, _keyboardManagerAC));
+ window.addEventListener("keydown", this.keydown.bind(this), {
+ signal
+ });
+ window.addEventListener("keyup", this.keyup.bind(this), {
+ signal
+ });
+};
+_removeKeyboardManager = new WeakSet();
+removeKeyboardManager_fn = function() {
+ var _a2;
+ (_a2 = __privateGet(this, _keyboardManagerAC)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _keyboardManagerAC, null);
+};
+_addCopyPasteListeners = new WeakSet();
+addCopyPasteListeners_fn = function() {
+ if (__privateGet(this, _copyPasteAC)) {
+ return;
+ }
+ __privateSet(this, _copyPasteAC, new AbortController());
+ const signal = this.combinedSignal(__privateGet(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 = new WeakSet();
+removeCopyPasteListeners_fn = function() {
+ var _a2;
+ (_a2 = __privateGet(this, _copyPasteAC)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _copyPasteAC, null);
+};
+_addDragAndDropListeners = new WeakSet();
+addDragAndDropListeners_fn = function() {
+ const signal = this._signal;
+ document.addEventListener("dragover", this.dragOver.bind(this), {
+ signal
+ });
+ document.addEventListener("drop", this.drop.bind(this), {
+ signal
+ });
+};
+_dispatchUpdateStates = new WeakSet();
+dispatchUpdateStates_fn = function(details) {
+ const hasChanged = Object.entries(details).some(([key, value]) => __privateGet(this, _previousStates)[key] !== value);
+ if (hasChanged) {
+ this._eventBus.dispatch("annotationeditorstateschanged", {
+ source: this,
+ details: Object.assign(__privateGet(this, _previousStates), details)
+ });
+ if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) {
+ __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]);
+ }
+ }
+};
+_dispatchUpdateUI = new WeakSet();
+dispatchUpdateUI_fn = function(details) {
+ this._eventBus.dispatch("annotationeditorparamschanged", {
+ source: this,
+ details
+ });
+};
+_enableAll = new WeakSet();
+enableAll_fn = function() {
+ if (!__privateGet(this, _isEnabled)) {
+ __privateSet(this, _isEnabled, true);
+ for (const layer of __privateGet(this, _allLayers).values()) {
+ layer.enable();
+ }
+ for (const editor of __privateGet(this, _allEditors).values()) {
+ editor.enable();
+ }
+ }
+};
+_disableAll = new WeakSet();
+disableAll_fn = function() {
+ this.unselectAll();
+ if (__privateGet(this, _isEnabled)) {
+ __privateSet(this, _isEnabled, false);
+ for (const layer of __privateGet(this, _allLayers).values()) {
+ layer.disable();
+ }
+ for (const editor of __privateGet(this, _allEditors).values()) {
+ editor.disable();
+ }
+ }
+};
+_addEditorToLayer = new WeakSet();
+addEditorToLayer_fn = function(editor) {
+ const layer = __privateGet(this, _allLayers).get(editor.pageIndex);
+ if (layer) {
+ layer.addOrRebuild(editor);
+ } else {
+ this.addEditor(editor);
+ this.addToAnnotationStorage(editor);
+ }
+};
+_lastSelectedEditor = new WeakSet();
+lastSelectedEditor_get = function() {
+ let ed = null;
+ for (ed of __privateGet(this, _selectedEditors)) {
+ }
+ return ed;
+};
+_isEmpty = new WeakSet();
+isEmpty_fn = function() {
+ if (__privateGet(this, _allEditors).size === 0) {
+ return true;
+ }
+ if (__privateGet(this, _allEditors).size === 1) {
+ for (const editor of __privateGet(this, _allEditors).values()) {
+ return editor.isEmpty();
+ }
+ }
+ return false;
+};
+_selectEditors = new WeakSet();
+selectEditors_fn = function(editors) {
+ for (const editor of __privateGet(this, _selectedEditors)) {
+ editor.unselect();
+ }
+ __privateGet(this, _selectedEditors).clear();
+ for (const editor of editors) {
+ if (editor.isEmpty()) {
+ continue;
+ }
+ __privateGet(this, _selectedEditors).add(editor);
+ editor.select();
+ }
+ __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, {
+ hasSelectedEditor: this.hasSelection
+ });
+};
+__publicField(AnnotationEditorUIManager, "TRANSLATE_SMALL", 1);
+__publicField(AnnotationEditorUIManager, "TRANSLATE_BIG", 10);
+var _altText2, _altTextDecorative, _altTextButton, _altTextTooltip, _altTextTooltipTimeout, _altTextWasFromKeyBoard, _badge, _editor2, _guessedText, _textWithDisclaimer, _useNewAltTextFlow, _label, label_get, _setState, setState_fn;
+var _AltText = class {
+ constructor(editor) {
+ __privateAdd(this, _label);
+ __privateAdd(this, _setState);
+ __privateAdd(this, _altText2, null);
+ __privateAdd(this, _altTextDecorative, false);
+ __privateAdd(this, _altTextButton, null);
+ __privateAdd(this, _altTextTooltip, null);
+ __privateAdd(this, _altTextTooltipTimeout, null);
+ __privateAdd(this, _altTextWasFromKeyBoard, false);
+ __privateAdd(this, _badge, null);
+ __privateAdd(this, _editor2, null);
+ __privateAdd(this, _guessedText, null);
+ __privateAdd(this, _textWithDisclaimer, null);
+ __privateAdd(this, _useNewAltTextFlow, false);
+ __privateSet(this, _editor2, editor);
+ __privateSet(this, _useNewAltTextFlow, editor._uiManager.useNewAltTextFlow);
+ }
+ static initialize(l10nPromise) {
+ _AltText._l10nPromise || (_AltText._l10nPromise = l10nPromise);
+ }
+ async render() {
+ const altText = __privateSet(this, _altTextButton, document.createElement("button"));
+ altText.className = "altText";
+ let msg;
+ if (__privateGet(this, _useNewAltTextFlow)) {
+ altText.classList.add("new");
+ msg = await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-missing-button-label");
+ } else {
+ msg = await _AltText._l10nPromise.get("pdfjs-editor-alt-text-button-label");
+ }
+ altText.textContent = msg;
+ altText.setAttribute("aria-label", msg);
+ altText.tabIndex = "0";
+ const signal = __privateGet(this, _editor2)._uiManager._signal;
+ altText.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+ altText.addEventListener("pointerdown", (event) => event.stopPropagation(), {
+ signal
+ });
+ const onClick = (event) => {
+ event.preventDefault();
+ __privateGet(this, _editor2)._uiManager.editAltText(__privateGet(this, _editor2));
+ if (__privateGet(this, _useNewAltTextFlow)) {
+ __privateGet(this, _editor2)._reportTelemetry({
+ action: "pdfjs.image.alt_text.image_status_label_clicked",
+ data: {
+ label: __privateGet(this, _label, label_get)
+ }
+ });
+ }
+ };
+ altText.addEventListener("click", onClick, {
+ capture: true,
+ signal
+ });
+ altText.addEventListener("keydown", (event) => {
+ if (event.target === altText && event.key === "Enter") {
+ __privateSet(this, _altTextWasFromKeyBoard, true);
+ onClick(event);
+ }
+ }, {
+ signal
+ });
+ await __privateMethod(this, _setState, setState_fn).call(this);
+ return altText;
+ }
+ finish() {
+ if (!__privateGet(this, _altTextButton)) {
+ return;
+ }
+ __privateGet(this, _altTextButton).focus({
+ focusVisible: __privateGet(this, _altTextWasFromKeyBoard)
+ });
+ __privateSet(this, _altTextWasFromKeyBoard, false);
+ }
+ isEmpty() {
+ if (__privateGet(this, _useNewAltTextFlow)) {
+ return __privateGet(this, _altText2) === null;
+ }
+ return !__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative);
+ }
+ hasData() {
+ if (__privateGet(this, _useNewAltTextFlow)) {
+ return __privateGet(this, _altText2) !== null || !!__privateGet(this, _guessedText);
+ }
+ return this.isEmpty();
+ }
+ get guessedText() {
+ return __privateGet(this, _guessedText);
+ }
+ async setGuessedText(guessedText) {
+ if (__privateGet(this, _altText2) !== null) {
+ return;
+ }
+ __privateSet(this, _guessedText, guessedText);
+ __privateSet(this, _textWithDisclaimer, await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer")({
+ generatedAltText: guessedText
+ }));
+ __privateMethod(this, _setState, setState_fn).call(this);
+ }
+ toggleAltTextBadge(visibility = false) {
+ var _a2;
+ if (!__privateGet(this, _useNewAltTextFlow) || __privateGet(this, _altText2)) {
+ (_a2 = __privateGet(this, _badge)) == null ? void 0 : _a2.remove();
+ __privateSet(this, _badge, null);
+ return;
+ }
+ if (!__privateGet(this, _badge)) {
+ const badge = __privateSet(this, _badge, document.createElement("div"));
+ badge.className = "noAltTextBadge";
+ __privateGet(this, _editor2).div.append(badge);
+ }
+ __privateGet(this, _badge).classList.toggle("hidden", !visibility);
+ }
+ serialize(isForCopying) {
+ let altText = __privateGet(this, _altText2);
+ if (!isForCopying && __privateGet(this, _guessedText) === altText) {
+ altText = __privateGet(this, _textWithDisclaimer);
+ }
+ return {
+ altText,
+ decorative: __privateGet(this, _altTextDecorative),
+ guessedText: __privateGet(this, _guessedText),
+ textWithDisclaimer: __privateGet(this, _textWithDisclaimer)
+ };
+ }
+ get data() {
+ return {
+ altText: __privateGet(this, _altText2),
+ decorative: __privateGet(this, _altTextDecorative)
+ };
+ }
+ set data({
+ altText,
+ decorative,
+ guessedText,
+ textWithDisclaimer,
+ cancel = false
+ }) {
+ if (guessedText) {
+ __privateSet(this, _guessedText, guessedText);
+ __privateSet(this, _textWithDisclaimer, textWithDisclaimer);
+ }
+ if (__privateGet(this, _altText2) === altText && __privateGet(this, _altTextDecorative) === decorative) {
+ return;
+ }
+ if (!cancel) {
+ __privateSet(this, _altText2, altText);
+ __privateSet(this, _altTextDecorative, decorative);
+ }
+ __privateMethod(this, _setState, setState_fn).call(this);
+ }
+ toggle(enabled = false) {
+ if (!__privateGet(this, _altTextButton)) {
+ return;
+ }
+ if (!enabled && __privateGet(this, _altTextTooltipTimeout)) {
+ clearTimeout(__privateGet(this, _altTextTooltipTimeout));
+ __privateSet(this, _altTextTooltipTimeout, null);
+ }
+ __privateGet(this, _altTextButton).disabled = !enabled;
+ }
+ shown() {
+ __privateGet(this, _editor2)._reportTelemetry({
+ action: "pdfjs.image.alt_text.image_status_label_displayed",
+ data: {
+ label: __privateGet(this, _label, label_get)
+ }
+ });
+ }
+ destroy() {
+ var _a2, _b;
+ (_a2 = __privateGet(this, _altTextButton)) == null ? void 0 : _a2.remove();
+ __privateSet(this, _altTextButton, null);
+ __privateSet(this, _altTextTooltip, null);
+ (_b = __privateGet(this, _badge)) == null ? void 0 : _b.remove();
+ __privateSet(this, _badge, null);
+ }
+};
+var AltText = _AltText;
+_altText2 = new WeakMap();
+_altTextDecorative = new WeakMap();
+_altTextButton = new WeakMap();
+_altTextTooltip = new WeakMap();
+_altTextTooltipTimeout = new WeakMap();
+_altTextWasFromKeyBoard = new WeakMap();
+_badge = new WeakMap();
+_editor2 = new WeakMap();
+_guessedText = new WeakMap();
+_textWithDisclaimer = new WeakMap();
+_useNewAltTextFlow = new WeakMap();
+_label = new WeakSet();
+label_get = function() {
+ return __privateGet(this, _altText2) && "added" || __privateGet(this, _altText2) === null && this.guessedText && "review" || "missing";
+};
+_setState = new WeakSet();
+setState_fn = async function() {
+ var _a2, _b;
+ const button = __privateGet(this, _altTextButton);
+ if (!button) {
+ return;
+ }
+ if (__privateGet(this, _useNewAltTextFlow)) {
+ const label = __privateGet(this, _label, label_get);
+ const type = label === "review" ? "to-review" : label;
+ button.classList.toggle("done", !!__privateGet(this, _altText2));
+ _AltText._l10nPromise.get(`pdfjs-editor-new-alt-text-${type}-button-label`).then((msg) => {
+ button.setAttribute("aria-label", msg);
+ for (const child of button.childNodes) {
+ if (child.nodeType === Node.TEXT_NODE) {
+ child.textContent = msg;
+ break;
+ }
+ }
+ });
+ if (!__privateGet(this, _altText2)) {
+ (_a2 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a2.remove();
+ return;
+ }
+ } else {
+ if (!__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative)) {
+ button.classList.remove("done");
+ (_b = __privateGet(this, _altTextTooltip)) == null ? void 0 : _b.remove();
+ return;
+ }
+ button.classList.add("done");
+ _AltText._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then((msg) => {
+ button.setAttribute("aria-label", msg);
+ });
+ }
+ let tooltip = __privateGet(this, _altTextTooltip);
+ if (!tooltip) {
+ __privateSet(this, _altTextTooltip, tooltip = document.createElement("span"));
+ tooltip.className = "tooltip";
+ tooltip.setAttribute("role", "tooltip");
+ const id = tooltip.id = `alt-text-tooltip-${__privateGet(this, _editor2).id}`;
+ button.setAttribute("aria-describedby", id);
+ const DELAY_TO_SHOW_TOOLTIP = 100;
+ const signal = __privateGet(this, _editor2)._uiManager._signal;
+ signal.addEventListener("abort", () => {
+ clearTimeout(__privateGet(this, _altTextTooltipTimeout));
+ __privateSet(this, _altTextTooltipTimeout, null);
+ }, {
+ once: true
+ });
+ button.addEventListener("mouseenter", () => {
+ __privateSet(this, _altTextTooltipTimeout, setTimeout(() => {
+ __privateSet(this, _altTextTooltipTimeout, null);
+ __privateGet(this, _altTextTooltip).classList.add("show");
+ __privateGet(this, _editor2)._reportTelemetry({
+ action: "alt_text_tooltip"
+ });
+ }, DELAY_TO_SHOW_TOOLTIP));
+ }, {
+ signal
+ });
+ button.addEventListener("mouseleave", () => {
+ var _a3;
+ if (__privateGet(this, _altTextTooltipTimeout)) {
+ clearTimeout(__privateGet(this, _altTextTooltipTimeout));
+ __privateSet(this, _altTextTooltipTimeout, null);
+ }
+ (_a3 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a3.classList.remove("show");
+ }, {
+ signal
+ });
+ }
+ tooltip.innerText = __privateGet(this, _altTextDecorative) ? await _AltText._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : __privateGet(this, _altText2);
+ if (!tooltip.parentNode) {
+ button.append(tooltip);
+ }
+ const element2 = __privateGet(this, _editor2).getImageForAltText();
+ element2 == null ? void 0 : element2.setAttribute("aria-describedby", tooltip.id);
+};
+__publicField(AltText, "_l10nPromise", null);
+var _accessibilityData, _allResizerDivs, _altText3, _disabled, _keepAspectRatio, _resizersDiv, _savedDimensions, _focusAC, _focusedResizerName, _hasBeenClicked, _initialPosition, _isEditing, _isInEditMode, _isResizerEnabledForKeyboard, _moveInDOMTimeout, _prevDragX, _prevDragY, _telemetryTimeouts, _isDraggable, _zIndex, _translate, translate_fn, _rotatePoint, rotatePoint_fn, _getRotationMatrix, getRotationMatrix_fn, _createResizers, createResizers_fn, _resizerPointerdown, resizerPointerdown_fn, _addResizeToUndoStack, addResizeToUndoStack_fn, _resizerPointermove, resizerPointermove_fn, _selectOnPointerEvent, selectOnPointerEvent_fn, _setUpDragSession, setUpDragSession_fn, _addFocusListeners, addFocusListeners_fn, _resizerKeydown, resizerKeydown_fn, _resizerBlur, resizerBlur_fn, _resizerFocus, resizerFocus_fn, _setResizerTabIndex, setResizerTabIndex_fn, _stopResizing, stopResizing_fn;
+var _AnnotationEditor = class {
+ constructor(parameters) {
+ __privateAdd(this, _translate);
+ __privateAdd(this, _getRotationMatrix);
+ __privateAdd(this, _createResizers);
+ __privateAdd(this, _resizerPointerdown);
+ __privateAdd(this, _addResizeToUndoStack);
+ __privateAdd(this, _resizerPointermove);
+ __privateAdd(this, _selectOnPointerEvent);
+ __privateAdd(this, _setUpDragSession);
+ __privateAdd(this, _addFocusListeners);
+ __privateAdd(this, _resizerKeydown);
+ __privateAdd(this, _resizerBlur);
+ __privateAdd(this, _resizerFocus);
+ __privateAdd(this, _setResizerTabIndex);
+ __privateAdd(this, _stopResizing);
+ __privateAdd(this, _accessibilityData, null);
+ __privateAdd(this, _allResizerDivs, null);
+ __privateAdd(this, _altText3, null);
+ __privateAdd(this, _disabled, false);
+ __privateAdd(this, _keepAspectRatio, false);
+ __privateAdd(this, _resizersDiv, null);
+ __privateAdd(this, _savedDimensions, null);
+ __privateAdd(this, _focusAC, null);
+ __privateAdd(this, _focusedResizerName, "");
+ __privateAdd(this, _hasBeenClicked, false);
+ __privateAdd(this, _initialPosition, null);
+ __privateAdd(this, _isEditing, false);
+ __privateAdd(this, _isInEditMode, false);
+ __privateAdd(this, _isResizerEnabledForKeyboard, false);
+ __privateAdd(this, _moveInDOMTimeout, null);
+ __privateAdd(this, _prevDragX, 0);
+ __privateAdd(this, _prevDragY, 0);
+ __privateAdd(this, _telemetryTimeouts, null);
+ __publicField(this, "_editToolbar", null);
+ __publicField(this, "_initialOptions", /* @__PURE__ */ Object.create(null));
+ __publicField(this, "_isVisible", true);
+ __publicField(this, "_uiManager", null);
+ __publicField(this, "_focusEventsAllowed", true);
+ __privateAdd(this, _isDraggable, false);
+ __privateAdd(this, _zIndex, _AnnotationEditor._zIndex++);
+ 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;
+ }
+ 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]]));
+ }
+ get editorType() {
+ return Object.getPrototypeOf(this).constructor._type;
+ }
+ 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, _uiManager4, options) {
+ _AnnotationEditor._l10nResizer || (_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"
+ }));
+ _AnnotationEditor._l10nPromise || (_AnnotationEditor._l10nPromise = new Map([...["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-new-alt-text-added-button-label", "pdfjs-editor-new-alt-text-missing-button-label", "pdfjs-editor-new-alt-text-to-review-button-label"].map((str) => [str, l10n.get(str)]), ...["pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer"].map((str) => [str, l10n.get.bind(l10n, str)])]));
+ if (options == null ? void 0 : options.strings) {
+ for (const str of options.strings) {
+ _AnnotationEditor._l10nPromise.set(str, l10n.get(str));
+ }
+ }
+ if (_AnnotationEditor._borderLineWidth !== -1) {
+ return;
+ }
+ const style = getComputedStyle(document.documentElement);
+ _AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0;
+ }
+ static updateDefaultParams(_type2, _value) {
+ }
+ static get defaultPropertiesToUpdate() {
+ return [];
+ }
+ static isHandlingMimeForPasting(mime) {
+ return false;
+ }
+ static paste(item, parent) {
+ unreachable("Not implemented");
+ }
+ get propertiesToUpdate() {
+ return [];
+ }
+ get _isDraggable() {
+ return __privateGet(this, _isDraggable);
+ }
+ set _isDraggable(value) {
+ var _a2;
+ __privateSet(this, _isDraggable, value);
+ (_a2 = this.div) == null ? void 0 : _a2.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 = __privateGet(this, _zIndex);
+ }
+ setParent(parent) {
+ if (parent !== null) {
+ this.pageIndex = parent.pageIndex;
+ this.pageDimensions = parent.pageDimensions;
+ } else {
+ __privateMethod(this, _stopResizing, stopResizing_fn).call(this);
+ }
+ this.parent = parent;
+ }
+ focusin(event) {
+ if (!this._focusEventsAllowed) {
+ return;
+ }
+ if (!__privateGet(this, _hasBeenClicked)) {
+ this.parent.setSelected(this);
+ } else {
+ __privateSet(this, _hasBeenClicked, false);
+ }
+ }
+ focusout(event) {
+ var _a2;
+ if (!this._focusEventsAllowed) {
+ return;
+ }
+ if (!this.isAttachedToDOM) {
+ return;
+ }
+ const target = event.relatedTarget;
+ if (target == null ? void 0 : target.closest(`#${this.id}`)) {
+ return;
+ }
+ event.preventDefault();
+ if (!((_a2 = this.parent) == null ? void 0 : _a2.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();
+ }
+ translate(x, y) {
+ __privateMethod(this, _translate, translate_fn).call(this, this.parentDimensions, x, y);
+ }
+ translateInPage(x, y) {
+ __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]);
+ __privateMethod(this, _translate, translate_fn).call(this, this.pageDimensions, x, y);
+ this.div.scrollIntoView({
+ block: "nearest"
+ });
+ }
+ drag(tx, ty) {
+ __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]);
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ 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: x2,
+ y: y2
+ } = this.div.getBoundingClientRect();
+ if (this.parent.findNewParent(this, x2, y2)) {
+ 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;
+ this.div.style.left = `${(100 * x).toFixed(2)}%`;
+ this.div.style.top = `${(100 * y).toFixed(2)}%`;
+ this.div.scrollIntoView({
+ block: "nearest"
+ });
+ }
+ get _hasBeenMoved() {
+ return !!__privateGet(this, _initialPosition) && (__privateGet(this, _initialPosition)[0] !== this.x || __privateGet(this, _initialPosition)[1] !== this.y);
+ }
+ 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 [pageWidth, pageHeight] = this.pageDimensions;
+ let {
+ x,
+ y,
+ width,
+ height
+ } = this;
+ width *= pageWidth;
+ height *= pageHeight;
+ x *= pageWidth;
+ y *= pageHeight;
+ if (this._mustFixPosition) {
+ switch (rotation) {
+ case 0:
+ x = Math.max(0, Math.min(pageWidth - width, x));
+ y = Math.max(0, Math.min(pageHeight - height, y));
+ break;
+ case 90:
+ x = Math.max(0, Math.min(pageWidth - height, x));
+ y = Math.min(pageHeight, Math.max(width, y));
+ break;
+ case 180:
+ x = Math.min(pageWidth, Math.max(width, x));
+ y = Math.min(pageHeight, Math.max(height, y));
+ break;
+ case 270:
+ x = Math.min(pageWidth, Math.max(height, x));
+ y = Math.max(0, Math.min(pageHeight - width, y));
+ break;
+ }
+ }
+ this.x = x /= pageWidth;
+ this.y = y /= pageHeight;
+ const [bx, by] = this.getBaseTranslation();
+ x += bx;
+ y += by;
+ const {
+ style
+ } = this.div;
+ style.left = `${(100 * x).toFixed(2)}%`;
+ style.top = `${(100 * y).toFixed(2)}%`;
+ this.moveInDOM();
+ }
+ screenToPageTranslation(x, y) {
+ var _a2;
+ return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, this.parentRotation);
+ }
+ pageTranslationToScreen(x, y) {
+ var _a2;
+ return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, 360 - this.parentRotation);
+ }
+ get parentScale() {
+ return this._uiManager.viewParameters.realScale;
+ }
+ get parentRotation() {
+ return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;
+ }
+ get parentDimensions() {
+ const {
+ parentScale,
+ pageDimensions: [pageWidth, pageHeight]
+ } = this;
+ const scaledWidth = pageWidth * parentScale;
+ const scaledHeight = pageHeight * parentScale;
+ return util_FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight];
+ }
+ setDims(width, height) {
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`;
+ if (!__privateGet(this, _keepAspectRatio)) {
+ this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`;
+ }
+ }
+ fixDims() {
+ const {
+ style
+ } = this.div;
+ const {
+ height,
+ width
+ } = style;
+ const widthPercent = width.endsWith("%");
+ const heightPercent = !__privateGet(this, _keepAspectRatio) && height.endsWith("%");
+ if (widthPercent && heightPercent) {
+ return;
+ }
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ if (!widthPercent) {
+ style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`;
+ }
+ if (!__privateGet(this, _keepAspectRatio) && !heightPercent) {
+ style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`;
+ }
+ }
+ getInitialTranslation() {
+ return [0, 0];
+ }
+ altTextFinish() {
+ var _a2;
+ (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.finish();
+ }
+ async addEditToolbar() {
+ if (this._editToolbar || __privateGet(this, _isInEditMode)) {
+ return this._editToolbar;
+ }
+ this._editToolbar = new EditorToolbar(this);
+ this.div.append(this._editToolbar.render());
+ if (__privateGet(this, _altText3)) {
+ await this._editToolbar.addAltText(__privateGet(this, _altText3));
+ }
+ return this._editToolbar;
+ }
+ removeEditToolbar() {
+ var _a2;
+ if (!this._editToolbar) {
+ return;
+ }
+ this._editToolbar.remove();
+ this._editToolbar = null;
+ (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.destroy();
+ }
+ getClientDimensions() {
+ return this.div.getBoundingClientRect();
+ }
+ async addAltTextButton() {
+ if (__privateGet(this, _altText3)) {
+ return;
+ }
+ AltText.initialize(_AnnotationEditor._l10nPromise);
+ __privateSet(this, _altText3, new AltText(this));
+ if (__privateGet(this, _accessibilityData)) {
+ __privateGet(this, _altText3).data = __privateGet(this, _accessibilityData);
+ __privateSet(this, _accessibilityData, null);
+ }
+ await this.addEditToolbar();
+ }
+ get altTextData() {
+ var _a2;
+ return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.data;
+ }
+ set altTextData(data) {
+ if (!__privateGet(this, _altText3)) {
+ return;
+ }
+ __privateGet(this, _altText3).data = data;
+ }
+ get guessedAltText() {
+ var _a2;
+ return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.guessedText;
+ }
+ async setGuessedAltText(text2) {
+ var _a2;
+ await ((_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.setGuessedText(text2));
+ }
+ serializeAltText(isForCopying) {
+ var _a2;
+ return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.serialize(isForCopying);
+ }
+ hasAltText() {
+ return !!__privateGet(this, _altText3) && !__privateGet(this, _altText3).isEmpty();
+ }
+ hasAltTextData() {
+ var _a2, _b;
+ return (_b = (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.hasData()) != null ? _b : false;
+ }
+ render() {
+ this.div = document.createElement("div");
+ this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360);
+ this.div.className = this.name;
+ this.div.setAttribute("id", this.id);
+ this.div.tabIndex = __privateGet(this, _disabled) ? -1 : 0;
+ if (!this._isVisible) {
+ this.div.classList.add("hidden");
+ }
+ this.setInForeground();
+ __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this);
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ if (this.parentRotation % 180 !== 0) {
+ this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`;
+ this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`;
+ }
+ const [tx, ty] = this.getInitialTranslation();
+ this.translate(tx, ty);
+ bindEvents(this, this.div, ["pointerdown"]);
+ return this.div;
+ }
+ pointerdown(event) {
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ if (event.button !== 0 || event.ctrlKey && isMac) {
+ event.preventDefault();
+ return;
+ }
+ __privateSet(this, _hasBeenClicked, true);
+ if (this._isDraggable) {
+ __privateMethod(this, _setUpDragSession, setUpDragSession_fn).call(this, event);
+ return;
+ }
+ __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event);
+ }
+ moveInDOM() {
+ if (__privateGet(this, _moveInDOMTimeout)) {
+ clearTimeout(__privateGet(this, _moveInDOMTimeout));
+ }
+ __privateSet(this, _moveInDOMTimeout, setTimeout(() => {
+ var _a2;
+ __privateSet(this, _moveInDOMTimeout, null);
+ (_a2 = this.parent) == null ? void 0 : _a2.moveEditorInDOM(this);
+ }, 0));
+ }
+ _setParentAndPosition(parent, x, y) {
+ parent.changeParent(this);
+ this.x = x;
+ this.y = y;
+ this.fixAndSetPosition();
+ }
+ 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() {
+ }
+ isEmpty() {
+ return false;
+ }
+ enableEditMode() {
+ __privateSet(this, _isInEditMode, true);
+ }
+ disableEditMode() {
+ __privateSet(this, _isInEditMode, false);
+ }
+ isInEditMode() {
+ return __privateGet(this, _isInEditMode);
+ }
+ shouldGetKeyboardEvents() {
+ return __privateGet(this, _isResizerEnabledForKeyboard);
+ }
+ needsToBeRebuilt() {
+ return this.div && !this.isAttachedToDOM;
+ }
+ rebuild() {
+ __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this);
+ }
+ rotate(_angle) {
+ }
+ serialize(isForCopying = false, context = null) {
+ unreachable("An editor must be serializable");
+ }
+ static deserialize(data, parent, uiManager) {
+ const editor = new this.prototype.constructor({
+ parent,
+ id: parent.getNextId(),
+ uiManager
+ });
+ editor.rotation = data.rotation;
+ __privateSet(editor, _accessibilityData, data.accessibilityData);
+ 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() {
+ var _a2;
+ (_a2 = __privateGet(this, _focusAC)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _focusAC, null);
+ if (!this.isEmpty()) {
+ this.commit();
+ }
+ if (this.parent) {
+ this.parent.remove(this);
+ } else {
+ this._uiManager.removeEditor(this);
+ }
+ if (__privateGet(this, _moveInDOMTimeout)) {
+ clearTimeout(__privateGet(this, _moveInDOMTimeout));
+ __privateSet(this, _moveInDOMTimeout, null);
+ }
+ __privateMethod(this, _stopResizing, stopResizing_fn).call(this);
+ this.removeEditToolbar();
+ if (__privateGet(this, _telemetryTimeouts)) {
+ for (const timeout of __privateGet(this, _telemetryTimeouts).values()) {
+ clearTimeout(timeout);
+ }
+ __privateSet(this, _telemetryTimeouts, null);
+ }
+ this.parent = null;
+ }
+ get isResizable() {
+ return false;
+ }
+ makeResizable() {
+ if (this.isResizable) {
+ __privateMethod(this, _createResizers, createResizers_fn).call(this);
+ __privateGet(this, _resizersDiv).classList.remove("hidden");
+ bindEvents(this, this.div, ["keydown"]);
+ }
+ }
+ get toolbarPosition() {
+ return null;
+ }
+ keydown(event) {
+ if (!this.isResizable || event.target !== this.div || event.key !== "Enter") {
+ return;
+ }
+ this._uiManager.setSelected(this);
+ __privateSet(this, _savedDimensions, {
+ savedX: this.x,
+ savedY: this.y,
+ savedWidth: this.width,
+ savedHeight: this.height
+ });
+ const children2 = __privateGet(this, _resizersDiv).children;
+ if (!__privateGet(this, _allResizerDivs)) {
+ __privateSet(this, _allResizerDivs, Array.from(children2));
+ const boundResizerKeydown = __privateMethod(this, _resizerKeydown, resizerKeydown_fn).bind(this);
+ const boundResizerBlur = __privateMethod(this, _resizerBlur, resizerBlur_fn).bind(this);
+ const signal = this._uiManager._signal;
+ for (const div of __privateGet(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", __privateMethod(this, _resizerFocus, resizerFocus_fn).bind(this, name), {
+ signal
+ });
+ div.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]);
+ }
+ }
+ const first = __privateGet(this, _allResizerDivs)[0];
+ let firstPosition = 0;
+ for (const div of children2) {
+ if (div === first) {
+ break;
+ }
+ firstPosition++;
+ }
+ const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (__privateGet(this, _allResizerDivs).length / 4);
+ if (nextFirstPosition !== firstPosition) {
+ if (nextFirstPosition < firstPosition) {
+ for (let i2 = 0; i2 < firstPosition - nextFirstPosition; i2++) {
+ __privateGet(this, _resizersDiv).append(__privateGet(this, _resizersDiv).firstChild);
+ }
+ } else if (nextFirstPosition > firstPosition) {
+ for (let i2 = 0; i2 < nextFirstPosition - firstPosition; i2++) {
+ __privateGet(this, _resizersDiv).firstChild.before(__privateGet(this, _resizersDiv).lastChild);
+ }
+ }
+ let i = 0;
+ for (const child of children2) {
+ const div = __privateGet(this, _allResizerDivs)[i++];
+ const name = div.getAttribute("data-resizer-name");
+ child.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]);
+ }
+ }
+ __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, 0);
+ __privateSet(this, _isResizerEnabledForKeyboard, true);
+ __privateGet(this, _resizersDiv).firstChild.focus({
+ focusVisible: true
+ });
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ _resizeWithKeyboard(x, y) {
+ if (!__privateGet(this, _isResizerEnabledForKeyboard)) {
+ return;
+ }
+ __privateMethod(this, _resizerPointermove, resizerPointermove_fn).call(this, __privateGet(this, _focusedResizerName), {
+ movementX: x,
+ movementY: y
+ });
+ }
+ _stopResizingWithKeyboard() {
+ __privateMethod(this, _stopResizing, stopResizing_fn).call(this);
+ this.div.focus();
+ }
+ select() {
+ var _a2, _b, _c;
+ this.makeResizable();
+ (_a2 = this.div) == null ? void 0 : _a2.classList.add("selectedEditor");
+ if (!this._editToolbar) {
+ this.addEditToolbar().then(() => {
+ var _a3, _b2;
+ if ((_a3 = this.div) == null ? void 0 : _a3.classList.contains("selectedEditor")) {
+ (_b2 = this._editToolbar) == null ? void 0 : _b2.show();
+ }
+ });
+ return;
+ }
+ (_b = this._editToolbar) == null ? void 0 : _b.show();
+ (_c = __privateGet(this, _altText3)) == null ? void 0 : _c.toggleAltTextBadge(false);
+ }
+ unselect() {
+ var _a2, _b, _c, _d, _e;
+ (_a2 = __privateGet(this, _resizersDiv)) == null ? void 0 : _a2.classList.add("hidden");
+ (_b = this.div) == null ? void 0 : _b.classList.remove("selectedEditor");
+ if ((_c = this.div) == null ? void 0 : _c.contains(document.activeElement)) {
+ this._uiManager.currentLayer.div.focus({
+ preventScroll: true
+ });
+ }
+ (_d = this._editToolbar) == null ? void 0 : _d.hide();
+ (_e = __privateGet(this, _altText3)) == null ? void 0 : _e.toggleAltTextBadge(true);
+ }
+ updateParams(type, value) {
+ }
+ disableEditing() {
+ }
+ enableEditing() {
+ }
+ enterInEditMode() {
+ }
+ getImageForAltText() {
+ return null;
+ }
+ get contentDiv() {
+ return this.div;
+ }
+ get isEditing() {
+ return __privateGet(this, _isEditing);
+ }
+ set isEditing(value) {
+ __privateSet(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) {
+ __privateSet(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) {
+ __privateGet(this, _telemetryTimeouts) || __privateSet(this, _telemetryTimeouts, /* @__PURE__ */ new Map());
+ const {
+ action
+ } = data;
+ let timeout = __privateGet(this, _telemetryTimeouts).get(action);
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+ timeout = setTimeout(() => {
+ this._reportTelemetry(data);
+ __privateGet(this, _telemetryTimeouts).delete(action);
+ if (__privateGet(this, _telemetryTimeouts).size === 0) {
+ __privateSet(this, _telemetryTimeouts, null);
+ }
+ }, _AnnotationEditor._telemetryTimeout);
+ __privateGet(this, _telemetryTimeouts).set(action, timeout);
+ return;
+ }
+ data.type || (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;
+ }
+ __privateSet(this, _disabled, false);
+ }
+ disable() {
+ if (this.div) {
+ this.div.tabIndex = -1;
+ }
+ __privateSet(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();
+ }
+ }
+};
+var AnnotationEditor = _AnnotationEditor;
+_accessibilityData = new WeakMap();
+_allResizerDivs = new WeakMap();
+_altText3 = new WeakMap();
+_disabled = new WeakMap();
+_keepAspectRatio = new WeakMap();
+_resizersDiv = new WeakMap();
+_savedDimensions = new WeakMap();
+_focusAC = new WeakMap();
+_focusedResizerName = new WeakMap();
+_hasBeenClicked = new WeakMap();
+_initialPosition = new WeakMap();
+_isEditing = new WeakMap();
+_isInEditMode = new WeakMap();
+_isResizerEnabledForKeyboard = new WeakMap();
+_moveInDOMTimeout = new WeakMap();
+_prevDragX = new WeakMap();
+_prevDragY = new WeakMap();
+_telemetryTimeouts = new WeakMap();
+_isDraggable = new WeakMap();
+_zIndex = new WeakMap();
+_translate = new WeakSet();
+translate_fn = function([width, height], x, y) {
+ [x, y] = this.screenToPageTranslation(x, y);
+ this.x += x / width;
+ this.y += y / height;
+ this.fixAndSetPosition();
+};
+_rotatePoint = new WeakSet();
+rotatePoint_fn = function(x, y, angle) {
+ switch (angle) {
+ case 90:
+ return [y, -x];
+ case 180:
+ return [-x, -y];
+ case 270:
+ return [-y, x];
+ default:
+ return [x, y];
+ }
+};
+_getRotationMatrix = new WeakSet();
+getRotationMatrix_fn = function(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];
+ }
+};
+_createResizers = new WeakSet();
+createResizers_fn = function() {
+ if (__privateGet(this, _resizersDiv)) {
+ return;
+ }
+ __privateSet(this, _resizersDiv, document.createElement("div"));
+ __privateGet(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");
+ __privateGet(this, _resizersDiv).append(div);
+ div.classList.add("resizer", name);
+ div.setAttribute("data-resizer-name", name);
+ div.addEventListener("pointerdown", __privateMethod(this, _resizerPointerdown, resizerPointerdown_fn).bind(this, name), {
+ signal
+ });
+ div.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+ div.tabIndex = -1;
+ }
+ this.div.prepend(__privateGet(this, _resizersDiv));
+};
+_resizerPointerdown = new WeakSet();
+resizerPointerdown_fn = function(name, event) {
+ var _a2;
+ event.preventDefault();
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ if (event.button !== 0 || event.ctrlKey && isMac) {
+ return;
+ }
+ (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.toggle(false);
+ const savedDraggable = this._isDraggable;
+ this._isDraggable = false;
+ const ac = new AbortController();
+ const signal = this._uiManager.combinedSignal(ac);
+ this.parent.togglePointerEvents(false);
+ window.addEventListener("pointermove", __privateMethod(this, _resizerPointermove, resizerPointermove_fn).bind(this, name), {
+ passive: true,
+ capture: true,
+ signal
+ });
+ window.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+ const savedX = this.x;
+ const savedY = this.y;
+ const savedWidth = this.width;
+ const 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 = () => {
+ var _a3;
+ ac.abort();
+ this.parent.togglePointerEvents(true);
+ (_a3 = __privateGet(this, _altText3)) == null ? void 0 : _a3.toggle(true);
+ this._isDraggable = savedDraggable;
+ this.parent.div.style.cursor = savedParentCursor;
+ this.div.style.cursor = savedCursor;
+ __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight);
+ };
+ window.addEventListener("pointerup", pointerUpCallback, {
+ signal
+ });
+ window.addEventListener("blur", pointerUpCallback, {
+ signal
+ });
+};
+_addResizeToUndoStack = new WeakSet();
+addResizeToUndoStack_fn = function(savedX, savedY, savedWidth, savedHeight) {
+ 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.width = newWidth;
+ this.height = newHeight;
+ this.x = newX;
+ this.y = newY;
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.setDims(parentWidth * newWidth, parentHeight * newHeight);
+ this.fixAndSetPosition();
+ },
+ undo: () => {
+ this.width = savedWidth;
+ this.height = savedHeight;
+ this.x = savedX;
+ this.y = savedY;
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.setDims(parentWidth * savedWidth, parentHeight * savedHeight);
+ this.fixAndSetPosition();
+ },
+ mustExec: true
+ });
+};
+_resizerPointermove = new WeakSet();
+resizerPointermove_fn = function(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 round = (x) => Math.round(x * 1e4) / 1e4;
+ const rotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, this.rotation);
+ const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y];
+ const invRotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, 360 - this.rotation);
+ const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y];
+ let getPoint;
+ let getOpposite;
+ let isDiagonal = false;
+ let isHorizontal = false;
+ switch (name) {
+ case "topLeft":
+ isDiagonal = true;
+ getPoint = (w, h) => [0, 0];
+ getOpposite = (w, h) => [w, h];
+ break;
+ case "topMiddle":
+ getPoint = (w, h) => [w / 2, 0];
+ getOpposite = (w, h) => [w / 2, h];
+ break;
+ case "topRight":
+ isDiagonal = true;
+ getPoint = (w, h) => [w, 0];
+ getOpposite = (w, h) => [0, h];
+ break;
+ case "middleRight":
+ isHorizontal = true;
+ getPoint = (w, h) => [w, h / 2];
+ getOpposite = (w, h) => [0, h / 2];
+ break;
+ case "bottomRight":
+ isDiagonal = true;
+ getPoint = (w, h) => [w, h];
+ getOpposite = (w, h) => [0, 0];
+ break;
+ case "bottomMiddle":
+ getPoint = (w, h) => [w / 2, h];
+ getOpposite = (w, h) => [w / 2, 0];
+ break;
+ case "bottomLeft":
+ isDiagonal = true;
+ getPoint = (w, h) => [0, h];
+ getOpposite = (w, h) => [w, 0];
+ break;
+ case "middleLeft":
+ isHorizontal = true;
+ getPoint = (w, h) => [0, h / 2];
+ getOpposite = (w, h) => [w, h / 2];
+ break;
+ }
+ const point = getPoint(savedWidth, savedHeight);
+ const oppositePoint = getOpposite(savedWidth, savedHeight);
+ let transfOppositePoint = transf(...oppositePoint);
+ const oppositeX = round(savedX + transfOppositePoint[0]);
+ const oppositeY = round(savedY + transfOppositePoint[1]);
+ let ratioX = 1;
+ let ratioY = 1;
+ let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY);
+ [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 = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth;
+ } else {
+ ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight;
+ }
+ const newWidth = round(savedWidth * ratioX);
+ const newHeight = round(savedHeight * ratioY);
+ transfOppositePoint = transf(...getOpposite(newWidth, newHeight));
+ const newX = oppositeX - transfOppositePoint[0];
+ const newY = oppositeY - transfOppositePoint[1];
+ this.width = newWidth;
+ this.height = newHeight;
+ this.x = newX;
+ this.y = newY;
+ this.setDims(parentWidth * newWidth, parentHeight * newHeight);
+ this.fixAndSetPosition();
+};
+_selectOnPointerEvent = new WeakSet();
+selectOnPointerEvent_fn = function(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 = new WeakSet();
+setUpDragSession_fn = function(event) {
+ const isSelected = this._uiManager.isSelected(this);
+ this._uiManager.setUpDragSession();
+ const ac = new AbortController();
+ const signal = this._uiManager.combinedSignal(ac);
+ if (isSelected) {
+ this.div.classList.add("moving");
+ __privateSet(this, _prevDragX, event.clientX);
+ __privateSet(this, _prevDragY, event.clientY);
+ const pointerMoveCallback = (e) => {
+ const {
+ clientX: x,
+ clientY: y
+ } = e;
+ const [tx, ty] = this.screenToPageTranslation(x - __privateGet(this, _prevDragX), y - __privateGet(this, _prevDragY));
+ __privateSet(this, _prevDragX, x);
+ __privateSet(this, _prevDragY, y);
+ this._uiManager.dragSelectedEditors(tx, ty);
+ };
+ window.addEventListener("pointermove", pointerMoveCallback, {
+ passive: true,
+ capture: true,
+ signal
+ });
+ }
+ const pointerUpCallback = () => {
+ ac.abort();
+ if (isSelected) {
+ this.div.classList.remove("moving");
+ }
+ __privateSet(this, _hasBeenClicked, false);
+ if (!this._uiManager.endDragSession()) {
+ __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event);
+ }
+ };
+ window.addEventListener("pointerup", pointerUpCallback, {
+ signal
+ });
+ window.addEventListener("blur", pointerUpCallback, {
+ signal
+ });
+};
+_addFocusListeners = new WeakSet();
+addFocusListeners_fn = function() {
+ if (__privateGet(this, _focusAC) || !this.div) {
+ return;
+ }
+ __privateSet(this, _focusAC, new AbortController());
+ const signal = this._uiManager.combinedSignal(__privateGet(this, _focusAC));
+ this.div.addEventListener("focusin", this.focusin.bind(this), {
+ signal
+ });
+ this.div.addEventListener("focusout", this.focusout.bind(this), {
+ signal
+ });
+};
+_resizerKeydown = new WeakSet();
+resizerKeydown_fn = function(event) {
+ _AnnotationEditor._resizerKeyboardManager.exec(this, event);
+};
+_resizerBlur = new WeakSet();
+resizerBlur_fn = function(event) {
+ var _a2;
+ if (__privateGet(this, _isResizerEnabledForKeyboard) && ((_a2 = event.relatedTarget) == null ? void 0 : _a2.parentNode) !== __privateGet(this, _resizersDiv)) {
+ __privateMethod(this, _stopResizing, stopResizing_fn).call(this);
+ }
+};
+_resizerFocus = new WeakSet();
+resizerFocus_fn = function(name) {
+ __privateSet(this, _focusedResizerName, __privateGet(this, _isResizerEnabledForKeyboard) ? name : "");
+};
+_setResizerTabIndex = new WeakSet();
+setResizerTabIndex_fn = function(value) {
+ if (!__privateGet(this, _allResizerDivs)) {
+ return;
+ }
+ for (const div of __privateGet(this, _allResizerDivs)) {
+ div.tabIndex = value;
+ }
+};
+_stopResizing = new WeakSet();
+stopResizing_fn = function() {
+ __privateSet(this, _isResizerEnabledForKeyboard, false);
+ __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, -1);
+ if (__privateGet(this, _savedDimensions)) {
+ const {
+ savedX,
+ savedY,
+ savedWidth,
+ savedHeight
+ } = __privateGet(this, _savedDimensions);
+ __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight);
+ __privateSet(this, _savedDimensions, null);
+ }
+};
+__privateAdd(AnnotationEditor, _rotatePoint);
+__publicField(AnnotationEditor, "_l10nPromise", null);
+__publicField(AnnotationEditor, "_l10nResizer", null);
+__publicField(AnnotationEditor, "_borderLineWidth", -1);
+__publicField(AnnotationEditor, "_colorManager", new ColorManager());
+__publicField(AnnotationEditor, "_zIndex", 1);
+__publicField(AnnotationEditor, "_telemetryTimeout", 1e3);
+var FakeEditor = class extends AnnotationEditor {
+ constructor(params) {
+ super(params);
+ this.annotationElementId = params.annotationElementId;
+ this.deleted = true;
+ }
+ serialize() {
+ return {
+ id: this.annotationElementId,
+ deleted: true,
+ pageIndex: this.pageIndex
+ };
+ }
+};
+var SEED = 3285377520;
+var MASK_HIGH = 4294901760;
+var MASK_LOW = 65535;
+var MurmurHash3_64 = class {
+ constructor(seed) {
+ this.h1 = seed ? seed & 4294967295 : SEED;
+ this.h2 = seed ? seed & 4294967295 : 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 <= 255) {
+ data[length++] = code;
+ } else {
+ data[length++] = code >>> 8;
+ data[length++] = code & 255;
+ }
+ }
+ } 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 = 3432918353, C2 = 461845907;
+ 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 + 3864292196;
+ } 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 + 3864292196;
+ }
+ }
+ 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 * 3981806797 & MASK_HIGH | h1 * 36045 & MASK_LOW;
+ h2 = h2 * 4283543511 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 2950163797 & MASK_HIGH) >>> 16;
+ h1 ^= h2 >>> 1;
+ h1 = h1 * 444984403 & MASK_HIGH | h1 * 60499 & MASK_LOW;
+ h2 = h2 * 3301882366 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 3120437893 & MASK_HIGH) >>> 16;
+ h1 ^= h2 >>> 1;
+ return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0");
+ }
+};
+var SerializableEmpty = Object.freeze({
+ map: null,
+ hash: "",
+ transfer: void 0
+});
+var _modified, _modifiedIds, _storage, _setModified, setModified_fn;
+var AnnotationStorage = class {
+ constructor() {
+ __privateAdd(this, _setModified);
+ __privateAdd(this, _modified, false);
+ __privateAdd(this, _modifiedIds, null);
+ __privateAdd(this, _storage, /* @__PURE__ */ new Map());
+ this.onSetModified = null;
+ this.onResetModified = null;
+ this.onAnnotationEditor = null;
+ }
+ getValue(key, defaultValue) {
+ const value = __privateGet(this, _storage).get(key);
+ if (value === void 0) {
+ return defaultValue;
+ }
+ return Object.assign(defaultValue, value);
+ }
+ getRawValue(key) {
+ return __privateGet(this, _storage).get(key);
+ }
+ remove(key) {
+ __privateGet(this, _storage).delete(key);
+ if (__privateGet(this, _storage).size === 0) {
+ this.resetModified();
+ }
+ if (typeof this.onAnnotationEditor === "function") {
+ for (const value of __privateGet(this, _storage).values()) {
+ if (value instanceof AnnotationEditor) {
+ return;
+ }
+ }
+ this.onAnnotationEditor(null);
+ }
+ }
+ setValue(key, value) {
+ const obj = __privateGet(this, _storage).get(key);
+ let modified = false;
+ if (obj !== void 0) {
+ for (const [entry, val] of Object.entries(value)) {
+ if (obj[entry] !== val) {
+ modified = true;
+ obj[entry] = val;
+ }
+ }
+ } else {
+ modified = true;
+ __privateGet(this, _storage).set(key, value);
+ }
+ if (modified) {
+ __privateMethod(this, _setModified, setModified_fn).call(this);
+ }
+ if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") {
+ this.onAnnotationEditor(value.constructor._type);
+ }
+ }
+ has(key) {
+ return __privateGet(this, _storage).has(key);
+ }
+ getAll() {
+ return __privateGet(this, _storage).size > 0 ? objectFromMap(__privateGet(this, _storage)) : null;
+ }
+ setAll(obj) {
+ for (const [key, val] of Object.entries(obj)) {
+ this.setValue(key, val);
+ }
+ }
+ get size() {
+ return __privateGet(this, _storage).size;
+ }
+ resetModified() {
+ if (__privateGet(this, _modified)) {
+ __privateSet(this, _modified, false);
+ if (typeof this.onResetModified === "function") {
+ this.onResetModified();
+ }
+ }
+ }
+ get print() {
+ return new PrintAnnotationStorage(this);
+ }
+ get serializable() {
+ if (__privateGet(this, _storage).size === 0) {
+ return SerializableEmpty;
+ }
+ const map = /* @__PURE__ */ new Map(), hash = new MurmurHash3_64(), transfer = [];
+ const context = /* @__PURE__ */ Object.create(null);
+ let hasBitmap = false;
+ for (const [key, val] of __privateGet(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 || (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() {
+ var _a2;
+ let stats = null;
+ const typeToEditor = /* @__PURE__ */ new Map();
+ for (const value of __privateGet(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 || (stats = /* @__PURE__ */ Object.create(null));
+ const map = stats[type] || (stats[type] = /* @__PURE__ */ new Map());
+ for (const [key, val] of Object.entries(editorStats)) {
+ if (key === "type") {
+ continue;
+ }
+ let counters = map.get(key);
+ if (!counters) {
+ counters = /* @__PURE__ */ new Map();
+ map.set(key, counters);
+ }
+ const count = (_a2 = counters.get(val)) != null ? _a2 : 0;
+ counters.set(val, count + 1);
+ }
+ }
+ for (const [type, editor] of typeToEditor) {
+ stats[type] = editor.computeTelemetryFinalData(stats[type]);
+ }
+ return stats;
+ }
+ resetModifiedIds() {
+ __privateSet(this, _modifiedIds, null);
+ }
+ get modifiedIds() {
+ if (__privateGet(this, _modifiedIds)) {
+ return __privateGet(this, _modifiedIds);
+ }
+ const ids = [];
+ for (const value of __privateGet(this, _storage).values()) {
+ if (!(value instanceof AnnotationEditor) || !value.annotationElementId || !value.serialize()) {
+ continue;
+ }
+ ids.push(value.annotationElementId);
+ }
+ return __privateSet(this, _modifiedIds, {
+ ids: new Set(ids),
+ hash: ids.join(",")
+ });
+ }
+};
+_modified = new WeakMap();
+_modifiedIds = new WeakMap();
+_storage = new WeakMap();
+_setModified = new WeakSet();
+setModified_fn = function() {
+ if (!__privateGet(this, _modified)) {
+ __privateSet(this, _modified, true);
+ if (typeof this.onSetModified === "function") {
+ this.onSetModified();
+ }
+ }
+};
+var _serializable;
+var PrintAnnotationStorage = class extends AnnotationStorage {
+ constructor(parent) {
+ super();
+ __privateAdd(this, _serializable, void 0);
+ const {
+ map,
+ hash,
+ transfer
+ } = parent.serializable;
+ const clone2 = structuredClone(map, transfer ? {
+ transfer
+ } : null);
+ __privateSet(this, _serializable, {
+ map: clone2,
+ hash,
+ transfer
+ });
+ }
+ get print() {
+ unreachable("Should not call PrintAnnotationStorage.print");
+ }
+ get serializable() {
+ return __privateGet(this, _serializable);
+ }
+ get modifiedIds() {
+ return shadow(this, "modifiedIds", {
+ ids: /* @__PURE__ */ new Set(),
+ hash: ""
+ });
+ }
+};
+_serializable = new WeakMap();
+var _systemFonts;
+var FontLoader = class {
+ constructor({
+ ownerDocument = globalThis.document,
+ styleElement = null
+ }) {
+ __privateAdd(this, _systemFonts, /* @__PURE__ */ new Set());
+ this._document = ownerDocument;
+ this.nativeFontFaces = /* @__PURE__ */ 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();
+ __privateGet(this, _systemFonts).clear();
+ if (this.styleElement) {
+ this.styleElement.remove();
+ this.styleElement = null;
+ }
+ }
+ async loadSystemFont({
+ systemFontInfo: info2,
+ _inspectFont
+ }) {
+ if (!info2 || __privateGet(this, _systemFonts).has(info2.loadedName)) {
+ return;
+ }
+ assert(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set.");
+ if (this.isFontLoadingAPISupported) {
+ const {
+ loadedName,
+ src,
+ style
+ } = info2;
+ const fontFace = new FontFace(loadedName, src, style);
+ this.addNativeFontFace(fontFace);
+ try {
+ await fontFace.load();
+ __privateGet(this, _systemFonts).add(loadedName);
+ _inspectFont == null ? void 0 : _inspectFont(info2);
+ } catch (e) {
+ warn(`Cannot load system font: ${info2.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() {
+ var _a2;
+ const hasFonts = !!((_a2 = this._document) == null ? void 0 : _a2.fonts);
+ return shadow(this, "isFontLoadingAPISupported", hasFonts);
+ }
+ get isSyncFontLoadingSupported() {
+ let supported = false;
+ if (isNodeJS) {
+ supported = true;
+ } else if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.userAgent) === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) {
+ supported = true;
+ }
+ return shadow(this, "isSyncFontLoadingSupported", supported);
+ }
+ _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("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
+ return shadow(this, "_loadTestFont", testFont);
+ }
+ _prepareFontLoadEvent(font, request) {
+ function int32(data2, offset) {
+ return data2.charCodeAt(offset) << 24 | data2.charCodeAt(offset + 1) << 16 | data2.charCodeAt(offset + 2) << 8 | data2.charCodeAt(offset + 3) & 255;
+ }
+ function spliceString(s, offset, remove, insert2) {
+ const chunk1 = s.substring(0, offset);
+ const chunk2 = s.substring(offset + remove);
+ return chunk1 + insert2 + 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 = 1482184792;
+ 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();
+ });
+ }
+};
+_systemFonts = new WeakMap();
+var FontFaceObject = class {
+ constructor(translatedData, {
+ disableFontFace = false,
+ inspectFont = null
+ }) {
+ this.compiledGlyphs = /* @__PURE__ */ Object.create(null);
+ for (const i in translatedData) {
+ this[i] = translatedData[i];
+ }
+ this.disableFontFace = disableFontFace === true;
+ this._inspectFont = inspectFont;
+ }
+ createNativeFontFace() {
+ var _a2;
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+ let nativeFontFace;
+ if (!this.cssFontInfo) {
+ nativeFontFace = new FontFace(this.loadedName, this.data, {});
+ } else {
+ const css2 = {
+ weight: this.cssFontInfo.fontWeight
+ };
+ if (this.cssFontInfo.italicAngle) {
+ css2.style = `oblique ${this.cssFontInfo.italicAngle}deg`;
+ }
+ nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css2);
+ }
+ (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this);
+ return nativeFontFace;
+ }
+ createFontFaceRule() {
+ var _a2;
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+ const data = bytesToString(this.data);
+ const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
+ let rule;
+ if (!this.cssFontInfo) {
+ rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
+ } else {
+ let css2 = `font-weight: ${this.cssFontInfo.fontWeight};`;
+ if (this.cssFontInfo.italicAngle) {
+ css2 += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;
+ }
+ rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css2}src:${url}}`;
+ }
+ (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this, url);
+ return rule;
+ }
+ getPathGenerator(objs, character) {
+ if (this.compiledGlyphs[character] !== void 0) {
+ return this.compiledGlyphs[character];
+ }
+ let cmds;
+ try {
+ cmds = objs.get(this.loadedName + "_path_" + character);
+ } catch (ex) {
+ warn(`getPathGenerator - ignoring character: "${ex}".`);
+ }
+ if (!Array.isArray(cmds) || cmds.length === 0) {
+ return this.compiledGlyphs[character] = function(c, size) {
+ };
+ }
+ const commands = [];
+ for (let i = 0, ii = cmds.length; i < ii; ) {
+ switch (cmds[i++]) {
+ case FontRenderOps.BEZIER_CURVE_TO:
+ {
+ const [a, b, c, d, e, f] = cmds.slice(i, i + 6);
+ commands.push((ctx) => ctx.bezierCurveTo(a, b, c, d, e, f));
+ i += 6;
+ }
+ break;
+ case FontRenderOps.MOVE_TO:
+ {
+ const [a, b] = cmds.slice(i, i + 2);
+ commands.push((ctx) => ctx.moveTo(a, b));
+ i += 2;
+ }
+ break;
+ case FontRenderOps.LINE_TO:
+ {
+ const [a, b] = cmds.slice(i, i + 2);
+ commands.push((ctx) => ctx.lineTo(a, b));
+ i += 2;
+ }
+ break;
+ case FontRenderOps.QUADRATIC_CURVE_TO:
+ {
+ const [a, b, c, d] = cmds.slice(i, i + 4);
+ commands.push((ctx) => ctx.quadraticCurveTo(a, b, c, d));
+ i += 4;
+ }
+ break;
+ case FontRenderOps.RESTORE:
+ commands.push((ctx) => ctx.restore());
+ break;
+ case FontRenderOps.SAVE:
+ commands.push((ctx) => ctx.save());
+ break;
+ case FontRenderOps.SCALE:
+ assert(commands.length === 2, "Scale command is only valid at the third position.");
+ break;
+ case FontRenderOps.TRANSFORM:
+ {
+ const [a, b, c, d, e, f] = cmds.slice(i, i + 6);
+ commands.push((ctx) => ctx.transform(a, b, c, d, e, f));
+ i += 6;
+ }
+ break;
+ case FontRenderOps.TRANSLATE:
+ {
+ const [a, b] = cmds.slice(i, i + 2);
+ commands.push((ctx) => ctx.translate(a, b));
+ i += 2;
+ }
+ break;
+ }
+ }
+ return this.compiledGlyphs[character] = function glyphDrawer(ctx, size) {
+ commands[0](ctx);
+ commands[1](ctx);
+ ctx.scale(size, -size);
+ for (let i = 2, ii = commands.length; i < ii; i++) {
+ commands[i](ctx);
+ }
+ };
+ }
+};
+if (isNodeJS) {
+ packageCapability = Promise.withResolvers();
+ packageMap = null;
+ const loadPackages = async () => {
+ const fs = await import(
+ /*webpackIgnore: true*/
+ "fs"
+ ), http = await import(
+ /*webpackIgnore: true*/
+ "http"
+ ), https = await import(
+ /*webpackIgnore: true*/
+ "https"
+ ), url = await import(
+ /*webpackIgnore: true*/
+ "url"
+ );
+ let canvas, path2d;
+ return new Map(Object.entries({
+ fs,
+ http,
+ https,
+ url,
+ canvas,
+ path2d
+ }));
+ };
+ loadPackages().then((map) => {
+ packageMap = map;
+ packageCapability.resolve();
+ }, (reason) => {
+ warn(`loadPackages: ${reason}`);
+ packageMap = /* @__PURE__ */ new Map();
+ packageCapability.resolve();
+ });
+}
+var packageCapability;
+var packageMap;
+var NodePackages = class {
+ static get promise() {
+ return packageCapability.promise;
+ }
+ static get(name) {
+ return packageMap == null ? void 0 : packageMap.get(name);
+ }
+};
+var node_utils_fetchData = function(url) {
+ const fs = NodePackages.get("fs");
+ return fs.promises.readFile(url).then((data) => new Uint8Array(data));
+};
+var NodeFilterFactory = class extends BaseFilterFactory {
+};
+var NodeCanvasFactory = class extends BaseCanvasFactory {
+ _createCanvas(width, height) {
+ const canvas = NodePackages.get("canvas");
+ return canvas.createCanvas(width, height);
+ }
+};
+var NodeCMapReaderFactory = class extends BaseCMapReaderFactory {
+ _fetchData(url, compressionType) {
+ return node_utils_fetchData(url).then((data) => ({
+ cMapData: data,
+ compressionType
+ }));
+ }
+};
+var NodeStandardFontDataFactory = class extends BaseStandardFontDataFactory {
+ _fetchData(url) {
+ return node_utils_fetchData(url);
+ }
+};
+var 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);
+}
+var BaseShadingPattern = class {
+ getPattern() {
+ unreachable("Abstract method `getPattern` called.");
+ }
+};
+var RadialAxialShadingPattern = class 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, true);
+ 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 k2 = y < y1 ? 0 : (y1 - y) / (y1 - y2);
+ xa = x1 - (x1 - x2) * k2;
+ car = c1r - (c1r - c2r) * k2;
+ cag = c1g - (c1g - c2g) * k2;
+ cab = c1b - (c1b - c2b) * k2;
+ } else {
+ let k2;
+ if (y > y3) {
+ k2 = 1;
+ } else if (y2 === y3) {
+ k2 = 0;
+ } else {
+ k2 = (y2 - y) / (y2 - y3);
+ }
+ xa = x2 - (x2 - x3) * k2;
+ car = c2r - (c2r - c3r) * k2;
+ cag = c2g - (c2g - c3g) * k2;
+ cab = c2b - (c2b - c3b) * k2;
+ }
+ 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");
+ }
+}
+var MeshShadingPattern = class extends BaseShadingPattern {
+ constructor(IR) {
+ super();
+ this._coords = IR[2];
+ this._colors = IR[3];
+ this._figures = IR[4];
+ this._bounds = IR[5];
+ this._bbox = IR[7];
+ this._background = IR[8];
+ this.matrix = null;
+ }
+ _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
+ const EXPECTED_SCALE = 1.1;
+ const MAX_PATTERN_SIZE = 3e3;
+ 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, false);
+ 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
+ };
+ }
+ getPattern(ctx, owner, inverse, pathType) {
+ applyBoundingBox(ctx, this._bbox);
+ let scale;
+ if (pathType === PathType.SHADING) {
+ scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx));
+ } else {
+ scale = Util.singularValueDecompose2dScale(owner.baseTransform);
+ if (this.matrix) {
+ const matrixScale = Util.singularValueDecompose2dScale(this.matrix);
+ scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
+ }
+ }
+ 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");
+ }
+};
+var DummyShadingPattern = class 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]}`);
+}
+var PaintType = {
+ COLORED: 1,
+ UNCOLORED: 2
+};
+var _TilingPattern = class {
+ constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
+ 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.color = color;
+ this.ctx = ctx;
+ this.canvasGraphicsFactory = canvasGraphicsFactory;
+ this.baseTransform = baseTransform;
+ }
+ createPatternCanvas(owner) {
+ const operatorList = this.operatorList;
+ const bbox = this.bbox;
+ const xstep = this.xstep;
+ const ystep = this.ystep;
+ const paintType = this.paintType;
+ const tilingType = this.tilingType;
+ const color = this.color;
+ const canvasGraphicsFactory = this.canvasGraphicsFactory;
+ info("TilingType: " + tilingType);
+ const x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3];
+ const matrixScale = Util.singularValueDecompose2dScale(this.matrix);
+ const curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform);
+ const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
+ const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
+ const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
+ const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
+ const tmpCtx = tmpCanvas.context;
+ const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
+ graphics.groupLevel = owner.groupLevel;
+ this.setFillAndStrokeStyleToContext(graphics, paintType, color);
+ let adjustedX0 = x0;
+ let adjustedY0 = y0;
+ let adjustedX1 = x1;
+ let adjustedY1 = y1;
+ if (x0 < 0) {
+ adjustedX0 = 0;
+ adjustedX1 += Math.abs(x0);
+ }
+ if (y0 < 0) {
+ adjustedY0 = 0;
+ adjustedY1 += Math.abs(y0);
+ }
+ tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));
+ graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
+ tmpCtx.save();
+ this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);
+ graphics.baseTransform = getCurrentTransform(graphics.ctx);
+ graphics.executeOperatorList(operatorList);
+ graphics.endDrawing();
+ return {
+ canvas: tmpCanvas.canvas,
+ scaleX: dimx.scale,
+ scaleY: dimy.scale,
+ offsetX: adjustedX0,
+ offsetY: adjustedY0
+ };
+ }
+ getSizeAndScale(step, realOutputSize, scale) {
+ step = Math.abs(step);
+ 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);
+ graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [x0, y0, x1, y1]);
+ 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}`);
+ }
+ }
+ getPattern(ctx, owner, inverse, pathType) {
+ let matrix2 = inverse;
+ if (pathType !== PathType.SHADING) {
+ matrix2 = Util.transform(matrix2, owner.baseTransform);
+ if (this.matrix) {
+ matrix2 = Util.transform(matrix2, this.matrix);
+ }
+ }
+ const temporaryPatternCanvas = this.createPatternCanvas(owner);
+ let domMatrix = new DOMMatrix(matrix2);
+ 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;
+ }
+};
+var TilingPattern = _TilingPattern;
+__publicField(TilingPattern, "MAX_PATTERN_SIZE", 3e3);
+function convertBlackAndWhiteToRGBA({
+ src,
+ srcPos = 0,
+ dest,
+ width,
+ height,
+ nonBlackColor = 4294967295,
+ inverseDecode = false
+}) {
+ const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255;
+ 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 elem2 = srcPos < srcLength ? src[srcPos] : 255;
+ dest[destPos++] = elem2 & 128 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 64 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 32 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 16 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 8 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 4 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 2 ? oneMapping : zeroMapping;
+ dest[destPos++] = elem2 & 1 ? 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
+ };
+}
+var MIN_FONT_SIZE = 16;
+var MAX_FONT_SIZE = 100;
+var EXECUTION_TIME = 15;
+var EXECUTION_STEPS = 10;
+var MAX_SIZE_TO_COMPILE = 1e3;
+var FULL_CHUNK_HEIGHT = 16;
+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 ctxSave() {
+ destCtx.save();
+ this.__originalSave();
+ };
+ ctx.restore = function ctxRestore() {
+ destCtx.restore();
+ this.__originalRestore();
+ };
+ ctx.translate = function ctxTranslate(x, y) {
+ destCtx.translate(x, y);
+ this.__originalTranslate(x, y);
+ };
+ ctx.scale = function ctxScale(x, y) {
+ destCtx.scale(x, y);
+ this.__originalScale(x, y);
+ };
+ ctx.transform = function ctxTransform(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 ctxSetTransform(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 ctxResetTransform() {
+ destCtx.resetTransform();
+ this.__originalResetTransform();
+ };
+ ctx.rotate = function ctxRotate(angle) {
+ destCtx.rotate(angle);
+ this.__originalRotate(angle);
+ };
+ ctx.clip = function ctxRotate(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();
+ };
+}
+var CachedCanvases = class {
+ constructor(canvasFactory) {
+ this.canvasFactory = canvasFactory;
+ this.cache = /* @__PURE__ */ Object.create(null);
+ }
+ getCanvas(id, width, height) {
+ let canvasEntry;
+ if (this.cache[id] !== void 0) {
+ 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];
+}
+function compileType3Glyph(imgData) {
+ const {
+ width,
+ height
+ } = imgData;
+ if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) {
+ return null;
+ }
+ const POINT_TO_PROCESS_LIMIT = 1e3;
+ const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+ const width1 = width + 1;
+ let points = new Uint8Array(width1 * (height + 1));
+ let i, j, j0;
+ const lineSize = width + 7 & ~7;
+ let data = new Uint8Array(lineSize * height), pos = 0;
+ for (const elem of imgData.data) {
+ let mask = 128;
+ while (mask > 0) {
+ data[pos++] = elem & mask ? 0 : 255;
+ mask >>= 1;
+ }
+ }
+ let count = 0;
+ pos = 0;
+ if (data[pos] !== 0) {
+ points[0] = 1;
+ ++count;
+ }
+ for (j = 1; j < width; j++) {
+ if (data[pos] !== data[pos + 1]) {
+ points[j] = data[pos] ? 2 : 1;
+ ++count;
+ }
+ pos++;
+ }
+ if (data[pos] !== 0) {
+ points[j] = 2;
+ ++count;
+ }
+ for (i = 1; i < height; i++) {
+ pos = i * lineSize;
+ j0 = i * width1;
+ if (data[pos - lineSize] !== data[pos]) {
+ points[j0] = data[pos] ? 1 : 8;
+ ++count;
+ }
+ let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
+ for (j = 1; j < width; j++) {
+ sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);
+ if (POINT_TYPES[sum]) {
+ points[j0 + j] = POINT_TYPES[sum];
+ ++count;
+ }
+ pos++;
+ }
+ if (data[pos - lineSize] !== data[pos]) {
+ points[j0 + j] = data[pos] ? 2 : 4;
+ ++count;
+ }
+ if (count > POINT_TO_PROCESS_LIMIT) {
+ return null;
+ }
+ }
+ pos = lineSize * (height - 1);
+ j0 = i * width1;
+ if (data[pos] !== 0) {
+ points[j0] = 8;
+ ++count;
+ }
+ for (j = 1; j < width; j++) {
+ if (data[pos] !== data[pos + 1]) {
+ points[j0 + j] = data[pos] ? 4 : 8;
+ ++count;
+ }
+ pos++;
+ }
+ if (data[pos] !== 0) {
+ points[j0 + j] = 4;
+ ++count;
+ }
+ if (count > POINT_TO_PROCESS_LIMIT) {
+ return null;
+ }
+ const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+ const path = new Path2D();
+ for (i = 0; count && i <= height; i++) {
+ let p = i * width1;
+ const end = p + width;
+ while (p < end && !points[p]) {
+ p++;
+ }
+ if (p === end) {
+ continue;
+ }
+ path.moveTo(p % width1, i);
+ const p0 = p;
+ let type = points[p];
+ do {
+ const step = steps[type];
+ do {
+ p += step;
+ } while (!points[p]);
+ const pp = points[p];
+ if (pp !== 5 && pp !== 10) {
+ type = pp;
+ points[p] = 0;
+ } else {
+ type = pp & 51 * type >> 4;
+ points[p] &= type >> 2 | type << 2;
+ }
+ path.lineTo(p % width1, p / width1 | 0);
+ if (!points[p]) {
+ --count;
+ }
+ } while (p0 !== p);
+ --i;
+ }
+ data = null;
+ points = null;
+ const drawOutline = function(c) {
+ c.save();
+ c.scale(1 / width, -1 / height);
+ c.translate(0, -height);
+ c.fill(path);
+ c.beginPath();
+ c.restore();
+ };
+ return drawOutline;
+}
+var CanvasExtraState = class {
+ constructor(width, height) {
+ this.alphaIsShape = false;
+ this.fontSize = 0;
+ this.fontSizeScale = 1;
+ this.textMatrix = IDENTITY_MATRIX;
+ this.textMatrixScale = 1;
+ this.fontMatrix = FONT_IDENTITY_MATRIX;
+ this.leading = 0;
+ this.x = 0;
+ this.y = 0;
+ this.lineX = 0;
+ this.lineY = 0;
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRenderingMode = TextRenderingMode.FILL;
+ this.textRise = 0;
+ this.fillColor = "#000000";
+ this.strokeColor = "#000000";
+ this.patternFill = false;
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.activeSMask = null;
+ this.transferMaps = "none";
+ this.startNewPathAndClipBox([0, 0, width, height]);
+ }
+ clone() {
+ const clone2 = Object.create(this);
+ clone2.clipBox = this.clipBox.slice();
+ return clone2;
+ }
+ setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+ updatePathMinMax(transform, x, y) {
+ [x, y] = Util.applyTransform([x, y], transform);
+ this.minX = Math.min(this.minX, x);
+ this.minY = Math.min(this.minY, y);
+ this.maxX = Math.max(this.maxX, x);
+ this.maxY = Math.max(this.maxY, y);
+ }
+ updateRectMinMax(transform, rect) {
+ const p1 = Util.applyTransform(rect, transform);
+ const p2 = Util.applyTransform(rect.slice(2), transform);
+ const p3 = Util.applyTransform([rect[0], rect[3]], transform);
+ const p4 = Util.applyTransform([rect[2], rect[1]], transform);
+ this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]);
+ this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]);
+ this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]);
+ this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]);
+ }
+ updateScalingPathMinMax(transform, minMax) {
+ Util.scaleMinMax(transform, minMax);
+ this.minX = Math.min(this.minX, minMax[0]);
+ this.minY = Math.min(this.minY, minMax[1]);
+ this.maxX = Math.max(this.maxX, minMax[2]);
+ this.maxY = Math.max(this.maxY, minMax[3]);
+ }
+ updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) {
+ const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax);
+ if (minMax) {
+ return;
+ }
+ this.updateRectMinMax(transform, box);
+ }
+ getPathBoundingBox(pathType = PathType.FILL, transform = null) {
+ const box = [this.minX, this.minY, this.maxX, this.maxY];
+ if (pathType === PathType.STROKE) {
+ if (!transform) {
+ unreachable("Stroke bounding box must include transform.");
+ }
+ const scale = Util.singularValueDecompose2dScale(transform);
+ const xStrokePad = scale[0] * this.lineWidth / 2;
+ const yStrokePad = scale[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.minX === Infinity;
+ }
+ startNewPathAndClipBox(box) {
+ this.clipBox = box;
+ this.minX = Infinity;
+ this.minY = Infinity;
+ this.maxX = 0;
+ this.maxY = 0;
+ }
+ getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) {
+ return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
+ }
+};
+function putBinaryImageData(ctx, imgData) {
+ if (typeof ImageData !== "undefined" && 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 = 4294967295;
+ const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255;
+ 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] !== void 0) {
+ destCtx[property] = sourceCtx[property];
+ }
+ }
+ if (sourceCtx.setLineDash !== void 0) {
+ 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 !== void 0) {
+ ctx.setLineDash([]);
+ ctx.lineDashOffset = 0;
+ }
+ if (!isNodeJS) {
+ const {
+ filter
+ } = ctx;
+ if (filter !== "none" && filter !== "") {
+ ctx.filter = "none";
+ }
+ }
+}
+function getImageSmoothingEnabled(transform, interpolate) {
+ if (interpolate) {
+ return true;
+ }
+ const scale = Util.singularValueDecompose2dScale(transform);
+ scale[0] = Math.fround(scale[0]);
+ scale[1] = Math.fround(scale[1]);
+ const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS);
+ return scale[0] <= actualScale && scale[1] <= actualScale;
+}
+var LINE_CAP_STYLES = ["butt", "round", "square"];
+var LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+var NORMAL_CLIP = {};
+var EO_CLIP = {};
+var _restoreInitialState, restoreInitialState_fn, _drawFilter, drawFilter_fn;
+var _CanvasGraphics = class {
+ constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, {
+ optionalContentConfig,
+ markedContentStack = null
+ }, annotationCanvasMap, pageColors) {
+ __privateAdd(this, _restoreInitialState);
+ __privateAdd(this, _drawFilter);
+ 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.processingType3 = null;
+ 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 = /* @__PURE__ */ 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 = /* @__PURE__ */ 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 !== void 0 && i === stepper.nextBreakPoint) {
+ stepper.breakIt(i, continueCallback);
+ return i;
+ }
+ fnId = fnArray[i];
+ if (fnId !== OPS.dependency) {
+ this[fnId].apply(this, argsArray[i]);
+ } else {
+ for (const depObjId of argsArray[i]) {
+ const objsPool = depObjId.startsWith("g_") ? commonObjs : objs;
+ if (!objsPool.has(depObjId)) {
+ objsPool.get(depObjId, continueCallback);
+ return i;
+ }
+ }
+ }
+ i++;
+ if (i === argsArrayLen) {
+ return i;
+ }
+ if (chunkOperations && ++steps > EXECUTION_STEPS) {
+ if (Date.now() > endTime) {
+ continueCallback();
+ return i;
+ }
+ steps = 0;
+ }
+ }
+ }
+ endDrawing() {
+ __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this);
+ this.cachedCanvases.clear();
+ this.cachedPatterns.clear();
+ for (const cache of this._cachedBitmapsMap.values()) {
+ for (const canvas of cache.values()) {
+ if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) {
+ canvas.width = canvas.height = 0;
+ }
+ }
+ cache.clear();
+ }
+ this._cachedBitmapsMap.clear();
+ __privateMethod(this, _drawFilter, drawFilter_fn).call(this);
+ }
+ _scaleImage(img, inverseTransform) {
+ const width = img.width;
+ const height = img.height;
+ 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 = /* @__PURE__ */ new Map();
+ this._cachedBitmapsMap.set(mainKey, cache);
+ }
+ const cachedImage = cache.get(cacheKey);
+ if (cachedImage && !isPatternFill) {
+ const offsetX2 = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);
+ const offsetY2 = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]);
+ return {
+ canvas: cachedImage,
+ offsetX: offsetX2,
+ offsetY: offsetY2
+ };
+ }
+ 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 [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas);
+ 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 !== void 0) {
+ 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.current.fillAlpha = value;
+ this.ctx.globalAlpha = 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;
+ this.ctx = scratchCanvas.context;
+ const ctx = this.ctx;
+ ctx.setTransform(...getCurrentTransform(this.suspendedCtx));
+ copyCtxState(this.suspendedCtx, ctx);
+ mirrorContextOperations(ctx, this.suspendedCtx);
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ }
+ endSMaskMode() {
+ if (!this.inSMaskMode) {
+ throw new Error("endSMaskMode called while not in smask mode");
+ }
+ this.ctx._removeMirroring();
+ copyCtxState(this.ctx, this.suspendedCtx);
+ this.ctx = this.suspendedCtx;
+ this.suspendedCtx = null;
+ }
+ compose(dirtyBox) {
+ if (!this.current.activeSMask) {
+ return;
+ }
+ if (!dirtyBox) {
+ dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
+ } else {
+ dirtyBox[0] = Math.floor(dirtyBox[0]);
+ dirtyBox[1] = Math.floor(dirtyBox[1]);
+ dirtyBox[2] = Math.ceil(dirtyBox[2]);
+ dirtyBox[3] = Math.ceil(dirtyBox[3]);
+ }
+ const smask = this.current.activeSMask;
+ const suspendedCtx = this.suspendedCtx;
+ this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);
+ this.ctx.save();
+ this.ctx.setTransform(1, 0, 0, 1, 0, 0);
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
+ this.ctx.restore();
+ }
+ composeSMask(ctx, smask, layerCtx, layerBox) {
+ const layerOffsetX = layerBox[0];
+ const layerOffsetY = layerBox[1];
+ const layerWidth = layerBox[2] - layerOffsetX;
+ const layerHeight = layerBox[3] - layerOffsetY;
+ if (layerWidth === 0 || layerHeight === 0) {
+ return;
+ }
+ this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);
+ ctx.save();
+ ctx.globalAlpha = 1;
+ ctx.globalCompositeOperation = "source-over";
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.drawImage(layerCtx.canvas, 0, 0);
+ ctx.restore();
+ }
+ genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {
+ let maskCanvas = maskCtx.canvas;
+ let maskX = layerOffsetX - maskOffsetX;
+ let maskY = layerOffsetY - maskOffsetY;
+ if (backdrop) {
+ if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) {
+ const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height);
+ const ctx = canvas.context;
+ ctx.drawImage(maskCanvas, -maskX, -maskY);
+ if (backdrop.some((c) => c !== 0)) {
+ ctx.globalCompositeOperation = "destination-atop";
+ ctx.fillStyle = Util.makeHexColor(...backdrop);
+ ctx.fillRect(0, 0, width, height);
+ ctx.globalCompositeOperation = "source-over";
+ }
+ maskCanvas = canvas.canvas;
+ maskX = maskY = 0;
+ } else if (backdrop.some((c) => c !== 0)) {
+ maskCtx.save();
+ maskCtx.globalAlpha = 1;
+ maskCtx.setTransform(1, 0, 0, 1, 0, 0);
+ const clip2 = new Path2D();
+ clip2.rect(maskX, maskY, width, height);
+ maskCtx.clip(clip2);
+ maskCtx.globalCompositeOperation = "destination-atop";
+ maskCtx.fillStyle = Util.makeHexColor(...backdrop);
+ maskCtx.fillRect(maskX, maskY, width, height);
+ maskCtx.restore();
+ }
+ }
+ layerCtx.save();
+ layerCtx.globalAlpha = 1;
+ layerCtx.setTransform(1, 0, 0, 1, 0, 0);
+ if (subtype === "Alpha" && transferMap) {
+ layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap);
+ } else if (subtype === "Luminosity") {
+ layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap);
+ }
+ const clip = new Path2D();
+ clip.rect(layerOffsetX, layerOffsetY, width, height);
+ layerCtx.clip(clip);
+ layerCtx.globalCompositeOperation = "destination-in";
+ layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height);
+ layerCtx.restore();
+ }
+ save() {
+ if (this.inSMaskMode) {
+ copyCtxState(this.ctx, this.suspendedCtx);
+ this.suspendedCtx.save();
+ } else {
+ this.ctx.save();
+ }
+ const old = this.current;
+ this.stateStack.push(old);
+ this.current = old.clone();
+ }
+ restore() {
+ if (this.stateStack.length === 0 && this.inSMaskMode) {
+ this.endSMaskMode();
+ }
+ if (this.stateStack.length !== 0) {
+ this.current = this.stateStack.pop();
+ if (this.inSMaskMode) {
+ this.suspendedCtx.restore();
+ copyCtxState(this.suspendedCtx, this.ctx);
+ } else {
+ this.ctx.restore();
+ }
+ 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(ops, args, minMax) {
+ const ctx = this.ctx;
+ const current = this.current;
+ let x = current.x, y = current.y;
+ let startX, startY;
+ const currentTransform = getCurrentTransform(ctx);
+ const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0;
+ const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null;
+ for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {
+ switch (ops[i] | 0) {
+ case OPS.rectangle:
+ x = args[j++];
+ y = args[j++];
+ const width = args[j++];
+ const height = args[j++];
+ const xw = x + width;
+ const yh = y + height;
+ ctx.moveTo(x, y);
+ if (width === 0 || height === 0) {
+ ctx.lineTo(xw, yh);
+ } else {
+ ctx.lineTo(xw, y);
+ ctx.lineTo(xw, yh);
+ ctx.lineTo(x, yh);
+ }
+ if (!isScalingMatrix) {
+ current.updateRectMinMax(currentTransform, [x, y, xw, yh]);
+ }
+ ctx.closePath();
+ break;
+ case OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.moveTo(x, y);
+ if (!isScalingMatrix) {
+ current.updatePathMinMax(currentTransform, x, y);
+ }
+ break;
+ case OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.lineTo(x, y);
+ if (!isScalingMatrix) {
+ current.updatePathMinMax(currentTransform, x, y);
+ }
+ break;
+ case OPS.curveTo:
+ startX = x;
+ startY = y;
+ x = args[j + 4];
+ y = args[j + 5];
+ ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
+ current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier);
+ j += 6;
+ break;
+ case OPS.curveTo2:
+ startX = x;
+ startY = y;
+ ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
+ current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier);
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+ case OPS.curveTo3:
+ startX = x;
+ startY = y;
+ x = args[j + 2];
+ y = args[j + 3];
+ ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
+ current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier);
+ j += 4;
+ break;
+ case OPS.closePath:
+ ctx.closePath();
+ break;
+ }
+ }
+ if (isScalingMatrix) {
+ current.updateScalingPathMinMax(currentTransform, minMaxForBezier);
+ }
+ current.setCurrentPoint(x, y);
+ }
+ closePath() {
+ this.ctx.closePath();
+ }
+ stroke(consumePath = true) {
+ const ctx = this.ctx;
+ const strokeColor = this.current.strokeColor;
+ ctx.globalAlpha = this.current.strokeAlpha;
+ if (this.contentVisible) {
+ if (typeof strokeColor === "object" && (strokeColor == null ? void 0 : strokeColor.getPattern)) {
+ ctx.save();
+ ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE);
+ this.rescaleAndStroke(false);
+ ctx.restore();
+ } else {
+ this.rescaleAndStroke(true);
+ }
+ }
+ if (consumePath) {
+ this.consumePath(this.current.getClippedPathBoundingBox());
+ }
+ ctx.globalAlpha = this.current.fillAlpha;
+ }
+ closeStroke() {
+ this.closePath();
+ this.stroke();
+ }
+ fill(consumePath = true) {
+ const ctx = this.ctx;
+ const fillColor = this.current.fillColor;
+ const isPatternFill = this.current.patternFill;
+ let needRestore = false;
+ if (isPatternFill) {
+ ctx.save();
+ ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL);
+ needRestore = true;
+ }
+ const intersect = this.current.getClippedPathBoundingBox();
+ if (this.contentVisible && intersect !== null) {
+ if (this.pendingEOFill) {
+ ctx.fill("evenodd");
+ this.pendingEOFill = false;
+ } else {
+ ctx.fill();
+ }
+ }
+ if (needRestore) {
+ ctx.restore();
+ }
+ if (consumePath) {
+ this.consumePath(intersect);
+ }
+ }
+ eoFill() {
+ this.pendingEOFill = true;
+ this.fill();
+ }
+ fillStroke() {
+ this.fill(false);
+ this.stroke(false);
+ this.consumePath();
+ }
+ eoFillStroke() {
+ this.pendingEOFill = true;
+ this.fillStroke();
+ }
+ closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ }
+ closeEOFillStroke() {
+ this.pendingEOFill = true;
+ this.closePath();
+ this.fillStroke();
+ }
+ endPath() {
+ this.consumePath();
+ }
+ clip() {
+ this.pendingClip = NORMAL_CLIP;
+ }
+ eoClip() {
+ this.pendingClip = EO_CLIP;
+ }
+ beginText() {
+ this.current.textMatrix = IDENTITY_MATRIX;
+ 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 === void 0) {
+ ctx.beginPath();
+ return;
+ }
+ ctx.save();
+ ctx.beginPath();
+ for (const path of paths) {
+ ctx.setTransform(...path.transform);
+ ctx.translate(path.x, path.y);
+ path.addToPath(ctx, path.fontSize);
+ }
+ ctx.restore();
+ ctx.clip();
+ ctx.beginPath();
+ 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) {
+ var _a2;
+ 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 = ((_a2 = fontObj.systemFontInfo) == null ? void 0 : _a2.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(a, b, c, d, e, f) {
+ this.current.textMatrix = [a, b, c, d, e, f];
+ this.current.textMatrixScale = Math.hypot(a, b);
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ }
+ nextLine() {
+ this.moveText(0, this.current.leading);
+ }
+ paintChar(character, x, y, patternTransform) {
+ 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;
+ let addToPath;
+ if (font.disableFontFace || isAddToPathSet || patternFill) {
+ addToPath = font.getPathGenerator(this.commonObjs, character);
+ }
+ if (font.disableFontFace || patternFill) {
+ ctx.save();
+ ctx.translate(x, y);
+ ctx.beginPath();
+ addToPath(ctx, fontSize);
+ if (patternTransform) {
+ ctx.setTransform(...patternTransform);
+ }
+ if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+ ctx.fill();
+ }
+ if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+ ctx.stroke();
+ }
+ 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 || (this.pendingTextPaths = []);
+ paths.push({
+ transform: getCurrentTransform(ctx),
+ x,
+ y,
+ fontSize,
+ addToPath
+ });
+ }
+ }
+ 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 void 0;
+ }
+ 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();
+ 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 patternTransform;
+ if (current.patternFill) {
+ ctx.save();
+ const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL);
+ patternTransform = getCurrentTransform(ctx);
+ ctx.restore();
+ ctx.fillStyle = 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) {
+ 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 void 0;
+ }
+ let x = 0, i;
+ for (i = 0; i < glyphsLength; ++i) {
+ const glyph = glyphs[i];
+ if (typeof glyph === "number") {
+ x += spacingDir * glyph * fontSize / 1e3;
+ 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 * 1e3 / 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) / 2e3 * fontSize / fontSizeScale;
+ }
+ }
+ if (this.contentVisible && (glyph.isInFont || font.missingFile)) {
+ if (simpleFillText && !accent) {
+ ctx.fillText(character, scaledX, scaledY);
+ } else {
+ this.paintChar(character, scaledX, scaledY, patternTransform);
+ if (accent) {
+ const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
+ const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
+ this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
+ }
+ }
+ }
+ 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 void 0;
+ }
+ 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();
+ ctx.transform(...current.textMatrix);
+ ctx.translate(current.x, current.y);
+ ctx.scale(textHScale, fontDirection);
+ for (i = 0; i < glyphsLength; ++i) {
+ glyph = glyphs[i];
+ if (typeof glyph === "number") {
+ spacingLength = spacingDir * glyph * fontSize / 1e3;
+ 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.`);
+ continue;
+ }
+ if (this.contentVisible) {
+ this.processingType3 = glyph;
+ this.save();
+ ctx.scale(fontSize, fontSize);
+ ctx.transform(...fontMatrix);
+ this.executeOperatorList(operatorList);
+ this.restore();
+ }
+ const transformed = Util.applyTransform([glyph.width, 0], fontMatrix);
+ width = transformed[0] * fontSize + spacing;
+ ctx.translate(width, 0);
+ current.x += width * textHScale;
+ }
+ ctx.restore();
+ this.processingType3 = null;
+ }
+ setCharWidth(xWidth, yWidth) {
+ }
+ setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
+ this.ctx.rect(llx, lly, urx - llx, ury - lly);
+ this.ctx.clip();
+ this.endPath();
+ }
+ getColorN_Pattern(IR) {
+ let pattern;
+ if (IR[0] === "TilingPattern") {
+ const color = IR[1];
+ 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, color, this.ctx, canvasGraphicsFactory, baseTransform);
+ } else {
+ pattern = this._getPattern(IR[1], IR[2]);
+ }
+ return pattern;
+ }
+ setStrokeColorN() {
+ this.current.strokeColor = this.getColorN_Pattern(arguments);
+ }
+ 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);
+ }
+ setStrokeTransparent() {
+ this.ctx.strokeStyle = this.current.strokeColor = "transparent";
+ }
+ 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, matrix2 = 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 (matrix2) {
+ pattern.matrix = matrix2;
+ }
+ 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 [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox([0, 0, width, height], inv);
+ 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(matrix2, bbox) {
+ if (!this.contentVisible) {
+ return;
+ }
+ this.save();
+ this.baseTransformStack.push(this.baseTransform);
+ if (matrix2) {
+ this.transform(...matrix2);
+ }
+ this.baseTransform = getCurrentTransform(this.ctx);
+ if (bbox) {
+ const width = bbox[2] - bbox[0];
+ const height = bbox[3] - bbox[1];
+ this.ctx.rect(bbox[0], bbox[1], width, height);
+ this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox);
+ this.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 = Util.getAxialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx));
+ 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);
+ 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 = Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);
+ this.ctx.drawImage(groupCtx.canvas, 0, 0);
+ this.ctx.restore();
+ this.compose(dirtyBox);
+ }
+ }
+ beginAnnotation(id, rect, transform, matrix2, hasOwnCanvas) {
+ __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this);
+ resetCtxToDefault(this.ctx);
+ this.ctx.save();
+ this.save();
+ if (this.baseTransform) {
+ this.ctx.setTransform(...this.baseTransform);
+ }
+ if (rect) {
+ const width = rect[2] - rect[0];
+ const height = rect[3] - rect[1];
+ if (hasOwnCanvas && this.annotationCanvasMap) {
+ transform = transform.slice();
+ transform[4] -= rect[0];
+ transform[5] -= rect[1];
+ rect = rect.slice();
+ rect[0] = rect[1] = 0;
+ rect[2] = width;
+ rect[3] = height;
+ const [scaleX, scaleY] = Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx));
+ 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(scaleX, 0, 0, -scaleY, 0, height * scaleY);
+ resetCtxToDefault(this.ctx);
+ } else {
+ resetCtxToDefault(this.ctx);
+ this.ctx.rect(rect[0], rect[1], width, height);
+ this.ctx.clip();
+ this.endPath();
+ }
+ }
+ this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
+ this.transform(...transform);
+ this.transform(...matrix2);
+ }
+ endAnnotation() {
+ if (this.annotationCanvas) {
+ this.ctx.restore();
+ __privateMethod(this, _drawFilter, drawFilter_fn).call(this);
+ this.ctx = this.annotationCanvas.savedCtx;
+ delete this.annotationCanvas.savedCtx;
+ delete this.annotationCanvas;
+ }
+ }
+ paintImageMaskXObject(img) {
+ if (!this.contentVisible) {
+ return;
+ }
+ const count = img.count;
+ img = this.getObject(img.data, img);
+ img.count = count;
+ const ctx = this.ctx;
+ const glyph = this.processingType3;
+ if (glyph) {
+ if (glyph.compiled === void 0) {
+ glyph.compiled = compileType3Glyph(img);
+ }
+ if (glyph.compiled) {
+ glyph.compiled(ctx);
+ return;
+ }
+ }
+ 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]]);
+ const [x, y] = Util.applyTransform([0, 0], trans);
+ ctx.drawImage(mask.canvas, x, y);
+ }
+ 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();
+ if (!isNodeJS) {
+ 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(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("evenodd");
+ } else {
+ ctx.clip();
+ }
+ }
+ this.pendingClip = null;
+ }
+ this.current.startNewPathAndClipBox(this.current.clipBox);
+ ctx.beginPath();
+ }
+ 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(saveRestore) {
+ const {
+ ctx
+ } = this;
+ const {
+ lineWidth
+ } = this.current;
+ const [scaleX, scaleY] = this.getScaleForStroking();
+ ctx.lineWidth = lineWidth || 1;
+ if (scaleX === 1 && scaleY === 1) {
+ ctx.stroke();
+ return;
+ }
+ const dashes = ctx.getLineDash();
+ if (saveRestore) {
+ ctx.save();
+ }
+ ctx.scale(scaleX, scaleY);
+ if (dashes.length > 0) {
+ const scale = Math.max(scaleX, scaleY);
+ ctx.setLineDash(dashes.map((x) => x / scale));
+ ctx.lineDashOffset /= scale;
+ }
+ ctx.stroke();
+ if (saveRestore) {
+ ctx.restore();
+ }
+ }
+ isContentVisible() {
+ for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
+ if (!this.markedContentStack[i].visible) {
+ return false;
+ }
+ }
+ return true;
+ }
+};
+var CanvasGraphics = _CanvasGraphics;
+_restoreInitialState = new WeakSet();
+restoreInitialState_fn = function() {
+ 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;
+ }
+};
+_drawFilter = new WeakSet();
+drawFilter_fn = function() {
+ 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;
+ }
+ }
+};
+for (const op in OPS) {
+ if (CanvasGraphics.prototype[op] !== void 0) {
+ CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];
+ }
+}
+var _port, _src;
+var GlobalWorkerOptions = class {
+ static get workerPort() {
+ return __privateGet(this, _port);
+ }
+ static set workerPort(val) {
+ if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) {
+ throw new Error("Invalid `workerPort` type.");
+ }
+ __privateSet(this, _port, val);
+ }
+ static get workerSrc() {
+ return __privateGet(this, _src);
+ }
+ static set workerSrc(val) {
+ if (typeof val !== "string") {
+ throw new Error("Invalid `workerSrc` type.");
+ }
+ __privateSet(this, _src, val);
+ }
+};
+_port = new WeakMap();
+_src = new WeakMap();
+__privateAdd(GlobalWorkerOptions, _port, null);
+__privateAdd(GlobalWorkerOptions, _src, "");
+var CallbackKind = {
+ UNKNOWN: 0,
+ DATA: 1,
+ ERROR: 2
+};
+var StreamKind = {
+ UNKNOWN: 0,
+ CANCEL: 1,
+ CANCEL_COMPLETE: 2,
+ CLOSE: 3,
+ ENQUEUE: 4,
+ ERROR: 5,
+ PULL: 6,
+ PULL_COMPLETE: 7,
+ START_COMPLETE: 8
+};
+function wrapReason(reason) {
+ if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) {
+ unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
+ }
+ switch (reason.name) {
+ case "AbortException":
+ return new AbortException(reason.message);
+ case "MissingPDFException":
+ return new MissingPDFException(reason.message);
+ case "PasswordException":
+ return new PasswordException(reason.message, reason.code);
+ case "UnexpectedResponseException":
+ return new UnexpectedResponseException(reason.message, reason.status);
+ case "UnknownErrorException":
+ return new UnknownErrorException(reason.message, reason.details);
+ default:
+ return new UnknownErrorException(reason.message, reason.toString());
+ }
+}
+var _createStreamSink, createStreamSink_fn, _processStreamMessage, processStreamMessage_fn, _deleteStreamController, deleteStreamController_fn;
+var MessageHandler = class {
+ constructor(sourceName, targetName, comObj) {
+ __privateAdd(this, _createStreamSink);
+ __privateAdd(this, _processStreamMessage);
+ __privateAdd(this, _deleteStreamController);
+ this.sourceName = sourceName;
+ this.targetName = targetName;
+ this.comObj = comObj;
+ this.callbackId = 1;
+ this.streamId = 1;
+ this.streamSinks = /* @__PURE__ */ Object.create(null);
+ this.streamControllers = /* @__PURE__ */ Object.create(null);
+ this.callbackCapabilities = /* @__PURE__ */ Object.create(null);
+ this.actionHandler = /* @__PURE__ */ Object.create(null);
+ this._onComObjOnMessage = (event) => {
+ const data = event.data;
+ if (data.targetName !== this.sourceName) {
+ return;
+ }
+ if (data.stream) {
+ __privateMethod(this, _processStreamMessage, processStreamMessage_fn).call(this, data);
+ return;
+ }
+ if (data.callback) {
+ const callbackId = data.callbackId;
+ const capability = this.callbackCapabilities[callbackId];
+ if (!capability) {
+ throw new Error(`Cannot resolve callback ${callbackId}`);
+ }
+ delete this.callbackCapabilities[callbackId];
+ if (data.callback === CallbackKind.DATA) {
+ capability.resolve(data.data);
+ } else if (data.callback === CallbackKind.ERROR) {
+ capability.reject(wrapReason(data.reason));
+ } else {
+ throw new Error("Unexpected callback case");
+ }
+ return;
+ }
+ const action = this.actionHandler[data.action];
+ if (!action) {
+ throw new Error(`Unknown action from worker: ${data.action}`);
+ }
+ if (data.callbackId) {
+ const cbSourceName = this.sourceName;
+ const cbTargetName = data.sourceName;
+ new Promise(function(resolve) {
+ resolve(action(data.data));
+ }).then(function(result) {
+ comObj.postMessage({
+ sourceName: cbSourceName,
+ targetName: cbTargetName,
+ callback: CallbackKind.DATA,
+ callbackId: data.callbackId,
+ data: result
+ });
+ }, function(reason) {
+ comObj.postMessage({
+ sourceName: cbSourceName,
+ targetName: cbTargetName,
+ callback: CallbackKind.ERROR,
+ callbackId: data.callbackId,
+ reason: wrapReason(reason)
+ });
+ });
+ return;
+ }
+ if (data.streamId) {
+ __privateMethod(this, _createStreamSink, createStreamSink_fn).call(this, data);
+ return;
+ }
+ action(data.data);
+ };
+ comObj.addEventListener("message", this._onComObjOnMessage);
+ }
+ on(actionName, handler) {
+ const ah = this.actionHandler;
+ if (ah[actionName]) {
+ throw new Error(`There is already an actionName called "${actionName}"`);
+ }
+ ah[actionName] = handler;
+ }
+ send(actionName, data, transfers) {
+ this.comObj.postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ data
+ }, transfers);
+ }
+ sendWithPromise(actionName, data, transfers) {
+ const callbackId = this.callbackId++;
+ const capability = Promise.withResolvers();
+ this.callbackCapabilities[callbackId] = capability;
+ try {
+ this.comObj.postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ callbackId,
+ data
+ }, transfers);
+ } catch (ex) {
+ capability.reject(ex);
+ }
+ return capability.promise;
+ }
+ sendWithStream(actionName, data, queueingStrategy, transfers) {
+ const streamId = this.streamId++, sourceName = this.sourceName, targetName = this.targetName, comObj = this.comObj;
+ return new ReadableStream({
+ start: (controller) => {
+ const startCapability = Promise.withResolvers();
+ this.streamControllers[streamId] = {
+ controller,
+ startCall: startCapability,
+ pullCall: null,
+ cancelCall: null,
+ isClosed: false
+ };
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ action: actionName,
+ streamId,
+ data,
+ desiredSize: controller.desiredSize
+ }, transfers);
+ return startCapability.promise;
+ },
+ pull: (controller) => {
+ const pullCapability = Promise.withResolvers();
+ this.streamControllers[streamId].pullCall = pullCapability;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL,
+ streamId,
+ desiredSize: controller.desiredSize
+ });
+ return pullCapability.promise;
+ },
+ cancel: (reason) => {
+ assert(reason instanceof Error, "cancel must have a valid reason");
+ const cancelCapability = Promise.withResolvers();
+ this.streamControllers[streamId].cancelCall = cancelCapability;
+ this.streamControllers[streamId].isClosed = true;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.CANCEL,
+ streamId,
+ reason: wrapReason(reason)
+ });
+ return cancelCapability.promise;
+ }
+ }, queueingStrategy);
+ }
+ destroy() {
+ this.comObj.removeEventListener("message", this._onComObjOnMessage);
+ }
+};
+_createStreamSink = new WeakSet();
+createStreamSink_fn = function(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;
+ new Promise(function(resolve) {
+ resolve(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 = new WeakSet();
+processStreamMessage_fn = function(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;
+ new Promise(function(resolve) {
+ var _a2;
+ resolve((_a2 = streamSink.onPull) == null ? void 0 : _a2.call(streamSink));
+ }).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();
+ __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId);
+ break;
+ case StreamKind.ERROR:
+ assert(streamController, "error should have stream controller");
+ streamController.controller.error(wrapReason(data.reason));
+ __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId);
+ break;
+ case StreamKind.CANCEL_COMPLETE:
+ if (data.success) {
+ streamController.cancelCall.resolve();
+ } else {
+ streamController.cancelCall.reject(wrapReason(data.reason));
+ }
+ __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId);
+ break;
+ case StreamKind.CANCEL:
+ if (!streamSink) {
+ break;
+ }
+ new Promise(function(resolve) {
+ var _a2;
+ resolve((_a2 = streamSink.onCancel) == null ? void 0 : _a2.call(streamSink, wrapReason(data.reason)));
+ }).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(wrapReason(data.reason));
+ streamSink.isCancelled = true;
+ delete this.streamSinks[streamId];
+ break;
+ default:
+ throw new Error("Unexpected stream case");
+ }
+};
+_deleteStreamController = new WeakSet();
+deleteStreamController_fn = async function(streamController, streamId) {
+ var _a2, _b, _c;
+ await Promise.allSettled([(_a2 = streamController.startCall) == null ? void 0 : _a2.promise, (_b = streamController.pullCall) == null ? void 0 : _b.promise, (_c = streamController.cancelCall) == null ? void 0 : _c.promise]);
+ delete this.streamControllers[streamId];
+};
+var _metadataMap, _data;
+var Metadata = class {
+ constructor({
+ parsedData,
+ rawData
+ }) {
+ __privateAdd(this, _metadataMap, void 0);
+ __privateAdd(this, _data, void 0);
+ __privateSet(this, _metadataMap, parsedData);
+ __privateSet(this, _data, rawData);
+ }
+ getRaw() {
+ return __privateGet(this, _data);
+ }
+ get(name) {
+ var _a2;
+ return (_a2 = __privateGet(this, _metadataMap).get(name)) != null ? _a2 : null;
+ }
+ getAll() {
+ return objectFromMap(__privateGet(this, _metadataMap));
+ }
+ has(name) {
+ return __privateGet(this, _metadataMap).has(name);
+ }
+};
+_metadataMap = new WeakMap();
+_data = new WeakMap();
+var INTERNAL = Symbol("INTERNAL");
+var _isDisplay, _isPrint, _userSet, _visible;
+var OptionalContentGroup = class {
+ constructor(renderingIntent, {
+ name,
+ intent,
+ usage
+ }) {
+ __privateAdd(this, _isDisplay, false);
+ __privateAdd(this, _isPrint, false);
+ __privateAdd(this, _userSet, false);
+ __privateAdd(this, _visible, true);
+ __privateSet(this, _isDisplay, !!(renderingIntent & RenderingIntentFlag.DISPLAY));
+ __privateSet(this, _isPrint, !!(renderingIntent & RenderingIntentFlag.PRINT));
+ this.name = name;
+ this.intent = intent;
+ this.usage = usage;
+ }
+ get visible() {
+ if (__privateGet(this, _userSet)) {
+ return __privateGet(this, _visible);
+ }
+ if (!__privateGet(this, _visible)) {
+ return false;
+ }
+ const {
+ print,
+ view
+ } = this.usage;
+ if (__privateGet(this, _isDisplay)) {
+ return (view == null ? void 0 : view.viewState) !== "OFF";
+ } else if (__privateGet(this, _isPrint)) {
+ return (print == null ? void 0 : print.printState) !== "OFF";
+ }
+ return true;
+ }
+ _setVisible(internal, visible, userSet = false) {
+ if (internal !== INTERNAL) {
+ unreachable("Internal method `_setVisible` called.");
+ }
+ __privateSet(this, _userSet, userSet);
+ __privateSet(this, _visible, visible);
+ }
+};
+_isDisplay = new WeakMap();
+_isPrint = new WeakMap();
+_userSet = new WeakMap();
+_visible = new WeakMap();
+var _cachedGetHash, _groups, _initialHash, _order, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn;
+var OptionalContentConfig = class {
+ constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) {
+ __privateAdd(this, _evaluateVisibilityExpression);
+ __privateAdd(this, _cachedGetHash, null);
+ __privateAdd(this, _groups, /* @__PURE__ */ new Map());
+ __privateAdd(this, _initialHash, null);
+ __privateAdd(this, _order, null);
+ this.renderingIntent = renderingIntent;
+ this.name = null;
+ this.creator = null;
+ if (data === null) {
+ return;
+ }
+ this.name = data.name;
+ this.creator = data.creator;
+ __privateSet(this, _order, data.order);
+ for (const group of data.groups) {
+ __privateGet(this, _groups).set(group.id, new OptionalContentGroup(renderingIntent, group));
+ }
+ if (data.baseState === "OFF") {
+ for (const group of __privateGet(this, _groups).values()) {
+ group._setVisible(INTERNAL, false);
+ }
+ }
+ for (const on2 of data.on) {
+ __privateGet(this, _groups).get(on2)._setVisible(INTERNAL, true);
+ }
+ for (const off2 of data.off) {
+ __privateGet(this, _groups).get(off2)._setVisible(INTERNAL, false);
+ }
+ __privateSet(this, _initialHash, this.getHash());
+ }
+ isVisible(group) {
+ if (__privateGet(this, _groups).size === 0) {
+ return true;
+ }
+ if (!group) {
+ info("Optional content group not defined.");
+ return true;
+ }
+ if (group.type === "OCG") {
+ if (!__privateGet(this, _groups).has(group.id)) {
+ warn(`Optional content group not found: ${group.id}`);
+ return true;
+ }
+ return __privateGet(this, _groups).get(group.id).visible;
+ } else if (group.type === "OCMD") {
+ if (group.expression) {
+ return __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, group.expression);
+ }
+ if (!group.policy || group.policy === "AnyOn") {
+ for (const id of group.ids) {
+ if (!__privateGet(this, _groups).has(id)) {
+ warn(`Optional content group not found: ${id}`);
+ return true;
+ }
+ if (__privateGet(this, _groups).get(id).visible) {
+ return true;
+ }
+ }
+ return false;
+ } else if (group.policy === "AllOn") {
+ for (const id of group.ids) {
+ if (!__privateGet(this, _groups).has(id)) {
+ warn(`Optional content group not found: ${id}`);
+ return true;
+ }
+ if (!__privateGet(this, _groups).get(id).visible) {
+ return false;
+ }
+ }
+ return true;
+ } else if (group.policy === "AnyOff") {
+ for (const id of group.ids) {
+ if (!__privateGet(this, _groups).has(id)) {
+ warn(`Optional content group not found: ${id}`);
+ return true;
+ }
+ if (!__privateGet(this, _groups).get(id).visible) {
+ return true;
+ }
+ }
+ return false;
+ } else if (group.policy === "AllOff") {
+ for (const id of group.ids) {
+ if (!__privateGet(this, _groups).has(id)) {
+ warn(`Optional content group not found: ${id}`);
+ return true;
+ }
+ if (__privateGet(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) {
+ const group = __privateGet(this, _groups).get(id);
+ if (!group) {
+ warn(`Optional content group not found: ${id}`);
+ return;
+ }
+ group._setVisible(INTERNAL, !!visible, true);
+ __privateSet(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 = __privateGet(this, _groups).get(elem);
+ if (!group) {
+ continue;
+ }
+ switch (operator) {
+ case "ON":
+ group._setVisible(INTERNAL, true);
+ break;
+ case "OFF":
+ group._setVisible(INTERNAL, false);
+ break;
+ case "Toggle":
+ group._setVisible(INTERNAL, !group.visible);
+ break;
+ }
+ }
+ __privateSet(this, _cachedGetHash, null);
+ }
+ get hasInitialVisibility() {
+ return __privateGet(this, _initialHash) === null || this.getHash() === __privateGet(this, _initialHash);
+ }
+ getOrder() {
+ if (!__privateGet(this, _groups).size) {
+ return null;
+ }
+ if (__privateGet(this, _order)) {
+ return __privateGet(this, _order).slice();
+ }
+ return [...__privateGet(this, _groups).keys()];
+ }
+ getGroups() {
+ return __privateGet(this, _groups).size > 0 ? objectFromMap(__privateGet(this, _groups)) : null;
+ }
+ getGroup(id) {
+ return __privateGet(this, _groups).get(id) || null;
+ }
+ getHash() {
+ if (__privateGet(this, _cachedGetHash) !== null) {
+ return __privateGet(this, _cachedGetHash);
+ }
+ const hash = new MurmurHash3_64();
+ for (const [id, group] of __privateGet(this, _groups)) {
+ hash.update(`${id}:${group.visible}`);
+ }
+ return __privateSet(this, _cachedGetHash, hash.hexdigest());
+ }
+};
+_cachedGetHash = new WeakMap();
+_groups = new WeakMap();
+_initialHash = new WeakMap();
+_order = new WeakMap();
+_evaluateVisibilityExpression = new WeakSet();
+evaluateVisibilityExpression_fn = function(array) {
+ const length = array.length;
+ if (length < 2) {
+ return true;
+ }
+ const operator = array[0];
+ for (let i = 1; i < length; i++) {
+ const element2 = array[i];
+ let state;
+ if (Array.isArray(element2)) {
+ state = __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, element2);
+ } else if (__privateGet(this, _groups).has(element2)) {
+ state = __privateGet(this, _groups).get(element2).visible;
+ } else {
+ warn(`Optional content group not found: ${element2}`);
+ 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";
+};
+var PDFDataTransportStream = class {
+ 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 == null ? void 0 : 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 === void 0) {
+ 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() {
+ var _a2, _b;
+ return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0;
+ }
+ _onProgress(evt) {
+ var _a2, _b, _c, _d;
+ if (evt.total === void 0) {
+ (_b = (_a2 = this._rangeReaders[0]) == null ? void 0 : _a2.onProgress) == null ? void 0 : _b.call(_a2, {
+ loaded: evt.loaded
+ });
+ } else {
+ (_d = (_c = this._fullRequestReader) == null ? void 0 : _c.onProgress) == null ? void 0 : _d.call(_c, {
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ }
+ }
+ _onProgressiveDone() {
+ var _a2;
+ (_a2 = this._fullRequestReader) == null ? void 0 : _a2.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) {
+ var _a2;
+ (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason);
+ for (const reader of this._rangeReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ this._pdfDataRangeTransport.abort();
+ }
+};
+var PDFDataTransportStreamReader = class {
+ 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: void 0,
+ 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: void 0,
+ done: true
+ });
+ }
+ this._requests.length = 0;
+ }
+ progressiveDone() {
+ if (this._done) {
+ return;
+ }
+ this._done = true;
+ }
+};
+var PDFDataTransportStreamRangeReader = class {
+ 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: void 0,
+ 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: void 0,
+ 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: void 0,
+ done: true
+ });
+ }
+ this._requests.length = 0;
+ this._stream._removeRangeReader(this);
+ }
+};
+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 (e) {
+ }
+ }
+ 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 matches2 = [];
+ 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 matches2) {
+ if (n === 0) {
+ break;
+ }
+ continue;
+ }
+ matches2[n] = [quot, part];
+ }
+ const parts = [];
+ for (let n = 0; n < matches2.length; ++n) {
+ if (!(n in matches2)) {
+ break;
+ }
+ let [quot, part] = matches2[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(matches2, charset, encoding, text2) {
+ if (encoding === "q" || encoding === "Q") {
+ text2 = text2.replaceAll("_", " ");
+ text2 = text2.replaceAll(/=([0-9a-fA-F]{2})/g, function(match, hex) {
+ return String.fromCharCode(parseInt(hex, 16));
+ });
+ return textdecode(charset, text2);
+ }
+ try {
+ text2 = atob(text2);
+ } catch (e) {
+ }
+ return textdecode(charset, text2);
+ });
+ }
+ return "";
+}
+function validateRangeRequestCapabilities({
+ getResponseHeader,
+ isHttp,
+ rangeChunkSize,
+ disableRange
+}) {
+ const returnValues = {
+ allowRangeRequests: false,
+ suggestedLength: void 0
+ };
+ const length = parseInt(getResponseHeader("Content-Length"), 10);
+ if (!Number.isInteger(length)) {
+ return returnValues;
+ }
+ returnValues.suggestedLength = length;
+ if (length <= 2 * rangeChunkSize) {
+ return returnValues;
+ }
+ if (disableRange || !isHttp) {
+ return returnValues;
+ }
+ if (getResponseHeader("Accept-Ranges") !== "bytes") {
+ return returnValues;
+ }
+ const contentEncoding = getResponseHeader("Content-Encoding") || "identity";
+ if (contentEncoding !== "identity") {
+ return returnValues;
+ }
+ returnValues.allowRangeRequests = true;
+ return returnValues;
+}
+function extractFilenameFromHeader(getResponseHeader) {
+ const contentDisposition = getResponseHeader("Content-Disposition");
+ if (contentDisposition) {
+ let filename = getFilenameFromContentDispositionHeader(contentDisposition);
+ if (filename.includes("%")) {
+ try {
+ filename = decodeURIComponent(filename);
+ } catch (e) {
+ }
+ }
+ if (isPdfFile(filename)) {
+ return filename;
+ }
+ }
+ return null;
+}
+function createResponseStatusError(status, url) {
+ if (status === 404 || status === 0 && url.startsWith("file:")) {
+ return new MissingPDFException('Missing PDF "' + url + '".');
+ }
+ return new UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status);
+}
+function validateResponseStatus(status) {
+ return status === 200 || status === 206;
+}
+function createFetchOptions(headers, withCredentials, abortController) {
+ return {
+ method: "GET",
+ headers,
+ signal: abortController.signal,
+ mode: "cors",
+ credentials: withCredentials ? "include" : "same-origin",
+ redirect: "follow"
+ };
+}
+function createHeaders(httpHeaders) {
+ const headers = new Headers();
+ for (const property in httpHeaders) {
+ const value = httpHeaders[property];
+ if (value === void 0) {
+ continue;
+ }
+ headers.append(property, value);
+ }
+ return headers;
+}
+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;
+}
+var PDFFetchStream = class {
+ constructor(source) {
+ this.source = source;
+ this.isHttp = /^https?:/i.test(source.url);
+ this.httpHeaders = this.isHttp && source.httpHeaders || {};
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+ get _progressiveDataLength() {
+ var _a2, _b;
+ return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 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) {
+ var _a2;
+ (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason);
+ for (const reader of this._rangeRequestReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ }
+};
+var PDFFetchStreamReader = class {
+ 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;
+ this._headers = createHeaders(this._stream.httpHeaders);
+ const url = source.url;
+ fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => {
+ if (!validateResponseStatus(response.status)) {
+ throw createResponseStatusError(response.status, url);
+ }
+ this._reader = response.body.getReader();
+ this._headersCapability.resolve();
+ const getResponseHeader = (name) => response.headers.get(name);
+ const {
+ allowRangeRequests,
+ suggestedLength
+ } = validateRangeRequestCapabilities({
+ getResponseHeader,
+ isHttp: this._stream.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+ this._isRangeSupported = allowRangeRequests;
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = extractFilenameFromHeader(getResponseHeader);
+ 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() {
+ var _a2;
+ await this._headersCapability.promise;
+ const {
+ value,
+ done
+ } = await this._reader.read();
+ if (done) {
+ return {
+ value,
+ done
+ };
+ }
+ this._loaded += value.byteLength;
+ (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, {
+ loaded: this._loaded,
+ total: this._contentLength
+ });
+ return {
+ value: getArrayBuffer(value),
+ done: false
+ };
+ }
+ cancel(reason) {
+ var _a2;
+ (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason);
+ this._abortController.abort();
+ }
+};
+var PDFFetchStreamRangeReader = class {
+ 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();
+ this._headers = createHeaders(this._stream.httpHeaders);
+ this._headers.append("Range", `bytes=${begin}-${end - 1}`);
+ const url = source.url;
+ fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => {
+ if (!validateResponseStatus(response.status)) {
+ throw createResponseStatusError(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() {
+ var _a2;
+ await this._readCapability.promise;
+ const {
+ value,
+ done
+ } = await this._reader.read();
+ if (done) {
+ return {
+ value,
+ done
+ };
+ }
+ this._loaded += value.byteLength;
+ (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, {
+ loaded: this._loaded
+ });
+ return {
+ value: getArrayBuffer(value),
+ done: false
+ };
+ }
+ cancel(reason) {
+ var _a2;
+ (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason);
+ this._abortController.abort();
+ }
+};
+var OK_RESPONSE = 200;
+var PARTIAL_CONTENT_RESPONSE = 206;
+function network_getArrayBuffer(xhr) {
+ const data = xhr.response;
+ if (typeof data !== "string") {
+ return data;
+ }
+ return stringToBytes(data).buffer;
+}
+var NetworkManager = class {
+ constructor(url, args = {}) {
+ this.url = url;
+ this.isHttp = /^https?:/i.test(url);
+ this.httpHeaders = this.isHttp && args.httpHeaders || /* @__PURE__ */ Object.create(null);
+ this.withCredentials = args.withCredentials || false;
+ this.currXhrId = 0;
+ this.pendingRequests = /* @__PURE__ */ Object.create(null);
+ }
+ requestRange(begin, end, listeners) {
+ const args = {
+ begin,
+ end
+ };
+ for (const prop in listeners) {
+ args[prop] = listeners[prop];
+ }
+ return this.request(args);
+ }
+ requestFull(listeners) {
+ return this.request(listeners);
+ }
+ 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 property in this.httpHeaders) {
+ const value = this.httpHeaders[property];
+ if (value === void 0) {
+ continue;
+ }
+ xhr.setRequestHeader(property, value);
+ }
+ 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";
+ if (args.onError) {
+ xhr.onerror = function(evt) {
+ 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) {
+ var _a2;
+ const pendingRequest = this.pendingRequests[xhrId];
+ if (!pendingRequest) {
+ return;
+ }
+ (_a2 = pendingRequest.onProgress) == null ? void 0 : _a2.call(pendingRequest, evt);
+ }
+ onStateChange(xhrId, evt) {
+ var _a2, _b, _c;
+ 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) {
+ (_a2 = pendingRequest.onError) == null ? void 0 : _a2.call(pendingRequest, 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) {
+ (_b = pendingRequest.onError) == null ? void 0 : _b.call(pendingRequest, xhr.status);
+ return;
+ }
+ const chunk = network_getArrayBuffer(xhr);
+ if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
+ const rangeHeader = xhr.getResponseHeader("Content-Range");
+ const matches2 = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
+ pendingRequest.onDone({
+ begin: parseInt(matches2[1], 10),
+ chunk
+ });
+ } else if (chunk) {
+ pendingRequest.onDone({
+ begin: 0,
+ chunk
+ });
+ } else {
+ (_c = pendingRequest.onError) == null ? void 0 : _c.call(pendingRequest, 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();
+ }
+};
+var PDFNetworkStream = class {
+ constructor(source) {
+ this._source = source;
+ this._manager = new NetworkManager(source.url, {
+ httpHeaders: source.httpHeaders,
+ withCredentials: source.withCredentials
+ });
+ 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) {
+ var _a2;
+ (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason);
+ for (const reader of this._rangeRequestReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ }
+};
+var PDFNetworkStreamFullRequestReader = class {
+ constructor(manager, source) {
+ this._manager = manager;
+ const args = {
+ onHeadersReceived: this._onHeadersReceived.bind(this),
+ onDone: this._onDone.bind(this),
+ onError: this._onError.bind(this),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._url = source.url;
+ this._fullRequestId = manager.requestFull(args);
+ this._headersReceivedCapability = 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 = void 0;
+ this._filename = null;
+ this.onProgress = null;
+ }
+ _onHeadersReceived() {
+ const fullRequestXhrId = this._fullRequestId;
+ const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
+ const getResponseHeader = (name) => fullRequestXhr.getResponseHeader(name);
+ const {
+ allowRangeRequests,
+ suggestedLength
+ } = validateRangeRequestCapabilities({
+ getResponseHeader,
+ isHttp: this._manager.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+ if (allowRangeRequests) {
+ this._isRangeSupported = true;
+ }
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = extractFilenameFromHeader(getResponseHeader);
+ if (this._isRangeSupported) {
+ this._manager.abortRequest(fullRequestXhrId);
+ }
+ this._headersReceivedCapability.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: void 0,
+ done: true
+ });
+ }
+ this._requests.length = 0;
+ }
+ _onError(status) {
+ this._storedError = createResponseStatusError(status, this._url);
+ this._headersReceivedCapability.reject(this._storedError);
+ for (const requestCapability of this._requests) {
+ requestCapability.reject(this._storedError);
+ }
+ this._requests.length = 0;
+ this._cachedChunks.length = 0;
+ }
+ _onProgress(evt) {
+ var _a2;
+ (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, {
+ 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._headersReceivedCapability.promise;
+ }
+ async read() {
+ 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: void 0,
+ done: true
+ };
+ }
+ const requestCapability = Promise.withResolvers();
+ this._requests.push(requestCapability);
+ return requestCapability.promise;
+ }
+ cancel(reason) {
+ this._done = true;
+ this._headersReceivedCapability.reject(reason);
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: void 0,
+ done: true
+ });
+ }
+ this._requests.length = 0;
+ if (this._manager.isPendingRequest(this._fullRequestId)) {
+ this._manager.abortRequest(this._fullRequestId);
+ }
+ this._fullRequestReader = null;
+ }
+};
+var PDFNetworkStreamRangeRequestReader = class {
+ constructor(manager, begin, end) {
+ this._manager = manager;
+ const args = {
+ onDone: this._onDone.bind(this),
+ onError: this._onError.bind(this),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._url = manager.url;
+ this._requestId = manager.requestRange(begin, end, args);
+ this._requests = [];
+ this._queuedChunk = null;
+ this._done = false;
+ this._storedError = void 0;
+ this.onProgress = null;
+ this.onClosed = null;
+ }
+ _close() {
+ var _a2;
+ (_a2 = this.onClosed) == null ? void 0 : _a2.call(this, 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: void 0,
+ done: true
+ });
+ }
+ this._requests.length = 0;
+ this._close();
+ }
+ _onError(status) {
+ this._storedError = createResponseStatusError(status, this._url);
+ for (const requestCapability of this._requests) {
+ requestCapability.reject(this._storedError);
+ }
+ this._requests.length = 0;
+ this._queuedChunk = null;
+ }
+ _onProgress(evt) {
+ var _a2;
+ if (!this.isStreamingSupported) {
+ (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, {
+ 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: void 0,
+ 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: void 0,
+ done: true
+ });
+ }
+ this._requests.length = 0;
+ if (this._manager.isPendingRequest(this._requestId)) {
+ this._manager.abortRequest(this._requestId);
+ }
+ this._close();
+ }
+};
+var urlRegex = /^[a-z][a-z0-9\-+.]+:/i;
+function parseUrlOrPath(sourceUrl) {
+ if (urlRegex.test(sourceUrl)) {
+ return new URL(sourceUrl);
+ }
+ const url = NodePackages.get("url");
+ return new URL(url.pathToFileURL(sourceUrl));
+}
+function createRequest(url, headers, callback) {
+ if (url.protocol === "http:") {
+ const http = NodePackages.get("http");
+ return http.request(url, {
+ headers
+ }, callback);
+ }
+ const https = NodePackages.get("https");
+ return https.request(url, {
+ headers
+ }, callback);
+}
+var PDFNodeStream = class {
+ constructor(source) {
+ this.source = source;
+ this.url = parseUrlOrPath(source.url);
+ this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:";
+ this.isFsUrl = this.url.protocol === "file:";
+ this.httpHeaders = this.isHttp && source.httpHeaders || {};
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+ get _progressiveDataLength() {
+ var _a2, _b;
+ return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0;
+ }
+ getFullReader() {
+ assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
+ this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
+ return this._fullRequestReader;
+ }
+ getRangeReader(start, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+ const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);
+ this._rangeRequestReaders.push(rangeReader);
+ return rangeReader;
+ }
+ cancelAllRequests(reason) {
+ var _a2;
+ (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason);
+ for (const reader of this._rangeRequestReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ }
+};
+var BaseFullReader = class {
+ 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();
+ }
+ 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() {
+ var _a2;
+ await this._readCapability.promise;
+ if (this._done) {
+ return {
+ value: void 0,
+ 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;
+ (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, {
+ 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);
+ }
+ }
+};
+var BaseRangeReader = class {
+ constructor(stream) {
+ 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;
+ }
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+ async read() {
+ var _a2;
+ await this._readCapability.promise;
+ if (this._done) {
+ return {
+ value: void 0,
+ 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;
+ (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, {
+ 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);
+ }
+ }
+};
+var PDFNodeStreamFullReader = class extends BaseFullReader {
+ constructor(stream) {
+ super(stream);
+ const handleResponse = (response) => {
+ if (response.statusCode === 404) {
+ const error = new MissingPDFException(`Missing PDF "${this._url}".`);
+ this._storedError = error;
+ this._headersCapability.reject(error);
+ return;
+ }
+ this._headersCapability.resolve();
+ this._setReadableStream(response);
+ const getResponseHeader = (name) => this._readableStream.headers[name.toLowerCase()];
+ const {
+ allowRangeRequests,
+ suggestedLength
+ } = validateRangeRequestCapabilities({
+ getResponseHeader,
+ isHttp: stream.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+ this._isRangeSupported = allowRangeRequests;
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = extractFilenameFromHeader(getResponseHeader);
+ };
+ this._request = createRequest(this._url, stream.httpHeaders, handleResponse);
+ this._request.on("error", (reason) => {
+ this._storedError = reason;
+ this._headersCapability.reject(reason);
+ });
+ this._request.end();
+ }
+};
+var PDFNodeStreamRangeReader = class extends BaseRangeReader {
+ constructor(stream, start, end) {
+ super(stream);
+ this._httpHeaders = {};
+ for (const property in stream.httpHeaders) {
+ const value = stream.httpHeaders[property];
+ if (value === void 0) {
+ continue;
+ }
+ this._httpHeaders[property] = value;
+ }
+ this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
+ const handleResponse = (response) => {
+ if (response.statusCode === 404) {
+ const error = new MissingPDFException(`Missing PDF "${this._url}".`);
+ this._storedError = error;
+ return;
+ }
+ this._setReadableStream(response);
+ };
+ this._request = createRequest(this._url, this._httpHeaders, handleResponse);
+ this._request.on("error", (reason) => {
+ this._storedError = reason;
+ });
+ this._request.end();
+ }
+};
+var PDFNodeStreamFsFullReader = class extends BaseFullReader {
+ constructor(stream) {
+ super(stream);
+ const fs = NodePackages.get("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 = new MissingPDFException(`Missing PDF "${this._url}".`);
+ }
+ this._storedError = error;
+ this._headersCapability.reject(error);
+ });
+ }
+};
+var PDFNodeStreamFsRangeReader = class extends BaseRangeReader {
+ constructor(stream, start, end) {
+ super(stream);
+ const fs = NodePackages.get("fs");
+ this._setReadableStream(fs.createReadStream(this._url, {
+ start,
+ end: end - 1
+ }));
+ }
+};
+var MAX_TEXT_DIVS_TO_RENDER = 1e5;
+var DEFAULT_FONT_SIZE = 30;
+var DEFAULT_FONT_ASCENT = 0.8;
+var _a, _capability, _container2, _disableProcessItems, _fontInspectorEnabled, _lang, _layoutTextParams, _pageHeight, _pageWidth, _reader, _rootContainer, _rotation, _scale, _styleCache, _textContentItemsStr, _textContentSource, _textDivs, _textDivProperties, _transform, _ascentCache, _canvasContexts, _minFontSize, _pendingTextLayers, _processItems, processItems_fn, _appendText, appendText_fn, _layout, layout_fn, _getCtx, getCtx_fn, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn, _getAscent, getAscent_fn;
+var _TextLayer = class {
+ constructor({
+ textContentSource,
+ container,
+ viewport
+ }) {
+ __privateAdd(this, _processItems);
+ __privateAdd(this, _appendText);
+ __privateAdd(this, _layout);
+ __privateAdd(this, _capability, Promise.withResolvers());
+ __privateAdd(this, _container2, null);
+ __privateAdd(this, _disableProcessItems, false);
+ __privateAdd(this, _fontInspectorEnabled, !!((_a = globalThis.FontInspector) == null ? void 0 : _a.enabled));
+ __privateAdd(this, _lang, null);
+ __privateAdd(this, _layoutTextParams, null);
+ __privateAdd(this, _pageHeight, 0);
+ __privateAdd(this, _pageWidth, 0);
+ __privateAdd(this, _reader, null);
+ __privateAdd(this, _rootContainer, null);
+ __privateAdd(this, _rotation, 0);
+ __privateAdd(this, _scale, 0);
+ __privateAdd(this, _styleCache, /* @__PURE__ */ Object.create(null));
+ __privateAdd(this, _textContentItemsStr, []);
+ __privateAdd(this, _textContentSource, null);
+ __privateAdd(this, _textDivs, []);
+ __privateAdd(this, _textDivProperties, /* @__PURE__ */ new WeakMap());
+ __privateAdd(this, _transform, null);
+ var _a2;
+ if (textContentSource instanceof ReadableStream) {
+ __privateSet(this, _textContentSource, textContentSource);
+ } else if (typeof textContentSource === "object") {
+ __privateSet(this, _textContentSource, new ReadableStream({
+ start(controller) {
+ controller.enqueue(textContentSource);
+ controller.close();
+ }
+ }));
+ } else {
+ throw new Error('No "textContentSource" parameter specified.');
+ }
+ __privateSet(this, _container2, __privateSet(this, _rootContainer, container));
+ __privateSet(this, _scale, viewport.scale * (globalThis.devicePixelRatio || 1));
+ __privateSet(this, _rotation, viewport.rotation);
+ __privateSet(this, _layoutTextParams, {
+ prevFontSize: null,
+ prevFontFamily: null,
+ div: null,
+ properties: null,
+ ctx: null
+ });
+ const {
+ pageWidth,
+ pageHeight,
+ pageX,
+ pageY
+ } = viewport.rawDims;
+ __privateSet(this, _transform, [1, 0, 0, -1, -pageX, pageY + pageHeight]);
+ __privateSet(this, _pageWidth, pageWidth);
+ __privateSet(this, _pageHeight, pageHeight);
+ __privateMethod(_a2 = _TextLayer, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn).call(_a2);
+ setLayerDimensions(container, viewport);
+ __privateGet(this, _capability).promise.catch(() => {
+ }).then(() => {
+ __privateGet(_TextLayer, _pendingTextLayers).delete(this);
+ __privateSet(this, _layoutTextParams, null);
+ __privateSet(this, _styleCache, null);
+ });
+ }
+ render() {
+ const pump = () => {
+ __privateGet(this, _reader).read().then(({
+ value,
+ done
+ }) => {
+ var _a2;
+ if (done) {
+ __privateGet(this, _capability).resolve();
+ return;
+ }
+ (_a2 = __privateGet(this, _lang)) != null ? _a2 : __privateSet(this, _lang, value.lang);
+ Object.assign(__privateGet(this, _styleCache), value.styles);
+ __privateMethod(this, _processItems, processItems_fn).call(this, value.items);
+ pump();
+ }, __privateGet(this, _capability).reject);
+ };
+ __privateSet(this, _reader, __privateGet(this, _textContentSource).getReader());
+ __privateGet(_TextLayer, _pendingTextLayers).add(this);
+ pump();
+ return __privateGet(this, _capability).promise;
+ }
+ update({
+ viewport,
+ onBefore = null
+ }) {
+ var _a2;
+ const scale = viewport.scale * (globalThis.devicePixelRatio || 1);
+ const rotation = viewport.rotation;
+ if (rotation !== __privateGet(this, _rotation)) {
+ onBefore == null ? void 0 : onBefore();
+ __privateSet(this, _rotation, rotation);
+ setLayerDimensions(__privateGet(this, _rootContainer), {
+ rotation
+ });
+ }
+ if (scale !== __privateGet(this, _scale)) {
+ onBefore == null ? void 0 : onBefore();
+ __privateSet(this, _scale, scale);
+ const params = {
+ prevFontSize: null,
+ prevFontFamily: null,
+ div: null,
+ properties: null,
+ ctx: __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang))
+ };
+ for (const div of __privateGet(this, _textDivs)) {
+ params.properties = __privateGet(this, _textDivProperties).get(div);
+ params.div = div;
+ __privateMethod(this, _layout, layout_fn).call(this, params);
+ }
+ }
+ }
+ cancel() {
+ var _a2;
+ const abortEx = new AbortException("TextLayer task cancelled.");
+ (_a2 = __privateGet(this, _reader)) == null ? void 0 : _a2.cancel(abortEx).catch(() => {
+ });
+ __privateSet(this, _reader, null);
+ __privateGet(this, _capability).reject(abortEx);
+ }
+ get textDivs() {
+ return __privateGet(this, _textDivs);
+ }
+ get textContentItemsStr() {
+ return __privateGet(this, _textContentItemsStr);
+ }
+ static cleanup() {
+ if (__privateGet(this, _pendingTextLayers).size > 0) {
+ return;
+ }
+ __privateGet(this, _ascentCache).clear();
+ for (const {
+ canvas
+ } of __privateGet(this, _canvasContexts).values()) {
+ canvas.remove();
+ }
+ __privateGet(this, _canvasContexts).clear();
+ }
+};
+var TextLayer = _TextLayer;
+_capability = new WeakMap();
+_container2 = new WeakMap();
+_disableProcessItems = new WeakMap();
+_fontInspectorEnabled = new WeakMap();
+_lang = new WeakMap();
+_layoutTextParams = new WeakMap();
+_pageHeight = new WeakMap();
+_pageWidth = new WeakMap();
+_reader = new WeakMap();
+_rootContainer = new WeakMap();
+_rotation = new WeakMap();
+_scale = new WeakMap();
+_styleCache = new WeakMap();
+_textContentItemsStr = new WeakMap();
+_textContentSource = new WeakMap();
+_textDivs = new WeakMap();
+_textDivProperties = new WeakMap();
+_transform = new WeakMap();
+_ascentCache = new WeakMap();
+_canvasContexts = new WeakMap();
+_minFontSize = new WeakMap();
+_pendingTextLayers = new WeakMap();
+_processItems = new WeakSet();
+processItems_fn = function(items) {
+ var _a2, _b, _c;
+ if (__privateGet(this, _disableProcessItems)) {
+ return;
+ }
+ (_c = (_b = __privateGet(this, _layoutTextParams)).ctx) != null ? _c : _b.ctx = __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang));
+ const textDivs = __privateGet(this, _textDivs), textContentItemsStr = __privateGet(this, _textContentItemsStr);
+ for (const item of items) {
+ if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {
+ warn("Ignoring additional textDivs for performance reasons.");
+ __privateSet(this, _disableProcessItems, true);
+ return;
+ }
+ if (item.str === void 0) {
+ if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") {
+ const parent = __privateGet(this, _container2);
+ __privateSet(this, _container2, document.createElement("span"));
+ __privateGet(this, _container2).classList.add("markedContent");
+ if (item.id !== null) {
+ __privateGet(this, _container2).setAttribute("id", `${item.id}`);
+ }
+ parent.append(__privateGet(this, _container2));
+ } else if (item.type === "endMarkedContent") {
+ __privateSet(this, _container2, __privateGet(this, _container2).parentNode);
+ }
+ continue;
+ }
+ textContentItemsStr.push(item.str);
+ __privateMethod(this, _appendText, appendText_fn).call(this, item);
+ }
+};
+_appendText = new WeakSet();
+appendText_fn = function(geom) {
+ var _a2;
+ const textDiv = document.createElement("span");
+ const textDivProperties = {
+ angle: 0,
+ canvasWidth: 0,
+ hasText: geom.str !== "",
+ hasEOL: geom.hasEOL,
+ fontSize: 0
+ };
+ __privateGet(this, _textDivs).push(textDiv);
+ const tx = Util.transform(__privateGet(this, _transform), geom.transform);
+ let angle = Math.atan2(tx[1], tx[0]);
+ const style = __privateGet(this, _styleCache)[geom.fontName];
+ if (style.vertical) {
+ angle += Math.PI / 2;
+ }
+ const fontFamily = __privateGet(this, _fontInspectorEnabled) && style.fontSubstitution || style.fontFamily;
+ const fontHeight = Math.hypot(tx[2], tx[3]);
+ const fontAscent = fontHeight * __privateMethod(_a2 = _TextLayer, _getAscent, getAscent_fn).call(_a2, fontFamily, __privateGet(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(--scale-factor)*";
+ const divStyle = textDiv.style;
+ if (__privateGet(this, _container2) === __privateGet(this, _rootContainer)) {
+ divStyle.left = `${(100 * left / __privateGet(this, _pageWidth)).toFixed(2)}%`;
+ divStyle.top = `${(100 * top / __privateGet(this, _pageHeight)).toFixed(2)}%`;
+ } else {
+ divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`;
+ divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`;
+ }
+ divStyle.fontSize = `${scaleFactorStr}${(__privateGet(_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 (__privateGet(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;
+ }
+ __privateGet(this, _textDivProperties).set(textDiv, textDivProperties);
+ __privateGet(this, _layoutTextParams).div = textDiv;
+ __privateGet(this, _layoutTextParams).properties = textDivProperties;
+ __privateMethod(this, _layout, layout_fn).call(this, __privateGet(this, _layoutTextParams));
+ if (textDivProperties.hasText) {
+ __privateGet(this, _container2).append(textDiv);
+ }
+ if (textDivProperties.hasEOL) {
+ const br = document.createElement("br");
+ br.setAttribute("role", "presentation");
+ __privateGet(this, _container2).append(br);
+ }
+};
+_layout = new WeakSet();
+layout_fn = function(params) {
+ const {
+ div,
+ properties,
+ ctx,
+ prevFontSize,
+ prevFontFamily
+ } = params;
+ const {
+ style
+ } = div;
+ let transform = "";
+ if (__privateGet(_TextLayer, _minFontSize) > 1) {
+ transform = `scale(${1 / __privateGet(_TextLayer, _minFontSize)})`;
+ }
+ if (properties.canvasWidth !== 0 && properties.hasText) {
+ const {
+ fontFamily
+ } = style;
+ const {
+ canvasWidth,
+ fontSize
+ } = properties;
+ if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) {
+ ctx.font = `${fontSize * __privateGet(this, _scale)}px ${fontFamily}`;
+ params.prevFontSize = fontSize;
+ params.prevFontFamily = fontFamily;
+ }
+ const {
+ width
+ } = ctx.measureText(div.textContent);
+ if (width > 0) {
+ transform = `scaleX(${canvasWidth * __privateGet(this, _scale) / width}) ${transform}`;
+ }
+ }
+ if (properties.angle !== 0) {
+ transform = `rotate(${properties.angle}deg) ${transform}`;
+ }
+ if (transform.length > 0) {
+ style.transform = transform;
+ }
+};
+_getCtx = new WeakSet();
+getCtx_fn = function(lang = null) {
+ let canvasContext = __privateGet(this, _canvasContexts).get(lang || (lang = ""));
+ if (!canvasContext) {
+ const canvas = document.createElement("canvas");
+ canvas.className = "hiddenCanvasElement";
+ canvas.lang = lang;
+ document.body.append(canvas);
+ canvasContext = canvas.getContext("2d", {
+ alpha: false,
+ willReadFrequently: true
+ });
+ __privateGet(this, _canvasContexts).set(lang, canvasContext);
+ }
+ return canvasContext;
+};
+_ensureMinFontSizeComputed = new WeakSet();
+ensureMinFontSizeComputed_fn = function() {
+ if (__privateGet(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);
+ __privateSet(this, _minFontSize, div.getBoundingClientRect().height);
+ div.remove();
+};
+_getAscent = new WeakSet();
+getAscent_fn = function(fontFamily, lang) {
+ const cachedAscent = __privateGet(this, _ascentCache).get(fontFamily);
+ if (cachedAscent) {
+ return cachedAscent;
+ }
+ const ctx = __privateMethod(this, _getCtx, getCtx_fn).call(this, lang);
+ const savedFont = ctx.font;
+ ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE;
+ ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;
+ const metrics = ctx.measureText("");
+ let ascent = metrics.fontBoundingBoxAscent;
+ let descent = Math.abs(metrics.fontBoundingBoxDescent);
+ if (ascent) {
+ const ratio2 = ascent / (ascent + descent);
+ __privateGet(this, _ascentCache).set(fontFamily, ratio2);
+ ctx.canvas.width = ctx.canvas.height = 0;
+ ctx.font = savedFont;
+ return ratio2;
+ }
+ ctx.strokeStyle = "red";
+ ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+ ctx.strokeText("g", 0, 0);
+ let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+ descent = 0;
+ for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {
+ if (pixels[i] > 0) {
+ descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);
+ break;
+ }
+ }
+ ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+ ctx.strokeText("A", 0, DEFAULT_FONT_SIZE);
+ pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+ ascent = 0;
+ for (let i = 0, ii = pixels.length; i < ii; i += 4) {
+ if (pixels[i] > 0) {
+ ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);
+ break;
+ }
+ }
+ ctx.canvas.width = ctx.canvas.height = 0;
+ ctx.font = savedFont;
+ const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT;
+ __privateGet(this, _ascentCache).set(fontFamily, ratio);
+ return ratio;
+};
+__privateAdd(TextLayer, _getCtx);
+__privateAdd(TextLayer, _ensureMinFontSizeComputed);
+__privateAdd(TextLayer, _getAscent);
+__privateAdd(TextLayer, _ascentCache, /* @__PURE__ */ new Map());
+__privateAdd(TextLayer, _canvasContexts, /* @__PURE__ */ new Map());
+__privateAdd(TextLayer, _minFontSize, null);
+__privateAdd(TextLayer, _pendingTextLayers, /* @__PURE__ */ new Set());
+var XfaText = class {
+ static textContent(xfa) {
+ const items = [];
+ const output = {
+ items,
+ styles: /* @__PURE__ */ Object.create(null)
+ };
+ function walk(node) {
+ var _a2;
+ if (!node) {
+ return;
+ }
+ let str = null;
+ const name = node.name;
+ if (name === "#text") {
+ str = node.value;
+ } else if (!XfaText.shouldBuildText(name)) {
+ return;
+ } else if ((_a2 = node == null ? void 0 : node.attributes) == null ? void 0 : _a2.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");
+ }
+};
+var DEFAULT_RANGE_CHUNK_SIZE = 65536;
+var RENDERING_CANCELLED_TIMEOUT = 100;
+var DELAYED_CLEANUP_TIMEOUT = 5e3;
+var DefaultCanvasFactory = isNodeJS ? NodeCanvasFactory : DOMCanvasFactory;
+var DefaultCMapReaderFactory = isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory;
+var DefaultFilterFactory = isNodeJS ? NodeFilterFactory : DOMFilterFactory;
+var DefaultStandardFontDataFactory = isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory;
+function getDocument(src = {}) {
+ var _a2, _b;
+ 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 = (_a2 = src.password) != null ? _a2 : 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 verbosity2 = src.verbosity;
+ const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null;
+ const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null;
+ const cMapPacked = src.cMapPacked !== false;
+ const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory;
+ const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null;
+ const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory;
+ const ignoreErrors = src.stopAtErrors !== true;
+ const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;
+ const isEvalSupported2 = src.isEvalSupported !== false;
+ const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS;
+ 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 enableHWA = src.enableHWA === true;
+ const length = rangeTransport ? rangeTransport.length : (_b = src.length) != null ? _b : NaN;
+ const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace;
+ const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI);
+ const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({
+ ownerDocument,
+ enableHWA
+ });
+ const filterFactory = src.filterFactory || new DefaultFilterFactory({
+ docId,
+ ownerDocument
+ });
+ const styleElement = null;
+ setVerbosityLevel(verbosity2);
+ const transportFactory = {
+ canvasFactory,
+ filterFactory
+ };
+ if (!useWorkerFetch) {
+ transportFactory.cMapReaderFactory = new CMapReaderFactory({
+ baseUrl: cMapUrl,
+ isCompressed: cMapPacked
+ });
+ transportFactory.standardFontDataFactory = new StandardFontDataFactory({
+ baseUrl: standardFontDataUrl
+ });
+ }
+ if (!worker) {
+ const workerParams = {
+ verbosity: verbosity2,
+ port: GlobalWorkerOptions.workerPort
+ };
+ worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
+ task._worker = worker;
+ }
+ const docParams = {
+ docId,
+ apiVersion: "4.6.82",
+ data,
+ password,
+ disableAutoFetch,
+ rangeChunkSize,
+ length,
+ docBaseUrl,
+ enableXfa,
+ evaluatorOptions: {
+ maxImageSize,
+ disableFontFace,
+ ignoreErrors,
+ isEvalSupported: isEvalSupported2,
+ isOffscreenCanvasSupported,
+ canvasMaxAreaInBytes,
+ fontExtraProperties,
+ useSystemFonts,
+ cMapUrl: useWorkerFetch ? cMapUrl : null,
+ standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null
+ }
+ };
+ const transportParams = {
+ disableFontFace,
+ fontExtraProperties,
+ ownerDocument,
+ pdfBug,
+ styleElement,
+ loadingParams: {
+ disableAutoFetch,
+ enableXfa
+ }
+ };
+ worker.promise.then(function() {
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+ if (worker.destroyed) {
+ throw new Error("Worker was destroyed");
+ }
+ const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null);
+ let networkStream;
+ if (rangeTransport) {
+ networkStream = new PDFDataTransportStream(rangeTransport, {
+ disableRange,
+ disableStream
+ });
+ } else if (!data) {
+ if (!url) {
+ throw new Error("getDocument - no `url` parameter provided.");
+ }
+ const createPDFNetworkStream = (params) => {
+ if (isNodeJS) {
+ const isFetchSupported = function() {
+ return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype;
+ };
+ return isFetchSupported() && isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNodeStream(params);
+ }
+ return isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNetworkStream(params);
+ };
+ networkStream = createPDFNetworkStream({
+ 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;
+ }
+ try {
+ return new URL(val, window.location).href;
+ } catch (e) {
+ if (isNodeJS && typeof val === "string") {
+ return val;
+ }
+ }
+ 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 == null ? void 0 : 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 isRefProxy(ref) {
+ return typeof ref === "object" && Number.isInteger(ref == null ? void 0 : ref.num) && ref.num >= 0 && Number.isInteger(ref == null ? void 0 : ref.gen) && ref.gen >= 0;
+}
+var _docId2;
+var _PDFDocumentLoadingTask = class {
+ constructor() {
+ this._capability = Promise.withResolvers();
+ this._transport = null;
+ this._worker = null;
+ this.docId = `d${__privateWrapper(_PDFDocumentLoadingTask, _docId2)._++}`;
+ this.destroyed = false;
+ this.onPassword = null;
+ this.onProgress = null;
+ }
+ get promise() {
+ return this._capability.promise;
+ }
+ async destroy() {
+ var _a2, _b, _c;
+ this.destroyed = true;
+ try {
+ if ((_a2 = this._worker) == null ? void 0 : _a2.port) {
+ this._worker._pendingDestroy = true;
+ }
+ await ((_b = this._transport) == null ? void 0 : _b.destroy());
+ } catch (ex) {
+ if ((_c = this._worker) == null ? void 0 : _c.port) {
+ delete this._worker._pendingDestroy;
+ }
+ throw ex;
+ }
+ this._transport = null;
+ if (this._worker) {
+ this._worker.destroy();
+ this._worker = null;
+ }
+ }
+};
+var PDFDocumentLoadingTask = _PDFDocumentLoadingTask;
+_docId2 = new WeakMap();
+__privateAdd(PDFDocumentLoadingTask, _docId2, 0);
+var PDFDataRangeTransport = class {
+ 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() {
+ }
+};
+var PDFDocumentProxy = class {
+ constructor(pdfInfo, transport) {
+ this._pdfInfo = pdfInfo;
+ this._transport = transport;
+ }
+ get annotationStorage() {
+ return this._transport.annotationStorage;
+ }
+ 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();
+ }
+};
+var _delayedCleanupTimeout, _pendingCleanup, _tryCleanup, tryCleanup_fn, _abortDelayedCleanup, abortDelayedCleanup_fn;
+var PDFPageProxy = class {
+ constructor(pageIndex, pageInfo, transport, pdfBug = false) {
+ __privateAdd(this, _tryCleanup);
+ __privateAdd(this, _abortDelayedCleanup);
+ __privateAdd(this, _delayedCleanupTimeout, null);
+ __privateAdd(this, _pendingCleanup, false);
+ this._pageIndex = pageIndex;
+ this._pageInfo = pageInfo;
+ this._transport = transport;
+ this._stats = pdfBug ? new StatTimer() : null;
+ this._pdfBug = pdfBug;
+ this.commonObjs = transport.commonObjs;
+ this.objs = new PDFObjects();
+ this._maybeCleanupAfterRender = false;
+ this._intentStates = /* @__PURE__ */ 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,
+ 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() {
+ var _a2;
+ return ((_a2 = this._transport._htmlForXfa) == null ? void 0 : _a2.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
+ }) {
+ var _a2, _b;
+ (_a2 = this._stats) == null ? void 0 : _a2.time("Overall");
+ const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing);
+ const {
+ renderingIntent,
+ cacheKey
+ } = intentArgs;
+ __privateSet(this, _pendingCleanup, false);
+ __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this);
+ optionalContentConfigPromise || (optionalContentConfigPromise = this._transport.getOptionalContentConfig(renderingIntent));
+ let intentState = this._intentStates.get(cacheKey);
+ if (!intentState) {
+ intentState = /* @__PURE__ */ 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
+ };
+ (_b = this._stats) == null ? void 0 : _b.time("Page Request");
+ this._pumpOperatorList(intentArgs);
+ }
+ const complete = (error) => {
+ var _a3;
+ intentState.renderTasks.delete(internalRenderTask);
+ if (this._maybeCleanupAfterRender || intentPrint) {
+ __privateSet(this, _pendingCleanup, true);
+ }
+ __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, !intentPrint);
+ 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 ((_a3 = globalThis.Stats) == null ? void 0 : _a3.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 || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(internalRenderTask);
+ const renderTask = internalRenderTask.task;
+ Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {
+ var _a3;
+ if (this.destroyed) {
+ complete();
+ return;
+ }
+ (_a3 = this._stats) == null ? void 0 : _a3.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
+ } = {}) {
+ var _a2;
+ 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 = /* @__PURE__ */ Object.create(null);
+ this._intentStates.set(intentArgs.cacheKey, intentState);
+ }
+ let opListTask;
+ if (!intentState.opListReadCapability) {
+ opListTask = /* @__PURE__ */ Object.create(null);
+ opListTask.operatorListChanged = operatorListChanged;
+ intentState.opListReadCapability = Promise.withResolvers();
+ (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(opListTask);
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false,
+ separateAnnots: null
+ };
+ (_a2 = this._stats) == null ? void 0 : _a2.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
+ }) {
+ var _a2;
+ if (done) {
+ resolve(textContent);
+ return;
+ }
+ (_a2 = textContent.lang) != null ? _a2 : 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: /* @__PURE__ */ 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();
+ __privateSet(this, _pendingCleanup, false);
+ __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this);
+ return Promise.all(waitOn);
+ }
+ cleanup(resetStats = false) {
+ __privateSet(this, _pendingCleanup, true);
+ const success = __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false);
+ if (resetStats && success) {
+ this._stats && (this._stats = new StatTimer());
+ }
+ return success;
+ }
+ _startRenderPage(transparency, cacheKey) {
+ var _a2, _b;
+ const intentState = this._intentStates.get(cacheKey);
+ if (!intentState) {
+ return;
+ }
+ (_a2 = this._stats) == null ? void 0 : _a2.timeEnd("Page Request");
+ (_b = intentState.displayReadyCapability) == null ? void 0 : _b.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) {
+ __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true);
+ }
+ }
+ _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();
+ }
+ __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true);
+ }
+ 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 < 1e3) {
+ 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;
+ }
+};
+_delayedCleanupTimeout = new WeakMap();
+_pendingCleanup = new WeakMap();
+_tryCleanup = new WeakSet();
+tryCleanup_fn = function(delayed = false) {
+ __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this);
+ if (!__privateGet(this, _pendingCleanup) || this.destroyed) {
+ return false;
+ }
+ if (delayed) {
+ __privateSet(this, _delayedCleanupTimeout, setTimeout(() => {
+ __privateSet(this, _delayedCleanupTimeout, null);
+ __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false);
+ }, DELAYED_CLEANUP_TIMEOUT));
+ return false;
+ }
+ for (const {
+ renderTasks,
+ operatorList
+ } of this._intentStates.values()) {
+ if (renderTasks.size > 0 || !operatorList.lastChunk) {
+ return false;
+ }
+ }
+ this._intentStates.clear();
+ this.objs.clear();
+ __privateSet(this, _pendingCleanup, false);
+ return true;
+};
+_abortDelayedCleanup = new WeakSet();
+abortDelayedCleanup_fn = function() {
+ if (__privateGet(this, _delayedCleanupTimeout)) {
+ clearTimeout(__privateGet(this, _delayedCleanupTimeout));
+ __privateSet(this, _delayedCleanupTimeout, null);
+ }
+};
+var _listeners, _deferred;
+var LoopbackPort = class {
+ constructor() {
+ __privateAdd(this, _listeners, /* @__PURE__ */ new Set());
+ __privateAdd(this, _deferred, Promise.resolve());
+ }
+ postMessage(obj, transfer) {
+ const event = {
+ data: structuredClone(obj, transfer ? {
+ transfer
+ } : null)
+ };
+ __privateGet(this, _deferred).then(() => {
+ for (const listener of __privateGet(this, _listeners)) {
+ listener.call(this, event);
+ }
+ });
+ }
+ addEventListener(name, listener) {
+ __privateGet(this, _listeners).add(listener);
+ }
+ removeEventListener(name, listener) {
+ __privateGet(this, _listeners).delete(listener);
+ }
+ terminate() {
+ __privateGet(this, _listeners).clear();
+ }
+};
+_listeners = new WeakMap();
+_deferred = new WeakMap();
+var _fakeWorkerId, _isWorkerDisabled, _workerPorts, _resolve, resolve_fn, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get;
+var _PDFWorker = class {
+ constructor({
+ name = null,
+ port = null,
+ verbosity: verbosity2 = getVerbosityLevel()
+ } = {}) {
+ __privateAdd(this, _resolve);
+ var _a2;
+ this.name = name;
+ this.destroyed = false;
+ this.verbosity = verbosity2;
+ this._readyCapability = Promise.withResolvers();
+ this._port = null;
+ this._webWorker = null;
+ this._messageHandler = null;
+ if (port) {
+ if ((_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.has(port)) {
+ throw new Error("Cannot use more than one PDFWorker per port.");
+ }
+ (__privateGet(_PDFWorker, _workerPorts) || __privateSet(_PDFWorker, _workerPorts, /* @__PURE__ */ new WeakMap())).set(port, this);
+ this._initializeFromPort(port);
+ return;
+ }
+ this._initialize();
+ }
+ get promise() {
+ if (isNodeJS) {
+ return Promise.all([NodePackages.promise, this._readyCapability.promise]);
+ }
+ return this._readyCapability.promise;
+ }
+ 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() {
+ });
+ __privateMethod(this, _resolve, resolve_fn).call(this);
+ }
+ _initialize() {
+ if (__privateGet(_PDFWorker, _isWorkerDisabled) || __privateGet(_PDFWorker, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) {
+ this._setupFakeWorker();
+ return;
+ }
+ let {
+ workerSrc
+ } = _PDFWorker;
+ try {
+ if (!_PDFWorker._isSameOrigin(window.location.href, 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;
+ __privateMethod(this, _resolve, resolve_fn).call(this);
+ });
+ messageHandler.on("ready", (data) => {
+ ac.abort();
+ if (this.destroyed) {
+ terminateEarly();
+ return;
+ }
+ try {
+ sendTest();
+ } catch (e) {
+ this._setupFakeWorker();
+ }
+ });
+ const sendTest = () => {
+ const testObj = new Uint8Array();
+ messageHandler.send("test", testObj, [testObj.buffer]);
+ };
+ sendTest();
+ return;
+ } catch (e) {
+ info("The worker has been disabled.");
+ }
+ this._setupFakeWorker();
+ }
+ _setupFakeWorker() {
+ if (!__privateGet(_PDFWorker, _isWorkerDisabled)) {
+ warn("Setting up fake worker.");
+ __privateSet(_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${__privateWrapper(_PDFWorker, _fakeWorkerId)._++}`;
+ const workerHandler = new MessageHandler(id + "_worker", id, port);
+ WorkerMessageHandler.setup(workerHandler, port);
+ this._messageHandler = new MessageHandler(id, id + "_worker", port);
+ __privateMethod(this, _resolve, resolve_fn).call(this);
+ }).catch((reason) => {
+ this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
+ });
+ }
+ destroy() {
+ var _a2;
+ this.destroyed = true;
+ if (this._webWorker) {
+ this._webWorker.terminate();
+ this._webWorker = null;
+ }
+ (_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.delete(this._port);
+ this._port = null;
+ if (this._messageHandler) {
+ this._messageHandler.destroy();
+ this._messageHandler = null;
+ }
+ }
+ static fromPort(params) {
+ var _a2;
+ if (!(params == null ? void 0 : params.port)) {
+ throw new Error("PDFWorker.fromPort - invalid method signature.");
+ }
+ const cachedPort = (_a2 = __privateGet(this, _workerPorts)) == null ? void 0 : _a2.get(params.port);
+ if (cachedPort) {
+ if (cachedPort._pendingDestroy) {
+ throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");
+ }
+ return cachedPort;
+ }
+ return new _PDFWorker(params);
+ }
+ static get workerSrc() {
+ if (GlobalWorkerOptions.workerSrc) {
+ return GlobalWorkerOptions.workerSrc;
+ }
+ throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+ static get _setupFakeWorkerGlobal() {
+ const loader = async () => {
+ if (__privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) {
+ return __privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get);
+ }
+ const worker = await import(
+ /*webpackIgnore: true*/
+ this.workerSrc
+ );
+ return worker.WorkerMessageHandler;
+ };
+ return shadow(this, "_setupFakeWorkerGlobal", loader());
+ }
+};
+var PDFWorker = _PDFWorker;
+_fakeWorkerId = new WeakMap();
+_isWorkerDisabled = new WeakMap();
+_workerPorts = new WeakMap();
+_resolve = new WeakSet();
+resolve_fn = function() {
+ this._readyCapability.resolve();
+ this._messageHandler.send("configure", {
+ verbosity: this.verbosity
+ });
+};
+_mainThreadWorkerMessageHandler = new WeakSet();
+mainThreadWorkerMessageHandler_get = function() {
+ var _a2;
+ try {
+ return ((_a2 = globalThis.pdfjsWorker) == null ? void 0 : _a2.WorkerMessageHandler) || null;
+ } catch (e) {
+ return null;
+ }
+};
+__privateAdd(PDFWorker, _mainThreadWorkerMessageHandler);
+__privateAdd(PDFWorker, _fakeWorkerId, 0);
+__privateAdd(PDFWorker, _isWorkerDisabled, false);
+__privateAdd(PDFWorker, _workerPorts, void 0);
+(() => {
+ if (isNodeJS) {
+ __privateSet(_PDFWorker, _isWorkerDisabled, true);
+ GlobalWorkerOptions.workerSrc || (GlobalWorkerOptions.workerSrc = "./pdf.worker.mjs");
+ }
+ _PDFWorker._isSameOrigin = (baseUrl, otherUrl) => {
+ let base;
+ try {
+ base = new URL(baseUrl);
+ if (!base.origin || base.origin === "null") {
+ return false;
+ }
+ } catch (e) {
+ return false;
+ }
+ const other = new URL(otherUrl, base);
+ return base.origin === other.origin;
+ };
+ _PDFWorker._createCDNWrapper = (url) => {
+ const wrapper = `await import("${url}");`;
+ return URL.createObjectURL(new Blob([wrapper], {
+ type: "text/javascript"
+ }));
+ };
+})();
+var _methodPromises, _pageCache, _pagePromises, _pageRefCache, _passwordCapability, _cacheSimpleMethod, cacheSimpleMethod_fn;
+var WorkerTransport = class {
+ constructor(messageHandler, loadingTask, networkStream, params, factory) {
+ __privateAdd(this, _cacheSimpleMethod);
+ __privateAdd(this, _methodPromises, /* @__PURE__ */ new Map());
+ __privateAdd(this, _pageCache, /* @__PURE__ */ new Map());
+ __privateAdd(this, _pagePromises, /* @__PURE__ */ new Map());
+ __privateAdd(this, _pageRefCache, /* @__PURE__ */ new Map());
+ __privateAdd(this, _passwordCapability, null);
+ this.messageHandler = messageHandler;
+ this.loadingTask = loadingTask;
+ this.commonObjs = new PDFObjects();
+ this.fontLoader = new FontLoader({
+ ownerDocument: params.ownerDocument,
+ styleElement: params.styleElement
+ });
+ this.loadingParams = params.loadingParams;
+ this._params = params;
+ this.canvasFactory = factory.canvasFactory;
+ this.filterFactory = factory.filterFactory;
+ this.cMapReaderFactory = factory.cMapReaderFactory;
+ this.standardFontDataFactory = factory.standardFontDataFactory;
+ this.destroyed = false;
+ this.destroyCapability = null;
+ this._networkStream = networkStream;
+ this._fullReader = null;
+ this._lastProgress = null;
+ this.downloadInfoCapability = Promise.withResolvers();
+ this.setupMessageHandler();
+ }
+ get annotationStorage() {
+ return shadow(this, "annotationStorage", new AnnotationStorage());
+ }
+ getRenderingIntent(intent, 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() {
+ var _a2;
+ if (this.destroyCapability) {
+ return this.destroyCapability.promise;
+ }
+ this.destroyed = true;
+ this.destroyCapability = Promise.withResolvers();
+ (_a2 = __privateGet(this, _passwordCapability)) == null ? void 0 : _a2.reject(new Error("Worker was destroyed during onPassword callback"));
+ const waitOn = [];
+ for (const page of __privateGet(this, _pageCache).values()) {
+ waitOn.push(page._destroy());
+ }
+ __privateGet(this, _pageCache).clear();
+ __privateGet(this, _pagePromises).clear();
+ __privateGet(this, _pageRefCache).clear();
+ if (this.hasOwnProperty("annotationStorage")) {
+ this.annotationStorage.resetModified();
+ }
+ const terminated = this.messageHandler.sendWithPromise("Terminate", null);
+ waitOn.push(terminated);
+ Promise.all(waitOn).then(() => {
+ var _a3;
+ this.commonObjs.clear();
+ this.fontLoader.clear();
+ __privateGet(this, _methodPromises).clear();
+ this.filterFactory.destroy();
+ TextLayer.cleanup();
+ (_a3 = this._networkStream) == null ? void 0 : _a3.cancelAllRequests(new AbortException("Worker was terminated."));
+ if (this.messageHandler) {
+ 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", (data) => {
+ const headersCapability = Promise.withResolvers();
+ const fullReader = this._fullReader;
+ fullReader.headersReady.then(() => {
+ var _a2;
+ if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
+ if (this._lastProgress) {
+ (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, this._lastProgress);
+ }
+ fullReader.onProgress = (evt) => {
+ var _a3;
+ (_a3 = loadingTask.onProgress) == null ? void 0 : _a3.call(loadingTask, {
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ };
+ }
+ headersCapability.resolve({
+ isStreamingSupported: fullReader.isStreamingSupported,
+ isRangeSupported: fullReader.isRangeSupported,
+ contentLength: fullReader.contentLength
+ });
+ }, headersCapability.reject);
+ return headersCapability.promise;
+ });
+ 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", function(ex) {
+ let reason;
+ switch (ex.name) {
+ case "PasswordException":
+ reason = new PasswordException(ex.message, ex.code);
+ break;
+ case "InvalidPDFException":
+ reason = new InvalidPDFException(ex.message);
+ break;
+ case "MissingPDFException":
+ reason = new MissingPDFException(ex.message);
+ break;
+ case "UnexpectedResponseException":
+ reason = new UnexpectedResponseException(ex.message, ex.status);
+ break;
+ case "UnknownErrorException":
+ reason = new UnknownErrorException(ex.message, ex.details);
+ break;
+ default:
+ unreachable("DocException - expected a valid Error.");
+ }
+ loadingTask._capability.reject(reason);
+ });
+ messageHandler.on("PasswordRequest", (exception) => {
+ __privateSet(this, _passwordCapability, Promise.withResolvers());
+ if (loadingTask.onPassword) {
+ const updatePassword = (password) => {
+ if (password instanceof Error) {
+ __privateGet(this, _passwordCapability).reject(password);
+ } else {
+ __privateGet(this, _passwordCapability).resolve({
+ password
+ });
+ }
+ };
+ try {
+ loadingTask.onPassword(updatePassword, exception.code);
+ } catch (ex) {
+ __privateGet(this, _passwordCapability).reject(ex);
+ }
+ } else {
+ __privateGet(this, _passwordCapability).reject(new PasswordException(exception.message, exception.code));
+ }
+ return __privateGet(this, _passwordCapability).promise;
+ });
+ messageHandler.on("DataLoaded", (data) => {
+ var _a2;
+ (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, {
+ loaded: data.length,
+ total: data.length
+ });
+ this.downloadInfoCapability.resolve(data);
+ });
+ messageHandler.on("StartRenderPage", (data) => {
+ if (this.destroyed) {
+ return;
+ }
+ const page = __privateGet(this, _pageCache).get(data.pageIndex);
+ page._startRenderPage(data.transparency, data.cacheKey);
+ });
+ messageHandler.on("commonobj", ([id, type, exportedData]) => {
+ var _a2;
+ if (this.destroyed) {
+ return null;
+ }
+ if (this.commonObjs.has(id)) {
+ return null;
+ }
+ switch (type) {
+ case "Font":
+ const {
+ disableFontFace,
+ fontExtraProperties,
+ pdfBug
+ } = this._params;
+ if ("error" in exportedData) {
+ const exportedError = exportedData.error;
+ warn(`Error during font loading: ${exportedError}`);
+ this.commonObjs.resolve(id, exportedError);
+ break;
+ }
+ const inspectFont = pdfBug && ((_a2 = globalThis.FontInspector) == null ? void 0 : _a2.enabled) ? (font2, url) => globalThis.FontInspector.fontAdded(font2, url) : null;
+ const font = new FontFaceObject(exportedData, {
+ disableFontFace,
+ inspectFont
+ });
+ this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", {
+ id
+ })).finally(() => {
+ if (!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 __privateGet(this, _pageCache).values()) {
+ for (const [, data] of pageProxy.objs) {
+ if ((data == null ? void 0 : 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]) => {
+ var _a2;
+ if (this.destroyed) {
+ return;
+ }
+ const pageProxy = __privateGet(this, _pageCache).get(pageIndex);
+ if (pageProxy.objs.has(id)) {
+ return;
+ }
+ if (pageProxy._intentStates.size === 0) {
+ (_a2 = imageData == null ? void 0 : imageData.bitmap) == null ? void 0 : _a2.close();
+ return;
+ }
+ switch (type) {
+ case "Image":
+ pageProxy.objs.resolve(id, imageData);
+ if ((imageData == null ? void 0 : imageData.dataLen) > MAX_IMAGE_SIZE_TO_CACHE) {
+ pageProxy._maybeCleanupAfterRender = true;
+ }
+ break;
+ case "Pattern":
+ pageProxy.objs.resolve(id, imageData);
+ break;
+ default:
+ throw new Error(`Got unknown object type ${type}`);
+ }
+ });
+ messageHandler.on("DocProgress", (data) => {
+ var _a2;
+ if (this.destroyed) {
+ return;
+ }
+ (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, {
+ loaded: data.loaded,
+ total: data.total
+ });
+ });
+ messageHandler.on("FetchBuiltInCMap", (data) => {
+ if (this.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed."));
+ }
+ if (!this.cMapReaderFactory) {
+ return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."));
+ }
+ return this.cMapReaderFactory.fetch(data);
+ });
+ messageHandler.on("FetchStandardFontData", (data) => {
+ if (this.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed."));
+ }
+ if (!this.standardFontDataFactory) {
+ return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter."));
+ }
+ return this.standardFontDataFactory.fetch(data);
+ });
+ }
+ getData() {
+ return this.messageHandler.sendWithPromise("GetData", null);
+ }
+ saveDocument() {
+ var _a2, _b;
+ 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: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : 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 = __privateGet(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) {
+ __privateGet(this, _pageRefCache).set(pageInfo.refStr, pageNumber);
+ }
+ const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
+ __privateGet(this, _pageCache).set(pageIndex, page);
+ return page;
+ });
+ __privateGet(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 __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetFieldObjects");
+ }
+ hasJSActions() {
+ return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "HasJSActions");
+ }
+ getCalculationOrderIds() {
+ return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
+ }
+ getDestinations() {
+ return this.messageHandler.sendWithPromise("GetDestinations", null);
+ }
+ getDestination(id) {
+ if (typeof id !== "string") {
+ return Promise.reject(new Error("Invalid destination request."));
+ }
+ return this.messageHandler.sendWithPromise("GetDestination", {
+ id
+ });
+ }
+ getPageLabels() {
+ return this.messageHandler.sendWithPromise("GetPageLabels", null);
+ }
+ getPageLayout() {
+ return this.messageHandler.sendWithPromise("GetPageLayout", null);
+ }
+ getPageMode() {
+ return this.messageHandler.sendWithPromise("GetPageMode", null);
+ }
+ getViewerPreferences() {
+ return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
+ }
+ getOpenAction() {
+ return this.messageHandler.sendWithPromise("GetOpenAction", null);
+ }
+ getAttachments() {
+ return this.messageHandler.sendWithPromise("GetAttachments", null);
+ }
+ getDocJSActions() {
+ return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetDocJSActions");
+ }
+ getPageJSActions(pageIndex) {
+ return this.messageHandler.sendWithPromise("GetPageJSActions", {
+ pageIndex
+ });
+ }
+ getStructTree(pageIndex) {
+ return this.messageHandler.sendWithPromise("GetStructTree", {
+ pageIndex
+ });
+ }
+ getOutline() {
+ return this.messageHandler.sendWithPromise("GetOutline", null);
+ }
+ getOptionalContentConfig(renderingIntent) {
+ return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetOptionalContentConfig").then((data) => new OptionalContentConfig(data, renderingIntent));
+ }
+ getPermissions() {
+ return this.messageHandler.sendWithPromise("GetPermissions", null);
+ }
+ getMetadata() {
+ const name = "GetMetadata", cachedPromise = __privateGet(this, _methodPromises).get(name);
+ if (cachedPromise) {
+ return cachedPromise;
+ }
+ const promise = this.messageHandler.sendWithPromise(name, null).then((results) => {
+ var _a2, _b, _c, _d;
+ return {
+ info: results[0],
+ metadata: results[1] ? new Metadata(results[1]) : null,
+ contentDispositionFilename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null,
+ contentLength: (_d = (_c = this._fullReader) == null ? void 0 : _c.contentLength) != null ? _d : null
+ };
+ });
+ __privateGet(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 __privateGet(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();
+ }
+ __privateGet(this, _methodPromises).clear();
+ this.filterFactory.destroy(true);
+ TextLayer.cleanup();
+ }
+ cachedPageNumber(ref) {
+ var _a2;
+ if (!isRefProxy(ref)) {
+ return null;
+ }
+ const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;
+ return (_a2 = __privateGet(this, _pageRefCache).get(refStr)) != null ? _a2 : null;
+ }
+};
+_methodPromises = new WeakMap();
+_pageCache = new WeakMap();
+_pagePromises = new WeakMap();
+_pageRefCache = new WeakMap();
+_passwordCapability = new WeakMap();
+_cacheSimpleMethod = new WeakSet();
+cacheSimpleMethod_fn = function(name, data = null) {
+ const cachedPromise = __privateGet(this, _methodPromises).get(name);
+ if (cachedPromise) {
+ return cachedPromise;
+ }
+ const promise = this.messageHandler.sendWithPromise(name, data);
+ __privateGet(this, _methodPromises).set(name, promise);
+ return promise;
+};
+var INITIAL_DATA = Symbol("INITIAL_DATA");
+var _objs, _ensureObj, ensureObj_fn;
+var PDFObjects = class {
+ constructor() {
+ __privateAdd(this, _ensureObj);
+ __privateAdd(this, _objs, /* @__PURE__ */ Object.create(null));
+ }
+ get(objId, callback = null) {
+ if (callback) {
+ const obj2 = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId);
+ obj2.promise.then(() => callback(obj2.data));
+ return null;
+ }
+ const obj = __privateGet(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 = __privateGet(this, _objs)[objId];
+ return !!obj && obj.data !== INITIAL_DATA;
+ }
+ resolve(objId, data = null) {
+ const obj = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId);
+ obj.data = data;
+ obj.resolve();
+ }
+ clear() {
+ var _a2;
+ for (const objId in __privateGet(this, _objs)) {
+ const {
+ data
+ } = __privateGet(this, _objs)[objId];
+ (_a2 = data == null ? void 0 : data.bitmap) == null ? void 0 : _a2.close();
+ }
+ __privateSet(this, _objs, /* @__PURE__ */ Object.create(null));
+ }
+ *[Symbol.iterator]() {
+ for (const objId in __privateGet(this, _objs)) {
+ const {
+ data
+ } = __privateGet(this, _objs)[objId];
+ if (data === INITIAL_DATA) {
+ continue;
+ }
+ yield [objId, data];
+ }
+ }
+};
+_objs = new WeakMap();
+_ensureObj = new WeakSet();
+ensureObj_fn = function(objId) {
+ var _a2;
+ return (_a2 = __privateGet(this, _objs))[objId] || (_a2[objId] = {
+ ...Promise.withResolvers(),
+ data: INITIAL_DATA
+ });
+};
+var _internalRenderTask;
+var RenderTask = class {
+ constructor(internalRenderTask) {
+ __privateAdd(this, _internalRenderTask, null);
+ __privateSet(this, _internalRenderTask, internalRenderTask);
+ this.onContinue = null;
+ }
+ get promise() {
+ return __privateGet(this, _internalRenderTask).capability.promise;
+ }
+ cancel(extraDelay = 0) {
+ __privateGet(this, _internalRenderTask).cancel(null, extraDelay);
+ }
+ get separateAnnots() {
+ const {
+ separateAnnots
+ } = __privateGet(this, _internalRenderTask).operatorList;
+ if (!separateAnnots) {
+ return false;
+ }
+ const {
+ annotationCanvasMap
+ } = __privateGet(this, _internalRenderTask);
+ return separateAnnots.form || separateAnnots.canvas && (annotationCanvasMap == null ? void 0 : annotationCanvasMap.size) > 0;
+ }
+};
+_internalRenderTask = new WeakMap();
+var _rAF, _canvasInUse;
+var _InternalRenderTask = class {
+ constructor({
+ callback,
+ params,
+ objs,
+ commonObjs,
+ annotationCanvasMap,
+ operatorList,
+ pageIndex,
+ canvasFactory,
+ filterFactory,
+ useRequestAnimationFrame = false,
+ pdfBug = false,
+ pageColors = null
+ }) {
+ __privateAdd(this, _rAF, null);
+ this.callback = callback;
+ this.params = params;
+ this.objs = objs;
+ this.commonObjs = commonObjs;
+ this.annotationCanvasMap = annotationCanvasMap;
+ this.operatorListIdx = null;
+ this.operatorList = operatorList;
+ this._pageIndex = pageIndex;
+ this.canvasFactory = canvasFactory;
+ this.filterFactory = filterFactory;
+ this._pdfBug = pdfBug;
+ this.pageColors = pageColors;
+ this.running = false;
+ this.graphicsReadyCallback = null;
+ this.graphicsReady = false;
+ this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
+ this.cancelled = false;
+ this.capability = Promise.withResolvers();
+ this.task = new RenderTask(this);
+ this._cancelBound = this.cancel.bind(this);
+ this._continueBound = this._continue.bind(this);
+ this._scheduleNextBound = this._scheduleNext.bind(this);
+ this._nextBound = this._next.bind(this);
+ this._canvas = params.canvasContext.canvas;
+ }
+ get completed() {
+ return this.capability.promise.catch(function() {
+ });
+ }
+ initializeGraphics({
+ transparency = false,
+ optionalContentConfig
+ }) {
+ var _a2, _b;
+ if (this.cancelled) {
+ return;
+ }
+ if (this._canvas) {
+ if (__privateGet(_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.");
+ }
+ __privateGet(_InternalRenderTask, _canvasInUse).add(this._canvas);
+ }
+ if (this._pdfBug && ((_a2 = globalThis.StepperManager) == null ? void 0 : _a2.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;
+ (_b = this.graphicsReadyCallback) == null ? void 0 : _b.call(this);
+ }
+ cancel(error = null, extraDelay = 0) {
+ var _a2;
+ this.running = false;
+ this.cancelled = true;
+ (_a2 = this.gfx) == null ? void 0 : _a2.endDrawing();
+ if (__privateGet(this, _rAF)) {
+ window.cancelAnimationFrame(__privateGet(this, _rAF));
+ __privateSet(this, _rAF, null);
+ }
+ __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas);
+ this.callback(error || new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay));
+ }
+ operatorListChanged() {
+ var _a2;
+ if (!this.graphicsReady) {
+ this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound);
+ return;
+ }
+ (_a2 = this.stepper) == null ? void 0 : _a2.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) {
+ __privateSet(this, _rAF, window.requestAnimationFrame(() => {
+ __privateSet(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();
+ __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas);
+ this.callback();
+ }
+ }
+ }
+};
+var InternalRenderTask = _InternalRenderTask;
+_rAF = new WeakMap();
+_canvasInUse = new WeakMap();
+__privateAdd(InternalRenderTask, _canvasInUse, /* @__PURE__ */ new WeakSet());
+var version2 = "4.6.82";
+var build = "9b541910f";
+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));
+}
+var ColorConverters = class {
+ 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];
+ }
+};
+var XfaLayer = class {
+ static setupStorage(html, id, element2, storage, intent) {
+ const storedData = storage.getValue(id, {
+ value: null
+ });
+ switch (element2.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 (element2.attributes.type === "radio" || element2.attributes.type === "checkbox") {
+ if (storedData.value === element2.attributes.xfaOn) {
+ html.setAttribute("checked", true);
+ } else if (storedData.value === element2.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 option2 of element2.children) {
+ if (option2.attributes.value === storedData.value) {
+ option2.attributes.selected = true;
+ } else if (option2.attributes.hasOwnProperty("selected")) {
+ delete option2.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: element2,
+ storage = null,
+ intent,
+ linkService
+ }) {
+ const {
+ attributes
+ } = element2;
+ 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 === void 0) {
+ 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, element2, storage);
+ }
+ }
+ static render(parameters) {
+ var _a2, _b;
+ 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 = ((_a2 = child == null ? void 0 : child.attributes) == null ? void 0 : _a2.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 (((_b = child.children) == null ? void 0 : _b.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;
+ }
+};
+var DEFAULT_TAB_INDEX = 1e3;
+var annotation_layer_DEFAULT_FONT_SIZE = 9;
+var GetElementsByNameSet = /* @__PURE__ */ new WeakSet();
+function getRectDims(rect) {
+ return {
+ width: rect[2] - rect[0],
+ height: rect[3] - rect[1]
+ };
+}
+var AnnotationElementFactory = class {
+ static create(parameters) {
+ const subtype = parameters.data.annotationType;
+ switch (subtype) {
+ case AnnotationType.LINK:
+ return new LinkAnnotationElement(parameters);
+ case AnnotationType.TEXT:
+ return new TextAnnotationElement(parameters);
+ case AnnotationType.WIDGET:
+ const fieldType = parameters.data.fieldType;
+ switch (fieldType) {
+ case "Tx":
+ return new TextWidgetAnnotationElement(parameters);
+ case "Btn":
+ if (parameters.data.radioButton) {
+ return new RadioButtonWidgetAnnotationElement(parameters);
+ } else if (parameters.data.checkBox) {
+ return new CheckboxWidgetAnnotationElement(parameters);
+ }
+ return new PushButtonWidgetAnnotationElement(parameters);
+ case "Ch":
+ return new ChoiceWidgetAnnotationElement(parameters);
+ case "Sig":
+ return new SignatureWidgetAnnotationElement(parameters);
+ }
+ return new WidgetAnnotationElement(parameters);
+ case AnnotationType.POPUP:
+ return new PopupAnnotationElement(parameters);
+ case AnnotationType.FREETEXT:
+ return new FreeTextAnnotationElement(parameters);
+ case AnnotationType.LINE:
+ return new LineAnnotationElement(parameters);
+ case AnnotationType.SQUARE:
+ return new SquareAnnotationElement(parameters);
+ case AnnotationType.CIRCLE:
+ return new CircleAnnotationElement(parameters);
+ case AnnotationType.POLYLINE:
+ return new PolylineAnnotationElement(parameters);
+ case AnnotationType.CARET:
+ return new CaretAnnotationElement(parameters);
+ case AnnotationType.INK:
+ return new InkAnnotationElement(parameters);
+ case AnnotationType.POLYGON:
+ return new PolygonAnnotationElement(parameters);
+ case AnnotationType.HIGHLIGHT:
+ return new HighlightAnnotationElement(parameters);
+ case AnnotationType.UNDERLINE:
+ return new UnderlineAnnotationElement(parameters);
+ case AnnotationType.SQUIGGLY:
+ return new SquigglyAnnotationElement(parameters);
+ case AnnotationType.STRIKEOUT:
+ return new StrikeOutAnnotationElement(parameters);
+ case AnnotationType.STAMP:
+ return new StampAnnotationElement(parameters);
+ case AnnotationType.FILEATTACHMENT:
+ return new FileAttachmentAnnotationElement(parameters);
+ default:
+ return new AnnotationElement(parameters);
+ }
+ }
+};
+var _updates, _hasBorder, _popupElement, _setRectEdited, setRectEdited_fn;
+var _AnnotationElement = class {
+ constructor(parameters, {
+ isRenderable = false,
+ ignoreBorder = false,
+ createQuadrilaterals = false
+ } = {}) {
+ __privateAdd(this, _setRectEdited);
+ __privateAdd(this, _updates, null);
+ __privateAdd(this, _hasBorder, false);
+ __privateAdd(this, _popupElement, null);
+ this.isRenderable = isRenderable;
+ this.data = parameters.data;
+ this.layer = parameters.layer;
+ this.linkService = parameters.linkService;
+ this.downloadManager = parameters.downloadManager;
+ this.imageResourcesPath = parameters.imageResourcesPath;
+ this.renderForms = parameters.renderForms;
+ this.svgFactory = parameters.svgFactory;
+ this.annotationStorage = parameters.annotationStorage;
+ this.enableScripting = parameters.enableScripting;
+ this.hasJSActions = parameters.hasJSActions;
+ this._fieldObjects = parameters.fieldObjects;
+ this.parent = parameters.parent;
+ if (isRenderable) {
+ this.container = this._createContainer(ignoreBorder);
+ }
+ if (createQuadrilaterals) {
+ this._createQuadrilaterals();
+ }
+ }
+ static _hasPopupData({
+ titleObj,
+ contentsObj,
+ richText
+ }) {
+ return !!((titleObj == null ? void 0 : titleObj.str) || (contentsObj == null ? void 0 : contentsObj.str) || (richText == null ? void 0 : richText.str));
+ }
+ get _isEditable() {
+ return this.data.isEditable;
+ }
+ get hasPopupData() {
+ return _AnnotationElement._hasPopupData(this.data);
+ }
+ updateEdited(params) {
+ var _a2;
+ if (!this.container) {
+ return;
+ }
+ __privateGet(this, _updates) || __privateSet(this, _updates, {
+ rect: this.data.rect.slice(0)
+ });
+ const {
+ rect
+ } = params;
+ if (rect) {
+ __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, rect);
+ }
+ (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.updateEdited(params);
+ }
+ resetEdited() {
+ var _a2;
+ if (!__privateGet(this, _updates)) {
+ return;
+ }
+ __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, __privateGet(this, _updates).rect);
+ (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.resetEdited();
+ __privateSet(this, _updates, null);
+ }
+ _createContainer(ignoreBorder) {
+ const {
+ data,
+ parent: {
+ page,
+ viewport
+ }
+ } = this;
+ const container = document.createElement("section");
+ container.setAttribute("data-annotation-id", data.id);
+ if (!(this instanceof WidgetAnnotationElement)) {
+ container.tabIndex = DEFAULT_TAB_INDEX;
+ }
+ const {
+ style
+ } = container;
+ style.zIndex = this.parent.zIndex++;
+ if (data.popupRef) {
+ container.setAttribute("aria-haspopup", "dialog");
+ }
+ if (data.alternativeText) {
+ container.title = data.alternativeText;
+ }
+ if (data.noRotate) {
+ container.classList.add("norotate");
+ }
+ if (!data.rect || this instanceof PopupAnnotationElement) {
+ const {
+ rotation: rotation2
+ } = data;
+ if (!data.hasOwnCanvas && rotation2 !== 0) {
+ this.setRotation(rotation2, container);
+ }
+ return container;
+ }
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ 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(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`;
+ style.borderRadius = radius;
+ } else if (this instanceof RadioButtonWidgetAnnotationElement) {
+ const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--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) {
+ __privateSet(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;
+ const {
+ width,
+ height
+ } = getRectDims(this.data.rect);
+ let elementWidth, elementHeight;
+ if (angle % 180 === 0) {
+ elementWidth = 100 * width / pageWidth;
+ elementHeight = 100 * height / pageHeight;
+ } else {
+ elementWidth = 100 * height / pageWidth;
+ elementHeight = 100 * width / pageHeight;
+ }
+ container.style.width = `${elementWidth}%`;
+ container.style.height = `${elementHeight}%`;
+ 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 == null ? void 0 : action(jsEvent);
+ }
+ }
+ _setDefaultPropertiesFromJS(element2) {
+ 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: element2
+ };
+ 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 (__privateGet(this, _hasBorder)) {
+ const {
+ borderColor,
+ borderWidth
+ } = style;
+ style.borderWidth = 0;
+ svgBuffer = ["url('data:image/svg+xml;utf8,", `')`);
+ style.backgroundImage = svgBuffer.join("");
+ }
+ this.container.append(svg);
+ this.container.style.clipPath = `url(#${id})`;
+ }
+ _createPopup() {
+ const {
+ container,
+ data
+ } = this;
+ container.setAttribute("aria-haspopup", "dialog");
+ const popup = __privateSet(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() {
+ var _a2;
+ if (this.container) {
+ this.container.hidden = false;
+ }
+ (_a2 = this.popup) == null ? void 0 : _a2.maybeShow();
+ }
+ hide() {
+ var _a2;
+ if (this.container) {
+ this.container.hidden = true;
+ }
+ (_a2 = this.popup) == null ? void 0 : _a2.forceHide();
+ }
+ getElementsToTriggerPopup() {
+ return this.container;
+ }
+ addHighlightArea() {
+ const triggers = this.getElementsToTriggerPopup();
+ if (Array.isArray(triggers)) {
+ for (const element2 of triggers) {
+ element2.classList.add("highlightArea");
+ }
+ } else {
+ triggers.classList.add("highlightArea");
+ }
+ }
+ _editOnDoubleClick() {
+ if (!this._isEditable) {
+ return;
+ }
+ const {
+ annotationEditorType: mode,
+ data: {
+ id: editId
+ }
+ } = this;
+ this.container.addEventListener("dblclick", () => {
+ var _a2;
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("switchannotationeditormode", {
+ source: this,
+ mode,
+ editId
+ });
+ });
+ }
+};
+var AnnotationElement = _AnnotationElement;
+_updates = new WeakMap();
+_hasBorder = new WeakMap();
+_popupElement = new WeakMap();
+_setRectEdited = new WeakSet();
+setRectEdited_fn = function(rect) {
+ const {
+ container: {
+ style
+ },
+ data: {
+ rect: currentRect,
+ rotation
+ },
+ parent: {
+ viewport: {
+ rawDims: {
+ pageWidth,
+ pageHeight,
+ pageX,
+ pageY
+ }
+ }
+ }
+ } = this;
+ currentRect == null ? void 0 : currentRect.splice(0, 4, ...rect);
+ const {
+ width,
+ height
+ } = getRectDims(rect);
+ style.left = `${100 * (rect[0] - pageX) / pageWidth}%`;
+ style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`;
+ if (rotation === 0) {
+ style.width = `${100 * width / pageWidth}%`;
+ style.height = `${100 * height / pageHeight}%`;
+ } else {
+ this.setRotation(rotation);
+ }
+};
+var _setInternalLink, setInternalLink_fn, _bindAttachment, bindAttachment_fn, _bindSetOCGState, bindSetOCGState_fn;
+var LinkAnnotationElement = class extends AnnotationElement {
+ constructor(parameters, options = null) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: !!(options == null ? void 0 : options.ignoreBorder),
+ createQuadrilaterals: true
+ });
+ __privateAdd(this, _setInternalLink);
+ __privateAdd(this, _bindAttachment);
+ __privateAdd(this, _bindSetOCGState);
+ 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) {
+ __privateMethod(this, _bindAttachment, bindAttachment_fn).call(this, link, data.attachment, data.attachmentDest);
+ isBound = true;
+ } else if (data.setOCGState) {
+ __privateMethod(this, _bindSetOCGState, bindSetOCGState_fn).call(this, link, data.setOCGState);
+ isBound = true;
+ } else if (data.dest) {
+ this._bindLink(link, data.dest);
+ isBound = true;
+ } else {
+ if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) {
+ this._bindJSAction(link, data);
+ isBound = true;
+ }
+ if (data.resetForm) {
+ this._bindResetFormAction(link, data.resetForm);
+ isBound = true;
+ } else if (this.isTooltipOnly && !isBound) {
+ this._bindLink(link, "");
+ isBound = true;
+ }
+ }
+ this.container.classList.add("linkAnnotation");
+ if (isBound) {
+ this.container.append(link);
+ }
+ return this.container;
+ }
+ _bindLink(link, destination) {
+ link.href = this.linkService.getDestinationHash(destination);
+ link.onclick = () => {
+ if (destination) {
+ this.linkService.goToDestination(destination);
+ }
+ return false;
+ };
+ if (destination || destination === "") {
+ __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this);
+ }
+ }
+ _bindNamedAction(link, action) {
+ link.href = this.linkService.getAnchorUrl("");
+ link.onclick = () => {
+ this.linkService.executeNamedAction(action);
+ return false;
+ };
+ __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this);
+ }
+ _bindJSAction(link, data) {
+ link.href = this.linkService.getAnchorUrl("");
+ const map = /* @__PURE__ */ 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] = () => {
+ var _a2;
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: data.id,
+ name
+ }
+ });
+ return false;
+ };
+ }
+ if (!link.onclick) {
+ link.onclick = () => false;
+ }
+ __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this);
+ }
+ _bindResetFormAction(link, resetForm) {
+ const otherClickAction = link.onclick;
+ if (!otherClickAction) {
+ link.href = this.linkService.getAnchorUrl("");
+ }
+ __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this);
+ if (!this._fieldObjects) {
+ warn(`_bindResetFormAction - "resetForm" action not supported, ensure that the \`fieldObjects\` parameter is provided.`);
+ if (!otherClickAction) {
+ link.onclick = () => false;
+ }
+ return;
+ }
+ link.onclick = () => {
+ var _a2;
+ otherClickAction == null ? void 0 : 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) {
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: "app",
+ ids: allIds,
+ name: "ResetForm"
+ }
+ });
+ }
+ return false;
+ };
+ }
+};
+_setInternalLink = new WeakSet();
+setInternalLink_fn = function() {
+ this.container.setAttribute("data-internal-link", "");
+};
+_bindAttachment = new WeakSet();
+bindAttachment_fn = function(link, attachment, dest = null) {
+ link.href = this.linkService.getAnchorUrl("");
+ if (attachment.description) {
+ link.title = attachment.description;
+ }
+ link.onclick = () => {
+ var _a2;
+ (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(attachment.content, attachment.filename, dest);
+ return false;
+ };
+ __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this);
+};
+_bindSetOCGState = new WeakSet();
+bindSetOCGState_fn = function(link, action) {
+ link.href = this.linkService.getAnchorUrl("");
+ link.onclick = () => {
+ this.linkService.executeSetOCGState(action);
+ return false;
+ };
+ __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this);
+};
+var TextAnnotationElement = class 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;
+ }
+};
+var WidgetAnnotationElement = class extends AnnotationElement {
+ render() {
+ return this.container;
+ }
+ showElementAndHideCanvas(element2) {
+ var _a2;
+ if (this.data.hasOwnCanvas) {
+ if (((_a2 = element2.previousSibling) == null ? void 0 : _a2.nodeName) === "CANVAS") {
+ element2.previousSibling.hidden = true;
+ }
+ element2.hidden = false;
+ }
+ }
+ _getKeyModifier(event) {
+ return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;
+ }
+ _setEventListener(element2, elementData, baseName, eventName, valueGetter) {
+ if (baseName.includes("mouse")) {
+ element2.addEventListener(baseName, (event) => {
+ var _a2;
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: this.data.id,
+ name: eventName,
+ value: valueGetter(event),
+ shift: event.shiftKey,
+ modifier: this._getKeyModifier(event)
+ }
+ });
+ });
+ } else {
+ element2.addEventListener(baseName, (event) => {
+ var _a2;
+ 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;
+ }
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: this.data.id,
+ name: eventName,
+ value: valueGetter(event)
+ }
+ });
+ });
+ }
+ }
+ _setEventListeners(element2, elementData, names, getter) {
+ var _a2, _b, _c;
+ for (const [baseName, eventName] of names) {
+ if (eventName === "Action" || ((_a2 = this.data.actions) == null ? void 0 : _a2[eventName])) {
+ if (eventName === "Focus" || eventName === "Blur") {
+ elementData || (elementData = {
+ focused: false
+ });
+ }
+ this._setEventListener(element2, elementData, baseName, eventName, getter);
+ if (eventName === "Focus" && !((_b = this.data.actions) == null ? void 0 : _b.Blur)) {
+ this._setEventListener(element2, elementData, "blur", "Blur", null);
+ } else if (eventName === "Blur" && !((_c = this.data.actions) == null ? void 0 : _c.Focus)) {
+ this._setEventListener(element2, elementData, "focus", "Focus", null);
+ }
+ }
+ }
+ }
+ _setBackgroundColor(element2) {
+ const color = this.data.backgroundColor || null;
+ element2.style.backgroundColor = color === null ? "transparent" : Util.makeHexColor(color[0], color[1], color[2]);
+ }
+ _setTextStyle(element2) {
+ const TEXT_ALIGNMENT = ["left", "center", "right"];
+ const {
+ fontColor
+ } = this.data.defaultAppearanceData;
+ const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE;
+ const style = element2.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(--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(element2, isRequired) {
+ if (isRequired) {
+ element2.setAttribute("required", true);
+ } else {
+ element2.removeAttribute("required");
+ }
+ element2.setAttribute("aria-required", isRequired);
+ }
+};
+var TextWidgetAnnotationElement = class 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 element2 of this._getElementsByName(base.name, base.id)) {
+ if (element2.domElement) {
+ element2.domElement[key] = value;
+ }
+ storage.setValue(element2.id, {
+ [keyInStorage]: value
+ });
+ }
+ }
+ render() {
+ var _a2, _b;
+ const storage = this.annotationStorage;
+ const id = this.data.id;
+ this.container.classList.add("textWidgetAnnotation");
+ let element2 = 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 || ((_a2 = this.data.textContent) == null ? void 0 : _a2.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) {
+ element2 = document.createElement("textarea");
+ element2.textContent = fieldFormattedValues != null ? fieldFormattedValues : textContent;
+ if (this.data.doNotScroll) {
+ element2.style.overflowY = "hidden";
+ }
+ } else {
+ element2 = document.createElement("input");
+ element2.type = "text";
+ element2.setAttribute("value", fieldFormattedValues != null ? fieldFormattedValues : textContent);
+ if (this.data.doNotScroll) {
+ element2.style.overflowX = "hidden";
+ }
+ }
+ if (this.data.hasOwnCanvas) {
+ element2.hidden = true;
+ }
+ GetElementsByNameSet.add(element2);
+ element2.setAttribute("data-element-id", id);
+ element2.disabled = this.data.readOnly;
+ element2.name = this.data.fieldName;
+ element2.tabIndex = DEFAULT_TAB_INDEX;
+ this._setRequired(element2, this.data.required);
+ if (maxLen) {
+ element2.maxLength = maxLen;
+ }
+ element2.addEventListener("input", (event) => {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+ this.setPropertyOnSiblings(element2, "value", event.target.value, "value");
+ elementData.formattedValue = null;
+ });
+ element2.addEventListener("resetform", (event) => {
+ var _a3;
+ const defaultValue = (_a3 = this.data.defaultFieldValue) != null ? _a3 : "";
+ element2.value = elementData.userValue = defaultValue;
+ elementData.formattedValue = null;
+ });
+ let blurListener = (event) => {
+ const {
+ formattedValue
+ } = elementData;
+ if (formattedValue !== null && formattedValue !== void 0) {
+ event.target.value = formattedValue;
+ }
+ event.target.scrollLeft = 0;
+ };
+ if (this.enableScripting && this.hasJSActions) {
+ element2.addEventListener("focus", (event) => {
+ var _a3;
+ if (elementData.focused) {
+ return;
+ }
+ const {
+ target
+ } = event;
+ if (elementData.userValue) {
+ target.value = elementData.userValue;
+ }
+ elementData.lastCommittedValue = target.value;
+ elementData.commitKey = 1;
+ if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Focus)) {
+ elementData.focused = true;
+ }
+ });
+ element2.addEventListener("updatefromsandbox", (jsEvent) => {
+ this.showElementAndHideCanvas(jsEvent.target);
+ const actions = {
+ value(event) {
+ var _a3;
+ elementData.userValue = (_a3 = event.detail.value) != null ? _a3 : "";
+ 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 !== void 0 && event.target !== document.activeElement) {
+ event.target.value = formattedValue;
+ }
+ storage.setValue(id, {
+ formattedValue
+ });
+ },
+ selRange(event) {
+ event.target.setSelectionRange(...event.detail.selRange);
+ },
+ charLimit: (event) => {
+ var _a3;
+ 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
+ });
+ (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id,
+ name: "Keystroke",
+ value,
+ willCommit: true,
+ commitKey: 1,
+ selStart: target.selectionStart,
+ selEnd: target.selectionEnd
+ }
+ });
+ }
+ };
+ this._dispatchEventFromSandbox(actions, jsEvent);
+ });
+ element2.addEventListener("keydown", (event) => {
+ var _a3;
+ 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;
+ (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.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;
+ element2.addEventListener("blur", (event) => {
+ var _a3, _b2;
+ if (!elementData.focused || !event.relatedTarget) {
+ return;
+ }
+ if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Blur)) {
+ elementData.focused = false;
+ }
+ const {
+ value
+ } = event.target;
+ elementData.userValue = value;
+ if (elementData.lastCommittedValue !== value) {
+ (_b2 = this.linkService.eventBus) == null ? void 0 : _b2.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 ((_b = this.data.actions) == null ? void 0 : _b.Keystroke) {
+ element2.addEventListener("beforeinput", (event) => {
+ var _a3;
+ 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();
+ (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id,
+ name: "Keystroke",
+ value,
+ change: data || "",
+ willCommit: false,
+ selStart,
+ selEnd
+ }
+ });
+ });
+ }
+ this._setEventListeners(element2, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.value);
+ }
+ if (blurListener) {
+ element2.addEventListener("blur", blurListener);
+ }
+ if (this.data.comb) {
+ const fieldWidth = this.data.rect[2] - this.data.rect[0];
+ const combWidth = fieldWidth / maxLen;
+ element2.classList.add("comb");
+ element2.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`;
+ }
+ } else {
+ element2 = document.createElement("div");
+ element2.textContent = this.data.fieldValue;
+ element2.style.verticalAlign = "middle";
+ element2.style.display = "table-cell";
+ if (this.data.hasOwnCanvas) {
+ element2.hidden = true;
+ }
+ }
+ this._setTextStyle(element2);
+ this._setBackgroundColor(element2);
+ this._setDefaultPropertiesFromJS(element2);
+ this.container.append(element2);
+ return this.container;
+ }
+};
+var SignatureWidgetAnnotationElement = class extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: !!parameters.data.hasOwnCanvas
+ });
+ }
+};
+var CheckboxWidgetAnnotationElement = class 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 element2 = document.createElement("input");
+ GetElementsByNameSet.add(element2);
+ element2.setAttribute("data-element-id", id);
+ element2.disabled = data.readOnly;
+ this._setRequired(element2, this.data.required);
+ element2.type = "checkbox";
+ element2.name = data.fieldName;
+ if (value) {
+ element2.setAttribute("checked", true);
+ }
+ element2.setAttribute("exportValue", data.exportValue);
+ element2.tabIndex = DEFAULT_TAB_INDEX;
+ element2.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
+ });
+ });
+ element2.addEventListener("resetform", (event) => {
+ const defaultValue = data.defaultFieldValue || "Off";
+ event.target.checked = defaultValue === data.exportValue;
+ });
+ if (this.enableScripting && this.hasJSActions) {
+ element2.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(element2, 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(element2);
+ this._setDefaultPropertiesFromJS(element2);
+ this.container.append(element2);
+ return this.container;
+ }
+};
+var RadioButtonWidgetAnnotationElement = class 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 element2 = document.createElement("input");
+ GetElementsByNameSet.add(element2);
+ element2.setAttribute("data-element-id", id);
+ element2.disabled = data.readOnly;
+ this._setRequired(element2, this.data.required);
+ element2.type = "radio";
+ element2.name = data.fieldName;
+ if (value) {
+ element2.setAttribute("checked", true);
+ }
+ element2.tabIndex = DEFAULT_TAB_INDEX;
+ element2.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
+ });
+ });
+ element2.addEventListener("resetform", (event) => {
+ const defaultValue = data.defaultFieldValue;
+ event.target.checked = defaultValue !== null && defaultValue !== void 0 && defaultValue === data.buttonValue;
+ });
+ if (this.enableScripting && this.hasJSActions) {
+ const pdfButtonValue = data.buttonValue;
+ element2.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(element2, 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(element2);
+ this._setDefaultPropertiesFromJS(element2);
+ this.container.append(element2);
+ return this.container;
+ }
+};
+var PushButtonWidgetAnnotationElement = class 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;
+ }
+};
+var ChoiceWidgetAnnotationElement = class 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 option2 of selectElement.options) {
+ option2.selected = option2.value === defaultValue;
+ }
+ });
+ for (const option2 of this.data.options) {
+ const optionElement = document.createElement("option");
+ optionElement.textContent = option2.displayValue;
+ optionElement.value = option2.exportValue;
+ if (storedData.value.includes(option2.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, (option2) => option2.selected).map((option2) => option2[name]);
+ };
+ let selectedValues = getValue(false);
+ const getItems = (event) => {
+ const options = event.target.options;
+ return Array.prototype.map.call(options, (option2) => ({
+ displayValue: option2.textContent,
+ exportValue: option2.value
+ }));
+ };
+ if (this.enableScripting && this.hasJSActions) {
+ selectElement.addEventListener("updatefromsandbox", (jsEvent) => {
+ const actions = {
+ value(event) {
+ removeEmptyEntry == null ? void 0 : removeEmptyEntry();
+ const value = event.detail.value;
+ const values = new Set(Array.isArray(value) ? value : [value]);
+ for (const option2 of selectElement.options) {
+ option2.selected = values.has(option2.value);
+ }
+ storage.setValue(id, {
+ value: getValue(true)
+ });
+ selectedValues = getValue(false);
+ },
+ multipleSelection(event) {
+ selectElement.multiple = true;
+ },
+ remove(event) {
+ const options = selectElement.options;
+ const index2 = event.detail.remove;
+ options[index2].selected = false;
+ selectElement.remove(index2);
+ if (options.length > 0) {
+ const i = Array.prototype.findIndex.call(options, (option2) => option2.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: index2,
+ displayValue,
+ exportValue
+ } = event.detail.insert;
+ const selectChild = selectElement.children[index2];
+ 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 option2 of event.target.options) {
+ option2.selected = indices.has(option2.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) => {
+ var _a2;
+ const exportValue = getValue(true);
+ const change = getValue(false);
+ storage.setValue(id, {
+ value: exportValue
+ });
+ event.preventDefault();
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.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;
+ }
+};
+var PopupAnnotationElement = class 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 element2 of this.elements) {
+ element2.popup = popup;
+ elementIds.push(element2.data.id);
+ element2.addHighlightArea();
+ }
+ this.container.setAttribute("aria-controls", elementIds.map((id) => `${AnnotationPrefix}${id}`).join(","));
+ return this.container;
+ }
+};
+var _boundKeyDown, _boundHide, _boundShow, _boundToggle, _color, _container3, _contentsObj, _dateObj, _elements, _parent, _parentRect, _pinned, _popup, _position2, _rect, _richText, _titleObj, _updates2, _wasVisible, _html, html_get, _fontSize, fontSize_get, _fontColor, fontColor_get, _makePopupContent, makePopupContent_fn, _keyDown, keyDown_fn, _setPosition, setPosition_fn, _toggle, toggle_fn, _show, show_fn, _hide, hide_fn;
+var PopupElement = class {
+ constructor({
+ container,
+ color,
+ elements,
+ titleObj,
+ modificationDate,
+ contentsObj,
+ richText,
+ parent,
+ rect,
+ parentRect,
+ open
+ }) {
+ __privateAdd(this, _html);
+ __privateAdd(this, _fontSize);
+ __privateAdd(this, _fontColor);
+ __privateAdd(this, _makePopupContent);
+ __privateAdd(this, _keyDown);
+ __privateAdd(this, _setPosition);
+ __privateAdd(this, _toggle);
+ __privateAdd(this, _show);
+ __privateAdd(this, _hide);
+ __privateAdd(this, _boundKeyDown, __privateMethod(this, _keyDown, keyDown_fn).bind(this));
+ __privateAdd(this, _boundHide, __privateMethod(this, _hide, hide_fn).bind(this));
+ __privateAdd(this, _boundShow, __privateMethod(this, _show, show_fn).bind(this));
+ __privateAdd(this, _boundToggle, __privateMethod(this, _toggle, toggle_fn).bind(this));
+ __privateAdd(this, _color, null);
+ __privateAdd(this, _container3, null);
+ __privateAdd(this, _contentsObj, null);
+ __privateAdd(this, _dateObj, null);
+ __privateAdd(this, _elements, null);
+ __privateAdd(this, _parent, null);
+ __privateAdd(this, _parentRect, null);
+ __privateAdd(this, _pinned, false);
+ __privateAdd(this, _popup, null);
+ __privateAdd(this, _position2, null);
+ __privateAdd(this, _rect, null);
+ __privateAdd(this, _richText, null);
+ __privateAdd(this, _titleObj, null);
+ __privateAdd(this, _updates2, null);
+ __privateAdd(this, _wasVisible, false);
+ var _a2;
+ __privateSet(this, _container3, container);
+ __privateSet(this, _titleObj, titleObj);
+ __privateSet(this, _contentsObj, contentsObj);
+ __privateSet(this, _richText, richText);
+ __privateSet(this, _parent, parent);
+ __privateSet(this, _color, color);
+ __privateSet(this, _rect, rect);
+ __privateSet(this, _parentRect, parentRect);
+ __privateSet(this, _elements, elements);
+ __privateSet(this, _dateObj, PDFDateString.toDateObject(modificationDate));
+ this.trigger = elements.flatMap((e) => e.getElementsToTriggerPopup());
+ for (const element2 of this.trigger) {
+ element2.addEventListener("click", __privateGet(this, _boundToggle));
+ element2.addEventListener("mouseenter", __privateGet(this, _boundShow));
+ element2.addEventListener("mouseleave", __privateGet(this, _boundHide));
+ element2.classList.add("popupTriggerArea");
+ }
+ for (const element2 of elements) {
+ (_a2 = element2.container) == null ? void 0 : _a2.addEventListener("keydown", __privateGet(this, _boundKeyDown));
+ }
+ __privateGet(this, _container3).hidden = true;
+ if (open) {
+ __privateMethod(this, _toggle, toggle_fn).call(this);
+ }
+ }
+ render() {
+ if (__privateGet(this, _popup)) {
+ return;
+ }
+ const popup = __privateSet(this, _popup, document.createElement("div"));
+ popup.className = "popup";
+ if (__privateGet(this, _color)) {
+ const baseColor = popup.style.outlineColor = Util.makeHexColor(...__privateGet(this, _color));
+ if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) {
+ popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`;
+ } else {
+ const BACKGROUND_ENLIGHT = 0.7;
+ popup.style.backgroundColor = Util.makeHexColor(...__privateGet(this, _color).map((c) => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c)));
+ }
+ }
+ const header = document.createElement("span");
+ header.className = "header";
+ const title = document.createElement("h1");
+ header.append(title);
+ ({
+ dir: title.dir,
+ str: title.textContent
+ } = __privateGet(this, _titleObj));
+ popup.append(header);
+ if (__privateGet(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: __privateGet(this, _dateObj).valueOf()
+ }));
+ header.append(modificationDate);
+ }
+ const html = __privateGet(this, _html, html_get);
+ if (html) {
+ XfaLayer.render({
+ xfaHtml: html,
+ intent: "richText",
+ div: popup
+ });
+ popup.lastChild.classList.add("richText", "popupContent");
+ } else {
+ const contents = this._formatContents(__privateGet(this, _contentsObj));
+ popup.append(contents);
+ }
+ __privateGet(this, _container3).append(popup);
+ }
+ _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;
+ }
+ updateEdited({
+ rect,
+ popupContent
+ }) {
+ var _a2;
+ __privateGet(this, _updates2) || __privateSet(this, _updates2, {
+ contentsObj: __privateGet(this, _contentsObj),
+ richText: __privateGet(this, _richText)
+ });
+ if (rect) {
+ __privateSet(this, _position2, null);
+ }
+ if (popupContent) {
+ __privateSet(this, _richText, __privateMethod(this, _makePopupContent, makePopupContent_fn).call(this, popupContent));
+ __privateSet(this, _contentsObj, null);
+ }
+ (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove();
+ __privateSet(this, _popup, null);
+ }
+ resetEdited() {
+ var _a2;
+ if (!__privateGet(this, _updates2)) {
+ return;
+ }
+ ({
+ contentsObj: __privateWrapper(this, _contentsObj)._,
+ richText: __privateWrapper(this, _richText)._
+ } = __privateGet(this, _updates2));
+ __privateSet(this, _updates2, null);
+ (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove();
+ __privateSet(this, _popup, null);
+ __privateSet(this, _position2, null);
+ }
+ forceHide() {
+ __privateSet(this, _wasVisible, this.isVisible);
+ if (!__privateGet(this, _wasVisible)) {
+ return;
+ }
+ __privateGet(this, _container3).hidden = true;
+ }
+ maybeShow() {
+ if (!__privateGet(this, _wasVisible)) {
+ return;
+ }
+ if (!__privateGet(this, _popup)) {
+ __privateMethod(this, _show, show_fn).call(this);
+ }
+ __privateSet(this, _wasVisible, false);
+ __privateGet(this, _container3).hidden = false;
+ }
+ get isVisible() {
+ return __privateGet(this, _container3).hidden === false;
+ }
+};
+_boundKeyDown = new WeakMap();
+_boundHide = new WeakMap();
+_boundShow = new WeakMap();
+_boundToggle = new WeakMap();
+_color = new WeakMap();
+_container3 = new WeakMap();
+_contentsObj = new WeakMap();
+_dateObj = new WeakMap();
+_elements = new WeakMap();
+_parent = new WeakMap();
+_parentRect = new WeakMap();
+_pinned = new WeakMap();
+_popup = new WeakMap();
+_position2 = new WeakMap();
+_rect = new WeakMap();
+_richText = new WeakMap();
+_titleObj = new WeakMap();
+_updates2 = new WeakMap();
+_wasVisible = new WeakMap();
+_html = new WeakSet();
+html_get = function() {
+ const richText = __privateGet(this, _richText);
+ const contentsObj = __privateGet(this, _contentsObj);
+ if ((richText == null ? void 0 : richText.str) && (!(contentsObj == null ? void 0 : contentsObj.str) || contentsObj.str === richText.str)) {
+ return __privateGet(this, _richText).html || null;
+ }
+ return null;
+};
+_fontSize = new WeakSet();
+fontSize_get = function() {
+ var _a2, _b, _c;
+ return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.fontSize) || 0;
+};
+_fontColor = new WeakSet();
+fontColor_get = function() {
+ var _a2, _b, _c;
+ return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.color) || null;
+};
+_makePopupContent = new WeakSet();
+makePopupContent_fn = function(text2) {
+ const popupLines = [];
+ const popupContent = {
+ str: text2,
+ html: {
+ name: "div",
+ attributes: {
+ dir: "auto"
+ },
+ children: [{
+ name: "p",
+ children: popupLines
+ }]
+ }
+ };
+ const lineAttributes = {
+ style: {
+ color: __privateGet(this, _fontColor, fontColor_get),
+ fontSize: __privateGet(this, _fontSize, fontSize_get) ? `calc(${__privateGet(this, _fontSize, fontSize_get)}px * var(--scale-factor))` : ""
+ }
+ };
+ for (const line of text2.split("\n")) {
+ popupLines.push({
+ name: "span",
+ value: line,
+ attributes: lineAttributes
+ });
+ }
+ return popupContent;
+};
+_keyDown = new WeakSet();
+keyDown_fn = function(event) {
+ if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {
+ return;
+ }
+ if (event.key === "Enter" || event.key === "Escape" && __privateGet(this, _pinned)) {
+ __privateMethod(this, _toggle, toggle_fn).call(this);
+ }
+};
+_setPosition = new WeakSet();
+setPosition_fn = function() {
+ if (__privateGet(this, _position2) !== null) {
+ return;
+ }
+ const {
+ page: {
+ view
+ },
+ viewport: {
+ rawDims: {
+ pageWidth,
+ pageHeight,
+ pageX,
+ pageY
+ }
+ }
+ } = __privateGet(this, _parent);
+ let useParentRect = !!__privateGet(this, _parentRect);
+ let rect = useParentRect ? __privateGet(this, _parentRect) : __privateGet(this, _rect);
+ for (const element2 of __privateGet(this, _elements)) {
+ if (!rect || Util.intersect(element2.data.rect, rect) !== null) {
+ rect = element2.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];
+ __privateSet(this, _position2, [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]);
+ const {
+ style
+ } = __privateGet(this, _container3);
+ style.left = `${__privateGet(this, _position2)[0]}%`;
+ style.top = `${__privateGet(this, _position2)[1]}%`;
+};
+_toggle = new WeakSet();
+toggle_fn = function() {
+ __privateSet(this, _pinned, !__privateGet(this, _pinned));
+ if (__privateGet(this, _pinned)) {
+ __privateMethod(this, _show, show_fn).call(this);
+ __privateGet(this, _container3).addEventListener("click", __privateGet(this, _boundToggle));
+ __privateGet(this, _container3).addEventListener("keydown", __privateGet(this, _boundKeyDown));
+ } else {
+ __privateMethod(this, _hide, hide_fn).call(this);
+ __privateGet(this, _container3).removeEventListener("click", __privateGet(this, _boundToggle));
+ __privateGet(this, _container3).removeEventListener("keydown", __privateGet(this, _boundKeyDown));
+ }
+};
+_show = new WeakSet();
+show_fn = function() {
+ if (!__privateGet(this, _popup)) {
+ this.render();
+ }
+ if (!this.isVisible) {
+ __privateMethod(this, _setPosition, setPosition_fn).call(this);
+ __privateGet(this, _container3).hidden = false;
+ __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) + 1e3;
+ } else if (__privateGet(this, _pinned)) {
+ __privateGet(this, _container3).classList.add("focused");
+ }
+};
+_hide = new WeakSet();
+hide_fn = function() {
+ __privateGet(this, _container3).classList.remove("focused");
+ if (__privateGet(this, _pinned) || !this.isVisible) {
+ return;
+ }
+ __privateGet(this, _container3).hidden = true;
+ __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) - 1e3;
+};
+var FreeTextAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ this.textContent = parameters.data.textContent;
+ this.textPosition = parameters.data.textPosition;
+ this.annotationEditorType = AnnotationEditorType.FREETEXT;
+ }
+ render() {
+ this.container.classList.add("freeTextAnnotation");
+ if (this.textContent) {
+ const content = document.createElement("div");
+ content.classList.add("annotationTextContent");
+ content.setAttribute("role", "comment");
+ for (const line of this.textContent) {
+ const lineSpan = document.createElement("span");
+ lineSpan.textContent = line;
+ content.append(lineSpan);
+ }
+ this.container.append(content);
+ }
+ if (!this.data.popupRef && this.hasPopupData) {
+ this._createPopup();
+ }
+ this._editOnDoubleClick();
+ return this.container;
+ }
+};
+var _line;
+var LineAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ __privateAdd(this, _line, null);
+ }
+ render() {
+ this.container.classList.add("lineAnnotation");
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height, true);
+ const line = __privateSet(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 __privateGet(this, _line);
+ }
+ addHighlightArea() {
+ this.container.classList.add("highlightArea");
+ }
+};
+_line = new WeakMap();
+var _square;
+var SquareAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ __privateAdd(this, _square, null);
+ }
+ render() {
+ this.container.classList.add("squareAnnotation");
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height, true);
+ const borderWidth = data.borderStyle.width;
+ const square = __privateSet(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 __privateGet(this, _square);
+ }
+ addHighlightArea() {
+ this.container.classList.add("highlightArea");
+ }
+};
+_square = new WeakMap();
+var _circle;
+var CircleAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ __privateAdd(this, _circle, null);
+ }
+ render() {
+ this.container.classList.add("circleAnnotation");
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height, true);
+ const borderWidth = data.borderStyle.width;
+ const circle = __privateSet(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 __privateGet(this, _circle);
+ }
+ addHighlightArea() {
+ this.container.classList.add("highlightArea");
+ }
+};
+_circle = new WeakMap();
+var _polyline;
+var PolylineAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ __privateAdd(this, _polyline, null);
+ this.containerClassName = "polylineAnnotation";
+ this.svgElementName = "svg:polyline";
+ }
+ render() {
+ this.container.classList.add(this.containerClassName);
+ const {
+ data: {
+ rect,
+ vertices,
+ borderStyle,
+ popupRef
+ }
+ } = this;
+ if (!vertices) {
+ return this.container;
+ }
+ const {
+ width,
+ height
+ } = getRectDims(rect);
+ 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 = __privateSet(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 __privateGet(this, _polyline);
+ }
+ addHighlightArea() {
+ this.container.classList.add("highlightArea");
+ }
+};
+_polyline = new WeakMap();
+var PolygonAnnotationElement = class extends PolylineAnnotationElement {
+ constructor(parameters) {
+ super(parameters);
+ this.containerClassName = "polygonAnnotation";
+ this.svgElementName = "svg:polygon";
+ }
+};
+var CaretAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ }
+ render() {
+ this.container.classList.add("caretAnnotation");
+ if (!this.data.popupRef && this.hasPopupData) {
+ this._createPopup();
+ }
+ return this.container;
+ }
+};
+var _polylines;
+var InkAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ __privateAdd(this, _polylines, []);
+ this.containerClassName = "inkAnnotation";
+ this.svgElementName = "svg:polyline";
+ this.annotationEditorType = AnnotationEditorType.INK;
+ }
+ render() {
+ this.container.classList.add(this.containerClassName);
+ const {
+ data: {
+ rect,
+ inkLists,
+ borderStyle,
+ popupRef
+ }
+ } = this;
+ const {
+ width,
+ height
+ } = getRectDims(rect);
+ const svg = this.svgFactory.create(width, height, true);
+ for (const inkList of inkLists) {
+ let points = [];
+ for (let i = 0, ii = inkList.length; i < ii; i += 2) {
+ const x = inkList[i] - rect[0];
+ const y = rect[3] - inkList[i + 1];
+ points.push(`${x},${y}`);
+ }
+ points = points.join(" ");
+ const polyline = this.svgFactory.createElement(this.svgElementName);
+ __privateGet(this, _polylines).push(polyline);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "transparent");
+ if (!popupRef && this.hasPopupData) {
+ this._createPopup();
+ }
+ svg.append(polyline);
+ }
+ this.container.append(svg);
+ return this.container;
+ }
+ getElementsToTriggerPopup() {
+ return __privateGet(this, _polylines);
+ }
+ addHighlightArea() {
+ this.container.classList.add("highlightArea");
+ }
+};
+_polylines = new WeakMap();
+var HighlightAnnotationElement = class 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("highlightAnnotation");
+ return this.container;
+ }
+};
+var UnderlineAnnotationElement = class 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;
+ }
+};
+var SquigglyAnnotationElement = class 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;
+ }
+};
+var StrikeOutAnnotationElement = class 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;
+ }
+};
+var StampAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true,
+ ignoreBorder: true
+ });
+ }
+ render() {
+ this.container.classList.add("stampAnnotation");
+ if (!this.data.popupRef && this.hasPopupData) {
+ this._createPopup();
+ }
+ return this.container;
+ }
+};
+var _trigger, _download, download_fn;
+var FileAttachmentAnnotationElement = class extends AnnotationElement {
+ constructor(parameters) {
+ var _a2;
+ super(parameters, {
+ isRenderable: true
+ });
+ __privateAdd(this, _download);
+ __privateAdd(this, _trigger, null);
+ const {
+ file
+ } = this.data;
+ this.filename = file.filename;
+ this.content = file.content;
+ (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.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", __privateMethod(this, _download, download_fn).bind(this));
+ __privateSet(this, _trigger, trigger);
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ container.addEventListener("keydown", (evt) => {
+ if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) {
+ __privateMethod(this, _download, download_fn).call(this);
+ }
+ });
+ if (!data.popupRef && this.hasPopupData) {
+ this._createPopup();
+ } else {
+ trigger.classList.add("popupTriggerArea");
+ }
+ container.append(trigger);
+ return container;
+ }
+ getElementsToTriggerPopup() {
+ return __privateGet(this, _trigger);
+ }
+ addHighlightArea() {
+ this.container.classList.add("highlightArea");
+ }
+};
+_trigger = new WeakMap();
+_download = new WeakSet();
+download_fn = function() {
+ var _a2;
+ (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(this.content, this.filename);
+};
+var _accessibilityManager, _annotationCanvasMap, _editableAnnotations, _appendElement, appendElement_fn, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn;
+var AnnotationLayer = class {
+ constructor({
+ div,
+ accessibilityManager,
+ annotationCanvasMap,
+ annotationEditorUIManager,
+ page,
+ viewport
+ }) {
+ __privateAdd(this, _appendElement);
+ __privateAdd(this, _setAnnotationCanvasMap);
+ __privateAdd(this, _accessibilityManager, null);
+ __privateAdd(this, _annotationCanvasMap, null);
+ __privateAdd(this, _editableAnnotations, /* @__PURE__ */ new Map());
+ this.div = div;
+ __privateSet(this, _accessibilityManager, accessibilityManager);
+ __privateSet(this, _annotationCanvasMap, annotationCanvasMap);
+ this.page = page;
+ this.viewport = viewport;
+ this.zIndex = 0;
+ this._annotationEditorUIManager = annotationEditorUIManager;
+ }
+ hasEditableAnnotations() {
+ return __privateGet(this, _editableAnnotations).size > 0;
+ }
+ async render(params) {
+ var _a2;
+ const {
+ annotations
+ } = params;
+ const layer = this.div;
+ setLayerDimensions(layer, this.viewport);
+ const popupToElements = /* @__PURE__ */ 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) {
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ if (width <= 0 || height <= 0) {
+ continue;
+ }
+ } else {
+ const elements = popupToElements.get(data.id);
+ if (!elements) {
+ continue;
+ }
+ elementParams.elements = elements;
+ }
+ elementParams.data = data;
+ const element2 = AnnotationElementFactory.create(elementParams);
+ if (!element2.isRenderable) {
+ continue;
+ }
+ if (!isPopupAnnotation && data.popupRef) {
+ const elements = popupToElements.get(data.popupRef);
+ if (!elements) {
+ popupToElements.set(data.popupRef, [element2]);
+ } else {
+ elements.push(element2);
+ }
+ }
+ const rendered = element2.render();
+ if (data.hidden) {
+ rendered.style.visibility = "hidden";
+ }
+ __privateMethod(this, _appendElement, appendElement_fn).call(this, rendered, data.id);
+ if (element2._isEditable) {
+ __privateGet(this, _editableAnnotations).set(element2.data.id, element2);
+ (_a2 = this._annotationEditorUIManager) == null ? void 0 : _a2.renderAnnotationElement(element2);
+ }
+ }
+ __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this);
+ }
+ update({
+ viewport
+ }) {
+ const layer = this.div;
+ this.viewport = viewport;
+ setLayerDimensions(layer, {
+ rotation: viewport.rotation
+ });
+ __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this);
+ layer.hidden = false;
+ }
+ getEditableAnnotations() {
+ return Array.from(__privateGet(this, _editableAnnotations).values());
+ }
+ getEditableAnnotation(id) {
+ return __privateGet(this, _editableAnnotations).get(id);
+ }
+};
+_accessibilityManager = new WeakMap();
+_annotationCanvasMap = new WeakMap();
+_editableAnnotations = new WeakMap();
+_appendElement = new WeakSet();
+appendElement_fn = function(element2, id) {
+ var _a2;
+ const contentElement = element2.firstChild || element2;
+ contentElement.id = `${AnnotationPrefix}${id}`;
+ this.div.append(element2);
+ (_a2 = __privateGet(this, _accessibilityManager)) == null ? void 0 : _a2.moveElementInDOM(this.div, element2, contentElement, false);
+};
+_setAnnotationCanvasMap = new WeakSet();
+setAnnotationCanvasMap_fn = function() {
+ if (!__privateGet(this, _annotationCanvasMap)) {
+ return;
+ }
+ const layer = this.div;
+ for (const [id, canvas] of __privateGet(this, _annotationCanvasMap)) {
+ const element2 = layer.querySelector(`[data-annotation-id="${id}"]`);
+ if (!element2) {
+ continue;
+ }
+ canvas.className = "annotationContent";
+ const {
+ firstChild
+ } = element2;
+ if (!firstChild) {
+ element2.append(canvas);
+ } else if (firstChild.nodeName === "CANVAS") {
+ firstChild.replaceWith(canvas);
+ } else if (!firstChild.classList.contains("annotationContent")) {
+ firstChild.before(canvas);
+ } else {
+ firstChild.after(canvas);
+ }
+ }
+ __privateGet(this, _annotationCanvasMap).clear();
+};
+var EOL_PATTERN = /\r\n?|\n/g;
+var _color2, _content, _editorDivId, _editModeAC, _fontSize2, _initialData, _updateFontSize, updateFontSize_fn, _updateColor, updateColor_fn, _extractText, extractText_fn, _setEditorDimensions, setEditorDimensions_fn, _getNodeContent, getNodeContent_fn, _setContent, setContent_fn, _serializeContent, serializeContent_fn, _deserializeContent, deserializeContent_fn, _hasElementChanged, hasElementChanged_fn;
+var _FreeTextEditor = class extends AnnotationEditor {
+ constructor(params) {
+ super({
+ ...params,
+ name: "freeTextEditor"
+ });
+ __privateAdd(this, _updateFontSize);
+ __privateAdd(this, _updateColor);
+ __privateAdd(this, _extractText);
+ __privateAdd(this, _setEditorDimensions);
+ __privateAdd(this, _setContent);
+ __privateAdd(this, _serializeContent);
+ __privateAdd(this, _hasElementChanged);
+ __privateAdd(this, _color2, void 0);
+ __privateAdd(this, _content, "");
+ __privateAdd(this, _editorDivId, `${this.id}-editor`);
+ __privateAdd(this, _editModeAC, null);
+ __privateAdd(this, _fontSize2, void 0);
+ __privateAdd(this, _initialData, null);
+ __privateSet(this, _color2, params.color || _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor);
+ __privateSet(this, _fontSize2, params.fontSize || _FreeTextEditor._defaultFontSize);
+ }
+ 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 initialize(l10n, uiManager) {
+ AnnotationEditor.initialize(l10n, uiManager, {
+ strings: ["pdfjs-free-text-default-content"]
+ });
+ 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:
+ __privateMethod(this, _updateFontSize, updateFontSize_fn).call(this, value);
+ break;
+ case AnnotationEditorParamsType.FREETEXT_COLOR:
+ __privateMethod(this, _updateColor, updateColor_fn).call(this, value);
+ break;
+ }
+ }
+ static get defaultPropertiesToUpdate() {
+ return [[AnnotationEditorParamsType.FREETEXT_SIZE, _FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]];
+ }
+ get propertiesToUpdate() {
+ return [[AnnotationEditorParamsType.FREETEXT_SIZE, __privateGet(this, _fontSize2)], [AnnotationEditorParamsType.FREETEXT_COLOR, __privateGet(this, _color2)]];
+ }
+ _translateEmpty(x, y) {
+ this._uiManager.translateSelectedEditors(x, y, true);
+ }
+ getInitialTranslation() {
+ const scale = this.parentScale;
+ return [-_FreeTextEditor._internalPadding * scale, -(_FreeTextEditor._internalPadding + __privateGet(this, _fontSize2)) * 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");
+ __privateSet(this, _editModeAC, new AbortController());
+ const signal = this._uiManager.combinedSignal(__privateGet(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() {
+ var _a2;
+ if (!this.isInEditMode()) {
+ return;
+ }
+ this.parent.setEditingState(true);
+ super.disableEditMode();
+ this.overlayDiv.classList.add("enabled");
+ this.editorDiv.contentEditable = false;
+ this.div.setAttribute("aria-activedescendant", __privateGet(this, _editorDivId));
+ this._isDraggable = true;
+ (_a2 = __privateGet(this, _editModeAC)) == null ? void 0 : _a2.abort();
+ __privateSet(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() {
+ var _a2;
+ if (this.width) {
+ return;
+ }
+ this.enableEditMode();
+ this.editorDiv.focus();
+ if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) {
+ this.center();
+ }
+ this._initialOptions = null;
+ }
+ isEmpty() {
+ return !this.editorDiv || this.editorDiv.innerText.trim() === "";
+ }
+ remove() {
+ this.isEditing = false;
+ if (this.parent) {
+ this.parent.setEditingState(true);
+ this.parent.div.classList.add("freetextEditing");
+ }
+ super.remove();
+ }
+ commit() {
+ if (!this.isInEditMode()) {
+ return;
+ }
+ super.commit();
+ this.disableEditMode();
+ const savedText = __privateGet(this, _content);
+ const newText = __privateSet(this, _content, __privateMethod(this, _extractText, extractText_fn).call(this).trimEnd());
+ if (savedText === newText) {
+ return;
+ }
+ const setText = (text2) => {
+ __privateSet(this, _content, text2);
+ if (!text2) {
+ this.remove();
+ return;
+ }
+ __privateMethod(this, _setContent, setContent_fn).call(this);
+ this._uiManager.rebuild(this);
+ __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this);
+ };
+ this.addCommands({
+ cmd: () => {
+ setText(newText);
+ },
+ undo: () => {
+ setText(savedText);
+ },
+ mustExec: false
+ });
+ __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this);
+ }
+ 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.width) {
+ baseX = this.x;
+ baseY = this.y;
+ }
+ super.render();
+ this.editorDiv = document.createElement("div");
+ this.editorDiv.className = "internal";
+ this.editorDiv.setAttribute("id", __privateGet(this, _editorDivId));
+ this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text");
+ this.enableEditing();
+ AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then((msg) => {
+ var _a2;
+ return (_a2 = this.editorDiv) == null ? void 0 : _a2.setAttribute("default-content", msg);
+ });
+ this.editorDiv.contentEditable = true;
+ const {
+ style
+ } = this.editorDiv;
+ style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`;
+ style.color = __privateGet(this, _color2);
+ 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.width) {
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ if (this.annotationElementId) {
+ const {
+ position
+ } = __privateGet(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.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
+ }
+ __privateMethod(this, _setContent, setContent_fn).call(this);
+ this._isDraggable = true;
+ this.editorDiv.contentEditable = false;
+ } else {
+ this._isDraggable = false;
+ this.editorDiv.contentEditable = true;
+ }
+ return this.div;
+ }
+ editorDivPaste(event) {
+ var _a2, _b, _c;
+ const clipboardData = event.clipboardData || window.clipboardData;
+ const {
+ types
+ } = clipboardData;
+ if (types.length === 1 && types[0] === "text/plain") {
+ return;
+ }
+ event.preventDefault();
+ const paste = __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, 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(__privateMethod(_b = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_b, 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(__privateMethod(_c = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_c, child));
+ }
+ }
+ __privateSet(this, _content, `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`);
+ __privateMethod(this, _setContent, setContent_fn).call(this);
+ const newRange = new Range();
+ let beforeLength = bufferBefore.reduce((acc, line) => acc + line.length, 0);
+ for (const {
+ firstChild
+ } of this.editorDiv.childNodes) {
+ if (firstChild.nodeType === Node.TEXT_NODE) {
+ const length = firstChild.nodeValue.length;
+ if (beforeLength <= length) {
+ newRange.setStart(firstChild, beforeLength);
+ newRange.setEnd(firstChild, beforeLength);
+ break;
+ }
+ beforeLength -= length;
+ }
+ }
+ selection.removeAllRanges();
+ selection.addRange(newRange);
+ }
+ get contentDiv() {
+ return this.editorDiv;
+ }
+ static deserialize(data, parent, uiManager) {
+ var _a2;
+ let initialData = null;
+ if (data instanceof FreeTextAnnotationElement) {
+ const {
+ data: {
+ defaultAppearanceData: {
+ fontSize,
+ fontColor
+ },
+ rect,
+ rotation,
+ id
+ },
+ 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
+ };
+ }
+ const editor = super.deserialize(data, parent, uiManager);
+ __privateSet(editor, _fontSize2, data.fontSize);
+ __privateSet(editor, _color2, Util.makeHexColor(...data.color));
+ __privateSet(editor, _content, __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, data.value));
+ editor.annotationElementId = data.id || null;
+ __privateSet(editor, _initialData, initialData);
+ return editor;
+ }
+ serialize(isForCopying = false) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ if (this.deleted) {
+ return {
+ pageIndex: this.pageIndex,
+ id: this.annotationElementId,
+ deleted: true
+ };
+ }
+ const padding = _FreeTextEditor._internalPadding * this.parentScale;
+ const rect = this.getRect(padding, padding);
+ const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : __privateGet(this, _color2));
+ const serialized = {
+ annotationType: AnnotationEditorType.FREETEXT,
+ color,
+ fontSize: __privateGet(this, _fontSize2),
+ value: __privateMethod(this, _serializeContent, serializeContent_fn).call(this),
+ pageIndex: this.pageIndex,
+ rect,
+ rotation: this.rotation,
+ structTreeParentId: this._structTreeParentId
+ };
+ if (isForCopying) {
+ return serialized;
+ }
+ if (this.annotationElementId && !__privateMethod(this, _hasElementChanged, hasElementChanged_fn).call(this, serialized)) {
+ return null;
+ }
+ serialized.id = this.annotationElementId;
+ return serialized;
+ }
+ renderAnnotationElement(annotation) {
+ const content = super.renderAnnotationElement(annotation);
+ if (this.deleted) {
+ return content;
+ }
+ const {
+ style
+ } = content;
+ style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`;
+ style.color = __privateGet(this, _color2);
+ content.replaceChildren();
+ for (const line of __privateGet(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: __privateGet(this, _content)
+ });
+ return content;
+ }
+ resetAnnotationElement(annotation) {
+ super.resetAnnotationElement(annotation);
+ annotation.resetEdited();
+ }
+};
+var FreeTextEditor = _FreeTextEditor;
+_color2 = new WeakMap();
+_content = new WeakMap();
+_editorDivId = new WeakMap();
+_editModeAC = new WeakMap();
+_fontSize2 = new WeakMap();
+_initialData = new WeakMap();
+_updateFontSize = new WeakSet();
+updateFontSize_fn = function(fontSize) {
+ const setFontsize = (size) => {
+ this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`;
+ this.translate(0, -(size - __privateGet(this, _fontSize2)) * this.parentScale);
+ __privateSet(this, _fontSize2, size);
+ __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this);
+ };
+ const savedFontsize = __privateGet(this, _fontSize2);
+ 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 = new WeakSet();
+updateColor_fn = function(color) {
+ const setColor = (col) => {
+ __privateSet(this, _color2, this.editorDiv.style.color = col);
+ };
+ const savedColor = __privateGet(this, _color2);
+ 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
+ });
+};
+_extractText = new WeakSet();
+extractText_fn = function() {
+ var _a2;
+ const buffer = [];
+ this.editorDiv.normalize();
+ for (const child of this.editorDiv.childNodes) {
+ buffer.push(__privateMethod(_a2 = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_a2, child));
+ }
+ return buffer.join("\n");
+};
+_setEditorDimensions = new WeakSet();
+setEditorDimensions_fn = function() {
+ 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();
+};
+_getNodeContent = new WeakSet();
+getNodeContent_fn = function(node) {
+ return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, "");
+};
+_setContent = new WeakSet();
+setContent_fn = function() {
+ this.editorDiv.replaceChildren();
+ if (!__privateGet(this, _content)) {
+ return;
+ }
+ for (const line of __privateGet(this, _content).split("\n")) {
+ const div = document.createElement("div");
+ div.append(line ? document.createTextNode(line) : document.createElement("br"));
+ this.editorDiv.append(div);
+ }
+};
+_serializeContent = new WeakSet();
+serializeContent_fn = function() {
+ return __privateGet(this, _content).replaceAll("\xA0", " ");
+};
+_deserializeContent = new WeakSet();
+deserializeContent_fn = function(content) {
+ return content.replaceAll(" ", "\xA0");
+};
+_hasElementChanged = new WeakSet();
+hasElementChanged_fn = function(serialized) {
+ const {
+ value,
+ fontSize,
+ color,
+ pageIndex
+ } = __privateGet(this, _initialData);
+ return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex;
+};
+__privateAdd(FreeTextEditor, _getNodeContent);
+__privateAdd(FreeTextEditor, _deserializeContent);
+__publicField(FreeTextEditor, "_freeTextDefaultContent", "");
+__publicField(FreeTextEditor, "_internalPadding", 0);
+__publicField(FreeTextEditor, "_defaultColor", null);
+__publicField(FreeTextEditor, "_defaultFontSize", 10);
+__publicField(FreeTextEditor, "_type", "freetext");
+__publicField(FreeTextEditor, "_editorType", AnnotationEditorType.FREETEXT);
+var _box, _verticalEdges, _intervals, _getOutlines, getOutlines_fn, _binarySearch, binarySearch_fn, _insert, insert_fn, _remove, remove_fn, _breakEdge, breakEdge_fn;
+var Outliner = class {
+ constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) {
+ __privateAdd(this, _getOutlines);
+ __privateAdd(this, _binarySearch);
+ __privateAdd(this, _insert);
+ __privateAdd(this, _remove);
+ __privateAdd(this, _breakEdge);
+ __privateAdd(this, _box, void 0);
+ __privateAdd(this, _verticalEdges, []);
+ __privateAdd(this, _intervals, []);
+ let minX = Infinity;
+ let maxX = -Infinity;
+ let minY = Infinity;
+ let maxY = -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];
+ __privateGet(this, _verticalEdges).push(left, right);
+ minX = Math.min(minX, x1);
+ maxX = Math.max(maxX, x2);
+ minY = Math.min(minY, y1);
+ maxY = Math.max(maxY, y2);
+ }
+ const bboxWidth = maxX - minX + 2 * innerMargin;
+ const bboxHeight = maxY - minY + 2 * innerMargin;
+ const shiftedMinX = minX - innerMargin;
+ const shiftedMinY = minY - innerMargin;
+ const lastEdge = __privateGet(this, _verticalEdges).at(isLTR ? -1 : -2);
+ const lastPoint = [lastEdge[0], lastEdge[2]];
+ for (const edge of __privateGet(this, _verticalEdges)) {
+ const [x, y1, y2] = edge;
+ edge[0] = (x - shiftedMinX) / bboxWidth;
+ edge[1] = (y1 - shiftedMinY) / bboxHeight;
+ edge[2] = (y2 - shiftedMinY) / bboxHeight;
+ }
+ __privateSet(this, _box, {
+ x: shiftedMinX,
+ y: shiftedMinY,
+ width: bboxWidth,
+ height: bboxHeight,
+ lastPoint
+ });
+ }
+ getOutlines() {
+ __privateGet(this, _verticalEdges).sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]);
+ const outlineVerticalEdges = [];
+ for (const edge of __privateGet(this, _verticalEdges)) {
+ if (edge[3]) {
+ outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge));
+ __privateMethod(this, _insert, insert_fn).call(this, edge);
+ } else {
+ __privateMethod(this, _remove, remove_fn).call(this, edge);
+ outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge));
+ }
+ }
+ return __privateMethod(this, _getOutlines, getOutlines_fn).call(this, outlineVerticalEdges);
+ }
+};
+_box = new WeakMap();
+_verticalEdges = new WeakMap();
+_intervals = new WeakMap();
+_getOutlines = new WeakSet();
+getOutlines_fn = function(outlineVerticalEdges) {
+ const edges = [];
+ const allEdges = /* @__PURE__ */ 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, __privateGet(this, _box));
+};
+_binarySearch = new WeakSet();
+binarySearch_fn = function(y) {
+ const array = __privateGet(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 = new WeakSet();
+insert_fn = function([, y1, y2]) {
+ const index2 = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1);
+ __privateGet(this, _intervals).splice(index2, 0, [y1, y2]);
+};
+_remove = new WeakSet();
+remove_fn = function([, y1, y2]) {
+ const index2 = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1);
+ for (let i = index2; i < __privateGet(this, _intervals).length; i++) {
+ const [start, end] = __privateGet(this, _intervals)[i];
+ if (start !== y1) {
+ break;
+ }
+ if (start === y1 && end === y2) {
+ __privateGet(this, _intervals).splice(i, 1);
+ return;
+ }
+ }
+ for (let i = index2 - 1; i >= 0; i--) {
+ const [start, end] = __privateGet(this, _intervals)[i];
+ if (start !== y1) {
+ break;
+ }
+ if (start === y1 && end === y2) {
+ __privateGet(this, _intervals).splice(i, 1);
+ return;
+ }
+ }
+};
+_breakEdge = new WeakSet();
+breakEdge_fn = function(edge) {
+ const [x, y1, y2] = edge;
+ const results = [[x, y1, y2]];
+ const index2 = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y2);
+ for (let i = 0; i < index2; i++) {
+ const [start, end] = __privateGet(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;
+};
+var Outline = class {
+ toSVGPath() {
+ throw new Error("Abstract method `toSVGPath` must be implemented.");
+ }
+ get box() {
+ throw new Error("Abstract getter `box` must be implemented.");
+ }
+ serialize(_bbox2, _rotation2) {
+ throw new Error("Abstract method `serialize` must be implemented.");
+ }
+ get free() {
+ return this instanceof FreeHighlightOutline;
+ }
+};
+var _box2, _outlines;
+var HighlightOutline = class extends Outline {
+ constructor(outlines, box) {
+ super();
+ __privateAdd(this, _box2, void 0);
+ __privateAdd(this, _outlines, void 0);
+ __privateSet(this, _outlines, outlines);
+ __privateSet(this, _box2, box);
+ }
+ toSVGPath() {
+ const buffer = [];
+ for (const polygon of __privateGet(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], _rotation2) {
+ const outlines = [];
+ const width = trX - blX;
+ const height = trY - blY;
+ for (const outline of __privateGet(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 __privateGet(this, _box2);
+ }
+};
+_box2 = new WeakMap();
+_outlines = new WeakMap();
+var _box3, _bottom, _innerMargin, _isLTR, _top, _last, _lastX, _lastY, _min, _min_dist, _scaleFactor, _thickness, _points, _MIN_DIST, _MIN_DIFF, _MIN, _getLastCoords, getLastCoords_fn;
+var _FreeOutliner = class {
+ constructor({
+ x,
+ y
+ }, box, scaleFactor, thickness, isLTR, innerMargin = 0) {
+ __privateAdd(this, _getLastCoords);
+ __privateAdd(this, _box3, void 0);
+ __privateAdd(this, _bottom, []);
+ __privateAdd(this, _innerMargin, void 0);
+ __privateAdd(this, _isLTR, void 0);
+ __privateAdd(this, _top, []);
+ __privateAdd(this, _last, new Float64Array(18));
+ __privateAdd(this, _lastX, void 0);
+ __privateAdd(this, _lastY, void 0);
+ __privateAdd(this, _min, void 0);
+ __privateAdd(this, _min_dist, void 0);
+ __privateAdd(this, _scaleFactor, void 0);
+ __privateAdd(this, _thickness, void 0);
+ __privateAdd(this, _points, []);
+ __privateSet(this, _box3, box);
+ __privateSet(this, _thickness, thickness * scaleFactor);
+ __privateSet(this, _isLTR, isLTR);
+ __privateGet(this, _last).set([NaN, NaN, NaN, NaN, x, y], 6);
+ __privateSet(this, _innerMargin, innerMargin);
+ __privateSet(this, _min_dist, __privateGet(_FreeOutliner, _MIN_DIST) * scaleFactor);
+ __privateSet(this, _min, __privateGet(_FreeOutliner, _MIN) * scaleFactor);
+ __privateSet(this, _scaleFactor, scaleFactor);
+ __privateGet(this, _points).push(x, y);
+ }
+ get free() {
+ return true;
+ }
+ isEmpty() {
+ return isNaN(__privateGet(this, _last)[8]);
+ }
+ add({
+ x,
+ y
+ }) {
+ var _a2;
+ __privateSet(this, _lastX, x);
+ __privateSet(this, _lastY, y);
+ const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3);
+ let [x1, y1, x2, y2] = __privateGet(this, _last).subarray(8, 12);
+ const diffX = x - x2;
+ const diffY = y - y2;
+ const d = Math.hypot(diffX, diffY);
+ if (d < __privateGet(this, _min)) {
+ return false;
+ }
+ const diffD = d - __privateGet(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;
+ (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.push(x, y);
+ const nX = -shiftY / diffD;
+ const nY = shiftX / diffD;
+ const thX = nX * __privateGet(this, _thickness);
+ const thY = nY * __privateGet(this, _thickness);
+ __privateGet(this, _last).set(__privateGet(this, _last).subarray(2, 8), 0);
+ __privateGet(this, _last).set([x2 + thX, y2 + thY], 4);
+ __privateGet(this, _last).set(__privateGet(this, _last).subarray(14, 18), 12);
+ __privateGet(this, _last).set([x2 - thX, y2 - thY], 16);
+ if (isNaN(__privateGet(this, _last)[6])) {
+ if (__privateGet(this, _top).length === 0) {
+ __privateGet(this, _last).set([x1 + thX, y1 + thY], 2);
+ __privateGet(this, _top).push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight);
+ __privateGet(this, _last).set([x1 - thX, y1 - thY], 14);
+ __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight);
+ }
+ __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6);
+ return !this.isEmpty();
+ }
+ __privateGet(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] = __privateGet(this, _last).subarray(2, 6);
+ __privateGet(this, _top).push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight);
+ [x1, y1, x0, y0] = __privateGet(this, _last).subarray(14, 18);
+ __privateGet(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] = __privateGet(this, _last).subarray(0, 6);
+ __privateGet(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] = __privateGet(this, _last).subarray(12, 18);
+ __privateGet(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 = __privateGet(this, _top);
+ const bottom = __privateGet(this, _bottom);
+ const lastTop = __privateGet(this, _last).subarray(4, 6);
+ const lastBottom = __privateGet(this, _last).subarray(16, 18);
+ const [x, y, width, height] = __privateGet(this, _box3);
+ const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this);
+ if (isNaN(__privateGet(this, _last)[6]) && !this.isEmpty()) {
+ return `M${(__privateGet(this, _last)[2] - x) / width} ${(__privateGet(this, _last)[3] - y) / height} L${(__privateGet(this, _last)[4] - x) / width} ${(__privateGet(this, _last)[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(__privateGet(this, _last)[16] - x) / width} ${(__privateGet(this, _last)[17] - y) / height} L${(__privateGet(this, _last)[14] - x) / width} ${(__privateGet(this, _last)[15] - y) / height} Z`;
+ }
+ 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]}`);
+ }
+ }
+ 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}`);
+ 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]}`);
+ }
+ }
+ buffer.push(`L${bottom[4]} ${bottom[5]} Z`);
+ return buffer.join(" ");
+ }
+ getOutlines() {
+ var _a2, _b;
+ const top = __privateGet(this, _top);
+ const bottom = __privateGet(this, _bottom);
+ const last = __privateGet(this, _last);
+ const lastTop = last.subarray(4, 6);
+ const lastBottom = last.subarray(16, 18);
+ const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3);
+ const points = new Float64Array(((_b = (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.length) != null ? _b : 0) + 2);
+ for (let i = 0, ii = points.length - 2; i < ii; i += 2) {
+ points[i] = (__privateGet(this, _points)[i] - layerX) / layerWidth;
+ points[i + 1] = (__privateGet(this, _points)[i + 1] - layerY) / layerHeight;
+ }
+ points[points.length - 2] = (__privateGet(this, _lastX) - layerX) / layerWidth;
+ points[points.length - 1] = (__privateGet(this, _lastY) - layerY) / layerHeight;
+ const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this);
+ if (isNaN(last[6]) && !this.isEmpty()) {
+ const outline2 = new Float64Array(36);
+ outline2.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 new FreeHighlightOutline(outline2, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR));
+ }
+ const outline = new Float64Array(__privateGet(this, _top).length + 24 + __privateGet(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];
+ }
+ 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], N);
+ N += 24;
+ 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;
+ }
+ }
+ outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], N);
+ return new FreeHighlightOutline(outline, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR));
+ }
+};
+var FreeOutliner = _FreeOutliner;
+_box3 = new WeakMap();
+_bottom = new WeakMap();
+_innerMargin = new WeakMap();
+_isLTR = new WeakMap();
+_top = new WeakMap();
+_last = new WeakMap();
+_lastX = new WeakMap();
+_lastY = new WeakMap();
+_min = new WeakMap();
+_min_dist = new WeakMap();
+_scaleFactor = new WeakMap();
+_thickness = new WeakMap();
+_points = new WeakMap();
+_MIN_DIST = new WeakMap();
+_MIN_DIFF = new WeakMap();
+_MIN = new WeakMap();
+_getLastCoords = new WeakSet();
+getLastCoords_fn = function() {
+ const lastTop = __privateGet(this, _last).subarray(4, 6);
+ const lastBottom = __privateGet(this, _last).subarray(16, 18);
+ const [x, y, width, height] = __privateGet(this, _box3);
+ return [(__privateGet(this, _lastX) + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (__privateGet(this, _lastX) + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastBottom[1] - lastTop[1]) / 2 - y) / height];
+};
+__privateAdd(FreeOutliner, _MIN_DIST, 8);
+__privateAdd(FreeOutliner, _MIN_DIFF, 2);
+__privateAdd(FreeOutliner, _MIN, __privateGet(_FreeOutliner, _MIN_DIST) + __privateGet(_FreeOutliner, _MIN_DIFF));
+var _box4, _bbox, _innerMargin2, _isLTR2, _points2, _scaleFactor2, _outline, _rescale, rescale_fn, _rescaleAndSwap, rescaleAndSwap_fn, _computeMinMax, computeMinMax_fn;
+var FreeHighlightOutline = class extends Outline {
+ constructor(outline, points, box, scaleFactor, innerMargin, isLTR) {
+ super();
+ __privateAdd(this, _rescale);
+ __privateAdd(this, _rescaleAndSwap);
+ __privateAdd(this, _computeMinMax);
+ __privateAdd(this, _box4, void 0);
+ __privateAdd(this, _bbox, null);
+ __privateAdd(this, _innerMargin2, void 0);
+ __privateAdd(this, _isLTR2, void 0);
+ __privateAdd(this, _points2, void 0);
+ __privateAdd(this, _scaleFactor2, void 0);
+ __privateAdd(this, _outline, void 0);
+ __privateSet(this, _outline, outline);
+ __privateSet(this, _points2, points);
+ __privateSet(this, _box4, box);
+ __privateSet(this, _scaleFactor2, scaleFactor);
+ __privateSet(this, _innerMargin2, innerMargin);
+ __privateSet(this, _isLTR2, isLTR);
+ __privateMethod(this, _computeMinMax, computeMinMax_fn).call(this, isLTR);
+ const {
+ x,
+ y,
+ width,
+ height
+ } = __privateGet(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${__privateGet(this, _outline)[4]} ${__privateGet(this, _outline)[5]}`];
+ for (let i = 6, ii = __privateGet(this, _outline).length; i < ii; i += 6) {
+ if (isNaN(__privateGet(this, _outline)[i])) {
+ buffer.push(`L${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`);
+ continue;
+ }
+ buffer.push(`C${__privateGet(this, _outline)[i]} ${__privateGet(this, _outline)[i + 1]} ${__privateGet(this, _outline)[i + 2]} ${__privateGet(this, _outline)[i + 3]} ${__privateGet(this, _outline)[i + 4]} ${__privateGet(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 = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), blX, trY, width, -height);
+ points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), blX, trY, width, -height);
+ break;
+ case 90:
+ outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), blX, blY, width, height);
+ points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), blX, blY, width, height);
+ break;
+ case 180:
+ outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), trX, blY, -width, height);
+ points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), trX, blY, -width, height);
+ break;
+ case 270:
+ outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), trX, trY, -width, -height);
+ points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), trX, trY, -width, -height);
+ break;
+ }
+ return {
+ outline: Array.from(outline),
+ points: [Array.from(points)]
+ };
+ }
+ get box() {
+ return __privateGet(this, _bbox);
+ }
+ getNewOutline(thickness, innerMargin) {
+ const {
+ x,
+ y,
+ width,
+ height
+ } = __privateGet(this, _bbox);
+ const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box4);
+ const sx = width * layerWidth;
+ const sy = height * layerHeight;
+ const tx = x * layerWidth + layerX;
+ const ty = y * layerHeight + layerY;
+ const outliner = new FreeOutliner({
+ x: __privateGet(this, _points2)[0] * sx + tx,
+ y: __privateGet(this, _points2)[1] * sy + ty
+ }, __privateGet(this, _box4), __privateGet(this, _scaleFactor2), thickness, __privateGet(this, _isLTR2), innerMargin != null ? innerMargin : __privateGet(this, _innerMargin2));
+ for (let i = 2; i < __privateGet(this, _points2).length; i += 2) {
+ outliner.add({
+ x: __privateGet(this, _points2)[i] * sx + tx,
+ y: __privateGet(this, _points2)[i + 1] * sy + ty
+ });
+ }
+ return outliner.getOutlines();
+ }
+};
+_box4 = new WeakMap();
+_bbox = new WeakMap();
+_innerMargin2 = new WeakMap();
+_isLTR2 = new WeakMap();
+_points2 = new WeakMap();
+_scaleFactor2 = new WeakMap();
+_outline = new WeakMap();
+_rescale = new WeakSet();
+rescale_fn = function(src, tx, ty, sx, sy) {
+ const dest = new Float64Array(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;
+};
+_rescaleAndSwap = new WeakSet();
+rescaleAndSwap_fn = function(src, tx, ty, sx, sy) {
+ const dest = new Float64Array(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;
+};
+_computeMinMax = new WeakSet();
+computeMinMax_fn = function(isLTR) {
+ const outline = __privateGet(this, _outline);
+ let lastX = outline[4];
+ let lastY = outline[5];
+ let minX = lastX;
+ let minY = lastY;
+ let maxX = lastX;
+ let maxY = 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) {
+ if (isNaN(outline[i])) {
+ minX = Math.min(minX, outline[i + 4]);
+ minY = Math.min(minY, outline[i + 5]);
+ maxX = Math.max(maxX, outline[i + 4]);
+ maxY = Math.max(maxY, outline[i + 5]);
+ if (lastPointY < outline[i + 5]) {
+ lastPointX = outline[i + 4];
+ lastPointY = outline[i + 5];
+ } else if (lastPointY === outline[i + 5]) {
+ lastPointX = ltrCallback(lastPointX, outline[i + 4]);
+ }
+ } else {
+ const bbox = Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6));
+ minX = Math.min(minX, bbox[0]);
+ minY = Math.min(minY, bbox[1]);
+ maxX = Math.max(maxX, bbox[2]);
+ maxY = Math.max(maxY, bbox[3]);
+ if (lastPointY < bbox[3]) {
+ lastPointX = bbox[2];
+ lastPointY = bbox[3];
+ } else if (lastPointY === bbox[3]) {
+ lastPointX = ltrCallback(lastPointX, bbox[2]);
+ }
+ }
+ lastX = outline[i + 4];
+ lastY = outline[i + 5];
+ }
+ const x = minX - __privateGet(this, _innerMargin2), y = minY - __privateGet(this, _innerMargin2), width = maxX - minX + 2 * __privateGet(this, _innerMargin2), height = maxY - minY + 2 * __privateGet(this, _innerMargin2);
+ __privateSet(this, _bbox, {
+ x,
+ y,
+ width,
+ height,
+ lastPoint: [lastPointX, lastPointY]
+ });
+};
+var _boundKeyDown2, _boundPointerDown, _button, _buttonSwatch, _defaultColor, _dropdown, _dropdownWasFromKeyboard, _isMainColorPicker, _editor3, _eventBus, _uiManager2, _type, _getDropdownRoot, getDropdownRoot_fn, _colorSelect, colorSelect_fn, _keyDown2, keyDown_fn2, _openDropdown, openDropdown_fn, _pointerDown2, pointerDown_fn2, _isDropdownVisible, isDropdownVisible_get;
+var _ColorPicker = class {
+ constructor({
+ editor = null,
+ uiManager = null
+ }) {
+ __privateAdd(this, _getDropdownRoot);
+ __privateAdd(this, _colorSelect);
+ __privateAdd(this, _keyDown2);
+ __privateAdd(this, _openDropdown);
+ __privateAdd(this, _pointerDown2);
+ __privateAdd(this, _isDropdownVisible);
+ __privateAdd(this, _boundKeyDown2, __privateMethod(this, _keyDown2, keyDown_fn2).bind(this));
+ __privateAdd(this, _boundPointerDown, __privateMethod(this, _pointerDown2, pointerDown_fn2).bind(this));
+ __privateAdd(this, _button, null);
+ __privateAdd(this, _buttonSwatch, null);
+ __privateAdd(this, _defaultColor, void 0);
+ __privateAdd(this, _dropdown, null);
+ __privateAdd(this, _dropdownWasFromKeyboard, false);
+ __privateAdd(this, _isMainColorPicker, false);
+ __privateAdd(this, _editor3, null);
+ __privateAdd(this, _eventBus, void 0);
+ __privateAdd(this, _uiManager2, null);
+ __privateAdd(this, _type, void 0);
+ var _a2;
+ if (editor) {
+ __privateSet(this, _isMainColorPicker, false);
+ __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_COLOR);
+ __privateSet(this, _editor3, editor);
+ } else {
+ __privateSet(this, _isMainColorPicker, true);
+ __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR);
+ }
+ __privateSet(this, _uiManager2, (editor == null ? void 0 : editor._uiManager) || uiManager);
+ __privateSet(this, _eventBus, __privateGet(this, _uiManager2)._eventBus);
+ __privateSet(this, _defaultColor, (editor == null ? void 0 : editor.color) || ((_a2 = __privateGet(this, _uiManager2)) == null ? void 0 : _a2.highlightColors.values().next().value) || "#FFFF98");
+ }
+ 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]]));
+ }
+ renderButton() {
+ const button = __privateSet(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 = __privateGet(this, _uiManager2)._signal;
+ button.addEventListener("click", __privateMethod(this, _openDropdown, openDropdown_fn).bind(this), {
+ signal
+ });
+ button.addEventListener("keydown", __privateGet(this, _boundKeyDown2), {
+ signal
+ });
+ const swatch = __privateSet(this, _buttonSwatch, document.createElement("span"));
+ swatch.className = "swatch";
+ swatch.setAttribute("aria-hidden", true);
+ swatch.style.backgroundColor = __privateGet(this, _defaultColor);
+ button.append(swatch);
+ return button;
+ }
+ renderMainDropdown() {
+ const dropdown = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this));
+ dropdown.setAttribute("aria-orientation", "horizontal");
+ dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel");
+ return dropdown;
+ }
+ _colorSelectFromKeyboard(event) {
+ if (event.target === __privateGet(this, _button)) {
+ __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event);
+ return;
+ }
+ const color = event.target.getAttribute("data-color");
+ if (!color) {
+ return;
+ }
+ __privateMethod(this, _colorSelect, colorSelect_fn).call(this, color, event);
+ }
+ _moveToNext(event) {
+ var _a2, _b;
+ if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event);
+ return;
+ }
+ if (event.target === __privateGet(this, _button)) {
+ (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus();
+ return;
+ }
+ (_b = event.target.nextSibling) == null ? void 0 : _b.focus();
+ }
+ _moveToPrevious(event) {
+ var _a2, _b;
+ if (event.target === ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.firstChild) || event.target === __privateGet(this, _button)) {
+ if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ this._hideDropdownFromKeyboard();
+ }
+ return;
+ }
+ if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event);
+ }
+ (_b = event.target.previousSibling) == null ? void 0 : _b.focus();
+ }
+ _moveToBeginning(event) {
+ var _a2;
+ if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event);
+ return;
+ }
+ (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus();
+ }
+ _moveToEnd(event) {
+ var _a2;
+ if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event);
+ return;
+ }
+ (_a2 = __privateGet(this, _dropdown).lastChild) == null ? void 0 : _a2.focus();
+ }
+ hideDropdown() {
+ var _a2;
+ (_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.classList.add("hidden");
+ window.removeEventListener("pointerdown", __privateGet(this, _boundPointerDown));
+ }
+ _hideDropdownFromKeyboard() {
+ var _a2;
+ if (__privateGet(this, _isMainColorPicker)) {
+ return;
+ }
+ if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ (_a2 = __privateGet(this, _editor3)) == null ? void 0 : _a2.unselect();
+ return;
+ }
+ this.hideDropdown();
+ __privateGet(this, _button).focus({
+ preventScroll: true,
+ focusVisible: __privateGet(this, _dropdownWasFromKeyboard)
+ });
+ }
+ updateColor(color) {
+ if (__privateGet(this, _buttonSwatch)) {
+ __privateGet(this, _buttonSwatch).style.backgroundColor = color;
+ }
+ if (!__privateGet(this, _dropdown)) {
+ return;
+ }
+ const i = __privateGet(this, _uiManager2).highlightColors.values();
+ for (const child of __privateGet(this, _dropdown).children) {
+ child.setAttribute("aria-selected", i.next().value === color);
+ }
+ }
+ destroy() {
+ var _a2, _b;
+ (_a2 = __privateGet(this, _button)) == null ? void 0 : _a2.remove();
+ __privateSet(this, _button, null);
+ __privateSet(this, _buttonSwatch, null);
+ (_b = __privateGet(this, _dropdown)) == null ? void 0 : _b.remove();
+ __privateSet(this, _dropdown, null);
+ }
+};
+var ColorPicker = _ColorPicker;
+_boundKeyDown2 = new WeakMap();
+_boundPointerDown = new WeakMap();
+_button = new WeakMap();
+_buttonSwatch = new WeakMap();
+_defaultColor = new WeakMap();
+_dropdown = new WeakMap();
+_dropdownWasFromKeyboard = new WeakMap();
+_isMainColorPicker = new WeakMap();
+_editor3 = new WeakMap();
+_eventBus = new WeakMap();
+_uiManager2 = new WeakMap();
+_type = new WeakMap();
+_getDropdownRoot = new WeakSet();
+getDropdownRoot_fn = function() {
+ const div = document.createElement("div");
+ const signal = __privateGet(this, _uiManager2)._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 __privateGet(this, _uiManager2).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", `pdfjs-editor-colorpicker-${name}`);
+ const swatch = document.createElement("span");
+ button.append(swatch);
+ swatch.className = "swatch";
+ swatch.style.backgroundColor = color;
+ button.setAttribute("aria-selected", color === __privateGet(this, _defaultColor));
+ button.addEventListener("click", __privateMethod(this, _colorSelect, colorSelect_fn).bind(this, color), {
+ signal
+ });
+ div.append(button);
+ }
+ div.addEventListener("keydown", __privateGet(this, _boundKeyDown2), {
+ signal
+ });
+ return div;
+};
+_colorSelect = new WeakSet();
+colorSelect_fn = function(color, event) {
+ event.stopPropagation();
+ __privateGet(this, _eventBus).dispatch("switchannotationeditorparams", {
+ source: this,
+ type: __privateGet(this, _type),
+ value: color
+ });
+};
+_keyDown2 = new WeakSet();
+keyDown_fn2 = function(event) {
+ _ColorPicker._keyboardManager.exec(this, event);
+};
+_openDropdown = new WeakSet();
+openDropdown_fn = function(event) {
+ if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) {
+ this.hideDropdown();
+ return;
+ }
+ __privateSet(this, _dropdownWasFromKeyboard, event.detail === 0);
+ window.addEventListener("pointerdown", __privateGet(this, _boundPointerDown), {
+ signal: __privateGet(this, _uiManager2)._signal
+ });
+ if (__privateGet(this, _dropdown)) {
+ __privateGet(this, _dropdown).classList.remove("hidden");
+ return;
+ }
+ const root = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this));
+ __privateGet(this, _button).append(root);
+};
+_pointerDown2 = new WeakSet();
+pointerDown_fn2 = function(event) {
+ var _a2;
+ if ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.contains(event.target)) {
+ return;
+ }
+ this.hideDropdown();
+};
+_isDropdownVisible = new WeakSet();
+isDropdownVisible_get = function() {
+ return __privateGet(this, _dropdown) && !__privateGet(this, _dropdown).classList.contains("hidden");
+};
+var _anchorNode, _anchorOffset, _boxes, _clipPathId, _colorPicker2, _focusOutlines, _focusNode, _focusOffset, _highlightDiv, _highlightOutlines, _id4, _isFreeHighlight, _lastPoint, _opacity, _outlineId, _text, _thickness2, _methodOfCreation, _createOutlines, createOutlines_fn, _createFreeOutlines, createFreeOutlines_fn, _updateColor2, updateColor_fn2, _updateThickness, updateThickness_fn, _changeThickness, changeThickness_fn, _cleanDrawLayer, cleanDrawLayer_fn, _addToDrawLayer, addToDrawLayer_fn, _rotateBbox, rotateBbox_fn, _keydown, keydown_fn, _setCaret, setCaret_fn, _getRotation, getRotation_fn, _serializeBoxes, serializeBoxes_fn, _serializeOutlines, serializeOutlines_fn, _highlightMove, highlightMove_fn, _endHighlight, endHighlight_fn;
+var _HighlightEditor = class extends AnnotationEditor {
+ constructor(params) {
+ super({
+ ...params,
+ name: "highlightEditor"
+ });
+ __privateAdd(this, _createOutlines);
+ __privateAdd(this, _createFreeOutlines);
+ __privateAdd(this, _updateColor2);
+ __privateAdd(this, _updateThickness);
+ __privateAdd(this, _changeThickness);
+ __privateAdd(this, _cleanDrawLayer);
+ __privateAdd(this, _addToDrawLayer);
+ __privateAdd(this, _keydown);
+ __privateAdd(this, _setCaret);
+ __privateAdd(this, _getRotation);
+ __privateAdd(this, _serializeBoxes);
+ __privateAdd(this, _serializeOutlines);
+ __privateAdd(this, _anchorNode, null);
+ __privateAdd(this, _anchorOffset, 0);
+ __privateAdd(this, _boxes, void 0);
+ __privateAdd(this, _clipPathId, null);
+ __privateAdd(this, _colorPicker2, null);
+ __privateAdd(this, _focusOutlines, null);
+ __privateAdd(this, _focusNode, null);
+ __privateAdd(this, _focusOffset, 0);
+ __privateAdd(this, _highlightDiv, null);
+ __privateAdd(this, _highlightOutlines, null);
+ __privateAdd(this, _id4, null);
+ __privateAdd(this, _isFreeHighlight, false);
+ __privateAdd(this, _lastPoint, null);
+ __privateAdd(this, _opacity, void 0);
+ __privateAdd(this, _outlineId, null);
+ __privateAdd(this, _text, "");
+ __privateAdd(this, _thickness2, void 0);
+ __privateAdd(this, _methodOfCreation, "");
+ this.color = params.color || _HighlightEditor._defaultColor;
+ __privateSet(this, _thickness2, params.thickness || _HighlightEditor._defaultThickness);
+ __privateSet(this, _opacity, params.opacity || _HighlightEditor._defaultOpacity);
+ __privateSet(this, _boxes, params.boxes || null);
+ __privateSet(this, _methodOfCreation, params.methodOfCreation || "");
+ __privateSet(this, _text, params.text || "");
+ this._isDraggable = false;
+ if (params.highlightId > -1) {
+ __privateSet(this, _isFreeHighlight, true);
+ __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, params);
+ __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this);
+ } else {
+ __privateSet(this, _anchorNode, params.anchorNode);
+ __privateSet(this, _anchorOffset, params.anchorOffset);
+ __privateSet(this, _focusNode, params.focusNode);
+ __privateSet(this, _focusOffset, params.focusOffset);
+ __privateMethod(this, _createOutlines, createOutlines_fn).call(this);
+ __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this);
+ this.rotate(this.rotation);
+ }
+ }
+ 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]
+ }]]));
+ }
+ get telemetryInitialData() {
+ return {
+ action: "added",
+ type: __privateGet(this, _isFreeHighlight) ? "free_highlight" : "highlight",
+ color: this._uiManager.highlightColorNames.get(this.color),
+ thickness: __privateGet(this, _thickness2),
+ methodOfCreation: __privateGet(this, _methodOfCreation)
+ };
+ }
+ get telemetryFinalData() {
+ return {
+ type: "highlight",
+ color: this._uiManager.highlightColorNames.get(this.color)
+ };
+ }
+ static computeTelemetryFinalData(data) {
+ return {
+ numberOfColors: data.get("color").size
+ };
+ }
+ static initialize(l10n, uiManager) {
+ var _a2;
+ AnnotationEditor.initialize(l10n, uiManager);
+ _HighlightEditor._defaultColor || (_HighlightEditor._defaultColor = ((_a2 = uiManager.highlightColors) == null ? void 0 : _a2.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 __privateGet(this, _lastPoint);
+ }
+ updateParams(type, value) {
+ switch (type) {
+ case AnnotationEditorParamsType.HIGHLIGHT_COLOR:
+ __privateMethod(this, _updateColor2, updateColor_fn2).call(this, value);
+ break;
+ case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:
+ __privateMethod(this, _updateThickness, updateThickness_fn).call(this, value);
+ break;
+ }
+ }
+ static get defaultPropertiesToUpdate() {
+ return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, _HighlightEditor._defaultThickness]];
+ }
+ get propertiesToUpdate() {
+ return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, __privateGet(this, _thickness2) || _HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, __privateGet(this, _isFreeHighlight)]];
+ }
+ async addEditToolbar() {
+ const toolbar = await super.addEditToolbar();
+ if (!toolbar) {
+ return null;
+ }
+ if (this._uiManager.highlightColors) {
+ __privateSet(this, _colorPicker2, new ColorPicker({
+ editor: this
+ }));
+ toolbar.addColorPicker(__privateGet(this, _colorPicker2));
+ }
+ return toolbar;
+ }
+ disableEditing() {
+ super.disableEditing();
+ this.div.classList.toggle("disabled", true);
+ }
+ enableEditing() {
+ super.enableEditing();
+ this.div.classList.toggle("disabled", false);
+ }
+ fixAndSetPosition() {
+ return super.fixAndSetPosition(__privateMethod(this, _getRotation, getRotation_fn).call(this));
+ }
+ getBaseTranslation() {
+ return [0, 0];
+ }
+ getRect(tx, ty) {
+ return super.getRect(tx, ty, __privateMethod(this, _getRotation, getRotation_fn).call(this));
+ }
+ onceAdded() {
+ this.parent.addUndoableEditor(this);
+ this.div.focus();
+ }
+ remove() {
+ __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this);
+ this._reportTelemetry({
+ action: "deleted"
+ });
+ super.remove();
+ }
+ rebuild() {
+ if (!this.parent) {
+ return;
+ }
+ super.rebuild();
+ if (this.div === null) {
+ return;
+ }
+ __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this);
+ if (!this.isAttachedToDOM) {
+ this.parent.add(this);
+ }
+ }
+ setParent(parent) {
+ var _a2;
+ let mustBeSelected = false;
+ if (this.parent && !parent) {
+ __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this);
+ } else if (parent) {
+ __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this, parent);
+ mustBeSelected = !this.parent && ((_a2 = this.div) == null ? void 0 : _a2.classList.contains("selectedEditor"));
+ }
+ super.setParent(parent);
+ this.show(this._isVisible);
+ if (mustBeSelected) {
+ this.select();
+ }
+ }
+ rotate(angle) {
+ var _a2, _b, _c;
+ const {
+ drawLayer
+ } = this.parent;
+ let box;
+ if (__privateGet(this, _isFreeHighlight)) {
+ angle = (angle - this.rotation + 360) % 360;
+ box = __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, angle);
+ } else {
+ box = __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, this, angle);
+ }
+ drawLayer.rotate(__privateGet(this, _id4), angle);
+ drawLayer.rotate(__privateGet(this, _outlineId), angle);
+ drawLayer.updateBox(__privateGet(this, _id4), box);
+ drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_c = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_c, __privateGet(this, _focusOutlines).box, angle));
+ }
+ render() {
+ if (this.div) {
+ return this.div;
+ }
+ const div = super.render();
+ if (__privateGet(this, _text)) {
+ div.setAttribute("aria-label", __privateGet(this, _text));
+ div.setAttribute("role", "mark");
+ }
+ if (__privateGet(this, _isFreeHighlight)) {
+ div.classList.add("free");
+ } else {
+ this.div.addEventListener("keydown", __privateMethod(this, _keydown, keydown_fn).bind(this), {
+ signal: this._uiManager._signal
+ });
+ }
+ const highlightDiv = __privateSet(this, _highlightDiv, document.createElement("div"));
+ div.append(highlightDiv);
+ highlightDiv.setAttribute("aria-hidden", "true");
+ highlightDiv.className = "internal";
+ highlightDiv.style.clipPath = __privateGet(this, _clipPathId);
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.setDims(this.width * parentWidth, this.height * parentHeight);
+ bindEvents(this, __privateGet(this, _highlightDiv), ["pointerover", "pointerleave"]);
+ this.enableEditing();
+ return div;
+ }
+ pointerover() {
+ this.parent.drawLayer.addClass(__privateGet(this, _outlineId), "hovered");
+ }
+ pointerleave() {
+ this.parent.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered");
+ }
+ _moveCaret(direction) {
+ this.parent.unselect(this);
+ switch (direction) {
+ case 0:
+ case 2:
+ __privateMethod(this, _setCaret, setCaret_fn).call(this, true);
+ break;
+ case 1:
+ case 3:
+ __privateMethod(this, _setCaret, setCaret_fn).call(this, false);
+ break;
+ }
+ }
+ select() {
+ var _a2, _b;
+ super.select();
+ if (!__privateGet(this, _outlineId)) {
+ return;
+ }
+ (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered");
+ (_b = this.parent) == null ? void 0 : _b.drawLayer.addClass(__privateGet(this, _outlineId), "selected");
+ }
+ unselect() {
+ var _a2;
+ super.unselect();
+ if (!__privateGet(this, _outlineId)) {
+ return;
+ }
+ (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "selected");
+ if (!__privateGet(this, _isFreeHighlight)) {
+ __privateMethod(this, _setCaret, setCaret_fn).call(this, false);
+ }
+ }
+ get _mustFixPosition() {
+ return !__privateGet(this, _isFreeHighlight);
+ }
+ show(visible = this._isVisible) {
+ super.show(visible);
+ if (this.parent) {
+ this.parent.drawLayer.show(__privateGet(this, _id4), visible);
+ this.parent.drawLayer.show(__privateGet(this, _outlineId), visible);
+ }
+ }
+ 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 pointerDown = (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ };
+ const pointerUpCallback = (e) => {
+ ac.abort();
+ __privateMethod(this, _endHighlight, endHighlight_fn).call(this, parent, e);
+ };
+ window.addEventListener("blur", pointerUpCallback, {
+ signal
+ });
+ window.addEventListener("pointerup", pointerUpCallback, {
+ signal
+ });
+ window.addEventListener("pointerdown", pointerDown, {
+ capture: true,
+ passive: false,
+ signal
+ });
+ window.addEventListener("contextmenu", noContextMenu, {
+ signal
+ });
+ textLayer.addEventListener("pointermove", __privateMethod(this, _highlightMove, highlightMove_fn).bind(this, parent), {
+ signal
+ });
+ this._freeHighlight = new FreeOutliner({
+ x,
+ y
+ }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 1e-3);
+ ({
+ id: this._freeHighlightId,
+ clipPathId: this._freeHighlightClipId
+ } = parent.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, true));
+ }
+ static deserialize(data, parent, uiManager) {
+ var _a2;
+ const editor = super.deserialize(data, parent, uiManager);
+ const {
+ rect: [blX, blY, trX, trY],
+ color,
+ quadPoints
+ } = data;
+ editor.color = Util.makeHexColor(...color);
+ __privateSet(editor, _opacity, data.opacity);
+ const [pageWidth, pageHeight] = editor.pageDimensions;
+ editor.width = (trX - blX) / pageWidth;
+ editor.height = (trY - blY) / pageHeight;
+ const boxes = __privateSet(editor, _boxes, []);
+ for (let i = 0; i < quadPoints.length; i += 8) {
+ boxes.push({
+ x: (quadPoints[4] - trX) / pageWidth,
+ y: (trY - (1 - quadPoints[i + 5])) / pageHeight,
+ width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth,
+ height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight
+ });
+ }
+ __privateMethod(_a2 = editor, _createOutlines, createOutlines_fn).call(_a2);
+ return editor;
+ }
+ serialize(isForCopying = false) {
+ if (this.isEmpty() || isForCopying) {
+ return null;
+ }
+ const rect = this.getRect(0, 0);
+ const color = AnnotationEditor._colorManager.convert(this.color);
+ return {
+ annotationType: AnnotationEditorType.HIGHLIGHT,
+ color,
+ opacity: __privateGet(this, _opacity),
+ thickness: __privateGet(this, _thickness2),
+ quadPoints: __privateMethod(this, _serializeBoxes, serializeBoxes_fn).call(this),
+ outlines: __privateMethod(this, _serializeOutlines, serializeOutlines_fn).call(this, rect),
+ pageIndex: this.pageIndex,
+ rect,
+ rotation: __privateMethod(this, _getRotation, getRotation_fn).call(this),
+ structTreeParentId: this._structTreeParentId
+ };
+ }
+ static canCreateNewEmptyEditor() {
+ return false;
+ }
+};
+var HighlightEditor = _HighlightEditor;
+_anchorNode = new WeakMap();
+_anchorOffset = new WeakMap();
+_boxes = new WeakMap();
+_clipPathId = new WeakMap();
+_colorPicker2 = new WeakMap();
+_focusOutlines = new WeakMap();
+_focusNode = new WeakMap();
+_focusOffset = new WeakMap();
+_highlightDiv = new WeakMap();
+_highlightOutlines = new WeakMap();
+_id4 = new WeakMap();
+_isFreeHighlight = new WeakMap();
+_lastPoint = new WeakMap();
+_opacity = new WeakMap();
+_outlineId = new WeakMap();
+_text = new WeakMap();
+_thickness2 = new WeakMap();
+_methodOfCreation = new WeakMap();
+_createOutlines = new WeakSet();
+createOutlines_fn = function() {
+ const outliner = new Outliner(__privateGet(this, _boxes), 1e-3);
+ __privateSet(this, _highlightOutlines, outliner.getOutlines());
+ ({
+ x: this.x,
+ y: this.y,
+ width: this.width,
+ height: this.height
+ } = __privateGet(this, _highlightOutlines).box);
+ const outlinerForOutline = new Outliner(__privateGet(this, _boxes), 25e-4, 1e-3, this._uiManager.direction === "ltr");
+ __privateSet(this, _focusOutlines, outlinerForOutline.getOutlines());
+ const {
+ lastPoint
+ } = __privateGet(this, _focusOutlines).box;
+ __privateSet(this, _lastPoint, [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]);
+};
+_createFreeOutlines = new WeakSet();
+createFreeOutlines_fn = function({
+ highlightOutlines,
+ highlightId,
+ clipPathId
+}) {
+ var _a2, _b;
+ __privateSet(this, _highlightOutlines, highlightOutlines);
+ const extraThickness = 1.5;
+ __privateSet(this, _focusOutlines, highlightOutlines.getNewOutline(__privateGet(this, _thickness2) / 2 + extraThickness, 25e-4));
+ if (highlightId >= 0) {
+ __privateSet(this, _id4, highlightId);
+ __privateSet(this, _clipPathId, clipPathId);
+ this.parent.drawLayer.finalizeLine(highlightId, highlightOutlines);
+ __privateSet(this, _outlineId, this.parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines)));
+ } else if (this.parent) {
+ const angle = this.parent.viewport.rotation;
+ this.parent.drawLayer.updateLine(__privateGet(this, _id4), highlightOutlines);
+ this.parent.drawLayer.updateBox(__privateGet(this, _id4), __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, (angle - this.rotation + 360) % 360));
+ this.parent.drawLayer.updateLine(__privateGet(this, _outlineId), __privateGet(this, _focusOutlines));
+ this.parent.drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, __privateGet(this, _focusOutlines).box, angle));
+ }
+ 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
+ } = __privateGet(this, _focusOutlines).box;
+ __privateSet(this, _lastPoint, [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]);
+};
+_updateColor2 = new WeakSet();
+updateColor_fn2 = function(color) {
+ const setColor = (col) => {
+ var _a2, _b;
+ this.color = col;
+ (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.changeColor(__privateGet(this, _id4), col);
+ (_b = __privateGet(this, _colorPicker2)) == null ? void 0 : _b.updateColor(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.HIGHLIGHT_COLOR,
+ overwriteIfSameType: true,
+ keepUndo: true
+ });
+ this._reportTelemetry({
+ action: "color_changed",
+ color: this._uiManager.highlightColorNames.get(color)
+ }, true);
+};
+_updateThickness = new WeakSet();
+updateThickness_fn = function(thickness) {
+ const savedThickness = __privateGet(this, _thickness2);
+ const setThickness = (th) => {
+ __privateSet(this, _thickness2, th);
+ __privateMethod(this, _changeThickness, changeThickness_fn).call(this, th);
+ };
+ this.addCommands({
+ cmd: setThickness.bind(this, thickness),
+ undo: setThickness.bind(this, savedThickness),
+ post: this._uiManager.updateUI.bind(this._uiManager, this),
+ mustExec: true,
+ type: AnnotationEditorParamsType.INK_THICKNESS,
+ overwriteIfSameType: true,
+ keepUndo: true
+ });
+ this._reportTelemetry({
+ action: "thickness_changed",
+ thickness
+ }, true);
+};
+_changeThickness = new WeakSet();
+changeThickness_fn = function(thickness) {
+ if (!__privateGet(this, _isFreeHighlight)) {
+ return;
+ }
+ __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, {
+ highlightOutlines: __privateGet(this, _highlightOutlines).getNewOutline(thickness / 2)
+ });
+ this.fixAndSetPosition();
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.setDims(this.width * parentWidth, this.height * parentHeight);
+};
+_cleanDrawLayer = new WeakSet();
+cleanDrawLayer_fn = function() {
+ if (__privateGet(this, _id4) === null || !this.parent) {
+ return;
+ }
+ this.parent.drawLayer.remove(__privateGet(this, _id4));
+ __privateSet(this, _id4, null);
+ this.parent.drawLayer.remove(__privateGet(this, _outlineId));
+ __privateSet(this, _outlineId, null);
+};
+_addToDrawLayer = new WeakSet();
+addToDrawLayer_fn = function(parent = this.parent) {
+ if (__privateGet(this, _id4) !== null) {
+ return;
+ }
+ ({
+ id: __privateWrapper(this, _id4)._,
+ clipPathId: __privateWrapper(this, _clipPathId)._
+ } = parent.drawLayer.highlight(__privateGet(this, _highlightOutlines), this.color, __privateGet(this, _opacity)));
+ __privateSet(this, _outlineId, parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines)));
+ if (__privateGet(this, _highlightDiv)) {
+ __privateGet(this, _highlightDiv).style.clipPath = __privateGet(this, _clipPathId);
+ }
+};
+_rotateBbox = new WeakSet();
+rotateBbox_fn = function({
+ x,
+ y,
+ width,
+ height
+}, angle) {
+ switch (angle) {
+ case 90:
+ return {
+ x: 1 - y - height,
+ y: x,
+ width: height,
+ height: width
+ };
+ case 180:
+ return {
+ x: 1 - x - width,
+ y: 1 - y - height,
+ width,
+ height
+ };
+ case 270:
+ return {
+ x: y,
+ y: 1 - x - width,
+ width: height,
+ height: width
+ };
+ }
+ return {
+ x,
+ y,
+ width,
+ height
+ };
+};
+_keydown = new WeakSet();
+keydown_fn = function(event) {
+ _HighlightEditor._keyboardManager.exec(this, event);
+};
+_setCaret = new WeakSet();
+setCaret_fn = function(start) {
+ if (!__privateGet(this, _anchorNode)) {
+ return;
+ }
+ const selection = window.getSelection();
+ if (start) {
+ selection.setPosition(__privateGet(this, _anchorNode), __privateGet(this, _anchorOffset));
+ } else {
+ selection.setPosition(__privateGet(this, _focusNode), __privateGet(this, _focusOffset));
+ }
+};
+_getRotation = new WeakSet();
+getRotation_fn = function() {
+ return __privateGet(this, _isFreeHighlight) ? this.rotation : 0;
+};
+_serializeBoxes = new WeakSet();
+serializeBoxes_fn = function() {
+ if (__privateGet(this, _isFreeHighlight)) {
+ return null;
+ }
+ const [pageWidth, pageHeight] = this.pageDimensions;
+ const [pageX, pageY] = this.pageTranslation;
+ const boxes = __privateGet(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 - height) * 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 = new WeakSet();
+serializeOutlines_fn = function(rect) {
+ return __privateGet(this, _highlightOutlines).serialize(rect, __privateMethod(this, _getRotation, getRotation_fn).call(this));
+};
+_highlightMove = new WeakSet();
+highlightMove_fn = function(parent, event) {
+ if (this._freeHighlight.add(event)) {
+ parent.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight);
+ }
+};
+_endHighlight = new WeakSet();
+endHighlight_fn = function(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.removeFreeHighlight(this._freeHighlightId);
+ }
+ this._freeHighlightId = -1;
+ this._freeHighlight = null;
+ this._freeHighlightClipId = "";
+};
+__privateAdd(HighlightEditor, _rotateBbox);
+__privateAdd(HighlightEditor, _highlightMove);
+__privateAdd(HighlightEditor, _endHighlight);
+__publicField(HighlightEditor, "_defaultColor", null);
+__publicField(HighlightEditor, "_defaultOpacity", 1);
+__publicField(HighlightEditor, "_defaultThickness", 12);
+__publicField(HighlightEditor, "_l10nPromise");
+__publicField(HighlightEditor, "_type", "highlight");
+__publicField(HighlightEditor, "_editorType", AnnotationEditorType.HIGHLIGHT);
+__publicField(HighlightEditor, "_freeHighlightId", -1);
+__publicField(HighlightEditor, "_freeHighlight", null);
+__publicField(HighlightEditor, "_freeHighlightClipId", "");
+var _baseHeight, _baseWidth, _canvasContextMenuTimeoutId, _currentPath2D, _disableEditing, _drawingAC, _hasSomethingToDraw, _isCanvasInitialized, _observer, _pointerdownAC, _realWidth, _realHeight, _requestFrameCallback, _updateThickness2, updateThickness_fn2, _updateColor3, updateColor_fn3, _updateOpacity, updateOpacity_fn, _getInitialBBox, getInitialBBox_fn, _setStroke, setStroke_fn, _startDrawing, startDrawing_fn, _draw, draw_fn, _endPath, endPath_fn, _stopDrawing, stopDrawing_fn, _drawPoints, drawPoints_fn, _makeBezierCurve, makeBezierCurve_fn, _generateBezierPoints, generateBezierPoints_fn, _redraw, redraw_fn, _addPointerdownListener, addPointerdownListener_fn, _removePointerdownListener, removePointerdownListener_fn, _endDrawing, endDrawing_fn, _createCanvas, createCanvas_fn, _createObserver, createObserver_fn, _setCanvasDims, setCanvasDims_fn, _setScaleFactor, setScaleFactor_fn, _updateTransform, updateTransform_fn, _buildPath2D, buildPath2D_fn, _toPDFCoordinates, toPDFCoordinates_fn, _fromPDFCoordinates, fromPDFCoordinates_fn, _serializePaths, serializePaths_fn, _getBbox, getBbox_fn, _getPadding, getPadding_fn, _fitToContent, fitToContent_fn;
+var _InkEditor = class extends AnnotationEditor {
+ constructor(params) {
+ super({
+ ...params,
+ name: "inkEditor"
+ });
+ __privateAdd(this, _updateThickness2);
+ __privateAdd(this, _updateColor3);
+ __privateAdd(this, _updateOpacity);
+ __privateAdd(this, _getInitialBBox);
+ __privateAdd(this, _setStroke);
+ __privateAdd(this, _startDrawing);
+ __privateAdd(this, _draw);
+ __privateAdd(this, _endPath);
+ __privateAdd(this, _stopDrawing);
+ __privateAdd(this, _drawPoints);
+ __privateAdd(this, _makeBezierCurve);
+ __privateAdd(this, _generateBezierPoints);
+ __privateAdd(this, _redraw);
+ __privateAdd(this, _addPointerdownListener);
+ __privateAdd(this, _removePointerdownListener);
+ __privateAdd(this, _endDrawing);
+ __privateAdd(this, _createCanvas);
+ __privateAdd(this, _createObserver);
+ __privateAdd(this, _setCanvasDims);
+ __privateAdd(this, _setScaleFactor);
+ __privateAdd(this, _updateTransform);
+ __privateAdd(this, _serializePaths);
+ __privateAdd(this, _getBbox);
+ __privateAdd(this, _getPadding);
+ __privateAdd(this, _fitToContent);
+ __privateAdd(this, _baseHeight, 0);
+ __privateAdd(this, _baseWidth, 0);
+ __privateAdd(this, _canvasContextMenuTimeoutId, null);
+ __privateAdd(this, _currentPath2D, new Path2D());
+ __privateAdd(this, _disableEditing, false);
+ __privateAdd(this, _drawingAC, null);
+ __privateAdd(this, _hasSomethingToDraw, false);
+ __privateAdd(this, _isCanvasInitialized, false);
+ __privateAdd(this, _observer, null);
+ __privateAdd(this, _pointerdownAC, null);
+ __privateAdd(this, _realWidth, 0);
+ __privateAdd(this, _realHeight, 0);
+ __privateAdd(this, _requestFrameCallback, null);
+ this.color = params.color || null;
+ this.thickness = params.thickness || null;
+ this.opacity = params.opacity || null;
+ this.paths = [];
+ this.bezierPath2D = [];
+ this.allRawPaths = [];
+ this.currentPath = [];
+ this.scaleFactor = 1;
+ this.translationX = this.translationY = 0;
+ this.x = 0;
+ this.y = 0;
+ this._willKeepAspectRatio = true;
+ }
+ static initialize(l10n, uiManager) {
+ AnnotationEditor.initialize(l10n, uiManager);
+ }
+ static updateDefaultParams(type, value) {
+ switch (type) {
+ case AnnotationEditorParamsType.INK_THICKNESS:
+ _InkEditor._defaultThickness = value;
+ break;
+ case AnnotationEditorParamsType.INK_COLOR:
+ _InkEditor._defaultColor = value;
+ break;
+ case AnnotationEditorParamsType.INK_OPACITY:
+ _InkEditor._defaultOpacity = value / 100;
+ break;
+ }
+ }
+ updateParams(type, value) {
+ switch (type) {
+ case AnnotationEditorParamsType.INK_THICKNESS:
+ __privateMethod(this, _updateThickness2, updateThickness_fn2).call(this, value);
+ break;
+ case AnnotationEditorParamsType.INK_COLOR:
+ __privateMethod(this, _updateColor3, updateColor_fn3).call(this, value);
+ break;
+ case AnnotationEditorParamsType.INK_OPACITY:
+ __privateMethod(this, _updateOpacity, updateOpacity_fn).call(this, value);
+ break;
+ }
+ }
+ static get defaultPropertiesToUpdate() {
+ return [[AnnotationEditorParamsType.INK_THICKNESS, _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(_InkEditor._defaultOpacity * 100)]];
+ }
+ get propertiesToUpdate() {
+ var _a2;
+ return [[AnnotationEditorParamsType.INK_THICKNESS, this.thickness || _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, this.color || _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * ((_a2 = this.opacity) != null ? _a2 : _InkEditor._defaultOpacity))]];
+ }
+ rebuild() {
+ if (!this.parent) {
+ return;
+ }
+ super.rebuild();
+ if (this.div === null) {
+ return;
+ }
+ if (!this.canvas) {
+ __privateMethod(this, _createCanvas, createCanvas_fn).call(this);
+ __privateMethod(this, _createObserver, createObserver_fn).call(this);
+ }
+ if (!this.isAttachedToDOM) {
+ this.parent.add(this);
+ __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this);
+ }
+ __privateMethod(this, _fitToContent, fitToContent_fn).call(this);
+ }
+ remove() {
+ var _a2;
+ if (this.canvas === null) {
+ return;
+ }
+ if (!this.isEmpty()) {
+ this.commit();
+ }
+ this.canvas.width = this.canvas.height = 0;
+ this.canvas.remove();
+ this.canvas = null;
+ if (__privateGet(this, _canvasContextMenuTimeoutId)) {
+ clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId));
+ __privateSet(this, _canvasContextMenuTimeoutId, null);
+ }
+ (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect();
+ __privateSet(this, _observer, null);
+ super.remove();
+ }
+ setParent(parent) {
+ if (!this.parent && parent) {
+ this._uiManager.removeShouldRescale(this);
+ } else if (this.parent && parent === null) {
+ this._uiManager.addShouldRescale(this);
+ }
+ super.setParent(parent);
+ }
+ onScaleChanging() {
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ const width = this.width * parentWidth;
+ const height = this.height * parentHeight;
+ this.setDimensions(width, height);
+ }
+ enableEditMode() {
+ if (__privateGet(this, _disableEditing) || this.canvas === null) {
+ return;
+ }
+ super.enableEditMode();
+ this._isDraggable = false;
+ __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this);
+ }
+ disableEditMode() {
+ if (!this.isInEditMode() || this.canvas === null) {
+ return;
+ }
+ super.disableEditMode();
+ this._isDraggable = !this.isEmpty();
+ this.div.classList.remove("editing");
+ __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this);
+ }
+ onceAdded() {
+ this._isDraggable = !this.isEmpty();
+ }
+ isEmpty() {
+ return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0;
+ }
+ commit() {
+ if (__privateGet(this, _disableEditing)) {
+ return;
+ }
+ super.commit();
+ this.isEditing = false;
+ this.disableEditMode();
+ this.setInForeground();
+ __privateSet(this, _disableEditing, true);
+ this.div.classList.add("disabled");
+ __privateMethod(this, _fitToContent, fitToContent_fn).call(this, true);
+ this.select();
+ this.parent.addInkEditorIfNeeded(true);
+ this.moveInDOM();
+ this.div.focus({
+ preventScroll: true
+ });
+ }
+ focusin(event) {
+ if (!this._focusEventsAllowed) {
+ return;
+ }
+ super.focusin(event);
+ this.enableEditMode();
+ }
+ canvasPointerdown(event) {
+ if (event.button !== 0 || !this.isInEditMode() || __privateGet(this, _disableEditing)) {
+ return;
+ }
+ this.setInForeground();
+ event.preventDefault();
+ if (!this.div.contains(document.activeElement)) {
+ this.div.focus({
+ preventScroll: true
+ });
+ }
+ __privateMethod(this, _startDrawing, startDrawing_fn).call(this, event.offsetX, event.offsetY);
+ }
+ canvasPointermove(event) {
+ event.preventDefault();
+ __privateMethod(this, _draw, draw_fn).call(this, event.offsetX, event.offsetY);
+ }
+ canvasPointerup(event) {
+ event.preventDefault();
+ __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event);
+ }
+ canvasPointerleave(event) {
+ __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event);
+ }
+ get isResizable() {
+ return !this.isEmpty() && __privateGet(this, _disableEditing);
+ }
+ render() {
+ if (this.div) {
+ return this.div;
+ }
+ let baseX, baseY;
+ if (this.width) {
+ baseX = this.x;
+ baseY = this.y;
+ }
+ super.render();
+ this.div.setAttribute("data-l10n-id", "pdfjs-ink");
+ const [x, y, w, h] = __privateMethod(this, _getInitialBBox, getInitialBBox_fn).call(this);
+ this.setAt(x, y, 0, 0);
+ this.setDims(w, h);
+ __privateMethod(this, _createCanvas, createCanvas_fn).call(this);
+ if (this.width) {
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.setAspectRatio(this.width * parentWidth, this.height * parentHeight);
+ this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
+ __privateSet(this, _isCanvasInitialized, true);
+ __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this);
+ this.setDims(this.width * parentWidth, this.height * parentHeight);
+ __privateMethod(this, _redraw, redraw_fn).call(this);
+ this.div.classList.add("disabled");
+ } else {
+ this.div.classList.add("editing");
+ this.enableEditMode();
+ }
+ __privateMethod(this, _createObserver, createObserver_fn).call(this);
+ return this.div;
+ }
+ setDimensions(width, height) {
+ const roundedWidth = Math.round(width);
+ const roundedHeight = Math.round(height);
+ if (__privateGet(this, _realWidth) === roundedWidth && __privateGet(this, _realHeight) === roundedHeight) {
+ return;
+ }
+ __privateSet(this, _realWidth, roundedWidth);
+ __privateSet(this, _realHeight, roundedHeight);
+ this.canvas.style.visibility = "hidden";
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.width = width / parentWidth;
+ this.height = height / parentHeight;
+ this.fixAndSetPosition();
+ if (__privateGet(this, _disableEditing)) {
+ __privateMethod(this, _setScaleFactor, setScaleFactor_fn).call(this, width, height);
+ }
+ __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this);
+ __privateMethod(this, _redraw, redraw_fn).call(this);
+ this.canvas.style.visibility = "visible";
+ this.fixDims();
+ }
+ static deserialize(data, parent, uiManager) {
+ var _a2, _b, _c;
+ if (data instanceof InkAnnotationElement) {
+ return null;
+ }
+ const editor = super.deserialize(data, parent, uiManager);
+ editor.thickness = data.thickness;
+ editor.color = Util.makeHexColor(...data.color);
+ editor.opacity = data.opacity;
+ const [pageWidth, pageHeight] = editor.pageDimensions;
+ const width = editor.width * pageWidth;
+ const height = editor.height * pageHeight;
+ const scaleFactor = editor.parentScale;
+ const padding = data.thickness / 2;
+ __privateSet(editor, _disableEditing, true);
+ __privateSet(editor, _realWidth, Math.round(width));
+ __privateSet(editor, _realHeight, Math.round(height));
+ const {
+ paths,
+ rect,
+ rotation
+ } = data;
+ for (let {
+ bezier
+ } of paths) {
+ bezier = __privateMethod(_a2 = _InkEditor, _fromPDFCoordinates, fromPDFCoordinates_fn).call(_a2, bezier, rect, rotation);
+ const path = [];
+ editor.paths.push(path);
+ let p0 = scaleFactor * (bezier[0] - padding);
+ let p1 = scaleFactor * (bezier[1] - padding);
+ for (let i = 2, ii = bezier.length; i < ii; i += 6) {
+ const p10 = scaleFactor * (bezier[i] - padding);
+ const p11 = scaleFactor * (bezier[i + 1] - padding);
+ const p20 = scaleFactor * (bezier[i + 2] - padding);
+ const p21 = scaleFactor * (bezier[i + 3] - padding);
+ const p30 = scaleFactor * (bezier[i + 4] - padding);
+ const p31 = scaleFactor * (bezier[i + 5] - padding);
+ path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]);
+ p0 = p30;
+ p1 = p31;
+ }
+ const path2D = __privateMethod(this, _buildPath2D, buildPath2D_fn).call(this, path);
+ editor.bezierPath2D.push(path2D);
+ }
+ const bbox = __privateMethod(_b = editor, _getBbox, getBbox_fn).call(_b);
+ __privateSet(editor, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]));
+ __privateSet(editor, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]));
+ __privateMethod(_c = editor, _setScaleFactor, setScaleFactor_fn).call(_c, width, height);
+ return editor;
+ }
+ serialize() {
+ if (this.isEmpty()) {
+ return null;
+ }
+ const rect = this.getRect(0, 0);
+ const color = AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);
+ return {
+ annotationType: AnnotationEditorType.INK,
+ color,
+ thickness: this.thickness,
+ opacity: this.opacity,
+ paths: __privateMethod(this, _serializePaths, serializePaths_fn).call(this, this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect),
+ pageIndex: this.pageIndex,
+ rect,
+ rotation: this.rotation,
+ structTreeParentId: this._structTreeParentId
+ };
+ }
+};
+var InkEditor = _InkEditor;
+_baseHeight = new WeakMap();
+_baseWidth = new WeakMap();
+_canvasContextMenuTimeoutId = new WeakMap();
+_currentPath2D = new WeakMap();
+_disableEditing = new WeakMap();
+_drawingAC = new WeakMap();
+_hasSomethingToDraw = new WeakMap();
+_isCanvasInitialized = new WeakMap();
+_observer = new WeakMap();
+_pointerdownAC = new WeakMap();
+_realWidth = new WeakMap();
+_realHeight = new WeakMap();
+_requestFrameCallback = new WeakMap();
+_updateThickness2 = new WeakSet();
+updateThickness_fn2 = function(thickness) {
+ const setThickness = (th) => {
+ this.thickness = th;
+ __privateMethod(this, _fitToContent, fitToContent_fn).call(this);
+ };
+ const savedThickness = this.thickness;
+ 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
+ });
+};
+_updateColor3 = new WeakSet();
+updateColor_fn3 = function(color) {
+ const setColor = (col) => {
+ this.color = col;
+ __privateMethod(this, _redraw, redraw_fn).call(this);
+ };
+ 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.INK_COLOR,
+ overwriteIfSameType: true,
+ keepUndo: true
+ });
+};
+_updateOpacity = new WeakSet();
+updateOpacity_fn = function(opacity) {
+ const setOpacity = (op) => {
+ this.opacity = op;
+ __privateMethod(this, _redraw, redraw_fn).call(this);
+ };
+ opacity /= 100;
+ const savedOpacity = this.opacity;
+ this.addCommands({
+ cmd: setOpacity.bind(this, opacity),
+ undo: setOpacity.bind(this, savedOpacity),
+ post: this._uiManager.updateUI.bind(this._uiManager, this),
+ mustExec: true,
+ type: AnnotationEditorParamsType.INK_OPACITY,
+ overwriteIfSameType: true,
+ keepUndo: true
+ });
+};
+_getInitialBBox = new WeakSet();
+getInitialBBox_fn = function() {
+ const {
+ parentRotation,
+ parentDimensions: [width, height]
+ } = this;
+ switch (parentRotation) {
+ case 90:
+ return [0, height, height, width];
+ case 180:
+ return [width, height, width, height];
+ case 270:
+ return [width, 0, height, width];
+ default:
+ return [0, 0, width, height];
+ }
+};
+_setStroke = new WeakSet();
+setStroke_fn = function() {
+ const {
+ ctx,
+ color,
+ opacity,
+ thickness,
+ parentScale,
+ scaleFactor
+ } = this;
+ ctx.lineWidth = thickness * parentScale / scaleFactor;
+ ctx.lineCap = "round";
+ ctx.lineJoin = "round";
+ ctx.miterLimit = 10;
+ ctx.strokeStyle = `${color}${opacityToHex(opacity)}`;
+};
+_startDrawing = new WeakSet();
+startDrawing_fn = function(x, y) {
+ var _a2;
+ this.canvas.addEventListener("contextmenu", noContextMenu, {
+ signal: this._uiManager._signal
+ });
+ __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this);
+ __privateSet(this, _drawingAC, new AbortController());
+ const signal = this._uiManager.combinedSignal(__privateGet(this, _drawingAC));
+ this.canvas.addEventListener("pointerleave", this.canvasPointerleave.bind(this), {
+ signal
+ });
+ this.canvas.addEventListener("pointermove", this.canvasPointermove.bind(this), {
+ signal
+ });
+ this.canvas.addEventListener("pointerup", this.canvasPointerup.bind(this), {
+ signal
+ });
+ this.isEditing = true;
+ if (!__privateGet(this, _isCanvasInitialized)) {
+ __privateSet(this, _isCanvasInitialized, true);
+ __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this);
+ this.thickness || (this.thickness = _InkEditor._defaultThickness);
+ this.color || (this.color = _InkEditor._defaultColor || AnnotationEditor._defaultLineColor);
+ (_a2 = this.opacity) != null ? _a2 : this.opacity = _InkEditor._defaultOpacity;
+ }
+ this.currentPath.push([x, y]);
+ __privateSet(this, _hasSomethingToDraw, false);
+ __privateMethod(this, _setStroke, setStroke_fn).call(this);
+ __privateSet(this, _requestFrameCallback, () => {
+ __privateMethod(this, _drawPoints, drawPoints_fn).call(this);
+ if (__privateGet(this, _requestFrameCallback)) {
+ window.requestAnimationFrame(__privateGet(this, _requestFrameCallback));
+ }
+ });
+ window.requestAnimationFrame(__privateGet(this, _requestFrameCallback));
+};
+_draw = new WeakSet();
+draw_fn = function(x, y) {
+ const [lastX, lastY] = this.currentPath.at(-1);
+ if (this.currentPath.length > 1 && x === lastX && y === lastY) {
+ return;
+ }
+ const currentPath = this.currentPath;
+ let path2D = __privateGet(this, _currentPath2D);
+ currentPath.push([x, y]);
+ __privateSet(this, _hasSomethingToDraw, true);
+ if (currentPath.length <= 2) {
+ path2D.moveTo(...currentPath[0]);
+ path2D.lineTo(x, y);
+ return;
+ }
+ if (currentPath.length === 3) {
+ __privateSet(this, _currentPath2D, path2D = new Path2D());
+ path2D.moveTo(...currentPath[0]);
+ }
+ __privateMethod(this, _makeBezierCurve, makeBezierCurve_fn).call(this, path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y);
+};
+_endPath = new WeakSet();
+endPath_fn = function() {
+ if (this.currentPath.length === 0) {
+ return;
+ }
+ const lastPoint = this.currentPath.at(-1);
+ __privateGet(this, _currentPath2D).lineTo(...lastPoint);
+};
+_stopDrawing = new WeakSet();
+stopDrawing_fn = function(x, y) {
+ __privateSet(this, _requestFrameCallback, null);
+ x = Math.min(Math.max(x, 0), this.canvas.width);
+ y = Math.min(Math.max(y, 0), this.canvas.height);
+ __privateMethod(this, _draw, draw_fn).call(this, x, y);
+ __privateMethod(this, _endPath, endPath_fn).call(this);
+ let bezier;
+ if (this.currentPath.length !== 1) {
+ bezier = __privateMethod(this, _generateBezierPoints, generateBezierPoints_fn).call(this);
+ } else {
+ const xy = [x, y];
+ bezier = [[xy, xy.slice(), xy.slice(), xy]];
+ }
+ const path2D = __privateGet(this, _currentPath2D);
+ const currentPath = this.currentPath;
+ this.currentPath = [];
+ __privateSet(this, _currentPath2D, new Path2D());
+ const cmd = () => {
+ this.allRawPaths.push(currentPath);
+ this.paths.push(bezier);
+ this.bezierPath2D.push(path2D);
+ this._uiManager.rebuild(this);
+ };
+ const undo = () => {
+ this.allRawPaths.pop();
+ this.paths.pop();
+ this.bezierPath2D.pop();
+ if (this.paths.length === 0) {
+ this.remove();
+ } else {
+ if (!this.canvas) {
+ __privateMethod(this, _createCanvas, createCanvas_fn).call(this);
+ __privateMethod(this, _createObserver, createObserver_fn).call(this);
+ }
+ __privateMethod(this, _fitToContent, fitToContent_fn).call(this);
+ }
+ };
+ this.addCommands({
+ cmd,
+ undo,
+ mustExec: true
+ });
+};
+_drawPoints = new WeakSet();
+drawPoints_fn = function() {
+ if (!__privateGet(this, _hasSomethingToDraw)) {
+ return;
+ }
+ __privateSet(this, _hasSomethingToDraw, false);
+ const thickness = Math.ceil(this.thickness * this.parentScale);
+ const lastPoints = this.currentPath.slice(-3);
+ const x = lastPoints.map((xy) => xy[0]);
+ const y = lastPoints.map((xy) => xy[1]);
+ const xMin = Math.min(...x) - thickness;
+ const xMax = Math.max(...x) + thickness;
+ const yMin = Math.min(...y) - thickness;
+ const yMax = Math.max(...y) + thickness;
+ const {
+ ctx
+ } = this;
+ ctx.save();
+ ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
+ for (const path of this.bezierPath2D) {
+ ctx.stroke(path);
+ }
+ ctx.stroke(__privateGet(this, _currentPath2D));
+ ctx.restore();
+};
+_makeBezierCurve = new WeakSet();
+makeBezierCurve_fn = function(path2D, x0, y0, x1, y1, x2, y2) {
+ const prevX = (x0 + x1) / 2;
+ const prevY = (y0 + y1) / 2;
+ const x3 = (x1 + x2) / 2;
+ const y3 = (y1 + y2) / 2;
+ path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3);
+};
+_generateBezierPoints = new WeakSet();
+generateBezierPoints_fn = function() {
+ const path = this.currentPath;
+ if (path.length <= 2) {
+ return [[path[0], path[0], path.at(-1), path.at(-1)]];
+ }
+ const bezierPoints = [];
+ let i;
+ let [x0, y0] = path[0];
+ for (i = 1; i < path.length - 2; i++) {
+ const [x12, y12] = path[i];
+ const [x22, y22] = path[i + 1];
+ const x3 = (x12 + x22) / 2;
+ const y3 = (y12 + y22) / 2;
+ const control12 = [x0 + 2 * (x12 - x0) / 3, y0 + 2 * (y12 - y0) / 3];
+ const control22 = [x3 + 2 * (x12 - x3) / 3, y3 + 2 * (y12 - y3) / 3];
+ bezierPoints.push([[x0, y0], control12, control22, [x3, y3]]);
+ [x0, y0] = [x3, y3];
+ }
+ const [x1, y1] = path[i];
+ const [x2, y2] = path[i + 1];
+ const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3];
+ const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3];
+ bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]);
+ return bezierPoints;
+};
+_redraw = new WeakSet();
+redraw_fn = function() {
+ if (this.isEmpty()) {
+ __privateMethod(this, _updateTransform, updateTransform_fn).call(this);
+ return;
+ }
+ __privateMethod(this, _setStroke, setStroke_fn).call(this);
+ const {
+ canvas,
+ ctx
+ } = this;
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ __privateMethod(this, _updateTransform, updateTransform_fn).call(this);
+ for (const path of this.bezierPath2D) {
+ ctx.stroke(path);
+ }
+};
+_addPointerdownListener = new WeakSet();
+addPointerdownListener_fn = function() {
+ if (__privateGet(this, _pointerdownAC)) {
+ return;
+ }
+ __privateSet(this, _pointerdownAC, new AbortController());
+ const signal = this._uiManager.combinedSignal(__privateGet(this, _pointerdownAC));
+ this.canvas.addEventListener("pointerdown", this.canvasPointerdown.bind(this), {
+ signal
+ });
+};
+_removePointerdownListener = new WeakSet();
+removePointerdownListener_fn = function() {
+ var _a2;
+ (_a2 = this.pointerdownAC) == null ? void 0 : _a2.abort();
+ this.pointerdownAC = null;
+};
+_endDrawing = new WeakSet();
+endDrawing_fn = function(event) {
+ var _a2;
+ (_a2 = __privateGet(this, _drawingAC)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _drawingAC, null);
+ __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this);
+ if (__privateGet(this, _canvasContextMenuTimeoutId)) {
+ clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId));
+ }
+ __privateSet(this, _canvasContextMenuTimeoutId, setTimeout(() => {
+ __privateSet(this, _canvasContextMenuTimeoutId, null);
+ this.canvas.removeEventListener("contextmenu", noContextMenu);
+ }, 10));
+ __privateMethod(this, _stopDrawing, stopDrawing_fn).call(this, event.offsetX, event.offsetY);
+ this.addToAnnotationStorage();
+ this.setInBackground();
+};
+_createCanvas = new WeakSet();
+createCanvas_fn = function() {
+ this.canvas = document.createElement("canvas");
+ this.canvas.width = this.canvas.height = 0;
+ this.canvas.className = "inkEditorCanvas";
+ this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas");
+ this.div.append(this.canvas);
+ this.ctx = this.canvas.getContext("2d");
+};
+_createObserver = new WeakSet();
+createObserver_fn = function() {
+ __privateSet(this, _observer, new ResizeObserver((entries) => {
+ const rect = entries[0].contentRect;
+ if (rect.width && rect.height) {
+ this.setDimensions(rect.width, rect.height);
+ }
+ }));
+ __privateGet(this, _observer).observe(this.div);
+ this._uiManager._signal.addEventListener("abort", () => {
+ var _a2;
+ (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect();
+ __privateSet(this, _observer, null);
+ }, {
+ once: true
+ });
+};
+_setCanvasDims = new WeakSet();
+setCanvasDims_fn = function() {
+ if (!__privateGet(this, _isCanvasInitialized)) {
+ return;
+ }
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.canvas.width = Math.ceil(this.width * parentWidth);
+ this.canvas.height = Math.ceil(this.height * parentHeight);
+ __privateMethod(this, _updateTransform, updateTransform_fn).call(this);
+};
+_setScaleFactor = new WeakSet();
+setScaleFactor_fn = function(width, height) {
+ const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this);
+ const scaleFactorW = (width - padding) / __privateGet(this, _baseWidth);
+ const scaleFactorH = (height - padding) / __privateGet(this, _baseHeight);
+ this.scaleFactor = Math.min(scaleFactorW, scaleFactorH);
+};
+_updateTransform = new WeakSet();
+updateTransform_fn = function() {
+ const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this) / 2;
+ this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding);
+};
+_buildPath2D = new WeakSet();
+buildPath2D_fn = function(bezier) {
+ const path2D = new Path2D();
+ for (let i = 0, ii = bezier.length; i < ii; i++) {
+ const [first, control1, control2, second] = bezier[i];
+ if (i === 0) {
+ path2D.moveTo(...first);
+ }
+ path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]);
+ }
+ return path2D;
+};
+_toPDFCoordinates = new WeakSet();
+toPDFCoordinates_fn = function(points, rect, rotation) {
+ const [blX, blY, trX, trY] = rect;
+ switch (rotation) {
+ case 0:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ points[i] += blX;
+ points[i + 1] = trY - points[i + 1];
+ }
+ break;
+ case 90:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ const x = points[i];
+ points[i] = points[i + 1] + blX;
+ points[i + 1] = x + blY;
+ }
+ break;
+ case 180:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ points[i] = trX - points[i];
+ points[i + 1] += blY;
+ }
+ break;
+ case 270:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ const x = points[i];
+ points[i] = trX - points[i + 1];
+ points[i + 1] = trY - x;
+ }
+ break;
+ default:
+ throw new Error("Invalid rotation");
+ }
+ return points;
+};
+_fromPDFCoordinates = new WeakSet();
+fromPDFCoordinates_fn = function(points, rect, rotation) {
+ const [blX, blY, trX, trY] = rect;
+ switch (rotation) {
+ case 0:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ points[i] -= blX;
+ points[i + 1] = trY - points[i + 1];
+ }
+ break;
+ case 90:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ const x = points[i];
+ points[i] = points[i + 1] - blY;
+ points[i + 1] = x - blX;
+ }
+ break;
+ case 180:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ points[i] = trX - points[i];
+ points[i + 1] -= blY;
+ }
+ break;
+ case 270:
+ for (let i = 0, ii = points.length; i < ii; i += 2) {
+ const x = points[i];
+ points[i] = trY - points[i + 1];
+ points[i + 1] = trX - x;
+ }
+ break;
+ default:
+ throw new Error("Invalid rotation");
+ }
+ return points;
+};
+_serializePaths = new WeakSet();
+serializePaths_fn = function(s, tx, ty, rect) {
+ var _a2, _b;
+ const paths = [];
+ const padding = this.thickness / 2;
+ const shiftX = s * tx + padding;
+ const shiftY = s * ty + padding;
+ for (const bezier of this.paths) {
+ const buffer = [];
+ const points = [];
+ for (let j = 0, jj = bezier.length; j < jj; j++) {
+ const [first, control1, control2, second] = bezier[j];
+ if (first[0] === second[0] && first[1] === second[1] && jj === 1) {
+ const p0 = s * first[0] + shiftX;
+ const p1 = s * first[1] + shiftY;
+ buffer.push(p0, p1);
+ points.push(p0, p1);
+ break;
+ }
+ const p10 = s * first[0] + shiftX;
+ const p11 = s * first[1] + shiftY;
+ const p20 = s * control1[0] + shiftX;
+ const p21 = s * control1[1] + shiftY;
+ const p30 = s * control2[0] + shiftX;
+ const p31 = s * control2[1] + shiftY;
+ const p40 = s * second[0] + shiftX;
+ const p41 = s * second[1] + shiftY;
+ if (j === 0) {
+ buffer.push(p10, p11);
+ points.push(p10, p11);
+ }
+ buffer.push(p20, p21, p30, p31, p40, p41);
+ points.push(p20, p21);
+ if (j === jj - 1) {
+ points.push(p40, p41);
+ }
+ }
+ paths.push({
+ bezier: __privateMethod(_a2 = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_a2, buffer, rect, this.rotation),
+ points: __privateMethod(_b = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_b, points, rect, this.rotation)
+ });
+ }
+ return paths;
+};
+_getBbox = new WeakSet();
+getBbox_fn = function() {
+ let xMin = Infinity;
+ let xMax = -Infinity;
+ let yMin = Infinity;
+ let yMax = -Infinity;
+ for (const path of this.paths) {
+ for (const [first, control1, control2, second] of path) {
+ const bbox = Util.bezierBoundingBox(...first, ...control1, ...control2, ...second);
+ xMin = Math.min(xMin, bbox[0]);
+ yMin = Math.min(yMin, bbox[1]);
+ xMax = Math.max(xMax, bbox[2]);
+ yMax = Math.max(yMax, bbox[3]);
+ }
+ }
+ return [xMin, yMin, xMax, yMax];
+};
+_getPadding = new WeakSet();
+getPadding_fn = function() {
+ return __privateGet(this, _disableEditing) ? Math.ceil(this.thickness * this.parentScale) : 0;
+};
+_fitToContent = new WeakSet();
+fitToContent_fn = function(firstTime = false) {
+ if (this.isEmpty()) {
+ return;
+ }
+ if (!__privateGet(this, _disableEditing)) {
+ __privateMethod(this, _redraw, redraw_fn).call(this);
+ return;
+ }
+ const bbox = __privateMethod(this, _getBbox, getBbox_fn).call(this);
+ const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this);
+ __privateSet(this, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]));
+ __privateSet(this, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]));
+ const width = Math.ceil(padding + __privateGet(this, _baseWidth) * this.scaleFactor);
+ const height = Math.ceil(padding + __privateGet(this, _baseHeight) * this.scaleFactor);
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.width = width / parentWidth;
+ this.height = height / parentHeight;
+ this.setAspectRatio(width, height);
+ const prevTranslationX = this.translationX;
+ const prevTranslationY = this.translationY;
+ this.translationX = -bbox[0];
+ this.translationY = -bbox[1];
+ __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this);
+ __privateMethod(this, _redraw, redraw_fn).call(this);
+ __privateSet(this, _realWidth, width);
+ __privateSet(this, _realHeight, height);
+ this.setDims(width, height);
+ const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0;
+ this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding);
+};
+__privateAdd(InkEditor, _buildPath2D);
+__privateAdd(InkEditor, _toPDFCoordinates);
+__privateAdd(InkEditor, _fromPDFCoordinates);
+__publicField(InkEditor, "_defaultColor", null);
+__publicField(InkEditor, "_defaultOpacity", 1);
+__publicField(InkEditor, "_defaultThickness", 1);
+__publicField(InkEditor, "_type", "ink");
+__publicField(InkEditor, "_editorType", AnnotationEditorType.INK);
+var _bitmap, _bitmapId, _bitmapPromise, _bitmapUrl, _bitmapFile, _bitmapFileName, _canvas, _observer2, _resizeTimeoutId, _isSvg, _hasBeenAddedInUndoStack, _getBitmapFetched, getBitmapFetched_fn, _getBitmapDone, getBitmapDone_fn, _getBitmap, getBitmap_fn, _createCanvas2, createCanvas_fn2, _setDimensions, setDimensions_fn, _scaleBitmap, scaleBitmap_fn, _drawBitmap, drawBitmap_fn, _serializeBitmap, serializeBitmap_fn, _createObserver2, createObserver_fn2;
+var _StampEditor = class extends AnnotationEditor {
+ constructor(params) {
+ super({
+ ...params,
+ name: "stampEditor"
+ });
+ __privateAdd(this, _getBitmapFetched);
+ __privateAdd(this, _getBitmapDone);
+ __privateAdd(this, _getBitmap);
+ __privateAdd(this, _createCanvas2);
+ __privateAdd(this, _setDimensions);
+ __privateAdd(this, _scaleBitmap);
+ __privateAdd(this, _drawBitmap);
+ __privateAdd(this, _serializeBitmap);
+ __privateAdd(this, _createObserver2);
+ __privateAdd(this, _bitmap, null);
+ __privateAdd(this, _bitmapId, null);
+ __privateAdd(this, _bitmapPromise, null);
+ __privateAdd(this, _bitmapUrl, null);
+ __privateAdd(this, _bitmapFile, null);
+ __privateAdd(this, _bitmapFileName, "");
+ __privateAdd(this, _canvas, null);
+ __privateAdd(this, _observer2, null);
+ __privateAdd(this, _resizeTimeoutId, null);
+ __privateAdd(this, _isSvg, false);
+ __privateAdd(this, _hasBeenAddedInUndoStack, false);
+ __privateSet(this, _bitmapUrl, params.bitmapUrl);
+ __privateSet(this, _bitmapFile, params.bitmapFile);
+ }
+ static initialize(l10n, uiManager) {
+ AnnotationEditor.initialize(l10n, uiManager);
+ }
+ static get supportedTypes() {
+ const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"];
+ return shadow(this, "supportedTypes", types.map((type) => `image/${type}`));
+ }
+ static get supportedTypesStr() {
+ return shadow(this, "supportedTypesStr", this.supportedTypes.join(","));
+ }
+ static isHandlingMimeForPasting(mime) {
+ return this.supportedTypes.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() {
+ var _a2;
+ return {
+ type: "stamp",
+ hasAltText: !!((_a2 = this.altTextData) == null ? void 0 : _a2.altText)
+ };
+ }
+ static computeTelemetryFinalData(data) {
+ var _a2, _b;
+ const hasAltTextStats = data.get("hasAltText");
+ return {
+ hasAltText: (_a2 = hasAltTextStats.get(true)) != null ? _a2 : 0,
+ hasNoAltText: (_b = hasAltTextStats.get(false)) != null ? _b : 0
+ };
+ }
+ 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, true).imageData;
+ const response = await mlManager.guess({
+ name: "altText",
+ request: {
+ data,
+ width,
+ height,
+ channels: data.length / (width * height)
+ }
+ });
+ if (!response) {
+ throw new Error("No response from the AI service.");
+ }
+ if (response.error) {
+ throw new Error("Error from the AI service.");
+ }
+ if (response.cancel) {
+ return null;
+ }
+ if (!response.output) {
+ throw new Error("No valid response from the AI service.");
+ }
+ const altText = response.output;
+ await this.setGuessedAltText(altText);
+ if (updateAltTextData && !this.hasAltTextData()) {
+ this.altTextData = {
+ alt: altText,
+ decorative: false
+ };
+ }
+ return altText;
+ }
+ remove() {
+ var _a2, _b;
+ if (__privateGet(this, _bitmapId)) {
+ __privateSet(this, _bitmap, null);
+ this._uiManager.imageManager.deleteId(__privateGet(this, _bitmapId));
+ (_a2 = __privateGet(this, _canvas)) == null ? void 0 : _a2.remove();
+ __privateSet(this, _canvas, null);
+ (_b = __privateGet(this, _observer2)) == null ? void 0 : _b.disconnect();
+ __privateSet(this, _observer2, null);
+ if (__privateGet(this, _resizeTimeoutId)) {
+ clearTimeout(__privateGet(this, _resizeTimeoutId));
+ __privateSet(this, _resizeTimeoutId, null);
+ }
+ }
+ super.remove();
+ }
+ rebuild() {
+ if (!this.parent) {
+ if (__privateGet(this, _bitmapId)) {
+ __privateMethod(this, _getBitmap, getBitmap_fn).call(this);
+ }
+ return;
+ }
+ super.rebuild();
+ if (this.div === null) {
+ return;
+ }
+ if (__privateGet(this, _bitmapId) && __privateGet(this, _canvas) === null) {
+ __privateMethod(this, _getBitmap, getBitmap_fn).call(this);
+ }
+ if (!this.isAttachedToDOM) {
+ this.parent.add(this);
+ }
+ }
+ onceAdded() {
+ this._isDraggable = true;
+ this.div.focus();
+ }
+ isEmpty() {
+ return !(__privateGet(this, _bitmapPromise) || __privateGet(this, _bitmap) || __privateGet(this, _bitmapUrl) || __privateGet(this, _bitmapFile) || __privateGet(this, _bitmapId));
+ }
+ get isResizable() {
+ return true;
+ }
+ render() {
+ if (this.div) {
+ return this.div;
+ }
+ let baseX, baseY;
+ if (this.width) {
+ baseX = this.x;
+ baseY = this.y;
+ }
+ super.render();
+ this.div.hidden = true;
+ this.addAltTextButton();
+ if (__privateGet(this, _bitmap)) {
+ __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this);
+ } else {
+ __privateMethod(this, _getBitmap, getBitmap_fn).call(this);
+ }
+ if (this.width) {
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight);
+ }
+ return this.div;
+ }
+ copyCanvas(maxDimension, createImageData = false) {
+ var _a2;
+ if (!maxDimension) {
+ maxDimension = 224;
+ }
+ const {
+ width: bitmapWidth,
+ height: bitmapHeight
+ } = __privateGet(this, _bitmap);
+ const canvas = document.createElement("canvas");
+ let bitmap = __privateGet(this, _bitmap);
+ let width = bitmapWidth, height = bitmapHeight;
+ if (bitmapWidth > maxDimension || bitmapHeight > maxDimension) {
+ const ratio = Math.min(maxDimension / bitmapWidth, maxDimension / bitmapHeight);
+ width = Math.floor(bitmapWidth * ratio);
+ height = Math.floor(bitmapHeight * ratio);
+ if (!__privateGet(this, _isSvg)) {
+ bitmap = __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height);
+ }
+ }
+ canvas.width = width;
+ canvas.height = height;
+ const ctx = canvas.getContext("2d");
+ ctx.filter = this._uiManager.hcmFilter;
+ let white = "white", black = "#cfcfd8";
+ if (this._uiManager.hcmFilter !== "none") {
+ black = "black";
+ } else if ((_a2 = window.matchMedia) == null ? void 0 : _a2.call(window, "(prefers-color-scheme: dark)").matches) {
+ white = "#8f8f9d";
+ black = "#42414d";
+ }
+ const boxDim = 15;
+ const pattern = new OffscreenCanvas(boxDim * 2, boxDim * 2);
+ const patternCtx = pattern.getContext("2d");
+ patternCtx.fillStyle = white;
+ patternCtx.fillRect(0, 0, boxDim * 2, boxDim * 2);
+ patternCtx.fillStyle = black;
+ patternCtx.fillRect(0, 0, boxDim, boxDim);
+ patternCtx.fillRect(boxDim, boxDim, boxDim, boxDim);
+ ctx.fillStyle = ctx.createPattern(pattern, "repeat");
+ ctx.fillRect(0, 0, width, height);
+ if (createImageData) {
+ const offscreen = new OffscreenCanvas(width, height);
+ const offscreenCtx = offscreen.getContext("2d", {
+ willReadFrequently: true
+ });
+ offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);
+ const data = offscreenCtx.getImageData(0, 0, width, height).data;
+ ctx.drawImage(offscreen, 0, 0);
+ return {
+ canvas,
+ imageData: {
+ width,
+ height,
+ data
+ }
+ };
+ }
+ ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);
+ return {
+ canvas,
+ imageData: null
+ };
+ }
+ getImageForAltText() {
+ return __privateGet(this, _canvas);
+ }
+ static deserialize(data, parent, uiManager) {
+ if (data instanceof StampAnnotationElement) {
+ return null;
+ }
+ const editor = super.deserialize(data, parent, uiManager);
+ const {
+ rect,
+ bitmapUrl,
+ bitmapId,
+ isSvg,
+ accessibilityData
+ } = data;
+ if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) {
+ __privateSet(editor, _bitmapId, bitmapId);
+ } else {
+ __privateSet(editor, _bitmapUrl, bitmapUrl);
+ }
+ __privateSet(editor, _isSvg, isSvg);
+ const [parentWidth, parentHeight] = editor.pageDimensions;
+ editor.width = (rect[2] - rect[0]) / parentWidth;
+ editor.height = (rect[3] - rect[1]) / parentHeight;
+ if (accessibilityData) {
+ editor.altTextData = accessibilityData;
+ }
+ return editor;
+ }
+ serialize(isForCopying = false, context = null) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ const serialized = {
+ annotationType: AnnotationEditorType.STAMP,
+ bitmapId: __privateGet(this, _bitmapId),
+ pageIndex: this.pageIndex,
+ rect: this.getRect(0, 0),
+ rotation: this.rotation,
+ isSvg: __privateGet(this, _isSvg),
+ structTreeParentId: this._structTreeParentId
+ };
+ if (isForCopying) {
+ serialized.bitmapUrl = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, true);
+ serialized.accessibilityData = this.serializeAltText(true);
+ return serialized;
+ }
+ const {
+ decorative,
+ altText
+ } = this.serializeAltText(false);
+ if (!decorative && altText) {
+ serialized.accessibilityData = {
+ type: "Figure",
+ alt: altText
+ };
+ }
+ if (context === null) {
+ return serialized;
+ }
+ context.stamps || (context.stamps = /* @__PURE__ */ new Map());
+ const area = __privateGet(this, _isSvg) ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null;
+ if (!context.stamps.has(__privateGet(this, _bitmapId))) {
+ context.stamps.set(__privateGet(this, _bitmapId), {
+ area,
+ serialized
+ });
+ serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false);
+ } else if (__privateGet(this, _isSvg)) {
+ const prevData = context.stamps.get(__privateGet(this, _bitmapId));
+ if (area > prevData.area) {
+ prevData.area = area;
+ prevData.serialized.bitmap.close();
+ prevData.serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false);
+ }
+ }
+ return serialized;
+ }
+};
+var StampEditor = _StampEditor;
+_bitmap = new WeakMap();
+_bitmapId = new WeakMap();
+_bitmapPromise = new WeakMap();
+_bitmapUrl = new WeakMap();
+_bitmapFile = new WeakMap();
+_bitmapFileName = new WeakMap();
+_canvas = new WeakMap();
+_observer2 = new WeakMap();
+_resizeTimeoutId = new WeakMap();
+_isSvg = new WeakMap();
+_hasBeenAddedInUndoStack = new WeakMap();
+_getBitmapFetched = new WeakSet();
+getBitmapFetched_fn = function(data, fromId = false) {
+ if (!data) {
+ this.remove();
+ return;
+ }
+ __privateSet(this, _bitmap, data.bitmap);
+ if (!fromId) {
+ __privateSet(this, _bitmapId, data.id);
+ __privateSet(this, _isSvg, data.isSvg);
+ }
+ if (data.file) {
+ __privateSet(this, _bitmapFileName, data.file.name);
+ }
+ __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this);
+};
+_getBitmapDone = new WeakSet();
+getBitmapDone_fn = function() {
+ __privateSet(this, _bitmapPromise, null);
+ this._uiManager.enableWaiting(false);
+ if (!__privateGet(this, _canvas)) {
+ return;
+ }
+ if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) {
+ this._editToolbar.hide();
+ this._uiManager.editAltText(this, true);
+ return;
+ }
+ if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) {
+ this._reportTelemetry({
+ action: "pdfjs.image.image_added",
+ data: {
+ alt_text_modal: false,
+ alt_text_type: "empty"
+ }
+ });
+ try {
+ this.mlGuessAltText();
+ } catch (e) {
+ }
+ }
+ this.div.focus();
+};
+_getBitmap = new WeakSet();
+getBitmap_fn = function() {
+ if (__privateGet(this, _bitmapId)) {
+ this._uiManager.enableWaiting(true);
+ this._uiManager.imageManager.getFromId(__privateGet(this, _bitmapId)).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data, true)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this));
+ return;
+ }
+ if (__privateGet(this, _bitmapUrl)) {
+ const url = __privateGet(this, _bitmapUrl);
+ __privateSet(this, _bitmapUrl, null);
+ this._uiManager.enableWaiting(true);
+ __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromUrl(url).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this)));
+ return;
+ }
+ if (__privateGet(this, _bitmapFile)) {
+ const file = __privateGet(this, _bitmapFile);
+ __privateSet(this, _bitmapFile, null);
+ this._uiManager.enableWaiting(true);
+ __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromFile(file).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this)));
+ return;
+ }
+ const input = document.createElement("input");
+ input.type = "file";
+ input.accept = _StampEditor.supportedTypesStr;
+ const signal = this._uiManager._signal;
+ __privateSet(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
+ }
+ });
+ __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data);
+ }
+ resolve();
+ }, {
+ signal
+ });
+ input.addEventListener("cancel", () => {
+ this.remove();
+ resolve();
+ }, {
+ signal
+ });
+ }).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this)));
+ input.click();
+};
+_createCanvas2 = new WeakSet();
+createCanvas_fn2 = function() {
+ const {
+ div
+ } = this;
+ let {
+ width,
+ height
+ } = __privateGet(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 = __privateSet(this, _canvas, document.createElement("canvas"));
+ div.append(canvas);
+ if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow) {
+ div.hidden = false;
+ }
+ __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height);
+ __privateMethod(this, _createObserver2, createObserver_fn2).call(this);
+ if (!__privateGet(this, _hasBeenAddedInUndoStack)) {
+ this.parent.addUndoableEditor(this);
+ __privateSet(this, _hasBeenAddedInUndoStack, true);
+ }
+ this._reportTelemetry({
+ action: "inserted_image"
+ });
+ if (__privateGet(this, _bitmapFileName)) {
+ canvas.setAttribute("aria-label", __privateGet(this, _bitmapFileName));
+ }
+};
+_setDimensions = new WeakSet();
+setDimensions_fn = function(width, height) {
+ var _a2;
+ const [parentWidth, parentHeight] = this.parentDimensions;
+ this.width = width / parentWidth;
+ this.height = height / parentHeight;
+ this.setDims(width, height);
+ if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) {
+ this.center();
+ } else {
+ this.fixAndSetPosition();
+ }
+ this._initialOptions = null;
+ if (__privateGet(this, _resizeTimeoutId) !== null) {
+ clearTimeout(__privateGet(this, _resizeTimeoutId));
+ }
+ const TIME_TO_WAIT = 200;
+ __privateSet(this, _resizeTimeoutId, setTimeout(() => {
+ __privateSet(this, _resizeTimeoutId, null);
+ __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height);
+ }, TIME_TO_WAIT));
+};
+_scaleBitmap = new WeakSet();
+scaleBitmap_fn = function(width, height) {
+ const {
+ width: bitmapWidth,
+ height: bitmapHeight
+ } = __privateGet(this, _bitmap);
+ let newWidth = bitmapWidth;
+ let newHeight = bitmapHeight;
+ let bitmap = __privateGet(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 = new WeakSet();
+drawBitmap_fn = function(width, height) {
+ width = Math.ceil(width);
+ height = Math.ceil(height);
+ const canvas = __privateGet(this, _canvas);
+ if (!canvas || canvas.width === width && canvas.height === height) {
+ return;
+ }
+ canvas.width = width;
+ canvas.height = height;
+ const bitmap = __privateGet(this, _isSvg) ? __privateGet(this, _bitmap) : __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height);
+ const ctx = canvas.getContext("2d");
+ ctx.filter = this._uiManager.hcmFilter;
+ ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height);
+};
+_serializeBitmap = new WeakSet();
+serializeBitmap_fn = function(toUrl) {
+ if (toUrl) {
+ if (__privateGet(this, _isSvg)) {
+ const url = this._uiManager.imageManager.getSvgUrl(__privateGet(this, _bitmapId));
+ if (url) {
+ return url;
+ }
+ }
+ const canvas = document.createElement("canvas");
+ ({
+ width: canvas.width,
+ height: canvas.height
+ } = __privateGet(this, _bitmap));
+ const ctx = canvas.getContext("2d");
+ ctx.drawImage(__privateGet(this, _bitmap), 0, 0);
+ return canvas.toDataURL();
+ }
+ if (__privateGet(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(__privateGet(this, _bitmap), 0, 0, __privateGet(this, _bitmap).width, __privateGet(this, _bitmap).height, 0, 0, width, height);
+ return offscreen.transferToImageBitmap();
+ }
+ return structuredClone(__privateGet(this, _bitmap));
+};
+_createObserver2 = new WeakSet();
+createObserver_fn2 = function() {
+ if (!this._uiManager._signal) {
+ return;
+ }
+ __privateSet(this, _observer2, new ResizeObserver((entries) => {
+ const rect = entries[0].contentRect;
+ if (rect.width && rect.height) {
+ __privateMethod(this, _setDimensions, setDimensions_fn).call(this, rect.width, rect.height);
+ }
+ }));
+ __privateGet(this, _observer2).observe(this.div);
+ this._uiManager._signal.addEventListener("abort", () => {
+ var _a2;
+ (_a2 = __privateGet(this, _observer2)) == null ? void 0 : _a2.disconnect();
+ __privateSet(this, _observer2, null);
+ }, {
+ once: true
+ });
+};
+__publicField(StampEditor, "_type", "stamp");
+__publicField(StampEditor, "_editorType", AnnotationEditorType.STAMP);
+var _accessibilityManager2, _allowClick, _annotationLayer, _clickAC, _editorFocusTimeoutId, _editors, _hadPointerDown, _isCleaningUp, _isDisabling, _textLayer, _textSelectionAC, _uiManager3, _editorTypes2, _textLayerPointerDown, textLayerPointerDown_fn, _currentEditorType, currentEditorType_get, _createNewEditor, createNewEditor_fn, _getCenterPoint, getCenterPoint_fn, _cleanup, cleanup_fn;
+var _AnnotationEditorLayer = class {
+ constructor({
+ uiManager,
+ pageIndex,
+ div,
+ accessibilityManager,
+ annotationLayer,
+ drawLayer,
+ textLayer,
+ viewport,
+ l10n
+ }) {
+ __privateAdd(this, _textLayerPointerDown);
+ __privateAdd(this, _currentEditorType);
+ __privateAdd(this, _createNewEditor);
+ __privateAdd(this, _getCenterPoint);
+ __privateAdd(this, _cleanup);
+ __privateAdd(this, _accessibilityManager2, void 0);
+ __privateAdd(this, _allowClick, false);
+ __privateAdd(this, _annotationLayer, null);
+ __privateAdd(this, _clickAC, null);
+ __privateAdd(this, _editorFocusTimeoutId, null);
+ __privateAdd(this, _editors, /* @__PURE__ */ new Map());
+ __privateAdd(this, _hadPointerDown, false);
+ __privateAdd(this, _isCleaningUp, false);
+ __privateAdd(this, _isDisabling, false);
+ __privateAdd(this, _textLayer, null);
+ __privateAdd(this, _textSelectionAC, null);
+ __privateAdd(this, _uiManager3, void 0);
+ const editorTypes = [...__privateGet(_AnnotationEditorLayer, _editorTypes2).values()];
+ if (!_AnnotationEditorLayer._initialized) {
+ _AnnotationEditorLayer._initialized = true;
+ for (const editorType of editorTypes) {
+ editorType.initialize(l10n, uiManager);
+ }
+ }
+ uiManager.registerEditorTypes(editorTypes);
+ __privateSet(this, _uiManager3, uiManager);
+ this.pageIndex = pageIndex;
+ this.div = div;
+ __privateSet(this, _accessibilityManager2, accessibilityManager);
+ __privateSet(this, _annotationLayer, annotationLayer);
+ this.viewport = viewport;
+ __privateSet(this, _textLayer, textLayer);
+ this.drawLayer = drawLayer;
+ __privateGet(this, _uiManager3).addLayer(this);
+ }
+ get isEmpty() {
+ return __privateGet(this, _editors).size === 0;
+ }
+ get isInvisible() {
+ return this.isEmpty && __privateGet(this, _uiManager3).getMode() === AnnotationEditorType.NONE;
+ }
+ updateToolbar(mode) {
+ __privateGet(this, _uiManager3).updateToolbar(mode);
+ }
+ updateMode(mode = __privateGet(this, _uiManager3).getMode()) {
+ __privateMethod(this, _cleanup, cleanup_fn).call(this);
+ switch (mode) {
+ case AnnotationEditorType.NONE:
+ this.disableTextSelection();
+ this.togglePointerEvents(false);
+ this.toggleAnnotationLayerPointerEvents(true);
+ this.disableClick();
+ return;
+ case AnnotationEditorType.INK:
+ this.addInkEditorIfNeeded(false);
+ this.disableTextSelection();
+ this.togglePointerEvents(true);
+ this.disableClick();
+ 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 __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) {
+ classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType);
+ }
+ this.div.hidden = false;
+ }
+ hasTextLayer(textLayer) {
+ var _a2;
+ return textLayer === ((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div);
+ }
+ addInkEditorIfNeeded(isCommitting) {
+ if (__privateGet(this, _uiManager3).getMode() !== AnnotationEditorType.INK) {
+ return;
+ }
+ if (!isCommitting) {
+ for (const editor2 of __privateGet(this, _editors).values()) {
+ if (editor2.isEmpty()) {
+ editor2.setInBackground();
+ return;
+ }
+ }
+ }
+ const editor = this.createAndAddNewEditor({
+ offsetX: 0,
+ offsetY: 0
+ }, false);
+ editor.setInBackground();
+ }
+ setEditingState(isEditing) {
+ __privateGet(this, _uiManager3).setEditingState(isEditing);
+ }
+ addCommands(params) {
+ __privateGet(this, _uiManager3).addCommands(params);
+ }
+ toggleDrawing(enabled = false) {
+ this.div.classList.toggle("drawing", !enabled);
+ }
+ togglePointerEvents(enabled = false) {
+ this.div.classList.toggle("disabled", !enabled);
+ }
+ toggleAnnotationLayerPointerEvents(enabled = false) {
+ var _a2;
+ (_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.div.classList.toggle("disabled", !enabled);
+ }
+ enable() {
+ this.div.tabIndex = 0;
+ this.togglePointerEvents(true);
+ const annotationElementIds = /* @__PURE__ */ new Set();
+ for (const editor of __privateGet(this, _editors).values()) {
+ editor.enableEditing();
+ editor.show(true);
+ if (editor.annotationElementId) {
+ __privateGet(this, _uiManager3).removeChangedExistingAnnotation(editor);
+ annotationElementIds.add(editor.annotationElementId);
+ }
+ }
+ if (!__privateGet(this, _annotationLayer)) {
+ return;
+ }
+ const editables = __privateGet(this, _annotationLayer).getEditableAnnotations();
+ for (const editable of editables) {
+ editable.hide();
+ if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(editable.data.id)) {
+ continue;
+ }
+ if (annotationElementIds.has(editable.data.id)) {
+ continue;
+ }
+ const editor = this.deserialize(editable);
+ if (!editor) {
+ continue;
+ }
+ this.addOrRebuild(editor);
+ editor.enableEditing();
+ }
+ }
+ disable() {
+ var _a2;
+ __privateSet(this, _isDisabling, true);
+ this.div.tabIndex = -1;
+ this.togglePointerEvents(false);
+ const changedAnnotations = /* @__PURE__ */ new Map();
+ const resetAnnotations = /* @__PURE__ */ new Map();
+ for (const editor of __privateGet(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);
+ }
+ (_a2 = this.getEditableAnnotation(editor.annotationElementId)) == null ? void 0 : _a2.show();
+ editor.remove();
+ }
+ if (__privateGet(this, _annotationLayer)) {
+ const editables = __privateGet(this, _annotationLayer).getEditableAnnotations();
+ for (const editable of editables) {
+ const {
+ id
+ } = editable.data;
+ if (__privateGet(this, _uiManager3).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) {
+ __privateGet(this, _uiManager3).addChangedExistingAnnotation(editor);
+ editor.renderAnnotationElement(editable);
+ editor.show(false);
+ }
+ editable.show();
+ }
+ }
+ __privateMethod(this, _cleanup, cleanup_fn).call(this);
+ if (this.isEmpty) {
+ this.div.hidden = true;
+ }
+ const {
+ classList
+ } = this.div;
+ for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) {
+ classList.remove(`${editorType._type}Editing`);
+ }
+ this.disableTextSelection();
+ this.toggleAnnotationLayerPointerEvents(true);
+ __privateSet(this, _isDisabling, false);
+ }
+ getEditableAnnotation(id) {
+ var _a2;
+ return ((_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.getEditableAnnotation(id)) || null;
+ }
+ setActiveEditor(editor) {
+ const currentActive = __privateGet(this, _uiManager3).getActive();
+ if (currentActive === editor) {
+ return;
+ }
+ __privateGet(this, _uiManager3).setActiveEditor(editor);
+ }
+ enableTextSelection() {
+ var _a2;
+ this.div.tabIndex = -1;
+ if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && !__privateGet(this, _textSelectionAC)) {
+ __privateSet(this, _textSelectionAC, new AbortController());
+ const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _textSelectionAC));
+ __privateGet(this, _textLayer).div.addEventListener("pointerdown", __privateMethod(this, _textLayerPointerDown, textLayerPointerDown_fn).bind(this), {
+ signal
+ });
+ __privateGet(this, _textLayer).div.classList.add("highlighting");
+ }
+ }
+ disableTextSelection() {
+ var _a2;
+ this.div.tabIndex = 0;
+ if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && __privateGet(this, _textSelectionAC)) {
+ __privateGet(this, _textSelectionAC).abort();
+ __privateSet(this, _textSelectionAC, null);
+ __privateGet(this, _textLayer).div.classList.remove("highlighting");
+ }
+ }
+ enableClick() {
+ if (__privateGet(this, _clickAC)) {
+ return;
+ }
+ __privateSet(this, _clickAC, new AbortController());
+ const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _clickAC));
+ this.div.addEventListener("pointerdown", this.pointerdown.bind(this), {
+ signal
+ });
+ this.div.addEventListener("pointerup", this.pointerup.bind(this), {
+ signal
+ });
+ }
+ disableClick() {
+ var _a2;
+ (_a2 = __privateGet(this, _clickAC)) == null ? void 0 : _a2.abort();
+ __privateSet(this, _clickAC, null);
+ }
+ attach(editor) {
+ __privateGet(this, _editors).set(editor.id, editor);
+ const {
+ annotationElementId
+ } = editor;
+ if (annotationElementId && __privateGet(this, _uiManager3).isDeletedAnnotationElement(annotationElementId)) {
+ __privateGet(this, _uiManager3).removeDeletedAnnotationElement(editor);
+ }
+ }
+ detach(editor) {
+ var _a2;
+ __privateGet(this, _editors).delete(editor.id);
+ (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.removePointerInTextLayer(editor.contentDiv);
+ if (!__privateGet(this, _isDisabling) && editor.annotationElementId) {
+ __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor);
+ }
+ }
+ remove(editor) {
+ this.detach(editor);
+ __privateGet(this, _uiManager3).removeEditor(editor);
+ editor.div.remove();
+ editor.isAttachedToDOM = false;
+ if (!__privateGet(this, _isCleaningUp)) {
+ this.addInkEditorIfNeeded(false);
+ }
+ }
+ changeParent(editor) {
+ var _a2;
+ if (editor.parent === this) {
+ return;
+ }
+ if (editor.parent && editor.annotationElementId) {
+ __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor.annotationElementId);
+ AnnotationEditor.deleteAnnotationElement(editor);
+ editor.annotationElementId = null;
+ }
+ this.attach(editor);
+ (_a2 = editor.parent) == null ? void 0 : _a2.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);
+ __privateGet(this, _uiManager3).addEditor(editor);
+ this.attach(editor);
+ if (!editor.isAttachedToDOM) {
+ const div = editor.render();
+ this.div.append(div);
+ editor.isAttachedToDOM = true;
+ }
+ editor.fixAndSetPosition();
+ editor.onceAdded();
+ __privateGet(this, _uiManager3).addToAnnotationStorage(editor);
+ editor._reportTelemetry(editor.telemetryInitialData);
+ }
+ moveEditorInDOM(editor) {
+ var _a2;
+ if (!editor.isAttachedToDOM) {
+ return;
+ }
+ const {
+ activeElement
+ } = document;
+ if (editor.div.contains(activeElement) && !__privateGet(this, _editorFocusTimeoutId)) {
+ editor._focusEventsAllowed = false;
+ __privateSet(this, _editorFocusTimeoutId, setTimeout(() => {
+ __privateSet(this, _editorFocusTimeoutId, null);
+ if (!editor.div.contains(document.activeElement)) {
+ editor.div.addEventListener("focusin", () => {
+ editor._focusEventsAllowed = true;
+ }, {
+ once: true,
+ signal: __privateGet(this, _uiManager3)._signal
+ });
+ activeElement.focus();
+ } else {
+ editor._focusEventsAllowed = true;
+ }
+ }, 0));
+ }
+ editor._structTreeParentId = (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.moveElementInDOM(this.div, editor.div, editor.contentDiv, true);
+ }
+ addOrRebuild(editor) {
+ if (editor.needsToBeRebuilt()) {
+ editor.parent || (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 __privateGet(this, _uiManager3).getId();
+ }
+ combinedSignal(ac) {
+ return __privateGet(this, _uiManager3).combinedSignal(ac);
+ }
+ canCreateNewEmptyEditor() {
+ var _a2;
+ return (_a2 = __privateGet(this, _currentEditorType, currentEditorType_get)) == null ? void 0 : _a2.canCreateNewEmptyEditor();
+ }
+ pasteEditor(mode, params) {
+ __privateGet(this, _uiManager3).updateToolbar(mode);
+ __privateGet(this, _uiManager3).updateMode(mode);
+ const {
+ offsetX,
+ offsetY
+ } = __privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this);
+ const id = this.getNextId();
+ const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, {
+ parent: this,
+ id,
+ x: offsetX,
+ y: offsetY,
+ uiManager: __privateGet(this, _uiManager3),
+ isCentered: true,
+ ...params
+ });
+ if (editor) {
+ this.add(editor);
+ }
+ }
+ deserialize(data) {
+ var _a2, _b;
+ return ((_b = __privateGet(_AnnotationEditorLayer, _editorTypes2).get((_a2 = data.annotationType) != null ? _a2 : data.annotationEditorType)) == null ? void 0 : _b.deserialize(data, this, __privateGet(this, _uiManager3))) || null;
+ }
+ createAndAddNewEditor(event, isCentered, data = {}) {
+ const id = this.getNextId();
+ const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, {
+ parent: this,
+ id,
+ x: event.offsetX,
+ y: event.offsetY,
+ uiManager: __privateGet(this, _uiManager3),
+ isCentered,
+ ...data
+ });
+ if (editor) {
+ this.add(editor);
+ }
+ return editor;
+ }
+ addNewEditor() {
+ this.createAndAddNewEditor(__privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this), true);
+ }
+ setSelected(editor) {
+ __privateGet(this, _uiManager3).setSelected(editor);
+ }
+ toggleSelected(editor) {
+ __privateGet(this, _uiManager3).toggleSelected(editor);
+ }
+ isSelected(editor) {
+ return __privateGet(this, _uiManager3).isSelected(editor);
+ }
+ unselect(editor) {
+ __privateGet(this, _uiManager3).unselect(editor);
+ }
+ pointerup(event) {
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ if (event.button !== 0 || event.ctrlKey && isMac) {
+ return;
+ }
+ if (event.target !== this.div) {
+ return;
+ }
+ if (!__privateGet(this, _hadPointerDown)) {
+ return;
+ }
+ __privateSet(this, _hadPointerDown, false);
+ if (!__privateGet(this, _allowClick)) {
+ __privateSet(this, _allowClick, true);
+ return;
+ }
+ if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.STAMP) {
+ __privateGet(this, _uiManager3).unselectAll();
+ return;
+ }
+ this.createAndAddNewEditor(event, false);
+ }
+ pointerdown(event) {
+ if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.HIGHLIGHT) {
+ this.enableTextSelection();
+ }
+ if (__privateGet(this, _hadPointerDown)) {
+ __privateSet(this, _hadPointerDown, false);
+ return;
+ }
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ if (event.button !== 0 || event.ctrlKey && isMac) {
+ return;
+ }
+ if (event.target !== this.div) {
+ return;
+ }
+ __privateSet(this, _hadPointerDown, true);
+ const editor = __privateGet(this, _uiManager3).getActive();
+ __privateSet(this, _allowClick, !editor || editor.isEmpty());
+ }
+ findNewParent(editor, x, y) {
+ const layer = __privateGet(this, _uiManager3).findParent(x, y);
+ if (layer === null || layer === this) {
+ return false;
+ }
+ layer.changeParent(editor);
+ return true;
+ }
+ destroy() {
+ var _a2, _b;
+ if (((_a2 = __privateGet(this, _uiManager3).getActive()) == null ? void 0 : _a2.parent) === this) {
+ __privateGet(this, _uiManager3).commitOrRemove();
+ __privateGet(this, _uiManager3).setActiveEditor(null);
+ }
+ if (__privateGet(this, _editorFocusTimeoutId)) {
+ clearTimeout(__privateGet(this, _editorFocusTimeoutId));
+ __privateSet(this, _editorFocusTimeoutId, null);
+ }
+ for (const editor of __privateGet(this, _editors).values()) {
+ (_b = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _b.removePointerInTextLayer(editor.contentDiv);
+ editor.setParent(null);
+ editor.isAttachedToDOM = false;
+ editor.div.remove();
+ }
+ this.div = null;
+ __privateGet(this, _editors).clear();
+ __privateGet(this, _uiManager3).removeLayer(this);
+ }
+ render({
+ viewport
+ }) {
+ this.viewport = viewport;
+ setLayerDimensions(this.div, viewport);
+ for (const editor of __privateGet(this, _uiManager3).getEditors(this.pageIndex)) {
+ this.add(editor);
+ editor.rebuild();
+ }
+ this.updateMode();
+ }
+ update({
+ viewport
+ }) {
+ __privateGet(this, _uiManager3).commitOrRemove();
+ __privateMethod(this, _cleanup, cleanup_fn).call(this);
+ const oldRotation = this.viewport.rotation;
+ const rotation = viewport.rotation;
+ this.viewport = viewport;
+ setLayerDimensions(this.div, {
+ rotation
+ });
+ if (oldRotation !== rotation) {
+ for (const editor of __privateGet(this, _editors).values()) {
+ editor.rotate(rotation);
+ }
+ }
+ this.addInkEditorIfNeeded(false);
+ }
+ get pageDimensions() {
+ const {
+ pageWidth,
+ pageHeight
+ } = this.viewport.rawDims;
+ return [pageWidth, pageHeight];
+ }
+ get scale() {
+ return __privateGet(this, _uiManager3).viewParameters.realScale;
+ }
+};
+var AnnotationEditorLayer = _AnnotationEditorLayer;
+_accessibilityManager2 = new WeakMap();
+_allowClick = new WeakMap();
+_annotationLayer = new WeakMap();
+_clickAC = new WeakMap();
+_editorFocusTimeoutId = new WeakMap();
+_editors = new WeakMap();
+_hadPointerDown = new WeakMap();
+_isCleaningUp = new WeakMap();
+_isDisabling = new WeakMap();
+_textLayer = new WeakMap();
+_textSelectionAC = new WeakMap();
+_uiManager3 = new WeakMap();
+_editorTypes2 = new WeakMap();
+_textLayerPointerDown = new WeakSet();
+textLayerPointerDown_fn = function(event) {
+ __privateGet(this, _uiManager3).unselectAll();
+ const {
+ target
+ } = event;
+ if (target === __privateGet(this, _textLayer).div || target.classList.contains("endOfContent") && __privateGet(this, _textLayer).div.contains(target)) {
+ const {
+ isMac
+ } = util_FeatureTest.platform;
+ if (event.button !== 0 || event.ctrlKey && isMac) {
+ return;
+ }
+ __privateGet(this, _uiManager3).showAllEditors("highlight", true, true);
+ __privateGet(this, _textLayer).div.classList.add("free");
+ this.toggleDrawing();
+ HighlightEditor.startHighlighting(this, __privateGet(this, _uiManager3).direction === "ltr", event);
+ __privateGet(this, _textLayer).div.addEventListener("pointerup", () => {
+ __privateGet(this, _textLayer).div.classList.remove("free");
+ this.toggleDrawing(true);
+ }, {
+ once: true,
+ signal: __privateGet(this, _uiManager3)._signal
+ });
+ event.preventDefault();
+ }
+};
+_currentEditorType = new WeakSet();
+currentEditorType_get = function() {
+ return __privateGet(_AnnotationEditorLayer, _editorTypes2).get(__privateGet(this, _uiManager3).getMode());
+};
+_createNewEditor = new WeakSet();
+createNewEditor_fn = function(params) {
+ const editorType = __privateGet(this, _currentEditorType, currentEditorType_get);
+ return editorType ? new editorType.prototype.constructor(params) : null;
+};
+_getCenterPoint = new WeakSet();
+getCenterPoint_fn = function() {
+ 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
+ };
+};
+_cleanup = new WeakSet();
+cleanup_fn = function() {
+ __privateSet(this, _isCleaningUp, true);
+ for (const editor of __privateGet(this, _editors).values()) {
+ if (editor.isEmpty()) {
+ editor.remove();
+ }
+ }
+ __privateSet(this, _isCleaningUp, false);
+};
+__publicField(AnnotationEditorLayer, "_initialized", false);
+__privateAdd(AnnotationEditorLayer, _editorTypes2, new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map((type) => [type._editorType, type])));
+var _parent2, _id5, _mapping, _toUpdate, _setBox, setBox_fn, _createSVG, createSVG_fn, _createClipPath, createClipPath_fn;
+var _DrawLayer = class {
+ constructor({
+ pageIndex
+ }) {
+ __privateAdd(this, _createSVG);
+ __privateAdd(this, _createClipPath);
+ __privateAdd(this, _parent2, null);
+ __privateAdd(this, _id5, 0);
+ __privateAdd(this, _mapping, /* @__PURE__ */ new Map());
+ __privateAdd(this, _toUpdate, /* @__PURE__ */ new Map());
+ this.pageIndex = pageIndex;
+ }
+ setParent(parent) {
+ if (!__privateGet(this, _parent2)) {
+ __privateSet(this, _parent2, parent);
+ return;
+ }
+ if (__privateGet(this, _parent2) !== parent) {
+ if (__privateGet(this, _mapping).size > 0) {
+ for (const root of __privateGet(this, _mapping).values()) {
+ root.remove();
+ parent.append(root);
+ }
+ }
+ __privateSet(this, _parent2, parent);
+ }
+ }
+ static get _svgFactory() {
+ return shadow(this, "_svgFactory", new DOMSVGFactory());
+ }
+ highlight(outlines, color, opacity, isPathUpdatable = false) {
+ const id = __privateWrapper(this, _id5)._++;
+ const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box);
+ root.classList.add("highlight");
+ if (outlines.free) {
+ root.classList.add("free");
+ }
+ 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("d", outlines.toSVGPath());
+ if (isPathUpdatable) {
+ __privateGet(this, _toUpdate).set(id, path);
+ }
+ const clipPathId = __privateMethod(this, _createClipPath, createClipPath_fn).call(this, defs, pathId);
+ const use = _DrawLayer._svgFactory.createElement("use");
+ root.append(use);
+ root.setAttribute("fill", color);
+ root.setAttribute("fill-opacity", opacity);
+ use.setAttribute("href", `#${pathId}`);
+ __privateGet(this, _mapping).set(id, root);
+ return {
+ id,
+ clipPathId: `url(#${clipPathId})`
+ };
+ }
+ highlightOutline(outlines) {
+ const id = __privateWrapper(this, _id5)._++;
+ const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box);
+ root.classList.add("highlightOutline");
+ 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("d", outlines.toSVGPath());
+ path.setAttribute("vector-effect", "non-scaling-stroke");
+ let maskId;
+ if (outlines.free) {
+ root.classList.add("free");
+ 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");
+ __privateGet(this, _mapping).set(id, root);
+ return id;
+ }
+ finalizeLine(id, line) {
+ const path = __privateGet(this, _toUpdate).get(id);
+ __privateGet(this, _toUpdate).delete(id);
+ this.updateBox(id, line.box);
+ path.setAttribute("d", line.toSVGPath());
+ }
+ updateLine(id, line) {
+ const root = __privateGet(this, _mapping).get(id);
+ const defs = root.firstChild;
+ const path = defs.firstChild;
+ path.setAttribute("d", line.toSVGPath());
+ }
+ removeFreeHighlight(id) {
+ this.remove(id);
+ __privateGet(this, _toUpdate).delete(id);
+ }
+ updatePath(id, line) {
+ __privateGet(this, _toUpdate).get(id).setAttribute("d", line.toSVGPath());
+ }
+ updateBox(id, box) {
+ var _a2;
+ __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, __privateGet(this, _mapping).get(id), box);
+ }
+ show(id, visible) {
+ __privateGet(this, _mapping).get(id).classList.toggle("hidden", !visible);
+ }
+ rotate(id, angle) {
+ __privateGet(this, _mapping).get(id).setAttribute("data-main-rotation", angle);
+ }
+ changeColor(id, color) {
+ __privateGet(this, _mapping).get(id).setAttribute("fill", color);
+ }
+ changeOpacity(id, opacity) {
+ __privateGet(this, _mapping).get(id).setAttribute("fill-opacity", opacity);
+ }
+ addClass(id, className) {
+ __privateGet(this, _mapping).get(id).classList.add(className);
+ }
+ removeClass(id, className) {
+ __privateGet(this, _mapping).get(id).classList.remove(className);
+ }
+ remove(id) {
+ if (__privateGet(this, _parent2) === null) {
+ return;
+ }
+ __privateGet(this, _mapping).get(id).remove();
+ __privateGet(this, _mapping).delete(id);
+ }
+ destroy() {
+ __privateSet(this, _parent2, null);
+ for (const root of __privateGet(this, _mapping).values()) {
+ root.remove();
+ }
+ __privateGet(this, _mapping).clear();
+ }
+};
+var DrawLayer = _DrawLayer;
+_parent2 = new WeakMap();
+_id5 = new WeakMap();
+_mapping = new WeakMap();
+_toUpdate = new WeakMap();
+_setBox = new WeakSet();
+setBox_fn = function(element2, {
+ x = 0,
+ y = 0,
+ width = 1,
+ height = 1
+} = {}) {
+ const {
+ style
+ } = element2;
+ style.top = `${100 * y}%`;
+ style.left = `${100 * x}%`;
+ style.width = `${100 * width}%`;
+ style.height = `${100 * height}%`;
+};
+_createSVG = new WeakSet();
+createSVG_fn = function(box) {
+ var _a2;
+ const svg = _DrawLayer._svgFactory.create(1, 1, true);
+ __privateGet(this, _parent2).append(svg);
+ svg.setAttribute("aria-hidden", true);
+ __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, svg, box);
+ return svg;
+};
+_createClipPath = new WeakSet();
+createClipPath_fn = function(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;
+};
+__privateAdd(DrawLayer, _setBox);
+var __webpack_exports__AbortException = __webpack_exports__.AbortException;
+var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer;
+var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType;
+var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType;
+var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager;
+var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer;
+var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode;
+var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType;
+var __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker;
+var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory;
+var __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer;
+var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest;
+var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions;
+var __webpack_exports__ImageKind = __webpack_exports__.ImageKind;
+var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException;
+var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException;
+var __webpack_exports__OPS = __webpack_exports__.OPS;
+var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport;
+var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString;
+var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker;
+var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses;
+var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag;
+var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch;
+var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException;
+var __webpack_exports__TextLayer = __webpack_exports__.TextLayer;
+var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException;
+var __webpack_exports__Util = __webpack_exports__.Util;
+var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel;
+var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer;
+var __webpack_exports__build = __webpack_exports__.build;
+var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl;
+var __webpack_exports__fetchData = __webpack_exports__.fetchData;
+var __webpack_exports__getDocument = __webpack_exports__.getDocument;
+var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl;
+var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl;
+var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport;
+var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme;
+var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile;
+var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu;
+var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode;
+var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions;
+var __webpack_exports__shadow = __webpack_exports__.shadow;
+var __webpack_exports__version = __webpack_exports__.version;
+
+// inline-worker:__inline-worker
+function inlineWorker(scriptText) {
+ let blob = new Blob([scriptText], { type: "text/javascript" });
+ let url = URL.createObjectURL(blob);
+ let worker = new Worker(url);
+ URL.revokeObjectURL(url);
+ return worker;
+}
+
+// src/processors/pdf.worker.js
+function Worker2() {
+ return inlineWorker('var Rn=Object.defineProperty;var xu=Object.getOwnPropertyDescriptor;var mu=Object.getOwnPropertyNames;var pu=Object.prototype.hasOwnProperty;var wu=(e,A,t)=>A in e?Rn(e,A,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[A]=t;var yu=(e,A)=>{for(var t in A)Rn(e,t,{get:A[t],enumerable:!0})},bu=(e,A,t,i)=>{if(A&&typeof A=="object"||typeof A=="function")for(let s of mu(A))!pu.call(e,s)&&s!==t&&Rn(e,s,{get:()=>A[s],enumerable:!(i=xu(A,s))||i.enumerable});return e};var Du=e=>bu(Rn({},"__esModule",{value:!0}),e);var et=(e,A,t)=>(wu(e,typeof A!="symbol"?A+"":A,t),t),lo=(e,A,t)=>{if(!A.has(e))throw TypeError("Cannot "+t)};var ne=(e,A,t)=>(lo(e,A,"read from private field"),t?t.call(e):A.get(e)),HA=(e,A,t)=>{if(A.has(e))throw TypeError("Cannot add the same private member more than once");A instanceof WeakSet?A.add(e):A.set(e,t)},_s=(e,A,t,i)=>(lo(e,A,"write to private field"),i?i.call(e,t):A.set(e,t),t);var mA=(e,A,t)=>(lo(e,A,"access private method"),t);var Dx={};yu(Dx,{WorkerMessageHandler:()=>bx});module.exports=Du(Dx);var Ba={};Ba.d=(e,A)=>{for(var t in A)Ba.o(A,t)&&!Ba.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:A[t]})};Ba.o=(e,A)=>Object.prototype.hasOwnProperty.call(e,A);var qE=globalThis.pdfjsWorker={};Ba.d(qE,{WorkerMessageHandler:()=>H0});var ku=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),Wt=[1,0,0,1,0,0],E0=[.001,0,0,.001,0,0],Su=1e7,Qi=1.35,Cr=.35,R1=Cr/Qi,st={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256};var TE="pdfjs_internal_editor_",bi={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15};var N1={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},PE={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},Ke={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},Le={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},Ho={GROUP:"Group",REPLY:"R"},it={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512},Te={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864},Y0={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},WE={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"},Fu={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},Ru={O:"PageOpen",C:"PageClose"},Da={ERRORS:0,WARNINGS:1,INFOS:5},Br={NONE:0,BINARY:1},y={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},G1={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},Xg=Da.WARNINGS;function Nu(e){Number.isInteger(e)&&(Xg=e)}function Gu(){return Xg}function PA(e){Xg>=Da.INFOS&&console.log(`Info: ${e}`)}function k(e){Xg>=Da.WARNINGS&&console.log(`Warning: ${e}`)}function OA(e){throw new Error(e)}function gt(e,A){e||OA(A)}function Uu(e){switch(e==null?void 0:e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function Qr(e,A=null,t=null){if(!e)return null;try{if(t&&typeof e=="string"){if(t.addDefaultProtocol&&e.startsWith("www.")){let s=e.match(/\\./g);(s==null?void 0:s.length)>=2&&(e=`http://${e}`)}if(t.tryConvertEncoding)try{e=ka(e)}catch(s){}}let i=A?new URL(e,A):new URL(e);if(Uu(i))return i}catch(i){}return null}function nA(e,A,t,i=!1){return Object.defineProperty(e,A,{value:t,enumerable:!i,configurable:!0,writable:!1}),t}var At=function(){function A(t,i){this.message=t,this.name=i}return A.prototype=new Error,A.constructor=A,A}(),bs=class extends At{constructor(A,t){super(A,"PasswordException"),this.code=t}},Ds=class extends At{constructor(A,t){super(A,"UnknownErrorException"),this.details=t}},ks=class extends At{constructor(A){super(A,"InvalidPDFException")}},Er=class extends At{constructor(A){super(A,"MissingPDFException")}},fr=class extends At{constructor(A,t){super(A,"UnexpectedResponseException"),this.status=t}},v=class extends At{constructor(A){super(A,"FormatError")}},ve=class extends At{constructor(A){super(A,"AbortException")}};function Qt(e){(typeof e!="object"||(e==null?void 0:e.length)===void 0)&&OA("Invalid argument for bytesToString");let A=e.length,t=8192;if(A>24&255,e>>16&255,e>>8&255,e&255)}function OE(e){return Object.keys(e).length}function Mu(){let e=new Uint8Array(4);return e[0]=1,new Uint32Array(e.buffer,0,1)[0]===1}function Lu(){try{return new Function(""),!0}catch(e){return!1}}var Ot=class{static get isLittleEndian(){return nA(this,"isLittleEndian",Mu())}static get isEvalSupported(){return nA(this,"isEvalSupported",Lu())}static get isOffscreenCanvasSupported(){return nA(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas!="undefined")}static get platform(){return typeof navigator!="undefined"&&typeof(navigator==null?void 0:navigator.platform)=="string"?nA(this,"platform",{isMac:navigator.platform.includes("Mac")}):nA(this,"platform",{isMac:!1})}static get isCSSRoundSupported(){var A,t;return nA(this,"isCSSRoundSupported",(t=(A=globalThis.CSS)==null?void 0:A.supports)==null?void 0:t.call(A,"width: round(1.5px, 1px)"))}},ho=Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,"0")),Es,zn,nn,Jo,Ce=class{static makeHexColor(A,t,i){return`#${ho[A]}${ho[t]}${ho[i]}`}static scaleMinMax(A,t){let i;A[0]?(A[0]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[0],t[2]*=A[0],A[3]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[3],t[3]*=A[3]):(i=t[0],t[0]=t[1],t[1]=i,i=t[2],t[2]=t[3],t[3]=i,A[1]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[1],t[3]*=A[1],A[2]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[2],t[2]*=A[2]),t[0]+=A[4],t[1]+=A[5],t[2]+=A[4],t[3]+=A[5]}static transform(A,t){return[A[0]*t[0]+A[2]*t[1],A[1]*t[0]+A[3]*t[1],A[0]*t[2]+A[2]*t[3],A[1]*t[2]+A[3]*t[3],A[0]*t[4]+A[2]*t[5]+A[4],A[1]*t[4]+A[3]*t[5]+A[5]]}static applyTransform(A,t){let i=A[0]*t[0]+A[1]*t[2]+t[4],s=A[0]*t[1]+A[1]*t[3]+t[5];return[i,s]}static applyInverseTransform(A,t){let i=t[0]*t[3]-t[1]*t[2],s=(A[0]*t[3]-A[1]*t[2]+t[2]*t[5]-t[4]*t[3])/i,a=(-A[0]*t[1]+A[1]*t[0]+t[4]*t[1]-t[5]*t[0])/i;return[s,a]}static getAxialAlignedBoundingBox(A,t){let i=this.applyTransform(A,t),s=this.applyTransform(A.slice(2,4),t),a=this.applyTransform([A[0],A[3]],t),n=this.applyTransform([A[2],A[1]],t);return[Math.min(i[0],s[0],a[0],n[0]),Math.min(i[1],s[1],a[1],n[1]),Math.max(i[0],s[0],a[0],n[0]),Math.max(i[1],s[1],a[1],n[1])]}static inverseTransform(A){let t=A[0]*A[3]-A[1]*A[2];return[A[3]/t,-A[1]/t,-A[2]/t,A[0]/t,(A[2]*A[5]-A[4]*A[3])/t,(A[4]*A[1]-A[5]*A[0])/t]}static singularValueDecompose2dScale(A){let t=[A[0],A[2],A[1],A[3]],i=A[0]*t[0]+A[1]*t[2],s=A[0]*t[1]+A[1]*t[3],a=A[2]*t[0]+A[3]*t[2],n=A[2]*t[1]+A[3]*t[3],r=(i+n)/2,g=Math.sqrt((i+n)**2-4*(i*n-a*s))/2,o=r+g||1,I=r-g||1;return[Math.sqrt(o),Math.sqrt(I)]}static normalizeRect(A){let t=A.slice(0);return A[0]>A[2]&&(t[0]=A[2],t[2]=A[0]),A[1]>A[3]&&(t[1]=A[3],t[3]=A[1]),t}static intersect(A,t){let i=Math.max(Math.min(A[0],A[2]),Math.min(t[0],t[2])),s=Math.min(Math.max(A[0],A[2]),Math.max(t[0],t[2]));if(i>s)return null;let a=Math.max(Math.min(A[1],A[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(A[1],A[3]),Math.max(t[1],t[3]));return a>n?null:[i,a,s,n]}static bezierBoundingBox(A,t,i,s,a,n,r,g,o){return o?(o[0]=Math.min(o[0],A,r),o[1]=Math.min(o[1],t,g),o[2]=Math.max(o[2],A,r),o[3]=Math.max(o[3],t,g)):o=[Math.min(A,r),Math.min(t,g),Math.max(A,r),Math.max(t,g)],mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-A+3*(i-a)+r),6*(A-2*i+a),3*(i-A),o),mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-t+3*(s-n)+g),6*(t-2*s+n),3*(s-t),o),o}};Es=new WeakSet,zn=function(A,t,i,s,a,n,r,g,o,I){if(o<=0||o>=1)return;let c=1-o,l=o*o,h=l*o,C=c*(c*(c*A+3*o*t)+3*l*i)+h*s,B=c*(c*(c*a+3*o*n)+3*l*r)+h*g;I[0]=Math.min(I[0],C),I[1]=Math.min(I[1],B),I[2]=Math.max(I[2],C),I[3]=Math.max(I[3],B)},nn=new WeakSet,Jo=function(A,t,i,s,a,n,r,g,o,I,c,l){if(Math.abs(o)<1e-12){Math.abs(I)>=1e-12&&mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,-c/I,l);return}let h=I**2-4*c*o;if(h<0)return;let C=Math.sqrt(h),B=2*o;mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I+C)/B,l),mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I-C)/B,l)},HA(Ce,Es),HA(Ce,nn);var Hu=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,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,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function jA(e){if(e[0]>="\\xEF"){let t;if(e[0]==="\\xFE"&&e[1]==="\\xFF"?(t="utf-16be",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xFF"&&e[1]==="\\xFE"?(t="utf-16le",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xEF"&&e[1]==="\\xBB"&&e[2]==="\\xBF"&&(t="utf-8"),t)try{let i=new TextDecoder(t,{fatal:!0}),s=Pe(e),a=i.decode(s);return a.includes("\\x1B")?a.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g,""):a}catch(i){k(`stringToPDFString: "${i}".`)}}let A=[];for(let t=0,i=e.length;tt?t.normalize("NFKC"):U1.get(i))}var Yu="pdfjs_internal_id_",_e={BEZIER_CURVE_TO:0,MOVE_TO:1,LINE_TO:2,QUADRATIC_CURVE_TO:3,RESTORE:4,SAVE:5,SCALE:6,TRANSFORM:7,TRANSLATE:8},Ku=Symbol("CIRCULAR_REF"),Ge=Symbol("EOF"),$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null);function vu(){$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null)}var M=class{constructor(A){this.name=A}static get(A){return Ar[A]||(Ar[A]=new M(A))}},fe=class{constructor(A){this.cmd=A}static get(A){return $n[A]||($n[A]=new fe(A))}},ZE=function(){return ZE},F=class{constructor(A=null){this._map=Object.create(null),this.xref=A,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=ZE}assignXref(A){this.xref=A}get size(){return Object.keys(this._map).length}get(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetch(s,this.suppressEncryption):s}async getAsync(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetchAsync(s,this.suppressEncryption):s}getArray(A,t,i){let s=this._map[A];if(s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref&&(s=this.xref.fetch(s,this.suppressEncryption)),Array.isArray(s)){s=s.slice();for(let a=0,n=s.length;a{OA("Should not call `set` on the empty dictionary.")},nA(this,"empty",A)}static merge({xref:A,dictArray:t,mergeSubDicts:i=!1}){let s=new F(A),a=new Map;for(let n of t)if(n instanceof F)for(let[r,g]of Object.entries(n._map)){let o=a.get(r);if(o===void 0)o=[],a.set(r,o);else if(!i||!(g instanceof F))continue;o.push(g)}for(let[n,r]of a){if(r.length===1||!(r[0]instanceof F)){s._map[n]=r[0];continue}let g=new F(A);for(let o of r)for(let[I,c]of Object.entries(o._map))g._map[I]===void 0&&(g._map[I]=c);g.size>0&&(s._map[n]=g)}return a.clear(),s.size>0?s:F.empty}clone(){let A=new F(this.xref);for(let t of this.getKeys())A.set(t,this.getRaw(t));return A}delete(A){delete this._map[A]}},oA=class{constructor(A,t){this.num=A,this.gen=t}toString(){return this.gen===0?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(A){let t=W0[A];if(t)return t;let i=/^(\\d+)R(\\d*)$/.exec(A);return!i||i[1]==="0"?null:W0[A]=new oA(parseInt(i[1]),i[2]?parseInt(i[2]):0)}static get(A,t){let i=t===0?`${A}R`:`${A}R${t}`;return W0[i]||(W0[i]=new oA(A,t))}},be=class{constructor(A=null){this._set=new Set(A==null?void 0:A._set)}has(A){return this._set.has(A.toString())}put(A){this._set.add(A.toString())}remove(A){this._set.delete(A.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}},mt=class{constructor(){this._map=new Map}get size(){return this._map.size}get(A){return this._map.get(A.toString())}has(A){return this._map.has(A.toString())}put(A,t){this._map.set(A.toString(),t)}putAlias(A,t){this._map.set(A.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*items(){for(let[A,t]of this._map)yield[oA.fromString(A),t]}};function ye(e,A){return e instanceof M&&(A===void 0||e.name===A)}function Ne(e,A){return e instanceof fe&&(A===void 0||e.cmd===A)}function jE(e,A){return e instanceof F&&(A===void 0||ye(e.get("Type"),A))}function ur(e,A){return e.num===A.num&&e.gen===A.gen}var KA=class{get length(){OA("Abstract getter `length` accessed")}get isEmpty(){OA("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return nA(this,"isDataLoaded",!0)}getByte(){OA("Abstract method `getByte` called")}getBytes(A){OA("Abstract method `getBytes` called")}async getImageData(A,t){return this.getBytes(A,t)}async asyncGetBytes(){OA("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}peekByte(){let A=this.getByte();return A!==-1&&this.pos--,A}peekBytes(A){let t=this.getBytes(A);return this.pos-=t.length,t}getUint16(){let A=this.getByte(),t=this.getByte();return A===-1||t===-1?-1:(A<<8)+t}getInt32(){let A=this.getByte(),t=this.getByte(),i=this.getByte(),s=this.getByte();return(A<<24)+(t<<16)+(i<<8)+s}getByteRange(A,t){OA("Abstract method `getByteRange` called")}getString(A){return Qt(this.getBytes(A))}skip(A){this.pos+=A||1}reset(){OA("Abstract method `reset` called")}moveStart(){OA("Abstract method `moveStart` called")}makeSubStream(A,t,i=null){OA("Abstract method `makeSubStream` called")}getBaseStreams(){return null}},XE=/^[1-9]\\.\\d$/;function he(e){let A;return function(){return e&&(A=Object.create(null),e(A),e=null),A}}var ge=class extends At{constructor(A,t){super(`Missing data [${A}, ${t})`,"MissingDataException"),this.begin=A,this.end=t}},Sa=class extends At{constructor(A){super(A,"ParserEOFException")}},ti=class extends At{constructor(A){super(A,"XRefEntryException")}},Pi=class extends At{constructor(A){super(A,"XRefParseException")}};function VE(e){let A=e.length;if(A===0)return new Uint8Array(0);if(A===1)return new Uint8Array(e[0]);let t=0;for(let a=0;a0,"The number should be a positive integer.");let t=[],i;for(;e>=1e3;)e-=1e3,t.push("M");i=e/100|0,e%=100,t.push(Bo[i]),i=e/10|0,e%=10,t.push(Bo[10+i]),t.push(Bo[20+e]);let s=t.join("");return A?s.toLowerCase():s}function g1(e){return e<=0?0:Math.ceil(Math.log2(e))}function Di(e,A){return e[A]<<24>>24}function we(e,A){return e[A]<<8|e[A+1]}function le(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function pt(e){return e===32||e===9||e===13||e===10}function Tu(e,A){return Array.isArray(e)&&(A===null||e.length===A)&&e.every(t=>typeof t=="boolean")}function wt(e,A){return Array.isArray(e)?(A===null||e.length===A)&&e.every(t=>typeof t=="number"):ArrayBuffer.isView(e)&&(e.length===0||typeof e[0]=="number")&&(A===null||e.length===A)}function Ki(e,A){return wt(e,6)?e:A}function Ko(e,A){return wt(e,4)?e:A}function Ei(e,A){return wt(e,4)?Ce.normalizeRect(e):A}function _E(e){let A=/(.+)\\[(\\d+)\\]$/;return e.split(".").map(t=>{let i=t.match(A);return i?{name:i[1],pos:parseInt(i[2],10)}:{name:t,pos:0}})}function o1(e){let A=[],t=0;for(let i=0,s=e.length;i126||a===35||a===40||a===41||a===60||a===62||a===91||a===93||a===123||a===125||a===47||a===37)&&(tA===`\n`?"\\\\n":A==="\\r"?"\\\\r":`\\\\${A}`)}function dr(e,A,t,i){if(!e)return;let s=null;if(e instanceof oA){if(i.has(e))return;s=e,i.put(s),e=A.fetch(e)}if(Array.isArray(e))for(let a of e)dr(a,A,t,i);else if(e instanceof F){if(ye(e.get("S"),"JavaScript")){let a=e.get("JS"),n;a instanceof KA?n=a.getString():typeof a=="string"&&(n=a),n&&(n=jA(n).replaceAll("\\0","")),n&&t.push(n)}dr(e.getRaw("Next"),A,t,i)}s&&i.remove(s)}function Vg(e,A,t){let i=Object.create(null),s=Mt({dict:A,key:"AA",stopWhenFound:!1});if(s)for(let a=s.length-1;a>=0;a--){let n=s[a];if(n instanceof F)for(let r of n.getKeys()){let g=t[r];if(!g)continue;let o=n.getRaw(r),I=new be,c=[];dr(o,e,c,I),c.length>0&&(i[g]=c)}}if(A.has("A")){let a=A.get("A"),n=new be,r=[];dr(a,e,r,n),r.length>0&&(i.Action=r)}return OE(i)>0?i:null}var Pu={60:"<",62:">",38:"&",34:""",39:"'"};function*Wu(e){for(let A=0,t=e.length;A55295&&(i<57344||i>65533)&&A++,yield i}}function ls(e){let A=[],t=0;for(let i=0,s=e.length;i55295&&(a<57344||a>65533)&&i++,t=i+1}return A.length===0?e:(t: ${e}.`),!1;return!0}function Ou(e){let A="14",t="400",i=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:s,fontWeight:a,italicAngle:n}=e;if(!vo(s,!0))return!1;let r=a?a.toString():"";e.fontWeight=i.has(r)?r:t;let g=parseFloat(n);return e.italicAngle=isNaN(g)||g<-90||g>90?A:n.toString(),!0}function zE(e){let A=["app.launchURL","window.open","xfa.host.gotoURL"],i=new RegExp("^\\\\s*("+A.join("|").replaceAll(".","\\\\.")+`)\\\\((?:\'|")([^\'"]*)(?:\'|")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))`,"i").exec(e);if(i!=null&&i[2]){let s=i[2],a=!1;return i[3]==="true"&&i[1]==="app.launchURL"&&(a=!0),{url:s,newWindow:a}}return null}function Ae(e){if(Number.isInteger(e))return e.toString();let A=Math.round(e*100);return A%100===0?(A/100).toString():A%10===0?e.toFixed(1):e.toFixed(2)}function $E(e){if(!e)return null;let A=new Map;for(let[t,i]of e){if(!t.startsWith(TE))continue;let s=A.get(i.pageIndex);s||(s=[],A.set(i.pageIndex,s)),s.push(i)}return A.size>0?A:null}function ii(e){return Zu(e)?e:Af(e,!0)}function Zu(e){return/^[\\x00-\\x7F]*$/.test(e)}function ju(e){let A=[];for(let t=0,i=e.length;t>8&255).toString(16).padStart(2,"0"),(s&255).toString(16).padStart(2,"0"))}return A.join("")}function Af(e,A=!1){let t=[];A&&t.push("\\xFE\\xFF");for(let i=0,s=e.length;i>8&255),String.fromCharCode(a&255))}return t.join("")}function xr(e,A,t){switch(e){case 90:return[0,1,-1,0,A,0];case 180:return[-1,0,0,-1,A,t];case 270:return[0,-1,1,0,0,t];default:throw new Error("Invalid rotation")}}function M1(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}var Ie=class extends KA{constructor(A,t,i,s){super(),this.bytes=A instanceof Uint8Array?A:new Uint8Array(A),this.start=t||0,this.pos=this.start,this.end=t+i||this.bytes.length,this.dict=s}get length(){return this.end-this.start}get isEmpty(){return this.length===0}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return t.subarray(i,s);let a=i+A;return a>s&&(a=s),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),this.bytes.subarray(A,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(A,t,i=null){return new Ie(this.bytes.buffer,A,t,i)}},It=class extends Ie{constructor(A){super(Pe(A))}},Rs=class extends Ie{constructor(){super(new Uint8Array(0))}},qo=class extends Ie{constructor(A,t,i){super(new Uint8Array(A),0,A,null),this.chunkSize=t,this._loadedChunks=new Set,this.numChunks=Math.ceil(A/t),this.manager=i,this.progressiveDataLength=0,this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){let A=[];for(let t=0,i=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let a=i;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new ge(A,A+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(A,t){if(A>=t||t<=this.progressiveDataLength)return;let i=Math.floor(A/this.chunkSize);if(i>this.numChunks)return;let s=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let a=i;a=this.end?-1:(A>=this.progressiveDataLength&&this.ensureByte(A),this.bytes[this.pos++])}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return s>this.progressiveDataLength&&this.ensureRange(i,s),t.subarray(i,s);let a=i+A;return a>s&&(a=s),a>this.progressiveDataLength&&this.ensureRange(i,a),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(A,t),this.bytes.subarray(A,t)}makeSubStream(A,t,i=null){t?A+t>this.progressiveDataLength&&this.ensureRange(A,A+t):A>=this.progressiveDataLength&&this.ensureByte(A);function s(){}s.prototype=Object.create(this),s.prototype.getMissingChunks=function(){let n=this.chunkSize,r=Math.floor(this.start/n),g=Math.floor((this.end-1)/n)+1,o=[];for(let I=r;I{let g=({value:o,done:I})=>{try{if(I){let c=VE(s);s=null,n(c);return}a+=o.byteLength,i.isStreamingSupported&&this.onProgress({loaded:a}),s.push(o),i.read().then(g,r)}catch(c){r(c)}};i.read().then(g,r)}).then(n=>{this.aborted||this.onReceiveData({chunk:n,begin:A})})}requestAllChunks(A=!1){if(!A){let t=this.stream.getMissingChunks();this._requestChunks(t)}return this._loadedStreamCapability.promise}_requestChunks(A){let t=this.currRequestId++,i=new Set;this._chunksNeededByRequest.set(t,i);for(let n of A)this.stream.hasChunk(n)||i.add(n);if(i.size===0)return Promise.resolve();let s=Promise.withResolvers();this._promisesByRequest.set(t,s);let a=[];for(let n of i){let r=this._requestsByChunk.get(n);r||(r=[],this._requestsByChunk.set(n,r),a.push(n)),r.push(t)}if(a.length>0){let n=this.groupChunks(a);for(let r of n){let g=r.beginChunk*this.chunkSize,o=Math.min(r.endChunk*this.chunkSize,this.length);this.sendRequest(g,o).catch(s.reject)}}return s.promise.catch(n=>{if(!this.aborted)throw n})}getStream(){return this.stream}requestRange(A,t){t=Math.min(t,this.length);let i=this.getBeginChunk(A),s=this.getEndChunk(t),a=[];for(let n=i;n=0&&s+1!==r&&(t.push({beginChunk:i,endChunk:s+1}),i=r),a+1===A.length&&t.push({beginChunk:i,endChunk:r+1}),s=r}return t}onProgress(A){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+A.loaded,total:this.length})}onReceiveData(A){let t=A.chunk,i=A.begin===void 0,s=i?this.progressiveDataLength:A.begin,a=s+t.byteLength,n=Math.floor(s/this.chunkSize),r=a0)&&g.push(c)}}}if(!this.disableAutoFetch&&this._requestsByChunk.size===0){let o;if(this.stream.numChunksLoaded===1){let I=this.stream.numChunks-1;this.stream.hasChunk(I)||(o=I)}else o=this.stream.nextEmptyChunk(r);Number.isInteger(o)&&this._requestChunks([o])}for(let o of g){let I=this._promisesByRequest.get(o);this._promisesByRequest.delete(o),I.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(A){this._loadedStreamCapability.reject(A)}getBeginChunk(A){return Math.floor(A/this.chunkSize)}getEndChunk(A){return Math.floor((A-1)/this.chunkSize)+1}abort(A){var t;this.aborted=!0,(t=this.pdfNetworkStream)==null||t.cancelAllRequests(A);for(let i of this._promisesByRequest.values())i.reject(A)}};function Xu(e,A,t,i,s,a,n){n=n!==1?0:n;let g=t/s,o=i/a,I=0,c,l=new Uint16Array(s),h=t*3;for(let C=0;Cl&&this.name!=="DeviceGray"&&this.name!=="DeviceRGB"){let C=r<=8?new Uint8Array(l):new Uint16Array(l);for(let Q=0;Q=.99554525?1:mA(this,Hi,Z0).call(this,0,1,(1+.055)*t**(1/2.4)-.055)},Hi=new WeakSet,Z0=function(t,i,s){return Math.max(t,Math.min(i,s))},Ji=new WeakSet,j0=function(t){return t<0?-mA(this,Ji,j0).call(this,-t):t>8?((t+16)/116)**3:t*ne(je,kg)},Rg=new WeakSet,sf=function(t,i,s){if(t[0]===0&&t[1]===0&&t[2]===0){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=mA(this,Ji,j0).call(this,0),n=a,r=mA(this,Ji,j0).call(this,t[0]),g=a,o=mA(this,Ji,j0).call(this,t[1]),I=a,c=mA(this,Ji,j0).call(this,t[2]),l=(1-n)/(1-r),h=1-l,C=(1-g)/(1-o),B=1-C,Q=(1-I)/(1-c),E=1-Q;s[0]=i[0]*l+h,s[1]=i[1]*C+B,s[2]=i[2]*Q+E},Ng=new WeakSet,af=function(t,i,s){if(t[0]===1&&t[2]===1){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Sg,ef).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},Gg=new WeakSet,nf=function(t,i,s){let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Fg,tf).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},hn=new WeakSet,$o=function(t,i,s,a,n){let r=mA(this,Hi,Z0).call(this,0,1,t[i]*n),g=mA(this,Hi,Z0).call(this,0,1,t[i+1]*n),o=mA(this,Hi,Z0).call(this,0,1,t[i+2]*n),I=r===1?1:r**this.GR,c=g===1?1:g**this.GG,l=o===1?1:o**this.GB,h=this.MXA*I+this.MXB*c+this.MXC*l,C=this.MYA*I+this.MYB*c+this.MYC*l,B=this.MZA*I+this.MZB*c+this.MZC*l,Q=ne(je,fs);Q[0]=h,Q[1]=C,Q[2]=B;let E=ne(je,ln);mA(this,Ng,af).call(this,this.whitePoint,Q,E);let f=ne(je,fs);mA(this,Rg,sf).call(this,this.blackPoint,E,f);let u=ne(je,ln);mA(this,Gg,nf).call(this,ne(je,Dg),f,u);let d=ne(je,fs);mA(this,Li,O0).call(this,ne(je,bg),u,d),s[a]=mA(this,us,er).call(this,d[0])*255,s[a+1]=mA(this,us,er).call(this,d[1])*255,s[a+2]=mA(this,us,er).call(this,d[2])*255},HA(vt,on,new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296])),HA(vt,In,new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867])),HA(vt,bg,new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252])),HA(vt,Dg,new Float32Array([1,1,1])),HA(vt,cn,new Float32Array(3)),HA(vt,fs,new Float32Array(3)),HA(vt,ln,new Float32Array(3)),HA(vt,kg,((8+16)/116)**3/8);var ds,tr,xs,ir,Cn,eI,AI=class extends JA{constructor(t,i,s){super("Lab",3);HA(this,ds);HA(this,xs);HA(this,Cn);if(!t)throw new v("WhitePoint missing - required for color space Lab");if([this.XW,this.YW,this.ZW]=t,[this.amin,this.amax,this.bmin,this.bmax]=s||[-100,100,-100,100],[this.XB,this.YB,this.ZB]=i||[0,0,0],this.XW<0||this.ZW<0||this.YW!==1)throw new v("Invalid WhitePoint components, no fallback available");(this.XB<0||this.YB<0||this.ZB<0)&&(PA("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0),(this.amin>this.amax||this.bmin>this.bmax)&&(PA("Invalid Range, falling back to defaults"),this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100)}getRgbItem(t,i,s,a){mA(this,Cn,eI).call(this,t,i,!1,s,a)}getRgbBuffer(t,i,s,a,n,r,g){let o=(1<=6/29?t**3:108/841*(t-4/29)},xs=new WeakSet,ir=function(t,i,s,a){return s+t*(a-s)/i},Cn=new WeakSet,eI=function(t,i,s,a,n){let r=t[i],g=t[i+1],o=t[i+2];s!==!1&&(r=mA(this,xs,ir).call(this,r,s,0,100),g=mA(this,xs,ir).call(this,g,s,this.amin,this.amax),o=mA(this,xs,ir).call(this,o,s,this.bmin,this.bmax)),g>this.amax?g=this.amax:gthis.bmax?o=this.bmax:o>>0}function Nn(e,A){return A===1?String.fromCharCode(e[0],e[1]):A===3?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,A+1))}function tt(e,A,t){let i=0;for(let s=t;s>=0;s--)i+=e[s]+A[s],e[s]=i&255,i>>=8}function e0(e,A){let t=1;for(let i=A;i>=0&&t>0;i--)t+=e[i],e[i]=t&255,t>>=8}var K0=16,Vu=19,tI=class{constructor(A){this.buffer=A,this.pos=0,this.end=A.length,this.tmpBuf=new Uint8Array(Vu)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let A=0,t;do{let i=this.readByte();if(i<0)throw new v("unexpected EOF in bcmap");t=!(i&128),A=A<<7|i&127}while(!t);return A}readSigned(){let A=this.readNumber();return A&1?~(A>>>1):A>>>1}readHex(A,t){A.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}readHexNumber(A,t){let i,s=this.tmpBuf,a=0;do{let o=this.readByte();if(o<0)throw new v("unexpected EOF in bcmap");i=!(o&128),s[a++]=o&127}while(!i);let n=t,r=0,g=0;for(;n>=0;){for(;g<8&&s.length>0;)r|=s[--a]<>=8,g-=8}}readHexSigned(A,t){this.readHexNumber(A,t);let i=A[t]&1?255:0,s=0;for(let a=0;a<=t;a++)s=(s&1)<<8|A[a],A[a]=s>>1^i}readString(){let A=this.readNumber(),t=new Array(A);for(let i=0;i=0;){let C=h>>5;if(C===7){switch(h&31){case 0:s.readString();break;case 1:n=s.readString();break}continue}let B=!!(h&16),Q=h&15;if(Q+1>K0)throw new Error("BinaryCMapReader.process: Invalid dataSize.");let E=1,f=s.readNumber();switch(C){case 0:s.readHex(r,Q),s.readHexNumber(g,Q),tt(g,r,Q),t.addCodespaceRange(Q+1,Ze(r,Q),Ze(g,Q));for(let u=1;ua&&(s=a)}else{for(;!this.eof;)this.readBlock(t);s=this.bufferLength}return this.pos=s,this.buffer.subarray(i,s)}async getImageData(A,t=null){if(!this.canAsyncDecodeImageFromBuffer)return this.getBytes(A,t);let i=await this.stream.asyncGetBytes();return this.decodeImage(i,t)}reset(){this.pos=0}makeSubStream(A,t,i=null){if(t===void 0)for(;!this.eof;)this.readBlock();else{let s=A+t;for(;this.bufferLength<=s&&!this.eof;)this.readBlock()}return new Ie(this.buffer,A,t,i)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}},sI=class extends Me{constructor(A,t=null){let i=0;for(let s of A)i+=s instanceof Me?s._rawMinBufferLength:s.length;super(i),this.streams=A,this._onError=t}readBlock(){var r;let A=this.streams;if(A.length===0){this.eof=!0;return}let t=A.shift(),i;try{i=t.getBytes()}catch(g){if(this._onError){this._onError(g,(r=t.dict)==null?void 0:r.objId);return}throw g}let s=this.bufferLength,a=s+i.length;this.ensureBuffer(a).set(i,s),this.bufferLength=a}getBaseStreams(){let A=[];for(let t of this.streams){let i=t.getBaseStreams();i&&A.push(...i)}return A.length>0?A:null}},aI=class extends Me{constructor(A,t){t&&(t*=.8),super(t),this.str=A,this.dict=A.dict,this.input=new Uint8Array(5)}readBlock(){let s=this.str,a=s.getByte();for(;pt(a);)a=s.getByte();if(a===-1||a===126){this.eof=!0;return}let n=this.bufferLength,r,g;if(a===122){for(r=this.ensureBuffer(n+4),g=0;g<4;++g)r[n+g]=0;this.bufferLength+=4}else{let o=this.input;for(o[0]=a,g=1;g<5;++g){for(a=s.getByte();pt(a);)a=s.getByte();if(o[g]=a,a===-1||a===126)break}if(r=this.ensureBuffer(n+g-1),this.bufferLength+=g-1,g<5){for(;g<5;++g)o[g]=33+84;this.eof=!0}let I=0;for(g=0;g<5;++g)I=I*85+(o[g]-33);for(g=3;g>=0;--g)r[n+g]=I&255,I>>=8}}},nI=class extends Me{constructor(A,t){t&&(t*=.5),super(t),this.str=A,this.dict=A.dict,this.firstDigit=-1}readBlock(){let t=this.str.getBytes(8e3);if(!t.length){this.eof=!0;return}let i=t.length+1>>1,s=this.ensureBuffer(this.bufferLength+i),a=this.bufferLength,n=this.firstDigit;for(let r of t){let g;if(r>=48&&r<=57)g=r&15;else if(r>=65&&r<=70||r>=97&&r<=102)g=(r&15)+9;else if(r===62){this.eof=!0;break}else continue;n<0?n=g:(s[a++]=n<<4|g,n=-1)}n>=0&&this.eof&&(s[a++]=n<<4,n=-1),this.firstDigit=n,this.bufferLength=a}},rI=-2,gi=-1,Ii=0,He=1,kA=2,Je=3,Ye=4,gI=5,oI=6,rf=7,gf=8,L1=[[-1,-1],[-1,-1],[7,gf],[7,rf],[6,oI],[6,oI],[6,gI],[6,gI],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA]],H1=[[-1,-1],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],J1=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],Y1=[[-1,-1],[-1,-1],[12,rI],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],K1=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],v1=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]],pr=class{constructor(A,t={}){var s;if(!A||typeof A.next!="function")throw new Error(\'CCITTFaxDecoder - invalid "source" parameter.\');this.source=A,this.eof=!1,this.encoding=t.K||0,this.eoline=t.EndOfLine||!1,this.byteAlign=t.EncodedByteAlign||!1,this.columns=t.Columns||1728,this.rows=t.Rows||0,this.eoblock=(s=t.EndOfBlock)!=null?s:!0,this.black=t.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;let i;for(;(i=this._lookBits(12))===0;)this._eatBits(1);i===1&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}readNextChar(){if(this.eof)return-1;let A=this.refLine,t=this.codingLine,i=this.columns,s,a,n,r;if(this.outputBits===0){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;this.err=!1;let o,I,c;if(this.nextLine2D){for(r=0;t[r]=64);do I+=c=this._getWhiteCode();while(c>=64)}else{do o+=c=this._getWhiteCode();while(c>=64);do I+=c=this._getBlackCode();while(c>=64)}for(this._addPixels(t[this.codingPos]+o,a),t[this.codingPos]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]=64);else do o+=c=this._getWhiteCode();while(c>=64);this._addPixels(t[this.codingPos]+o,a),a^=1}let l=!1;if(this.byteAlign&&(this.inputBits&=-8),!this.eoblock&&this.row===this.rows-1)this.rowsDone=!0;else{if(o=this._lookBits(12),this.eoline)for(;o!==gi&&o!==1;)this._eatBits(1),o=this._lookBits(12);else for(;o===0;)this._eatBits(1),o=this._lookBits(12);o===1?(this._eatBits(12),l=!0):o===gi&&(this.eof=!0)}if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&l&&this.byteAlign){if(o=this._lookBits(12),o===1){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(r=0;r<4;++r)o=this._lookBits(12),o!==1&&PA("bad rtc code: "+o),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if(o=this._lookBits(13),o===gi)return this.eof=!0,-1;if(o>>1===1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(o&1))}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1],this.row++}let g;if(this.outputBits>=8)g=this.codingPos&1?0:255,this.outputBits-=8,this.outputBits===0&&t[this.codingPos]n?(g<<=n,this.codingPos&1||(g|=255>>8-n),this.outputBits-=n,n=0):(g<<=this.outputBits,this.codingPos&1||(g|=255>>8-this.outputBits),n-=this.outputBits,this.outputBits=0,t[this.codingPos]0&&(g<<=n,n=0))}while(n)}return this.black&&(g^=255),g}_addPixels(A,t){let i=this.codingLine,s=this.codingPos;A>i[s]&&(A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A),this.codingPos=s}_addPixelsNeg(A,t){let i=this.codingLine,s=this.codingPos;if(A>i[s])A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A;else if(A0&&A=a){let g=i[r-a];if(g[0]===n)return this._eatBits(n),[!0,g[1],!0]}}return[!1,0,!1]}_getTwoDimCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(7),t=L1[A],(t==null?void 0:t[0])>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,7,L1);if(i[0]&&i[2])return i[1]}return PA("Bad two dim code"),gi}_getWhiteCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(12),A===gi)return 1;if(t=A>>5?J1[A>>3]:H1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,9,J1);if(i[0]||(i=this._findTableCode(11,12,H1),i[0]))return i[1]}return PA("bad white code"),this._eatBits(1),1}_getBlackCode(){let A,t;if(this.eoblock){if(A=this._lookBits(13),A===gi)return 1;if(A>>7?!(A>>9)&&A>>7?t=K1[(A>>1)-64]:t=v1[A>>7]:t=Y1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(2,6,v1);if(i[0]||(i=this._findTableCode(7,12,K1,64),i[0])||(i=this._findTableCode(10,13,Y1),i[0]))return i[1]}return PA("bad black code"),this._eatBits(1),1}_lookBits(A){let t;for(;this.inputBits>16-A;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-A&65535>>16-A}_eatBits(A){(this.inputBits-=A)<0&&(this.inputBits=0)}},II=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,i instanceof F||(i=F.empty);let s={next(){return A.getByte()}};this.ccittFaxDecoder=new pr(s,{K:i.get("K"),EndOfLine:i.get("EndOfLine"),EncodedByteAlign:i.get("EncodedByteAlign"),Columns:i.get("Columns"),Rows:i.get("Rows"),EndOfBlock:i.get("EndOfBlock"),BlackIs1:i.get("BlackIs1")})}readBlock(){for(;!this.eof;){let A=this.ccittFaxDecoder.readNextChar();if(A===-1){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1),this.buffer[this.bufferLength++]=A}}},q1=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),zu=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),$u=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),Ad=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],ed=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5],Yi,X0,wr=class extends Me{constructor(t,i){super(i);HA(this,Yi);this.str=t,this.dict=t.dict;let s=t.getByte(),a=t.getByte();if(s===-1||a===-1)throw new v(`Invalid header in flate stream: ${s}, ${a}`);if((s&15)!==8)throw new v(`Unknown compression method in flate stream: ${s}, ${a}`);if(((s<<8)+a)%31!==0)throw new v(`Bad FCHECK in flate stream: ${s}, ${a}`);if(a&32)throw new v(`FDICT bit set in flate stream: ${s}, ${a}`);this.codeSize=0,this.codeBuf=0}async getImageData(t,i){let s=await this.asyncGetBytes();return(s==null?void 0:s.subarray(0,t))||this.getBytes(t)}async asyncGetBytes(){this.str.reset();let t=this.str.getBytes();try{let{readable:i,writable:s}=new DecompressionStream("deflate"),a=s.getWriter();a.write(t),a.close();let n=[],r=0;for await(let I of i)n.push(I),r+=I.byteLength;let g=new Uint8Array(r),o=0;for(let I of n)g.set(I,o),o+=I.byteLength;return g}catch(i){return this.str=new Ie(t,2,t.length,this.str.dict),this.reset(),null}}get isAsync(){return!0}getBits(t){let i=this.str,s=this.codeSize,a=this.codeBuf,n;for(;s>t,this.codeSize=s-=t,n}getCode(t){let i=this.str,s=t[0],a=t[1],n=this.codeSize,r=this.codeBuf,g;for(;n>16,c=o&65535;if(I<1||n>I,this.codeSize=n-I,c}generateHuffmanTable(t){let i=t.length,s=0,a;for(a=0;as&&(s=t[a]);let n=1<>=1;for(a=l;a>=1,i===0){let I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let c=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(c|=I<<8,(I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let l=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(l|=I<<8,l!==(~c&65535)&&(c!==0||l!==0))throw new v("Bad uncompressed block length in flate stream");this.codeBuf=0,this.codeSize=0;let h=this.bufferLength,C=h+c;if(t=this.ensureBuffer(C),this.bufferLength=C,c===0)a.peekByte()===-1&&(this.eof=!0);else{let B=a.getBytes(c);t.set(B,h),B.length0;)E[C++]=d}n=this.generateHuffmanTable(E.subarray(0,I)),r=this.generateHuffmanTable(E.subarray(I,Q))}else throw new v("Unknown block type in flate stream");t=this.buffer;let g=t?t.length:0,o=this.bufferLength;for(;;){let I=this.getCode(n);if(I<256){o+1>=g&&(t=this.ensureBuffer(o+1),g=t.length),t[o++]=I;continue}if(I===256){this.bufferLength=o;return}I-=257,I=zu[I];let c=I>>16;c>0&&(c=this.getBits(c)),s=(I&65535)+c,I=this.getCode(r),I=$u[I],c=I>>16,c>0&&(c=this.getBits(c));let l=(I&65535)+c;o+s>=g&&(t=this.ensureBuffer(o+s),g=t.length);for(let h=0;h>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}byteIn(){let A=this.data,t=this.bp;A[t]===255?A[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=A[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}readBit(A,t){let i=A[t]>>1,s=A[t]&1,a=td[i],n=a.qe,r,g=this.a-n;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--;while(!(g&32768));return this.a=g,A[t]=i<<1|s,r}},oe=class extends At{constructor(A){super(A,"Jbig2Error")}},lI=class{getContexts(A){return A in this?this[A]:this[A]=new Int8Array(1<<16)}},g0=class{constructor(A,t,i){this.data=A,this.start=t,this.end=i}get decoder(){let A=new cI(this.data,this.start,this.end);return nA(this,"decoder",A)}get contextCache(){let A=new lI;return nA(this,"contextCache",A)}},id=2**31-1,sd=-(2**31);function Xe(e,A,t){let i=e.getContexts(A),s=1;function a(o){let I=0;for(let c=0;c>>0}let n=a(1),r=a(1)?a(1)?a(1)?a(1)?a(1)?a(32)+4436:a(12)+340:a(8)+84:a(6)+20:a(4)+4:a(2),g;return n===0?g=r:r>0&&(g=-r),g>=sd&&g<=id?g:null}function of(e,A,t){let i=e.getContexts("IAID"),s=1;for(let a=0;a=D&&R=S)for(IA=IA<<1&C,u=0;u=0&&tA=0&&(QA=K[_][tA],QA&&(IA|=QA<=e?Z<<=1:Z=Z<<1|x[U][K];for(h=0;h=u||K<0||K>=f?Z<<=1:Z=Z<<1|i[U][K];let AA=p.readBit(m,Z);w[Y]=AA}}return x}function od(e,A,t,i,s,a,n,r,g,o,I,c){if(e&&A)throw new oe("symbol refinement with Huffman is not supported");let l=[],h=0,C=g1(t.length+i),B=I.decoder,Q=I.contextCache,E,f;for(e&&(E=vi(1),f=[],C=Math.max(C,1));l.length1)Z=cf(e,A,w,h,0,AA,1,t.concat(l),C,0,0,1,0,a,g,o,I,0,c);else{let gA=of(Q,B,C),R=Xe(Q,"IARDX",B),_=Xe(Q,"IARDY",B),tA=gA1&&(K=e?f.readBits(E):Xe(m,"IAIT",p));let Z=n*D+K,AA=e?h.symbolIDTable.decode(f):of(m,p,g),gA=A&&(e?f.readBit():Xe(m,"IARI",p)),R=r[AA],_=R[0].length,tA=R.length;if(gA){let N=Xe(m,"IARDW",p),H=Xe(m,"IARDH",p),q=Xe(m,"IARDX",p),T=Xe(m,"IARDY",p);_+=N,tA+=H,R=If(_,tA,C,R,(N>>1)+q,(H>>1)+T,!1,B,Q)}let IA=0;o?c&1?IA=tA-1:U+=tA-1:c>1?U+=_-1:IA=_-1;let QA=Z-(c&1?0:tA-1),V=U-(c&2?_-1:0),lA,EA,fA;if(o)for(lA=0;lA=0;E--)e?U=I1(Y,g,o,!0):U=_g(!1,g,o,t,!1,null,S,C),w[E]=U;let K,Z,AA,gA,R,_,tA,IA,QA;for(K=0;K=0;f--)AA^=w[f][K][Z],gA|=AA<>8,tA=c+K*l-Z*h>>8,_>=0&&_+p<=i&&tA>=0&&tA+m<=s)for(E=0;E=s))for(QA=Q[lA],IA=R[E],f=0;f=0&&V>5&7,g=[n&31],o=A+6;if(n===7){r=le(e,o-1)&536870911,o+=3;let C=r+7>>3;for(g[0]=e[o++];--C>0;)g.push(e[o++])}else if(n===5||n===6)throw new oe("invalid referred-to flags");t.retainBits=g;let I=4;t.number<=256?I=1:t.number<=65536&&(I=2);let c=[],l,h;for(l=0;l>>24&255,f[3]=C.height>>16&255,f[4]=C.height>>8&255,f[5]=C.height&255,l=o,h=e.length;l>2&3,c.huffmanDWSelector=l>>4&3,c.bitmapSizeSelector=l>>6&1,c.aggregationInstancesSelector=l>>7&1,c.bitmapCodingContextUsed=!!(l&256),c.bitmapCodingContextRetained=!!(l&512),c.template=l>>10&3,c.refinementTemplate=l>>12&1,a+=2,!c.huffman){for(o=c.template===0?4:1,r=[],g=0;g>2&3,h.stripSize=1<>4&3,h.transposed=!!(C&64),h.combinationOperator=C>>7&3,h.defaultPixelValue=C>>9&1,h.dsOffset=C<<17>>27,h.refinementTemplate=C>>15&1,h.huffman){let m=we(i,a);a+=2,h.huffmanFS=m&3,h.huffmanDS=m>>2&3,h.huffmanDT=m>>4&3,h.huffmanRefinementDW=m>>6&3,h.huffmanRefinementDH=m>>8&3,h.huffmanRefinementDX=m>>10&3,h.huffmanRefinementDY=m>>12&3,h.huffmanRefinementSizeSelector=!!(m&16384)}if(h.refinement&&!h.refinementTemplate){for(r=[],g=0;g<2;g++)r.push({x:Di(i,a),y:Di(i,a+1)}),a+=2;h.refinementAt=r}h.numberOfSymbolInstances=le(i,a),a+=4,n=[h,t.referredTo,i,a,s];break;case 16:let B={},Q=i[a++];B.mmr=!!(Q&1),B.template=Q>>1&3,B.patternWidth=i[a++],B.patternHeight=i[a++],B.maxPatternIndex=le(i,a),a+=4,n=[B,t.number,i,a,s];break;case 22:case 23:let E={};E.info=sr(i,a),a+=ar;let f=i[a++];E.mmr=!!(f&1),E.template=f>>1&3,E.enableSkip=!!(f&8),E.combinationOperator=f>>4&7,E.defaultPixelValue=f>>7&1,E.gridWidth=le(i,a),a+=4,E.gridHeight=le(i,a),a+=4,E.gridOffsetX=le(i,a)&4294967295,a+=4,E.gridOffsetY=le(i,a)&4294967295,a+=4,E.gridVectorX=we(i,a),a+=2,E.gridVectorY=we(i,a),a+=2,n=[E,t.referredTo,i,a,s];break;case 38:case 39:let u={};u.info=sr(i,a),a+=ar;let d=i[a++];if(u.mmr=!!(d&1),u.template=d>>1&3,u.prediction=!!(d&8),!u.mmr){for(o=u.template===0?4:1,r=[],g=0;g>2&1,x.combinationOperator=p>>3&3,x.requiresBuffer=!!(p&32),x.combinationOperatorOverride=!!(p&64),n=[x];break;case 49:break;case 50:break;case 51:break;case 53:n=[t.number,i,a,s];break;case 62:break;default:throw new oe(`segment type ${t.typeName}(${t.type}) is not implemented`)}let I="on"+t.typeName;I in A&&A[I].apply(A,n)}function Bd(e,A){for(let t=0,i=e.length;t>3,i=new Uint8ClampedArray(t*A.height);A.defaultPixelValue&&i.fill(255),this.buffer=i}drawBitmap(A,t){let i=this.currentPageInfo,s=A.width,a=A.height,n=i.width+7>>3,r=i.combinationOperatorOverride?A.combinationOperator:i.combinationOperator,g=this.buffer,o=128>>(A.x&7),I=A.y*n+(A.x>>3),c,l,h,C;switch(r){case 0:for(c=0;c>=1,h||(h=128,C++);I+=n}break;case 2:for(c=0;c>=1,h||(h=128,C++);I+=n}break;default:throw new oe(`operator ${r} is not supported`)}}onImmediateGenericRegion(A,t,i,s){let a=A.info,n=new g0(t,i,s),r=_g(A.mmr,a.width,a.height,A.template,A.prediction,null,A.at,n);this.drawBitmap(a,r)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(A,t,i,s,a,n){let r,g;A.huffman&&(r=ud(A,i,this.customTables),g=new w0(s,a,n));let o=this.symbols;o||(this.symbols=o={});let I=[];for(let l of i){let h=o[l];h&&I.push(...h)}let c=new g0(s,a,n);o[t]=od(A.huffman,A.refinement,I,A.numberOfNewSymbols,A.numberOfExportedSymbols,r,A.template,A.at,A.refinementTemplate,A.refinementAt,c,g)}onImmediateTextRegion(A,t,i,s,a){let n=A.info,r,g,o=this.symbols,I=[];for(let C of t){let B=o[C];B&&I.push(...B)}let c=g1(I.length);A.huffman&&(g=new w0(i,s,a),r=fd(A,t,this.customTables,I.length,g));let l=new g0(i,s,a),h=cf(A.huffman,A.refinement,n.width,n.height,A.defaultPixelValue,A.numberOfSymbolInstances,A.stripSize,I,c,A.transposed,A.dsOffset,A.referenceCorner,A.combinationOperator,r,A.refinementTemplate,A.refinementAt,l,A.logStripSize,g);this.drawBitmap(n,h)}onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)}onPatternDictionary(A,t,i,s,a){let n=this.patterns;n||(this.patterns=n={});let r=new g0(i,s,a);n[t]=Id(A.mmr,A.patternWidth,A.patternHeight,A.maxPatternIndex,A.template,r)}onImmediateHalftoneRegion(A,t,i,s,a){let n=this.patterns[t[0]],r=A.info,g=new g0(i,s,a),o=cd(A.mmr,n,A.template,r.width,r.height,A.defaultPixelValue,A.enableSkip,A.combinationOperator,A.gridWidth,A.gridHeight,A.gridOffsetX,A.gridOffsetY,A.gridVectorX,A.gridVectorY,g);this.drawBitmap(r,o)}onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion(...arguments)}onTables(A,t,i,s){let a=this.customTables;a||(this.customTables=a={}),a[A]=Ed(t,i,s)}},si=class{constructor(A){A.length===2?(this.isOOB=!0,this.rangeLow=0,this.prefixLength=A[0],this.rangeLength=0,this.prefixCode=A[1],this.isLowerRange=!1):(this.isOOB=!1,this.rangeLow=A[0],this.prefixLength=A[1],this.rangeLength=A[2],this.prefixCode=A[3],this.isLowerRange=A[4]==="lower")}},Ns=class{constructor(A){this.children=[],A?(this.isLeaf=!0,this.rangeLength=A.rangeLength,this.rangeLow=A.rangeLow,this.isLowerRange=A.isLowerRange,this.isOOB=A.isOOB):this.isLeaf=!1}buildTree(A,t){let i=A.prefixCode>>t&1;if(t<=0)this.children[i]=new Ns(A);else{let s=this.children[i];s||(this.children[i]=s=new Ns(null)),s.buildTree(A,t-1)}}decodeNode(A){if(this.isLeaf){if(this.isOOB)return null;let i=A.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-i:i)}let t=this.children[A.readBit()];if(!t)throw new oe("invalid Huffman data");return t.decodeNode(A)}},Gs=class{constructor(A,t){t||this.assignPrefixCodes(A),this.rootNode=new Ns(null);for(let i=0,s=A.length;i0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(A){return this.rootNode.decodeNode(A)}assignPrefixCodes(A){let t=A.length,i=0;for(let I=0;I>1&7)+1,g=(i>>4&7)+1,o=[],I,c,l=s;do I=n.readBits(r),c=n.readBits(g),o.push(new si([l,I,c,0])),l+=1<=this.end)throw new oe("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}let A=this.currentByte>>this.shift&1;return this.shift--,A}readBits(A){let t=0,i;for(i=A-1;i>=0;i--)t|=this.readBit()<=this.end?-1:this.data[this.position++]}};function h0(e,A,t){let i=0;for(let s=0,a=A.length;s=32){let C,B,Q;switch(h){case 32:if(l===0)throw new oe("no previous value in symbol ID table");B=s.readBits(2)+3,C=a[l-1].prefixLength;break;case 33:B=s.readBits(3)+3,C=0;break;case 34:B=s.readBits(7)+11,C=0;break;default:throw new oe("invalid code length in symbol ID table")}for(Q=0;Q>c&1,c--}if(i&&!g)for(let I=0;I<5&&a.readNextChar()!==-1;I++);return n}var CI=class{parseChunks(A){return Qd(A)}parse(A){throw new Error("Not implemented: Jbig2Image.parse")}},BI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);let t=new CI,i=[];if(this.params instanceof F){let n=this.params.get("JBIG2Globals");if(n instanceof KA){let r=n.getBytes();i.push({data:r,start:0,end:r.length})}}i.push({data:A,start:0,end:A.length});let s=t.parseChunks(i),a=s.length;for(let n=0;n>3,c=i&7,l=e.length;t=new Uint32Array(t.buffer);let h=0;for(let C=0;C>2,g=new Uint32Array(e.buffer,A,r);if(Ot.isLittleEndian){for(;n>>24|I<<8|4278190080,t[i+2]=I>>>16|c<<16|4278190080,t[i+3]=c>>>8|4278190080}for(let o=n*4,I=e.length;o>>8|255,t[i+2]=I<<16|c>>>16|255,t[i+3]=c<<8|255}for(let o=n*4,I=e.length;o0&&!e[a-1];)a--;let n=[{children:[],index:0}],r=n[0],g;for(i=0;i0;)r=n.pop();for(r.index++,n.push(r);n.length<=i;)n.push(g={children:[],index:0}),r.children[r.index]=g.children,r=g;t++}i+10)return C--,h>>C&1;if(h=e[A++],h===255){let CA=e[A++];if(CA){if(CA===220&&o){A+=2;let N=we(e,A);if(A+=2,N>0&&N!==t.scanLines)throw new Fa("Found DNL marker (0xFFDC) while parsing scan data",N)}else if(CA===217){if(o){let N=Y*(t.precision===8?8:0);if(N>0&&Math.round(t.scanLines/N)>=5)throw new Fa("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",N)}throw new yr("Found EOI marker (0xFFD9) while parsing scan data")}throw new Gt(`unexpected marker ${(h<<8|CA).toString(16)}`)}}return C=7,h>>>7}function Q(CA){let N=CA;for(;;){switch(N=N[B()],typeof N){case"number":return N;case"object":continue}throw new Gt("invalid huffman sequence")}}function E(CA){let N=0;for(;CA>0;)N=N<<1|B(),CA--;return N}function f(CA){if(CA===1)return B()===1?1:-1;let N=E(CA);return N>=1<>4;if(X===0){if(W<15)break;T+=16;continue}T+=W;let G=Qa[T];CA.blockData[N+G]=f(X),T++}}function d(CA,N){let H=Q(CA.huffmanTableDC),q=H===0?0:f(H)<0){p--;return}let H=a,q=n;for(;H<=q;){let T=Q(CA.huffmanTableAC),$=T&15,X=T>>4;if($===0){if(X<15){p=E(X)+(1<>4,$===0)T<15?(p=E(T)+(1<0){for(gA=0;gA0?"unexpected":"excessive";k(`decodeScan - ${N} MCU data, current marker is: ${V.invalid}`),A=V.offset}if(V.marker>=65488&&V.marker<=65495)A+=2;else break}return A-l}function bd(e,A,t){let i=e.quantizationTable,s=e.blockData,a,n,r,g,o,I,c,l,h,C,B,Q,E,f,u,d,x;if(!i)throw new Gt("missing required Quantization Table.");for(let p=0;p<64;p+=8){if(h=s[A+p],C=s[A+p+1],B=s[A+p+2],Q=s[A+p+3],E=s[A+p+4],f=s[A+p+5],u=s[A+p+6],d=s[A+p+7],h*=i[p],!(C|B|Q|E|f|u|d)){x=v0*h+512>>10,t[p]=x,t[p+1]=x,t[p+2]=x,t[p+3]=x,t[p+4]=x,t[p+5]=x,t[p+6]=x,t[p+7]=x;continue}C*=i[p+1],B*=i[p+2],Q*=i[p+3],E*=i[p+4],f*=i[p+5],u*=i[p+6],d*=i[p+7],a=v0*h+128>>8,n=v0*E+128>>8,r=B,g=u,o=Yn*(C-d)+128>>8,l=Yn*(C+d)+128>>8,I=Q<<4,c=f<<4,a=a+n+1>>1,n=a-n,x=r*Jn+g*Hn+128>>8,r=r*Hn-g*Jn+128>>8,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,t[p]=a+l,t[p+7]=a-l,t[p+1]=n+c,t[p+6]=n-c,t[p+2]=r+I,t[p+5]=r-I,t[p+3]=g+o,t[p+4]=g-o}for(let p=0;p<8;++p){if(h=t[p],C=t[p+8],B=t[p+16],Q=t[p+24],E=t[p+32],f=t[p+40],u=t[p+48],d=t[p+56],!(C|B|Q|E|f|u|d)){x=v0*h+8192>>14,x<-2040?x=0:x>=2024?x=255:x=x+2056>>4,s[A+p]=x,s[A+p+8]=x,s[A+p+16]=x,s[A+p+24]=x,s[A+p+32]=x,s[A+p+40]=x,s[A+p+48]=x,s[A+p+56]=x;continue}a=v0*h+2048>>12,n=v0*E+2048>>12,r=B,g=u,o=Yn*(C-d)+2048>>12,l=Yn*(C+d)+2048>>12,I=Q,c=f,a=(a+n+1>>1)+4112,n=a-n,x=r*Jn+g*Hn+2048>>12,r=r*Hn-g*Jn+2048>>12,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,h=a+l,d=a-l,C=n+c,u=n-c,B=r+I,f=r-I,Q=g+o,E=g-o,h<16?h=0:h>=4080?h=255:h>>=4,C<16?C=0:C>=4080?C=255:C>>=4,B<16?B=0:B>=4080?B=255:B>>=4,Q<16?Q=0:Q>=4080?Q=255:Q>>=4,E<16?E=0:E>=4080?E=255:E>>=4,f<16?f=0:f>=4080?f=255:f>>=4,u<16?u=0:u>=4080?u=255:u>>=4,d<16?d=0:d>=4080?d=255:d>>=4,s[A+p]=h,s[A+p+8]=C,s[A+p+16]=B,s[A+p+24]=Q,s[A+p+32]=E,s[A+p+40]=f,s[A+p+48]=u,s[A+p+56]=d}}function Dd(e,A){let t=A.blocksPerLine,i=A.blocksPerColumn,s=new Int16Array(64);for(let a=0;a=i)return null;let a=we(e,A);if(a>=65472&&a<=65534)return{invalid:null,marker:a,offset:A};let n=we(e,s);for(;!(n>=65472&&n<=65534);){if(++s>=i)return null;n=we(e,s)}return{invalid:a.toString(16),marker:n,offset:s}}var uI=class{constructor({decodeTransform:A=null,colorTransform:t=-1}={}){this._decodeTransform=A,this._colorTransform=t}parse(A,{dnlScanLines:t=null}={}){function i(){let B=we(A,a);a+=2;let Q=a+B-2,E=fI(A,Q,a);E!=null&&E.invalid&&(k("readDataBlock - incorrect length, current marker is: "+E.invalid),Q=E.offset);let f=A.subarray(a,Q);return a+=f.length,f}function s(B){let Q=Math.ceil(B.samplesPerLine/8/B.maxH),E=Math.ceil(B.scanLines/8/B.maxV);for(let f of B.components){let u=Math.ceil(Math.ceil(B.samplesPerLine/8)*f.h/B.maxH),d=Math.ceil(Math.ceil(B.scanLines/8)*f.v/B.maxV),x=Q*f.h,m=64*(E*f.v)*(x+1);f.blockData=new Int16Array(m),f.blocksPerLine=u,f.blocksPerColumn=d}B.mcusPerLine=Q,B.mcusPerColumn=E}let a=0,n=null,r=null,g,o,I=0,c=[],l=[],h=[],C=we(A,a);if(a+=2,C!==65496)throw new Gt("SOI not found");C=we(A,a),a+=2;A:for(;C!==65497;){let B,Q,E;switch(C){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:let f=i();C===65504&&f[0]===74&&f[1]===70&&f[2]===73&&f[3]===70&&f[4]===0&&(n={version:{major:f[5],minor:f[6]},densityUnits:f[7],xDensity:f[8]<<8|f[9],yDensity:f[10]<<8|f[11],thumbWidth:f[12],thumbHeight:f[13],thumbData:f.subarray(14,14+3*f[12]*f[13])}),C===65518&&f[0]===65&&f[1]===100&&f[2]===111&&f[3]===98&&f[4]===101&&(r={version:f[5]<<8|f[6],flags0:f[7]<<8|f[8],flags1:f[9]<<8|f[10],transformCode:f[11]});break;case 65499:let u=we(A,a);a+=2;let d=u+a-2,x;for(;a>4)if(_>>4===1)for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=we(A,a),a+=2;else throw new Gt("DQT - invalid table spec");else for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=A[a++];c[_&15]=tA}break;case 65472:case 65473:case 65474:if(g)throw new Gt("Only single frame JPEGs supported");a+=2,g={},g.extended=C===65473,g.progressive=C===65474,g.precision=A[a++];let p=we(A,a);a+=2,g.scanLines=t||p,g.samplesPerLine=we(A,a),a+=2,g.components=[],g.componentIds={};let m=A[a++],D=0,S=0;for(B=0;B>4,IA=A[a+1]&15;D>4?l:h)[_&15]=wd(tA,QA)}break;case 65501:a+=2,o=we(A,a),a+=2;break;case 65498:let Y=++I===1&&!t;a+=2;let U=A[a++],K=[];for(B=0;B>4],IA.huffmanTableAC=l[QA&15],K.push(IA)}let Z=A[a++],AA=A[a++],gA=A[a++];try{let _=yd(A,a,g,K,o,Z,AA,gA>>4,gA&15,Y);a+=_}catch(_){if(_ instanceof Fa)return k(`${_.message} -- attempting to re-parse the JPEG image.`),this.parse(A,{dnlScanLines:_.scanLines});if(_ instanceof yr){k(`${_.message} -- ignoring the rest of the image data.`);break A}throw _}break;case 65500:a+=4;break;case 65535:A[a]!==255&&a--;break;default:let R=fI(A,a-2,a-3);if(R!=null&&R.invalid){k("JpegImage.parse - unexpected data, current marker is: "+R.invalid),a=R.offset;break}if(!R||a>=A.length-1){k("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break A}throw new Gt("JpegImage.parse - unknown marker: "+C.toString(16))}C=we(A,a),a+=2}if(!g)throw new Gt("JpegImage.parse - no frame data found.");this.width=g.samplesPerLine,this.height=g.scanLines,this.jfif=n,this.adobe=r,this.components=[];for(let B of g.components){let Q=c[B.quantizationId];Q&&(B.quantizationTable=Q),this.components.push({index:B.index,output:Dd(g,B),scaleX:B.h/g.maxH,scaleY:B.v/g.maxV,blocksPerLine:B.blocksPerLine,blocksPerColumn:B.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(A,t,i=!1){let s=this.width/A,a=this.height/t,n,r,g,o,I,c,l,h,C,B,Q=0,E,f=this.components.length,u=A*t*f,d=new Uint8ClampedArray(u),x=new Uint32Array(A),p=4294967288,m;for(l=0;l>8)+D[C+1];return d}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:this.numComponents===3?this._colorTransform===0?!1:!(this.components[0].index===82&&this.components[1].index===71&&this.components[2].index===66):this._colorTransform===1}_convertYccToRgb(A){let t,i,s;for(let a=0,n=A.length;a4)throw new Gt("Unsupported color mode");let n=this._getLinearizedBlockData(A,t,a);if(this.numComponents===1&&(i||s)){let r=n.length*(i?4:3),g=new Uint8ClampedArray(r),o=0;if(i)pd(n,new Uint32Array(g.buffer));else for(let I of n)g[o++]=I,g[o++]=I,g[o++]=I;return g}else if(this.numComponents===3&&this._isColorConversionNeeded){if(i){let r=new Uint8ClampedArray(n.length/3*4);return this._convertYccToRgba(n,r)}return this._convertYccToRgb(n)}else if(this.numComponents===4){if(this._isColorConversionNeeded)return i?this._convertYcckToRgba(n):s?this._convertYcckToRgb(n):this._convertYcckToCmyk(n);if(i)return this._convertCmykToRgba(n);if(s)return this._convertCmykToRgb(n)}return n}},Ra=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);for(let n=0,r=A.length-1;n0&&(A=A.subarray(n));break}let t={decodeTransform:void 0,colorTransform:void 0},i=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(i)){let n=this.dict.get("BPC","BitsPerComponent")||8,r=i.length,g=new Int32Array(r),o=!1,I=(1<{var A;var e=typeof document!="undefined"?(A=document.currentScript)==null?void 0:A.src:void 0;return function(t={}){var i,s=t,a,n,r=new Promise((z,rA)=>{a=z,n=rA}),g=!0,o=!1;s.decode=function(z,{numComponents:rA=4,isIndexedColormap:xA=!1,smaskInData:RA=!1}){let YA=z.length,ae=s._malloc(YA);s.HEAPU8.set(z,ae);let ee=s._jp2_decode(ae,YA,rA>0?rA:0,!!xA,!!RA);if(s._free(ae),ee){let{errorMessages:te}=s;return te?(delete s.errorMessages,te):"Unknown error"}let{imageData:Oe}=s;return s.imageData=null,Oe};var I=Object.assign({},s),c=[],l="./this.program",h=(z,rA)=>{throw rA},C="",B,Q,E;(g||o)&&(o?C=self.location.href:typeof document!="undefined"&&document.currentScript&&(C=document.currentScript.src),e&&(C=e),C.startsWith("blob:")?C="":C=C.substr(0,C.replace(/[?#].*/,"").lastIndexOf("/")+1),B=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.send(null),rA.responseText},o&&(E=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.responseType="arraybuffer",rA.send(null),new Uint8Array(rA.response)}),Q=(z,rA,xA)=>{fetch(z,{credentials:"same-origin"}).then(RA=>RA.ok?RA.arrayBuffer():Promise.reject(new Error(RA.status+" : "+RA.url))).then(rA,xA)});var f=s.print||console.log.bind(console),u=s.printErr||console.error.bind(console);Object.assign(s,I),I=null,s.arguments&&(c=s.arguments),s.thisProgram&&(l=s.thisProgram),s.quit&&(h=s.quit);var d;s.wasmBinary&&(d=s.wasmBinary);function x(z){for(var rA=atob(z),xA=new Uint8Array(rA.length),RA=0;RAz.startsWith(W);function BA(){var z="data:application/octet-stream;base64,AGFzbQEAAAABzgEaYAN/f38Bf2AEf39/fwF/YAF/AGACf38AYAF/AX9gA39/fwBgAn9/AX9gBH9/f38AYAN/fn8BfmAFf39/f38Bf2ACfn8Bf2ACfn8BfmAFf39/f38AYAN/fn8Bf2AAAX9gB39/f39/f38Bf2AJf39/f39/f39/AX9gC39/f39/f39/f39/AX9gBn9/f39/fwF/YAZ/fH9/f38Bf2AIf39/f39/f38AYAh/f39/f39/fwF/YAAAYAZ/f39/f38AYAd/f39/f39/AGACfH8BfAJbDwFhAWEAAgFhAWIAAQFhAWMABQFhAWQAAgFhAWUADAFhAWYABwFhAWcAAwFhAWgABwFhAWkABQFhAWoACQFhAWsABAFhAWwABgFhAW0ABgFhAW4ABAFhAW8AAwPAAb4BBwIFAAYEAAUGBAUBBAwFFAYCAgICAAYQEQQCChICBQIEBwQCDgICDQYCFQMHAAAEAwEWCQkDAAkGAQQEBQUODwEBAwADBgIQBBcYAgcGAwcHAQECAAQZBAYHBA8MAAQCAgIABgAGAQEBAQEBAQEAAAAAAAYDAgICAwMDAwMAAxMIBA4EAAgDAwkECAoLCAAAAQEBAQEBAQENAQAEBAUJDwESEQEAAAYDAwEFBQUFBQUFBQELAQEBAQEBAQEBCgQFAXABbm4FBwEBggKAgAIGCAF/AUGQ2QULBxsGAXACAAFxAEEBcgCYAQFzABABdAEAAXUAlwEJvQEBAEEBC21RzAHCAXNzNqcBnAGZAYsBigGJAYgBhwGGAYUBhAFSgQGAAX9+fXx7enl4d3Z1ywHKAckByAHHAcYBQMUBxAFAQMMBwQHAAb8BvgG9AbwBuwG6AbkBswGoAaYBpQGkAaMBogGhAaABnwGeAZ0BmwGaAUlKTFJIgwFTOFCCAU9FRk4rJ6sBqgGsAbQBuAG1Aa8BqQGtAa4BtgG3AXCwAbEBsgFRlgGVAYwBjgGNAZIBkwGUAZABjwEKkZoOvgGCAgEDfyMAQZAEayIEJAACQCAARQ0AAkACQAJAAkAgAUEBaw4EAAEEAgQLIABBDGohAQwCCyAAQRBqIQEgAEEEaiEADAELIABBFGohASAAQQhqIQALIAEoAgAiBUUNACACRQ0AIAAoAgAhBiAEQQBBgAQQFSIBIAM2AowEIwBBoAFrIgAkACAAIAE2ApQBIABB/wM2ApgBIABBAEGQARAVIgBBfzYCTCAAQeYANgIkIABBfzYCUCAAIABBnwFqNgIsIAAgAEGUAWo2AlQgAUEAOgAAIAAgAiADQecAQegAEGsgAEGgAWokACABQQA6AP8DIAEgBiAFEQMACyAEQZAEaiQAC9ACAQV/IAAEQCAAQQRrIgMoAgAiBCEBIAMhAiAAQQhrKAIAIgAgAEF+cSIARwRAIAIgAGsiAigCBCIBIAIoAggiBTYCCCAFIAE2AgQgACAEaiEBCyADIARqIgAoAgAiAyAAIANqQQRrKAIARwRAIAAoAgQiBCAAKAIIIgA2AgggACAENgIEIAEgA2ohAQsgAiABNgIAIAIgAUF8cWpBBGsgAUEBcjYCACACAn8gAigCAEEIayIAQf8ATQRAIABBA3ZBAWsMAQsgAGchAyAAQR0gA2t2QQRzIANBAnRrQe4AaiAAQf8fTQ0AGkE/IABBHiADa3ZBAnMgA0EBdGtBxwBqIgAgAEE/TxsLIgFBBHQiAEGgxwFqNgIEIAIgAEGoxwFqIgAoAgA2AgggACACNgIAIAIoAgggAjYCBEGozwFBqM8BKQMAQgEgAa2GhDcDAAsLyQIBBH8gAUEANgIAAkAgAkUNACABIAJqIQMCQCACQRBJBEAgACEBDAELAkAgACACaiABTQ0AIAAgA08NACAAIQEMAQsgA0EQayEGIAAgAkFwcSIFaiEBIAMgBWshAwNAIAYgBGsgACAEav0AAAD9DAAAAAAAAAAAAAAAAAAAAAD9DQ8ODQwLCgkIBwYFBAMCAQD9CwAAIARBEGoiBCAFRw0ACyACIAVGDQELAkAgAkEDcSIGRQRAIAUhBAwBC0EAIQAgBSEEA0AgA0EBayIDIAEtAAA6AAAgBEEBaiEEIAFBAWohASAAQQFqIgAgBkcNAAsLIAUgAmtBfEsNAANAIANBAWsgAS0AADoAACADQQJrIAEtAAE6AAAgA0EDayABLQACOgAAIANBBGsiAyABLQADOgAAIAFBBGohASAEQQRqIgQgAkcNAAsLC4AEAQN/IAJBgARPBEAgACABIAIQAiAADwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAswAQF/AkAgAEUNACABRQ0AQQggACABbCIBECUiAARAIABBACABEBUaCyAAIQILIAILEQAgAEUEQEEADwtBCCAAECUL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALJwEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEGsgA0EQaiQAC+gFAQl/IAFFBEBBAA8LAn8gAEUE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ACAEIE5BCmpBAiAFEBpBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAPIAAoArgBRSFnDAELIE5BCmogTkEMakECEBEgTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrD9BABAPDAELQQAhZyAFQQFB7D5BABAPCyBOQRBqJAAgZwsLACAABEAgABAQCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEBQiA0UNACADIAI2AgQgAyABNgIAQQgQFCIBRQRAIAMQEA8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEBALC/oCAQR/AkAgAEUNACAAKAKsKCIBBEAgACgCqCgiAgRAQQAhAQNAIAAoAqwoIAFBA3RqKAIAIgMEQCADEBAgACgCqCghAgsgAUEBaiIBIAJJDQALIAAoAqwoIQELIABBADYCqCggARAQIABBADYCrCgLIAAoArQoIgEEQCABEBAgAEEANgK0KAsgACgC0CsiAQRAIAEQECAAQQA2AtArCyAAKALsKyIBBEAgARAQIABBADYC7CsLIAAoAugrIgEEQCABEBAgAEEANgLoKwsgACgC/CsiAQRAIAEQECAAQQA2AoQsIABCADcC/CsLIAAoAvArIgEEQCAAKAL0KyIDBH9BACECA0AgASgCDCIEBEAgBBAQIAFBADYCDCAAKAL0KyEDCyABQRRqIQEgAkEBaiICIANJDQALIAAoAvArBSABCxAQIABBADYC8CsLIAAoAuQrIgEEQCABEBAgAEEANgLkKwsgACgC3CsiAUUNACABEBAgAEIANwLcKwsLyAcCEX8BfiAAKAIQIghBIE8EQCAAKQMIpw8LAkAgACgCFCIDQQROBEAgACgCACICQQNrKAIAIQEgACADQQRrIgM2AhQgACACQQRrNgIADAELIANBAEwEQAwBCyADQQFxIQ0gACgCACECAkAgA0EBRgRAQRghBAwBCyADQf7///8HcSEJQRghBANAIAAgAkEB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IABBADYCiAEgACgCZBAQIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAQCyAAQdAAakEAQfAAEBUaIAAoAsABEDIgAEEANgLAASAAKALEARAyIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQECABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAQIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEBAgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQECABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEBAgAUEANgIoCyABEBALIABBADYCyAEgACgCSBAhIABBADYCSCAAKAJMECEgAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEBAgAygCHCICRQ0AA0AgAigCBCEBIAIQECADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAQIAIQEAsgAxAQCyAAQQA2AtQBIAAQEAsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCAD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IABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQEyIGRQRAIAJBAUH0MEEAEA9BAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEBBBAAwBCyAGIARBEBATIgM2AgwgA0UEQCACQQFB2hpBABAPIAYQEEEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwt+AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARBlIQAgASgCAEFAags2AgAgAA8LIAEgAkH+B2s2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLSQEBfwJAQQFBLBATIgEEQCABQQA2AhACQCAAQQBMBEAgAUEBQQgQEyIANgIkIABFDQEMAwsgAUEANgIMCyABEBALQQAhAQsgAQuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGU0AEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTHAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsE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AyAAQRh2NgIUIAMgBDYCECADIABBCHZB/wFxNgIcIAMgAEEQdkH/AXE2AhggAkEBQc31ACADQRBqEA8MBwsgBSAITQRAIAYhBAwECyAFIQggBiAFEBciBA0DIAYQECACQQFB/w9BABAPQQAMBwsgBEECcUUEQCACQQFBwg9BABAPIAYQEEEADAcLIAAgBEH/////B3I2AmQgASAHIAVrrSINIAIgASgCKBEIACANUQ0DIAAtAGRBCHFFDQEgAkECQZIcQQAQDwsgBhAQQQEMBQsgAkEBQZIcQQAQDyAGEBBBAAwECyABIAQgBSACEBogBUcEQCACQQFBxBxBABAPIAQQEEEADAQLIAAgBCIGIAUgAiAKKAIEEQEADQALIAQQEEEADAILIAJBAUGiJUEAEA9BAAwBCyAGEBBBAAshDCADQfAAaiQAIAwL5gEBBn8gACgCCEE1IAIQJARAAkAgACgCCCIGKAIAIQMgBigCCCEFAkACQAJ/AkAgAwRAQQEhBCADQQFxIQcgA0EBRw0BQQAMAgsgBkEANgIADAILIANBfnEhAwNAAn9BACAERQ0AGkEAIAAgASACIAUoAgARAABFDQAaIAAgASACIAUoAgQRAABBAEcLIQQgBUEIaiEFIAhBAmoiCCADRw0ACyAERQshAyAHBEAgAw0CIAAgASACIAUoAgARAABBAEchBAsgBkEANgIAIARFDQILIAAoAgAaQQEPCyAGQQA2AgALC0EACwoAIAAoAgAaQQALFAAgACgCACIABEAgACABNgK4AQsLIQAgACgCACABEFMgAEEAOgB8IAAgASgCuEBBAXE2AoABCzIAIAJFBEBBAA8LIAAoAgAgASACIAMQSEUEQCADQQFBqS9BABAPQQAPCyAAIAIgAxBxC2kCAn8BfCMAQRBrIgMkACACBEADQCAAIANBCGoQRCABAn8gAysDCCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAs2AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAuEAQICfwF9IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABAn8gAyoCDCIFi0MAAABPXQRAIAWoDAELQYCAgIB4CzYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQQQESABIAMoAgw2AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtLAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMNgIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSgECfyMAQRBrIgMkACACBEADQCAAIANBCGoQRCABIAMrAwi2OAIAIAFBBGohASAAQQhqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALaAECfyMAQRBrIgMkACACBEADQCADIAAtAAA6AA8gAyAALQABOgAOIAMgAC0AAjoADSADIAAtAAM6AAwgASADKgIMOAIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALTAECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBARIAEgAygCDLM4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMszgCACABQQRqIQEgAEECaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC6oIAg1/AXsjAEEQayIIJAACfyAAKAIIQRBGBEAgACgCnAEgACgCzAFBjCxsagwBCyAAKAIMCyEJAkAgAkUEQCADQQFB8B9BABAPDAELIAAoAkghBkEBIQQgASAIQQhqQQEQESAIKAIIIgVBAk8EQCADQQJBxsgAQQAQDwwBCyACIAVBAWpHBEBBACEEIANBAkHwH0EAEA8MAQsCQCAGKAIQIgNFDQAgCSgC0CshBCADQQhPBEAgA0F4cSEGQQAhAgNAIARBADYCvEMgBEEANgKEOyAEQQA2AswyIARBADYClCogBEEANgLcISAEQQA2AqQZIARBADYC7BAgBEEANgK0CCAEQcDDAGohBCACQQhqIgIgBkcNAAsLIANBB3EiA0UNAEEAIQIDQCAEQQA2ArQIIARBuAhqIQQgAkEBaiICIANHDQALCyAJKALoKyICBH8gAhAQIAlBADYC6CsgCCgCCAUgBQtFBEBBASEEDAELA0AgAUEBaiIBIAhBDGpBARARAkAgCSgCgCxF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KT0ALgAobnVsbCkAKCVkLCVkKSAAJXN9CgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAJIGRlZmF1bHQgdGlsZSB7CgAlcwkgY29tcG9uZW50ICVkIHsKAAkJIGNvbXAgJWQgewoACSBUaWxlIGluZGV4OiB7CgAJIE1hcmtlciBsaXN0OiB7CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAENvZGVzdHJlYW0gaW5mbyBmcm9tIG1haW4gaGVhZGVyOiB7CgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogZmlyc3QgYm94IG11c3QgYmUgSlBFRyAyMDAwIHNpZ25hdHVyZSBib3gKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IHNlY29uZCBib3ggbXVzdCBiZSBmaWxlIHR5cGUgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB3aXRoIEZUWVAgQm94CgBBIG1hcmtlciBJRCB3YXMgZXhwZWN0ZWQgKDB4ZmYtLSkgaW5zdGVhZCBvZiAlLjh4CgAJCSBtY3Q9JXgKAAkJCSBjYmxrc3R5PSUjeAoACQkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgBJbnRlZ2VyIG92ZXJmbG93CgAJIHRkeD0ldSwgdGR5PSV1CgAJIHR3PSV1LCB0aD0ldQoACSB0eDA9JXUsIHR5MD0ldQoASW52YWxpZCBjb21wb25lbnQgaW5kZXg6ICV1CgBTdHJlYW0gdG9vIHNob3J0CgBNYXJrZXIgaGFuZGxlciBmdW5jdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgbWFya2VyIHNlZ21lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjdXJyZW50IHByZWNpbmN0IGNvZGVibG9jayBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1FjZCBvciBTUWNjIGVsZW1lbnQKAEEgQlBDQyBoZWFkZXIgYm94IGlzIGF2YWlsYWJsZSBhbHRob3VnaCBCUEMgZ2l2ZW4gYnkgdGhlIElIRFIgYm94ICglZCkgaW5kaWNhdGUgY29tcG9uZW50cyBiaXQgZGVwdGggaXMgY29uc3RhbnQKAEVycm9yIHdpdGggU0laIG1hcmtlcjogaWxsZWdhbCB0aWxlIG9mZnNldAoASW52YWxpZCBwcmVjaW5jdAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGJhbmQgcHJlY2ludHMKAEZhaWxlZCB0byBkZWNvZGUgYWxsIHVzZWQgY29tcG9uZW50cwoAU2l6ZSBvZiBjb2RlIGJsb2NrIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBTaXplIG9mIHRpbGUgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoAQ29ycnVwdGVkIFBQTSBtYXJrZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGlsZSByZXNvbHV0aW9ucwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGNvbGxlY3Rpb25zCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBXZSBkbyBub3Qgc3VwcG9ydCBST0kgaW4gZGVjb2RpbmcgSFQgY29kZWJsb2NrcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgdW5kZWZpbmVkIHNpemVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aG91dCBzYW1lIG51bWJlciBvZiBpbmRpeGVzCgBJbnZhbGlkIHRpbGVjLT53aW5feHh4IHZhbHVlcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQ29tcG9uZW50IGluZGV4ICV1IHVzZWQgc2V2ZXJhbCB0aW1lcwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUgbm9kZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtY3QgZGF0YSB3aXRoaW4gbXVsdGlwbGUgTUNUIHJlY29yZHMKAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBQcm9ibGVtIHdpdGggcmVhZGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAVW5rbm93biBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCB0bCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBtaCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHRha2UgaW4gY2hhcmdlIFNJWiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFNPVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIFNPUCBtYXJrZXIKAEV4cGVjdGVkIFNPUCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNPIG1hcmtlcgoARXJyb3IgcmVhZGluZyBSR04gbWFya2VyCgBFcnJvciByZWFkaW5nIFBQTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBUTE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIEVQSCBtYXJrZXIKAEV4cGVjdGVkIEVQSCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ1JHIG1hcmtlcgoAVW5rbm93biBwcm9ncmVzc2lvbiBvcmRlciBpbiBDT0QgbWFya2VyCgBVbmtub3duIFNjb2QgdmFsdWUgaW4gQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDRCBtYXJrZXIKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIENPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DQyBtYXJrZXIKAHJlcXVpcmVkIFNJWiBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBDT0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgUUNEIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBmaWxlIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAEVycm9yIHdpdGggSlAgU2lnbmF0dXJlIDogYmFkIG1hZ2ljIG51bWJlcgoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgcHJldmlvdXMgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBQcm9ibGVtIHdpdGggc2VlayBmdW5jdGlvbgoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LCBJbnZhbGlkIGNibGt3L2NibGtoIGNvbWJpbmF0aW9uCgBJbnZhbGlkIG11bHRpcGxlIGNvbXBvbmVudCB0cmFuc2Zvcm1hdGlvbgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIG90aGVyIHRoYW4gYXJyYXkgZGVjb3JyZWxhdGlvbgoAVG9vIGxhcmdlIHZhbHVlIGZvciBOcHBtCgBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgTnBwbQoAYmFkIHBsYWNlZCBqcGVnIGNvZGVzdHJlYW0KAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBUaWxlIHBhcnQgbGVuZ3RoIHNpemUgaW5jb25zaXN0ZW50IHdpdGggc3RyZWFtIGxlbmd0aAoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGRhdGEgc3Bhbm5pbmcKAFdyb25nIGZsYWcKAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAEluY29uc2lzdGVudCBtYXJrZXIgc2l6ZQoASW52YWxpZCBtYXJrZXIgc2l6ZQoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhIG5ldyB2YWxpZGF0aW9uIHByb2NlZHVyZQoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUKAEZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGVzdHJlYW0gaW4gdGhlIEpQMiBmaWxlCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aCBpbmRpeCBzaHVmZmxlCgBDYW5ub3QgYWxsb2NhdGUgVGllciAxIGhhbmRsZQoATm8gZGVjb2RlZCBhcmVhIHBhcmFtZXRlcnMsIHNldCB0aGUgZGVjb2RlZCBhcmVhIHRvIHRoZSB3aG9sZSBpbWFnZQoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWluaXRpYWxpemUgdGhlIHRhZyB0cmVlCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgdHJhbnNmb3JtYXRpb24gZm91bmQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudC4gVW5zdXBwb3J0ZWQgTWl4ZWQgSFQgY29kZS1ibG9jayBzdHlsZSBmb3VuZAoAVGlsZSBZIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFggY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAEltYWdlIGNvb3JkaW5hdGVzIGFib3ZlIElOVF9NQVggYXJlIG5vdCBzdXBwb3J0ZWQKAEpQRUcyMDAwIEhlYWRlciBib3ggbm90IHJlYWQgeWV0LCAnJWMlYyVjJWMnIGJveCB3aWxsIGJlIGlnbm9yZWQKAG9wal9qMmtfbWVyZ2VfcHB0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASWdub3JpbmcgaWhkciBib3guIEZpcnN0IGloZHIgYm94IGFscmVhZHkgcmVhZAoAWnBwdCAldSBhbHJlYWR5IHJlYWQKAFpwcG0gJXUgYWxyZWFkeSByZWFkCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCBzeW50aGV0aXplZCAweEZGIG1hcmtlcnMgcmVhZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgcW50c3R5PSVkCgAlcyBkeD0lZCwgZHk9JWQKAAkJCSByb2lzaGlmdD0lZAoACQkJIG51bWdiaXRzPSVkCgAJCSBudW1sYXllcnM9JWQKACVzIG51bWNvbXBzPSVkCgBvcGpfanAyX2FwcGx5X2NkZWY6IGFjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogY249JWQsIG51bWNvbXBzPSVkCgAJCQkgbnVtcmVzb2x1dGlvbnM9JWQKAAkJIHR5cGU9JSN4LCBwb3M9JWxsaSwgbGVuPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQg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AAABVAAAAQAAAABQAADAUAAAAUgAAAAAAAAQUAAAsFAAAAFIAAABAAAAIFAAAMBQAAABOAAAAAAAADBQAACwUAAAATgAAAEAAABAUAAAwFAAAAEwAAAAAAAAUFAAABBRAAABMAAAAQAAAGBQAAAgUQAAASQAAAAAAABwUAAAMFEAAAEkAAABAAAAgFAAAEBRAAABHAAAAAAAAJBQAABwUQAAARwAAAEAAACgUAAAgFEAAAEWAAAAAAAAkFIAAJBRAAABFgAAAQAAAKBSAACgUQAAAVYAAAAAAADQUAAAwFAAAAFWAAABAAAA4FAAALBQAAABVAAAAAAAAPBQAACwUAAAAVQAAAEAAAAAUQAAwFAAAAFRAAAAAAAAEFEAANBQAAABUQAAAQAAACBRAADgUAAAAUgAAAAAAAAwUQAA8FAAAAFIAAABAAAAQFEAAABRAAABOAAAAAAAAFBRAAAQUQAAATgAAAEAAABgUQAAIFEAAAE0AAAAAAAAcFEAADBRAAABNAAAAQAAAIBRAABAUQAAATAAAAAAAACQUQAAUFEAAAEwAAABAAAAoFEAAGBRAAABKAAAAAAAALBRAABQUQAAASgAAAEAAADAUQAAYFEAAAEkAAAAAAAA0FEAAHBRAAABJAAAAQAAAOBRAACAUQAAASIAAAAAAADwUQAAkFEAAAEiAAABAAAAAFIAAKBRAAABHAAAAAAAABBSAACwUQAAARwAAAEAAAAgUgAAwFEAAAEYAAAAAAAAMFIAANBRAAABGAAAAQAAAEBSAADgUQAAARYAAAAAAABQUgAA8FEAAAEWAAABAAAAYFIAAABSAAABFAAAAAAAAHBSAAAQUgAAARQAAAEAAACAUgAAIFIAAAESAAAAAAAAkFIAADBSAAABEgAAAQAAAKBSAABAUgAAAREAAAAAAACwUgAAUFIAAAERAAABAAAAwFIAAGBSAADBCgAAAAAAANBSAABwUgAAwQoAAAEAAADgUgAAgFIAAMEJAAAAAAAA8FIAAJBSAADBCQAAAQAAAABTAACgUgAAoQgAAAAAAAAQUwAAsFIAAKEIAAABAAAAIFMAAMBSAAAhBQAAAAAAADBTAADQUgAAIQUAAAEAAABAUwAA4FIAAEEEAAAAAAAAUFMAAPBSAABBBAAAAQAAAGBTAAAAUwAAoQIAAAAAAABwUwAAEFMAAKECAAABAAAAgFMAACBTAAAhAgAAAAAAAJBTAAAwUwAAIQIAAAEAAACgUwAAQFMAAEEBAAAAAAAAsFMAAFBTAABBAQAAAQAAAMBTAABgUwAAEQEAAAAAAADQUwAAcFMAABEBAAABAAAA4FMAAIBTAACFAAAAAAAAAPBTAACQUwAAhQAAAAEAAAAAVAAAoFMAAEkAAAAAAAAAEFQAALBTAABJAAAAAQAAACBUAADAUwAAJQAAAAAAAAAwVAAA0FMAACUAAAABAAAAQFQAAOBTAAAVAAAAAAAAAFBUAADwUwAAFQAAAAEAAABgVAAAAFQAAAkAAAAAAAAAcFQAABBUAAAJAAAAAQAAAIBUAAAgVAAABQAAAAAAAACQVAAAMFQAAAUAAAABAAAAoFQAAEBUAAABAAAAAAAAAJBUAABQVAAAAQAAAAEAAACgVAAAYFQAAAFWAAAAAAAAsFQAALBUAAABVgAAAQAAAMBUAADAVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHZuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQZm8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB2bwBCwcBAAEAAQABAEHpvAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGIvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGAwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHAwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAPhiAEGAwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi8IBCwEMAEGXwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxcIBCwEQAEHRwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/8IBCwESAEGLwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwsMBCw4aAAAAGhoaAAAAAAAACQBB88MBCwEUAEH/wwELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrcQBCwEWAEG5xAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB4MQBCwmQbAEAAAAAAAUAQfTEAQsBaQBBjMUBCwpqAAAAawAAAHhoAEGkxQELAQIAQbTFAQsI//////////8AQfjFAQsBBQBBhMYBCwFsAEGcxgELDmoAAABtAAAAiGgAAAAEAEG0xgELAQEAQcTGAQsF/////wo=";return z}var uA;function bA(z){if(z==uA&&d)return new Uint8Array(d);var rA=p(z);if(rA)return rA;if(E)return E(z);throw\'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)\'}function iA(z,rA){var xA,RA=bA(z);xA=new WebAssembly.Module(RA);var YA=new WebAssembly.Instance(xA,rA);return[YA,xA]}function wA(){return{a:du}}function FA(){var z=wA();function rA(RA,YA){return wi=RA.exports,m=wi.p,R(),CA(wi.q),X("wasm-instantiate"),wi}if($("wasm-instantiate"),s.instantiateWasm)try{return s.instantiateWasm(z,rA)}catch(RA){u(`Module.instantiateWasm callback failed with error: ${RA}`),n(RA)}uA||(uA=BA());var xA=iA(uA,z);return rA(xA[0])}var cA=z=>{for(;z.length>0;)z.shift()(s)},yA=s.noExitRuntime||!0,aA=(z,rA,xA)=>w.copyWithin(z,rA,rA+xA);function DA(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA),RA=s.HEAP32.subarray(z,z+rA);xA.set(RA)}function UA(z,rA,xA,RA){z>>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*3),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te>=2,rA>>=2,xA>>=2,RA>>=2;let ae=s.imageData=new Uint8ClampedArray(YA*4),ee=s.HEAP32.subarray(z,z+YA),Oe=s.HEAP32.subarray(rA,rA+YA),te=s.HEAP32.subarray(xA,xA+YA),yi=s.HEAP32.subarray(RA,RA+YA);for(let Xt=0;Xt2147483648,TA=z=>{var rA=m.buffer,xA=(z-rA.byteLength+65535)/65536;try{return m.grow(xA),R(),1}catch(RA){}},LA=z=>{var rA=w.length;z>>>=0;var xA=pA();if(z>xA)return!1;for(var RA=(te,yi)=>te+(yi-te%yi)%yi,YA=1;YA<=4;YA*=2){var ae=rA*(1+.2/YA);ae=Math.min(ae,z+100663296);var ee=Math.min(xA,RA(Math.max(z,ae),65536)),Oe=TA(ee);if(Oe)return!0}return!1},WA={},re=()=>l||"./this.program",De=()=>{if(!De.strings){var z=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",rA={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:z,_:re()};for(var xA in WA)WA[xA]===void 0?delete rA[xA]:rA[xA]=WA[xA];var RA=[];for(var xA in rA)RA.push(`${xA}=${rA[xA]}`);De.strings=RA}return De.strings},Dn=(z,rA)=>{for(var xA=0;xA{var xA=0;return De().forEach((RA,YA)=>{var ae=rA+xA;Z[z+YA*4>>2]=ae,Dn(RA,ae),xA+=RA.length+1}),0},Sn=(z,rA)=>{var xA=De();Z[z>>2]=xA.length;var RA=0;return xA.forEach(YA=>RA+=YA.length+1),Z[rA>>2]=RA,0},co=z=>52,Iu=(z,rA)=>rA+2097152>>>0<4194305-!!z?(z>>>0)+rA*4294967296:NaN;function cu(z,rA,xA,RA,YA){var ae=Iu(rA,xA);return 70}var lu=[null,[],[]],D1=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0,k1=(z,rA,xA)=>{for(var RA=rA+xA,YA=rA;z[YA]&&!(YA>=RA);)++YA;if(YA-rA>16&&z.buffer&&D1)return D1.decode(z.subarray(rA,YA));for(var ae="";rA>10,56320|yi&1023)}}return ae},hu=(z,rA)=>{var xA=lu[z];rA===0||rA===10?((z===1?f:u)(k1(xA,0)),xA.length=0):xA.push(rA)},S1=(z,rA)=>z?k1(w,z,rA):"",Cu=(z,rA,xA,RA)=>{for(var YA=0,ae=0;ae>2],Oe=Z[rA+4>>2];rA+=8;for(var te=0;te>2]=YA,0};function Bu(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA*4),RA=s.HEAP32.subarray(z,z+rA);for(let YA=0;YA>=2,rA>>=2;let RA=s.imageData=new Uint8ClampedArray(xA*4),YA=s.HEAP32.subarray(z,z+xA),ae=s.HEAP32.subarray(rA,rA+xA);for(let ee=0;ee>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*4),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te0||(V(),H>0))return;function z(){Fn||(Fn=!0,s.calledRun=!0,!D&&(lA(),a(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),EA()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),z()},1)):z()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();return F1(),i=s,i}})(),Sd=kd,br=class extends At{constructor(A){super(A,"JpxError")}},ms,hs=class{static decode(A,t){t||(t={}),ne(this,ms)||_s(this,ms,Sd({warn:k}));let i=ne(this,ms).decode(A,t);if(typeof i=="string")throw new br(i);return i}static cleanup(){_s(this,ms,null)}static parseImageProperties(A){let t=A.getByte();for(;t>=0;){let i=t;if(t=A.getByte(),(i<<8|t)===65361){A.skip(4);let a=A.getInt32()>>>0,n=A.getInt32()>>>0,r=A.getInt32()>>>0,g=A.getInt32()>>>0;A.skip(16);let o=A.getUint16();return{width:a-r,height:n-g,bitsPerComponent:8,componentsCount:o}}}throw new br("No size marker found in JPX stream")}};ms=new WeakMap,HA(hs,ms,null);var dI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(A){this.decodeImage(null,A)}decodeImage(A,t){return this.eof?this.buffer:(A||(A=this.bytes),this.buffer=hs.decode(A,t),this.bufferLength=this.buffer.length,this.eof=!0,this.buffer)}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}},Dr=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.cachedData=0,this.bitsCached=0;let s=4096,a={earlyChange:i,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(s),dictionaryLengths:new Uint16Array(s),dictionaryPrevCodes:new Uint16Array(s),currentSequence:new Uint8Array(s),currentSequenceLength:0};for(let n=0;n<256;++n)a.dictionaryValues[n]=n,a.dictionaryLengths[n]=1;this.lzwState=a}readBits(A){let t=this.bitsCached,i=this.cachedData;for(;t>>t&(1<0;if(d<256)B[0]=d,Q=1;else if(d>=258)if(d=0;a--)B[a]=I[n],n=l[n];else B[Q++]=B[0];else if(d===256){h=9,o=258,Q=0;continue}else{this.eof=!0,delete this.lzwState;break}if(x&&(l[o]=C,c[o]=c[C]+1,I[o]=B[0],o++,h=o+g&o+g-1?h:Math.min(Math.log(o+g)/.6931471805599453+1,12)|0),C=d,E+=Q,i15))throw new v(`Unsupported predictor: ${s}`);this.readBlock=s===2?this.readBlockTiff:this.readBlockPng,this.str=A,this.dict=A.dict;let a=this.colors=i.get("Colors")||1,n=this.bits=i.get("BPC","BitsPerComponent")||8,r=this.columns=i.get("Columns")||1;return this.pixBytes=a*n+7>>3,this.rowBytes=r*a*n+7>>3,this}readBlockTiff(){let A=this.rowBytes,t=this.bufferLength,i=this.ensureBuffer(t+A),s=this.bits,a=this.colors,n=this.str.getBytes(A);if(this.eof=!n.length,this.eof)return;let r=0,g=0,o=0,I=0,c=t,l;if(s===1&&a===1)for(l=0;l>1,h^=h>>2,h^=h>>4,r=(h&1)<<7,i[c++]=h}else if(s===8){for(l=0;l>8&255,i[c++]=C&255}}else{let h=new Uint8Array(a+1),C=(1<>o-s)&C,o-=s,g=g<=8&&(i[Q++]=g>>I-8&255,I-=8);I>0&&(i[Q++]=(g<<8-I)+(r&(1<<8-I)-1))}this.bufferLength+=A}readBlockPng(){let A=this.rowBytes,t=this.pixBytes,i=this.str.getByte(),s=this.str.getBytes(A);if(this.eof=!s.length,this.eof)return;let a=this.bufferLength,n=this.ensureBuffer(a+A),r=n.subarray(a-A,a);r.length===0&&(r=new Uint8Array(A));let g,o=a,I,c;switch(i){case 0:for(g=0;g>1)+s[g];for(;g>1)+s[g]&255,o++;break;case 4:for(g=0;g0){let a=this.str.getBytes(s);t.set(a,i),i+=s}}else{s=257-s;let a=A[1];t=this.ensureBuffer(i+s+1);for(let n=0;n>")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M)){PA("Malformed dictionary: key must be a name object"),this.shift();continue}let a=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s.set(a,this.getObj(A))}if(this.buf1===Ge){if(this.recoveryMode)return s;throw new Sa("End of file inside dictionary.")}return Ne(this.buf2,"stream")?this.allowStreams?this.makeStream(s,A):s:(this.shift(),s);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&Ne(this.buf2,"R")){let i=oA.get(t,this.buf1);return this.shift(),this.shift(),i}return t}return typeof t=="string"&&A?A.decryptString(t):t}findDefaultInlineStreamEnd(A){let{knownCommands:g}=this.lexer,o=A.pos,I=15,c=0,l,h;for(;(l=A.getByte())!==-1;)if(c===0)c=l===69?1:0;else if(c===1)c=l===73?2:0;else if(l===32||l===10||l===13){h=A.pos;let B=A.peekBytes(I),Q=B.length;if(Q===0)break;for(let u=0;u127)){c=0;break}if(c!==2)continue;if(!g){k("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}let E=new dt(new Ie(B.slice()),g);E._hexStringWarn=()=>{};let f=0;for(;;){let u=E.getObj();if(u===Ge){c=0;break}if(u instanceof fe){let d=g[u.cmd];if(d){if(d.variableArgs?f<=d.numArgs:f===d.numArgs)break}else{c=0;break}f=0;continue}f++}if(c===2)break}else c=0;l===-1&&(k("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),h&&(k(\'... trying to recover by using the last "EI" occurrence.\'),A.skip(-(A.pos-h))));let C=4;return A.skip(-C),l=A.peekByte(),A.skip(C),pt(l)||C--,A.pos-C-o}findDCTDecodeInlineStreamEnd(A){let t=A.pos,i=!1,s,a;for(;(s=A.getByte())!==-1;)if(s===255){switch(A.getByte()){case 0:break;case 255:A.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:a=A.getUint16(),a>2?A.skip(a-2):A.skip(-2);break}if(i)break}let n=A.pos-t;return s===-1?(k("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCII85DecodeInlineStreamEnd(A){let s=A.pos,a;for(;(a=A.getByte())!==-1;)if(a===126){let r=A.pos;for(a=A.peekByte();pt(a);)A.skip(),a=A.peekByte();if(a===62){A.skip();break}if(A.pos>r){let g=A.peekBytes(2);if(g[0]===69&&g[1]===73)break}}let n=A.pos-s;return a===-1?(k("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCIIHexDecodeInlineStreamEnd(A){let i=A.pos,s;for(;(s=A.getByte())!==-1&&s!==62;);let a=A.pos-i;return s===-1?(k("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-a),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),a)}inlineStreamSkipEI(A){let s=0,a;for(;(a=A.getByte())!==-1;)if(s===0)s=a===69?1:0;else if(s===1)s=a===73?2:0;else if(s===2)break}makeInlineImage(A){let t=this.lexer,i=t.stream,s=Object.create(null),a;for(;!Ne(this.buf1,"ID")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M))throw new v("Dictionary key must be a name object");let h=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s[h]=this.getObj(A)}t.beginInlineImagePos!==-1&&(a=i.pos-t.beginInlineImagePos);let n=this.xref.fetchIfRef(s.F||s.Filter),r;if(n instanceof M)r=n.name;else if(Array.isArray(n)){let h=this.xref.fetchIfRef(n[0]);h instanceof M&&(r=h.name)}let g=i.pos,o;switch(r){case"DCT":case"DCTDecode":o=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":o=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":o=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:o=this.findDefaultInlineStreamEnd(i)}let I;if(o0){let h=i.pos;i.pos=t.beginInlineImagePos,I=Rd(i.getBytes(a+o)),i.pos=h;let C=this.imageCache[I];if(C!==void 0)return this.buf2=fe.get("EI"),this.shift(),C.reset(),C}let c=new F(this.xref);for(let h in s)c.set(h,s[h]);let l=i.makeSubStream(g,o,c);return A&&(l=A.createStream(l,o)),l=this.filter(l,c,o),l.dict=c,I!==void 0&&(l.cacheKey=`inline_img_${++this._imageId}`,this.imageCache[I]=l),this.buf2=fe.get("EI"),this.shift(),l}makeStream(A,t){let i=this.lexer,s=i.stream;i.skipToNextLine();let a=s.pos-1,n=A.get("Length");if(Number.isInteger(n)||(PA(`Bad length "${n&&n.toString()}" in stream.`),n=0),s.pos=a+n,i.nextChar(),this.tryShift()&&Ne(this.buf2,"endstream"))this.shift();else{if(n=mA(this,Ug,lf).call(this,a),n<0)throw new v("Missing endstream command.");i.nextChar(),this.shift(),this.shift()}return this.shift(),s=s.makeSubStream(a,n,A),t&&(s=t.createStream(s,n)),s=this.filter(s,A,n),s.dict=A,s}filter(A,t,i){let s=t.get("F","Filter"),a=t.get("DP","DecodeParms");if(s instanceof M)return Array.isArray(a)&&k("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(A,s.name,i,a);let n=i;if(Array.isArray(s)){let r=s,g=a;for(let o=0,I=r.length;o=n){let h=!1;for(let C of r){let B=C.length,Q=0;for(;Q=g){h=!0;break}if(Q>=B){let E=o[c+l+Q];pt(E)&&(PA(`Found "${Qt([...a,...C])}" when searching for endstream command.`),h=!0);break}}if(h)return t.pos+=c,t.pos-A}c++}t.pos+=I}return-1};var q0=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,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,2,0,2,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,2,0,2,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,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];function Qo(e){return e>=48&&e<=57?e&15:e>=65&&e<=70||e>=97&&e<=102?(e&15)+9:-1}var dt=class{constructor(A,t=null){this.stream=A,this.nextChar(),this.strBuf=[],this.knownCommands=t,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let A=this.currentChar,t=!1,i=0,s=1;if(A===45?(s=-1,A=this.nextChar(),A===45&&(A=this.nextChar())):A===43&&(A=this.nextChar()),A===10||A===13)do A=this.nextChar();while(A===10||A===13);if(A===46&&(i=10,A=this.nextChar()),A<48||A>57){let g=`Invalid number: ${String.fromCharCode(A)} (charCode ${A})`;if(pt(A)||A===-1)return PA(`Lexer.getNumber - "${g}".`),0;throw new v(g)}let a=A-48,n=0,r=1;for(;(A=this.nextChar())>=0;)if(A>=48&&A<=57){let g=A-48;t?n=n*10+g:(i!==0&&(i*=10),a=a*10+g)}else if(A===46)if(i===0)i=1;else break;else if(A===45)k("Badly formatted number: minus sign in the middle");else if(A===69||A===101){if(A=this.peekChar(),A===43||A===45)r=A===45?-1:1,this.nextChar();else if(A<48||A>57)break;t=!0}else break;return i!==0&&(a/=i),t&&(a*=10**(r*n)),s*a}getString(){let A=1,t=!1,i=this.strBuf;i.length=0;let s=this.nextChar();for(;;){let a=!1;switch(s|0){case-1:k("Unterminated string"),t=!0;break;case 40:++A,i.push("(");break;case 41:--A===0?(this.nextChar(),t=!0):i.push(")");break;case 92:switch(s=this.nextChar(),s){case-1:k("Unterminated string"),t=!0;break;case 110:i.push(`\n`);break;case 114:i.push("\\r");break;case 116:i.push(" ");break;case 98:i.push("\\b");break;case 102:i.push("\\f");break;case 92:case 40:case 41:i.push(String.fromCharCode(s));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let n=s&15;s=this.nextChar(),a=!0,s>=48&&s<=55&&(n=(n<<3)+(s&15),s=this.nextChar(),s>=48&&s<=55&&(a=!1,n=(n<<3)+(s&15))),i.push(String.fromCharCode(n));break;case 13:this.peekChar()===10&&this.nextChar();break;case 10:break;default:i.push(String.fromCharCode(s));break}break;default:i.push(String.fromCharCode(s));break}if(t)break;a||(s=this.nextChar())}return i.join("")}getName(){let A,t,i=this.strBuf;for(i.length=0;(A=this.nextChar())>=0&&!q0[A];)if(A===35){if(A=this.nextChar(),q0[A]){k("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),i.push("#");break}let s=Qo(A);if(s!==-1){t=A,A=this.nextChar();let a=Qo(A);if(a===-1){if(k(`Lexer_getName: Illegal digit (${String.fromCharCode(A)}) in hexadecimal number.`),i.push("#",String.fromCharCode(t)),q0[A])break;i.push(String.fromCharCode(A));continue}i.push(String.fromCharCode(s<<4|a))}else i.push("#",String.fromCharCode(A))}else i.push(String.fromCharCode(A));return i.length>127&&k(`Name token is longer than allowed by the spec: ${i.length}`),M.get(i.join(""))}_hexStringWarn(A){if(this._hexStringNumWarn++===5){k("getHexString - ignoring additional invalid characters.");return}this._hexStringNumWarn>5||k(`getHexString - ignoring invalid character: ${A}`)}getHexString(){let A=this.strBuf;A.length=0;let t=this.currentChar,i=-1,s=-1;for(this._hexStringNumWarn=0;;)if(t<0){k("Unterminated hex string");break}else if(t===62){this.nextChar();break}else if(q0[t]===1){t=this.nextChar();continue}else s=Qo(t),s===-1?this._hexStringWarn(t):i===-1?i=s:(A.push(String.fromCharCode(i<<4|s)),i=-1),t=this.nextChar();return i!==-1&&A.push(String.fromCharCode(i<<4)),A.join("")}getObj(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(q0[t]!==1)break;t=this.nextChar()}switch(t|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),fe.get("[");case 93:return this.nextChar(),fe.get("]");case 60:return t=this.nextChar(),t===60?(this.nextChar(),fe.get("<<")):this.getHexString();case 62:return t=this.nextChar(),t===62?(this.nextChar(),fe.get(">>")):fe.get(">");case 123:return this.nextChar(),fe.get("{");case 125:return this.nextChar(),fe.get("}");case 41:throw this.nextChar(),new v(`Illegal character: ${t}`)}let i=String.fromCharCode(t);if(t<32||t>127){let n=this.peekChar();if(n>=32&&n<=127)return this.nextChar(),fe.get(i)}let s=this.knownCommands,a=(s==null?void 0:s[i])!==void 0;for(;(t=this.nextChar())>=0&&!q0[t];){let n=i+String.fromCharCode(t);if(a&&s[n]===void 0)break;if(i.length===128)throw new v(`Command token too long: ${i.length}`);i=n,a=(s==null?void 0:s[i])!==void 0}return i==="true"?!0:i==="false"?!1:i==="null"?null:(i==="BI"&&(this.beginInlineImagePos=this.stream.pos),fe.get(i))}skipToNextLine(){let A=this.currentChar;for(;A>=0;){if(A===13){A=this.nextChar(),A===10&&this.nextChar();break}else if(A===10){this.nextChar();break}A=this.nextChar()}}},mI=class{static create(A){function t(c,l,h=!1){let C=c.get(l);if(Number.isInteger(C)&&(h?C>=0:C>0))return C;throw new Error(`The "${l}" parameter in the linearization dictionary is invalid.`)}function i(c){let l=c.get("H"),h;if(Array.isArray(l)&&((h=l.length)===2||h===4)){for(let C=0;C0))throw new Error(`Hint (${C}) in the linearization dictionary is invalid.`)}return l}throw new Error("Hint array in the linearization dictionary is invalid.")}let s=new zt({lexer:new dt(A),xref:null}),a=s.getObj(),n=s.getObj(),r=s.getObj(),g=s.getObj(),o,I;if(Number.isInteger(a)&&Number.isInteger(n)&&Ne(r,"obj")&&g instanceof F&&typeof(o=g.get("Linearized"))=="number"&&o>0){if((I=t(g,"L"))!==A.length)throw new Error(\'The "L" parameter in the linearization dictionary does not equal the stream length.\')}else return null;return{length:I,hints:i(g),objectNumberFirst:t(g,"O"),endFirst:t(g,"E"),numPages:t(g,"N"),mainXRefEntriesOffset:t(g,"T"),pageFirst:g.has("P")?t(g,"P",!0):0}}},Nd=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],Eo=2**24-1,Na=class{constructor(A=!1){this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=A}addCodespaceRange(A,t,i){this.codespaceRanges[A-1].push(t,i),this.numCodespaceRanges++}mapCidRange(A,t,i){if(t-A>Eo)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;A<=t;)this._map[A++]=i++}mapBfRange(A,t,i){if(t-A>Eo)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");let s=i.length-1;for(;A<=t;){this._map[A++]=i;let a=i.charCodeAt(s)+1;if(a>255){i=i.substring(0,s-1)+String.fromCharCode(i.charCodeAt(s-1)+1)+"\\0";continue}i=i.substring(0,s)+String.fromCharCode(a)}}mapBfRangeToArray(A,t,i){if(t-A>Eo)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");let s=i.length,a=0;for(;A<=t&&a>>0;let g=a[n];for(let o=0,I=g.length;o=c&&s<=l){i.charcode=s,i.length=n+1;return}}}i.charcode=0,i.length=1}getCharCodeLength(A){let t=this.codespaceRanges;for(let i=0,s=t.length;i=g&&A<=o)return i+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if(!(this.name==="Identity-H"||this.name==="Identity-V")||this._map.length!==65536)return!1;for(let A=0;A<65536;A++)if(this._map[A]!==A)return!1;return!0}},Wi=class extends Na{constructor(A,t){super(),this.vertical=A,this.addCodespaceRange(t,0,65535)}mapCidRange(A,t,i){OA("should not call mapCidRange")}mapBfRange(A,t,i){OA("should not call mapBfRange")}mapBfRangeToArray(A,t,i){OA("should not call mapBfRangeToArray")}mapOne(A,t){OA("should not call mapCidOne")}lookup(A){return Number.isInteger(A)&&A<=65535?A:void 0}contains(A){return Number.isInteger(A)&&A<=65535}forEach(A){for(let t=0;t<=65535;t++)A(t,t)}charCodeOf(A){return Number.isInteger(A)&&A<=65535?A:-1}getMap(){let A=new Array(65536);for(let t=0;t<=65535;t++)A[t]=t;return A}get length(){return 65536}get isIdentityCMap(){OA("should not access .isIdentityCMap")}};function ji(e){let A=0;for(let t=0;t>>0}function y0(e){if(typeof e!="string")throw new v("Malformed CMap: expected string.")}function hf(e){if(!Number.isInteger(e))throw new v("Malformed CMap: expected int.")}function Gd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfchar"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=t;e.mapOne(i,s)}}function Ud(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);if(t=A.getObj(),Number.isInteger(t)||typeof t=="string"){let a=Number.isInteger(t)?String.fromCharCode(t):t;e.mapBfRange(i,s,a)}else if(Ne(t,"[")){t=A.getObj();let a=[];for(;!Ne(t,"]")&&t!==Ge;)a.push(t),t=A.getObj();e.mapBfRangeToArray(i,s,a)}else break}throw new v("Invalid bf range.")}function Md(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidchar"))return;y0(t);let i=ji(t);t=A.getObj(),hf(t);let s=t;e.mapOne(i,s)}}function Ld(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);t=A.getObj(),hf(t);let a=t;e.mapCidRange(i,s,a)}}function Hd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcodespacerange"))return;if(typeof t!="string")break;let i=ji(t);if(t=A.getObj(),typeof t!="string")break;let s=ji(t);e.addCodespaceRange(t.length,i,s)}throw new v("Invalid codespace range.")}function Jd(e,A){let t=A.getObj();Number.isInteger(t)&&(e.vertical=!!t)}function Yd(e,A){let t=A.getObj();t instanceof M&&(e.name=t.name)}async function Cf(e,A,t,i){let s,a;A:for(;;)try{let n=A.getObj();if(n===Ge)break;if(n instanceof M)n.name==="WMode"?Jd(e,A):n.name==="CMapName"&&Yd(e,A),s=n;else if(n instanceof fe)switch(n.cmd){case"endcmap":break A;case"usecmap":s instanceof M&&(a=s.name);break;case"begincodespacerange":Hd(e,A);break;case"beginbfchar":Gd(e,A);break;case"begincidchar":Md(e,A);break;case"beginbfrange":Ud(e,A);break;case"begincidrange":Ld(e,A);break}}catch(n){if(n instanceof ge)throw n;k("Invalid cMap data: "+n);continue}return!i&&a&&(i=a),i?Bf(e,t,i):e}async function Bf(e,A,t){if(e.useCMap=await pI(t,A),e.numCodespaceRanges===0){let i=e.useCMap.codespaceRanges;for(let s=0;sBf(s,A,a));if(i===Br.NONE){let a=new dt(new Ie(t));return Cf(s,a,A,null)}throw new Error(`Invalid CMap "compressionType" value: ${i}`)}var es=class{static async create({encoding:A,fetchBuiltInCMap:t,useCMap:i}){if(A instanceof M)return pI(A.name,t);if(A instanceof KA){let s=await Cf(new Na,new dt(A),t,i);return s.isIdentityCMap?pI(s.name,t):s}throw new Error("Encoding required.")}},Kd=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],vd=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],qd=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Qf=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Td=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],c1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],fi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],Ga=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],l1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],h1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function Ua(e){switch(e){case"WinAnsiEncoding":return Ga;case"StandardEncoding":return fi;case"MacRomanEncoding":return c1;case"SymbolSetEncoding":return l1;case"ZapfDingbatsEncoding":return h1;case"ExpertEncoding":return Qf;case"MacExpertEncoding":return Td;default:return null}}var Pd=10,nr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Kn=391,T0=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],Wd=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]+e[A-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]-e[A-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]/e[A-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,A){e[A-1]=-e[A-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]*e[A-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}],Ma=class{constructor(A,t,i){this.bytes=A.getBytes(),this.properties=t,this.seacAnalysisEnabled=!!i}parse(){let A=this.properties,t=new Sr;this.cff=t;let i=this.parseHeader(),s=this.parseIndex(i.endPos),a=this.parseIndex(s.endPos),n=this.parseIndex(a.endPos),r=this.parseIndex(n.endPos),g=this.parseDict(a.obj.get(0)),o=this.createDict(b0,g,t.strings);t.header=i.obj,t.names=this.parseNameIndex(s.obj),t.strings=this.parseStringIndex(n.obj),t.topDict=o,t.globalSubrIndex=r.obj,this.parsePrivateDict(t.topDict),t.isCIDFont=o.hasName("ROS");let I=o.getByName("CharStrings"),c=this.parseIndex(I).obj,l=o.getByName("FontMatrix");l&&(A.fontMatrix=l);let h=o.getByName("FontBBox");h&&(A.ascent=Math.max(h[3],h[1]),A.descent=Math.min(h[1],h[3]),A.ascentScaled=!0);let C,B;if(t.isCIDFont){let E=this.parseIndex(o.getByName("FDArray")).obj;for(let f=0,u=E.count;f=t)throw new v("Invalid CFF header");i!==0&&(PA("cff data is shifted"),A=A.subarray(i),this.bytes=A);let s=A[0],a=A[1],n=A[2],r=A[3];return{obj:new Fr(s,a,n,r),endPos:n}}parseDict(A){let t=0;function i(){let g=A[t++];return g===30?s():g===28?(g=A[t++],g=(g<<24|A[t++]<<16)>>16,g):g===29?(g=A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g):g>=32&&g<=246?g-139:g>=247&&g<=250?(g-247)*256+A[t++]+108:g>=251&&g<=254?-((g-251)*256)-A[t++]-108:(k(\'CFFParser_parseDict: "\'+g+\'" is a reserved command.\'),NaN)}function s(){let g="",I=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],c=A.length;for(;t>4,C=l&15;if(h===15||(g+=I[h],C===15))break;g+=I[C]}return parseFloat(g)}let a=[],n=[];t=0;let r=A.length;for(;tPd)return!1;let a=A.stackSize,n=A.stack,r=t.length;for(let g=0;g>16,g+=2,a++;else if(o===14){if(a>=4&&(a-=4,this.seacAnalysisEnabled))return A.seac=n.slice(a,a+4),!1;I=T0[o]}else if(o>=32&&o<=246)n[a]=o-139,a++;else if(o>=247&&o<=254)n[a]=o<251?(o-247<<8)+t[g]+108:-(o-251<<8)-t[g]-108,g++,a++;else if(o===255)n[a]=(t[g]<<24|t[g+1]<<16|t[g+2]<<8|t[g+3])/65536,g+=4,a++;else if(o===19||o===20){if(A.hints+=a>>1,A.hints===0){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}g+=A.hints+7>>3,a%=2,I=T0[o]}else if(o===10||o===29){let c=o===10?i:s;if(!c)return I=T0[o],k("Missing subrsIndex for "+I.id),!1;let l=32768;c.count<1240?l=107:c.count<33900&&(l=1131);let h=n[--a]+l;if(h<0||h>=c.count||isNaN(h))return I=T0[o],k("Out of bounds subrIndex for "+I.id),!1;if(A.stackSize=a,A.callDepth++,!this.parseCharString(A,c.get(h),i,s))return!1;A.callDepth--,a=A.stackSize;continue}else{if(o===11)return A.stackSize=a,!0;if(o===0&&g===t.length)t[g-1]=14,I=T0[14];else if(o===9){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}else I=T0[o]}if(I){if(I.stem&&(A.hints+=a>>1,o===3||o===23?A.hasVStems=!0:A.hasVStems&&(o===1||o===18)&&(k("CFF stem hints are in wrong order"),t[g-1]=o===1?3:23)),"min"in I&&!A.undefStack&&a=2&&I.stem?a%=2:a>1&&k("Found too many parameters for stack-clearing command"),a>0&&(A.width=n[a-1])),"stackDelta"in I?("stackFn"in I&&I.stackFn(n,a),a+=I.stackDelta):I.stackClearing?a=0:I.resetStack?(a=0,A.undefStack=!1):I.undefStack&&(a=0,A.undefStack=!0,A.firstStackClearing=!1)}}return r=a.length&&(k("Invalid fd index for glyph index."),h=!1),h&&(B=a[Q].privateDict,C=B.subrsIndex)}else t&&(C=t);if(h&&(h=this.parseCharString(l,c,C,i)),l.width!==null){let Q=B.getByName("nominalWidthX");g[I]=Q+l.width}else{let Q=B.getByName("defaultWidthX");g[I]=Q}l.seac!==null&&(r[I]=l.seac),h||A.set(I,new Uint8Array([14]))}return{charStrings:A,seacs:r,widths:g}}emptyPrivateDictionary(A){let t=this.createDict(D0,[],A.strings);A.setByKey(18,[0,0]),A.privateDict=t}parsePrivateDict(A){if(!A.hasName("Private")){this.emptyPrivateDictionary(A);return}let t=A.getByName("Private");if(!Array.isArray(t)||t.length!==2){A.removeByName("Private");return}let i=t[0],s=t[1];if(i===0||s>=this.bytes.length){this.emptyPrivateDictionary(A);return}let a=s+i,n=this.bytes.subarray(s,a),r=this.parseDict(n),g=this.createDict(D0,r,A.strings);if(A.privateDict=g,g.getByName("ExpansionFactor")===0&&g.setByName("ExpansionFactor",.06),!g.getByName("Subrs"))return;let o=g.getByName("Subrs"),I=s+o;if(o===0||I>=this.bytes.length){this.emptyPrivateDictionary(A);return}let c=this.parseIndex(I);g.subrsIndex=c.obj}parseCharsets(A,t,i,s){if(A===0)return new C0(!0,fo.ISO_ADOBE,Kd);if(A===1)return new C0(!0,fo.EXPERT,vd);if(A===2)return new C0(!0,fo.EXPERT_SUBSET,qd);let a=this.bytes,n=A,r=a[A++],g=[s?0:".notdef"],o,I,c;switch(t-=1,r){case 0:for(c=0;c=65535){k("Not enough space in charstrings to duplicate first glyph.");return}let A=this.charStrings.get(0);this.charStrings.add(A),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(A){return A<0||A>=this.charStrings.count?!1:this.charStrings.get(A).length>0}},Fr=class{constructor(A,t,i,s){this.major=A,this.minor=t,this.hdrSize=i,this.offSize=s}},La=class{constructor(){this.strings=[]}get(A){return A>=0&&A<=Kn-1?nr[A]:A-Kn<=this.strings.length?this.strings[A-Kn]:nr[0]}getSID(A){let t=nr.indexOf(A);return t!==-1?t:(t=this.strings.indexOf(A),t!==-1?t+Kn:-1)}add(A){this.strings.push(A)}get count(){return this.strings.length}},ai=class{constructor(){this.objects=[],this.length=0}add(A){this.length+=A.length,this.objects.push(A)}set(A,t){this.length+=t.length-this.objects[A].length,this.objects[A]=t}get(A){return this.objects[A]}get count(){return this.objects.length}},Rr=class{constructor(A,t){this.keyToNameMap=A.keyToNameMap,this.nameToKeyMap=A.nameToKeyMap,this.defaults=A.defaults,this.types=A.types,this.opcodes=A.opcodes,this.order=A.order,this.strings=t,this.values=Object.create(null)}setByKey(A,t){if(!(A in this.keyToNameMap))return!1;if(t.length===0)return!0;for(let s of t)if(isNaN(s))return k(`Invalid CFFDict value: "${t}" for key "${A}".`),!0;let i=this.types[A];return(i==="num"||i==="sid"||i==="offset")&&(t=t[0]),this.values[A]=t,!0}setByName(A,t){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name "${A}"`);this.values[this.nameToKeyMap[A]]=t}hasName(A){return this.nameToKeyMap[A]in this.values}getByName(A){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name ${A}"`);let t=this.nameToKeyMap[A];return t in this.values?this.values[t]:this.defaults[t]}removeByName(A){delete this.values[this.nameToKeyMap[A]]}static createTables(A){let t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(let i of A){let s=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[s]=i[1],t.nameToKeyMap[i[1]]=s,t.types[s]=i[2],t.defaults[s]=i[3],t.opcodes[s]=Array.isArray(i[0])?i[0]:[i[0]],t.order.push(s)}return t}},Od=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],b0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Od))}constructor(A){super(b0.tables,A),this.privateDict=null}},Zd=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],D0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Zd))}constructor(A){super(D0.tables,A),this.subrsIndex=null}},fo={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},C0=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.charset=i,this.raw=s}},wI=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.encoding=i,this.raw=s}},yI=class{constructor(A,t){this.format=A,this.fdSelect=t}getFDIndex(A){return A<0||A>=this.fdSelect.length?-1:this.fdSelect[A]}},Nr=class{constructor(){this.offsets=Object.create(null)}isTracking(A){return A in this.offsets}track(A,t){if(A in this.offsets)throw new v(`Already tracking location of ${A}`);this.offsets[A]=t}offset(A){for(let t in this.offsets)this.offsets[t]+=A}setEntryLocation(A,t,i){if(!(A in this.offsets))throw new v(`Not tracking location of ${A}`);let s=i.data,a=this.offsets[A],n=5;for(let r=0,g=t.length;r>24&255,s[c]=C>>16&255,s[l]=C>>8&255,s[h]=C&255}}},k0=class{constructor(A){this.cff=A}compile(){let A=this.cff,t={data:[],length:0,add(l){try{this.data.push(...l)}catch(h){this.data=this.data.concat(l)}this.length=this.data.length}},i=this.compileHeader(A.header);t.add(i);let s=this.compileNameIndex(A.names);if(t.add(s),A.isCIDFont&&A.topDict.hasName("FontMatrix")){let l=A.topDict.getByName("FontMatrix");A.topDict.removeByName("FontMatrix");for(let h of A.fdArray){let C=l.slice(0);h.hasName("FontMatrix")&&(C=Ce.transform(C,h.getByName("FontMatrix"))),h.setByName("FontMatrix",C)}}let a=A.topDict.getByName("XUID");(a==null?void 0:a.length)>16&&A.topDict.removeByName("XUID"),A.topDict.setByName("charset",0);let n=this.compileTopDicts([A.topDict],t.length,A.isCIDFont);t.add(n.output);let r=n.trackers[0],g=this.compileStringIndex(A.strings.strings);t.add(g);let o=this.compileIndex(A.globalSubrIndex);if(t.add(o),A.encoding&&A.topDict.hasName("Encoding"))if(A.encoding.predefined)r.setEntryLocation("Encoding",[A.encoding.format],t);else{let l=this.compileEncoding(A.encoding);r.setEntryLocation("Encoding",[t.length],t),t.add(l)}let I=this.compileCharset(A.charset,A.charStrings.count,A.strings,A.isCIDFont);r.setEntryLocation("charset",[t.length],t),t.add(I);let c=this.compileCharStrings(A.charStrings);if(r.setEntryLocation("CharStrings",[t.length],t),t.add(c),A.isCIDFont){r.setEntryLocation("FDSelect",[t.length],t);let l=this.compileFDSelect(A.fdSelect);t.add(l),n=this.compileTopDicts(A.fdArray,t.length,!0),r.setEntryLocation("FDArray",[t.length],t),t.add(n.output);let h=n.trackers;this.compilePrivateDicts(A.fdArray,h,t)}return this.compilePrivateDicts([A.topDict],[r],t),t.add([0]),t.data}encodeNumber(A){return Number.isInteger(A)?this.encodeInteger(A):this.encodeFloat(A)}static get EncodeFloatRegExp(){return nA(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(A){let t=A.toString(),i=k0.EncodeFloatRegExp.exec(t);if(i){let g=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));t=(Math.round(A*g)/g).toString()}let s="",a,n;for(a=0,n=t.length;a=-107&&A<=107?t=[A+139]:A>=108&&A<=1131?(A-=108,t=[(A>>8)+247,A&255]):A>=-1131&&A<=-108?(A=-A-108,t=[(A>>8)+251,A&255]):A>=-32768&&A<=32767?t=[28,A>>8&255,A&255]:t=[29,A>>24&255,A>>16&255,A>>8&255,A&255],t}compileHeader(A){return[A.major,A.minor,4,A.offSize]}compileNameIndex(A){let t=new ai;for(let i of A){let s=Math.min(i.length,127),a=new Array(s);for(let n=0;n"~"||r==="["||r==="]"||r==="("||r===")"||r==="{"||r==="}"||r==="<"||r===">"||r==="/"||r==="%")&&(r="_"),a[n]=r}a=a.join(""),a===""&&(a="Bad_Font_Name"),t.add(Pe(a))}return this.compileIndex(t)}compileTopDicts(A,t,i){let s=[],a=new ai;for(let n of A){i&&(n.removeByName("CIDFontVersion"),n.removeByName("CIDFontRevision"),n.removeByName("CIDFontType"),n.removeByName("CIDCount"),n.removeByName("UIDBase"));let r=new Nr,g=this.compileDict(n,r);s.push(r),a.add(g),r.offset(t)}return a=this.compileIndex(a,s),{trackers:s,output:a}}compilePrivateDicts(A,t,i){for(let s=0,a=A.length;s>8&255,n&255]);else{let r=1+n*2;a=new Uint8Array(r),a[0]=0;let g=0,o=A.charset.length,I=!1;for(let c=1;c>8&255,a[c+1]=l&255}}return this.compileTypedArray(a)}compileEncoding(A){return this.compileTypedArray(A.raw)}compileFDSelect(A){let t=A.format,i,s;switch(t){case 0:for(i=new Uint8Array(1+A.fdSelect.length),i[0]=t,s=0;s>8&255,a&255,n];for(s=1;s>8&255,s&255,o),n=o)}let g=(r.length-3)/3;r[1]=g>>8&255,r[2]=g&255,r.push(s>>8&255,s&255),i=new Uint8Array(r);break}return this.compileTypedArray(i)}compileTypedArray(A){return Array.from(A)}compileIndex(A,t=[]){let i=A.objects,s=i.length;if(s===0)return[0,0];let a=[s>>8&255,s&255],n=1,r;for(r=0;r>8&255,o&255):g===3?a.push(o>>16&255,o>>8&255,o&255):a.push(o>>>24&255,o>>16&255,o>>8&255,o&255),i[r]&&(o+=i[r].length);for(r=0;r=65520&&e<=65535?0:e>=62976&&e<=63743?Xd()[e]||e:e===173?45:e}function Us(e,A){let t=A[e];if(t!==void 0)return t;if(!e)return-1;if(e[0]==="u"){let i=e.length,s;if(i===7&&e[1]==="n"&&e[2]==="i")s=e.substring(3);else if(i>=5&&i<=7)s=e.substring(1);else return-1;if(s===s.toUpperCase()&&(t=parseInt(s,16),t>=0))return t}return-1}var uo=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function _d(e,A=-1){if(A!==-1){let t=uo[A];for(let i=0,s=t.length;i=t[i]&&e<=t[i+1])return A}for(let t=0,i=uo.length;t=s[a]&&e<=s[a+1])return t}return-1}var zd=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),bI=new Map;function $d(e){let A=bI.get(e);if(A)return A;let t=e.match(zd),i={isWhitespace:!!(t!=null&&t[1]),isZeroWidthDiacritic:!!(t!=null&&t[2]),isInvisibleFormatMark:!!(t!=null&&t[3])};return bI.set(e,i),i}function A2(){bI.clear()}var Cs=!0,Ft={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144},O1=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function Ef(e,A){if(A[e]!==void 0)return e;let t=Us(e,A);if(t!==-1){for(let i in A)if(A[i]===t)return i}return PA("Unable to recover a standard glyph name for: "+e),e}function ff(e,A,t){let i=Object.create(null),s,a,n,r=!!(e.flags&Ft.Symbolic);if(e.isInternalFont)for(n=A,a=0;a=0?s:0;else if(e.baseEncodingName)for(n=Ua(e.baseEncodingName),a=0;a=0?s:0;else if(r)for(a in A)i[a]=A[a];else for(n=fi,a=0;a=0?s:0;let g=e.differences,o;if(g)for(a in g){let I=g[a];if(s=t.indexOf(I),s===-1){o||(o=Ai());let c=Ef(I,o);c!==I&&(s=t.indexOf(c))}i[a]=s>=0?s:0}return i}function pn(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")}var e2=he(e=>{e[8211]=65074,e[8212]=65073,e[8229]=65072,e[8230]=65049,e[12289]=65041,e[12290]=65042,e[12296]=65087,e[12297]=65088,e[12298]=65085,e[12299]=65086,e[12300]=65089,e[12301]=65090,e[12302]=65091,e[12303]=65092,e[12304]=65083,e[12305]=65084,e[12308]=65081,e[12309]=65082,e[12310]=65047,e[12311]=65048,e[65103]=65076,e[65281]=65045,e[65288]=65077,e[65289]=65078,e[65292]=65040,e[65306]=65043,e[65307]=65044,e[65311]=65046,e[65339]=65095,e[65341]=65096,e[65343]=65075,e[65371]=65079,e[65373]=65080}),zg=he(function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique",e["Arial-BoldMT-Bold"]="Helvetica-Bold",e["Arial-ItalicMT-Italic"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}),t2=he(function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="LiberationSans-Regular.ttf",e["Helvetica-Bold"]="LiberationSans-Bold.ttf",e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf",e["Helvetica-Oblique"]="LiberationSans-Italic.ttf",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}),uf=he(function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e.Impact="Helvetica",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica"}),C1=he(function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e.Trinit\\u00E9=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}),DI=he(function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0,e.Wingdings=!0,e["Wingdings-Bold"]=!0,e["Wingdings-Regular"]=!0}),Z1=he(function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[207]=211,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}),i2=he(function(e){e[227]=322,e[264]=261,e[291]=346}),s2=he(function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45});function j1(e){let A=pn(e);return zg()[A]}function X1(e){let A=pn(e);return!!(zg()[A]||uf()[A]||C1()[A]||DI()[A])}var B0=class{constructor(A=[]){this._map=A}get length(){return this._map.length}forEach(A){for(let t in this._map)A(t,this._map[t].charCodeAt(0))}has(A){return this._map[A]!==void 0}get(A){return this._map[A]}charCodeOf(A){let t=this._map;if(t.length<=65536)return t.indexOf(A);for(let i in t)if(t[i]===A)return i|0;return-1}amend(A){for(let t in A)this._map[t]=A[t]}},Ct=class{constructor(A,t){this.firstChar=A,this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(A){for(let t=this.firstChar,i=this.lastChar;t<=i;t++)A(t,t)}has(A){return this.firstChar<=A&&A<=this.lastChar}get(A){if(this.firstChar<=A&&A<=this.lastChar)return String.fromCharCode(A)}charCodeOf(A){return Number.isInteger(A)&&A>=this.firstChar&&A<=this.lastChar?A:-1}amend(A){OA("Should not call amend()")}},Ea=class{constructor(A,t){this.properties=t;let i=new Ma(A,t,Cs);this.cff=i.parse(),this.cff.duplicateFirstGlyph();let s=new k0(this.cff);this.seacs=this.cff.seacs;try{this.data=s.compile()}catch(a){k("Failed to compile font "+t.loadedName),this.data=A}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){let A=this.cff,t=this.properties,{cidToGidMap:i,cMap:s}=t,a=A.charset.charset,n,r;if(t.composite){let o;if((i==null?void 0:i.length)>0){o=Object.create(null);for(let c=0,l=i.length;c=0){let g=i[r];g&&(a[n]=g)}}a.length>0&&(this.properties.builtInEncoding=a)}};function hi(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function Re(e,A){return e[A]<<8|e[A+1]}function V0(e,A){return(e[A]<<24|e[A+1]<<16)>>16}function V1(e,A){return e[A]<<24>>24}function t0(e,A){return V0(e,A)/16384}function kI(e){let A=e.length,t=32768;return A<1240?t=107:A<33900&&(t=1131),t}function a2(e,A,t){let i=Re(e,A+2)===1?hi(e,A+8):hi(e,A+16),s=Re(e,A+i),a,n,r;if(s===4){Re(e,A+i+2);let g=Re(e,A+i+6)>>1;for(n=A+i+14,a=[],r=0;r2*Re(r,g));let a=[],n=s(A,0);for(let r=i;r>1;t0;)Q.push({flags:g})}for(l=0;l>1,B=!0;break;case 3:I+=r.length>>1,B=!0;break;case 4:o+=r.pop(),s(g,o),B=!0;break;case 5:for(;r.length>0;)g+=r.shift(),o+=r.shift(),a(g,o);break;case 6:for(;r.length>0&&(g+=r.shift(),a(g,o),r.length!==0);)o+=r.shift(),a(g,o);break;case 7:for(;r.length>0&&(o+=r.shift(),a(g,o),r.length!==0);)g+=r.shift(),a(g,o);break;case 8:for(;r.length>0;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 10:if(D=r.pop(),S=null,t.isCFFCIDFont){let w=t.fdSelect.getFDIndex(i);if(w>=0&&wMath.abs(o-Y)?g+=r.shift():o+=r.shift(),n(E,u,f,d,g,o);break;default:throw new v(`unknown operator: 12 ${Q}`)}break;case 14:if(r.length>=4){let w=r.pop(),Y=r.pop();o=r.pop(),g=r.pop(),A.add(_e.SAVE),A.add(_e.TRANSLATE,[g,o]);let U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[w]]));SI(t.glyphs[U.glyphId],A,t,U.glyphId),A.add(_e.RESTORE),U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[Y]])),SI(t.glyphs[U.glyphId],A,t,U.glyphId)}return;case 18:I+=r.length>>1,B=!0;break;case 19:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 20:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 21:o+=r.pop(),g+=r.pop(),s(g,o),B=!0;break;case 22:g+=r.pop(),s(g,o),B=!0;break;case 23:I+=r.length>>1,B=!0;break;case 24:for(;r.length>2;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);g+=r.shift(),o+=r.shift(),a(g,o);break;case 25:for(;r.length>6;)g+=r.shift(),o+=r.shift(),a(g,o);E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 26:for(r.length%2&&(g+=r.shift());r.length>0;)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f,o=d+r.shift(),n(E,u,f,d,g,o);break;case 27:for(r.length%2&&(o+=r.shift());r.length>0;)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d,n(E,u,f,d,g,o);break;case 28:r.push((l[h]<<24|l[h+1]<<16)>>16),h+=2;break;case 29:D=r.pop()+t.gsubrsBias,S=t.gsubrs[D],S&&c(S);break;case 30:for(;r.length>0&&(E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;case 31:for(;r.length>0&&(E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;default:if(Q<32)throw new v(`unknown operator: ${Q}`);Q<247?r.push(Q-139):Q<251?r.push((Q-247)*256+l[h++]+108):Q<255?r.push(-(Q-251)*256-l[h++]-108):(r.push((l[h]<<24|l[h+1]<<16|l[h+2]<<8|l[h+3])/65536),h+=4);break}B&&(r.length=0)}}c(e)}var _1=[],FI=class{constructor(){et(this,"cmds",[])}add(A,t){if(t)if(wt(t,null))this.cmds.push(A,...t);else{k(`Commands.add - "${A}" has at least one non-number arg: "${t}".`);let i=t.map(s=>typeof s=="number"?s:0);this.cmds.push(A,...i)}else this.cmds.push(A)}},Ur=class{constructor(A){this.fontMatrix=A,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(A){var n,r;let{charCode:t,glyphId:i}=Gr(this.cmap,A),s=this.compiledGlyphs[i],a;if(!s){try{s=this.compileGlyph(this.glyphs[i],i)}catch(g){s=_1,a=g}this.compiledGlyphs[i]=s}if((r=(n=this.compiledCharCodeToGlyphId)[t])!=null||(n[t]=i),a)throw a;return s}compileGlyph(A,t){if(!A||A.length===0||A[0]===14)return _1;let i=this.fontMatrix;if(this.isCFFCIDFont){let a=this.fdSelect.getFDIndex(t);a>=0&&a{let i=t.getSize();return A+(i+3&-4)},0)}write(){let A=this.getSize(),t=new DataView(new ArrayBuffer(A)),i=A>131070,s=i?4:2,a=new DataView(new ArrayBuffer((this.glyphs.length+1)*s));i?a.setUint32(0,0):a.setUint16(0,0);let n=0,r=0;for(let g of this.glyphs)n+=g.write(n,t),n=n+3&-4,r+=s,i?a.setUint32(r,n):a.setUint16(r,n>>1);return{isLocationLong:i,loca:new Uint8Array(a.buffer),glyf:new Uint8Array(t.buffer)}}scale(A){for(let t=0,i=this.glyphs.length;tt+i.getSize(),0);return this.header.getSize()+A}write(A,t){if(!this.header)return 0;let i=A;if(A+=this.header.write(A,t),this.simple)A+=this.simple.write(A,t);else for(let s of this.composites)A+=s.write(A,t);return A-i}scale(A){if(!this.header)return;let t=(this.header.xMin+this.header.xMax)/2;if(this.header.scale(t,A),this.simple)this.simple.scale(t,A);else for(let i of this.composites)i.scale(t,A)}},Ha=class{constructor({numberOfContours:A,xMin:t,yMin:i,xMax:s,yMax:a}){this.numberOfContours=A,this.xMin=t,this.yMin=i,this.xMax=s,this.yMax=a}static parse(A,t){return[10,new Ha({numberOfContours:t.getInt16(A),xMin:t.getInt16(A+2),yMin:t.getInt16(A+4),xMax:t.getInt16(A+6),yMax:t.getInt16(A+8)})]}getSize(){return 10}write(A,t){return t.setInt16(A,this.numberOfContours),t.setInt16(A+2,this.xMin),t.setInt16(A+4,this.yMin),t.setInt16(A+6,this.xMax),t.setInt16(A+8,this.yMax),10}scale(A,t){this.xMin=Math.round(A+(this.xMin-A)*t),this.xMax=Math.round(A+(this.xMax-A)*t)}},MI=class{constructor({flags:A,xCoordinates:t,yCoordinates:i}){this.xCoordinates=t,this.yCoordinates=i,this.flags=A}},Ja=class{constructor({contours:A,instructions:t}){this.contours=A,this.instructions=t}static parse(A,t,i){let s=[];for(let Q=0;Q255?A+=2:o>0&&(A+=1),t=r,o=Math.abs(g-i),o>255?A+=2:o>0&&(A+=1),i=g}}return A}write(A,t){let i=A,s=[],a=[],n=[],r=0,g=0;for(let o of this.contours){for(let I=0,c=o.xCoordinates.length;I=0?vn|zs:vn,s.push(Q)):s.push(C)}r=h;let B=o.yCoordinates[I];if(C=B-g,C===0)l|=$s,a.push(0);else{let Q=Math.abs(C);Q<=255?(l|=C>=0?qn|$s:qn,a.push(Q)):a.push(C)}g=B,n.push(l)}t.setUint16(A,s.length-1),A+=2}t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length);for(let o of n)t.setUint8(A++,o);for(let o=0,I=s.length;o=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(A+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(A+=2),A}write(A,t){let i=A;return this.flags&Tn?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=Aa):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=Aa),t.setUint16(A,this.flags),t.setUint16(A+2,this.glyphIndex),A+=4,this.flags&Aa?(this.flags&Tn?(t.setInt16(A,this.argument1),t.setInt16(A+2,this.argument2)):(t.setUint16(A,this.argument1),t.setUint16(A+2,this.argument2)),A+=4):(t.setUint8(A,this.argument1),t.setUint8(A+1,this.argument2),A+=2),this.flags&xo&&(t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length)),A-i}scale(A,t){}};function Pn(e,A,t){e[A]=t>>8&255,e[A+1]=t&255}function mo(e,A,t){e[A]=t>>24&255,e[A+1]=t>>16&255,e[A+2]=t>>8&255,e[A+3]=t&255}function Q2(e,A,t){if(t instanceof Uint8Array)e.set(t,A);else if(typeof t=="string")for(let i=0,s=t.length;ii;)i<<=1,s++;let a=i*t;return{range:a,entry:s,rangeShift:t*A-a}}toArray(){let A=this.sfnt,t=this.tables,i=Object.keys(t);i.sort();let s=i.length,a,n,r,g,o,I=$1+s*AE,c=[I];for(a=0;a>>0;I+=C,c.push(I)}let l=new Uint8Array(I);for(a=0;a>>0}mo(l,I+4,C),mo(l,I+8,c[a]),mo(l,I+12,t[o].length),I+=AE}return l}addTable(A,t){if(A in this.tables)throw new Error("Table "+A+" already exists");this.tables[A]=t}},la=!1,Fe={hstem:[1],vstem:[3],vmoveto:[4],rlineto:[5],hlineto:[6],vlineto:[7],rrcurveto:[8],callsubr:[10],flex:[12,35],drop:[12,18],endchar:[14],rmoveto:[21],hmoveto:[22],vhcurveto:[30],hvcurveto:[31]},LI=class{constructor(){this.width=0,this.lsb=0,this.flexing=!1,this.output=[],this.stack=[]}convert(A,t,i){let s=A.length,a=!1,n,r,g;for(let o=0;os)return!0;let a=s-A;for(let n=a;n>8&255,r&255):(r=65536*r|0,this.output.push(255,r>>24&255,r>>16&255,r>>8&255,r&255))}return this.output.push(...t),i?this.stack.splice(a,A):this.stack.length=0,!1}},eE=55665,E2=4330;function _t(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function tE(e,A,t){if(t>=e.length)return new Uint8Array(0);let i=52845,s=22719,a=A|0,n,r;for(n=0;n>8,a=(I+a)*i+s&(1<<16)-1}return o}function f2(e,A,t){let a=A|0,n=e.length,r=n>>>1,g=new Uint8Array(r),o,I;for(o=0,I=0;o>8,a=(h+a)*52845+22719&(1<<16)-1}}return g.slice(t,I)}function iE(e){return e===47||e===91||e===93||e===123||e===125||e===40||e===41}var Mr=class{constructor(A,t,i){if(t){let s=A.getBytes(),a=!((_t(s[0])||pt(s[0]))&&_t(s[1])&&_t(s[2])&&_t(s[3])&&_t(s[4])&&_t(s[5])&&_t(s[6])&&_t(s[7]));A=new Ie(a?tE(s,eE,4):f2(s,eE,4))}this.seacAnalysisEnabled=!!i,this.stream=A,this.nextChar()}readNumberArray(){this.getToken();let A=[];for(;;){let t=this.getToken();if(t===null||t==="]"||t==="}")break;A.push(parseFloat(t||0))}return A}readNumber(){let A=this.getToken();return parseFloat(A||0)}readInt(){let A=this.getToken();return parseInt(A||0,10)|0}readBoolean(){return this.getToken()==="true"?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t===-1)return null;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}if(iE(t))return this.nextChar(),String.fromCharCode(t);let i="";do i+=String.fromCharCode(t),t=this.nextChar();while(t>=0&&!pt(t)&&!iE(t));return i}readCharStrings(A,t){return t===-1?A:tE(A,E2,t)}extractFontProgram(A){let t=this.stream,i=[],s=[],a=Object.create(null);a.lenIV=4;let n={subrs:[],charstrings:[],properties:{privateData:a}},r,g,o,I;for(;(r=this.getToken())!==null;)if(r==="/")switch(r=this.getToken(),r){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();r=this.getToken(),!(r===null||r==="end");){if(r!=="/")continue;let l=this.getToken();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"?this.getToken():r==="/"&&this.prevChar(),s.push({glyph:l,encoded:h})}break;case"Subrs":for(this.readInt(),this.getToken();this.getToken()==="dup";){let l=this.readInt();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"&&this.getToken(),i[l]=h}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":let c=this.readNumberArray();c.length>0&&c.length%2===0&&la&&(n.properties.privateData[r]=c);break;case"StemSnapH":case"StemSnapV":n.properties.privateData[r]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[r]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[r]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[r]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[r]=this.readBoolean();break}for(let{encoded:c,glyph:l}of s){let h=new LI,C=h.convert(c,i,this.seacAnalysisEnabled),B=h.output;C&&(B=[14]);let Q={glyphName:l,charstring:B,width:h.width,lsb:h.lsb,seac:h.seac};if(l===".notdef"?n.charstrings.unshift(Q):n.charstrings.push(Q),A.builtInEncoding){let E=A.builtInEncoding.indexOf(l);E>-1&&A.widths[E]===void 0&&E>=A.firstChar&&E<=A.lastChar&&(A.widths[E]=h.width)}}return n}extractFontHeader(A){let t;for(;(t=this.getToken())!==null;)if(t==="/")switch(t=this.getToken(),t){case"FontMatrix":let i=this.readNumberArray();A.fontMatrix=i;break;case"Encoding":let s=this.getToken(),a;if(!/^\\d+$/.test(s))a=Ua(s);else{a=[];let r=parseInt(s,10)|0;this.getToken();for(let g=0;g=s){for(n+=g;n=0&&(s[r]=a)}return ff(A,s,i)}hasGlyphId(A){return A<0||A>=this.numGlyphs?!1:A===0?!0:this.charstrings[A-1].charstring.length>0}getSeacs(A){let t=[];for(let i=0,s=A.length;i0;d--)u[d]-=u[d-1];C.setByName(f,u)}n.topDict.privateDict=C;let Q=new ai;for(c=0,l=s.length;c0&&e.toUnicode.amend(s)}function p2(e,A){if(e.isInternalFont||e.hasIncludedToUnicodeMap||A===e.defaultEncoding||e.toUnicode instanceof Ct)return;let t=[],i=Ai();for(let s in A){if(e.hasEncoding&&(e.baseEncodingName||e.differences[s]!==void 0))continue;let a=A[s],n=Us(a,i);n!==-1&&(t[s]=String.fromCharCode(n))}t.length>0&&e.toUnicode.amend(t)}function nE(e){if(!e.fallbackToUnicode||e.toUnicode instanceof Ct)return;let A=[];for(let t in e.fallbackToUnicode)e.toUnicode.has(t)||(A[t]=e.fallbackToUnicode[t]);A.length>0&&e.toUnicode.amend(A)}var JI=class{constructor(A,t,i,s,a,n,r,g,o){this.originalCharCode=A,this.fontChar=t,this.unicode=i,this.accent=s,this.width=a,this.vmetric=n,this.operatorListId=r,this.isSpace=g,this.isInFont=o}get category(){return nA(this,"category",$d(this.unicode),!0)}};function i0(e,A){return(e<<8)+A}function ea(e,A,t){e[A+1]=t,e[A]=t>>>8}function Dt(e,A){let t=(e<<8)+A;return t&1<<15?t-65536:t}function w2(e,A,t){e[A+3]=t&255,e[A+2]=t>>>8,e[A+1]=t>>>16,e[A]=t>>>24}function y2(e,A,t,i){return(e<<24)+(A<<16)+(t<<8)+i}function zA(e){return String.fromCharCode(e>>8&255,e&255)}function s0(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,e&255)}function b2(e){let A=e.peekBytes(4);return le(A,0)===65536||Qt(A)==="true"}function xf(e){let A=e.peekBytes(4);return Qt(A)==="ttcf"}function D2(e){let A=e.peekBytes(4);return Qt(A)==="OTTO"}function k2(e){let A=e.peekBytes(2);return A[0]===37&&A[1]===33||A[0]===128&&A[1]===1}function S2(e){let A=e.peekBytes(4);return A[0]>=1&&A[3]>=1&&A[3]<=4}function F2(e,{type:A,subtype:t,composite:i}){let s,a;return b2(e)||xf(e)?s=i?"CIDFontType2":"TrueType":D2(e)?s=i?"CIDFontType2":"OpenType":k2(e)?i?s="CIDFontType0":s=A==="MMType1"?"MMType1":"Type1":S2(e)?i?(s="CIDFontType0",a="CIDFontType0C"):(s=A==="MMType1"?"MMType1":"Type1",a="Type1C"):(k("getFontFileType: Unable to detect correct font file Type/Subtype."),s=A,a=t),[s,a]}function Wn(e,A){for(let t in A)e[+t]=A[t]}function wo(e,A,t){let i=[],s;for(let a=0,n=e.length;aoi[0][0]<=h&&h<=oi[0][1]||oi[1][0]<=h&&h<=oi[1][1];for(let h in e){let C=e[h];if(!A(C))continue;if(I>c){if(g++,g>=oi.length){k("Ran out of space in font private use area.");break}I=oi[g][0],c=oi[g][1]}let B=I++;C===0&&(C=t);let Q=i.get(h);typeof Q=="string"&&(Q=Q.codePointAt(0)),Q&&!l(Q)&&!r.has(C)&&(a.set(Q,C),r.add(C)),s[B]=C,n[h]=B}return{toFontChar:n,charCodeToGlyphId:s,toUnicodeExtraMap:a,nextAvailableFontCharCode:I}}function N2(e,A,t){let i=[];for(let n in e)e[n]>=t||i.push({fontCharCode:n|0,glyphId:e[n]});if(A)for(let[n,r]of A)r>=t||i.push({fontCharCode:n,glyphId:r});i.length===0&&i.push({fontCharCode:0,glyphId:0}),i.sort(function(r,g){return r.fontCharCode-g.fontCharCode});let s=[],a=i.length;for(let n=0;n65535?2:1,a="\\0\\0"+zA(s)+"\\0\\0"+qe(4+s*8),n,r,g,o;for(n=i.length-1;n>=0&&!(i[n][0]<=65535);--n);let I=n+1;i[n][0]<65535&&i[n][1]===65535&&(i[n][1]=65534);let c=i[n][1]<65535?1:0,l=I+c,h=F0.getSearchParams(l,2),C="",B="",Q="",E="",f="",u=0,d,x,p,m;for(n=0,r=I;n0&&(B+="\\xFF\\xFF",C+="\\xFF\\xFF",Q+="\\0",E+="\\0\\0");let D="\\0\\0"+zA(2*l)+zA(h.range)+zA(h.entry)+zA(h.rangeShift)+B+"\\0\\0"+C+Q+E+f,S="",w="";if(s>1){for(a+=`\\0\\0\n`+qe(4+s*8+4+D.length),S="",n=0,r=i.length;na||(A.skip(6),A.getUint16()===0)?!1:(e.data[8]=e.data[9]=0,!0)}function oE(e,A,t){t||(t={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0});let i=0,s=0,a=0,n=0,r=null,g=0,o=-1;if(A){for(let E in A)if(E|=0,(r>E||!r)&&(r=E),g 123 are reserved for internal usage");g>65535&&(g=65535)}else r=0,g=255;let I=e.bbox||[0,0,0,0],c=t.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),l=e.ascentScaled?1:c/n0,h=t.ascent||Math.round(l*(e.ascent||I[3])),C=t.descent||Math.round(l*(e.descent||I[1]));C>0&&e.descent>0&&I[1]<0&&(C=-C);let B=t.yMax||h,Q=-t.yMin||-C;return"\\0$\\xF4\\0\\0\\0\\x8A\\xBB\\0\\0\\0\\x8C\\x8A\\xBB\\0\\0\\xDF\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+qe(i)+qe(s)+qe(a)+qe(n)+"*21*"+zA(e.italicAngle?1:0)+zA(r||e.firstChar)+zA(g||e.lastChar)+zA(h)+zA(C)+"\\0d"+zA(B)+zA(Q)+"\\0\\0\\0\\0\\0\\0\\0\\0"+zA(e.xHeight)+zA(e.capHeight)+zA(0)+zA(r||e.firstChar)+"\\0"}function IE(e){let A=Math.floor(e.italicAngle*65536);return"\\0\\0\\0"+qe(A)+"\\0\\0\\0\\0"+qe(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function U2(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function bo(e,A){A||(A=[[],[]]);let t=[A[0][0]||"Original licence",A[0][1]||e,A[0][2]||"Unknown",A[0][3]||"uniqueID",A[0][4]||e,A[0][5]||"Version 0.11",A[0][6]||U2(e),A[0][7]||"Unknown",A[0][8]||"Unknown",A[0][9]||"Unknown"],i=[],s,a,n,r,g;for(s=0,a=t.length;s0,(r||g)&&i==="CIDFontType2"&&this.cidEncoding.startsWith("Identity-")){let l=A.cidToGidMap,h=[];if(Wn(h,Z1()),/Arial-?Black/i.test(t)?Wn(h,i2()):/Calibri/i.test(t)&&Wn(h,s2()),l){for(let C in h){let B=h[C];l[B]!==void 0&&(h[+C]=l[B])}l.length!==this.toUnicode.length&&A.hasIncludedToUnicodeMap&&this.toUnicode instanceof Ct&&this.toUnicode.forEach(function(C,B){let Q=h[C];l[Q]===void 0&&(h[+C]=B)})}this.toUnicode instanceof Ct||this.toUnicode.forEach(function(C,B){h[+C]=B}),this.toFontChar=h,this.toUnicode=new B0(h)}else if(/Symbol/i.test(s))this.toFontChar=wo(l1,Ai(),this.differences);else if(/Dingbats/i.test(s))this.toFontChar=wo(h1,jd(),this.differences);else if(r||g){let l=wo(this.defaultEncoding,Ai(),this.differences);i==="CIDFontType2"&&!this.cidEncoding.startsWith("Identity-")&&!(this.toUnicode instanceof Ct)&&this.toUnicode.forEach(function(h,C){l[+h]=C}),this.toFontChar=l}else{let l=Ai(),h=[];this.toUnicode.forEach((C,B)=>{if(!this.composite){let Q=this.differences[C]||this.defaultEncoding[C],E=Us(Q,l);E!==-1&&(B=E)}h[+C]=B}),this.composite&&this.toUnicode instanceof Ct&&/Tahoma|Verdana/i.test(t)&&Wn(h,Z1()),this.toFontChar=h}nE(A),this.loadedName=s.split("-",1)[0]}checkAndRepair(A,t,i){var EA,fA,CA;let s=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function a(N,H){let q=Object.create(null);q["OS/2"]=null,q.cmap=null,q.head=null,q.hhea=null,q.hmtx=null,q.maxp=null,q.name=null,q.post=null;for(let T=0;T>>0,T=N.getInt32()>>>0,$=N.getInt32()>>>0,X=N.pos;N.pos=N.start||0,N.skip(T);let W=N.getBytes($);return N.pos=X,H==="head"&&(W[8]=W[9]=W[10]=W[11]=0,W[17]|=32),{tag:H,checksum:q,length:$,offset:T,data:W}}function r(N){return{version:N.getString(4),numTables:N.getUint16(),searchRange:N.getUint16(),entrySelector:N.getUint16(),rangeShift:N.getUint16()}}function g(N){let H=N.getString(4);gt(H==="ttcf","Must be a TrueType Collection font.");let q=N.getUint16(),T=N.getUint16(),$=N.getInt32()>>>0,X=[];for(let G=0;G<$;G++)X.push(N.getInt32()>>>0);let W={ttcTag:H,majorVersion:q,minorVersion:T,numFonts:$,offsetTable:X};switch(q){case 1:return W;case 2:return W.dsigTag=N.getInt32()>>>0,W.dsigLength=N.getInt32()>>>0,W.dsigOffset=N.getInt32()>>>0,W}throw new v(`Invalid TrueType Collection majorVersion: ${q}.`)}function o(N,H){var W;let{numFonts:q,offsetTable:T}=g(N),$=H.split("+"),X;for(let G=0;G