diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index b4dfb29f7f..a573d1938c 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -186,6 +186,14 @@ When adding query parameters to ETAPI endpoints (`apps/server/src/etapi/`), main **Auth note**: ETAPI uses basic auth with tokens. Internal API endpoints trust the frontend. +### Adding New LLM Tools +Tools are defined using `defineTools()` in `apps/server/src/services/llm/tools/` and automatically registered for both the LLM chat and MCP server. + +1. Add the tool definition in the appropriate module (`note_tools.ts`, `attribute_tools.ts`, `hierarchy_tools.ts`) or create a new module +2. Each tool needs: `description`, `inputSchema` (Zod), `execute` function, and optionally `mutates: true` for write operations or `needsContext: true` for tools that need the current note context +3. If creating a new module, wrap tools in `defineTools({...})` and add the registry to `allToolRegistries` in `tools/index.ts` +4. Add a client-side friendly name in `apps/client/src/translations/en/translation.json` under `llm.tools.` — use **imperative tense** (e.g. "Search notes", "Create note", "Get attributes"), not present continuous + ### Database Migrations - Add scripts in `apps/server/src/migrations/YYMMDD_HHMM__description.sql` - Update schema in `apps/server/src/assets/db/schema.sql` @@ -213,6 +221,12 @@ When adding query parameters to ETAPI endpoints (`apps/server/src/etapi/`), main 10. **Attribute inheritance can be complex** - When checking for labels/relations, use `note.getOwnedAttribute()` for direct attributes or `note.getAttribute()` for inherited ones. Don't assume attributes are directly on the note. +## MCP Server +- Trilium exposes an MCP (Model Context Protocol) server at `http://localhost:8080/mcp`, configured in `.mcp.json` +- The MCP server is **only available when the Trilium server is running** (`pnpm run server:start`) +- It provides tools for reading, searching, and modifying notes directly from the AI assistant +- Use it to interact with actual note data when developing or debugging note-related features + ## TypeScript Configuration - **Project references**: Monorepo uses TypeScript project references (`tsconfig.json`) @@ -275,6 +289,12 @@ View types are configured via `#viewType` label (e.g., `#viewType=table`). Each - Register in `packages/ckeditor5/src/plugins.ts` - See `ckeditor5-admonition`, `ckeditor5-footnotes`, `ckeditor5-math`, `ckeditor5-mermaid` for examples +### Updating PDF.js +1. Update `pdfjs-dist` version in `packages/pdfjs-viewer/package.json` +2. Run `npx tsx scripts/update-viewer.ts` from that directory +3. Run `pnpm build` to verify success +4. Commit all changes including updated viewer files + ### Database Migrations - Add migration scripts in `apps/server/src/migrations/YYMMDD_HHMM__description.sql` - Update schema in `apps/server/src/assets/db/schema.sql` @@ -299,6 +319,7 @@ Trilium provides powerful user scripting capabilities: - Translation files in `apps/client/src/translations/` - Use translation system via `t()` function - Automatic pluralization: Add `_other` suffix to translation keys (e.g., `item` and `item_other` for singular/plural) +- When a translated string contains **interpolated components** (e.g. links, note references) whose order may vary across languages, use `` from `react-i18next` instead of `t()`. This lets translators reorder components freely (e.g. `" in "` vs `"in , "`) ## Testing Conventions diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000000..9fd17b8d67 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "trilium": { + "type": "http", + "url": "http://localhost:8080/mcp" + } + } +} diff --git a/CLAUDE.md b/CLAUDE.md index 5eb93b3a5c..747564ec34 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -157,6 +157,7 @@ SQLite via `better-sqlite3`. SQL abstraction in `packages/trilium-core/src/servi - Supported languages: English, German, Spanish, French, Romanian, Chinese - **Only add new translation keys to `en/translation.json`** — translations for other languages are managed via Weblate and will be contributed by the community - Third-party components (e.g., mind-map context menu) should use i18next `t()` for their labels, with the English strings added to `en/translation.json` under a dedicated namespace (e.g., `"mind-map"`) +- When a translated string contains **interpolated components** (e.g. links, note references) whose order may vary across languages, use `` from `react-i18next` instead of `t()`. This lets translators reorder components freely (e.g. `" in "` vs `"in , "`) Three inheritance mechanisms: 1. **Standard**: `note.getInheritableAttributes()` walks parent tree @@ -213,12 +214,37 @@ Use `note.getOwnedAttribute()` for direct, `note.getAttribute()` for inherited. - `apps/server/src/routes/routes.ts` — API route registration - `packages/trilium-core/src/services/sql/sql.ts` — Database abstraction +### Adding New LLM Tools +Tools are defined using `defineTools()` in `apps/server/src/services/llm/tools/` and automatically registered for both the LLM chat and MCP server. + +1. Add the tool definition in the appropriate module (`note_tools.ts`, `attribute_tools.ts`, `attachment_tools.ts`, `hierarchy_tools.ts`) or create a new module +2. Each tool needs: `description`, `inputSchema` (Zod), `execute` function, and optionally `mutates: true` for write operations +3. If creating a new module, wrap tools in `defineTools({...})` and add the registry to `allToolRegistries` in `tools/index.ts` +4. Add a client-side friendly name in `apps/client/src/translations/en/translation.json` under `llm.tools.` — use **imperative tense** (e.g. "Search notes", "Create note", "Get attributes"), not present continuous +5. Use ETAPI (`apps/server/src/etapi/`) as inspiration for what fields to expose, but **do not import ETAPI mappers** — inline the field mappings directly in the tool so the LLM layer stays decoupled from the API layer + +### Updating PDF.js +1. Update `pdfjs-dist` version in `packages/pdfjs-viewer/package.json` +2. Run `npx tsx scripts/update-viewer.ts` from that directory +3. Run `pnpm build` to verify success +4. Commit all changes including updated viewer files + +### Database Migrations +- Add migration scripts in `apps/server/src/migrations/` +- Update schema in `apps/server/src/assets/db/schema.sql` + ### Server-Side Static Assets - Static assets (templates, SQL, translations, etc.) go in `apps/server/src/assets/` - Access them at runtime via `RESOURCE_DIR` from `apps/server/src/services/resource_dir.ts` (e.g. `path.join(RESOURCE_DIR, "llm", "skills", "file.md")`) - **Do not use `import.meta.url`/`fileURLToPath`** to resolve file paths — the server is bundled into CJS for production, so `import.meta.url` will not point to the source directory - **Do not use `__dirname` with relative paths** from source files — after bundling, `__dirname` points to the bundle output, not the original source tree +## MCP Server +- Trilium exposes an MCP (Model Context Protocol) server at `http://localhost:8080/mcp`, configured in `.mcp.json` +- The MCP server is **only available when the Trilium server is running** (`pnpm run server:start`) +- It provides tools for reading, searching, and modifying notes directly from the AI assistant +- Use it to interact with actual note data when developing or debugging note-related features + ## Build System Notes - Uses pnpm for monorepo management - Vite for fast development builds diff --git a/apps/client/package.json b/apps/client/package.json index 587faf4e7a..4be0939e81 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -54,8 +54,8 @@ "draggabilly": "3.0.0", "force-graph": "1.51.2", "globals": "17.4.0", - "i18next": "25.10.10", - "i18next-http-backend": "3.0.2", + "i18next": "26.0.3", + "i18next-http-backend": "3.0.4", "jquery": "4.0.0", "jquery.fancytree": "2.38.5", "jsplumb": "2.15.6", @@ -69,7 +69,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.4", "preact": "10.29.0", - "react-i18next": "17.0.1", + "react-i18next": "17.0.2", "react-window": "2.2.7", "reveal.js": "6.0.0", "rrule": "2.8.1", @@ -90,6 +90,6 @@ "happy-dom": "20.8.9", "lightningcss": "1.32.0", "script-loader": "0.7.2", - "vite-plugin-static-copy": "3.4.0" + "vite-plugin-static-copy": "4.0.0" } } \ No newline at end of file diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index eca547e89c..d731f03382 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -302,6 +302,7 @@ export type CommandMappings = { ninthTab: CommandData; lastTab: CommandData; showNoteSource: CommandData; + showNoteOCRText: CommandData; showSQLConsole: CommandData; showBackendLog: CommandData; showCheatsheet: CommandData; diff --git a/apps/client/src/components/root_command_executor.ts b/apps/client/src/components/root_command_executor.ts index 2aa5b90499..4560eafce6 100644 --- a/apps/client/src/components/root_command_executor.ts +++ b/apps/client/src/components/root_command_executor.ts @@ -148,6 +148,19 @@ export default class RootCommandExecutor extends Component { } } + async showNoteOCRTextCommand() { + const notePath = appContext.tabManager.getActiveContextNotePath(); + + if (notePath) { + await appContext.tabManager.openTabWithNoteWithHoisting(notePath, { + activate: true, + viewScope: { + viewMode: "ocr" + } + }); + } + } + async showAttachmentsCommand() { const notePath = appContext.tabManager.getActiveContextNotePath(); diff --git a/apps/client/src/services/content_renderer.ts b/apps/client/src/services/content_renderer.ts index ec29f094b5..e037383a73 100644 --- a/apps/client/src/services/content_renderer.ts +++ b/apps/client/src/services/content_renderer.ts @@ -1,6 +1,6 @@ import "./content_renderer.css"; -import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons"; +import { normalizeMimeTypeForCKEditor, type TextRepresentationResponse } from "@triliumnext/commons"; import { h, render } from "preact"; import WheelZoom from 'vanilla-js-wheel-zoom'; @@ -15,6 +15,7 @@ import openService from "./open.js"; import protectedSessionService from "./protected_session.js"; import protectedSessionHolder from "./protected_session_holder.js"; import renderService from "./render.js"; +import server from "./server.js"; import { applySingleBlockSyntaxHighlight } from "./syntax_highlight.js"; import utils, { getErrorMessage } from "./utils.js"; @@ -32,6 +33,7 @@ export interface RenderOptions { includeArchivedNotes?: boolean; /** Set of note IDs that have already been seen during rendering to prevent infinite recursion. */ seenNoteIds?: Set; + showTextRepresentation?: boolean; } const CODE_MIME_TYPES = new Set(["application/json"]); @@ -55,9 +57,9 @@ export async function getRenderedContent(this: {} | { ctx: string }, entity: FNo } else if (type === "code") { await renderCode(entity, $renderedContent); } else if (["image", "canvas", "mindMap", "spreadsheet"].includes(type)) { - renderImage(entity, $renderedContent, options); + await renderImage(entity, $renderedContent, options); } else if (!options.tooltip && ["file", "pdf", "audio", "video"].includes(type)) { - await renderFile(entity, type, $renderedContent); + await renderFile(entity, type, $renderedContent, options); } else if (type === "mermaid") { await renderMermaid(entity, $renderedContent); } else if (type === "render" && entity instanceof FNote) { @@ -138,7 +140,7 @@ async function renderCode(note: FNote | FAttachment, $renderedContent: JQuery, options: RenderOptions = {}) { +async function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery, options: RenderOptions = {}) { const encodedTitle = encodeURIComponent(entity.title); let url; @@ -146,13 +148,14 @@ function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery`; + url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}`; } $renderedContent // styles needed for the zoom to work well .css("display", "flex") .css("align-items", "center") - .css("justify-content", "center"); + .css("justify-content", "center") + .css("flex-direction", "column"); // OCR text is displayed below the image. const $img = $("") .attr("src", url || "") @@ -178,9 +181,35 @@ function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery) { +async function addOCRTextIfAvailable(note: FNote, $content: JQuery) { + try { + const data = await server.get(`ocr/notes/${note.noteId}/text`); + if (data.success && data.hasOcr && data.text) { + const $ocrSection = $(` +
+
+ ${t("ocr.extracted_text")} +
+
+
+ `); + + $ocrSection.find('.ocr-content').text(data.text); + $content.append($ocrSection); + } + } catch (error) { + // Silently fail if OCR API is not available + console.debug('Failed to fetch OCR text:', error); + } +} + +async function renderFile(entity: FNote | FAttachment, type: string, $renderedContent: JQuery, options: RenderOptions = {}) { let entityType, entityId; if (entity instanceof FNote) { @@ -220,6 +249,10 @@ async function renderFile(entity: FNote | FAttachment, type: string, $renderedCo $content.append($videoPreview); } + if (entity instanceof FNote && options.showTextRepresentation) { + await addOCRTextIfAvailable(entity, $content); + } + if (entityType === "notes" && "noteId" in entity) { // TODO: we should make this available also for attachments, but there's a problem with "Open externally" support // in attachment list diff --git a/apps/client/src/services/i18n.ts b/apps/client/src/services/i18n.ts index a8ca81489d..ba9ee2303a 100644 --- a/apps/client/src/services/i18n.ts +++ b/apps/client/src/services/i18n.ts @@ -25,8 +25,7 @@ export async function initLocale() { backend: { loadPath: `${window.glob.assetPath}/translations/{{lng}}/{{ns}}.json` }, - returnEmptyString: false, - showSupportNotice: false + returnEmptyString: false }); await setDayjsLocale(locale); diff --git a/apps/client/src/services/link.ts b/apps/client/src/services/link.ts index b74dd5f7b1..bee2ec09b7 100644 --- a/apps/client/src/services/link.ts +++ b/apps/client/src/services/link.ts @@ -28,7 +28,7 @@ async function getLinkIcon(noteId: string, viewMode: ViewMode | undefined) { return icon; } -export type ViewMode = "default" | "source" | "attachments" | "contextual-help" | "note-map"; +export type ViewMode = "default" | "source" | "attachments" | "contextual-help" | "note-map" | "ocr"; export interface ViewScope { /** diff --git a/apps/client/src/services/llm_chat.ts b/apps/client/src/services/llm_chat.ts index e4263aa896..fa0a0279d3 100644 --- a/apps/client/src/services/llm_chat.ts +++ b/apps/client/src/services/llm_chat.ts @@ -77,9 +77,13 @@ export async function streamChatCompletion( break; case "tool_use": callbacks.onToolUse?.(data.toolName, data.toolInput); + // Yield to force Preact to commit the pending tool call + // state before we process the result. + await new Promise((r) => setTimeout(r, 1)); break; case "tool_result": callbacks.onToolResult?.(data.toolName, data.result, data.isError); + await new Promise((r) => setTimeout(r, 1)); break; case "citation": if (data.citation) { diff --git a/apps/client/src/services/server.ts b/apps/client/src/services/server.ts index d9b776babc..010b57cae1 100644 --- a/apps/client/src/services/server.ts +++ b/apps/client/src/services/server.ts @@ -270,7 +270,11 @@ function ajax(url: string, method: string, data: unknown, headers: Headers, opts } else if (opts.silentInternalServerError && jqXhr.status === 500) { // report nothing } else { - await reportError(method, url, jqXhr.status, jqXhr.responseText); + try { + await reportError(method, url, jqXhr.status, jqXhr.responseText); + } catch { + // reportError may throw (e.g. ValidationError); ensure rej() is still called below. + } } rej(jqXhr.responseText); diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 8dde2d580c..536db2d9b5 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -2641,3 +2641,26 @@ iframe.print-iframe { min-height: 50px; align-items: center; } + +.ocr-text-section { + padding: 10px; + background: var(--accented-background-color); + border-left: 3px solid var(--main-border-color); + text-align: left; + width: 100%; +} + +.ocr-header { + font-weight: bold; + margin-bottom: 8px; + font-size: 0.9em; + color: var(--muted-text-color); +} + +.ocr-content { + max-height: 150px; + overflow-y: auto; + font-size: 0.9em; + line-height: 1.4; + white-space: pre-wrap; +} diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index df59a5f866..5b57b0b279 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -709,7 +709,8 @@ "advanced": "高级", "export_as_image": "导出为图像", "export_as_image_png": "PNG(栅格)", - "export_as_image_svg": "SVG(矢量图)" + "export_as_image_svg": "SVG(矢量图)", + "view_ocr_text": "查看 OCR 文本" }, "onclick_button": { "no_click_handler": "按钮组件'{{componentId}}'没有定义点击处理程序" @@ -1197,12 +1198,28 @@ }, "images": { "images_section_title": "图片", - "download_images_automatically": "自动下载图片以供离线使用。", - "download_images_description": "粘贴的 HTML 可能包含在线图片的引用,Trilium 会找到这些引用并下载图片,以便它们可以离线使用。", - "enable_image_compression": "启用图片压缩", - "max_image_dimensions": "图片的最大宽度/高度(超过此限制的图像将会被缩放)。", - "jpeg_quality_description": "JPEG 质量(10 - 最差质量,100 最佳质量,建议为 50 - 85)", - "max_image_dimensions_unit": "像素" + "download_images_automatically": "自动下载图片", + "download_images_description": "从粘贴的 HTML 代码中下载引用的在线图片,以便离线使用。", + "enable_image_compression": "图片压缩", + "max_image_dimensions": "最大图像尺寸", + "jpeg_quality_description": "建议范围为 50–85。较低的值可以减小文件大小,较高的值可以保留细节。", + "max_image_dimensions_unit": "像素", + "enable_image_compression_description": "上传或粘贴图片时,对其进行压缩和调整大小。", + "max_image_dimensions_description": "超过此尺寸的图片将自动调整大小。", + "jpeg_quality": "JPEG质量", + "ocr_section_title": "文本提取(OCR)", + "ocr_related_content_languages": "内容语言(用于文本提取)", + "ocr_auto_process": "自动处理新文件", + "ocr_auto_process_description": "自动从新上传或粘贴的文件中提取文本。", + "ocr_min_confidence": "最低置信度", + "ocr_confidence_description": "仅提取置信度高于此阈值的文本。较低的置信度阈值会包含更多文本,但可能准确性较低。", + "batch_ocr_title": "处理现有文件", + "batch_ocr_description": "从笔记中的所有现有图像、PDF 和 Office 文档中提取文本。这可能需要一些时间,具体取决于文件数量。", + "batch_ocr_start": "开始批量处理", + "batch_ocr_starting": "开始批量处理...", + "batch_ocr_progress": "正在处理 {{processed}} 个文件,共 {{total}} 个文件...", + "batch_ocr_completed": "批量处理完成!已处理 {{processed}} 个文件。", + "batch_ocr_error": "批量处理过程中出错:{{error}}" }, "attachment_erasure_timeout": { "attachment_erasure_timeout": "附件清理超时", @@ -1535,8 +1552,9 @@ "new-feature": "新建", "collections": "集合", "book": "集合", - "ai-chat": "AI聊天", - "spreadsheet": "电子表格" + "ai-chat": "AI对话", + "spreadsheet": "电子表格", + "llm-chat": "AI对话" }, "protect_note": { "toggle-on": "保护笔记", @@ -2046,7 +2064,9 @@ "title": "实验选项", "disclaimer": "这些选项处于实验阶段,可能导致系统不稳定。请谨慎使用。", "new_layout_name": "新布局", - "new_layout_description": "尝试全新布局,呈现更现代的外观并提升易用性。后续版本将进行重大调整。" + "new_layout_description": "尝试全新布局,呈现更现代的外观并提升易用性。后续版本将进行重大调整。", + "llm_name": "AI/大语言模型对话", + "llm_description": "启用由大语言模型驱动的 AI对话侧边栏和大语言模型对话笔记。" }, "tab_history_navigation_buttons": { "go-back": "返回前一笔记", @@ -2215,5 +2235,77 @@ "sample_venn": "韦恩图", "sample_ishikawa": "鱼骨图", "placeholder": "输入你的美人鱼图的内容,或者使用下面的示例图之一。" + }, + "llm_chat": { + "placeholder": "输入消息…", + "send": "发送", + "sending": "正在发送...", + "empty_state": "在下方输入消息,即可开始对话。", + "searching_web": "在网上搜索…", + "web_search": "联网搜索", + "sources": "来源", + "extended_thinking": "延伸思考", + "legacy_models": "传统模型", + "thinking": "正在思考...", + "thought_process": "思考过程", + "tool_calls": "{{count}} 次工具调用", + "input": "输入", + "result": "结果", + "error": "错误", + "tool_error": "失败", + "total_tokens": "{{total}} 个词元", + "tokens_detail": "{{prompt}} 提示词 + {{completion}} 补全", + "tokens_used": "{{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元", + "tokens_used_with_cost": "{{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元(约 ${{cost}})", + "tokens_used_with_model": "{{model}}: {{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元", + "tokens_used_with_model_and_cost": "{{model}}: {{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元(约 ${{cost}})", + "tokens": "词元", + "context_used": "{{percentage}}% 使用率", + "note_context_enabled": "点击即可禁用笔记上下文:{{title}}", + "note_context_disabled": "点击即可将当前注释添加到上下文中", + "no_provider_message": "未配置人工智能提供商。添加一个即可开始对话。", + "add_provider": "添加人工智能提供商", + "note_tools": "笔记访问" + }, + "sidebar_chat": { + "title": "AI对话", + "launcher_title": "打开AI对话", + "new_chat": "开始新对话", + "save_chat": "将对话保存到笔记", + "empty_state": "开始对话", + "history": "对话历史", + "recent_chats": "最近对话", + "no_chats": "无历史对话" + }, + "ocr": { + "extracted_text": "提取文本(OCR)", + "extracted_text_title": "提取文本(OCR)", + "loading_text": "正在加载OCR文本...", + "no_text_available": "暂无OCR文本", + "no_text_explanation": "该笔记未进行 OCR 文本提取处理,或未找到文本。", + "failed_to_load": "OCR文本加载失败", + "process_now": "处理 OCR", + "processing": "正在处理...", + "processing_started": "OCR识别已开始。请稍候片刻并刷新页面。", + "processing_failed": "OCR处理启动失败", + "view_extracted_text": "查看提取的文本(OCR)" + }, + "mind-map": { + "addChild": "添加子节点", + "addParent": "添加父节点", + "addSibling": "添加同级节点", + "removeNode": "删除节点", + "focus": "专注模式", + "cancelFocus": "退出专注模式", + "moveUp": "上移", + "moveDown": "下移", + "link": "链接", + "linkBidirectional": "双向链接", + "clickTips": "请点击目标节点", + "summary": "总结" + }, + "llm": { + "settings_description": "配置人工智能和大语言模型集成。", + "add_provider": "添加提供商" } } diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 047f022a26..177658c6ac 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -369,7 +369,7 @@ "calendar_root": "marks note which should be used as root for day notes. Only one should be marked as such.", "archived": "notes with this label won't be visible by default in search results (also in Jump To, Add Link dialogs etc).", "exclude_from_export": "notes (with their sub-tree) won't be included in any note export", - "run": "defines on which events script should run. Possible values are:\n
    \n
  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • \n
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • \n
  • backendStartup - when Trilium backend starts up
  • \n
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour.
  • \n
  • daily - run once a day
  • \n
", + "run": "defines on which events script should run. Possible values are:\n
    \n
  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • \n
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • \n
  • backendStartup - when Trilium backend starts up.
  • \n
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour.
  • \n
  • daily - run once a day.
  • \n
", "run_on_instance": "Define which trilium instance should run this on. Default to all instances.", "run_at_hour": "On which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.", "disable_inclusion": "scripts with this label won't be included into parent script execution.", @@ -691,6 +691,7 @@ "search_in_note": "Search in note", "note_source": "Note source", "note_attachments": "Note attachments", + "view_ocr_text": "View OCR text", "open_note_externally": "Open note externally", "open_note_externally_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.", "open_note_custom": "Open note custom", @@ -1254,12 +1255,28 @@ }, "images": { "images_section_title": "Images", - "download_images_automatically": "Download images automatically for offline use.", - "download_images_description": "Pasted HTML can contain references to online images, Trilium will find those references and download the images so that they are available offline.", - "enable_image_compression": "Enable image compression", - "max_image_dimensions": "Max width / height of an image (image will be resized if it exceeds this setting).", + "download_images_automatically": "Download images automatically", + "download_images_description": "Download referenced online images from pasted HTML so they are available offline.", + "enable_image_compression": "Image compression", + "enable_image_compression_description": "Compress and resize images when they are uploaded or pasted.", + "max_image_dimensions": "Max image dimensions", + "max_image_dimensions_description": "Images exceeding this size will be resized automatically.", "max_image_dimensions_unit": "pixels", - "jpeg_quality_description": "JPEG quality (10 - worst quality, 100 - best quality, 50 - 85 is recommended)" + "jpeg_quality": "JPEG quality", + "jpeg_quality_description": "Recommended range is 50–85. Lower values reduce file size, higher values preserve detail.", + "ocr_section_title": "Text Extraction (OCR)", + "ocr_related_content_languages": "Content languages (used for text extraction)", + "ocr_auto_process": "Auto-process new files", + "ocr_auto_process_description": "Automatically extract text from newly uploaded or pasted files.", + "ocr_min_confidence": "Minimum confidence", + "ocr_confidence_description": "Only extract text above this confidence threshold. Lower values include more text but may be less accurate.", + "batch_ocr_title": "Process Existing Files", + "batch_ocr_description": "Extract text from all existing images, PDFs, and Office documents in your notes. This may take some time depending on the number of files.", + "batch_ocr_start": "Start Batch Processing", + "batch_ocr_starting": "Starting batch processing...", + "batch_ocr_progress": "Processing {{processed}} of {{total}} files...", + "batch_ocr_completed": "Batch processing completed! Processed {{processed}} files.", + "batch_ocr_error": "Error during batch processing: {{error}}" }, "attachment_erasure_timeout": { "attachment_erasure_timeout": "Attachment Erasure Timeout", @@ -1305,7 +1322,7 @@ "custom_name_label": "Custom search engine name", "custom_name_placeholder": "Customize search engine name", "custom_url_label": "Custom search engine URL should include {keyword} as a placeholder for the search term.", - "custom_url_placeholder": "Customize search engine url", + "custom_url_placeholder": "Customize search engine URL", "save_button": "Save" }, "tray": { @@ -1622,6 +1639,7 @@ "web_search": "Web search", "note_tools": "Note access", "sources": "Sources", + "sources_summary": "{{count}} sources from {{sites}} sites", "extended_thinking": "Extended thinking", "legacy_models": "Legacy models", "thinking": "Thinking...", @@ -1642,9 +1660,7 @@ "note_context_enabled": "Click to disable note context: {{title}}", "note_context_disabled": "Click to include current note in context", "no_provider_message": "No AI provider configured. Add one to start chatting.", - "add_provider": "Add AI Provider", - "role_user": "You", - "role_assistant": "Assistant" + "add_provider": "Add AI Provider" }, "sidebar_chat": { "title": "AI Chat", @@ -1967,7 +1983,7 @@ }, "content_language": { "title": "Content languages", - "description": "Select one or more languages that should appear in the language selection in the Basic Properties section of a read-only or editable text note. This will allow features such as spell-checking or right-to-left support." + "description": "Select one or more languages that should appear in the language selection in the Basic Properties section of a read-only or editable text note. This will allow features such as spell-checking, right-to-left support and text extraction (OCR)." }, "switch_layout_button": { "title_vertical": "Move editing pane to the bottom", @@ -2067,6 +2083,19 @@ "calendar_view": { "delete_note": "Delete note..." }, + "ocr": { + "extracted_text": "Extracted Text (OCR)", + "extracted_text_title": "Extracted Text (OCR)", + "loading_text": "Loading OCR text...", + "no_text_available": "No OCR text available", + "no_text_explanation": "This note has not been processed for OCR text extraction or no text was found.", + "failed_to_load": "Failed to load OCR text", + "process_now": "Process OCR", + "processing": "Processing...", + "processing_started": "OCR processing has been started. Please wait a moment and refresh.", + "processing_failed": "Failed to start OCR processing", + "view_extracted_text": "View extracted text (OCR)" + }, "command_palette": { "tree-action-name": "Tree: {{name}}", "export_note_title": "Export Note", @@ -2345,6 +2374,7 @@ "llm": { "settings_title": "AI / LLM", "settings_description": "Configure AI and Large Language Model integrations.", + "feature_not_enabled": "Enable the LLM experimental feature in Settings → Advanced → Experimental features to use AI integrations.", "add_provider": "Add Provider", "add_provider_title": "Add AI Provider", "configured_providers": "Configured Providers", @@ -2356,6 +2386,30 @@ "delete_provider_confirmation": "Are you sure you want to delete the provider \"{{name}}\"?", "api_key": "API Key", "api_key_placeholder": "Enter your API key", - "cancel": "Cancel" + "cancel": "Cancel", + "mcp_title": "MCP (Model Context Protocol)", + "mcp_enabled": "MCP server", + "mcp_enabled_description": "Expose a Model Context Protocol (MCP) endpoint so that AI coding assistants (e.g. Claude Code, GitHub Copilot) can read and modify your notes. The endpoint is only accessible from localhost.", + "mcp_endpoint_title": "Endpoint URL", + "mcp_endpoint_description": "Add this URL to your AI assistant's MCP configuration", + "tools": { + "search_notes": "Search notes", + "get_note": "Get note", + "get_note_content": "Get note content", + "update_note_content": "Update note content", + "append_to_note": "Append to note", + "create_note": "Create note", + "get_attributes": "Get attributes", + "get_attribute": "Get attribute", + "set_attribute": "Set attribute", + "delete_attribute": "Delete attribute", + "get_child_notes": "Get child notes", + "get_subtree": "Get subtree", + "load_skill": "Load skill", + "web_search": "Web search", + "note_in_parent": " in ", + "get_attachment": "Get attachment", + "get_attachment_content": "Read attachment content" + } } } diff --git a/apps/client/src/translations/fr/translation.json b/apps/client/src/translations/fr/translation.json index 8c549b612f..6cba618672 100644 --- a/apps/client/src/translations/fr/translation.json +++ b/apps/client/src/translations/fr/translation.json @@ -29,9 +29,9 @@ "widget-render-error": { "title": "Rendu impossible d'un widget React custom" }, - "widget-missing-parent": "Le widget personnalisé ne possède pas la propriété obligatoire '{{property}}'.\n\nSi ce script est destiné à être exécuté sans élément d’interface utilisateur, utilisez plutôt '#run=frontendStartup'.", - "open-script-note": "Ouvrir la note du script", - "scripting-error": "Erreur de script personnalisée: {{title}}" + "widget-missing-parent": "Le widget personnalisé ne comprend pas de propriété '{{property}}' définie\n\nSi ce script est prévu pour être exécuté sans fonctionnalité UI, utilisez '#run=frontendStartup' plutôt.", + "open-script-note": "Ouvrir une note script", + "scripting-error": "Échec du script personnalisé : {{title}}" }, "add_link": { "add_link": "Ajouter un lien", @@ -49,7 +49,7 @@ "prefix": "Préfixe : ", "save": "Sauvegarder", "branch_prefix_saved": "Le préfixe de la branche a été enregistré.", - "edit_branch_prefix_multiple": "Modifier le préfixe de branche pour {{count}} branches", + "edit_branch_prefix_multiple": "Modifier le préfixe pour {{count}} branches", "branch_prefix_saved_multiple": "Le préfixe de la branche a été sauvegardé pour {{count}} branches.", "affected_branches": "Branches impactées ({{count}}):" }, @@ -117,7 +117,7 @@ "export_in_progress": "Exportation en cours : {{progressCount}}", "export_finished_successfully": "L'exportation s'est terminée avec succès.", "format_pdf": "PDF - pour l'impression ou le partage de documents.", - "share-format": "HTML pour la publication Web - utilise le même thème que celui utilisé pour les notes partagées, mais peut être publié sous forme de site Web statique." + "share-format": "HTML pour la publication Web : utilise le même thème que celui utilisé pour les notes partagées, mais peut être publié sous forme de site Web statique." }, "help": { "noteNavigation": "Navigation dans les notes", @@ -754,9 +754,9 @@ }, "zpetne_odkazy": { "relation": "relation", - "backlink_one": "{{count}} Lien inverse", - "backlink_many": "", - "backlink_other": "{{count}} Liens inverses" + "backlink_one": "{{count}} Rétrolien", + "backlink_many": "{{count}} Rétroliens", + "backlink_other": "{{count}} Rétrolien" }, "mobile_detail_menu": { "insert_child_note": "Insérer une note enfant", @@ -776,9 +776,9 @@ "filter-default": "Icônes par défaut", "icon_tooltip": "{{name}}\nPack d'icônes : {{iconPack}}", "no_results": "Aucune icône trouvée.", - "search_placeholder_one": "Rechercher {{number}} icônes dans {{count}} packs", - "search_placeholder_many": "Rechercher {{number}} icônes dans {{count}} packs", - "search_placeholder_other": "Rechercher les icônes {{number}} dans les paquets {{count}}", + "search_placeholder_one": "{{number}} icône recherchées parmi {{count}} packs.", + "search_placeholder_many": "{{number}} icônes recherchées parmi {{count}} packs.", + "search_placeholder_other": "{{number}} icônes recherchées parmi {{count}} packs.", "search_placeholder_filtered": "Rechercher {{number}} icônes dans {{name}}" }, "basic_properties": { @@ -795,7 +795,7 @@ "collapse_all_notes": "Réduire toutes les notes", "collapse": "Réduire", "expand": "Développer", - "invalid_view_type": "Type de vue non valide '{{type}}'", + "invalid_view_type": "Type de vue '{{type}}' non valide", "calendar": "Calendrier", "book_properties": "Propriétés de la collection", "table": "Tableau", @@ -1187,8 +1187,8 @@ }, "code_mime_types": { "title": "Types MIME disponibles dans la liste déroulante", - "tooltip_syntax_highlighting": "Souligner la syntaxe", - "tooltip_code_block_syntax": "Blocs de code dans les notes de texte", + "tooltip_syntax_highlighting": "Mise en évidence de la syntaxe", + "tooltip_code_block_syntax": "Blocs de code dans les notes textuelles", "tooltip_code_note_syntax": "Notes de code" }, "vim_key_bindings": { @@ -1539,7 +1539,13 @@ }, "highlights_list_2": { "title": "Accentuations", - "options": "Options" + "options": "Options", + "title_with_count_one": "{{count}} mise en évidence", + "title_with_count_many": "{{count}} mises en évidence", + "title_with_count_other": "{{count}} mises en évidence", + "modal_title": "Configurer les mises en évidence", + "menu_configure": "Configuration des mises en évidence...", + "no_highlights": "Aucune mise en évidence." }, "quick-search": { "placeholder": "Recherche rapide", @@ -1563,7 +1569,17 @@ "create-child-note": "Créer une note enfant", "unhoist": "Désactiver le focus", "toggle-sidebar": "Basculer la barre latérale", - "dropping-not-allowed": "Lâcher des notes à cet endroit n'est pas autorisé" + "dropping-not-allowed": "Déplacer des notes à cet emplacement n'est pas autorisé.", + "clone-indicator-tooltip": "Cette note a {{- count}} parents: {{- parents}}", + "clone-indicator-tooltip-single": "Cette note est clonée (1 parent supplémentaire: {{- parent}})", + "shared-indicator-tooltip": "Cette note est partagée publiquement", + "shared-indicator-tooltip-with-url": "Cette note est partagée publiquement sur: {{- url}}", + "subtree-hidden-tooltip_one": "{{count}} note enfant cachée de l'arbre", + "subtree-hidden-tooltip_many": "{{count}} notes enfants cachées de l'arbre", + "subtree-hidden-tooltip_other": "{{count}} notes enfants cachées de l'arbre", + "subtree-hidden-moved-title": "Ajouté à {{title}}", + "subtree-hidden-moved-description-collection": "Cette collection cache ses notes enfants dans l'arbre.", + "subtree-hidden-moved-description-other": "Les notes enfants sont cachées dans l'arbre pour cette note." }, "title_bar_buttons": { "window-on-top": "Épingler cette fenêtre au premier plan" @@ -1574,7 +1590,12 @@ "printing_pdf": "Export au format PDF en cours...", "print_report_title": "Imprimer le rapport", "print_report_collection_details_button": "Consulter les détails", - "print_report_collection_details_ignored_notes": "Notes ignorées" + "print_report_collection_details_ignored_notes": "Notes ignorées", + "print_report_error_title": "Échec de l'impression", + "print_report_stack_trace": "Trace de la pile", + "print_report_collection_content_one": "La {{count}} note de la collection n'a pas pu être imprimée car elle n'est pas prises en charge ou est protégée.", + "print_report_collection_content_many": "Les {{count}} notes de la collection n'ont pas pu être imprimées car elles ne sont pas prises en charge ou sont protégées.", + "print_report_collection_content_other": "Les {{count}} notes de la collection n'ont pas pu être imprimées car elles ne sont pas prises en charge ou sont protégées." }, "note_title": { "placeholder": "saisir le titre de la note ici...", @@ -1583,17 +1604,24 @@ "note_type_switcher_label": "Basculer de {{type}} à :", "note_type_switcher_others": "Autre type de note", "note_type_switcher_templates": "Modèle", - "note_type_switcher_collection": "Collection" + "note_type_switcher_collection": "Collection", + "edited_notes": "Notes éditées ce jour", + "promoted_attributes": "Attributs promus" }, "search_result": { "no_notes_found": "Aucune note n'a été trouvée pour les paramètres de recherche donnés.", - "search_not_executed": "La recherche n'a pas encore été exécutée. Cliquez sur le bouton \"Rechercher\" ci-dessus pour voir les résultats." + "search_not_executed": "La recherche n'a pas encore été exécutée.", + "search_now": "Recherche maintenant" }, "spacer": { "configure_launchbar": "Configurer la Barre de raccourcis" }, "sql_result": { - "no_rows": "Aucune ligne n'a été renvoyée pour cette requête" + "no_rows": "Aucune ligne n'a été renvoyée pour cette requête", + "not_executed": "La requête n'a pas encore été exécutée.", + "failed": "L'exécution de requêtes SQL a échoué", + "statement_result": "Résultat de la déclaration", + "execute_now": "Exécuter maintenant" }, "sql_table_schemas": { "tables": "Tableaux" @@ -1716,7 +1744,7 @@ "paste": "Coller", "paste-as-plain-text": "Coller comme texte brut", "search_online": "Rechercher «{{term}}» avec {{searchEngine}}", - "search_in_trilium": "Rechercher \"{{term}}\" dans Trilium" + "search_in_trilium": "Rechercher « {{term}} » dans Trilium" }, "image_context_menu": { "copy_reference_to_clipboard": "Copier la référence dans le presse-papiers", @@ -1726,14 +1754,15 @@ "open_note_in_new_tab": "Ouvrir la note dans un nouvel onglet", "open_note_in_new_split": "Ouvrir la note dans une nouvelle division", "open_note_in_new_window": "Ouvrir la note dans une nouvelle fenêtre", - "open_note_in_popup": "Édition rapide" + "open_note_in_popup": "Édition rapide", + "open_note_in_other_split": "Ouvrir la note dans l'autre volet" }, "electron_integration": { "desktop-application": "Application de bureau", "native-title-bar": "Barre de titre native", "native-title-bar-description": "Sous Windows et macOS, désactiver la barre de titre native rend l'application plus compacte. Sous Linux, le maintien de la barre de titre native permet une meilleure intégration avec le reste du système.", - "background-effects": "Activer les effets d'arrière-plan (Windows 11 uniquement)", - "background-effects-description": "L'effet Mica ajoute un fond flou et élégant aux fenêtres de l'application, créant une profondeur et un style moderne.", + "background-effects": "Activer les effets d'arrière-plan", + "background-effects-description": "Ajoute un arrière-plan flou et élégant aux fenêtres d'application, créant de la profondeur et un style moderne. La « barre de titre native » doit être désactivée.", "restart-app-button": "Redémarrez l'application pour afficher les modifications", "zoom-factor": "Facteur de zoom" }, @@ -1752,7 +1781,8 @@ "geo-map": { "create-child-note-title": "Créer une nouvelle note enfant et l'ajouter à la carte", "create-child-note-instruction": "Cliquez sur la carte pour créer une nouvelle note à cet endroit ou appuyez sur Échap pour la supprimer.", - "unable-to-load-map": "Impossible de charger la carte." + "unable-to-load-map": "Impossible de charger la carte.", + "create-child-note-text": "Ajouter le marqueur" }, "geo-map-context": { "open-location": "Ouvrir la position", @@ -1862,7 +1892,8 @@ "raster": "Trame", "vector_light": "Vecteur (clair)", "vector_dark": "Vecteur (foncé)", - "show-scale": "Afficher l'échelle" + "show-scale": "Afficher l'échelle", + "show-labels": "Afficher les noms des marqueurs" }, "table_context_menu": { "delete_row": "Supprimer la ligne" @@ -1883,7 +1914,7 @@ "add-column-placeholder": "Entrez le nom de la colonne...", "edit-note-title": "Cliquez pour modifier le titre de la note", "edit-column-title": "Cliquez pour modifier le titre de la colonne", - "column-already-exists": "Cette colonne existe déjà dans le tableau." + "column-already-exists": "Cette colonne existe déjà sur le tableau." }, "presentation_view": { "edit-slide": "Modifier cette diapositive", @@ -1913,22 +1944,30 @@ "next_theme_message": "Vous utilisez actuellement le thème hérité de l'ancienne version, souhaitez-vous essayer le nouveau thème ?", "next_theme_button": "Essayez le nouveau thème", "background_effects_title": "Les effets d'arrière-plan sont désormais stables", - "background_effects_message": "Sur les appareils Windows, les effets d'arrière-plan sont désormais parfaitement stables. Ils ajoutent une touche de couleur à l'interface utilisateur en floutant l'arrière-plan. Cette technique est également utilisée dans d'autres applications comme l'Explorateur Windows.", + "background_effects_message": "Sur les appareils Windows et macOS les effets d'arrière-plan sont désormais stables. Ils ajoutent une touche de couleur à l'interface utilisateur en floutant l'arrière-plan.", "background_effects_button": "Activer les effets d'arrière-plan", - "dismiss": "Rejeter" + "dismiss": "Rejeter", + "new_layout_title": "Nouvelle mise en page", + "new_layout_message": "Nous avons introduit une mise en page modernisée pour Trilium. Le ruban a été supprimé et intégré de manière transparente dans l'interface principale, avec une nouvelle barre d'état et des sections extensibles (telles que les attributs promus) reprenant les fonctions clés.\n\nLa nouvelle mise en page est activée par défaut et peut être temporairement désactivée via Options → Apparence.", + "new_layout_button": "Plus d'infos" }, "settings": { "related_settings": "Paramètres associés" }, "settings_appearance": { "related_code_blocks": "Schéma de coloration syntaxique pour les blocs de code dans les notes de texte", - "related_code_notes": "Schéma de couleurs pour les notes de code" + "related_code_notes": "Schéma de couleurs pour les notes de code", + "ui": "Interface utilisateur", + "ui_old_layout": "Ancienne mise en page", + "ui_new_layout": "Nouvelle mise en page" }, "units": { "percentage": "%" }, "pagination": { - "total_notes": "{{count}} notes" + "total_notes": "{{count}} notes", + "prev_page": "Page précédente", + "next_page": "Page suivante" }, "collections": { "rendering_error": "Impossible d'afficher le contenu en raison d'une erreur." @@ -1947,8 +1986,9 @@ "unknown_widget": "Widget inconnu pour « {{id}} »." }, "note_language": { - "not_set": "Non défini", - "configure-languages": "Configurer les langues..." + "not_set": "Langage non défini", + "configure-languages": "Configurer les langues...", + "help-on-languages": "Aide sur les langues de contenu..." }, "content_language": { "title": "Contenu des langues", @@ -2003,10 +2043,10 @@ "read-only-info": { "read-only-note": "Vous consultez actuellement une note en lecture seule.", "auto-read-only-note": "Cette note s'affiche en mode lecture seule pour un chargement plus rapide.", - "edit-note": "Editer la note" + "edit-note": "Modifier la note" }, "calendar_view": { - "delete_note": "Effacer la note..." + "delete_note": "Supprimer la note..." }, "media": { "play": "Lire (Espace)", @@ -2058,6 +2098,226 @@ "thinking": "Réflexion...", "thought_process": "Processus de réflexion", "tool_calls": "{{count}} appel(s) d'outil", - "input": "Entrée" + "input": "Entrée", + "result": "Résultat", + "error": "Erreur", + "tool_error": "échoué", + "total_tokens": "{{total}} jetons", + "tokens_detail": "{{prompt}} prompt + {{completion}} achèvement", + "tokens_used": "{{prompt}} prompt + {{completion}} achèvement = {{total}} jetons", + "tokens_used_with_cost": "{{prompt}} prompt + {{completion}} achèvement = {{total}} jetons (~${{cost}})", + "tokens_used_with_model": "{{model}}: {{prompt}} prompt + {{completion}} achèvement = {{total}} jetons", + "tokens_used_with_model_and_cost": "{{model}}: {{prompt}} prompt + {{completion}} achèvement = {{total}} jetons (~${{cost}})", + "tokens": "jetons", + "context_used": "{{percentage}}% utilisé", + "note_context_enabled": "Cliquez pour désactiver le contexte de la note : {{title}}", + "note_context_disabled": "Cliquez pour inclure la note actuelle dans le contexte", + "no_provider_message": "Aucun fournisseur d'IA configuré. Ajoutez en un pour commencer à discuter.", + "add_provider": "Ajouter un fournisseur d'IA" + }, + "sidebar_chat": { + "title": "discussion IA", + "launcher_title": "Ouvrir la discussion IA", + "new_chat": "Démarrer une nouvelle discussion", + "save_chat": "Enregistrer la discussion dans les notes", + "empty_state": "Démarrer une conversation", + "history": "Historique des discussions", + "recent_chats": "Discussions récentes", + "no_chats": "Pas de discussions précédentes" + }, + "note-color": { + "clear-color": "Retirer la couleur de la note", + "set-color": "Définir la couleur de la note", + "set-custom-color": "Définir la couleur personnalisée de la note" + }, + "popup-editor": { + "maximize": "Basculer sur l'éditeur complet" + }, + "server": { + "unknown_http_error_title": "Erreur de communication avec le serveur", + "unknown_http_error_content": "Code de statut: {{statusCode}}\nURL: {{method}} {{url}}\nMessage: {{message}}", + "traefik_blocks_requests": "Si vous utilisez le reverse proxy Traefik, celui-ci a introduit un changement de rupture qui affecte la communication avec le serveur." + }, + "tab_history_navigation_buttons": { + "go-back": "Revenir à la note précédente", + "go-forward": "Aller vers la note suivante" + }, + "breadcrumb": { + "hoisted_badge": "Remonté", + "hoisted_badge_title": "Redescendu", + "workspace_badge": "Espace de travail", + "scroll_to_top_title": "Aller au début de la note", + "create_new_note": "Créer une nouvelle note enfant", + "empty_hide_archived_notes": "Cacher les notes archivées" + }, + "breadcrumb_badges": { + "read_only_explicit": "Lecture seule", + "read_only_explicit_description": "Cette note a été paramétrée manuellement en lecture seule.\nCliquer pour temporairement l'éditer.", + "read_only_auto": "Lecture seule automatique", + "read_only_auto_description": "Cette note a été réglée automatiquement en mode lecture seule pour des raisons de performances. Cette limite automatique est réglable à partir des paramètres.\n\nCliquez pour la modifier temporairement.", + "read_only_temporarily_disabled": "Temporairement modifiable", + "read_only_temporarily_disabled_description": "Cette note est actuellement modifiable, mais elle est normalement en lecture seule. La note redeviendra en lecture seule dès que vous accéderez à une autre note.\n\nCliquez pour réactiver le mode lecture seule.", + "shared_publicly": "Partagés publiquement", + "shared_locally": "Partagé localement", + "shared_copy_to_clipboard": "Copier le lien vers le presse-papier", + "shared_open_in_browser": "Ouvrir le lien dans le navigateur", + "shared_unshare": "Supprimer le partage", + "clipped_note": "Clip Web", + "clipped_note_description": "Cette note a été initialement construite depuis l'url {{url}}.\n\nCliquez pour accéder à la page Web source.", + "execute_script": "Exécuter le script", + "execute_script_description": "Cette note est une note de script. Cliquez pour exécuter le script.", + "execute_sql": "Exécuter la commande SQL", + "execute_sql_description": "Cette note est une note SQL. Cliquer pour exécuter la requête SQL.", + "save_status_saved": "Enregister", + "save_status_saving": "Enregistrement...", + "save_status_unsaved": "Non sauvée", + "save_status_error": "La sauvegarde a échoué", + "save_status_saving_tooltip": "Les modifications sont enregistrées.", + "save_status_unsaved_tooltip": "Il y a des changements non enregistrés. Ils seront enregistrés automatiquement dans un instant.", + "save_status_error_tooltip": "Une erreur s'est produite lors de l'enregistrement de la note. Si possible, essayez de copier le contenu de la note ailleurs et de recharger l'application." + }, + "right_pane": { + "toggle": "Basculer le panneau de droite", + "custom_widget_go_to_source": "Aller sur le code source", + "empty_message": "Rien à afficher pour cette note", + "empty_button": "Cacher le panneau" + }, + "pdf": { + "attachments_one": "{{count}} pièce jointe", + "attachments_many": "{{count}} pièces jointes", + "attachments_other": "{{count}} pièces jointes", + "layers_one": "{{count}} couche", + "layers_many": "{{count}} couches", + "layers_other": "{{count}} couches", + "pages_one": "{{count}} page", + "pages_many": "{{count}} pages", + "pages_other": "{{count}} pages", + "pages_alt": "Page {{pageNumber}}", + "pages_loading": "Chargement..." + }, + "platform_indicator": { + "available_on": "Disponible sur {{platform}}" + }, + "mobile_tab_switcher": { + "title_one": "{{count}} onglet", + "title_many": "{{count}} onglets", + "title_other": "{{count}} onglets", + "more_options": "Autres options" + }, + "bookmark_buttons": { + "bookmarks": "Signets" + }, + "active_content_badges": { + "type_icon_pack": "pack d'icônes", + "type_backend_script": "Script backend", + "type_frontend_script": "Script frontend", + "type_widget": "Widget", + "type_app_css": "CSS personnalisé", + "type_render_note": "Note de rendu", + "type_web_view": "Vue Web", + "type_app_theme": "Thème personnalisé", + "toggle_tooltip_enable_tooltip": "Cliquer pour activer {{type}}.", + "toggle_tooltip_disable_tooltip": "Cliquer pour désactiver ce {{type}}.", + "menu_docs": "Ouvrir la documentation", + "menu_execute_now": "Exécuter le script maintenant", + "menu_run": "Démarrer automatiquement", + "menu_run_disabled": "Manuellement", + "menu_run_backend_startup": "Lorsque le backend commence", + "menu_run_hourly": "Horaire", + "menu_run_daily": "Quotidien", + "menu_run_frontend_startup": "Lorsque le frontend du bureau démarre", + "menu_run_mobile_startup": "Lorsque le frontend mobile démarre", + "menu_change_to_widget": "Passer au widget", + "menu_change_to_frontend_script": "Passer au script frontend", + "menu_theme_base": "Thème de base" + }, + "setup_form": { + "more_info": "En savoir plus" + }, + "mermaid": { + "placeholder": "Tapez le contenu de votre diagramme Mermaid ou utilisez l'un des diagrammes de l'échantillon ci-dessous.", + "sample_diagrams": "Diagrammes d 'exemple:", + "sample_flowchart": "Organigramme", + "sample_class": "Classe", + "sample_sequence": "Séquence", + "sample_entity_relationship": "Entité relationnelle", + "sample_state": "État", + "sample_mindmap": "Carte mentale", + "sample_architecture": "Architecture", + "sample_block": "Bloc", + "sample_c4": "C4", + "sample_gantt": "Gantt", + "sample_git": "Git", + "sample_kanban": "Kanban", + "sample_packet": "Paquet", + "sample_pie": "Camembert", + "sample_quadrant": "Quadrant", + "sample_radar": "Radar", + "sample_requirement": "Exigence", + "sample_sankey": "Sankey", + "sample_timeline": "Chronologie", + "sample_treemap": "Arborescence", + "sample_user_journey": "Utilisateur Journey", + "sample_xy": "XY", + "sample_venn": "Venn", + "sample_ishikawa": "Ishikawa" + }, + "mind-map": { + "addChild": "Ajouter un enfant", + "addParent": "Ajouter parent", + "addSibling": "Ajouter un frère", + "removeNode": "Supprimer le nœud", + "focus": "Mode Focus", + "cancelFocus": "Annuler le mode Focus", + "moveUp": "Monter", + "moveDown": "Descendre", + "link": "Lien", + "linkBidirectional": "Lien bidirectionnel", + "clickTips": "Cliquer sur le nœud cible", + "summary": "Résumé" + }, + "llm": { + "settings_title": "AI / LLM", + "settings_description": "Configurer les intégrations AI et les LLM (Large Language Model).", + "add_provider": "Ajouter le fournisseur", + "add_provider_title": "Ajouter le fournisseur d'IA", + "configured_providers": "Fournisseurs configurés", + "no_providers_configured": "Aucun fournisseur n'est encore configuré.", + "provider_name": "Nom", + "provider_type": "Fournisseur", + "actions": "Actions", + "delete_provider": "Supprimer", + "delete_provider_confirmation": "Êtes-vous sûr de vouloir supprimer le fournisseur \"{{name}}\" ?", + "api_key": "Clé API", + "api_key_placeholder": "Entrer votre clé API", + "cancel": "Annuler" + }, + "status_bar": { + "language_title": "Changer de langue", + "note_info_title": "Afficher les informations sur les notes (par exemple, dates, taille des notes)", + "backlinks_one": "{{count}} rétrolien", + "backlinks_many": "{{count}} rétroliens", + "backlinks_other": "{{count}} rétroliens", + "backlinks_title_one": "voir le rétrolien", + "backlinks_title_many": "voir les rétroliens", + "backlinks_title_other": "voir les rétroliens", + "attachments_one": "{{count}} pièce-jointe", + "attachments_many": "{{count}} pièces-jointes", + "attachments_other": "{{count}} pièces-jointes", + "attachments_title_one": "Voir la pièce-jointe dans un nouvel onglet", + "attachments_title_many": "Voir les pièces-jointes dans un nouvel onglet", + "attachments_title_other": "Voir les pièces-jointes dans un nouvel onglet", + "attributes_one": "{{count}} attribut", + "attributes_many": "{{count}} attributs", + "attributes_other": "{{count}} attributs", + "attributes_title": "Attributs propres et attributs hérités", + "note_paths_one": "{{count}} chemin", + "note_paths_many": "{{count}} chemins", + "note_paths_other": "{{count}} chemins", + "note_paths_title": "Chemins de la note", + "code_note_switcher": "Changer de langue" + }, + "attributes_panel": { + "title": "Attributs de la note" } } diff --git a/apps/client/src/translations/ga/translation.json b/apps/client/src/translations/ga/translation.json index d0f41408ce..b9be50e097 100644 --- a/apps/client/src/translations/ga/translation.json +++ b/apps/client/src/translations/ga/translation.json @@ -1127,7 +1127,9 @@ "title": "Roghanna Turgnamhacha", "disclaimer": "Is roghanna turgnamhacha iad seo agus d’fhéadfadh éagobhsaíocht a bheith mar thoradh orthu. Bain úsáid astu go cúramach.", "new_layout_name": "Leagan Amach Nua", - "new_layout_description": "Bain triail as an leagan amach nua le haghaidh cuma níos nua-aimseartha agus inúsáidteachta feabhsaithe. Tá sé faoi réir athruithe móra sna heisiúintí atá le teacht." + "new_layout_description": "Bain triail as an leagan amach nua le haghaidh cuma níos nua-aimseartha agus inúsáidteachta feabhsaithe. Tá sé faoi réir athruithe móra sna heisiúintí atá le teacht.", + "llm_name": "Comhrá AI / LLM", + "llm_description": "Cumasaigh an taobhbharra comhrá AI agus nótaí comhrá LLM faoi thiomáint ag samhlacha teanga móra." }, "fonts": { "theme_defined": "Téama sainmhínithe", @@ -1572,7 +1574,8 @@ "task-list": "Liosta Tascanna", "new-feature": "Nua", "collections": "Bailiúcháin", - "spreadsheet": "Scarbhileog" + "spreadsheet": "Scarbhileog", + "llm-chat": "Comhrá AI" }, "protect_note": { "toggle-on": "Cosain an nóta", @@ -2275,5 +2278,76 @@ "sample_xy": "XY", "sample_venn": "Venn", "sample_ishikawa": "Ishikawa" + }, + "llm_chat": { + "placeholder": "Clóscríobh teachtaireacht...", + "send": "Seol", + "sending": "Ag seoladh...", + "empty_state": "Tosaigh comhrá trí theachtaireacht a chlóscríobh thíos.", + "searching_web": "Ag cuardach an ghréasáin...", + "web_search": "Cuardach gréasáin", + "note_tools": "Rochtain nótaí", + "sources": "Foinsí", + "extended_thinking": "Smaointeoireacht leathnaithe", + "legacy_models": "Samhlacha oidhreachta", + "thinking": "Ag smaoineamh...", + "thought_process": "Próiseas smaointeoireachta", + "tool_calls": "{{count}} glao(í) uirlisí", + "input": "Ionchur", + "result": "Toradh", + "error": "Earráid", + "tool_error": "theip", + "total_tokens": "{{total}} comharthaí", + "tokens_detail": "leid {{prompt}} + críochnú {{completion}}", + "tokens_used": "{{prompt}} leid + {{completion}} críochnú = {{total}} comharthaí", + "tokens_used_with_cost": "{{prompt}} leid + {{completion}} críochnú = {{total}} comharthaí (~${{cost}})", + "tokens_used_with_model": "{{model}}: {{prompt}} leid + {{completion}} críochnú = {{total}} comharthaí", + "tokens_used_with_model_and_cost": "{{model}}: leid {{prompt}} + críochnú {{completion}} = {{total}} comharthaí (~${{cost}})", + "tokens": "comharthaí", + "context_used": "Úsáideadh {{percentage}}%", + "note_context_enabled": "Cliceáil chun comhthéacs nótaí a dhíchumasú: {{title}}", + "note_context_disabled": "Cliceáil chun an nóta reatha a chur san áireamh i gcomhthéacs", + "no_provider_message": "Níl aon soláthraí AI cumraithe. Cuir ceann leis chun comhrá a thosú.", + "add_provider": "Cuir Soláthraí AI leis" + }, + "sidebar_chat": { + "title": "Comhrá AI", + "launcher_title": "Oscail Comhrá AI", + "new_chat": "Tosaigh comhrá nua", + "save_chat": "Sábháil comhrá sna nótaí", + "empty_state": "Tosaigh comhrá", + "history": "Stair chomhrá", + "recent_chats": "Comhráite le déanaí", + "no_chats": "Gan aon chomhráite roimhe seo" + }, + "mind-map": { + "addChild": "Cuir páiste leis", + "addParent": "Cuir tuismitheoir leis", + "addSibling": "Cuir deartháir nó deirfiúr leis", + "removeNode": "Bain nód", + "focus": "Mód Fócais", + "cancelFocus": "Cealaigh Mód Fócais", + "moveUp": "Bog suas", + "moveDown": "Bog síos", + "link": "Nasc", + "linkBidirectional": "Nasc Déthreoch", + "clickTips": "Cliceáil ar an nód sprice le do thoil", + "summary": "Achoimre" + }, + "llm": { + "settings_title": "AI / LLM", + "settings_description": "Cumraigh comhtháthú idir Intleacht Shaorga agus Múnla Teanga Mór.", + "add_provider": "Cuir Soláthraí leis", + "add_provider_title": "Cuir Soláthraí AI leis", + "configured_providers": "Soláthraithe Cumraithe", + "no_providers_configured": "Níl aon soláthraithe cumraithe fós.", + "provider_name": "Ainm", + "provider_type": "Soláthraí", + "actions": "Gníomhartha", + "delete_provider": "Scrios", + "delete_provider_confirmation": "An bhfuil tú cinnte gur mian leat an soláthraí \"{{name}}\" a scriosadh?", + "api_key": "Eochair API", + "api_key_placeholder": "Cuir isteach d'eochair API", + "cancel": "Cealaigh" } } diff --git a/apps/client/src/translations/it/translation.json b/apps/client/src/translations/it/translation.json index dec6c85169..8776e64edd 100644 --- a/apps/client/src/translations/it/translation.json +++ b/apps/client/src/translations/it/translation.json @@ -520,7 +520,7 @@ "custom_name_label": "Nome del motore di ricerca personalizzato", "custom_name_placeholder": "Personalizza il nome del motore di ricerca", "custom_url_label": "L'URL del motore di ricerca personalizzato deve includere {keyword} come segnaposto per il termine di ricerca.", - "custom_url_placeholder": "Personalizza indirizzo url del motore di ricerca" + "custom_url_placeholder": "Personalizza indirizzo URL del motore di ricerca" }, "sql_table_schemas": { "tables": "Tabelle" @@ -2278,9 +2278,7 @@ "note_context_enabled": "Clicca qui per disattivare il contesto della nota: {{title}}", "note_context_disabled": "Clicca per includere la nota corrente nel contesto", "no_provider_message": "Non è stato configurato alcun fornitore di IA. Aggiungine uno per iniziare a chattare.", - "add_provider": "Aggiungi un fornitore di IA", - "role_user": "Tu", - "role_assistant": "Assistente" + "add_provider": "Aggiungi un fornitore di IA" }, "sidebar_chat": { "title": "Chat AI", diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index a7e959998b..7320a7ff10 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -486,7 +486,8 @@ "advanced": "高度", "export_as_image": "画像としてエクスポート", "export_as_image_png": "PNG (raster)", - "export_as_image_svg": "SVG (vector)" + "export_as_image_svg": "SVG (vector)", + "view_ocr_text": "OCR テキストを表示" }, "command_palette": { "export_note_title": "ノートをエクスポート", @@ -601,7 +602,8 @@ "new-feature": "New", "collections": "コレクション", "ai-chat": "AI チャット", - "spreadsheet": "スプレッドシート" + "spreadsheet": "スプレッドシート", + "llm-chat": "AI チャット" }, "edited_notes": { "no_edited_notes_found": "この日の編集されたノートはまだありません...", @@ -897,12 +899,28 @@ }, "images": { "images_section_title": "画像", - "download_images_automatically": "画像を自動的にダウンロードしてオフラインで使用可能にする。", - "download_images_description": "貼り付けられたHTMLにはオンライン画像への参照が含まれていることがありますが、Triliumはそれらの参照を見つけて画像をダウンロードし、オフラインで利用できるようにします。", - "enable_image_compression": "画像の圧縮を有効にする", - "max_image_dimensions": "画像の最大幅/高さ(この設定を超えると画像はリサイズされます)。", + "download_images_automatically": "画像を自動的にダウンロードする。", + "download_images_description": "貼り付けた HTML 内の参照画像をダウンロードし、オフラインでも利用できるようにする。", + "enable_image_compression": "画像の圧縮", + "max_image_dimensions": "画像の最大サイズ", "max_image_dimensions_unit": "ピクセル", - "jpeg_quality_description": "JPEGの品質(10 - 最低品質、100 - 最高品質、50 - 80を推奨)" + "jpeg_quality_description": "推奨範囲は50~85です。値が低いほどファイルサイズが小さくなり、値が高いほどディテールが保持されます。", + "enable_image_compression_description": "画像をアップロードまたは貼り付ける際に、画像を圧縮およびサイズ変更します。", + "max_image_dimensions_description": "このサイズを超える画像は自動的にサイズ変更されます", + "jpeg_quality": "JPEG 画質", + "ocr_section_title": "テキスト抽出(OCR)", + "ocr_related_content_languages": "コンテンツ言語(テキスト抽出に使用)", + "ocr_auto_process": "新しいファイルを自動処理", + "ocr_auto_process_description": "新しくアップロードまたは貼り付けられたファイルからテキストを自動的に抽出します。", + "ocr_min_confidence": "最低限の信頼度", + "ocr_confidence_description": "この信頼度閾値以上のテキストのみを抽出します。信頼度が低いほど抽出されるテキストの量は増えますが、精度が低下する可能性があります。", + "batch_ocr_title": "既存ファイルの処理", + "batch_ocr_description": "ノート内の既存の画像、PDF、Office 文書からテキストを抽出します。ファイル数によっては時間がかかる場合があります。", + "batch_ocr_start": "バッチ処理を開始します", + "batch_ocr_starting": "バッチ処理を開始しています...", + "batch_ocr_progress": "{{total}} ファイルのうち {{processed}} ファイルを処理中...", + "batch_ocr_completed": "バッチ処理が完了しました!{{processed}} ファイルを処理しました。", + "batch_ocr_error": "バッチ処理中にエラーが発生しました: {{error}}" }, "search_engine": { "title": "検索エンジン", @@ -915,7 +933,7 @@ "custom_name_label": "カスタム検索エンジンの名前", "custom_name_placeholder": "カスタム検索エンジンの名前", "custom_url_label": "カスタム検索エンジンのURLには、検索語句のプレースホルダーとして {keyword} を含める必要があります。", - "custom_url_placeholder": "カスタム検索エンジンのurl", + "custom_url_placeholder": "検索エンジンの URL をカスタマイズ", "save_button": "保存" }, "tray": { @@ -1102,7 +1120,7 @@ "calendar_root": "dayノートのルートとして使用するノートをマークします。このようにマークできるのは 1 つだけです。", "archived": "このラベルの付いたノートは、デフォルトでは検索結果に表示されません (ジャンプ先、リンクの追加ダイアログなどにも表示されません)。", "exclude_from_export": "ノート(サブツリーを含む)はノートのエクスポートには含まれません", - "run": "どのイベントでスクリプトを実行するかを定義します。可能な値は次の通り:\n
    \n
  • frontendStartup - Trilium フロントエンドが起動(または更新)されたとき。モバイルは除く
  • \n
  • mobileStartup - モバイルで Trilium フロントエンドが起動(または更新)されたとき。
  • \n
  • backendStartup - Trilium バックエンドが起動したとき
  • \n
  • hourly - 1時間に1回実行します。 runAtHour というラベルを追加して、実行時刻を指定できます。
  • \n
  • daily - 1日に1回実行
  • \n
", + "run": "スクリプトを実行するイベントを定義します。指定可能な値は以下の通りです:\n
    \n
  • frontendStartup - Trilium フロントエンドの起動時(または更新時)に実行されます。モバイルでは実行されません。
  • \n
  • mobileStartup - モバイルでの Trilium フロントエンドの起動時(または更新時)に実行されます。
  • \n
  • backendStartup - Trilium バックエンドの起動時。
  • \n
  • hourly - 1時間ごとに実行。 runAtHour というラベルを追加することで、実行時刻を指定できます。
  • \n
  • daily - 1日に1回実行。
  • \n
", "run_on_instance": "どの Trilium インスタンスでこれを実行するかを定義します。デフォルトはすべてのインスタンスです。", "run_at_hour": "何時に実行するかを指定します。 #run=hourly と併用してください。1日に複数回実行したい場合は、複数回定義できます。", "disable_inclusion": "このラベルが付いたスクリプトは親スクリプトの実行には含まれません。", @@ -1390,7 +1408,7 @@ }, "content_language": { "title": "コンテンツの言語", - "description": "読み取り専用または編集可能なテキストノートの基本プロパティセクションの言語選択に表示する言語を 1 つ以上選択します。これにより、スペルチェックや右から左へのサポートなどの機能が利用できるようになります。" + "description": "読み取り専用または編集可能なテキストノートの基本プロパティセクションの言語選択に表示する言語を 1 つ以上選択してください。これにより、スペルチェック、右から左へのサポート、テキスト抽出(OCR)などの機能が利用できるようになります。" }, "png_export_button": { "button_title": "図をPNG形式でエクスポート" @@ -2050,7 +2068,9 @@ "title": "実験オプション", "disclaimer": "これらのオプションは試験的なもので、動作が不安定になる可能性があります。注意してご使用ください。", "new_layout_name": "新しいレイアウト", - "new_layout_description": "よりモダンな外観と使いやすさが向上した新しいレイアウトをお試しください。今後のリリースで大幅な変更が加えられる可能性があります。" + "new_layout_description": "よりモダンな外観と使いやすさが向上した新しいレイアウトをお試しください。今後のリリースで大幅な変更が加えられる可能性があります。", + "llm_name": "AI / LLM チャット", + "llm_description": "大規模言語モデルを活用した AI チャットサイドバーと LLM チャットノートを有効にします。" }, "breadcrumb_badges": { "read_only_explicit": "読み取り専用", @@ -2215,5 +2235,89 @@ "sample_xy": "XY チャート", "sample_venn": "ベン図", "sample_ishikawa": "石川図" + }, + "llm_chat": { + "placeholder": "メッセージを入力してください…", + "send": "送信", + "sending": "送信中...", + "empty_state": "下記にメッセージを入力して会話を始めましょう。", + "searching_web": "ウェブ検索中…", + "web_search": "ウェブ検索", + "note_tools": "ノートへのアクセス", + "sources": "ソース", + "extended_thinking": "思考を拡張", + "legacy_models": "レガシーモデル", + "thinking": "思考中...", + "thought_process": "思考プロセス", + "tool_calls": "{{count}} 回のツール呼び出し", + "input": "入力", + "result": "結果", + "error": "エラー", + "tool_error": "失敗", + "total_tokens": "{{total}} トークン", + "tokens_detail": "{{prompt}} プロンプト + {{completion}} コンプリーション", + "tokens_used": "{{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン", + "tokens_used_with_cost": "{{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン (~${{cost}})", + "tokens_used_with_model": "{{model}}: {{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン", + "tokens_used_with_model_and_cost": "{{model}}: {{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン (~${{cost}})", + "tokens": "トークン", + "context_used": "{{percentage}} % 使用済み", + "note_context_enabled": "クリックしてノートのコンテキストを無効にする: {{title}}", + "note_context_disabled": "クリックして現在のノートをコンテキストに含める", + "no_provider_message": "AI プロバイダーが設定されていません。チャットを開始するには、プロバイダーを追加してください。", + "add_provider": "AI プロバイダーを追加" + }, + "sidebar_chat": { + "title": "AI チャット", + "launcher_title": "AI チャットを開く", + "new_chat": "新しいチャットを開始", + "save_chat": "チャットをノートに保存", + "empty_state": "会話を開始", + "history": "チャット履歴", + "recent_chats": "最近のチャット", + "no_chats": "過去のチャットはありません" + }, + "mind-map": { + "addChild": "子ノードを追加", + "addParent": "親ノードを追加", + "addSibling": "兄弟ノードを追加", + "removeNode": "ノードを削除", + "focus": "フォーカスモード", + "cancelFocus": "フォーカスモードを解除", + "moveUp": "上に移動", + "moveDown": "下に移動", + "link": "リンク", + "linkBidirectional": "双方向リンク", + "clickTips": "対象ノードをクリックしてください", + "summary": "概要" + }, + "llm": { + "settings_title": "AI / LLM", + "settings_description": "AI と大規模言語モデルの連携設定をします。", + "add_provider": "プロバイダーを追加", + "add_provider_title": "AI プロバイダーを追加", + "configured_providers": "設定済みプロバイダー", + "no_providers_configured": "まだプロバイダーが設定されていません。", + "provider_name": "名前", + "provider_type": "プロバイダー", + "actions": "アクション", + "delete_provider": "削除", + "delete_provider_confirmation": "プロバイダー \"{{name}}\" を削除してもよろしいですか?", + "api_key": "API キー", + "api_key_placeholder": "API キーを入力してください", + "cancel": "キャンセル" + }, + "ocr": { + "extracted_text": "抽出されたテキスト(OCR)", + "extracted_text_title": "抽出されたテキスト(OCR)", + "loading_text": "OCR テキストを読み込んでいます…", + "no_text_available": "OCR テキストが見つかりません", + "no_text_explanation": "このノートは OCR テキスト抽出処理が行われなかったか、テキストが見つかりませんでした。", + "failed_to_load": "OCR テキストの読み込みに失敗しました", + "process_now": "OCR 処理", + "processing": "処理中…", + "processing_started": "OCR 処理が開始されました。しばらくお待ちいただき、ページを更新してください。", + "processing_failed": "OCR 処理の開始に失敗しました", + "view_extracted_text": "抽出されたテキスト(OCR)を表示" } } diff --git a/apps/client/src/translations/ro/translation.json b/apps/client/src/translations/ro/translation.json index 06480bce54..eb084f51bd 100644 --- a/apps/client/src/translations/ro/translation.json +++ b/apps/client/src/translations/ro/translation.json @@ -875,7 +875,7 @@ "print_note": "Imprimare notiță", "re_render_note": "Reinterpretare notiță", "save_revision": "Salvează o nouă revizie", - "advanced": "Advansat", + "advanced": "Avansat", "search_in_note": "Caută în notiță", "convert_into_attachment_failed": "Nu s-a putut converti notița „{{title}}”.", "convert_into_attachment_successful": "Notița „{{title}}” a fost convertită în atașament.", diff --git a/apps/client/src/translations/ru/translation.json b/apps/client/src/translations/ru/translation.json index 818297e172..1551ea0f00 100644 --- a/apps/client/src/translations/ru/translation.json +++ b/apps/client/src/translations/ru/translation.json @@ -194,7 +194,7 @@ "row-insert-child": "Создать дочернюю заметку", "row-insert-below": "Добавить строку ниже", "row-insert-above": "Добавить строку выше", - "new-column-relation": "Связь" + "new-column-relation": "Отношение" }, "add_label": { "add_label": "Добавить метку", @@ -465,13 +465,13 @@ "related_notes_title": "Другие заметки с этой меткой", "label": "Метка", "label_definition": "Определение метки", - "relation": "Отношение", + "relation": "Детали отношения", "relation_definition": "Определение отношения", "disable_versioning": "отключает автоматическое версионирование. Полезно, например, для больших, но неважных заметок, например, для больших JS-библиотек, используемых для написания скриптов", "calendar_root": "отмечает заметку, которая должна использоваться в качестве корневой для заметок дня. Только одна должна быть отмечена как таковая.", "archived": "заметки с этой меткой не будут отображаться в результатах поиска по умолчанию (а также в диалоговых окнах «Перейти к», «Добавить ссылку» и т. д.).", "exclude_from_export": "заметки (с их поддеревьями) не будут включены ни в один экспорт заметок", - "run": "определяет, при каких событиях должен запускаться скрипт. Возможные значения:
    \n
  • frontendStartup — при запуске (или обновлении) фронтенда Trilium, но не на мобильном устройстве.
  • \n
  • mobileStartup — при запуске (или обновлении) фронтенда Trilium на мобильном устройстве.
  • \n
  • backendStartup — при запуске бэкенда Trilium.
  • \n
  • hourly — запускать каждый час. Для указания времени можно использовать дополнительную метку runAtHour.
  • \n
  • daily — запускать раз в день.
", + "run": "определяет, при каких событиях должен запускаться скрипт. Возможные значения:\n
    \n
  • frontendStartup — при запуске (или обновлении) фронтенда Trilium, но не на мобильном устройстве.
  • \n
  • mobileStartup — при запуске (или обновлении) фронтенда Trilium на мобильном устройстве.
  • \n
  • backendStartup — при запуске бэкенда Trilium.
  • \n
  • hourly — запускать каждый час. Для указания времени можно использовать дополнительную метку runAtHour.
  • \n
  • daily — запускать раз в день.
  • \n
", "run_on_instance": "Определить, на каком экземпляре Trilium это должно выполняться. По умолчанию — для всех экземпляров.", "run_at_hour": "В какой час это должно выполняться? Следует использовать вместе с #run=hourly. Можно задать несколько раз для большего количества запусков в течение дня.", "disable_inclusion": "скрипты с этой меткой не будут включены в выполнение родительского скрипта.", @@ -495,7 +495,7 @@ "is_owned_by_note": "принадлежит заметке", "and_more": "... и ещё {{count}}.", "app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.", - "title_template": "Заголовок по умолчанию для заметок, создаваемых как дочерние элементы данной заметки. Значение вычисляется как строка JavaScript\n и, таким образом, может быть дополнено динамическим контентом с помощью внедренных переменных now и parentNote. Примеры:\n \n
    \n
  • Литературные произведения ${parentNote.getLabelValue('authorName')}
  • \n
  • Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}
  • \n
\n \n Подробности см. в вики, документации API для parentNote и now.", + "title_template": "заголовок по умолчанию для заметок, создаваемых как дочерние элементы текущей. Значение вычисляется как строка JavaScript \n и может быть дополнено динамическим контентом с помощью внедренных переменных now и parentNote. Например:\n \n
    \n
  • Литературные произведения ${parentNote.getLabelValue('authorName')}
  • \n
  • Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}
  • \n
\n \n Подробности см. в вики, документации API для parentNote и now.", "icon_class": "значение этой метки добавляется в виде CSS-класса к значку в дереве, что помогает визуально различать заметки в дереве. Примером может служить bx bx-home — значки берутся из boxicons. Может использоваться в шаблонах заметок.", "share_favicon": "Заметка о фавиконе должна быть размещена на странице общего доступа. Обычно её назначают корневой папке общего доступа и делают наследуемой. Заметка о фавиконе также должна находиться в поддереве общего доступа. Рассмотрите возможность использования атрибута 'share_hidden_from_tree'.", "inbox": "расположение папки «Входящие» по умолчанию для новых заметок — при создании заметки с помощью кнопки «Новая заметка» на боковой панели заметки будут созданы как дочерние заметки в заметке, помеченной меткой #inbox.", @@ -548,7 +548,8 @@ "render_note": "заметки типа «Рендер HTML» будут отображаться с использованием кодовой заметки (HTML или скрипта), и необходимо указать с помощью этой связи, какую заметку следует отобразить", "widget_relation": "заметка, на которую ссылается отношение будет выполнена и отображена как виджет на боковой панели", "share_js": "JavaScript-заметка, которая будет добавлена на страницу общего доступа. JavaScript-заметка также должна находиться в общем поддереве. Рекомендуется использовать 'share_hidden_from_tree'.", - "other_notes_with_name": "Другие заметки с {{attributeType}} названием \"{{attributeName}}\"" + "other_notes_with_name": "Другие заметки с {{attributeType}} названием \"{{attributeName}}\"", + "textarea": "Многострочный текст" }, "command_palette": { "configure_launch_bar_description": "Откройте конфигурацию панели запуска, чтобы добавить или удалить элементы.", @@ -835,7 +836,8 @@ "task-list": "Список задач", "confirm-change": "Не рекомендуется менять тип заметки, если её содержимое не пустое. Вы всё равно хотите продолжить?", "ai-chat": "Чат с ИИ", - "spreadsheet": "Электронная таблица" + "spreadsheet": "Электронная таблица", + "llm-chat": "Чат с ИИ" }, "tree-context-menu": { "open-in-popup": "Быстрое редактирование", @@ -1015,7 +1017,7 @@ "open_sql_console_history": "Открыть историю консоли SQL", "show_shared_notes_subtree": "Поддерево общедоступных заметок", "switch_to_mobile_version": "Перейти на мобильную версию", - "switch_to_desktop_version": "Переключиться на версию для ПК", + "switch_to_desktop_version": "Переключиться на версию для компьютера", "new-version-available": "Доступно обновление", "download-update": "Обновить до {{latestVersion}}", "search_notes": "Поиск заметок" @@ -1637,11 +1639,11 @@ "start_dragging_relations": "Начните перетягивать отношения отсюда на другую заметку." }, "vacuum_database": { - "title": "Сжатие базы данных", - "description": "Это приведет к перестройке базы данных, что, как правило, приводит к уменьшению размера файла базы данных. Данные затронуты не будут.", - "button_text": "Сжать базу данных", - "vacuuming_database": "Сжатие БД...", - "database_vacuumed": "База данных была сжата" + "title": "Уменьшение размера файла базы данных", + "description": "Это приведет к перестройке базы данных, что, скорее всего, уменьшит размер её файла. Данные не будут изменены.", + "button_text": "Уменьшить размер файла базы данных", + "vacuuming_database": "Уменьшение размера файла базы данных...", + "database_vacuumed": "База данных была перестроена" }, "vim_key_bindings": { "use_vim_keybindings_in_code_notes": "Сочетания клавиш Vim", @@ -1763,8 +1765,8 @@ "database_integrity_check": { "title": "Проверка целостности базы данных", "description": "Это позволит проверить базу данных на предмет повреждений на уровне SQLite. Это может занять некоторое время в зависимости от размера базы данных.", - "check_button": "Проверить целостность БД", - "checking_integrity": "Проверка целостности БД...", + "check_button": "Проверить целостность базы данных", + "checking_integrity": "Проверка целостности базы данных...", "integrity_check_succeeded": "Проверка целостности прошла успешно - проблем не обнаружено.", "integrity_check_failed": "Проверка целостности завершена с ошибками: {{results}}" }, @@ -2115,7 +2117,9 @@ "new_layout_description": "Попробуйте новый современный и удобный дизайн. В будущих обновлениях возможны его существенные изменения.", "new_layout_name": "Новый дизайн", "title": "Экспериментальные параметры", - "disclaimer": "Эти параметры экспериментальные и могут повлиять на стабильность. Используйте с осторожностью." + "disclaimer": "Эти параметры экспериментальные и могут повлиять на стабильность. Используйте с осторожностью.", + "llm_name": "ИИ / LLM чат", + "llm_description": "Включить боковую панель чата с ИИ и заметки, созданные на основе больших языковых моделей (LLM)." }, "popup-editor": { "maximize": "Переключить на полный редактор" @@ -2197,5 +2201,123 @@ }, "setup_form": { "more_info": "Узнать больше" + }, + "media": { + "play": "Воспроизвести (пробел)", + "pause": "Пауза (пробел)", + "back-10s": "Назад на 10 секунд (стрелка влево)", + "forward-30s": "Вперёд на 30 секунд", + "mute": "Выключить звук (M)", + "unmute": "Включить звук (M)", + "playback-speed": "Скорость проигрывания", + "loop": "Зациклить", + "disable-loop": "Отключить зацикливание", + "rotate": "Повернуть", + "picture-in-picture": "Картинка в картинке", + "exit-picture-in-picture": "Выйти из режима \"картинка в картинке\"", + "fullscreen": "Режим полного экрана (F)", + "exit-fullscreen": "Выйти из режима полного экрана", + "unsupported-format": "Предпросмотр недоступен для данного формата файла:\n{{mime}}", + "zoom-to-fit": "Заполнить путём масштабирования", + "zoom-reset": "Сбросить заполнение путём масштабирования" + }, + "llm_chat": { + "placeholder": "Введите сообщение...", + "send": "Отправить", + "sending": "Отправка...", + "empty_state": "Начните общение, написав сообщение в поле ниже.", + "searching_web": "Поиск в сети...", + "web_search": "Поиск в сети", + "note_tools": "Доступ к заметке", + "sources": "Источники", + "extended_thinking": "Расширенное мышление", + "legacy_models": "Устаревшие модели", + "thinking": "Обработка...", + "thought_process": "Процесс обработки", + "tool_calls": "{{count}} вызов(а/ов) инструмента", + "input": "Ввод", + "result": "Результат", + "error": "Ошибка", + "tool_error": "ошибка", + "total_tokens": "{{total}} токен(а/ов)", + "tokens": "токены", + "context_used": "{{percentage}}% использовано", + "note_context_enabled": "Нажмите, чтобы отключить контекст заметки: {{title}}", + "note_context_disabled": "Нажмите, чтобы включить текущую заметку в контекст", + "no_provider_message": "Не выбран провайдер ИИ. Добавьте его для начала общения.", + "add_provider": "Добавить провайдера ИИ", + "tokens_detail": "{{prompt}} (промт) + {{completion}} (ответ)", + "tokens_used": "{{prompt}} (промт) + {{completion}} (ответ) = {{total}} токен(а/ов)", + "tokens_used_with_cost": "{{prompt}} (промт) + {{completion}} (ответ) = {{total}} токен(а/ов) (~${{cost}})", + "tokens_used_with_model": "{{model}}: {{prompt}} (промт) + {{completion}} (ответ) = {{total}} токен(а/ов)", + "tokens_used_with_model_and_cost": "{{model}}: {{prompt}} (промт) + {{completion}} (ответ) = {{total}} токен(а/ов) (~${{cost}})" + }, + "sidebar_chat": { + "title": "Чат с ИИ", + "launcher_title": "Чат с Open AI", + "new_chat": "Начать новый чат", + "save_chat": "Сохранить чат в заметках", + "empty_state": "Начать общение", + "history": "История чата", + "recent_chats": "Недавние чаты", + "no_chats": "Нет предыдущих чатов" + }, + "mermaid": { + "placeholder": "Введите содержимое вашей Mermaid диаграммы или используйте один из примеров ниже.", + "sample_diagrams": "Примеры диаграм:", + "sample_flowchart": "Блок-схема", + "sample_class": "Диаграмма классов", + "sample_sequence": "Диаграмма последовательностей", + "sample_entity_relationship": "Диаграмма \"Сущность — связь\"", + "sample_state": "Диаграмма состояний", + "sample_mindmap": "Ментальная карта", + "sample_architecture": "Архитектурная схема", + "sample_block": "Структурная схема", + "sample_gantt": "Диаграмма Ганта", + "sample_git": "Git", + "sample_kanban": "Канбан", + "sample_ishikawa": "Диаграмма Исикавы", + "sample_c4": "C4", + "sample_packet": "Диаграмма сетевых пакетов", + "sample_pie": "Круговая диаграмма", + "sample_quadrant": "Квадрантная диаграмма", + "sample_radar": "Радиолокационная схема", + "sample_requirement": "Диаграмма зависимостей", + "sample_sankey": "Диаграмма Сэнки", + "sample_timeline": "Временная диаграмма", + "sample_treemap": "Древовидная диаграмма", + "sample_user_journey": "Карта пользовательского пути", + "sample_xy": "XY", + "sample_venn": "Диаграмма Венна" + }, + "mind-map": { + "addChild": "Добавить дочерний элемент", + "addParent": "Добавить родительский элемент", + "addSibling": "Добавить элемент на том же уровне", + "removeNode": "Удалить узел", + "focus": "Режим фокусировки", + "cancelFocus": "Отключить режим фокусировки", + "moveUp": "Передвинуть выше", + "moveDown": "Передвинуть ниже", + "link": "Связь", + "linkBidirectional": "Двусторонняя связь", + "clickTips": "Пожалуйста, нажмите на целевой узел", + "summary": "Сводка" + }, + "llm": { + "settings_title": "ИИ / LLM", + "settings_description": "Настроить интеграции ИИ и больших языковых моделей.", + "add_provider": "Добавить провайдера", + "add_provider_title": "Добавить провайдера ИИ", + "configured_providers": "Настроенные провайдеры", + "no_providers_configured": "Ещё нет настроенных провайдеров.", + "provider_name": "Название", + "provider_type": "Провайдер", + "actions": "Действия", + "delete_provider": "Удалить", + "delete_provider_confirmation": "Вы уверены, что желаете удалить провайдера \"{{name}}\"?", + "api_key": "Ключ API", + "api_key_placeholder": "Введите ваш ключ API", + "cancel": "Отмена" } } diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index ea43851359..40ae3e49e9 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -336,6 +336,8 @@ export async function getExtendedWidgetType(note: FNote | null | undefined, note if (noteContext?.viewScope?.viewMode === "source") { resultingType = "readOnlyCode"; + } else if (noteContext.viewScope?.viewMode === "ocr") { + resultingType = "readOnlyOCRText"; } else if (noteContext.viewScope?.viewMode === "attachments") { resultingType = noteContext.viewScope.attachmentId ? "attachmentDetail" : "attachmentList"; } else if (noteContext.viewScope?.viewMode === "note-map") { diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index 0b864ace25..0c37c4a08a 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -25,6 +25,7 @@ interface NoteListProps { viewType: ViewTypeOptions | undefined; onReady?: (data: PrintReport) => void; onProgressChanged?(progress: number): void; + showTextRepresentation?: boolean; } type LazyLoadedComponent = ((props: ViewModeProps) => VNode | undefined); @@ -67,7 +68,7 @@ export default function NoteList(props: Pick) { const viewType = useNoteViewType(props.note); - return ; + return ; } export function CustomNoteList({ note, viewType, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, onReady, onProgressChanged, ...restProps }: NoteListProps) { diff --git a/apps/client/src/widgets/collections/interface.ts b/apps/client/src/widgets/collections/interface.ts index 4a965588df..15acbfa8e2 100644 --- a/apps/client/src/widgets/collections/interface.ts +++ b/apps/client/src/widgets/collections/interface.ts @@ -21,4 +21,5 @@ export interface ViewModeProps { media: ViewModeMedia; onReady(data: PrintReport): void; onProgressChanged?: ProgressChangedFn; + showTextRepresentation?: boolean; } diff --git a/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx b/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx index 238817d978..0e3d7d5add 100644 --- a/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx +++ b/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx @@ -23,7 +23,7 @@ import { ComponentChildren, TargetedMouseEvent } from "preact"; const contentSizeObserver = new ResizeObserver(onContentResized); -export function ListView({ note, noteIds: unfilteredNoteIds, highlightedTokens }: ViewModeProps<{}>) { +export function ListView({ note, noteIds: unfilteredNoteIds, highlightedTokens, showTextRepresentation }: ViewModeProps<{}>) { const expandDepth = useExpansionDepth(note); const noteIds = useFilteredNoteIds(note, unfilteredNoteIds); const { pageNotes, ...pagination } = usePagination(note, noteIds); @@ -37,13 +37,14 @@ export function ListView({ note, noteIds: unfilteredNoteIds, highlightedTokens } key={childNote.noteId} note={childNote} parentNote={note} expandDepth={expandDepth} highlightedTokens={highlightedTokens} - currentLevel={1} includeArchived={includeArchived} /> + currentLevel={1} includeArchived={includeArchived} + showTextRepresentation={showTextRepresentation} /> ))} ; } -export function GridView({ note, noteIds: unfilteredNoteIds, highlightedTokens }: ViewModeProps<{}>) { +export function GridView({ note, noteIds: unfilteredNoteIds, highlightedTokens, showTextRepresentation }: ViewModeProps<{}>) { const noteIds = useFilteredNoteIds(note, unfilteredNoteIds); const { pageNotes, ...pagination } = usePagination(note, noteIds); const [ includeArchived ] = useNoteLabelBoolean(note, "includeArchived"); @@ -56,7 +57,8 @@ export function GridView({ note, noteIds: unfilteredNoteIds, highlightedTokens } note={childNote} parentNote={note} highlightedTokens={highlightedTokens} - includeArchived={includeArchived} /> + includeArchived={includeArchived} + showTextRepresentation={showTextRepresentation} /> ))} @@ -91,13 +93,14 @@ function NoteList(props: NoteListProps) { } -function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expandDepth, includeArchived }: { +function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expandDepth, includeArchived, showTextRepresentation }: { note: FNote, parentNote: FNote, currentLevel: number, expandDepth: number, highlightedTokens: string[] | null | undefined; includeArchived: boolean; + showTextRepresentation?: boolean; }) { const [ isExpanded, setExpanded ] = useState(currentLevel <= expandDepth); @@ -113,7 +116,8 @@ function ListNoteCard({ note, parentNote, highlightedTokens, currentLevel, expan + includeArchivedNotes={includeArchived} + showTextRepresentation={showTextRepresentation} /> ); @@ -201,12 +207,13 @@ function NoteAttributes({ note }: { note: FNote }) { return ; } -export function NoteContent({ note, trim, noChildrenList, highlightedTokens, includeArchivedNotes }: { +export function NoteContent({ note, trim, noChildrenList, highlightedTokens, includeArchivedNotes, showTextRepresentation }: { note: FNote; trim?: boolean; noChildrenList?: boolean; highlightedTokens: string[] | null | undefined; includeArchivedNotes: boolean; + showTextRepresentation?: boolean; }) { const contentRef = useRef(null); const highlightSearch = useImperativeSearchHighlighlighting(highlightedTokens); @@ -230,7 +237,8 @@ export function NoteContent({ note, trim, noChildrenList, highlightedTokens, inc trim, noChildrenList, noIncludedNotes: true, - includeArchivedNotes + includeArchivedNotes, + showTextRepresentation }) .then(({ $renderedContent, type }) => { if (!contentRef.current) return; diff --git a/apps/client/src/widgets/mobile_widgets/TabSwitcher.tsx b/apps/client/src/widgets/mobile_widgets/TabSwitcher.tsx index ff92b6512e..32f21b94ab 100644 --- a/apps/client/src/widgets/mobile_widgets/TabSwitcher.tsx +++ b/apps/client/src/widgets/mobile_widgets/TabSwitcher.tsx @@ -27,6 +27,7 @@ const VIEW_MODE_ICON_MAPPINGS: Record, string> = { "contextual-help": "bx bx-help-circle", "note-map": "bx bxs-network-chart", attachments: "bx bx-paperclip", + ocr: "bx bx-text" }; export default function TabSwitcher() { diff --git a/apps/client/src/widgets/note_types.tsx b/apps/client/src/widgets/note_types.tsx index 15023fbcf0..f2f17dd590 100644 --- a/apps/client/src/widgets/note_types.tsx +++ b/apps/client/src/widgets/note_types.tsx @@ -12,7 +12,7 @@ import { TypeWidgetProps } from "./type_widgets/type_widget"; * A `NoteType` altered by the note detail widget, taking into consideration whether the note is editable or not and adding special note types such as an empty one, * for protected session or attachment information. */ -export type ExtendedNoteType = Exclude | "empty" | "readOnlyCode" | "readOnlyText" | "editableText" | "editableCode" | "attachmentDetail" | "attachmentList" | "protectedSession" | "sqlConsole" | "llmChat"; +export type ExtendedNoteType = Exclude | "empty" | "readOnlyCode" | "readOnlyText" | "readOnlyOCRText" | "editableText" | "editableCode" | "attachmentDetail" | "attachmentList" | "protectedSession" | "sqlConsole" | "llmChat"; export type TypeWidget = ((props: TypeWidgetProps) => VNode | JSX.Element | undefined); type NoteTypeView = () => (Promise<{ default: TypeWidget } | TypeWidget> | TypeWidget); @@ -78,6 +78,11 @@ export const TYPE_MAPPINGS: Record = { className: "note-detail-readonly-code", printable: true }, + readOnlyOCRText: { + view: () => import("./type_widgets/ReadOnlyTextRepresentation"), + className: "note-detail-ocr-text", + printable: true + }, editableCode: { view: async () => (await import("./type_widgets/code/Code")).EditableCode, className: "note-detail-code", diff --git a/apps/client/src/widgets/react/Slider.tsx b/apps/client/src/widgets/react/Slider.tsx index 515362ea47..fd1ea0c23c 100644 --- a/apps/client/src/widgets/react/Slider.tsx +++ b/apps/client/src/widgets/react/Slider.tsx @@ -3,6 +3,7 @@ interface SliderProps { onChange(newValue: number); min?: number; max?: number; + step?: number; title?: string; } diff --git a/apps/client/src/widgets/ribbon/NoteActions.tsx b/apps/client/src/widgets/ribbon/NoteActions.tsx index df47348ae1..84c75619ee 100644 --- a/apps/client/src/widgets/ribbon/NoteActions.tsx +++ b/apps/client/src/widgets/ribbon/NoteActions.tsx @@ -162,6 +162,7 @@ export function NoteContextMenu({ note, noteContext, itemsAtStart, itemsNearNote + {(syncServerHost && isElectron) && } diff --git a/apps/client/src/widgets/sidebar/SidebarChat.tsx b/apps/client/src/widgets/sidebar/SidebarChat.tsx index 1a5a9c80cc..5155126274 100644 --- a/apps/client/src/widgets/sidebar/SidebarChat.tsx +++ b/apps/client/src/widgets/sidebar/SidebarChat.tsx @@ -10,7 +10,7 @@ import { formatDateTime } from "../../utils/formatters"; import ActionButton from "../react/ActionButton.js"; import Dropdown from "../react/Dropdown.js"; import { FormListItem } from "../react/FormList.js"; -import { useActiveNoteContext, useEditorSpacedUpdate, useNote, useNoteProperty } from "../react/hooks.js"; +import { useActiveNoteContext, useNote, useNoteProperty, useSpacedUpdate } from "../react/hooks.js"; import NoItems from "../react/NoItems.js"; import ChatInputBar from "../type_widgets/llm_chat/ChatInputBar.js"; import ChatMessage from "../type_widgets/llm_chat/ChatMessage.js"; @@ -22,11 +22,15 @@ import RightPanelWidget from "./RightPanelWidget.js"; * Sidebar chat widget that appears in the right panel. * Uses a hidden LLM chat note for persistence across all notes. * The same chat persists when switching between notes. + * + * Unlike the LlmChat type widget which receives a valid FNote from the + * framework, the sidebar creates notes lazily. We use useSpacedUpdate with + * a direct server.put (using the string noteId) instead of useEditorSpacedUpdate + * (which requires an FNote and silently no-ops when it's null). */ export default function SidebarChat() { const [chatNoteId, setChatNoteId] = useState(null); const [recentChats, setRecentChats] = useState([]); - const spacedUpdateRef = useRef<{ scheduleUpdate: () => void }>(null); const historyDropdownRef = useRef(null); // Get the current active note context @@ -36,42 +40,35 @@ export default function SidebarChat() { const chatNote = useNote(chatNoteId); const chatTitle = useNoteProperty(chatNote, "title") || t("sidebar_chat.title"); + // Refs for stable access in the spaced update callback + const chatNoteIdRef = useRef(chatNoteId); + chatNoteIdRef.current = chatNoteId; + // Use shared chat hook with sidebar-specific options const chat = useLlmChat( // onMessagesChange - trigger save - () => spacedUpdateRef.current?.scheduleUpdate(), + () => spacedUpdate.scheduleUpdate(), { defaultEnableNoteTools: true, supportsExtendedThinking: true } ); - // Ref to access chat methods in callbacks without triggering re-runs const chatRef = useRef(chat); chatRef.current = chat; - // Persistence via useEditorSpacedUpdate (same mechanism as the LlmChat type widget). - // When chatNote is null (before lazy creation), saves are no-ops. - const spacedUpdate = useEditorSpacedUpdate({ - note: chatNote, - noteType: "llmChat", - noteContext: null, - getData: () => { - const content = chatRef.current.getContent(); - return { content: JSON.stringify(content) }; - }, - onContentChange: (content) => { - if (!content) { - chatRef.current.clearMessages(); - return; - } - try { - const parsed: LlmChatContent = JSON.parse(content); - chatRef.current.loadFromContent(parsed); - } catch (e) { - console.error("Failed to parse LLM chat content:", e); - chatRef.current.clearMessages(); - } + // Save directly via server.put using the string noteId. + // This avoids the FNote dependency that useEditorSpacedUpdate requires. + const spacedUpdate = useSpacedUpdate(async () => { + const noteId = chatNoteIdRef.current; + if (!noteId) return; + + const content = chatRef.current.getContent(); + try { + await server.put(`notes/${noteId}/data`, { + content: JSON.stringify(content) + }); + } catch (err) { + console.error("Failed to save chat:", err); } }); - spacedUpdateRef.current = spacedUpdate; // Update chat context when active note changes useEffect(() => { @@ -95,8 +92,17 @@ export default function SidebarChat() { if (existingChat) { setChatNoteId(existingChat.noteId); + // Load content + try { + const blob = await server.get<{ content: string }>(`notes/${existingChat.noteId}/blob`); + if (!cancelled && blob?.content) { + const parsed: LlmChatContent = JSON.parse(blob.content); + chatRef.current.loadFromContent(parsed); + } + } catch (err) { + console.error("Failed to load chat content:", err); + } } else { - // No existing chat - will create on first message setChatNoteId(null); chatRef.current.clearMessages(); } @@ -203,7 +209,17 @@ export default function SidebarChat() { // Save any pending changes before switching await spacedUpdate.updateNowIfNecessary(); - setChatNoteId(noteId); + // Load the selected chat's content + try { + const blob = await server.get<{ content: string }>(`notes/${noteId}/blob`); + if (blob?.content) { + const parsed: LlmChatContent = JSON.parse(blob.content); + setChatNoteId(noteId); + chatRef.current.loadFromContent(parsed); + } + } catch (err) { + console.error("Failed to load selected chat:", err); + } }, [chatNoteId, spacedUpdate]); return ( @@ -273,12 +289,6 @@ export default function SidebarChat() { {chat.messages.map(msg => ( ))} - {chat.toolActivity && !chat.streamingThinking && ( -
- - {chat.toolActivity} -
- )} {chat.isStreaming && chat.streamingThinking && ( )} - {chat.isStreaming && chat.streamingContent && ( + {chat.isStreaming && chat.streamingBlocks.length > 0 && ( 0 ? chat.pendingCitations : undefined }} diff --git a/apps/client/src/widgets/type_widgets/Attachment.tsx b/apps/client/src/widgets/type_widgets/Attachment.tsx index 041814589c..381313d6ba 100644 --- a/apps/client/src/widgets/type_widgets/Attachment.tsx +++ b/apps/client/src/widgets/type_widgets/Attachment.tsx @@ -27,8 +27,10 @@ import { FormDropdownDivider, FormListItem } from "../react/FormList"; import HelpButton from "../react/HelpButton"; import { useTriliumEvent } from "../react/hooks"; import Icon from "../react/Icon"; +import Modal from "../react/Modal"; import NoteLink from "../react/NoteLink"; import { ParentComponent, refToJQuerySelector } from "../react/react_utils"; +import { TextRepresentation } from "./ReadOnlyTextRepresentation"; import { TypeWidgetProps } from "./type_widget"; /** @@ -141,6 +143,8 @@ export function AttachmentDetail({ note, viewScope }: TypeWidgetProps) { function AttachmentInfo({ attachment, isFullDetail }: { attachment: FAttachment, isFullDetail?: boolean }) { const contentWrapper = useRef(null); + const [ ocrModalShown, setOcrModalShown ] = useState(false); + const supportsOcr = attachment.role === "image" || attachment.role === "file"; function refresh() { content_renderer.getRenderedContent(attachment, { imageHasZoom: isFullDetail }) @@ -181,7 +185,11 @@ function AttachmentInfo({ attachment, isFullDetail }: { attachment: FAttachment,
- + setOcrModalShown(true) : undefined} + />

{!isFullDetail ? ( }
+ + {supportsOcr && ( + setOcrModalShown(false)} + size="lg" + scrollable + > + + + )}

); } @@ -228,7 +252,7 @@ function DeletionAlert({ utcDateScheduledForErasureSince }: { utcDateScheduledFo ); } -function AttachmentActions({ attachment, copyAttachmentLinkToClipboard }: { attachment: FAttachment, copyAttachmentLinkToClipboard: () => void }) { +function AttachmentActions({ attachment, copyAttachmentLinkToClipboard, onShowOcr }: { attachment: FAttachment, copyAttachmentLinkToClipboard: () => void, onShowOcr?: () => void }) { const isElectron = utils.isElectron(); const fileUploadRef = useRef(null); @@ -262,6 +286,12 @@ function AttachmentActions({ attachment, copyAttachmentLinkToClipboard }: { atta icon="bx bx-link" onClick={copyAttachmentLinkToClipboard} >{t("attachments_actions.copy_link_to_clipboard")} + {onShowOcr && ( + {t("ocr.view_extracted_text")} + )} JSX.Element> = { _optionsAppearance: AppearanceSettings, _optionsShortcuts: ShortcutSettings, _optionsTextNotes: TextNoteSettings, _optionsCodeNotes: CodeNoteSettings, - _optionsImages: ImageSettings, + _optionsMedia: MediaSettings, _optionsSpellcheck: SpellcheckSettings, _optionsPassword: PasswordSettings, _optionsMFA: MultiFactorAuthenticationSettings, diff --git a/apps/client/src/widgets/type_widgets/ReadOnlyTextRepresentation.css b/apps/client/src/widgets/type_widgets/ReadOnlyTextRepresentation.css new file mode 100644 index 0000000000..724db970bf --- /dev/null +++ b/apps/client/src/widgets/type_widgets/ReadOnlyTextRepresentation.css @@ -0,0 +1,56 @@ +.text-representation { + padding: 10px; +} + +.text-representation-header { + margin-bottom: 10px; + padding: 8px 12px; + background-color: var(--main-background-color); + border: 1px solid var(--main-border-color); + border-radius: 4px; + font-weight: 500; +} + +.text-representation-loading { + text-align: center; + padding: 30px; + color: var(--muted-text-color); +} + +.text-representation-content { + white-space: pre-wrap; + line-height: 1.6; + border: 1px solid var(--main-border-color); + border-radius: 4px; + padding: 15px; + background-color: var(--accented-background-color); + min-height: 100px; + user-select: text; +} + +.text-representation-meta { + font-size: 0.9em; + color: var(--muted-text-color); + margin-top: 10px; + font-style: italic; +} + +.text-representation-empty { + color: var(--muted-text-color); + font-style: italic; + text-align: center; + padding: 30px; +} + +.text-representation-process-btn { + margin-top: 15px; +} + +.text-representation-error { + color: var(--error-color); + background-color: var(--error-background-color); + border: 1px solid var(--error-border-color); + padding: 10px; + border-radius: 4px; + margin-top: 10px; +} diff --git a/apps/client/src/widgets/type_widgets/ReadOnlyTextRepresentation.tsx b/apps/client/src/widgets/type_widgets/ReadOnlyTextRepresentation.tsx new file mode 100644 index 0000000000..9ee376f977 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/ReadOnlyTextRepresentation.tsx @@ -0,0 +1,131 @@ +import "./ReadOnlyTextRepresentation.css"; + +import type { TextRepresentationResponse } from "@triliumnext/commons"; +import { useEffect, useState } from "preact/hooks"; + +import { t } from "../../services/i18n"; +import server from "../../services/server"; +import toast from "../../services/toast"; +import { TypeWidgetProps } from "./type_widget"; + +type State = + | { kind: "loading" } + | { kind: "loaded"; text: string } + | { kind: "empty" } + | { kind: "error"; message: string }; + +interface TextRepresentationProps { + /** The API path to fetch OCR text from (e.g. `ocr/notes/{id}/text`). */ + textUrl: string; + /** The API path to trigger OCR processing (e.g. `ocr/process-note/{id}`). */ + processUrl: string; +} + +export default function ReadOnlyTextRepresentation({ note }: TypeWidgetProps) { + return ( + + ); +} + +export function TextRepresentation({ textUrl, processUrl }: TextRepresentationProps) { + const [ state, setState ] = useState({ kind: "loading" }); + const [ processing, setProcessing ] = useState(false); + + async function fetchText() { + setState({ kind: "loading" }); + + try { + const response = await server.get(textUrl); + + if (!response.success) { + setState({ kind: "error", message: response.message || t("ocr.failed_to_load") }); + return; + } + + if (!response.hasOcr || !response.text) { + setState({ kind: "empty" }); + return; + } + + setState({ kind: "loaded", text: response.text }); + } catch (error: any) { + console.error("Error loading text representation:", error); + setState({ kind: "error", message: error.message || t("ocr.failed_to_load") }); + } + } + + useEffect(() => { fetchText(); }, [ textUrl ]); + + async function processOCR() { + setProcessing(true); + try { + const response = await server.post<{ success: boolean; message?: string }>(processUrl, { forceReprocess: true }); + if (response.success) { + toast.showMessage(t("ocr.processing_started")); + setTimeout(fetchText, 2000); + } else { + toast.showError(response.message || t("ocr.processing_failed")); + } + } catch { + // Server errors (4xx/5xx) are already shown as toasts by server.ts. + } finally { + setProcessing(false); + } + } + + return ( +
+
+ {" "}{t("ocr.extracted_text_title")} +
+ + {state.kind === "loading" && ( +
+ {" "}{t("ocr.loading_text")} +
+ )} + + {state.kind === "loaded" && ( + <> +
+ {state.text} +
+ + )} + + {state.kind === "empty" && ( + <> +
+ {" "}{t("ocr.no_text_available")} +
+
+ {t("ocr.no_text_explanation")} +
+ + )} + + {state.kind === "error" && ( +
+ {" "}{state.message} +
+ )} + + {state.kind !== "loading" && ( + + )} +
+ ); +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.css b/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.css new file mode 100644 index 0000000000..4599e6a511 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.css @@ -0,0 +1,169 @@ +/* Input form */ +.llm-chat-input-form { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding-top: 1rem; + border-top: 1px solid var(--main-border-color); +} + +.llm-chat-input { + flex: 1; + min-height: 60px; + max-height: 200px; + resize: vertical; + padding: 0.75rem; + border: 1px solid var(--main-border-color); + border-radius: 8px; + font-family: inherit; + font-size: inherit; + background: var(--main-background-color); + color: var(--main-text-color); +} + +.llm-chat-input:focus { + outline: none; + border-color: var(--main-selection-color); + box-shadow: 0 0 0 2px var(--main-selection-color-soft, rgba(0, 123, 255, 0.25)); +} + +.llm-chat-input:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +/* Options row */ +.llm-chat-options { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.llm-chat-send-btn { + margin-left: auto; + font-size: 1.25rem; +} + +.llm-chat-send-btn.disabled { + opacity: 0.4; +} + +/* Model selector */ +.llm-chat-model-selector { + display: flex; + align-items: center; + gap: 0.375rem; + font-size: 0.85rem; + color: var(--muted-text-color); +} + +.llm-chat-model-selector .bx { + font-size: 1rem; +} + +.llm-chat-model-selector .dropdown { + display: flex; + + small { + margin-left: 0.5em; + color: var(--muted-text-color); + } + + /* Position legacy models submenu to open upward */ + .dropdown-submenu .dropdown-menu { + bottom: 0; + top: auto; + } +} + +.llm-chat-model-select.select-button { + padding: 0.25rem 0.5rem; + border: 1px solid var(--main-border-color); + border-radius: 4px; + background: var(--main-background-color); + color: var(--main-text-color); + font-family: inherit; + font-size: 0.85rem; + cursor: pointer; + min-width: 140px; + text-align: left; +} + +.llm-chat-model-select.select-button:focus { + outline: none; + border-color: var(--main-selection-color); +} + +.llm-chat-model-select.select-button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* Note context toggle */ +.llm-chat-note-context.tn-low-profile { + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0.5; + background: none; + border: none; +} + +.llm-chat-note-context.tn-low-profile:hover:not(:disabled) { + opacity: 0.8; + background: none; +} + +.llm-chat-note-context.tn-low-profile.active { + opacity: 1; +} + +/* Context window indicator */ +.llm-chat-context-indicator { + display: flex; + align-items: center; + gap: 0.375rem; + margin-left: 0.5rem; + cursor: help; +} + +.llm-chat-context-pie { + width: 14px; + height: 14px; + border-radius: 50%; + flex-shrink: 0; +} + +.llm-chat-context-text { + font-size: 0.75rem; + color: var(--muted-text-color); +} + +/* No provider state */ +.llm-chat-no-provider { + display: flex; + align-items: center; + justify-content: center; + padding: 1rem; + border-top: 1px solid var(--main-border-color); +} + +.llm-chat-no-provider-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 0.75rem; + text-align: center; + color: var(--muted-text-color); +} + +.llm-chat-no-provider-icon { + font-size: 2rem; + opacity: 0.5; +} + +.llm-chat-no-provider-content p { + margin: 0; + font-size: 0.9rem; +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.tsx b/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.tsx index cbf95fe1ea..6491a595b0 100644 --- a/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.tsx +++ b/apps/client/src/widgets/type_widgets/llm_chat/ChatInputBar.tsx @@ -1,3 +1,5 @@ +import "./ChatInputBar.css"; + import type { RefObject } from "preact"; import { useState, useCallback } from "preact/hooks"; diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.css b/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.css new file mode 100644 index 0000000000..f37f9abec9 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.css @@ -0,0 +1,320 @@ +/* Message wrapper and bubble */ +.llm-chat-message-wrapper { + position: relative; + margin-top: 1rem; + padding-bottom: 1.25rem; + max-width: 85%; +} + +.llm-chat-message-wrapper:first-child { + margin-top: 0; +} + +.llm-chat-message-wrapper-user { + margin-left: auto; + max-width: 70%; +} + +.llm-chat-message-wrapper-assistant { + width: 100%; +} + +/* Show footer only on hover */ +.llm-chat-message-wrapper:hover .llm-chat-footer { + opacity: 1; +} + +.llm-chat-message { + padding: 0.75rem 1rem; + border-radius: 8px; + user-select: text; +} + +.llm-chat-message-user { + background: var(--accented-background-color); +} + +.llm-chat-message-assistant { + background: var(--main-background-color); + border: 1px solid var(--main-border-color); +} + +.llm-chat-message-role { + font-weight: 600; + margin-bottom: 0.25rem; + font-size: 0.8rem; + color: var(--muted-text-color); +} + +.llm-chat-message-content { + word-wrap: break-word; + line-height: 1.5; +} + +/* Preserve whitespace only for user messages (plain text) */ +.llm-chat-message-user .llm-chat-message-content { + white-space: pre-wrap; +} + +.llm-chat-cursor { + display: inline-block; + width: 8px; + height: 1.1em; + background: currentColor; + margin-left: 2px; + vertical-align: text-bottom; + animation: llm-chat-blink 1s infinite; +} + +@keyframes llm-chat-blink { + 0%, 50% { opacity: 1; } + 51%, 100% { opacity: 0; } +} + +.expandable-card.llm-chat-citations-card { + max-width: 100%; +} + +/* Citations table (inside an expandable card) */ +.llm-chat-citations-list { + width: 100%; + border-collapse: collapse; + font-size: 0.8rem; +} + +.llm-chat-citations-list td { + padding: 0.25rem 0.75rem; +} + +.llm-chat-citations-list tr + tr td { + border-top: 1px solid var(--main-border-color); +} + +.llm-chat-citation-title { + max-width: 0; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.llm-chat-citation-title a { + color: var(--link-color, #007bff); + text-decoration: none; +} + +.llm-chat-citation-title a:hover { + text-decoration: underline; +} + +.llm-chat-citation-site { + white-space: nowrap; + color: var(--muted-text-color); + font-size: 0.75rem; + text-align: right; +} + +/* Error */ +.llm-chat-error { + padding: 0.75rem 1rem; + margin-bottom: 1rem; + border-radius: 8px; + background: var(--danger-background-color, #fee); + border: 1px solid var(--danger-border-color, #fcc); + color: var(--danger-text-color, #c00); + user-select: text; +} + +/* Error message (persisted in conversation) */ +.llm-chat-message-error { + background: var(--danger-background-color, #fee); + border: 1px solid var(--danger-border-color, #fcc); + color: var(--danger-text-color, #c00); +} + +.llm-chat-message-error .llm-chat-message-role { + color: var(--danger-text-color, #c00); +} + +.llm-chat-thinking-card.expandable-card { + width: 100%; + max-width: 100%; + border-style: dashed; + margin-right: 0; + margin: 0; +} + +.llm-chat-thinking-card .expandable-section-summary { + color: var(--muted-text-color); +} + +.llm-chat-thinking-content { + padding: 0.5rem 0.75rem; + font-size: 0.9rem; + color: var(--muted-text-color); + white-space: pre-wrap; +} + +/* Markdown styles */ +.llm-chat-markdown { + line-height: 1.6; +} + +.llm-chat-markdown p { + margin: 0 0 0.75em 0; +} + +.llm-chat-markdown p:last-child { + margin-bottom: 0; +} + +.llm-chat-markdown h1, +.llm-chat-markdown h2, +.llm-chat-markdown h3, +.llm-chat-markdown h4, +.llm-chat-markdown h5, +.llm-chat-markdown h6 { + margin: 1em 0 0.5em 0; + font-weight: 600; + line-height: 1.3; +} + +.llm-chat-markdown h1:first-child, +.llm-chat-markdown h2:first-child, +.llm-chat-markdown h3:first-child { + margin-top: 0; +} + +.llm-chat-markdown h1 { font-size: 1.4em; } +.llm-chat-markdown h2 { font-size: 1.25em; } +.llm-chat-markdown h3 { font-size: 1.1em; } + +.llm-chat-markdown ul, +.llm-chat-markdown ol { + margin: 0.5em 0; + padding-left: 1.5em; +} + +.llm-chat-markdown li { + margin: 0.25em 0; +} + +.llm-chat-markdown code { + background: var(--accented-background-color); + padding: 0.15em 0.4em; + border-radius: 4px; + font-family: var(--monospace-font-family, monospace); + font-size: 0.9em; +} + +.llm-chat-markdown pre { + background: var(--accented-background-color); + padding: 0.75em 1em; + border-radius: 6px; + overflow-x: auto; + margin: 0.75em 0; +} + +.llm-chat-markdown pre code { + background: none; + padding: 0; + font-size: 0.85em; +} + +.llm-chat-markdown blockquote { + margin: 0.75em 0; + padding: 0.5em 1em; + border-left: 3px solid var(--main-border-color); + background: var(--accented-background-color); +} + +.llm-chat-markdown blockquote p { + margin: 0; +} + +.llm-chat-markdown a { + color: var(--link-color, #007bff); + text-decoration: none; +} + +.llm-chat-markdown a:hover { + text-decoration: underline; +} + +.llm-chat-markdown hr { + border: none; + border-top: 1px solid var(--main-border-color); + margin: 1em 0; +} + +.llm-chat-markdown table { + border-collapse: collapse; + width: 100%; + margin: 0.75em 0; +} + +.llm-chat-markdown th, +.llm-chat-markdown td { + border: 1px solid var(--main-border-color); + padding: 0.5em 0.75em; + text-align: left; +} + +.llm-chat-markdown th { + background: var(--accented-background-color); + font-weight: 600; +} + +.llm-chat-markdown strong { + font-weight: 600; +} + +.llm-chat-markdown em { + font-style: italic; +} + +/* Message footer (timestamp + token usage, sits below the bubble) */ +.llm-chat-footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + display: flex; + align-items: center; + gap: 0.375rem; + padding: 0.125rem 0.5rem; + font-size: 0.7rem; + color: var(--muted-text-color); + cursor: default; + opacity: 0; + transition: opacity 0.15s ease; +} + +.llm-chat-footer-user { + justify-content: flex-end; +} + +.llm-chat-footer .bx { + font-size: 0.875rem; +} + +.llm-chat-footer-time { + cursor: help; +} + +.llm-chat-usage-model { + font-weight: 500; +} + +.llm-chat-usage-separator { + opacity: 0.5; +} + +.llm-chat-usage-tokens { + cursor: help; + font-family: var(--monospace-font-family, monospace); +} + +.llm-chat-usage-cost { + font-family: var(--monospace-font-family, monospace); +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.tsx b/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.tsx index e450521a1c..26a7f36c46 100644 --- a/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.tsx +++ b/apps/client/src/widgets/type_widgets/llm_chat/ChatMessage.tsx @@ -1,12 +1,17 @@ -import "./LlmChat.css"; +import "./ChatMessage.css"; +import DOMPurify from "dompurify"; import { Marked } from "marked"; -import { useMemo } from "preact/hooks"; +import { useEffect, useMemo, useRef } from "preact/hooks"; +import { type LlmCitation, createWikiLinkExtension } from "@triliumnext/commons"; + +import link from "../../../services/link.js"; import { t } from "../../../services/i18n.js"; import utils from "../../../services/utils.js"; -import { SanitizedHtml } from "../../react/RawHtml.js"; -import { type ContentBlock, getMessageText, type StoredMessage, type ToolCall } from "./llm_chat_types.js"; +import { ExpandableCard, ExpandableSection } from "./ExpandableCard.js"; +import { type ContentBlock, getMessageText, type StoredMessage, type TextBlock, type ToolCallBlock } from "./llm_chat_types.js"; +import ToolCallCard from "./ToolCallCard.js"; function shortenNumber(n: number): string { if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`; @@ -14,80 +19,115 @@ function shortenNumber(n: number): string { return n.toString(); } -// Configure marked for safe rendering +// Configure marked for safe rendering with client-side URL format const markedInstance = new Marked({ breaks: true, // Convert \n to
gfm: true // GitHub Flavored Markdown }); +markedInstance.use({ + extensions: [createWikiLinkExtension({ formatHref: (id) => `#root/${id}` })] +}); -/** Parse markdown to HTML. Sanitization is handled by SanitizedHtml. */ +/** Parse markdown to HTML. */ function renderMarkdown(markdown: string): string { return markedInstance.parse(markdown) as string; } +/** Renders markdown content with reference link title loading. */ +function MarkdownContent({ html, isStreaming }: { html: string; isStreaming?: boolean }) { + const containerRef = useRef(null); + + useEffect(() => { + if (!containerRef.current) return; + + const referenceLinks = containerRef.current.querySelectorAll("a.reference-link"); + for (const el of referenceLinks) { + link.loadReferenceLinkTitle($(el), el.href); + } + }, [html]); + + return ( + <> +
+ {isStreaming && } + + ); +} + interface Props { message: StoredMessage; isStreaming?: boolean; } -function ToolCallCard({ toolCall }: { toolCall: ToolCall }) { - const classes = [ - "llm-chat-tool-call-inline", - toolCall.isError && "llm-chat-tool-call-error" - ].filter(Boolean).join(" "); +type ContentGroup = + | { type: "text"; block: TextBlock; index: number } + | { type: "tool_calls"; blocks: ToolCallBlock[]; index: number }; + +/** Extract domain + TLD from a hostname (e.g. "www.example.co.uk" → "example.co.uk"). */ +function extractDomain(hostname: string): string { + return hostname.replace(/^www\./, ""); +} + +function getUniqueSiteCount(citations: LlmCitation[]): number { + const domains = new Set(); + for (const c of citations) { + if (c.url) { + try { + domains.add(extractDomain(new URL(c.url).hostname)); + } catch { /* ignore invalid URLs */ } + } + } + return domains.size; +} + +function CitationsSection({ citations }: { citations: LlmCitation[] }) { + const siteCount = getUniqueSiteCount(citations); + const summary = t("llm_chat.sources_summary", { count: citations.length, sites: siteCount }); return ( -
- - - {toolCall.toolName} - {toolCall.isError && {t("llm_chat.tool_error")}} - -
-
- {t("llm_chat.input")}: -
{JSON.stringify(toolCall.input, null, 2)}
-
- {toolCall.result && ( -
- {toolCall.isError ? t("llm_chat.error") : t("llm_chat.result")}: -
{(() => {
-                            if (typeof toolCall.result === "string" && (toolCall.result.startsWith("{") || toolCall.result.startsWith("["))) {
+        
+            
+                
+                    
+                        {citations.map((citation, idx) => {
+                            const title = citation.title || citation.citedText?.slice(0, 80) || `Source ${idx + 1}`;
+                            let domain: string | null = null;
+                            if (citation.url) {
                                 try {
-                                    return JSON.stringify(JSON.parse(toolCall.result), null, 2);
-                                } catch {
-                                    return toolCall.result;
-                                }
+                                    domain = extractDomain(new URL(citation.url).hostname);
+                                } catch { /* ignore */ }
                             }
-                            return toolCall.result;
-                        })()}
-                    
-                )}
-            
-        
+
+                            return (
+                                
+                                    
+                                    {domain && (
+                                        
+                                    )}
+                                
+                            );
+                        })}
+                    
+                
+ {citation.url ? ( + + {title} + + ) : ( + {title} + )} + {domain}
+
+
); } -function renderContentBlocks(blocks: ContentBlock[], isStreaming?: boolean) { - return blocks.map((block, idx) => { - if (block.type === "text") { - const html = renderMarkdown(block.content); - return ( -
- - {isStreaming && idx === blocks.length - 1 && } -
- ); - } - if (block.type === "tool_call") { - return ; - } - return null; - }); -} - export default function ChatMessage({ message, isStreaming }: Props) { - const roleLabel = message.role === "user" ? t("llm_chat.role_user") : t("llm_chat.role_assistant"); const isError = message.type === "error"; const isThinking = message.type === "thinking"; const textContent = typeof message.content === "string" ? message.content : getMessageText(message.content); @@ -107,101 +147,41 @@ export default function ChatMessage({ message, isStreaming }: Props) { isThinking && "llm-chat-message-thinking" ].filter(Boolean).join(" "); - // Render thinking messages in a collapsible details element + // Render thinking messages in a collapsible card if (isThinking) { return ( -
- - - {t("llm_chat.thought_process")} - -
- {textContent} - {isStreaming && } -
-
+
+ + +
+ {textContent} + {isStreaming && } +
+
+
+
); } - // Legacy tool calls (from old format stored as separate field) - const legacyToolCalls = message.toolCalls; const hasBlockContent = Array.isArray(message.content); return (
-
- {isError ? "Error" : roleLabel} -
+ {isError &&
Error
}
{message.role === "assistant" && !isError ? ( hasBlockContent ? ( renderContentBlocks(message.content as ContentBlock[], isStreaming) ) : ( - <> - - {isStreaming && } - + ) ) : ( textContent )}
- {legacyToolCalls && legacyToolCalls.length > 0 && ( -
- - - {t("llm_chat.tool_calls", { count: legacyToolCalls.length })} - -
- {legacyToolCalls.map((tool) => ( - - ))} -
-
- )} {message.citations && message.citations.length > 0 && ( -
-
- - {t("llm_chat.sources")} -
-
    - {message.citations.map((citation, idx) => { - // Determine display text: title, URL hostname, or cited text - let displayText = citation.title; - if (!displayText && citation.url) { - try { - displayText = new URL(citation.url).hostname; - } catch { - displayText = citation.url; - } - } - if (!displayText) { - displayText = citation.citedText?.slice(0, 50) || `Source ${idx + 1}`; - } - - return ( -
  • - {citation.url ? ( - - {displayText} - - ) : ( - - {displayText} - - )} -
  • - ); - })} -
-
+ )}
@@ -242,3 +222,40 @@ export default function ChatMessage({ message, isStreaming }: Props) {
); } + +/** Group content blocks so that consecutive tool_calls are merged into one entry. */ +function groupContentBlocks(blocks: ContentBlock[]): ContentGroup[] { + const groups: ContentGroup[] = []; + + for (let i = 0; i < blocks.length; i++) { + const block = blocks[i]; + if (block.type === "tool_call") { + const last = groups[groups.length - 1]; + if (last?.type === "tool_calls") { + last.blocks.push(block); + } else { + groups.push({ type: "tool_calls", blocks: [block], index: i }); + } + } else { + groups.push({ type: "text", block, index: i }); + } + } + + return groups; +} + +function renderContentBlocks(blocks: ContentBlock[], isStreaming?: boolean) { + return groupContentBlocks(blocks).map((group) => { + if (group.type === "text") { + const html = renderMarkdown(group.block.content); + const isLastBlock = group.index === blocks.length - 1; + return ( +
+ +
+ ); + } + + return b.toolCall)} />; + }); +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ExpandableCard.css b/apps/client/src/widgets/type_widgets/llm_chat/ExpandableCard.css new file mode 100644 index 0000000000..e237bd2244 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/llm_chat/ExpandableCard.css @@ -0,0 +1,57 @@ +/* Expandable card — bordered container for collapsible sections */ +.expandable-card { + margin: 0.5rem 0; + max-width: 80%; + border: 1px solid var(--main-border-color); + border-radius: 8px; + font-size: 0.85rem; + overflow: hidden; +} + +/* Expandable section — collapsible details within a card */ +.expandable-section + .expandable-section { + border-top: 1px solid var(--main-border-color); +} + +.expandable-section-summary { + display: flex; + align-items: center; + gap: 0.25rem; + padding: 0.5rem 0.75rem; + cursor: pointer; + list-style: none; + font-weight: 500; + overflow: hidden; +} + +.expandable-section-label { + display: flex; + align-items: center; + gap: 0.25rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; +} + +.expandable-section-summary::-webkit-details-marker { + display: none; +} + +.expandable-section-summary > .bx { + font-size: 1rem; + margin-right: 0.15rem; +} + +.expandable-section-chevron { + margin-left: auto; + transition: transform 0.2s ease; +} + +.expandable-section[open] .expandable-section-chevron { + transform: rotate(180deg); +} + +.expandable-section-body { + padding: 0; +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ExpandableCard.tsx b/apps/client/src/widgets/type_widgets/llm_chat/ExpandableCard.tsx new file mode 100644 index 0000000000..2e12c08e64 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/llm_chat/ExpandableCard.tsx @@ -0,0 +1,40 @@ +import "./ExpandableCard.css"; + +import type { ComponentChildren } from "preact"; + +interface ExpandableSectionProps { + icon: string; + label: ComponentChildren; + className?: string; + children: ComponentChildren; +} + +/** A collapsible section within an ExpandableCard. */ +export function ExpandableSection({ icon, label, className, children }: ExpandableSectionProps) { + return ( +
+ + + {label} + + +
+ {children} +
+
+ ); +} + +interface ExpandableCardProps { + className?: string; + children: ComponentChildren; +} + +/** A bordered card that groups one or more ExpandableSections. */ +export function ExpandableCard({ className, children }: ExpandableCardProps) { + return ( +
+ {children} +
+ ); +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.css b/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.css index 567949e556..06af4bac6c 100644 --- a/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.css +++ b/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.css @@ -11,715 +11,3 @@ overflow-y: auto; padding-bottom: 1rem; } - -.llm-chat-message-wrapper { - position: relative; - margin-top: 1rem; - padding-bottom: 1.25rem; - max-width: 85%; -} - -.llm-chat-message-wrapper:first-child { - margin-top: 0; -} - -.llm-chat-message-wrapper-user { - margin-left: auto; -} - -.llm-chat-message-wrapper-assistant { - margin-right: auto; -} - -/* Show footer only on hover */ -.llm-chat-message-wrapper:hover .llm-chat-footer { - opacity: 1; -} - -.llm-chat-message { - padding: 0.75rem 1rem; - border-radius: 8px; - user-select: text; -} - -.llm-chat-message-user { - background: var(--accented-background-color); -} - -.llm-chat-message-assistant { - background: var(--main-background-color); - border: 1px solid var(--main-border-color); -} - -.llm-chat-message-role { - font-weight: 600; - margin-bottom: 0.25rem; - font-size: 0.8rem; - color: var(--muted-text-color); -} - -.llm-chat-message-content { - word-wrap: break-word; - line-height: 1.5; -} - -/* Preserve whitespace only for user messages (plain text) */ -.llm-chat-message-user .llm-chat-message-content { - white-space: pre-wrap; -} - -.llm-chat-cursor { - display: inline-block; - width: 8px; - height: 1.1em; - background: currentColor; - margin-left: 2px; - vertical-align: text-bottom; - animation: llm-chat-blink 1s infinite; -} - -@keyframes llm-chat-blink { - 0%, 50% { opacity: 1; } - 51%, 100% { opacity: 0; } -} - -/* Tool activity indicator */ -.llm-chat-tool-activity { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 1rem; - margin-bottom: 1rem; - border-radius: 8px; - background: var(--accented-background-color); - color: var(--muted-text-color); - font-size: 0.9rem; - max-width: 85%; -} - -.llm-chat-tool-spinner { - width: 16px; - height: 16px; - border: 2px solid var(--muted-text-color); - border-top-color: transparent; - border-radius: 50%; - animation: llm-chat-spin 0.8s linear infinite; -} - -@keyframes llm-chat-spin { - to { transform: rotate(360deg); } -} - -/* Citations */ -.llm-chat-citations { - margin-top: 0.75rem; - padding-top: 0.75rem; - border-top: 1px solid var(--main-border-color); -} - -.llm-chat-citations-label { - display: flex; - align-items: center; - gap: 0.25rem; - font-size: 0.8rem; - font-weight: 600; - color: var(--muted-text-color); - margin-bottom: 0.25rem; -} - -.llm-chat-citations-list { - margin: 0; - padding: 0; - list-style: none; - display: flex; - flex-wrap: wrap; - gap: 0.5rem; -} - -.llm-chat-citations-list li { - font-size: 0.8rem; -} - -.llm-chat-citations-list a { - color: var(--link-color, #007bff); - text-decoration: none; - padding: 0.125rem 0.5rem; - background: var(--accented-background-color); - border-radius: 4px; - display: inline-block; -} - -.llm-chat-citations-list a:hover { - text-decoration: underline; -} - -/* Error */ -.llm-chat-error { - padding: 0.75rem 1rem; - margin-bottom: 1rem; - border-radius: 8px; - background: var(--danger-background-color, #fee); - border: 1px solid var(--danger-border-color, #fcc); - color: var(--danger-text-color, #c00); - user-select: text; -} - -/* Error message (persisted in conversation) */ -.llm-chat-message-error { - background: var(--danger-background-color, #fee); - border: 1px solid var(--danger-border-color, #fcc); - color: var(--danger-text-color, #c00); -} - -.llm-chat-message-error .llm-chat-message-role { - color: var(--danger-text-color, #c00); -} - -/* Thinking message (collapsible) */ -.llm-chat-message-thinking { - background: var(--accented-background-color); - border: 1px dashed var(--main-border-color); - cursor: pointer; -} - -.llm-chat-thinking-summary { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.85rem; - font-weight: 500; - color: var(--muted-text-color); - padding: 0.25rem 0; - list-style: none; -} - -.llm-chat-thinking-summary::-webkit-details-marker { - display: none; -} - -.llm-chat-thinking-summary::before { - content: "▶"; - font-size: 0.7em; - transition: transform 0.2s ease; -} - -.llm-chat-message-thinking[open] .llm-chat-thinking-summary::before { - transform: rotate(90deg); -} - -.llm-chat-thinking-summary .bx { - font-size: 1rem; -} - -.llm-chat-thinking-content { - margin-top: 0.5rem; - padding-top: 0.5rem; - border-top: 1px solid var(--main-border-color); - font-size: 0.9rem; - color: var(--muted-text-color); - white-space: pre-wrap; -} - -/* Input form */ -.llm-chat-input-form { - display: flex; - flex-direction: column; - gap: 0.5rem; - padding-top: 1rem; - border-top: 1px solid var(--main-border-color); -} - -.llm-chat-input { - flex: 1; - min-height: 60px; - max-height: 200px; - resize: vertical; - padding: 0.75rem; - border: 1px solid var(--main-border-color); - border-radius: 8px; - font-family: inherit; - font-size: inherit; - background: var(--main-background-color); - color: var(--main-text-color); -} - -.llm-chat-input:focus { - outline: none; - border-color: var(--main-selection-color); - box-shadow: 0 0 0 2px var(--main-selection-color-soft, rgba(0, 123, 255, 0.25)); -} - -.llm-chat-input:disabled { - opacity: 0.6; - cursor: not-allowed; -} - -/* Options row */ -.llm-chat-options { - display: flex; - align-items: center; - gap: 0.75rem; -} - -.llm-chat-send-btn { - margin-left: auto; - font-size: 1.25rem; -} - -.llm-chat-send-btn.disabled { - opacity: 0.4; -} - -/* Model selector */ -.llm-chat-model-selector { - display: flex; - align-items: center; - gap: 0.375rem; - font-size: 0.85rem; - color: var(--muted-text-color); -} - -.llm-chat-model-selector .bx { - font-size: 1rem; -} - -.llm-chat-model-selector .dropdown { - display: flex; - - small { - margin-left: 0.5em; - color: var(--muted-text-color); - } - - /* Position legacy models submenu to open upward */ - .dropdown-submenu .dropdown-menu { - bottom: 0; - top: auto; - } -} - -.llm-chat-model-select.select-button { - padding: 0.25rem 0.5rem; - border: 1px solid var(--main-border-color); - border-radius: 4px; - background: var(--main-background-color); - color: var(--main-text-color); - font-family: inherit; - font-size: 0.85rem; - cursor: pointer; - min-width: 140px; - text-align: left; -} - -.llm-chat-model-select.select-button:focus { - outline: none; - border-color: var(--main-selection-color); -} - -.llm-chat-model-select.select-button:disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* Note context toggle */ -.llm-chat-note-context.tn-low-profile { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - opacity: 0.5; - background: none; - border: none; -} - -.llm-chat-note-context.tn-low-profile:hover:not(:disabled) { - opacity: 0.8; - background: none; -} - -.llm-chat-note-context.tn-low-profile.active { - opacity: 1; -} - -/* Markdown styles */ -.llm-chat-markdown { - line-height: 1.6; -} - -.llm-chat-markdown p { - margin: 0 0 0.75em 0; -} - -.llm-chat-markdown p:last-child { - margin-bottom: 0; -} - -.llm-chat-markdown h1, -.llm-chat-markdown h2, -.llm-chat-markdown h3, -.llm-chat-markdown h4, -.llm-chat-markdown h5, -.llm-chat-markdown h6 { - margin: 1em 0 0.5em 0; - font-weight: 600; - line-height: 1.3; -} - -.llm-chat-markdown h1:first-child, -.llm-chat-markdown h2:first-child, -.llm-chat-markdown h3:first-child { - margin-top: 0; -} - -.llm-chat-markdown h1 { font-size: 1.4em; } -.llm-chat-markdown h2 { font-size: 1.25em; } -.llm-chat-markdown h3 { font-size: 1.1em; } - -.llm-chat-markdown ul, -.llm-chat-markdown ol { - margin: 0.5em 0; - padding-left: 1.5em; -} - -.llm-chat-markdown li { - margin: 0.25em 0; -} - -.llm-chat-markdown code { - background: var(--accented-background-color); - padding: 0.15em 0.4em; - border-radius: 4px; - font-family: var(--monospace-font-family, monospace); - font-size: 0.9em; -} - -.llm-chat-markdown pre { - background: var(--accented-background-color); - padding: 0.75em 1em; - border-radius: 6px; - overflow-x: auto; - margin: 0.75em 0; -} - -.llm-chat-markdown pre code { - background: none; - padding: 0; - font-size: 0.85em; -} - -.llm-chat-markdown blockquote { - margin: 0.75em 0; - padding: 0.5em 1em; - border-left: 3px solid var(--main-border-color); - background: var(--accented-background-color); -} - -.llm-chat-markdown blockquote p { - margin: 0; -} - -.llm-chat-markdown a { - color: var(--link-color, #007bff); - text-decoration: none; -} - -.llm-chat-markdown a:hover { - text-decoration: underline; -} - -.llm-chat-markdown hr { - border: none; - border-top: 1px solid var(--main-border-color); - margin: 1em 0; -} - -.llm-chat-markdown table { - border-collapse: collapse; - width: 100%; - margin: 0.75em 0; -} - -.llm-chat-markdown th, -.llm-chat-markdown td { - border: 1px solid var(--main-border-color); - padding: 0.5em 0.75em; - text-align: left; -} - -.llm-chat-markdown th { - background: var(--accented-background-color); - font-weight: 600; -} - -.llm-chat-markdown strong { - font-weight: 600; -} - -.llm-chat-markdown em { - font-style: italic; -} - -/* Tool calls display */ -.llm-chat-tool-calls { - margin-top: 0.75rem; - padding-top: 0.75rem; - border-top: 1px solid var(--main-border-color); -} - -.llm-chat-tool-calls-summary { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.85rem; - font-weight: 500; - color: var(--muted-text-color); - padding: 0.25rem 0; - cursor: pointer; - list-style: none; -} - -.llm-chat-tool-calls-summary::-webkit-details-marker { - display: none; -} - -.llm-chat-tool-calls-summary::before { - content: "▶"; - font-size: 0.7em; - transition: transform 0.2s ease; -} - -.llm-chat-tool-calls[open] .llm-chat-tool-calls-summary::before { - transform: rotate(90deg); -} - -.llm-chat-tool-calls-summary .bx { - font-size: 1rem; -} - -.llm-chat-tool-calls-list { - margin-top: 0.5rem; - display: flex; - flex-direction: column; - gap: 0.75rem; -} - -.llm-chat-tool-call { - background: var(--accented-background-color); - border-radius: 6px; - padding: 0.75rem; - font-size: 0.85rem; -} - -.llm-chat-tool-call-name { - font-weight: 600; - margin-bottom: 0.5rem; - color: var(--main-text-color); - font-family: var(--monospace-font-family, monospace); -} - -.llm-chat-tool-call-input, -.llm-chat-tool-call-result { - margin-top: 0.5rem; -} - -.llm-chat-tool-call-input strong, -.llm-chat-tool-call-result strong { - display: block; - font-size: 0.75rem; - color: var(--muted-text-color); - margin-bottom: 0.25rem; -} - -.llm-chat-tool-call pre { - margin: 0; - padding: 0.5rem; - background: var(--main-background-color); - border-radius: 4px; - overflow-x: auto; - font-size: 0.8rem; - font-family: var(--monospace-font-family, monospace); - max-height: 200px; - overflow-y: auto; -} - -/* Inline tool call cards (timeline style) */ -.llm-chat-tool-call-inline { - margin: 0.5rem 0; - background: var(--accented-background-color); - border-radius: 6px; - border-left: 3px solid var(--muted-text-color); - font-size: 0.85rem; -} - -.llm-chat-tool-call-inline-summary { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.5rem 0.75rem; - cursor: pointer; - list-style: none; - font-weight: 500; - color: var(--muted-text-color); - font-family: var(--monospace-font-family, monospace); -} - -.llm-chat-tool-call-inline-summary::-webkit-details-marker { - display: none; -} - -.llm-chat-tool-call-inline-summary::before { - content: "▶"; - font-size: 0.7em; - transition: transform 0.2s ease; -} - -.llm-chat-tool-call-inline[open] .llm-chat-tool-call-inline-summary::before { - transform: rotate(90deg); -} - -.llm-chat-tool-call-inline-summary .bx { - font-size: 1rem; -} - -.llm-chat-tool-call-inline-body { - padding: 0 0.75rem 0.75rem; -} - -.llm-chat-tool-call-inline-body pre { - margin: 0; - padding: 0.5rem; - background: var(--main-background-color); - border-radius: 4px; - overflow-x: auto; - font-size: 0.8rem; - font-family: var(--monospace-font-family, monospace); - max-height: 200px; - overflow-y: auto; -} - -.llm-chat-tool-call-inline-body strong { - display: block; - font-size: 0.75rem; - color: var(--muted-text-color); - margin-bottom: 0.25rem; -} - -.llm-chat-tool-call-inline-body .llm-chat-tool-call-result { - margin-top: 0.5rem; -} - -/* Tool call error styling */ -.llm-chat-tool-call-error { - border-left-color: var(--danger-color, #dc3545); -} - -.llm-chat-tool-call-error .llm-chat-tool-call-inline-summary { - color: var(--danger-color, #dc3545); -} - -.llm-chat-tool-call-error-badge { - font-size: 0.75rem; - font-weight: 400; - font-family: var(--main-font-family); - color: var(--danger-color, #dc3545); - opacity: 0.8; -} - -.llm-chat-tool-call-result-error pre { - color: var(--danger-color, #dc3545); -} - -/* Message footer (timestamp + token usage, sits below the bubble) */ -.llm-chat-footer { - position: absolute; - bottom: 0; - left: 0; - right: 0; - display: flex; - align-items: center; - gap: 0.375rem; - padding: 0.125rem 0.5rem; - font-size: 0.7rem; - color: var(--muted-text-color); - cursor: default; - opacity: 0; - transition: opacity 0.15s ease; -} - -.llm-chat-footer-user { - justify-content: flex-end; -} - -.llm-chat-footer .bx { - font-size: 0.875rem; -} - -.llm-chat-footer-time { - cursor: help; -} - -.llm-chat-usage-model { - font-weight: 500; -} - -.llm-chat-usage-separator { - opacity: 0.5; -} - -.llm-chat-usage-tokens { - cursor: help; - font-family: var(--monospace-font-family, monospace); -} - -.llm-chat-usage-cost { - font-family: var(--monospace-font-family, monospace); -} - -/* Context window indicator */ -.llm-chat-context-indicator { - display: flex; - align-items: center; - gap: 0.375rem; - margin-left: 0.5rem; - cursor: help; -} - -.llm-chat-context-pie { - width: 14px; - height: 14px; - border-radius: 50%; - flex-shrink: 0; -} - -.llm-chat-context-text { - font-size: 0.75rem; - color: var(--muted-text-color); -} - -/* No provider state */ -.llm-chat-no-provider { - display: flex; - align-items: center; - justify-content: center; - padding: 1rem; - border-top: 1px solid var(--main-border-color); -} - -.llm-chat-no-provider-content { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.75rem; - text-align: center; - color: var(--muted-text-color); -} - -.llm-chat-no-provider-icon { - font-size: 2rem; - opacity: 0.5; -} - -.llm-chat-no-provider-content p { - margin: 0; - font-size: 0.9rem; -} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.tsx b/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.tsx index f22e8016cc..301141f0d8 100644 --- a/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.tsx +++ b/apps/client/src/widgets/type_widgets/llm_chat/LlmChat.tsx @@ -65,12 +65,6 @@ export default function LlmChat({ note, ntxId, noteContext }: TypeWidgetProps) { {chat.messages.map(msg => ( ))} - {chat.toolActivity && !chat.streamingThinking && ( -
- - {chat.toolActivity} -
- )} {chat.isStreaming && chat.streamingThinking && ( )} - {chat.isStreaming && chat.streamingContent && ( + {chat.isStreaming && chat.streamingBlocks.length > 0 && ( 0 ? chat.pendingCitations : undefined }} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ToolCallCard.css b/apps/client/src/widgets/type_widgets/llm_chat/ToolCallCard.css new file mode 100644 index 0000000000..1de4319b8d --- /dev/null +++ b/apps/client/src/widgets/type_widgets/llm_chat/ToolCallCard.css @@ -0,0 +1,113 @@ +/* Tool call specific styles (card/section structure is in ExpandableCard.css) */ + +.llm-chat-tool-call-detail { + font-weight: 400; + color: var(--muted-text-color); +} + +.llm-chat-tool-call-note-ref { + font-weight: 400; + margin-left: 0.25rem; +} + +/* Section body (input + result) */ +.llm-chat-tool-call-input, +.llm-chat-tool-call-result { + padding: 0.5rem 0.75rem; + max-height: 300px; + overflow: auto; +} + +.llm-chat-tool-call-result { + border-top: 1px solid var(--main-border-color); +} + +.expandable-section-body pre { + margin: 0; + padding: 0.5rem; + background: var(--main-background-color); + border-radius: 4px; + font-size: 0.8rem; + font-family: var(--monospace-font-family, monospace); +} + +.llm-chat-tool-call-input strong, +.llm-chat-tool-call-result strong { + display: block; + font-size: 0.75rem; + color: var(--muted-text-color); + margin-bottom: 0.25rem; + text-transform: uppercase; +} + +/* Tool call key-value table */ +.llm-chat-tool-call-table { + width: 100%; + table-layout: auto; + border-collapse: collapse; + font-size: 0.8rem; + background: var(--main-background-color); + border-radius: 4px; + overflow: hidden; +} + +.llm-chat-tool-call-table td { + padding: 0.25rem 0; + padding-right: 0.75rem; + vertical-align: top; +} + +.llm-chat-tool-call-table tr:last-child td { + border-bottom: none; +} + +.llm-chat-tool-call-table-key { + font-weight: 600; + white-space: nowrap; + width: 0; + color: var(--muted-text-color); +} + +.llm-chat-tool-call-table-value pre { + margin: 0; + padding: 0; + background: none; + white-space: pre-wrap; + word-break: break-word; +} + +/* Nested tables */ +.llm-chat-tool-call-table-value .llm-chat-tool-call-table { + background: none; + width: auto; + min-width: 100%; +} + +.llm-chat-tool-call-table-array { + display: flex; + flex-direction: column; +} + +.llm-chat-tool-call-table-array > .llm-chat-tool-call-table { + background: none; +} + +.llm-chat-tool-call-table-array > .llm-chat-tool-call-table + .llm-chat-tool-call-table { + border-top: 1px solid var(--main-border-color); +} + +/* Tool call error styling */ +.llm-chat-tool-call-error .expandable-section-summary { + color: var(--danger-color, #dc3545); +} + +.llm-chat-tool-call-error-badge { + font-size: 0.75rem; + font-weight: 400; + color: var(--danger-color, #dc3545); + opacity: 0.8; +} + +.llm-chat-tool-call-result-error pre { + color: var(--danger-color, #dc3545); +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/ToolCallCard.tsx b/apps/client/src/widgets/type_widgets/llm_chat/ToolCallCard.tsx new file mode 100644 index 0000000000..aa766fd1b4 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/llm_chat/ToolCallCard.tsx @@ -0,0 +1,213 @@ +import "./ToolCallCard.css"; + +import { Trans } from "react-i18next"; + +import { t } from "../../../services/i18n.js"; +import { NewNoteLink } from "../../react/NoteLink.js"; +import { ExpandableCard, ExpandableSection } from "./ExpandableCard.js"; +import type { ToolCall } from "./llm_chat_types.js"; + +interface ToolCallContext { + /** The primary note the tool operates on or created. */ + noteId: string | null; + /** The parent note, shown as "in " for creation tools. */ + parentNoteId: string | null; + /** Plain-text detail (e.g. skill name, search query) when no note ref is available. */ + detailText: string | null; +} + +/** Try to extract a noteId from the tool call's result JSON. */ +function parseResultNoteId(toolCall: ToolCall): string | null { + if (!toolCall.result) return null; + try { + const result = typeof toolCall.result === "string" + ? JSON.parse(toolCall.result) + : toolCall.result; + return result?.noteId || null; + } catch { + return null; + } +} + +/** Extract contextual info from a tool call for display in the summary. */ +function getToolCallContext(toolCall: ToolCall): ToolCallContext { + const input = toolCall.input; + const parentNoteId = (input?.parentNoteId as string) || null; + + // For creation tools, the created note ID is in the result. + if (parentNoteId) { + const createdNoteId = parseResultNoteId(toolCall); + if (createdNoteId) { + return { noteId: createdNoteId, parentNoteId, detailText: null }; + } + } + + const noteId = (input?.noteId as string) || parentNoteId || parseResultNoteId(toolCall); + if (noteId) { + return { noteId, parentNoteId: null, detailText: null }; + } + + const detailText = (input?.name ?? input?.query) as string | undefined; + return { noteId: null, parentNoteId: null, detailText: detailText || null }; +} + +function toolCallIcon(toolCall: ToolCall): string { + if (toolCall.isError) return "bx bx-error-circle"; + if (!toolCall.result) return "bx bx-loader-alt bx-spin"; + + const name = toolCall.toolName; + if (name.includes("search")) return "bx bx-search"; + if (name.includes("note")) return "bx bx-note"; + if (name.includes("attribute")) return "bx bx-purchase-tag"; + if (name.includes("attachment")) return "bx bx-paperclip"; + if (name.includes("skill")) return "bx bx-book-open"; + if (name.includes("web")) return "bx bx-globe"; + return "bx bx-wrench"; +} + +/** Try to parse a JSON string into a structured value. */ +function tryParseJson(data: unknown): unknown { + if (typeof data === "string") { + try { + return JSON.parse(data); + } catch { + return data; + } + } + return data; +} + +/** Check if a value is a plain object (not null, not array). */ +function isPlainObject(value: unknown): value is Record { + return typeof value === "object" && value !== null && !Array.isArray(value); +} + +const MAX_TABLE_DEPTH = 2; + +/** Render a single value — recurse for objects/arrays up to max depth. */ +function ValueCell({ value, depth }: { value: unknown; depth: number }) { + if (value === null || value === undefined) return
;
+
+    // Beyond max depth, fall back to JSON.
+    if (depth >= MAX_TABLE_DEPTH) {
+        if (isPlainObject(value) || Array.isArray(value)) {
+            return 
{JSON.stringify(value, null, 2)}
; + } + return
{String(value)}
; + } + + if (isPlainObject(value)) { + return ; + } + + if (Array.isArray(value)) { + if (value.length === 0) return
{"[]"}
; + + // Array of objects: render each as a nested table. + if (value.every(isPlainObject)) { + return ( +
+ {value.map((item, idx) => ( + + ))} +
+ ); + } + + // Array of primitives: comma-separated. + return
{value.map(String).join(", ")}
; + } + + return
{String(value)}
; +} + +/** Renders a data object as a recursive two-column key-value table. */ +function KeyValueTable({ data, className, depth = 0 }: { data: unknown; className?: string; depth?: number }) { + const obj = tryParseJson(data); + + if (!isPlainObject(obj)) { + const raw = typeof data === "string" ? data : JSON.stringify(data, null, 2); + return
{raw}
; + } + + return ( + + + {Object.entries(obj).map(([key, value]) => ( + + + + + ))} + +
{key} + +
+ ); +} + +/** Build the label content for a tool call section. */ +function ToolCallLabel({ toolCall }: { toolCall: ToolCall }) { + const { noteId: refNoteId, parentNoteId: refParentId, detailText } = getToolCallContext(toolCall); + const hasError = toolCall.isError; + + return ( + <> + {t(`llm.tools.${toolCall.toolName}`, { defaultValue: toolCall.toolName })} + {detailText && ( + {detailText} + )} + {refNoteId && ( + + {refParentId ? ( + , + Parent: + } as any} + /> + ) : ( + + )} + + )} + {hasError && {t("llm_chat.tool_error")}} + + ); +} + +/** A single tool call section within a ToolCallCard. */ +function ToolCallSection({ toolCall }: { toolCall: ToolCall }) { + const hasError = toolCall.isError; + + return ( + } + className={hasError ? "llm-chat-tool-call-error" : ""} + > +
+ {t("llm_chat.input")} + +
+ {toolCall.result && ( +
+ {hasError ? t("llm_chat.error") : t("llm_chat.result")} + +
+ )} +
+ ); +} + +/** A card that groups one or more sequential tool calls together. */ +export default function ToolCallCard({ toolCalls }: { toolCalls: ToolCall[] }) { + return ( + + {toolCalls.map((tc, idx) => ( + + ))} + + ); +} diff --git a/apps/client/src/widgets/type_widgets/llm_chat/llm_chat_types.ts b/apps/client/src/widgets/type_widgets/llm_chat/llm_chat_types.ts index 767a886dae..d05bf291b5 100644 --- a/apps/client/src/widgets/type_widgets/llm_chat/llm_chat_types.ts +++ b/apps/client/src/widgets/type_widgets/llm_chat/llm_chat_types.ts @@ -42,11 +42,6 @@ export function getMessageText(content: string | ContentBlock[]): string { * Extract tool calls from message content blocks. */ export function getMessageToolCalls(message: StoredMessage): ToolCall[] { - // Legacy format: tool calls stored in separate field - if (message.toolCalls) { - return message.toolCalls; - } - // Block format: extract from content blocks if (Array.isArray(message.content)) { return message.content .filter((b): b is ToolCallBlock => b.type === "tool_call") @@ -64,8 +59,6 @@ export interface StoredMessage { citations?: LlmCitation[]; /** Message type for special rendering. Defaults to "message" if omitted. */ type?: MessageType; - /** @deprecated Tool calls are now inline in content blocks. Kept for backward compatibility. */ - toolCalls?: ToolCall[]; /** Token usage for this response */ usage?: LlmUsage; } diff --git a/apps/client/src/widgets/type_widgets/llm_chat/useLlmChat.ts b/apps/client/src/widgets/type_widgets/llm_chat/useLlmChat.ts index ddca7deb98..63cbf4bbf4 100644 --- a/apps/client/src/widgets/type_widgets/llm_chat/useLlmChat.ts +++ b/apps/client/src/widgets/type_widgets/llm_chat/useLlmChat.ts @@ -2,7 +2,6 @@ import type { LlmCitation, LlmMessage, LlmModelInfo, LlmUsage } from "@triliumne import { RefObject } from "preact"; import { useCallback, useEffect, useRef, useState } from "preact/hooks"; -import { t } from "../../../services/i18n.js"; import { getAvailableModels, streamChatCompletion } from "../../../services/llm_chat.js"; import { randomString } from "../../../services/utils.js"; import type { ContentBlock, LlmChatContent, StoredMessage } from "./llm_chat_types.js"; @@ -28,8 +27,8 @@ export interface UseLlmChatReturn { input: string; isStreaming: boolean; streamingContent: string; + streamingBlocks: ContentBlock[]; streamingThinking: string; - toolActivity: string | null; pendingCitations: LlmCitation[]; availableModels: ModelOption[]; selectedModel: string; @@ -75,8 +74,8 @@ export function useLlmChat( const [input, setInput] = useState(""); const [isStreaming, setIsStreaming] = useState(false); const [streamingContent, setStreamingContent] = useState(""); + const [streamingBlocks, setStreamingBlocks] = useState([]); const [streamingThinking, setStreamingThinking] = useState(""); - const [toolActivity, setToolActivity] = useState(null); const [pendingCitations, setPendingCitations] = useState([]); const [availableModels, setAvailableModels] = useState([]); const [selectedModel, setSelectedModel] = useState(""); @@ -152,7 +151,7 @@ export function useLlmChat( useEffect(() => { scrollToBottom(); - }, [messages, streamingContent, streamingThinking, toolActivity, scrollToBottom]); + }, [messages, streamingContent, streamingThinking, scrollToBottom]); // Load state from content object const loadFromContent = useCallback((content: LlmChatContent) => { @@ -198,7 +197,6 @@ export function useLlmChat( e.preventDefault(); if (!input.trim() || isStreaming) return; - setToolActivity(null); setPendingCitations([]); const userMessage: StoredMessage = { @@ -213,6 +211,7 @@ export function useLlmChat( setInput(""); setIsStreaming(true); setStreamingContent(""); + setStreamingBlocks([]); setStreamingThinking(""); let thinkingContent = ""; @@ -262,18 +261,13 @@ export function useLlmChat( .filter((b): b is ContentBlock & { type: "text" } => b.type === "text") .map(b => b.content) .join("")); - setToolActivity(null); + setStreamingBlocks([...contentBlocks]); }, onThinking: (text) => { thinkingContent += text; setStreamingThinking(thinkingContent); - setToolActivity(t("llm_chat.thinking")); }, onToolUse: (toolName, toolInput) => { - const toolLabel = toolName === "web_search" - ? t("llm_chat.searching_web") - : `Using ${toolName}...`; - setToolActivity(toolLabel); contentBlocks.push({ type: "tool_call", toolCall: { @@ -282,21 +276,28 @@ export function useLlmChat( input: toolInput } }); + setStreamingBlocks([...contentBlocks]); }, onToolResult: (toolName, result, isError) => { - // Find the most recent tool_call block for this tool without a result + // Replace the matching block with a new object so Preact sees the change. for (let i = contentBlocks.length - 1; i >= 0; i--) { const block = contentBlocks[i]; if (block.type === "tool_call" && block.toolCall.toolName === toolName && !block.toolCall.result) { - block.toolCall.result = result; - block.toolCall.isError = isError; + contentBlocks[i] = { + type: "tool_call", + toolCall: { ...block.toolCall, result, isError } + }; break; } } + setStreamingBlocks([...contentBlocks]); }, onCitation: (citation) => { - citations.push(citation); - setPendingCitations([...citations]); + // Deduplicate by URL + if (!citation.url || !citations.some(c => c.url === citation.url)) { + citations.push(citation); + setPendingCitations([...citations]); + } }, onUsage: (u) => { usage = u; @@ -314,9 +315,9 @@ export function useLlmChat( const finalMessages = [...newMessages, errorMessage]; setMessages(finalMessages); setStreamingContent(""); + setStreamingBlocks([]); setStreamingThinking(""); setIsStreaming(false); - setToolActivity(null); }, onDone: () => { const finalNewMessages: StoredMessage[] = []; @@ -348,10 +349,10 @@ export function useLlmChat( } setStreamingContent(""); + setStreamingBlocks([]); setStreamingThinking(""); setPendingCitations([]); setIsStreaming(false); - setToolActivity(null); } } ); @@ -370,8 +371,8 @@ export function useLlmChat( input, isStreaming, streamingContent, + streamingBlocks, streamingThinking, - toolActivity, pendingCitations, availableModels, selectedModel, diff --git a/apps/client/src/widgets/type_widgets/options/advanced.tsx b/apps/client/src/widgets/type_widgets/options/advanced.tsx index 2959c5a1cc..619a1fb514 100644 --- a/apps/client/src/widgets/type_widgets/options/advanced.tsx +++ b/apps/client/src/widgets/type_widgets/options/advanced.tsx @@ -1,15 +1,16 @@ import { AnonymizedDbResponse, DatabaseAnonymizeResponse, DatabaseCheckIntegrityResponse } from "@triliumnext/commons"; -import { useEffect, useMemo, useState } from "preact/hooks"; +import { useCallback, useEffect, useMemo, useState } from "preact/hooks"; -import { experimentalFeatures } from "../../../services/experimental_features"; +import { experimentalFeatures, type ExperimentalFeatureId } from "../../../services/experimental_features"; import { t } from "../../../services/i18n"; import server from "../../../services/server"; import toast from "../../../services/toast"; import Button from "../../react/Button"; import Column from "../../react/Column"; import FormText from "../../react/FormText"; +import FormToggle from "../../react/FormToggle"; import { useTriliumOptionJson } from "../../react/hooks"; -import CheckboxList from "./components/CheckboxList"; +import OptionsRow from "./components/OptionsRow"; import OptionsSection from "./components/OptionsSection"; export default function AdvancedSettings() { @@ -180,19 +181,39 @@ function VacuumDatabaseOptions() { } function ExperimentalOptions() { - const [ enabledExperimentalFeatures, setEnabledExperimentalFeatures ] = useTriliumOptionJson("experimentalFeatures", true); - const filteredExperimentalFeatures = useMemo(() => experimentalFeatures.filter(e => e.id !== "new-layout"), []); + const [enabledFeatures, setEnabledFeatures] = useTriliumOptionJson("experimentalFeatures", true); + const filteredFeatures = useMemo(() => experimentalFeatures.filter(e => e.id !== "new-layout"), []); - return (filteredExperimentalFeatures.length > 0 && + const toggleFeature = useCallback((featureId: ExperimentalFeatureId, enabled: boolean) => { + if (enabled) { + setEnabledFeatures([...enabledFeatures, featureId]); + } else { + setEnabledFeatures(enabledFeatures.filter(id => id !== featureId)); + } + }, [enabledFeatures, setEnabledFeatures]); + + if (filteredFeatures.length === 0) { + return null; + } + + return ( {t("experimental_features.disclaimer")} - + {filteredFeatures.map((feature) => ( + + toggleFeature(feature.id, enabled)} + /> + + ))} ); } diff --git a/apps/client/src/widgets/type_widgets/options/components/OptionsRow.css b/apps/client/src/widgets/type_widgets/options/components/OptionsRow.css index 5f764fcc46..a811aaa720 100644 --- a/apps/client/src/widgets/type_widgets/options/components/OptionsRow.css +++ b/apps/client/src/widgets/type_widgets/options/components/OptionsRow.css @@ -2,25 +2,42 @@ border-bottom: 1px solid var(--main-border-color); display: flex; align-items: center; - padding: 0.5em 0; + justify-content: space-between; + gap: 1rem; + padding: 0.75em 0; } -.option-row > label { - width: 40%; +.option-row-label { + flex: 1; + display: flex; + flex-direction: column; +} + +.option-row-label > label { margin-bottom: 0 !important; +} + +.option-row-input { flex-shrink: 0; } -.option-row > select, -.option-row > .dropdown { - width: 60%; +.option-row-input > select, +.option-row-input > .dropdown { + width: auto; + min-width: 150px; } -.option-row > .dropdown button { +.option-row-input > .dropdown button { width: 100%; text-align: start; } +.option-row-description { + line-height: 1.3; + margin-top: 0.25em; + color: var(--muted-text-color); +} + .option-row:last-of-type { border-bottom: unset; } diff --git a/apps/client/src/widgets/type_widgets/options/components/OptionsRow.tsx b/apps/client/src/widgets/type_widgets/options/components/OptionsRow.tsx index 3b367e5245..92f0c04315 100644 --- a/apps/client/src/widgets/type_widgets/options/components/OptionsRow.tsx +++ b/apps/client/src/widgets/type_widgets/options/components/OptionsRow.tsx @@ -5,18 +5,24 @@ import { useUniqueName } from "../../../react/hooks"; interface OptionsRowProps { name: string; label?: string; + description?: string; children: VNode; centered?: boolean; } -export default function OptionsRow({ name, label, children, centered }: OptionsRowProps) { +export default function OptionsRow({ name, label, description, children, centered }: OptionsRowProps) { const id = useUniqueName(name); const childWithId = cloneElement(children, { id }); return (
- {label && } - {childWithId} +
+ {label && } + {description && {description}} +
+
+ {childWithId} +
); } \ No newline at end of file diff --git a/apps/client/src/widgets/type_widgets/options/images.tsx b/apps/client/src/widgets/type_widgets/options/images.tsx deleted file mode 100644 index 0a99be49bf..0000000000 --- a/apps/client/src/widgets/type_widgets/options/images.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { t } from "../../../services/i18n"; -import FormCheckbox from "../../react/FormCheckbox"; -import FormGroup from "../../react/FormGroup"; -import { FormTextBoxWithUnit } from "../../react/FormTextBox"; -import { useTriliumOption, useTriliumOptionBool } from "../../react/hooks"; -import OptionsSection from "./components/OptionsSection"; - -export default function ImageSettings() { - const [ downloadImagesAutomatically, setDownloadImagesAutomatically ] = useTriliumOptionBool("downloadImagesAutomatically"); - const [ compressImages, setCompressImages ] = useTriliumOptionBool("compressImages"); - const [ imageMaxWidthHeight, setImageMaxWidthHeight ] = useTriliumOption("imageMaxWidthHeight"); - const [ imageJpegQuality, setImageJpegQuality ] = useTriliumOption("imageJpegQuality"); - - return ( - - - - - -
- - - - - - - - - - -
- ); -} diff --git a/apps/client/src/widgets/type_widgets/options/llm.tsx b/apps/client/src/widgets/type_widgets/options/llm.tsx index caa867f5fd..9da9f50ca6 100644 --- a/apps/client/src/widgets/type_widgets/options/llm.tsx +++ b/apps/client/src/widgets/type_widgets/options/llm.tsx @@ -1,13 +1,34 @@ import { useCallback, useMemo, useState } from "preact/hooks"; + +import dialog from "../../../services/dialog"; +import { isExperimentalFeatureEnabled } from "../../../services/experimental_features"; import { t } from "../../../services/i18n"; +import ActionButton from "../../react/ActionButton"; import Button from "../../react/Button"; +import FormToggle from "../../react/FormToggle"; +import { useTriliumOption, useTriliumOptionBool } from "../../react/hooks"; +import OptionsRow from "./components/OptionsRow"; import OptionsSection from "./components/OptionsSection"; import AddProviderModal, { type LlmProviderConfig, PROVIDER_TYPES } from "./llm/AddProviderModal"; -import ActionButton from "../../react/ActionButton"; -import dialog from "../../../services/dialog"; -import { useTriliumOption } from "../../react/hooks"; export default function LlmSettings() { + if (!isExperimentalFeatureEnabled("llm")) { + return ( + +

{t("llm.feature_not_enabled")}

+
+ ); + } + + return ( + <> + + + + ); +} + +function ProviderSettings() { const [providersJson, setProvidersJson] = useTriliumOption("llmProviders"); const providers = useMemo(() => { try { @@ -34,7 +55,7 @@ export default function LlmSettings() { return ( -

{t("llm.settings_description")}

+

{t("llm.settings_description")}

+ )} + + ); +} diff --git a/apps/client/src/widgets/type_widgets/text/CKEditorWithWatchdog.tsx b/apps/client/src/widgets/type_widgets/text/CKEditorWithWatchdog.tsx index 2842c74dd6..56b4d57060 100644 --- a/apps/client/src/widgets/type_widgets/text/CKEditorWithWatchdog.tsx +++ b/apps/client/src/widgets/type_widgets/text/CKEditorWithWatchdog.tsx @@ -205,7 +205,7 @@ export default function CKEditorWithWatchdog({ containerRef: externalContainerRe watchdog.on("stateChange", () => onWatchdogStateChange(watchdog)); } - await watchdog.create(container); + await watchdog.create(container, {}); }; init(); diff --git a/apps/client/src/widgets/type_widgets/text/toolbar.ts b/apps/client/src/widgets/type_widgets/text/toolbar.ts index ae008d43de..b5ef750a1f 100644 --- a/apps/client/src/widgets/type_widgets/text/toolbar.ts +++ b/apps/client/src/widgets/type_widgets/text/toolbar.ts @@ -1,6 +1,6 @@ import utils from "../../../services/utils.js"; import options from "../../../services/options.js"; -import IconAlignCenter from "@ckeditor/ckeditor5-icons/theme/icons/align-center.svg?raw"; +import { IconAlignCenter } from "@ckeditor/ckeditor5-icons"; const TEXT_FORMATTING_GROUP = { label: "Text formatting", diff --git a/apps/client/vite.config.mts b/apps/client/vite.config.mts index aa6aa1a8ca..e5cb48c87f 100644 --- a/apps/client/vite.config.mts +++ b/apps/client/vite.config.mts @@ -19,15 +19,15 @@ if (isDev) { plugins = [ viteStaticCopy({ targets: assets.map((asset) => ({ - src: `src/${asset}/*`, - dest: asset + src: `src/${asset}/**/*`, + dest: asset, + rename: { stripBase: 2 } })) }), viteStaticCopy({ - structured: true, targets: [ { - src: "../../node_modules/@excalidraw/excalidraw/dist/prod/fonts/*", + src: "../../node_modules/@excalidraw/excalidraw/dist/prod/fonts/**/*", dest: "", } ] diff --git a/apps/server/package.json b/apps/server/package.json index ee2c2d1269..c603d92c33 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -31,11 +31,14 @@ }, "dependencies": { "@ai-sdk/anthropic": "3.0.64", - "@ai-sdk/google": "3.0.54", + "@ai-sdk/google": "3.0.55", "@ai-sdk/openai": "3.0.49", + "@modelcontextprotocol/sdk": "^1.12.1", "ai": "6.0.142", "better-sqlite3": "12.8.0", - "html-to-text": "9.0.5" + "html-to-text": "9.0.5", + "js-yaml": "4.1.1", + "unpdf": "1.4.0" }, "devDependencies": { "@braintree/sanitize-url": "7.1.2", @@ -56,6 +59,7 @@ "@types/fs-extra": "11.0.4", "@types/html": "1.0.4", "@types/ini": "4.1.1", + "@types/js-yaml": "4.0.9", "@types/multer": "2.1.0", "@types/safe-compare": "1.1.2", "@types/serve-favicon": "2.5.7", @@ -94,8 +98,8 @@ "html2plaintext": "2.1.4", "http-proxy-agent": "8.0.0", "https-proxy-agent": "8.0.0", - "i18next": "25.10.10", - "i18next-fs-backend": "2.6.1", + "i18next": "26.0.3", + "i18next-fs-backend": "2.6.3", "image-type": "6.1.0", "ini": "6.0.0", "is-animated": "2.0.2", @@ -105,6 +109,7 @@ "marked": "17.0.5", "multer": "2.1.1", "normalize-strings": "1.1.1", + "officeparser": "6.0.7", "rand-token": "1.0.1", "safe-compare": "1.1.4", "sax": "1.6.0", @@ -113,11 +118,12 @@ "striptags": "3.2.0", "supertest": "7.2.2", "swagger-jsdoc": "6.2.8", + "tesseract.js": "7.0.0", "time2fa": "1.4.2", "tmp": "0.2.5", "turnish": "1.8.0", "vite": "8.0.3", "xml2js": "0.6.2", - "yauzl": "3.2.1" + "yauzl": "3.3.0" } } \ No newline at end of file diff --git a/apps/server/spec/db/document.db b/apps/server/spec/db/document.db index 43460f0a55..371c3a1329 100644 Binary files a/apps/server/spec/db/document.db and b/apps/server/spec/db/document.db differ diff --git a/apps/server/spec/etapi/mcp.spec.ts b/apps/server/spec/etapi/mcp.spec.ts new file mode 100644 index 0000000000..d2cb4fee23 --- /dev/null +++ b/apps/server/spec/etapi/mcp.spec.ts @@ -0,0 +1,177 @@ +import { Application } from "express"; +import { beforeAll, describe, expect, it } from "vitest"; +import supertest from "supertest"; +import { createNote, login } from "./utils.js"; +import config from "../../src/services/config.js"; +import becca from "../../src/becca/becca.js"; +import optionService from "../../src/services/options.js"; +import cls from "../../src/services/cls.js"; + +let app: Application; +let token: string; + +const USER = "etapi"; +const MCP_ACCEPT = "application/json, text/event-stream"; + +/** Builds a JSON-RPC 2.0 request body for MCP. */ +function jsonRpc(method: string, params?: Record, id: number = 1) { + return { jsonrpc: "2.0", id, method, params }; +} + +/** Parses the JSON-RPC response from an SSE response text. */ +function parseSseResponse(text: string) { + const dataLine = text.split("\n").find(line => line.startsWith("data: ")); + if (!dataLine) { + throw new Error(`No SSE data line found in response: ${text}`); + } + return JSON.parse(dataLine.slice("data: ".length)); +} + +function mcpPost(app: Application) { + return supertest(app) + .post("/mcp") + .set("Accept", MCP_ACCEPT) + .set("Content-Type", "application/json"); +} + +function setOption(name: Parameters[0], value: string) { + cls.init(() => optionService.setOption(name, value)); +} + +describe("mcp", () => { + beforeAll(async () => { + config.General.noAuthentication = false; + const buildApp = (await (import("../../src/app.js"))).default; + app = await buildApp(); + token = await login(app); + }); + + describe("option gate", () => { + it("rejects requests when mcpEnabled is false", async () => { + setOption("mcpEnabled", "false"); + + const response = await mcpPost(app) + .send(jsonRpc("initialize")) + .expect(403); + + expect(response.body.error).toContain("disabled"); + }); + + it("rejects requests when mcpEnabled option does not exist", async () => { + const saved = becca.options["mcpEnabled"]; + delete becca.options["mcpEnabled"]; + + try { + const response = await mcpPost(app) + .send(jsonRpc("initialize")) + .expect(403); + + expect(response.body.error).toContain("disabled"); + } finally { + becca.options["mcpEnabled"] = saved; + } + }); + + it("accepts requests when mcpEnabled is true", async () => { + setOption("mcpEnabled", "true"); + + const response = await mcpPost(app) + .send(jsonRpc("initialize", { + protocolVersion: "2025-03-26", + capabilities: {}, + clientInfo: { name: "test", version: "1.0.0" } + })); + + expect(response.status).not.toBe(403); + }); + }); + + describe("protocol", () => { + beforeAll(() => { + setOption("mcpEnabled", "true"); + }); + + it("initializes and returns server capabilities", async () => { + const response = await mcpPost(app) + .send(jsonRpc("initialize", { + protocolVersion: "2025-03-26", + capabilities: {}, + clientInfo: { name: "test", version: "1.0.0" } + })) + .expect(200); + + const body = parseSseResponse(response.text); + expect(body.result.serverInfo.name).toBe("trilium-notes"); + expect(body.result.capabilities.tools).toBeDefined(); + }); + + it("lists available tools", async () => { + const response = await mcpPost(app) + .send(jsonRpc("tools/list")) + .expect(200); + + const body = parseSseResponse(response.text); + const toolNames: string[] = body.result.tools.map((t: { name: string }) => t.name); + expect(toolNames).toContain("search_notes"); + expect(toolNames).toContain("get_note"); + expect(toolNames).toContain("get_note_content"); + expect(toolNames).toContain("create_note"); + expect(toolNames).not.toContain("get_current_note"); + }); + }); + + describe("tools", () => { + let noteId: string; + + beforeAll(async () => { + setOption("mcpEnabled", "true"); + noteId = await createNote(app, token, "MCP test note content"); + }); + + it("searches for notes", async () => { + const response = await mcpPost(app) + .send(jsonRpc("tools/call", { + name: "search_notes", + arguments: { query: "MCP test note content" } + })) + .expect(200); + + const body = parseSseResponse(response.text); + expect(body.result).toBeDefined(); + const content = body.result.content; + expect(content.length).toBeGreaterThan(0); + expect(content[0].text).toContain(noteId); + }); + + it("gets note metadata by ID", async () => { + const response = await mcpPost(app) + .send(jsonRpc("tools/call", { + name: "get_note", + arguments: { noteId } + })) + .expect(200); + + const body = parseSseResponse(response.text); + expect(body.result).toBeDefined(); + const parsed = JSON.parse(body.result.content[0].text); + expect(parsed.noteId).toBe(noteId); + expect(parsed.type).toBeDefined(); + expect(parsed.attributes).toBeDefined(); + }); + + it("reads note content by ID", async () => { + const response = await mcpPost(app) + .send(jsonRpc("tools/call", { + name: "get_note_content", + arguments: { noteId } + })) + .expect(200); + + const body = parseSseResponse(response.text); + expect(body.result).toBeDefined(); + const parsed = JSON.parse(body.result.content[0].text); + expect(parsed.noteId).toBe(noteId); + expect(parsed.content).toContain("MCP test note content"); + }); + }); +}); diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 838cbb0153..039a1fcf0a 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -14,6 +14,7 @@ import favicon from "serve-favicon"; import assets from "./routes/assets.js"; import custom from "./routes/custom.js"; import error_handlers from "./routes/error_handlers.js"; +import mcpRoutes from "./routes/mcp.js"; import routes from "./routes/routes.js"; import config from "./services/config.js"; import log from "./services/log.js"; @@ -60,8 +61,8 @@ export default async function buildApp() { app.use(compression({ // Skip compression for SSE endpoints to enable real-time streaming filter: (req, res) => { - // Skip compression for LLM chat streaming endpoint - if (req.path === "/api/llm-chat/stream") { + // Skip compression for SSE-capable endpoints + if (req.path === "/api/llm-chat/stream" || req.path === "/mcp") { return false; } return compression.filter(req, res); @@ -92,6 +93,10 @@ export default async function buildApp() { app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); + // MCP is registered before session/auth middleware — it uses its own + // localhost-only guard and does not require Trilium authentication. + mcpRoutes.register(app); + app.use(express.static(path.join(publicDir, "root"))); app.use(`/manifest.webmanifest`, express.static(path.join(publicAssetsDir, "manifest.webmanifest"))); app.use(`/robots.txt`, express.static(path.join(publicAssetsDir, "robots.txt"))); diff --git a/apps/server/src/assets/translations/cn/server.json b/apps/server/src/assets/translations/cn/server.json index 8ab5edc792..505fe1ca45 100644 --- a/apps/server/src/assets/translations/cn/server.json +++ b/apps/server/src/assets/translations/cn/server.json @@ -159,7 +159,8 @@ }, "quarterNumber": "第 {quarterNumber} 季度", "special_notes": { - "search_prefix": "搜索:" + "search_prefix": "搜索:", + "llm_chat_prefix": "对话:" }, "test_sync": { "not-configured": "同步服务器主机未配置。请先配置同步。", @@ -217,7 +218,9 @@ "inbox-title": "收件箱", "command-palette": "打开命令面板", "zen-mode": "禅模式", - "tab-switcher-title": "标签切换器" + "tab-switcher-title": "标签切换器", + "llm-chat-history-title": "AI对话历史", + "sidebar-chat-title": "AI对话" }, "notes": { "new-note": "新建笔记", diff --git a/apps/server/src/assets/translations/en/server.json b/apps/server/src/assets/translations/en/server.json index c05a68a249..c78c91ca9e 100644 --- a/apps/server/src/assets/translations/en/server.json +++ b/apps/server/src/assets/translations/en/server.json @@ -303,7 +303,7 @@ "shortcuts-title": "Shortcuts", "text-notes": "Text Notes", "code-notes-title": "Code Notes", - "images-title": "Images", + "images-title": "Media", "spellcheck-title": "Spellcheck", "password-title": "Password", "multi-factor-authentication-title": "MFA", diff --git a/apps/server/src/assets/translations/fr/server.json b/apps/server/src/assets/translations/fr/server.json index 9bd4123f52..dd0c60e84b 100644 --- a/apps/server/src/assets/translations/fr/server.json +++ b/apps/server/src/assets/translations/fr/server.json @@ -428,7 +428,7 @@ "end-time": "Heure de fin", "geolocation": "Géolocalisation", "built-in-templates": "Modèles intégrés", - "board": "Tableau Kanban", + "board": "Vue Kanban", "status": "État", "board_note_first": "Première note", "board_note_second": "Deuxième note", diff --git a/apps/server/src/assets/translations/ga/server.json b/apps/server/src/assets/translations/ga/server.json index 4695032b03..3a02fcb7d9 100644 --- a/apps/server/src/assets/translations/ga/server.json +++ b/apps/server/src/assets/translations/ga/server.json @@ -256,7 +256,8 @@ }, "quarterNumber": "Ráithe {quarterNumber}", "special_notes": { - "search_prefix": "Cuardaigh:" + "search_prefix": "Cuardaigh:", + "llm_chat_prefix": "Comhrá:" }, "test_sync": { "not-configured": "Níl an freastalaí sioncrónaithe cumraithe. Cumraigh an sioncrónú ar dtús.", @@ -314,7 +315,10 @@ "user-guide": "Treoir Úsáideora", "localization": "Teanga & Réigiún", "inbox-title": "Bosca isteach", - "tab-switcher-title": "Athraitheoir Cluaisíní" + "tab-switcher-title": "Athraitheoir Cluaisíní", + "llm-chat-history-title": "Stair Comhrá AI", + "llm-title": "AI / LLM", + "sidebar-chat-title": "Comhrá AI" }, "notes": { "new-note": "Nóta nua", diff --git a/apps/server/src/assets/translations/ja/server.json b/apps/server/src/assets/translations/ja/server.json index 98588cdcdb..58044fd285 100644 --- a/apps/server/src/assets/translations/ja/server.json +++ b/apps/server/src/assets/translations/ja/server.json @@ -244,7 +244,8 @@ "december": "12月" }, "special_notes": { - "search_prefix": "検索:" + "search_prefix": "検索:", + "llm_chat_prefix": "チャット:" }, "test_sync": { "not-configured": "同期サーバーホストが設定されていません。最初に同期を設定してください。", @@ -257,7 +258,7 @@ "shortcuts-title": "ショートカット", "text-notes": "テキストノート", "code-notes-title": "コードノート", - "images-title": "画像", + "images-title": "メディア", "spellcheck-title": "スペルチェック", "password-title": "パスワード", "backup-title": "バックアップ", @@ -302,7 +303,10 @@ "base-abstract-launcher-title": "ベース アブストラクトランチャー", "command-palette": "コマンドパレットを開く", "zen-mode": "禅モード", - "tab-switcher-title": "タブ切り替え" + "tab-switcher-title": "タブ切り替え", + "llm-chat-history-title": "AI チャット履歴", + "llm-title": "AI / LLM", + "sidebar-chat-title": "AI チャット" }, "notes": { "new-note": "新しいノート", diff --git a/apps/server/src/assets/translations/ru/server.json b/apps/server/src/assets/translations/ru/server.json index 8aeb50d3bb..401bb4f663 100644 --- a/apps/server/src/assets/translations/ru/server.json +++ b/apps/server/src/assets/translations/ru/server.json @@ -157,7 +157,10 @@ "open-today-journal-note-title": "Открыть сегодняшнюю заметку в журнале", "zen-mode": "Режим \"Дзен\"", "command-palette": "Открыть панель команд", - "tab-switcher-title": "Переключатель вкладок" + "tab-switcher-title": "Переключатель вкладок", + "llm-chat-history-title": "История чата с ИИ", + "llm-title": "ИИ / LLM", + "sidebar-chat-title": "Чат с ИИ" }, "tray": { "bookmarks": "Закладки", @@ -310,7 +313,8 @@ "description": "Прежде чем начать использовать Trilium через веб-браузер, вам необходимо установить пароль. Этот пароль будет использоваться для входа." }, "special_notes": { - "search_prefix": "Поиск:" + "search_prefix": "Поиск:", + "llm_chat_prefix": "Чат:" }, "notes": { "duplicate-note-suffix": "(дубликат)", @@ -370,7 +374,7 @@ "setup_sync-from-desktop": { "heading": "Синхронизация с настольной версией", "description": "Это настройку нужно выполнить с помощью настольной версии:", - "step1": "Откройте приложение Trilium Notes на ПК.", + "step1": "Откройте приложение Trilium Notes на компьютере.", "step2": "В меню Trilium выберите «Параметры».", "step3": "Нажмите на категорию «Синхронизация».", "step4": "Измените адрес экземпляра сервера на: {{- host}} и нажмите «Сохранить».", diff --git a/apps/server/src/routes/api/ocr.spec.ts b/apps/server/src/routes/api/ocr.spec.ts new file mode 100644 index 0000000000..b778e100c4 --- /dev/null +++ b/apps/server/src/routes/api/ocr.spec.ts @@ -0,0 +1,56 @@ +import { describe, expect, it, vi, beforeEach } from "vitest"; +import ocrRoutes from "./ocr.js"; + +// Mock the OCR service +vi.mock("../../services/ocr/ocr_service.js", () => ({ + default: { + startBatchProcessing: vi.fn(() => Promise.resolve({ success: true })), + getBatchProgress: vi.fn(() => ({ inProgress: false, total: 0, processed: 0 })) + } +})); + +// Mock becca +vi.mock("../../becca/becca.js", () => ({ + default: {} +})); + +// Mock sql +vi.mock("../../services/sql.js", () => ({ + default: { + getRow: vi.fn() + } +})); + +// Mock log +vi.mock("../../services/log.js", () => ({ + default: { + error: vi.fn() + } +})); + +describe("OCR API", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("should return success for batch processing", async () => { + const result = await ocrRoutes.batchProcessOCR(); + expect(result).toEqual({ success: true }); + }); + + it("should return batch progress", async () => { + const result = await ocrRoutes.getBatchProgress(); + expect(result).toEqual({ inProgress: false, total: 0, processed: 0 }); + }); + + it("should return 400 when batch processing fails", async () => { + const ocrService = await import("../../services/ocr/ocr_service.js"); + vi.mocked(ocrService.default.startBatchProcessing).mockResolvedValueOnce({ + success: false, + message: "No images found that need OCR processing" + }); + + const result = await ocrRoutes.batchProcessOCR(); + expect(result).toEqual([400, { success: false, message: "No images found that need OCR processing" }]); + }); +}); diff --git a/apps/server/src/routes/api/ocr.ts b/apps/server/src/routes/api/ocr.ts new file mode 100644 index 0000000000..65618b7db8 --- /dev/null +++ b/apps/server/src/routes/api/ocr.ts @@ -0,0 +1,241 @@ +import { TextRepresentationResponse } from "@triliumnext/commons"; +import type { Request } from "express"; + +import becca from "../../becca/becca.js"; +import ocrService from "../../services/ocr/ocr_service.js"; +import sql from "../../services/sql.js"; + +/** + * @swagger + * /api/ocr/process-note/{noteId}: + * post: + * summary: Process OCR for a specific note + * operationId: ocr-process-note + * parameters: + * - name: noteId + * in: path + * required: true + * schema: + * type: string + * description: ID of the note to process + * requestBody: + * required: false + * content: + * application/json: + * schema: + * type: object + * properties: + * language: + * type: string + * description: > + * Tesseract language code to use (e.g. 'eng', 'fra', 'deu', 'eng+fra'). + * If omitted, the language is resolved automatically from the note's language label, + * the enabled content languages, or the UI locale. + * forceReprocess: + * type: boolean + * description: Force reprocessing even if OCR already exists + * default: false + * responses: + * '200': + * description: OCR processing completed successfully + * '400': + * description: Bad request - unsupported file type + * '404': + * description: Note not found + * '500': + * description: Internal server error + * security: + * - session: [] + * tags: ["ocr"] + */ +async function processNoteOCR(req: Request<{ noteId: string }>) { + const { noteId } = req.params; + const { language, forceReprocess = false } = req.body || {}; + + const note = becca.getNote(noteId); + if (!note) { + return [404, { success: false, message: 'Note not found' }]; + } + + const result = await ocrService.processNoteOCR(noteId, { language, forceReprocess }); + if (!result) { + return [400, { success: false, message: 'Note is not an image or has unsupported format' }]; + } + + return { success: true, result }; +} + +/** + * @swagger + * /api/ocr/process-attachment/{attachmentId}: + * post: + * summary: Process OCR for a specific attachment + * operationId: ocr-process-attachment + * parameters: + * - name: attachmentId + * in: path + * required: true + * schema: + * type: string + * description: ID of the attachment to process + * requestBody: + * required: false + * content: + * application/json: + * schema: + * type: object + * properties: + * language: + * type: string + * description: > + * Tesseract language code to use (e.g. 'eng', 'fra', 'deu', 'eng+fra'). + * If omitted, the language is resolved automatically from the owner note's language label, + * the enabled content languages, or the UI locale. + * forceReprocess: + * type: boolean + * description: Force reprocessing even if OCR already exists + * default: false + * responses: + * '200': + * description: OCR processing completed successfully + * '400': + * description: Bad request - unsupported file type + * '404': + * description: Attachment not found + * '500': + * description: Internal server error + * security: + * - session: [] + * tags: ["ocr"] + */ +async function processAttachmentOCR(req: Request<{ attachmentId: string }>) { + const { attachmentId } = req.params; + const { language, forceReprocess = false } = req.body || {}; + + const attachment = becca.getAttachment(attachmentId); + if (!attachment) { + return [404, { success: false, message: 'Attachment not found' }]; + } + + const result = await ocrService.processAttachmentOCR(attachmentId, { language, forceReprocess }); + if (!result) { + return [400, { success: false, message: 'Attachment is not an image or has unsupported format' }]; + } + + return { success: true, result }; +} + +/** + * @swagger + * /api/ocr/batch-process: + * post: + * summary: Process OCR for all images without existing OCR results + * operationId: ocr-batch-process + * responses: + * '200': + * description: Batch processing initiated successfully + * '400': + * description: Bad request - OCR disabled or already processing + * '500': + * description: Internal server error + * security: + * - session: [] + * tags: ["ocr"] + */ +async function batchProcessOCR() { + const result = await ocrService.startBatchProcessing(); + if (!result.success) { + return [400, result]; + } + return result; +} + +/** + * @swagger + * /api/ocr/batch-progress: + * get: + * summary: Get batch OCR processing progress + * operationId: ocr-batch-progress + * responses: + * '200': + * description: Batch processing progress information + * '500': + * description: Internal server error + * security: + * - session: [] + * tags: ["ocr"] + */ +async function getBatchProgress() { + return ocrService.getBatchProgress(); +} + +/** + * @swagger + * /api/ocr/notes/{noteId}/text: + * get: + * summary: Get OCR text for a specific note + * operationId: ocr-get-note-text + * parameters: + * - name: noteId + * in: path + * required: true + * schema: + * type: string + * description: Note ID to get OCR text for + * responses: + * 200: + * description: OCR text retrieved successfully + * 404: + * description: Note not found + * tags: ["ocr"] + */ +function getTextRepresentation(blobId: string | undefined): TextRepresentationResponse { + let ocrText: string | null = null; + + if (blobId) { + const result = sql.getRow<{ + textRepresentation: string | null; + }>(` + SELECT textRepresentation + FROM blobs + WHERE blobId = ? + `, [blobId]); + + if (result) { + ocrText = result.textRepresentation; + } + } + + return { + success: true, + text: ocrText || '', + hasOcr: !!ocrText + }; +} + +async function getNoteOCRText(req: Request<{ noteId: string }>) { + const note = becca.getNote(req.params.noteId); + if (!note) { + return [404, { success: false, message: 'Note not found' }]; + } + + return getTextRepresentation(note.blobId); +} + +async function getAttachmentOCRText(req: Request<{ attachmentId: string }>) { + const attachment = becca.getAttachment(req.params.attachmentId); + if (!attachment) { + return [404, { success: false, message: 'Attachment not found' }]; + } + + return getTextRepresentation(attachment.blobId); +} + +export default { + processNoteOCR, + processAttachmentOCR, + batchProcessOCR, + getBatchProgress, + getNoteOCRText, + getAttachmentOCRText +}; diff --git a/apps/server/src/routes/mcp.ts b/apps/server/src/routes/mcp.ts new file mode 100644 index 0000000000..c47fb6bf48 --- /dev/null +++ b/apps/server/src/routes/mcp.ts @@ -0,0 +1,73 @@ +/** + * MCP (Model Context Protocol) HTTP route handler. + * + * Mounts the Streamable HTTP transport at `/mcp` with a localhost-only guard. + * No authentication is required — access is restricted to loopback addresses. + */ + +import type express from "express"; + +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; + +import { createMcpServer } from "../services/mcp/mcp_server.js"; +import log from "../services/log.js"; +import optionService from "../services/options.js"; + +function isLoopback(addr: string | undefined): boolean { + if (!addr) return false; + // IPv6 loopback + if (addr === "::1") return true; + // IPv4 loopback (127.0.0.0/8) + if (addr.startsWith("127.")) return true; + // IPv4-mapped IPv6 loopback + if (addr.startsWith("::ffff:127.")) return true; + return false; +} + +function mcpGuard(req: express.Request, res: express.Response, next: express.NextFunction) { + if (optionService.getOptionOrNull("mcpEnabled") !== "true") { + res.status(403).json({ error: "MCP server is disabled. Enable it in Options > AI / LLM." }); + return; + } + + // Use req.ip which respects trust proxy settings, falling back to socket address + const clientIp = req.ip || req.socket.remoteAddress; + if (!isLoopback(clientIp)) { + res.status(403).json({ error: "MCP is only available from localhost" }); + return; + } + + next(); +} + +async function handleMcpRequest(req: express.Request, res: express.Response) { + try { + const server = createMcpServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined // stateless + }); + + res.on("close", () => { + transport.close(); + server.close(); + }); + + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (err) { + log.error(`MCP request error: ${err}`); + if (!res.headersSent) { + res.status(500).json({ error: "Internal MCP error" }); + } + } +} + +export function register(app: express.Application) { + app.post("/mcp", mcpGuard, handleMcpRequest); + app.get("/mcp", mcpGuard, handleMcpRequest); + app.delete("/mcp", mcpGuard, handleMcpRequest); + + log.info("MCP server registered at /mcp (localhost only)"); +} + +export default { register }; diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index 43f748b70c..bcc86eb8e7 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -28,6 +28,7 @@ import llmChatRoute from "./api/llm_chat.js"; import llmSpecialNotesRoute from "./api/llm_special_notes.js"; import loginApiRoute from "./api/login.js"; import metricsRoute from "./api/metrics.js"; +import ocrRoute from "./api/ocr.js"; import passwordApiRoute from "./api/password.js"; import recoveryCodes from './api/recovery_codes.js'; import senderRoute from "./api/sender.js"; @@ -210,6 +211,14 @@ function register(app: express.Application) { etapiBackupRoute.register(router); etapiMetricsRoute.register(router); + // OCR API + asyncApiRoute(PST, "/api/ocr/process-note/:noteId", ocrRoute.processNoteOCR); + asyncApiRoute(PST, "/api/ocr/process-attachment/:attachmentId", ocrRoute.processAttachmentOCR); + asyncApiRoute(PST, "/api/ocr/batch-process", ocrRoute.batchProcessOCR); + asyncApiRoute(GET, "/api/ocr/batch-progress", ocrRoute.getBatchProgress); + asyncApiRoute(GET, "/api/ocr/notes/:noteId/text", ocrRoute.getNoteOCRText); + asyncApiRoute(GET, "/api/ocr/attachments/:attachmentId/text", ocrRoute.getAttachmentOCRText); + app.use("", router); } diff --git a/apps/server/src/services/data_dir.spec.ts b/apps/server/src/services/data_dir.spec.ts index a58529688b..db9d47e991 100644 --- a/apps/server/src/services/data_dir.spec.ts +++ b/apps/server/src/services/data_dir.spec.ts @@ -1,6 +1,6 @@ -import { describe, it, expect, beforeEach, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { getTriliumDataDir as getTriliumDataDirType, getDataDirs as getDataDirsType, getPlatformAppDataDir as getPlatformAppDataDirType } from "./data_dir.js"; +import type { getDataDirs as getDataDirsType, getPlatformAppDataDir as getPlatformAppDataDirType,getTriliumDataDir as getTriliumDataDirType } from "./data_dir.js"; describe("data_dir.ts unit tests", async () => { let getTriliumDataDir: typeof getTriliumDataDirType; @@ -277,7 +277,7 @@ describe("data_dir.ts unit tests", async () => { }); describe("#getDataDirs()", () => { - const envKeys: Omit, "TRILIUM_DATA_DIR">[] = [ "DOCUMENT_PATH", "BACKUP_DIR", "LOG_DIR", "ANONYMIZED_DB_DIR", "CONFIG_INI_PATH", "TMP_DIR" ]; + const envKeys: Omit, "TRILIUM_DATA_DIR">[] = [ "DOCUMENT_PATH", "BACKUP_DIR", "LOG_DIR", "ANONYMIZED_DB_DIR", "CONFIG_INI_PATH", "TMP_DIR", "OCR_CACHE_DIR" ]; const setMockedEnv = (prefix: string | null) => { envKeys.forEach((key) => { diff --git a/apps/server/src/services/data_dir.ts b/apps/server/src/services/data_dir.ts index d0f34f01df..066bc89335 100644 --- a/apps/server/src/services/data_dir.ts +++ b/apps/server/src/services/data_dir.ts @@ -1,5 +1,3 @@ -"use strict"; - /* * This file resolves trilium data path in this order of priority: * - case A) if TRILIUM_DATA_DIR environment variable exists, then its value is used as the path @@ -8,8 +6,8 @@ * - case D) as a fallback if the previous step fails, we'll use home dir */ -import os from "os"; import fs from "fs"; +import os from "os"; import { join as pathJoin } from "path"; const DIR_NAME = "trilium-data"; @@ -43,13 +41,14 @@ export function getTriliumDataDir(dataDirName: string) { export function getDataDirs(TRILIUM_DATA_DIR: string) { const dataDirs = { - TRILIUM_DATA_DIR: TRILIUM_DATA_DIR, + TRILIUM_DATA_DIR, DOCUMENT_PATH: process.env.TRILIUM_DOCUMENT_PATH || pathJoin(TRILIUM_DATA_DIR, "document.db"), BACKUP_DIR: process.env.TRILIUM_BACKUP_DIR || pathJoin(TRILIUM_DATA_DIR, "backup"), LOG_DIR: process.env.TRILIUM_LOG_DIR || pathJoin(TRILIUM_DATA_DIR, "log"), TMP_DIR: process.env.TRILIUM_TMP_DIR || pathJoin(TRILIUM_DATA_DIR, "tmp"), ANONYMIZED_DB_DIR: process.env.TRILIUM_ANONYMIZED_DB_DIR || pathJoin(TRILIUM_DATA_DIR, "anonymized-db"), - CONFIG_INI_PATH: process.env.TRILIUM_CONFIG_INI_PATH || pathJoin(TRILIUM_DATA_DIR, "config.ini") + CONFIG_INI_PATH: process.env.TRILIUM_CONFIG_INI_PATH || pathJoin(TRILIUM_DATA_DIR, "config.ini"), + OCR_CACHE_DIR: process.env.TRILIUM_OCR_CACHE_DIR || pathJoin(TRILIUM_DATA_DIR, "ocr-cache") } as const; createDirIfNotExisting(dataDirs.TMP_DIR); diff --git a/apps/server/src/services/handlers.ts b/apps/server/src/services/handlers.ts index 0562603fbe..16b829c47c 100644 --- a/apps/server/src/services/handlers.ts +++ b/apps/server/src/services/handlers.ts @@ -1,2 +1,42 @@ -import { handlers } from "@triliumnext/core"; +import { events, getLog, handlers, options as optionService } from "@triliumnext/core"; + +import ocrService from "./ocr/ocr_service"; export default handlers; + +export function registerOcrHandlers() { + events.subscribe(events.ENTITY_CREATED, ({ entityName, entity }) => { + switch (entityName) { + case "notes": { + // Note: OCR processing for images is now handled in image.ts during image processing + // OCR processing for files remains here since they don't go through image processing + if (entity.type === 'file' && optionService.getOptionBool("ocrAutoProcessImages")) { + autoProcessOCR(entity.mime, () => ocrService.processNoteOCR(entity.noteId), `file note ${entity.noteId}`); + } + break; + } + case "attachments": { + // Image attachments are handled in image.ts after async image processing sets the real MIME type. + // Only handle non-image (file) attachments here. + if (entity.role === "file" && optionService.getOptionBool("ocrAutoProcessImages")) { + autoProcessOCR(entity.mime, () => ocrService.processAttachmentOCR(entity.attachmentId), `attachment ${entity.attachmentId}`); + } + break; + } + } + }); +} + +function autoProcessOCR(mime: string, process: () => Promise, entityDescription: string) { + const supportedMimeTypes = ocrService.getAllSupportedMimeTypes(); + + const log = getLog(); + if (mime && supportedMimeTypes.includes(mime)) { + process().then(result => { + if (result) { + log.info(`Automatically processed OCR for ${entityDescription} with MIME type ${mime}`); + } + }).catch(error => { + log.error(`Failed to automatically process OCR for ${entityDescription}: ${error}`); + }); + } +} diff --git a/apps/server/src/services/i18n.ts b/apps/server/src/services/i18n.ts index f20d12b912..cba0dae96c 100644 --- a/apps/server/src/services/i18n.ts +++ b/apps/server/src/services/i18n.ts @@ -15,8 +15,7 @@ export async function initializeTranslations(i18nextInstance: typeof i18next, lo ns: "server", backend: { loadPath: join(resourceDir, "assets/translations/{{lng}}/{{ns}}.json") - }, - showSupportNotice: false + } }); // Initialize dayjs locale. diff --git a/apps/server/src/services/image.ts b/apps/server/src/services/image.ts index e57811f748..743d40acdc 100644 --- a/apps/server/src/services/image.ts +++ b/apps/server/src/services/image.ts @@ -1,5 +1,3 @@ - - import { sanitize } from "@triliumnext/core"; import imageType from "image-type"; import isAnimated from "is-animated"; @@ -10,6 +8,7 @@ import sanitizeFilename from "sanitize-filename"; import becca from "../becca/becca.js"; import log from "./log.js"; import noteService from "./notes.js"; +import ocrService from "./ocr/ocr_service.js"; import optionService from "./options.js"; import protectedSessionService from "./protected_session.js"; import sql from "./sql.js"; @@ -47,9 +46,8 @@ async function processImage(uploadBuffer: Buffer, originalName: string, shrinkIm async function getImageType(buffer: Buffer) { if (isSvg(buffer.toString())) { return { ext: "svg" }; - } + } return (await imageType(buffer)) || { ext: "jpg" }; // optimistic JPG default - } function getImageMimeFromExtension(ext: string) { @@ -80,6 +78,8 @@ function updateImage(noteId: string, uploadBuffer: Buffer, originalName: string) note.setContent(buffer); }); + + scheduleOcrForNote(noteId); }); } @@ -122,6 +122,8 @@ function saveImage(parentNoteId: string, uploadBuffer: Buffer, originalName: str note.setContent(buffer, { forceSave: true }); }); + + scheduleOcrForNote(note.noteId); }); return { @@ -160,13 +162,14 @@ function saveImageToAttachment(noteId: string, uploadBuffer: Buffer, originalNam }, 5000); // resizing images asynchronously since JIMP does not support sync operation + const attachmentId = attachment.attachmentId; processImage(uploadBuffer, originalName, !!shrinkImageSwitch).then(({ buffer, imageFormat }) => { sql.transactional(() => { // re-read, might be changed in the meantime - if (!attachment.attachmentId) { + if (!attachmentId) { throw new Error("Missing attachment ID."); } - attachment = becca.getAttachmentOrThrow(attachment.attachmentId); + attachment = becca.getAttachmentOrThrow(attachmentId); attachment.mime = getImageMimeFromExtension(imageFormat.ext); @@ -177,11 +180,37 @@ function saveImageToAttachment(noteId: string, uploadBuffer: Buffer, originalNam attachment.setContent(buffer, { forceSave: true }); }); + + scheduleOcrForAttachment(attachmentId); }); return attachment; } +function scheduleOcrForNote(noteId: string) { + if (optionService.getOptionBool("ocrAutoProcessImages")) { + setImmediate(async () => { + try { + await ocrService.processNoteOCR(noteId); + } catch (error) { + log.error(`Failed to process OCR for note ${noteId}: ${error}`); + } + }); + } +} + +function scheduleOcrForAttachment(attachmentId: string | undefined) { + if (attachmentId && optionService.getOptionBool("ocrAutoProcessImages")) { + setImmediate(async () => { + try { + await ocrService.processAttachmentOCR(attachmentId); + } catch (error) { + log.error(`Failed to process OCR for attachment ${attachmentId}: ${error}`); + } + }); + } +} + async function shrinkImage(buffer: Buffer, originalName: string) { let jpegQuality = optionService.getOptionInt("imageJpegQuality", 0); diff --git a/apps/server/src/services/llm/providers/base_provider.ts b/apps/server/src/services/llm/providers/base_provider.ts index fda95856c3..5000b4fcbf 100644 --- a/apps/server/src/services/llm/providers/base_provider.ts +++ b/apps/server/src/services/llm/providers/base_provider.ts @@ -3,13 +3,15 @@ * tool assembly, model pricing, and title generation. */ -import { generateText, streamText, stepCountIs, type ModelMessage, type ToolSet } from "ai"; -import type { LanguageModel } from "ai"; import type { LlmMessage } from "@triliumnext/commons"; +import type { LanguageModel } from "ai"; +import { generateText, type ModelMessage, stepCountIs, streamText, type ToolSet } from "ai"; +import yaml from "js-yaml"; import becca from "../../../becca/becca.js"; import { getSkillsSummary } from "../skills/index.js"; -import { noteTools, attributeTools, hierarchyTools, skillTools, currentNoteTools } from "../tools/index.js"; +import { getNoteMeta,SYSTEM_PROMPT_LIMITS } from "../tools/helpers.js"; +import { allToolRegistries } from "../tools/index.js"; import type { LlmProvider, LlmProviderConfig, ModelInfo, ModelPricing, StreamResult } from "../types.js"; const DEFAULT_MAX_TOKENS = 8096; @@ -24,7 +26,7 @@ function effectiveCost(pricing: ModelPricing): number { } /** - * Build a lightweight context hint about the current note (title + type only, no content). + * Build a context hint about the current note with full metadata (same as get_note / ETAPI). */ function buildNoteHint(noteId: string): string | null { const note = becca.getNote(noteId); @@ -32,7 +34,14 @@ function buildNoteHint(noteId: string): string | null { return null; } - return `The user is currently viewing a ${note.type} note titled "${note.title}". Use the get_current_note tool to read its content if needed.`; + const metadata = yaml.dump(getNoteMeta(note, SYSTEM_PROMPT_LIMITS), { lineWidth: -1 }); + return [ + "The user is currently viewing the following note.", + "Use this metadata (including contentPreview) to answer questions about the note without calling tools when possible.", + "Use get_note_content only if the preview is insufficient.", + "", + metadata + ].join("\n"); } /** @@ -72,25 +81,48 @@ export abstract class BaseProvider implements LlmProvider { * Build the system prompt with note hints and skills summary. */ protected buildSystemPrompt(messages: LlmMessage[], config: LlmProviderConfig): string | undefined { - let systemPrompt = config.systemPrompt || messages.find(m => m.role === "system")?.content; + const parts: string[] = []; + // Base system prompt from config or messages + const basePrompt = config.systemPrompt || messages.find(m => m.role === "system")?.content; + if (basePrompt) { + parts.push(basePrompt); + } + + // Context note hint if (config.contextNoteId) { const noteHint = buildNoteHint(config.contextNoteId); if (noteHint) { - systemPrompt = systemPrompt - ? `${systemPrompt}\n\n${noteHint}` - : noteHint; + parts.push(noteHint); } } + // Note tools hint if (config.enableNoteTools) { - const skillsHint = `You have access to skills that provide specialized instructions. Load a skill with the load_skill tool before performing complex operations.\n\nAvailable skills:\n${getSkillsSummary()}`; - systemPrompt = systemPrompt - ? `${systemPrompt}\n\n${skillsHint}` - : skillsHint; + parts.push( + `You have access to skills that provide specialized instructions. Load a skill with the load_skill tool before performing complex operations.\n\nAvailable skills:\n${getSkillsSummary()}` + ); + parts.push( + `When referring to notes in your responses, use the wiki-link format [[noteId]] to create clickable internal links. Use the note ID (not the title) from tool results. The link will automatically display the note's title and icon, so don't repeat the title in your text. For example: "You can find more details in [[ZjSfLhzlqNY6]]" instead of "You can find more details in the Meeting Notes note ([[ZjSfLhzlqNY6]])".` + ); + } else if (config.contextNoteId) { + parts.push( + `You can see the current note's metadata above, but you cannot search or access other notes. If the user asks about other notes, inform them that "Note access" is disabled and they need to enable it in the chat settings (click on the model name dropdown and toggle "Note access").` + ); + } else { + parts.push( + `You do not have access to the user's notes. If the user asks about their notes, inform them that "Note access" is disabled and they need to enable it in the chat settings (click on the model name dropdown and toggle "Note access").` + ); } - return systemPrompt; + // Web search hint + if (!config.enableWebSearch) { + parts.push( + `You do not have access to web search. If the user asks for current/real-time information, news, or anything that requires searching the web, inform them that "Web search" is disabled and they need to enable it in the chat settings (click on the model name dropdown and toggle "Web search").` + ); + } + + return parts.length > 0 ? parts.join("\n\n") : undefined; } /** @@ -128,15 +160,10 @@ export abstract class BaseProvider implements LlmProvider { this.addWebSearchTool(tools); } - if (config.contextNoteId) { - Object.assign(tools, currentNoteTools(config.contextNoteId)); - } - if (config.enableNoteTools) { - Object.assign(tools, noteTools); - Object.assign(tools, attributeTools); - Object.assign(tools, hierarchyTools); - Object.assign(tools, skillTools); + for (const registry of allToolRegistries) { + Object.assign(tools, registry.toToolSet()); + } } return tools; @@ -156,7 +183,7 @@ export abstract class BaseProvider implements LlmProvider { const tools = this.buildTools(config); if (Object.keys(tools).length > 0) { streamOptions.tools = tools; - streamOptions.stopWhen = stepCountIs(5); + streamOptions.stopWhen = stepCountIs(15); streamOptions.toolChoice = "auto"; } diff --git a/apps/server/src/services/llm/skills/index.ts b/apps/server/src/services/llm/skills/index.ts index 614820a5fa..a2ce5d97aa 100644 --- a/apps/server/src/services/llm/skills/index.ts +++ b/apps/server/src/services/llm/skills/index.ts @@ -4,13 +4,13 @@ * included in the system prompt; full content is fetched via the load_skill tool. */ -import { readFile } from "fs/promises"; +import { readFileSync } from "fs"; import { join } from "path"; -import { tool } from "ai"; import { z } from "zod"; import resourceDir from "../../resource_dir.js"; +import { defineTools } from "../tools/tool_registry.js"; const SKILLS_DIR = join(resourceDir.RESOURCE_DIR, "llm", "skills"); @@ -38,12 +38,12 @@ const SKILLS: SkillDefinition[] = [ } ]; -async function loadSkillContent(name: string): Promise { +function loadSkillContent(name: string): string | null { const skill = SKILLS.find((s) => s.name === name); if (!skill) { return null; } - return readFile(join(SKILLS_DIR, skill.file), "utf-8"); + return readFileSync(join(SKILLS_DIR, skill.file), "utf-8"); } /** @@ -55,24 +55,19 @@ export function getSkillsSummary(): string { .join("\n"); } -/** - * The load_skill tool — lets the LLM fetch full instructions on demand. - */ -export const loadSkill = tool({ - description: "Load a skill to get specialized instructions. Available skills:\n" - + SKILLS.map((s) => `- ${s.name}: ${s.description}`).join("\n"), - inputSchema: z.object({ - name: z.string().describe("The skill name to load") - }), - execute: async ({ name }) => { - const content = await loadSkillContent(name); - if (!content) { - return { error: `Unknown skill: '${name}'. Available: ${SKILLS.map((s) => s.name).join(", ")}` }; +export const skillTools = defineTools({ + load_skill: { + description: "Load a skill to get specialized instructions. Available skills:\n" + + SKILLS.map((s) => `- ${s.name}: ${s.description}`).join("\n"), + inputSchema: z.object({ + name: z.string().describe("The skill name to load") + }), + execute: ({ name }) => { + const content = loadSkillContent(name); + if (!content) { + return { error: `Unknown skill: '${name}'. Available: ${SKILLS.map((s) => s.name).join(", ")}` }; + } + return { skill: name, instructions: content }; } - return { skill: name, instructions: content }; } }); - -export const skillTools = { - load_skill: loadSkill -}; diff --git a/apps/server/src/services/llm/tools/attachment_tools.ts b/apps/server/src/services/llm/tools/attachment_tools.ts new file mode 100644 index 0000000000..8b40de0e59 --- /dev/null +++ b/apps/server/src/services/llm/tools/attachment_tools.ts @@ -0,0 +1,67 @@ +/** + * LLM tools for attachment operations. + */ + +import { z } from "zod"; + +import becca from "../../../becca/becca.js"; +import { defineTools } from "./tool_registry.js"; + +export const attachmentTools = defineTools({ + get_attachment: { + description: "Get metadata for a single attachment by its ID.", + inputSchema: z.object({ + attachmentId: z.string().describe("The ID of the attachment to retrieve") + }), + execute: ({ attachmentId }) => { + const attachment = becca.getAttachment(attachmentId); + if (!attachment) { + return { error: "Attachment not found" }; + } + + return { + attachmentId: attachment.attachmentId, + ownerId: attachment.ownerId, + role: attachment.role, + mime: attachment.mime, + title: attachment.title, + dateModified: attachment.dateModified, + contentLength: attachment.contentLength + }; + } + }, + + get_attachment_content: { + description: "Read the text content of an attachment. Works for text-based attachments (code, SVG, plain text) and binary attachments that have OCR/extracted text (PDF, images). Attachments with a null contentPreview in get_note_attachments have no readable content.", + inputSchema: z.object({ + attachmentId: z.string().describe("The ID of the attachment to read") + }), + execute: ({ attachmentId }) => { + const attachment = becca.getAttachment(attachmentId); + if (!attachment) { + return { error: "Attachment not found" }; + } + + if (attachment.hasStringContent()) { + const content = attachment.getContent(); + return { + attachmentId: attachment.attachmentId, + source: "text" as const, + content: typeof content === "string" ? content : content.toString("utf-8") + }; + } + + // For binary attachments, try OCR/extracted text from the blob. + const blob = attachment.blobId ? becca.getBlob({ blobId: attachment.blobId }) : null; + if (blob?.textRepresentation) { + return { + attachmentId: attachment.attachmentId, + source: "ocr" as const, + content: blob.textRepresentation + }; + } + + return { error: "Attachment has no readable text content" }; + } + } +}); diff --git a/apps/server/src/services/llm/tools/attribute_tools.ts b/apps/server/src/services/llm/tools/attribute_tools.ts index d08a94fd01..1df91bdea0 100644 --- a/apps/server/src/services/llm/tools/attribute_tools.ts +++ b/apps/server/src/services/llm/tools/attribute_tools.ts @@ -2,136 +2,122 @@ * LLM tools for attribute operations (get, set, delete labels/relations). */ -import { tool } from "ai"; import { z } from "zod"; import becca from "../../../becca/becca.js"; import attributeService from "../../attributes.js"; +import { flag } from "./helpers.js"; +import { defineTools } from "./tool_registry.js"; -/** - * Get all owned attributes (labels/relations) of a note. - */ -export const getAttributes = tool({ - description: "Get all attributes (labels and relations) of a note. Labels store text values; relations link to other notes by ID.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the note") - }), - execute: async ({ noteId }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; +export const attributeTools = defineTools({ + get_attributes: { + description: "Get all attributes (labels and relations) of a note. Labels store text values; relations link to other notes by ID.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note") + }), + execute: ({ noteId }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + + return note.getOwnedAttributes() + .filter((attr) => !attr.isAutoLink()) + .map((attr) => ({ + attributeId: attr.attributeId, + type: attr.type, + name: attr.name, + value: attr.value, + isInheritable: flag(attr.isInheritable) + })); } + }, - return note.getOwnedAttributes() - .filter((attr) => !attr.isAutoLink()) - .map((attr) => ({ - attributeId: attr.attributeId, - type: attr.type, - name: attr.name, - value: attr.value, - isInheritable: attr.isInheritable - })); + get_attribute: { + description: "Get a single attribute by its ID.", + inputSchema: z.object({ + attributeId: z.string().describe("The ID of the attribute") + }), + execute: ({ attributeId }) => { + const attribute = becca.getAttribute(attributeId); + if (!attribute) { + return { error: "Attribute not found" }; + } + + return { + attributeId: attribute.attributeId, + noteId: attribute.noteId, + type: attribute.type, + name: attribute.name, + value: attribute.value, + isInheritable: flag(attribute.isInheritable) + }; + } + }, + + set_attribute: { + description: "Add or update an attribute on a note. If an attribute with the same type and name exists, it is updated; otherwise a new one is created. Use type 'label' for text values, 'relation' for linking to another note (value must be a noteId).", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note"), + type: z.enum(["label", "relation"]).describe("The attribute type"), + name: z.string().describe("The attribute name"), + value: z.string().optional().describe("The attribute value (for relations, this must be a target noteId)") + }), + mutates: true, + execute: ({ noteId, type, name, value = "" }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + if (note.isProtected) { + return { error: "Note is protected and cannot be modified" }; + } + if (attributeService.isAttributeDangerous(type, name)) { + return { error: `Attribute '${name}' is potentially dangerous and cannot be set by the LLM` }; + } + if (type === "relation" && value && !becca.getNote(value)) { + return { error: "Target note not found for relation" }; + } + + note.setAttribute(type, name, value); + + return { + success: true, + noteId: note.noteId, + type, + name, + value + }; + } + }, + + delete_attribute: { + description: "Remove an attribute from a note by its attribute ID.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note that owns the attribute"), + attributeId: z.string().describe("The ID of the attribute to delete") + }), + mutates: true, + execute: ({ noteId, attributeId }) => { + const attribute = becca.getAttribute(attributeId); + if (!attribute) { + return { error: "Attribute not found" }; + } + if (attribute.noteId !== noteId) { + return { error: "Attribute does not belong to the specified note" }; + } + + const note = becca.getNote(noteId); + if (note?.isProtected) { + return { error: "Note is protected and cannot be modified" }; + } + + attribute.markAsDeleted(); + + return { + success: true, + attributeId + }; + } } }); - -/** - * Get a single attribute by its ID. - */ -export const getAttribute = tool({ - description: "Get a single attribute by its ID.", - inputSchema: z.object({ - attributeId: z.string().describe("The ID of the attribute") - }), - execute: async ({ attributeId }) => { - const attribute = becca.getAttribute(attributeId); - if (!attribute) { - return { error: "Attribute not found" }; - } - - return { - attributeId: attribute.attributeId, - noteId: attribute.noteId, - type: attribute.type, - name: attribute.name, - value: attribute.value, - isInheritable: attribute.isInheritable - }; - } -}); - -/** - * Add or update an attribute on a note. - */ -export const setAttribute = tool({ - description: "Add or update an attribute on a note. If an attribute with the same type and name exists, it is updated; otherwise a new one is created. Use type 'label' for text values, 'relation' for linking to another note (value must be a noteId).", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the note"), - type: z.enum(["label", "relation"]).describe("The attribute type"), - name: z.string().describe("The attribute name"), - value: z.string().optional().describe("The attribute value (for relations, this must be a target noteId)") - }), - execute: async ({ noteId, type, name, value = "" }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; - } - if (note.isProtected) { - return { error: "Note is protected and cannot be modified" }; - } - if (attributeService.isAttributeDangerous(type, name)) { - return { error: `Attribute '${name}' is potentially dangerous and cannot be set by the LLM` }; - } - if (type === "relation" && value && !becca.getNote(value)) { - return { error: "Target note not found for relation" }; - } - - note.setAttribute(type, name, value); - - return { - success: true, - noteId: note.noteId, - type, - name, - value - }; - } -}); - -/** - * Remove an attribute from a note. - */ -export const deleteAttribute = tool({ - description: "Remove an attribute from a note by its attribute ID.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the note that owns the attribute"), - attributeId: z.string().describe("The ID of the attribute to delete") - }), - execute: async ({ noteId, attributeId }) => { - const attribute = becca.getAttribute(attributeId); - if (!attribute) { - return { error: "Attribute not found" }; - } - if (attribute.noteId !== noteId) { - return { error: "Attribute does not belong to the specified note" }; - } - - const note = becca.getNote(noteId); - if (note?.isProtected) { - return { error: "Note is protected and cannot be modified" }; - } - - attribute.markAsDeleted(); - - return { - success: true, - attributeId - }; - } -}); - -export const attributeTools = { - get_attributes: getAttributes, - get_attribute: getAttribute, - set_attribute: setAttribute, - delete_attribute: deleteAttribute -}; diff --git a/apps/server/src/services/llm/tools/helpers.ts b/apps/server/src/services/llm/tools/helpers.ts new file mode 100644 index 0000000000..fbfebb1e12 --- /dev/null +++ b/apps/server/src/services/llm/tools/helpers.ts @@ -0,0 +1,193 @@ +/** + * Shared helpers for LLM tools — content conversion, metadata building, and previews. + */ + +import becca from "../../../becca/becca.js"; +import type BAttachment from "../../../becca/entities/battachment.js"; +import type BNote from "../../../becca/entities/bnote.js"; +import markdownExport from "../../export/markdown.js"; +import markdownImport from "../../import/markdown.js"; + +const CONTENT_PREVIEW_MAX_LENGTH = 500; +const ATTACHMENT_PREVIEW_MAX_LENGTH = 200; +/** Skip expensive content loading/conversion for notes larger than this. */ +const CONTENT_PREVIEW_SIZE_THRESHOLD = 10_000; + +/** + * Return `true` if the value is truthy, otherwise `undefined`. + * Since `undefined` values are omitted from JSON serialization, + * this effectively includes the field only when true. + * Usage: `{ isInheritable: flag(attr.isInheritable) }` + */ +export function flag(value: boolean | undefined): true | undefined { + return value ? true : undefined; +} + +/** + * Convert note content to a format suitable for LLM consumption. + * Text notes are converted from HTML to Markdown to reduce token usage. + */ +export function getNoteContentForLlm(note: BNote) { + const content = note.getContent(); + if (typeof content !== "string") { + // For binary content (images, files), use extracted text if available. + const blob = note.blobId ? becca.getBlob({ blobId: note.blobId }) : null; + if (blob?.textRepresentation) { + return `[extracted text from ${note.type}]\n${blob.textRepresentation}`; + } + return "[binary content]"; + } + if (note.type === "text") { + return markdownExport.toMarkdown(content); + } + return content; +} + +/** + * Convert LLM-provided content to a format suitable for storage. + * For text notes, converts Markdown to HTML. + */ +export function setNoteContentFromLlm(note: BNote, content: string) { + if (note.type === "text") { + note.setContent(markdownImport.renderToHtml(content, note.title)); + } else { + note.setContent(content); + } +} + +/** + * Return a short plain-text content preview for a note, truncated to + * {@link CONTENT_PREVIEW_MAX_LENGTH} characters. Useful for giving an LLM a + * glimpse of the content without sending the full body. + * + * For large notes (>{@link CONTENT_PREVIEW_SIZE_THRESHOLD} bytes), returns a + * size hint instead of loading and converting the full content. + */ +export function getContentPreview(note: BNote): string | null { + if (!note.isContentAvailable()) { + return null; + } + + // Check content size before loading to avoid expensive conversion for large notes + const blob = note.blobId ? becca.getBlob({ blobId: note.blobId }) : null; + if (blob && blob.contentLength > CONTENT_PREVIEW_SIZE_THRESHOLD) { + const sizeKb = Math.round(blob.contentLength / 1024); + return `[${sizeKb}KB - use get_note_content for full text]`; + } + + const full = getNoteContentForLlm(note); + if (!full || full === "[binary content]") { + return null; + } + + if (full.length <= CONTENT_PREVIEW_MAX_LENGTH) { + return full; + } + + return `${full.slice(0, CONTENT_PREVIEW_MAX_LENGTH)}…`; +} + +/** + * Return a short content preview for an attachment, or null if no readable + * content is available. For text attachments the raw content is used; for + * binary attachments (PDF, images) the OCR/extracted text is used when present. + */ +export function getAttachmentContentPreview(att: BAttachment): string | null { + let text: string | null = null; + + if (att.hasStringContent()) { + const content = att.getContent(); + text = typeof content === "string" ? content : content.toString("utf-8"); + } else { + const blob = att.blobId ? becca.getBlob({ blobId: att.blobId }) : null; + text = blob?.textRepresentation ?? null; + } + + if (!text) { + return null; + } + + if (text.length <= ATTACHMENT_PREVIEW_MAX_LENGTH) { + return text; + } + + return `${text.slice(0, ATTACHMENT_PREVIEW_MAX_LENGTH)}…`; +} + +/** Limits for collections returned in system prompt context. */ +export const SYSTEM_PROMPT_LIMITS = { + childNotes: 20, + attributes: 20, + attachments: 20 +} as const; + +/** Limits for collections returned by the get_note tool. */ +export const TOOL_LIMITS = { + childNotes: 50, + attributes: 50, + attachments: 50 +} as const; + +interface NoteMetaLimits { + childNotes: number; + attributes: number; + attachments: number; +} + +/** + * Truncate an array and return it with total count metadata. + * If the array exceeds `limit`, only the first `limit` items are returned. + */ +function truncated(items: T[], limit: number) { + return { + totalCount: items.length, + results: items.slice(0, limit) + }; +} + +/** + * Build the full metadata object for a note. Used by both the `get_note` tool + * and the system prompt. + * + * @param limits — controls how many child notes, attributes, and attachments + * are included. Use {@link SYSTEM_PROMPT_LIMITS} for the system prompt and + * {@link TOOL_LIMITS} for the `get_note` tool. + */ +export function getNoteMeta(note: BNote, limits: NoteMetaLimits) { + const allChildNotes = note.getChildNotes().map((ch) => ({ + noteId: ch.noteId, + title: ch.getTitleOrProtected() + })); + + const allAttributes = note.getAttributes().map((attr) => ({ + attributeId: attr.attributeId, + type: attr.type, + name: attr.name, + value: attr.value, + isInheritable: flag(attr.isInheritable) + })); + + const allAttachments = note.getAttachments().map((att) => ({ + attachmentId: att.attachmentId, + role: att.role, + mime: att.mime, + title: att.title, + contentLength: att.contentLength, + contentPreview: getAttachmentContentPreview(att) + })); + + return { + noteId: note.noteId, + isProtected: flag(note.isProtected), + title: note.getTitleOrProtected(), + type: note.type, + mime: note.mime, + dateCreated: note.dateCreated, + dateModified: note.dateModified, + parentNoteIds: note.getParentNotes().map((p) => p.noteId), + childNotes: truncated(allChildNotes, limits.childNotes), + attributes: truncated(allAttributes, limits.attributes), + contentPreview: getContentPreview(note), + attachments: truncated(allAttachments, limits.attachments) + }; +} diff --git a/apps/server/src/services/llm/tools/hierarchy_tools.ts b/apps/server/src/services/llm/tools/hierarchy_tools.ts index 9bfe60afe2..cb75941c5e 100644 --- a/apps/server/src/services/llm/tools/hierarchy_tools.ts +++ b/apps/server/src/services/llm/tools/hierarchy_tools.ts @@ -2,34 +2,11 @@ * LLM tools for navigating the note hierarchy (tree structure, branches). */ -import { tool } from "ai"; import { z } from "zod"; import becca from "../../../becca/becca.js"; import type BNote from "../../../becca/entities/bnote.js"; - -/** - * Get the child notes of a given note. - */ -export const getChildNotes = tool({ - description: "Get the immediate child notes of a note. Returns each child's ID, title, type, and whether it has children of its own. Use noteId 'root' to list top-level notes.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the parent note (use 'root' for top-level)") - }), - execute: async ({ noteId }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; - } - - return note.getChildNotes().map((child) => ({ - noteId: child.noteId, - title: child.getTitleOrProtected(), - type: child.type, - childCount: child.getChildNotes().length - })); - } -}); +import { defineTools } from "./tool_registry.js"; //#region Subtree tool implementation const MAX_DEPTH = 5; @@ -75,28 +52,42 @@ function buildSubtree(note: BNote, depth: number, maxDepth: number): SubtreeNode return node; } - -/** - * Get a subtree of notes up to a specified depth. - */ -export const getSubtree = tool({ - description: "Get a nested subtree of notes starting from a given note, traversing multiple levels deep. Useful for understanding the structure of a section of the note tree. Each level shows up to 10 children.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the root note for the subtree (use 'root' for the entire tree)"), - depth: z.number().min(1).max(MAX_DEPTH).optional().describe(`How many levels deep to traverse (1-${MAX_DEPTH}). Defaults to 2.`) - }), - execute: async ({ noteId, depth = 2 }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; - } - - return buildSubtree(note, 0, depth); - } -}); //#endregion -export const hierarchyTools = { - get_child_notes: getChildNotes, - get_subtree: getSubtree -}; +export const hierarchyTools = defineTools({ + get_child_notes: { + description: "Get the immediate child notes of a note. Returns each child's ID, title, type, and whether it has children of its own. Use noteId 'root' to list top-level notes.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the parent note (use 'root' for top-level)") + }), + execute: ({ noteId }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + + return note.getChildNotes().map((child) => ({ + noteId: child.noteId, + title: child.getTitleOrProtected(), + type: child.type, + childCount: child.getChildNotes().length + })); + } + }, + + get_subtree: { + description: "Get a nested subtree of notes starting from a given note, traversing multiple levels deep. Useful for understanding the structure of a section of the note tree. Each level shows up to 10 children.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the root note for the subtree (use 'root' for the entire tree)"), + depth: z.number().min(1).max(MAX_DEPTH).optional().describe(`How many levels deep to traverse (1-${MAX_DEPTH}). Defaults to 2.`) + }), + execute: ({ noteId, depth = 2 }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + + return buildSubtree(note, 0, depth); + } + } +}); diff --git a/apps/server/src/services/llm/tools/index.ts b/apps/server/src/services/llm/tools/index.ts index 615067674b..1af4e4bef5 100644 --- a/apps/server/src/services/llm/tools/index.ts +++ b/apps/server/src/services/llm/tools/index.ts @@ -3,7 +3,26 @@ * These reuse the same logic as ETAPI without any HTTP overhead. */ -export { noteTools, currentNoteTools } from "./note_tools.js"; +export { noteTools } from "./note_tools.js"; export { attributeTools } from "./attribute_tools.js"; +export { attachmentTools } from "./attachment_tools.js"; export { hierarchyTools } from "./hierarchy_tools.js"; export { skillTools } from "../skills/index.js"; +export type { ToolDefinition } from "./tool_registry.js"; +export { ToolRegistry } from "./tool_registry.js"; + +import { noteTools } from "./note_tools.js"; +import { attributeTools } from "./attribute_tools.js"; +import { attachmentTools } from "./attachment_tools.js"; +import { hierarchyTools } from "./hierarchy_tools.js"; +import { skillTools } from "../skills/index.js"; +import type { ToolRegistry } from "./tool_registry.js"; + +/** All tool registries, for consumers that need to iterate every tool (e.g. MCP). */ +export const allToolRegistries: ToolRegistry[] = [ + noteTools, + attributeTools, + attachmentTools, + hierarchyTools, + skillTools +]; diff --git a/apps/server/src/services/llm/tools/note_tools.ts b/apps/server/src/services/llm/tools/note_tools.ts index 7e65c7ebde..2daa55a1ca 100644 --- a/apps/server/src/services/llm/tools/note_tools.ts +++ b/apps/server/src/services/llm/tools/note_tools.ts @@ -2,277 +2,234 @@ * LLM tools for note operations (search, read, create, update, append). */ -import { tool } from "ai"; import { z } from "zod"; import becca from "../../../becca/becca.js"; -import markdownExport from "../../export/markdown.js"; import markdownImport from "../../import/markdown.js"; import noteService from "../../notes.js"; import SearchContext from "../../search/search_context.js"; import searchService from "../../search/services/search.js"; +import { TOOL_LIMITS, getContentPreview, getNoteContentForLlm, getNoteMeta, setNoteContentFromLlm } from "./helpers.js"; +import { defineTools } from "./tool_registry.js"; -/** - * Convert note content to a format suitable for LLM consumption. - * Text notes are converted from HTML to Markdown to reduce token usage. - */ -export function getNoteContentForLlm(note: { type: string; getContent: () => string | Buffer }) { - const content = note.getContent(); - if (typeof content !== "string") { - return "[binary content]"; - } - if (note.type === "text") { - return markdownExport.toMarkdown(content); - } - return content; -} - -/** - * Convert LLM-provided content to a format suitable for storage. - * For text notes, converts Markdown to HTML. - */ -function setNoteContentFromLlm(note: { type: string; title: string; setContent: (content: string) => void }, content: string) { - if (note.type === "text") { - note.setContent(markdownImport.renderToHtml(content, note.title)); - } else { - note.setContent(content); - } -} - -/** - * Search for notes in the knowledge base. - */ -export const searchNotes = tool({ - description: [ - "Search for notes in the user's knowledge base using Trilium search syntax.", - "For complex queries (boolean logic, relations, regex, ordering), load the 'search_syntax' skill first via load_skill.", - "Common patterns:", - "- Full-text: 'rings tolkien' (notes containing both words)", - "- By label: '#book', '#status = done', '#year >= 2000'", - "- By type: 'note.type = code'", - "- By relation: '~author', '~author.title *= Tolkien'", - "- Combined: 'tolkien #book' (full-text + label filter)", - "- Negation: '#!archived' (notes WITHOUT label)" - ].join(" "), - inputSchema: z.object({ - query: z.string().describe("Search query in Trilium search syntax"), - fastSearch: z.boolean().optional().describe("If true, skip content search (only titles and attributes). Faster for large databases."), - includeArchivedNotes: z.boolean().optional().describe("If true, include archived notes in results."), - ancestorNoteId: z.string().optional().describe("Limit search to a subtree rooted at this note ID."), - limit: z.number().optional().describe("Maximum number of results to return. Defaults to 10.") - }), - execute: async ({ query, fastSearch, includeArchivedNotes, ancestorNoteId, limit = 10 }) => { - const searchContext = new SearchContext({ - fastSearch, - includeArchivedNotes, - ancestorNoteId - }); - const results = searchService.findResultsWithQuery(query, searchContext); - - return results.slice(0, limit).map(sr => { - const note = becca.notes[sr.noteId]; - if (!note) return null; - return { - noteId: note.noteId, - title: note.getTitleOrProtected(), - type: note.type - }; - }).filter(Boolean); - } -}); - -/** - * Read the content of a specific note. - */ -export const readNote = tool({ - description: "Read the full content of a note by its ID. Use search_notes first to find relevant note IDs. Text notes are returned as Markdown.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the note to read") - }), - execute: async ({ noteId }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; - } - if (!note.isContentAvailable()) { - return { error: "Note is protected" }; - } - - return { - noteId: note.noteId, - title: note.getTitleOrProtected(), - type: note.type, - content: getNoteContentForLlm(note) - }; - } -}); - -/** - * Update the content of a note. - */ -export const updateNoteContent = tool({ - description: "Replace the entire content of a note. Use this to completely rewrite a note's content. For text notes, provide Markdown content.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the note to update"), - content: z.string().describe("The new content for the note (Markdown for text notes, plain text for code notes)") - }), - execute: async ({ noteId, content }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; - } - if (!note.isContentAvailable()) { - return { error: "Note is protected and cannot be modified" }; - } - if (!note.hasStringContent()) { - return { error: `Cannot update content for note type: ${note.type}` }; - } - - note.saveRevision(); - setNoteContentFromLlm(note, content); - return { - success: true, - noteId: note.noteId, - title: note.getTitleOrProtected() - }; - } -}); - -/** - * Append content to a note. - */ -export const appendToNote = tool({ - description: "Append content to the end of an existing note. For text notes, provide Markdown content.", - inputSchema: z.object({ - noteId: z.string().describe("The ID of the note to append to"), - content: z.string().describe("The content to append (Markdown for text notes, plain text for code notes)") - }), - execute: async ({ noteId, content }) => { - const note = becca.getNote(noteId); - if (!note) { - return { error: "Note not found" }; - } - if (!note.isContentAvailable()) { - return { error: "Note is protected and cannot be modified" }; - } - if (!note.hasStringContent()) { - return { error: `Cannot update content for note type: ${note.type}` }; - } - - const existingContent = note.getContent(); - if (typeof existingContent !== "string") { - return { error: "Note has binary content" }; - } - - let newContent: string; - if (note.type === "text") { - const htmlToAppend = markdownImport.renderToHtml(content, note.getTitleOrProtected()); - newContent = existingContent + htmlToAppend; - } else { - newContent = existingContent + (existingContent.endsWith("\n") ? "" : "\n") + content; - } - - note.saveRevision(); - note.setContent(newContent); - return { - success: true, - noteId: note.noteId, - title: note.getTitleOrProtected() - }; - } -}); - -/** - * Create a new note. - */ -export const createNote = tool({ - description: [ - "Create a new note in the user's knowledge base. Returns the created note's ID and title.", - "Set type to 'text' for rich text notes (content in Markdown) or 'code' for code notes (must also set mime).", - "Common mime values for code notes:", - "'application/javascript;env=frontend' (JS frontend),", - "'application/javascript;env=backend' (JS backend),", - "'text/jsx' (Preact JSX, preferred for frontend widgets),", - "'text/css', 'text/html', 'application/json', 'text/x-python', 'text/x-sh'." - ].join(" "), - inputSchema: z.object({ - parentNoteId: z.string().describe("The ID of the parent note. Use 'root' for top-level notes."), - title: z.string().describe("The title of the new note"), - content: z.string().describe("The content of the note (Markdown for text notes, plain text for code notes)"), - type: z.enum(["text", "code"]).describe("The type of note to create."), - mime: z.string().optional().describe("MIME type, REQUIRED for code notes (e.g. 'application/javascript;env=backend', 'text/jsx'). Ignored for text notes.") - }), - execute: async ({ parentNoteId, title, content, type, mime }) => { - if (type === "code" && !mime) { - return { error: "mime is required when creating code notes" }; - } - - const parentNote = becca.getNote(parentNoteId); - if (!parentNote) { - return { error: "Parent note not found" }; - } - if (!parentNote.isContentAvailable()) { - return { error: "Cannot create note under a protected parent" }; - } - - const htmlContent = type === "text" - ? markdownImport.renderToHtml(content, title) - : content; - - try { - const { note } = noteService.createNewNote({ - parentNoteId, - title, - content: htmlContent, - type, - ...(mime ? { mime } : {}) +export const noteTools = defineTools({ + search_notes: { + description: [ + "Search for notes in the user's knowledge base using Trilium search syntax.", + "For complex queries (boolean logic, relations, regex, ordering), load the 'search_syntax' skill first via load_skill.", + "Common patterns:", + "- Full-text: 'rings tolkien' (notes containing both words)", + "- By label: '#book', '#status = done', '#year >= 2000'", + "- By type: 'note.type = code'", + "- By relation: '~author', '~author.title *= Tolkien'", + "- Combined: 'tolkien #book' (full-text + label filter)", + "- Negation: '#!archived' (notes WITHOUT label)" + ].join(" "), + inputSchema: z.object({ + query: z.string().describe("Search query in Trilium search syntax"), + fastSearch: z.boolean().optional().describe("If true, skip content search (only titles and attributes). Faster for large databases."), + includeArchivedNotes: z.boolean().optional().describe("If true, include archived notes in results."), + ancestorNoteId: z.string().optional().describe("Limit search to a subtree rooted at this note ID."), + limit: z.number().optional().describe("Maximum number of results to return. Defaults to 10.") + }), + execute: ({ query, fastSearch, includeArchivedNotes, ancestorNoteId, limit = 10 }) => { + const searchContext = new SearchContext({ + fastSearch, + includeArchivedNotes, + ancestorNoteId }); + const results = searchService.findResultsWithQuery(query, searchContext); - return { - success: true, - noteId: note.noteId, - title: note.getTitleOrProtected(), - type: note.type - }; - } catch (err) { - return { error: err instanceof Error ? err.message : "Failed to create note" }; - } - } -}); - -/** - * Read the content of the note the user is currently viewing. - * Created dynamically so it captures the contextNoteId. - */ -export function currentNoteTools(contextNoteId: string) { - return { - get_current_note: tool({ - description: "Read the content of the note the user is currently viewing. Call this when the user asks about or refers to their current note.", - inputSchema: z.object({}), - execute: async () => { - const note = becca.getNote(contextNoteId); - if (!note) { - return { error: "Note not found" }; - } - if (!note.isContentAvailable()) { - return { error: "Note is protected" }; - } - + const notes = results.slice(0, limit).map(sr => { + const note = becca.notes[sr.noteId]; + if (!note) return null; + const parentNote = note.getParentNotes()[0]; return { noteId: note.noteId, title: note.getTitleOrProtected(), type: note.type, - content: getNoteContentForLlm(note) + parentTitle: parentNote?.getTitleOrProtected() ?? null, + contentPreview: getContentPreview(note) }; - } - }) - }; -} + }).filter(Boolean); -export const noteTools = { - search_notes: searchNotes, - read_note: readNote, - update_note_content: updateNoteContent, - append_to_note: appendToNote, - create_note: createNote -}; + return { + totalResults: results.length, + results: notes + }; + } + }, + + get_note: { + description: "Get a note's metadata by its ID. Returns title, type, mime, dates, parent/child relationships, attributes, and a short content preview. Use get_note_content for the full content.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note to retrieve") + }), + execute: ({ noteId }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + + return getNoteMeta(note, TOOL_LIMITS); + } + }, + + get_note_content: { + description: "Read the full content of a note by its ID. Use search_notes first to find relevant note IDs. Text notes are returned as Markdown.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note to read") + }), + execute: ({ noteId }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + if (!note.isContentAvailable()) { + return { error: "Note is protected" }; + } + + return { + noteId: note.noteId, + content: getNoteContentForLlm(note) + }; + } + }, + + update_note_content: { + description: "Replace the entire content of a note. Use this to completely rewrite a note's content. For text notes, provide Markdown content.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note to update"), + content: z.string().describe("The new content for the note (Markdown for text notes, plain text for code notes)") + }), + mutates: true, + execute: ({ noteId, content }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + if (!note.isContentAvailable()) { + return { error: "Note is protected and cannot be modified" }; + } + if (!note.hasStringContent()) { + return { error: `Cannot update content for note type: ${note.type}` }; + } + + note.saveRevision(); + setNoteContentFromLlm(note, content); + return { + success: true, + noteId: note.noteId, + title: note.getTitleOrProtected() + }; + } + }, + + append_to_note: { + description: "Append content to the end of an existing note. For text notes, provide Markdown content.", + inputSchema: z.object({ + noteId: z.string().describe("The ID of the note to append to"), + content: z.string().describe("The content to append (Markdown for text notes, plain text for code notes)") + }), + mutates: true, + execute: ({ noteId, content }) => { + const note = becca.getNote(noteId); + if (!note) { + return { error: "Note not found" }; + } + if (!note.isContentAvailable()) { + return { error: "Note is protected and cannot be modified" }; + } + if (!note.hasStringContent()) { + return { error: `Cannot update content for note type: ${note.type}` }; + } + + const existingContent = note.getContent(); + if (typeof existingContent !== "string") { + return { error: "Note has binary content" }; + } + + let newContent: string; + if (note.type === "text") { + const htmlToAppend = markdownImport.renderToHtml(content, note.getTitleOrProtected()); + newContent = existingContent + htmlToAppend; + } else { + newContent = existingContent + (existingContent.endsWith("\n") ? "" : "\n") + content; + } + + note.saveRevision(); + note.setContent(newContent); + return { + success: true, + noteId: note.noteId, + title: note.getTitleOrProtected() + }; + } + }, + + create_note: { + description: [ + "Create a new note in the user's knowledge base. Returns the created note's ID and title.", + "Note types:", + "- 'text': rich text (provide content in Markdown)", + "- 'code': source code (must also set mime)", + "- 'render': displays output of a child code note (content is empty, add a code note as child and set ~renderNote relation)", + "- 'book': container that displays children as a book/list", + "- 'mermaid': Mermaid diagram source", + "- 'canvas': Excalidraw drawing (JSON content)", + "- 'webView': embedded web page (set content to URL or HTML)", + "- 'relationMap': visual map of note relations (JSON content)", + "- 'search': saved search (content is the search query)", + "- 'mindMap': mind map (JSON content)", + "Common mime values for code notes:", + "'application/javascript;env=frontend' (JS frontend),", + "'application/javascript;env=backend' (JS backend),", + "'text/jsx' (Preact JSX, preferred for frontend widgets),", + "'text/css', 'text/html', 'application/json', 'text/x-python', 'text/x-sh'." + ].join(" "), + inputSchema: z.object({ + parentNoteId: z.string().describe("The ID of the parent note. Use 'root' for top-level notes."), + title: z.string().describe("The title of the new note"), + content: z.string().describe("The content of the note (Markdown for text notes, plain text for code notes, empty string for render notes)"), + type: z.enum(["text", "code", "render", "book", "mermaid", "canvas", "webView", "relationMap", "search", "mindMap"]).describe("The type of note to create."), + mime: z.string().optional().describe("MIME type, REQUIRED for code notes (e.g. 'application/javascript;env=backend', 'text/jsx'). Ignored for other types.") + }), + mutates: true, + execute: ({ parentNoteId, title, content, type, mime }) => { + if (type === "code" && !mime) { + return { error: "mime is required when creating code notes" }; + } + + const parentNote = becca.getNote(parentNoteId); + if (!parentNote) { + return { error: "Parent note not found" }; + } + if (!parentNote.isContentAvailable()) { + return { error: "Cannot create note under a protected parent" }; + } + + const htmlContent = type === "text" + ? markdownImport.renderToHtml(content, title) + : content; + + try { + const { note } = noteService.createNewNote({ + parentNoteId, + title, + content: htmlContent, + type, + ...(mime ? { mime } : {}) + }); + + return { + success: true, + noteId: note.noteId, + title: note.getTitleOrProtected(), + type: note.type + }; + } catch (err) { + return { error: err instanceof Error ? err.message : "Failed to create note" }; + } + } + } +}); diff --git a/apps/server/src/services/llm/tools/tool_registry.ts b/apps/server/src/services/llm/tools/tool_registry.ts new file mode 100644 index 0000000000..35fc225182 --- /dev/null +++ b/apps/server/src/services/llm/tools/tool_registry.ts @@ -0,0 +1,94 @@ +/** + * Lightweight wrapper around AI tool definitions that carries extra metadata + * (e.g. `mutates`) while remaining compatible with the Vercel AI SDK ToolSet. + * + * Each tool module calls `defineTools({ ... })` to declare its tools. + * Consumers can then: + * - iterate over entries with `for (const [name, def] of registry)` (MCP) + * - convert to an AI SDK ToolSet with `registry.toToolSet()` (LLM chat) + */ + +import { tool } from "ai"; +import type { z } from "zod"; +import type { ToolSet } from "ai"; + +import sql from "../../sql.js"; + +/** + * Type constraint that rejects Promises at compile time. + * Works by requiring `then` to be void if present - Promises have `then: Function`. + */ +type NotAPromise = T & { then?: void }; + +interface MutatingToolDefinition { + description: string; + inputSchema: z.ZodType; + /** Marks this tool as modifying data (needs CLS + transaction wrapping). */ + mutates: true; + /** + * Execute the tool synchronously. Must NOT be async because better-sqlite3 + * transactions are synchronous and would commit before awaits complete. + */ + execute: (args: any) => NotAPromise; +} + +interface ReadOnlyToolDefinition { + description: string; + inputSchema: z.ZodType; + mutates?: false; + /** Execute the tool synchronously. Kept sync for consistency with MCP. */ + execute: (args: any) => NotAPromise; +} + +export type ToolDefinition = MutatingToolDefinition | ReadOnlyToolDefinition; + +/** + * A named collection of tool definitions that can be iterated or converted + * to an AI SDK ToolSet. + */ +export class ToolRegistry implements Iterable<[string, ToolDefinition]> { + constructor(private readonly tools: Record) {} + + /** Iterate over `[name, definition]` pairs. */ + [Symbol.iterator](): Iterator<[string, ToolDefinition]> { + return Object.entries(this.tools)[Symbol.iterator](); + } + + /** + * Convert to an AI SDK ToolSet for use with the LLM chat providers. + * Mutating tools are wrapped in a transaction for consistency with MCP. + * (CLS context is provided by the route handler.) + */ + toToolSet(): ToolSet { + const set: ToolSet = {}; + for (const [name, def] of this) { + const execute = def.mutates + ? (args: unknown) => sql.transactional(() => def.execute(args)) + : def.execute; + + set[name] = tool({ + description: def.description, + inputSchema: def.inputSchema, + execute + }); + } + return set; + } +} + +/** + * Define a group of tools with metadata. + * + * ```ts + * export const noteTools = defineTools({ + * search_notes: { description: "...", inputSchema: z.object({...}), execute: (args) => {...} }, + * create_note: { description: "...", inputSchema: z.object({...}), mutates: true, execute: (args) => {...} }, + * }); + * ``` + * + * Note: All tools MUST have synchronous execute functions (no async/await) + * because better-sqlite3 transactions are synchronous and MCP expects sync results. + */ +export function defineTools(tools: Record): ToolRegistry { + return new ToolRegistry(tools); +} diff --git a/apps/server/src/services/mcp/mcp_server.ts b/apps/server/src/services/mcp/mcp_server.ts new file mode 100644 index 0000000000..382b5025c7 --- /dev/null +++ b/apps/server/src/services/mcp/mcp_server.ts @@ -0,0 +1,53 @@ +/** + * MCP (Model Context Protocol) server for Trilium Notes. + * + * Exposes existing LLM tools via the MCP protocol so external AI agents + * (e.g. Claude Desktop) can interact with Trilium. + */ + +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js"; + +import appInfo from "../app_info.js"; +import cls from "../cls.js"; +import { allToolRegistries } from "../llm/tools/index.js"; +import type { ToolDefinition } from "../llm/tools/tool_registry.js"; +import sql from "../sql.js"; + +/** + * Register a tool definition on the MCP server. + * + * Write operations are wrapped in CLS + transaction context so that + * Becca entity tracking works correctly. + */ +function registerTool(server: McpServer, name: string, def: ToolDefinition) { + server.registerTool(name, { + description: def.description, + inputSchema: def.inputSchema + }, (args: any): CallToolResult => { + const result = cls.init(() => { + cls.set("componentId", "mcp"); + + return def.mutates + ? sql.transactional(() => def.execute(args)) + : def.execute(args); + }); + + return { content: [{ type: "text", text: JSON.stringify(result) }] }; + }); +} + +export function createMcpServer(): McpServer { + const server = new McpServer({ + name: "trilium-notes", + version: appInfo.appVersion + }); + + for (const registry of allToolRegistries) { + for (const [name, def] of registry) { + registerTool(server, name, def); + } + } + + return server; +} diff --git a/apps/server/src/services/ocr/ocr_service.spec.ts b/apps/server/src/services/ocr/ocr_service.spec.ts new file mode 100644 index 0000000000..7721750436 --- /dev/null +++ b/apps/server/src/services/ocr/ocr_service.spec.ts @@ -0,0 +1,450 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +// Mock Tesseract.js +const mockWorker = { + recognize: vi.fn(), + terminate: vi.fn(), + reinitialize: vi.fn() +}; + +const mockTesseract = { + createWorker: vi.fn().mockResolvedValue(mockWorker) +}; + +vi.mock('tesseract.js', () => ({ + default: mockTesseract +})); + +// Mock dependencies +const mockOptions = { + getOptionBool: vi.fn(), + getOption: vi.fn() +}; + +const mockLog = { + info: vi.fn(), + error: vi.fn() +}; + +const mockSql = { + execute: vi.fn(), + getRow: vi.fn(), + getRows: vi.fn(), + getColumn: vi.fn() +}; + +const mockBecca = { + getNote: vi.fn(), + getAttachment: vi.fn(), + getBlob: vi.fn() +}; + +const mockBlobService = { + calculateContentHash: vi.fn().mockReturnValue('hash123') +}; + +const mockEntityChangesService = { + putEntityChange: vi.fn() +}; + +vi.mock('../options.js', () => ({ + default: mockOptions +})); + +vi.mock('../log.js', () => ({ + default: mockLog +})); + +vi.mock('../sql.js', () => ({ + default: mockSql +})); + +vi.mock('../../becca/becca.js', () => ({ + default: mockBecca +})); + +vi.mock('../blob.js', () => ({ + default: mockBlobService +})); + +vi.mock('../entity_changes.js', () => ({ + default: mockEntityChangesService +})); + +// Import the service after mocking +let ocrService: typeof import('./ocr_service.js').default; + +beforeEach(async () => { + vi.clearAllMocks(); + + // Reset mock implementations + mockOptions.getOptionBool.mockReturnValue(true); + mockOptions.getOption.mockImplementation((name: string) => { + if (name === 'ocrMinConfidence') return '0'; + return 'eng'; + }); + mockSql.execute.mockImplementation(() => ({ lastInsertRowid: 1 })); + mockSql.getRow.mockReturnValue(null); + mockSql.getRows.mockReturnValue([]); + mockSql.getColumn.mockReturnValue([]); + + // Mock getBlob for putBlobEntityChange + mockBecca.getBlob.mockReturnValue({ + blobId: 'blob123', + content: Buffer.from('data'), + textRepresentation: null, + utcDateModified: '2025-01-01' + }); + + mockTesseract.createWorker.mockImplementation(async () => { + return mockWorker; + }); + + // Dynamically import the service to ensure mocks are applied + const module = await import('./ocr_service.js'); + ocrService = module.default; + + // Reset the OCR service state + (ocrService as any).batchProcessingState = { + inProgress: false, + total: 0, + processed: 0 + }; +}); + +afterEach(() => { + vi.restoreAllMocks(); +}); + +describe('OCRService', () => { + describe('extractTextFromFile', () => { + const mockImageBuffer = Buffer.from('fake-image-data'); + + it('should extract text successfully with default options', async () => { + const mockResult = { + data: { + text: 'Extracted text from image', + confidence: 95, + words: [{ text: 'Extracted', confidence: 95 }, { text: 'text', confidence: 95 }, { text: 'from', confidence: 95 }, { text: 'image', confidence: 95 }] + } + }; + mockWorker.recognize.mockResolvedValue(mockResult); + + const result = await ocrService.extractTextFromFile(mockImageBuffer, 'image/jpeg'); + + expect(result).toBeDefined(); + expect(result.text).toBe('Extracted text from image'); + expect(result.extractedAt).toEqual(expect.any(String)); + }); + + it('should handle OCR recognition errors', async () => { + const error = new Error('OCR recognition failed'); + mockWorker.recognize.mockRejectedValue(error); + + await expect(ocrService.extractTextFromFile(mockImageBuffer, 'image/jpeg')).rejects.toThrow('OCR recognition failed'); + expect(mockLog.error).toHaveBeenCalledWith('Image OCR text extraction failed: Error: OCR recognition failed'); + }); + }); + + describe('storeOCRResult', () => { + it('should store OCR result in blob successfully', () => { + const ocrResult = { + text: 'Sample text', + confidence: 0.95, + extractedAt: '2025-06-10T10:00:00.000Z', + language: 'eng' + }; + + ocrService.storeOCRResult('blob123', ocrResult); + + expect(mockSql.execute).toHaveBeenCalledWith( + expect.stringContaining('UPDATE blobs SET textRepresentation = ?'), + ['Sample text', 'blob123'] + ); + }); + + it('should handle undefined blobId gracefully', () => { + const ocrResult = { + text: 'Sample text', + confidence: 0.95, + extractedAt: '2025-06-10T10:00:00.000Z', + language: 'eng' + }; + + ocrService.storeOCRResult(undefined, ocrResult); + + expect(mockSql.execute).not.toHaveBeenCalled(); + expect(mockLog.error).toHaveBeenCalledWith('Cannot store OCR result: blobId is undefined'); + }); + + it('should handle database update errors', () => { + const error = new Error('Database error'); + mockSql.execute.mockImplementation(() => { + throw error; + }); + + const ocrResult = { + text: 'Sample text', + confidence: 0.95, + extractedAt: '2025-06-10T10:00:00.000Z', + language: 'eng' + }; + + expect(() => ocrService.storeOCRResult('blob123', ocrResult)).toThrow('Database error'); + expect(mockLog.error).toHaveBeenCalledWith('Failed to store OCR result for blob blob123: Error: Database error'); + }); + }); + + describe('processNoteOCR', () => { + const mockNote = { + noteId: 'note123', + type: 'image', + mime: 'image/jpeg', + blobId: 'blob123', + getContent: vi.fn(), + getLabelValue: vi.fn().mockReturnValue(null) + }; + + beforeEach(() => { + mockBecca.getNote.mockReturnValue(mockNote); + mockNote.getContent.mockReturnValue(Buffer.from('fake-image-data')); + mockNote.mime = 'image/jpeg'; + }); + + it('should process note OCR successfully', async () => { + mockSql.getRow.mockReturnValue(null); + + const mockOCRResult = { + data: { + text: 'Note image text', + confidence: 90, + words: [{ text: 'Note', confidence: 90 }, { text: 'image', confidence: 90 }, { text: 'text', confidence: 90 }] + } + }; + mockWorker.recognize.mockResolvedValue(mockOCRResult); + + const result = await ocrService.processNoteOCR('note123'); + + expect(result).toBeDefined(); + expect(result!.text).toBe('Note image text'); + expect(mockBecca.getNote).toHaveBeenCalledWith('note123'); + expect(mockNote.getContent).toHaveBeenCalled(); + }); + + it('should skip processing if OCR already exists and forceReprocess is false', async () => { + mockSql.getRow.mockReturnValue({ textRepresentation: 'Existing text' }); + + const result = await ocrService.processNoteOCR('note123'); + + expect(result).toBeNull(); + expect(mockNote.getContent).not.toHaveBeenCalled(); + }); + + it('should reprocess if forceReprocess is true', async () => { + mockSql.getRow.mockReturnValue({ textRepresentation: 'Existing text' }); + + const mockOCRResult = { + data: { + text: 'New processed text', + confidence: 95, + words: [{ text: 'New', confidence: 95 }, { text: 'processed', confidence: 95 }, { text: 'text', confidence: 95 }] + } + }; + mockWorker.recognize.mockResolvedValue(mockOCRResult); + + const result = await ocrService.processNoteOCR('note123', { forceReprocess: true }); + + expect(result?.text).toBe('New processed text'); + expect(mockNote.getContent).toHaveBeenCalled(); + }); + + it('should return null for non-existent note', async () => { + mockBecca.getNote.mockReturnValue(null); + + const result = await ocrService.processNoteOCR('nonexistent'); + + expect(result).toBe(null); + expect(mockLog.error).toHaveBeenCalledWith('Note nonexistent not found'); + }); + + it('should return null for unsupported MIME type', async () => { + mockNote.mime = 'text/plain'; + + const result = await ocrService.processNoteOCR('note123'); + + expect(result).toBe(null); + expect(mockLog.info).toHaveBeenCalledWith('note note123 has unsupported MIME type text/plain for text extraction, skipping'); + }); + }); + + describe('processAttachmentOCR', () => { + const mockAttachment = { + attachmentId: 'attach123', + ownerId: 'note123', + role: 'image', + mime: 'image/png', + blobId: 'blob456', + getContent: vi.fn() + }; + + beforeEach(() => { + mockBecca.getAttachment.mockReturnValue(mockAttachment); + mockBecca.getNote.mockReturnValue({ getLabelValue: vi.fn().mockReturnValue(null) }); + mockAttachment.getContent.mockReturnValue(Buffer.from('fake-image-data')); + }); + + it('should process attachment OCR successfully', async () => { + mockSql.getRow.mockReturnValue(null); + + const mockOCRResult = { + data: { + text: 'Attachment image text', + confidence: 92, + words: [{ text: 'Attachment', confidence: 92 }, { text: 'image', confidence: 92 }, { text: 'text', confidence: 92 }] + } + }; + mockWorker.recognize.mockResolvedValue(mockOCRResult); + + const result = await ocrService.processAttachmentOCR('attach123'); + + expect(result).toBeDefined(); + expect(result!.text).toBe('Attachment image text'); + expect(mockBecca.getAttachment).toHaveBeenCalledWith('attach123'); + }); + + it('should return null for non-existent attachment', async () => { + mockBecca.getAttachment.mockReturnValue(null); + + const result = await ocrService.processAttachmentOCR('nonexistent'); + + expect(result).toBe(null); + expect(mockLog.error).toHaveBeenCalledWith('Attachment nonexistent not found'); + }); + }); + + describe('Batch Processing', () => { + // Helper to mock getBlobsNeedingOCR to return entities + function mockBlobsNeedingOCR(notes: Array<{ entityId: string; mimeType: string }>, attachments: Array<{ entityId: string; mimeType: string }> = []) { + const noteRows = notes.map(n => ({ blobId: `blob_${n.entityId}`, mimeType: n.mimeType, entityId: n.entityId })); + const attachmentRows = attachments.map(a => ({ blobId: `blob_${a.entityId}`, mimeType: a.mimeType, entityId: a.entityId })); + mockSql.getRows.mockReturnValueOnce(noteRows); + mockSql.getRows.mockReturnValueOnce(attachmentRows); + } + + describe('startBatchProcessing', () => { + beforeEach(() => { + ocrService.cancelBatchProcessing(); + }); + + it('should start batch processing when items are available', async () => { + mockBlobsNeedingOCR( + [{ entityId: 'note1', mimeType: 'image/jpeg' }] + ); + + const result = await ocrService.startBatchProcessing(); + + expect(result).toEqual({ success: true }); + }); + + it('should return error if batch processing already in progress', async () => { + // First call: items for starting + mockBlobsNeedingOCR( + [{ entityId: 'note1', mimeType: 'image/jpeg' }] + ); + // Mock note for background processing + mockBecca.getNote.mockReturnValue({ + noteId: 'note1', type: 'image', mime: 'image/jpeg', blobId: 'blob1', + getContent: vi.fn().mockReturnValue(Buffer.from('data')), + getLabelValue: vi.fn().mockReturnValue(null) + }); + mockWorker.recognize.mockResolvedValue({ data: { text: 'text', confidence: 90, words: [] } }); + + ocrService.startBatchProcessing(); + + const result = await ocrService.startBatchProcessing(); + + expect(result).toEqual({ + success: false, + message: 'Batch processing already in progress' + }); + }); + + it('should return error if no items need processing', async () => { + mockBlobsNeedingOCR([], []); + + const result = await ocrService.startBatchProcessing(); + + expect(result).toEqual({ + success: false, + message: 'No images found that need OCR processing' + }); + }); + + it('should handle database errors gracefully', async () => { + mockSql.getRows.mockImplementation(() => { + throw new Error('Database connection failed'); + }); + + const result = await ocrService.startBatchProcessing(); + + // getBlobsNeedingOCR catches DB errors and returns [], so startBatchProcessing sees no items + expect(result).toEqual({ + success: false, + message: 'No images found that need OCR processing' + }); + expect(mockLog.error).toHaveBeenCalledWith( + expect.stringContaining('Failed to get blobs needing OCR') + ); + }); + }); + + describe('getBatchProgress', () => { + it('should return initial progress state', () => { + const progress = ocrService.getBatchProgress(); + + expect(progress.inProgress).toBe(false); + expect(progress.total).toBe(0); + expect(progress.processed).toBe(0); + }); + + it('should return progress with percentage when total > 0', async () => { + mockBlobsNeedingOCR( + Array.from({ length: 10 }, (_, i) => ({ entityId: `note${i}`, mimeType: 'image/jpeg' })) + ); + + ocrService.startBatchProcessing(); + + const progress = ocrService.getBatchProgress(); + + expect(progress.inProgress).toBe(true); + expect(progress.total).toBe(10); + expect(progress.processed).toBe(0); + expect(progress.percentage).toBe(0); + expect(progress.startTime).toBeInstanceOf(Date); + }); + }); + + describe('cancelBatchProcessing', () => { + it('should cancel ongoing batch processing', async () => { + mockBlobsNeedingOCR( + [{ entityId: 'note1', mimeType: 'image/jpeg' }] + ); + + ocrService.startBatchProcessing(); + + expect(ocrService.getBatchProgress().inProgress).toBe(true); + + ocrService.cancelBatchProcessing(); + + expect(ocrService.getBatchProgress().inProgress).toBe(false); + expect(mockLog.info).toHaveBeenCalledWith('Batch OCR processing cancelled'); + }); + + it('should do nothing if no batch processing is running', () => { + ocrService.cancelBatchProcessing(); + + expect(mockLog.info).not.toHaveBeenCalledWith('Batch OCR processing cancelled'); + }); + }); + }); +}); diff --git a/apps/server/src/services/ocr/ocr_service.ts b/apps/server/src/services/ocr/ocr_service.ts new file mode 100644 index 0000000000..f59ff8e609 --- /dev/null +++ b/apps/server/src/services/ocr/ocr_service.ts @@ -0,0 +1,462 @@ +import { getTesseractCode } from '@triliumnext/commons'; + +import becca from '../../becca/becca.js'; +import blobService from '../blob.js'; +import entityChangesService from '../entity_changes.js'; +import log from '../log.js'; +import options from '../options.js'; +import sql from '../sql.js'; +import { FileProcessor } from './processors/file_processor.js'; +import { ImageProcessor } from './processors/image_processor.js'; +import { OfficeProcessor } from './processors/office_processor.js'; +import { PDFProcessor } from './processors/pdf_processor.js'; + +export interface OCRResult { + text: string; + confidence: number; + extractedAt: string; + language?: string; + pageCount?: number; +} + +export interface OCRProcessingOptions { + language?: string; + forceReprocess?: boolean; + confidence?: number; + enablePDFTextExtraction?: boolean; + mimeType?: string; +} + +/** + * OCR Service for extracting text from images and other OCR-able objects + * Uses Tesseract.js for text recognition + */ +class OCRService { + private processors: Map = new Map(); + + constructor() { + this.processors.set('image', new ImageProcessor()); + this.processors.set('pdf', new PDFProcessor()); + this.processors.set('office', new OfficeProcessor()); + } + + /** + * Resolves the Tesseract language code(s) for OCR processing. + * + * Priority: + * 1. Explicitly passed `language` option (e.g. from API call) + * 2. The note's `language` label (mapped via {@link getTesseractCode}) + * 3. All enabled content languages joined with `+` + * 4. The UI locale + * 5. Fallback to `eng` + */ + resolveOcrLanguage(noteId?: string, explicitLanguage?: string): string { + // 1. Explicit language from caller + if (explicitLanguage) { + return explicitLanguage; + } + + // 2. Note's language label + if (noteId) { + const note = becca.getNote(noteId); + const noteLanguage = note?.getLabelValue("language"); + if (noteLanguage) { + const code = getTesseractCode(noteLanguage); + if (code) { + return code; + } + } + } + + // 3. All enabled content languages + try { + const languagesJson = options.getOption("languages"); + const enabledLanguages = JSON.parse(languagesJson || "[]") as string[]; + if (enabledLanguages.length > 0) { + const codes = enabledLanguages + .map((id) => getTesseractCode(id)) + .filter((code): code is string => code !== null); + // Deduplicate (e.g. en + en-GB both map to eng) + const unique = [...new Set(codes)]; + if (unique.length > 0) { + return unique.join("+"); + } + } + } catch { + // Fall through + } + + // 4. UI locale + try { + const uiLocale = options.getOption("locale"); + if (uiLocale) { + const code = getTesseractCode(uiLocale); + if (code) { + return code; + } + } + } catch { + // Fall through + } + + // 5. Fallback + return "eng"; + } + + + /** + * Extract text from file buffer using appropriate processor + */ + async extractTextFromFile(fileBuffer: Buffer, mimeType: string, options: OCRProcessingOptions = {}): Promise { + log.info(`Starting OCR text extraction for MIME type: ${mimeType} with language: ${options.language || "eng"}`); + + const processor = this.getProcessorForMimeType(mimeType); + if (!processor) { + throw new Error(`No processor found for MIME type: ${mimeType}`); + } + + const result = await processor.extractText(fileBuffer, { ...options, mimeType }); + + log.info(`OCR extraction completed. Confidence: ${Math.round(result.confidence * 100)}%, Text length: ${result.text.length}`); + return result; + } + + /** + * Process OCR for a note (image type) + */ + async processNoteOCR(noteId: string, options: OCRProcessingOptions = {}): Promise { + const note = becca.getNote(noteId); + if (!note) { + log.error(`Note ${noteId} not found`); + return null; + } + + return this.processEntityOCR({ + entityId: noteId, + entityType: 'note', + category: note.type, + mime: note.mime, + blobId: note.blobId, + languageNoteId: noteId, + getContent: () => note.getContent() + }, options); + } + + /** + * Process OCR for an attachment + */ + async processAttachmentOCR(attachmentId: string, options: OCRProcessingOptions = {}): Promise { + const attachment = becca.getAttachment(attachmentId); + if (!attachment) { + log.error(`Attachment ${attachmentId} not found`); + return null; + } + + return this.processEntityOCR({ + entityId: attachmentId, + entityType: 'attachment', + category: attachment.role, + mime: attachment.mime, + blobId: attachment.blobId, + languageNoteId: attachment.ownerId, + getContent: () => attachment.getContent() + }, options); + } + + /** + * Shared OCR processing logic for both notes and attachments. + */ + private async processEntityOCR(entity: { + entityId: string; + entityType: string; + category: string; + mime: string; + blobId: string | undefined; + languageNoteId: string; + getContent: () => string | Buffer; + }, options: OCRProcessingOptions = {}): Promise { + const { entityId, entityType, category, mime, blobId, languageNoteId } = entity; + + if (!['image', 'file'].includes(category)) { + log.info(`${entityType} ${entityId} is not an image or file, skipping OCR`); + return null; + } + + if (!this.getProcessorForMimeType(mime)) { + log.info(`${entityType} ${entityId} has unsupported MIME type ${mime} for text extraction, skipping`); + return null; + } + + if (!options.forceReprocess && this.hasStoredOCRResult(blobId)) { + log.info(`OCR already exists for ${entityType} ${entityId}, skipping`); + return null; + } + + try { + const content = entity.getContent(); + if (!content || !(content instanceof Buffer)) { + throw new Error(`Cannot get content for ${entityType} ${entityId}`); + } + + const language = this.resolveOcrLanguage(languageNoteId, options.language); + const ocrResult = await this.extractTextFromFile(content, mime, { ...options, language }); + + this.storeOCRResult(blobId, ocrResult); + + return ocrResult; + } catch (error) { + log.error(`Failed to process OCR for ${entityType} ${entityId}: ${error}`); + throw error; + } + } + + /** + * Store OCR result in blob + */ + storeOCRResult(blobId: string | undefined, ocrResult: OCRResult): void { + if (!blobId) { + log.error('Cannot store OCR result: blobId is undefined'); + return; + } + + try { + sql.execute(` + UPDATE blobs SET textRepresentation = ? + WHERE blobId = ? + `, [ocrResult.text, blobId]); + + this.putBlobEntityChange(blobId); + + log.info(`Stored OCR result for blob ${blobId}`); + } catch (error) { + log.error(`Failed to store OCR result for blob ${blobId}: ${error}`); + throw error; + } + } + + /** + * Check whether a blob already has a stored text representation. + */ + private hasStoredOCRResult(blobId: string | undefined): boolean { + if (!blobId) { + return false; + } + + const row = sql.getRow<{ textRepresentation: string | null }>( + `SELECT textRepresentation FROM blobs WHERE blobId = ?`, + [blobId] + ); + + return !!row?.textRepresentation; + } + + // Batch processing state + private batchProcessingState: { + inProgress: boolean; + total: number; + processed: number; + startTime?: Date; + } = { + inProgress: false, + total: 0, + processed: 0 + }; + + /** + * Start batch OCR processing with progress tracking + */ + async startBatchProcessing(): Promise<{ success: boolean; message?: string }> { + if (this.batchProcessingState.inProgress) { + return { success: false, message: 'Batch processing already in progress' }; + } + + try { + const blobsNeedingOCR = this.getBlobsNeedingOCR(); + + if (blobsNeedingOCR.length === 0) { + return { success: false, message: 'No images found that need OCR processing' }; + } + + this.batchProcessingState = { + inProgress: true, + total: blobsNeedingOCR.length, + processed: 0, + startTime: new Date() + }; + + // Start processing in background + this.processBlobs(blobsNeedingOCR).catch(error => { + log.error(`Batch processing failed: ${error instanceof Error ? error.message : String(error)}`); + }).finally(() => { + this.batchProcessingState.inProgress = false; + }); + + return { success: true }; + } catch (error) { + log.error(`Failed to start batch processing: ${error instanceof Error ? error.message : String(error)}`); + return { success: false, message: error instanceof Error ? error.message : String(error) }; + } + } + + /** + * Get batch processing progress + */ + getBatchProgress(): { inProgress: boolean; total: number; processed: number; percentage?: number; startTime?: Date } { + const result: { inProgress: boolean; total: number; processed: number; percentage?: number; startTime?: Date } = { ...this.batchProcessingState }; + if (result.total > 0) { + result.percentage = (result.processed / result.total) * 100; + } + return result; + } + + /** + * Cancel batch processing + */ + cancelBatchProcessing(): void { + if (this.batchProcessingState.inProgress) { + this.batchProcessingState.inProgress = false; + log.info('Batch OCR processing cancelled'); + } + } + + /** + * Process a list of blobs sequentially, updating batch progress. + */ + private async processBlobs(blobs: Array<{ entityType: 'note' | 'attachment'; entityId: string }>): Promise { + log.info(`Starting batch OCR processing of ${blobs.length} items...`); + + for (const blob of blobs) { + if (!this.batchProcessingState.inProgress) { + break; + } + + try { + await this.processOcrEntity(blob); + } catch (error) { + log.error(`Failed to process OCR for ${blob.entityType} ${blob.entityId}: ${error}`); + } + + this.batchProcessingState.processed++; + + // Small delay to prevent overwhelming the system + await new Promise(resolve => setTimeout(resolve, 500)); + } + + log.info(`Batch OCR processing completed. Processed ${this.batchProcessingState.processed} files.`); + } + + /** + * Process OCR for a single entity (note or attachment) by type. + */ + private async processOcrEntity(entity: { entityType: 'note' | 'attachment'; entityId: string }): Promise { + if (entity.entityType === 'note') { + await this.processNoteOCR(entity.entityId); + } else { + await this.processAttachmentOCR(entity.entityId); + } + } + + /** + * Get processor for a given MIME type + */ + /** + * Notifies the sync system that a blob has changed, without modifying the blob's identity. + */ + private putBlobEntityChange(blobId: string): void { + const blob = becca.getBlob({ blobId }); + if (!blob || !blob.blobId) return; + + const hash = blobService.calculateContentHash({ + blobId: blob.blobId, + content: blob.content, + textRepresentation: blob.textRepresentation, + utcDateModified: blob.utcDateModified! + }); + entityChangesService.putEntityChange({ + entityName: "blobs", + entityId: blobId, + hash, + isErased: false, + utcDateChanged: blob.utcDateModified, + isSynced: true + }); + } + + private getProcessorForMimeType(mimeType: string): FileProcessor | null { + for (const processor of this.processors.values()) { + if (processor.canProcess(mimeType)) { + return processor; + } + } + return null; + } + + /** + * Get all MIME types supported by all registered processors + */ + getAllSupportedMimeTypes(): string[] { + const supportedTypes = new Set(); + + // Gather MIME types from all registered processors + for (const processor of this.processors.values()) { + const processorTypes = processor.getSupportedMimeTypes(); + processorTypes.forEach(type => supportedTypes.add(type)); + } + + return Array.from(supportedTypes); + } + + + /** + * Get blobs that need OCR processing (those without text representation) + */ + getBlobsNeedingOCR(): Array<{ blobId: string; mimeType: string; entityType: 'note' | 'attachment'; entityId: string }> { + try { + const supportedMimes = this.getAllSupportedMimeTypes(); + const placeholders = supportedMimes.map(() => '?').join(', '); + + const noteBlobs = sql.getRows<{ + blobId: string; + mimeType: string; + entityId: string; + }>(` + SELECT n.blobId, n.mime as mimeType, n.noteId as entityId + FROM notes n + JOIN blobs b ON n.blobId = b.blobId + WHERE (n.type = 'image' OR (n.type = 'file' AND n.mime IN (${placeholders}))) + AND n.isDeleted = 0 + AND n.blobId IS NOT NULL + AND b.textRepresentation IS NULL + `, supportedMimes); + + const attachmentBlobs = sql.getRows<{ + blobId: string; + mimeType: string; + entityId: string; + }>(` + SELECT a.blobId, a.mime as mimeType, a.attachmentId as entityId + FROM attachments a + JOIN blobs b ON a.blobId = b.blobId + WHERE (a.role = 'image' OR (a.role = 'file' AND a.mime IN (${placeholders}))) + AND a.isDeleted = 0 + AND a.blobId IS NOT NULL + AND b.textRepresentation IS NULL + `, supportedMimes); + + // Combine results + const result = [ + ...noteBlobs.map(blob => ({ ...blob, entityType: 'note' as const })), + ...attachmentBlobs.map(blob => ({ ...blob, entityType: 'attachment' as const })) + ]; + + // Return all results (no need to filter by MIME type as we already did in the query) + return result; + } catch (error) { + log.error(`Failed to get blobs needing OCR: ${error}`); + return []; + } + } + +} + +export default new OCRService(); diff --git a/apps/server/src/services/ocr/processors/file_processor.ts b/apps/server/src/services/ocr/processors/file_processor.ts new file mode 100644 index 0000000000..72a2b614c6 --- /dev/null +++ b/apps/server/src/services/ocr/processors/file_processor.ts @@ -0,0 +1,26 @@ +import { OCRResult, OCRProcessingOptions } from '../ocr_service.js'; + +/** + * Base class for file processors that extract text from different file types + */ +export abstract class FileProcessor { + /** + * Check if this processor can handle the given MIME type + */ + abstract canProcess(mimeType: string): boolean; + + /** + * Extract text from the given file buffer + */ + abstract extractText(buffer: Buffer, options: OCRProcessingOptions): Promise; + + /** + * Get the processing type identifier + */ + abstract getProcessingType(): string; + + /** + * Get list of MIME types supported by this processor + */ + abstract getSupportedMimeTypes(): string[]; +} \ No newline at end of file diff --git a/apps/server/src/services/ocr/processors/image_processor.spec.ts b/apps/server/src/services/ocr/processors/image_processor.spec.ts new file mode 100644 index 0000000000..43ccc5c5a3 --- /dev/null +++ b/apps/server/src/services/ocr/processors/image_processor.spec.ts @@ -0,0 +1,37 @@ +import fs from 'fs'; +import path from 'path'; +import { describe, expect, it, vi } from 'vitest'; + +// Mock dependencies +vi.mock('../../data_dir.js', () => ({ + default: { + OCR_CACHE_DIR: '/tmp/trilium-ocr-test-cache' + } +})); + +vi.mock('../../log.js', () => ({ + default: { + info: vi.fn(), + error: vi.fn() + } +})); + +vi.mock('../../options.js', () => ({ + default: { + getOption: vi.fn().mockReturnValue('0') + } +})); + +import { ImageProcessor } from './image_processor.js'; + +describe('ImageProcessor', () => { + const processor = new ImageProcessor(); + const sampleImagePath = path.join(__dirname, 'samples', 'image.png'); + + it('should extract text from the sample image', async () => { + const imageBuffer = fs.readFileSync(sampleImagePath); + + const result = await processor.extractText(imageBuffer, { language: 'eng' }); + expect(result.text).toContain('TriliumNext'); + }, 60000); +}); diff --git a/apps/server/src/services/ocr/processors/image_processor.ts b/apps/server/src/services/ocr/processors/image_processor.ts new file mode 100644 index 0000000000..15bfe78085 --- /dev/null +++ b/apps/server/src/services/ocr/processors/image_processor.ts @@ -0,0 +1,160 @@ +import fs from 'fs'; +import Tesseract from 'tesseract.js'; + +import dataDirs from '../../data_dir.js'; +import log from '../../log.js'; +import options from '../../options.js'; +import { OCRProcessingOptions,OCRResult } from '../ocr_service.js'; +import { FileProcessor } from './file_processor.js'; + +/** + * Image processor for extracting text from image files using Tesseract + */ +export class ImageProcessor extends FileProcessor { + private worker: Tesseract.Worker | null = null; + private currentLanguage: string | null = null; + private readonly supportedTypes = [ + 'image/jpeg', + 'image/jpg', + 'image/png', + 'image/gif', + 'image/bmp', + 'image/tiff', + 'image/webp' + ]; + + canProcess(mimeType: string): boolean { + return this.supportedTypes.includes(mimeType.toLowerCase()); + } + + getSupportedMimeTypes(): string[] { + return [...this.supportedTypes]; + } + + async extractText(buffer: Buffer, options: OCRProcessingOptions = {}): Promise { + const language = options.language || "eng"; + await this.ensureWorker(language); + + try { + log.info(`Starting image OCR text extraction (language: ${language})...`); + + const result = await this.worker!.recognize(buffer); + + // Filter text based on minimum confidence threshold + const { filteredText, overallConfidence } = this.filterTextByConfidence(result.data); + + const ocrResult: OCRResult = { + text: filteredText, + confidence: overallConfidence, + extractedAt: new Date().toISOString(), + language, + pageCount: 1 + }; + + return ocrResult; + + } catch (error) { + log.error(`Image OCR text extraction failed: ${error}`); + throw error; + } + } + + getProcessingType(): string { + return 'image'; + } + + /** + * Ensures a Tesseract worker is ready for the given language. + * Creates a new worker if none exists or if the language has changed. + */ + private async ensureWorker(language: string): Promise { + if (this.worker && this.currentLanguage === language) { + return; + } + + if (this.worker) { + await this.worker.terminate(); + } + + fs.mkdirSync(dataDirs.OCR_CACHE_DIR, { recursive: true }); + + log.info(`Initializing Tesseract worker for language(s): ${language}`); + this.worker = await Tesseract.createWorker(language, 1, { + cachePath: dataDirs.OCR_CACHE_DIR, + logger: (m: { status: string; progress: number }) => { + if (m.status === 'recognizing text') { + log.info(`Image OCR progress (${language}): ${Math.round(m.progress * 100)}%`); + } + } + }); + this.currentLanguage = language; + } + + + /** + * Filter text based on minimum confidence threshold + */ + private filterTextByConfidence(data: any): { filteredText: string; overallConfidence: number } { + const minConfidence = this.getMinConfidenceThreshold(); + + // If no minimum confidence set, return original text + if (minConfidence <= 0) { + return { + filteredText: data.text.trim(), + overallConfidence: data.confidence / 100 + }; + } + + const filteredWords: string[] = []; + const validConfidences: number[] = []; + + // Tesseract provides word-level data + if (data.words && Array.isArray(data.words)) { + for (const word of data.words) { + const wordConfidence = word.confidence / 100; // Convert to decimal + + if (wordConfidence >= minConfidence) { + filteredWords.push(word.text); + validConfidences.push(wordConfidence); + } + } + } else { + // Fallback: if word-level data not available, use overall confidence + const overallConfidence = data.confidence / 100; + if (overallConfidence >= minConfidence) { + return { + filteredText: data.text.trim(), + overallConfidence + }; + } + log.info(`Entire text filtered out due to low confidence ${overallConfidence} (below threshold ${minConfidence})`); + return { + filteredText: '', + overallConfidence + }; + } + + // Calculate average confidence of accepted words + const averageConfidence = validConfidences.length > 0 + ? validConfidences.reduce((sum, conf) => sum + conf, 0) / validConfidences.length + : 0; + + const filteredText = filteredWords.join(' ').trim(); + + log.info(`Filtered OCR text: ${filteredWords.length} words kept out of ${data.words?.length || 0} total words (min confidence: ${minConfidence})`); + + return { + filteredText, + overallConfidence: averageConfidence + }; + } + + /** + * Get minimum confidence threshold from options + */ + private getMinConfidenceThreshold(): number { + const minConfidence = options.getOption('ocrMinConfidence') ?? 0; + return parseFloat(minConfidence); + } + +} diff --git a/apps/server/src/services/ocr/processors/office_processor.ts b/apps/server/src/services/ocr/processors/office_processor.ts new file mode 100644 index 0000000000..f2ee7e8ebe --- /dev/null +++ b/apps/server/src/services/ocr/processors/office_processor.ts @@ -0,0 +1,70 @@ +import { parseExcel } from 'officeparser/dist/parsers/ExcelParser.js'; +import { parseOpenOffice } from 'officeparser/dist/parsers/OpenOfficeParser.js'; +import { parsePowerPoint } from 'officeparser/dist/parsers/PowerPointParser.js'; +import { parseWord } from 'officeparser/dist/parsers/WordParser.js'; +import type { OfficeParserConfig } from 'officeparser/dist/types.js'; + +import log from '../../log.js'; +import { OCRProcessingOptions, OCRResult } from '../ocr_service.js'; +import { FileProcessor } from './file_processor.js'; + +type Parser = (buffer: Buffer, config: OfficeParserConfig) => Promise<{ toText(): string }>; + +const PARSER_BY_MIME: Record = { + // Office Open XML + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': parseWord, + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': parseExcel, + 'application/vnd.openxmlformats-officedocument.presentationml.presentation': parsePowerPoint, + // OpenDocument + 'application/vnd.oasis.opendocument.text': parseOpenOffice, + 'application/vnd.oasis.opendocument.spreadsheet': parseOpenOffice, + 'application/vnd.oasis.opendocument.presentation': parseOpenOffice +}; + +const PARSER_CONFIG: OfficeParserConfig = { + outputErrorToConsole: false, + newlineDelimiter: '\n', + ignoreNotes: false, + putNotesAtLast: false +}; + +/** + * Office document processor for extracting text from DOCX/XLSX/PPTX and ODT/ODS/ODP files. + * Uses individual parsers from officeparser v6 to avoid pulling in pdfjs-dist. + */ +export class OfficeProcessor extends FileProcessor { + + canProcess(mimeType: string): boolean { + return mimeType in PARSER_BY_MIME; + } + + getSupportedMimeTypes(): string[] { + return Object.keys(PARSER_BY_MIME); + } + + async extractText(buffer: Buffer, options: OCRProcessingOptions = {}): Promise { + const mimeType = options.mimeType; + if (!mimeType || !(mimeType in PARSER_BY_MIME)) { + throw new Error(`Unsupported MIME type for Office processor: ${mimeType}`); + } + + log.info(`Starting Office document text extraction for ${mimeType}...`); + + const parse = PARSER_BY_MIME[mimeType]; + const ast = await parse(buffer, PARSER_CONFIG); + const trimmed = ast.toText().trim(); + + return { + text: trimmed, + confidence: trimmed.length > 0 ? 0.99 : 0, + extractedAt: new Date().toISOString(), + language: options.language || "eng", + pageCount: 1 + }; + } + + getProcessingType(): string { + return 'office'; + } + +} diff --git a/apps/server/src/services/ocr/processors/pdf_processor.ts b/apps/server/src/services/ocr/processors/pdf_processor.ts new file mode 100644 index 0000000000..9605665857 --- /dev/null +++ b/apps/server/src/services/ocr/processors/pdf_processor.ts @@ -0,0 +1,39 @@ +import { extractText, getDocumentProxy } from 'unpdf'; + +import log from '../../log.js'; +import { OCRProcessingOptions, OCRResult } from '../ocr_service.js'; +import { FileProcessor } from './file_processor.js'; + +/** + * PDF processor for extracting embedded text from PDF files using unpdf. + */ +export class PDFProcessor extends FileProcessor { + + canProcess(mimeType: string): boolean { + return mimeType.toLowerCase() === 'application/pdf'; + } + + getSupportedMimeTypes(): string[] { + return ['application/pdf']; + } + + async extractText(buffer: Buffer, options: OCRProcessingOptions = {}): Promise { + log.info('Starting PDF text extraction...'); + + const pdf = await getDocumentProxy(new Uint8Array(buffer)); + const { totalPages, text } = await extractText(pdf, { mergePages: true }); + + return { + text: text.trim(), + confidence: 0.99, + extractedAt: new Date().toISOString(), + language: options.language || "eng", + pageCount: totalPages + }; + } + + getProcessingType(): string { + return 'pdf'; + } + +} diff --git a/apps/server/src/services/ocr/processors/samples/image.png b/apps/server/src/services/ocr/processors/samples/image.png new file mode 100644 index 0000000000..bc0d316912 Binary files /dev/null and b/apps/server/src/services/ocr/processors/samples/image.png differ diff --git a/apps/server/src/services/search/search_result_ocr.spec.ts b/apps/server/src/services/search/search_result_ocr.spec.ts new file mode 100644 index 0000000000..864e11cb72 --- /dev/null +++ b/apps/server/src/services/search/search_result_ocr.spec.ts @@ -0,0 +1,149 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +const mockBecca = { + notes: {} as Record, + getNote: vi.fn() +}; + +const mockBeccaService = { + getNoteTitleForPath: vi.fn() +}; + +vi.mock('../../becca/becca.js', () => ({ + default: mockBecca +})); + +vi.mock('../../becca/becca_service.js', () => ({ + default: mockBeccaService +})); + +let SearchResult: any; + +beforeEach(async () => { + vi.clearAllMocks(); + + mockBeccaService.getNoteTitleForPath.mockReturnValue('Test Note Title'); + + mockBecca.notes['test123'] = { + noteId: 'test123', + title: 'Test Note', + isInHiddenSubtree: vi.fn().mockReturnValue(false) + }; + + const module = await import('./search_result.js'); + SearchResult = module.default; +}); + +describe('SearchResult', () => { + describe('constructor', () => { + it('should initialize with note path array', () => { + const searchResult = new SearchResult(['root', 'folder', 'test123']); + + expect(searchResult.notePathArray).toEqual(['root', 'folder', 'test123']); + expect(searchResult.noteId).toBe('test123'); + expect(searchResult.notePath).toBe('root/folder/test123'); + expect(searchResult.score).toBe(0); + expect(mockBeccaService.getNoteTitleForPath).toHaveBeenCalledWith(['root', 'folder', 'test123']); + }); + }); + + describe('computeScore', () => { + let searchResult: any; + + beforeEach(() => { + searchResult = new SearchResult(['root', 'test123']); + }); + + describe('basic scoring', () => { + it('should give highest score for exact note ID match', () => { + searchResult.computeScore('test123', ['test123']); + expect(searchResult.score).toBeGreaterThanOrEqual(1000); + }); + + it('should give high score for exact title match', () => { + searchResult.computeScore('test note', ['test', 'note']); + expect(searchResult.score).toBeGreaterThan(2000); + }); + + it('should give medium score for title prefix match', () => { + searchResult.computeScore('test', ['test']); + expect(searchResult.score).toBeGreaterThan(500); + }); + + it('should give lower score for title word match', () => { + mockBecca.notes['test123'].title = 'This is a test note'; + searchResult.computeScore('test', ['test']); + expect(searchResult.score).toBeGreaterThan(300); + }); + }); + + describe('hidden notes penalty', () => { + it('should apply penalty for hidden notes', () => { + mockBecca.notes['test123'].isInHiddenSubtree.mockReturnValue(true); + + searchResult.computeScore('test', ['test']); + const hiddenScore = searchResult.score; + + mockBecca.notes['test123'].isInHiddenSubtree.mockReturnValue(false); + searchResult.score = 0; + searchResult.computeScore('test', ['test']); + const normalScore = searchResult.score; + + expect(normalScore).toBeGreaterThan(hiddenScore); + expect(hiddenScore).toBe(normalScore / 3); + }); + }); + }); + + describe('addScoreForStrings', () => { + let searchResult: any; + + beforeEach(() => { + searchResult = new SearchResult(['root', 'test123']); + }); + + it('should give highest score for exact token match', () => { + searchResult.addScoreForStrings(['sample'], 'sample text', 1.0); + const exactScore = searchResult.score; + + searchResult.score = 0; + searchResult.addScoreForStrings(['sample'], 'sampling text', 1.0); + const prefixScore = searchResult.score; + + searchResult.score = 0; + searchResult.addScoreForStrings(['sample'], 'text sample text', 1.0); + const partialScore = searchResult.score; + + expect(exactScore).toBeGreaterThan(prefixScore); + expect(exactScore).toBeGreaterThanOrEqual(partialScore); + }); + + it('should apply factor multiplier correctly', () => { + searchResult.addScoreForStrings(['sample'], 'sample text', 2.0); + const doubleFactorScore = searchResult.score; + + searchResult.score = 0; + searchResult.addScoreForStrings(['sample'], 'sample text', 1.0); + const singleFactorScore = searchResult.score; + + expect(doubleFactorScore).toBe(singleFactorScore * 2); + }); + + it('should handle multiple tokens', () => { + searchResult.addScoreForStrings(['hello', 'world'], 'hello world test', 1.0); + expect(searchResult.score).toBeGreaterThan(0); + }); + + it('should be case insensitive', () => { + searchResult.addScoreForStrings(['sample'], 'sample text', 1.0); + const lowerCaseScore = searchResult.score; + + searchResult.score = 0; + searchResult.addScoreForStrings(['sample'], 'SAMPLE text', 1.0); + const upperCaseScore = searchResult.score; + + expect(upperCaseScore).toEqual(lowerCaseScore); + expect(upperCaseScore).toBeGreaterThan(0); + }); + }); +}); diff --git a/apps/server/src/www.ts b/apps/server/src/www.ts index 67ab16b9e4..8581a06fcc 100644 --- a/apps/server/src/www.ts +++ b/apps/server/src/www.ts @@ -8,6 +8,7 @@ import tmp from "tmp"; import buildApp from "./app.js"; import appInfo from "./services/app_info.js"; import config from "./services/config.js"; +import { registerOcrHandlers } from "./services/handlers.js"; import host from "./services/host.js"; import log from "./services/log.js"; import port from "./services/port.js"; @@ -68,6 +69,8 @@ export default async function startTriliumServer() { const electronRouting = await import("./routes/electron.js"); electronRouting.default(app); } + + registerOcrHandlers(); } async function displayStartupMessage() { diff --git a/apps/website/package.json b/apps/website/package.json index c56aaf15dc..2056407e7f 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,12 +9,12 @@ "preview": "pnpm build && vite preview" }, "dependencies": { - "i18next": "25.10.10", - "i18next-http-backend": "3.0.2", + "i18next": "26.0.3", + "i18next-http-backend": "3.0.4", "preact": "10.29.0", "preact-iso": "2.11.1", "preact-render-to-string": "6.6.7", - "react-i18next": "17.0.1" + "react-i18next": "17.0.2" }, "devDependencies": { "@preact/preset-vite": "2.10.5", diff --git a/apps/website/src/i18n.ts b/apps/website/src/i18n.ts index a41b50c43d..93931d9365 100644 --- a/apps/website/src/i18n.ts +++ b/apps/website/src/i18n.ts @@ -27,8 +27,7 @@ export function initTranslations(lng: string) { initAsync: false, react: { useSuspense: false - }, - showSupportNotice: false + } }); } diff --git a/docs/README-fr.md b/docs/README-fr.md index 241c9b5a97..1b54ccbcea 100644 --- a/docs/README-fr.md +++ b/docs/README-fr.md @@ -107,11 +107,10 @@ Notre documentation est disponible sous plusieurs formats : fort avec granularité par note * Diagrammes d'esquisse, basés sur [Excalidraw](https://excalidraw.com/) (type de note "canvas")) -* [Cartes de - relations](https://docs.triliumnotes.org/user-guide/note-types/relation-map) - et [cartes de - notes/liens](https://docs.triliumnotes.org/user-guide/note-types/note-map) - pour visualiser les notes et leurs liens +* [Relation + maps](https://docs.triliumnotes.org/user-guide/note-types/relation-map) et + [note/link maps](https://docs.triliumnotes.org/user-guide/note-types/note-map) + pour visualiser les notes et leurs relations * Cartes mentales, basées sur [Mind Elixir] (https://docs.mind-elixir.com/) * [Cartes géographiques](https://docs.triliumnotes.org/user-guide/collections/geomap) diff --git a/package.json b/package.json index f085f582f8..e54f8983d1 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@electron/rebuild": "4.0.3", "@fast-csv/parse": "5.0.5", - "@playwright/test": "1.58.2", + "@playwright/test": "1.59.0", "@triliumnext/server": "workspace:*", "@types/express": "5.0.6", "@types/js-yaml": "4.0.9", @@ -77,7 +77,7 @@ "tslib": "2.8.1", "tsx": "4.21.0", "typescript": "6.0.2", - "typescript-eslint": "8.57.2", + "typescript-eslint": "8.58.0", "upath": "2.0.1", "vite": "8.0.3", "vite-plugin-dts": "4.5.4", @@ -111,6 +111,7 @@ "preact": "10.29.0", "roughjs": "4.6.6", "@types/express-serve-static-core": "5.1.1", + "node-abi": "4.28.0", "flat@<5.0.1": ">=5.0.1", "debug@>=3.2.0 <3.2.7": ">=3.2.7", "nanoid@<3.3.8": ">=3.3.8", @@ -120,26 +121,47 @@ "cookie@<0.7.0": ">=0.7.0", "tar-fs@>=2.0.0 <2.1.3": ">=2.1.3", "on-headers@<1.1.0": ">=1.1.0", - "form-data@>=4.0.0 <4.0.4": ">=4.0.4", "form-data@>=3.0.0 <3.0.4": ">=3.0.4", - "node-abi": "4.28.0", - "validator@<13.15.20": ">=13.15.20", + "form-data@>=4.0.0 <4.0.4": ">=4.0.4", "tmp@<=0.2.3": ">=0.2.4", "glob@>=10.2.0 <10.5.0": ">=10.5.0", "glob@>=11.0.0 <11.1.0": ">=11.1.0", - "node-forge@<1.3.2": ">=1.3.2", "mdast-util-to-hast@>=13.0.0 <13.2.1": ">=13.2.1", - "validator@<13.15.22": ">=13.15.22", - "qs@<6.14.1": ">=6.14.1", "@smithy/config-resolver@<4.4.0": ">=4.4.0", - "tar@<=7.5.2": ">=7.5.3", - "tar@<=7.5.3": ">=7.5.4", - "lodash-es@>=4.0.0 <=4.17.22": ">=4.17.23", - "lodash@>=4.0.0 <=4.17.22": ">=4.17.23", "diff@<4.0.4": ">=4.0.4", "diff@>=6.0.0 <8.0.3": ">=8.0.3", - "tar@<7.5.7": ">=7.5.7", - "zod@<3.25.76": ">=4.0.0" + "zod@<3.25.76": ">=4.0.0", + "rollup@>=4.0.0 <4.59.0": ">=4.59.0", + "basic-ftp@<5.2.0": ">=5.2.0", + "ajv@>=7.0.0-alpha.0 <8.18.0": ">=8.18.0", + "@tootallnate/once@<3.0.1": ">=3.0.1", + "svgo@>=3.0.0 <3.3.3": ">=3.3.3", + "immutable@>=4.0.0-rc.1 <4.3.8": ">=4.3.8", + "simple-git@>=3.15.0 <3.32.3": ">=3.32.3", + "undici@>=7.0.0 <7.24.0": ">=7.24.0", + "socket.io-parser@>=4.0.0 <4.2.6": ">=4.2.6", + "fast-xml-parser@>=4.0.0-beta.3 <5.5.7": ">=5.5.7", + "path-to-regexp@<0.1.13": ">=0.1.13", + "path-to-regexp@>=8.0.0 <8.4.0": ">=8.4.0", + "brace-expansion@<1.1.13": ">=1.1.13", + "brace-expansion@>=2.0.0 <2.0.3": ">=2.0.3", + "brace-expansion@>=4.0.0 <5.0.5": ">=5.0.5", + "picomatch@<2.3.2": ">=2.3.2", + "picomatch@>=4.0.0 <4.0.4": ">=4.0.4", + "yaml@>=1.0.0 <1.10.3": ">=1.10.3", + "yaml@>=2.0.0 <2.8.3": ">=2.8.3", + "@xmldom/xmldom@<0.8.12": ">=0.8.12", + "flatted@<=3.4.1": ">=3.4.2", + "defu@<=6.1.4": ">=6.1.5", + "tar@<7.5.11": ">=7.5.11", + "lodash@<4.18.0": ">=4.18.0", + "lodash-es@<4.18.0": ">=4.18.0", + "node-forge@<1.4.0": ">=1.4.0", + "handlebars@<4.7.9": ">=4.7.9", + "qs@<6.14.2": ">=6.14.2", + "minimatch@<3.1.4": "^3.1.4", + "serialize-javascript@<7.0.5": ">=7.0.5", + "webpack@<5.104.1": ">=5.104.1" }, "ignoredBuiltDependencies": [ "sqlite3" diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 7f7263158c..d9c9c854be 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -23,26 +23,22 @@ "devDependencies": { "@ckeditor/ckeditor5-dev-build-tools": "55.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", - "@ckeditor/ckeditor5-package-tools": "5.1.0", - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", "@vitest/browser": "4.1.2", "@vitest/coverage-istanbul": "4.1.2", - "ckeditor5": "47.6.1", + "ckeditor5": "48.0.0", "eslint": "10.1.0", "eslint-config-ckeditor5": ">=9.1.0", - "http-server": "14.1.1", - "lint-staged": "16.4.0", "stylelint": "17.6.0", "stylelint-config-ckeditor5": ">=9.1.0", - "ts-node": "10.9.2", "typescript": "6.0.2", "vite-plugin-svgo": "2.0.0", "vitest": "4.1.2", "webdriverio": "9.27.0" }, "peerDependencies": { - "ckeditor5": "47.6.1" + "ckeditor5": "48.0.0" }, "author": "Elian Doran ", "license": "GPL-2.0-or-later", @@ -51,21 +47,8 @@ "ts:build": "tsc -p ./tsconfig.release.json", "ts:clear": "npx rimraf --glob \"src/**/*.@(js|d.ts)\"", "lint": "eslint \"**/*.{js,ts}\" --quiet", - "start": "ckeditor5-package-tools start", "stylelint": "stylelint --quiet --allow-empty-input 'theme/**/*.css'", "test": "vitest", - "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false", - "prepublishOnly": "npm run ts:build && ckeditor5-package-tools export-package-as-javascript", - "postpublish": "npm run ts:clear && ckeditor5-package-tools export-package-as-typescript", - "translations:synchronize": "ckeditor5-package-tools translations:synchronize", - "translations:validate": "ckeditor5-package-tools translations:synchronize --validate-only" - }, - "lint-staged": { - "**/*.{js,ts}": [ - "eslint --quiet" - ], - "**/*.css": [ - "stylelint --quiet --allow-empty-input" - ] + "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false" } } diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 7cc032daf8..9af8ae4830 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -24,47 +24,30 @@ "devDependencies": { "@ckeditor/ckeditor5-dev-build-tools": "55.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", - "@ckeditor/ckeditor5-package-tools": "5.1.0", - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", "@vitest/browser": "4.1.2", "@vitest/coverage-istanbul": "4.1.2", - "ckeditor5": "47.6.1", + "ckeditor5": "48.0.0", "eslint": "10.1.0", "eslint-config-ckeditor5": ">=9.1.0", - "http-server": "14.1.1", - "lint-staged": "16.4.0", "stylelint": "17.6.0", "stylelint-config-ckeditor5": ">=9.1.0", - "ts-node": "10.9.2", "typescript": "6.0.2", "vite-plugin-svgo": "2.0.0", "vitest": "4.1.2", "webdriverio": "9.27.0" }, "peerDependencies": { - "ckeditor5": "47.6.1" + "ckeditor5": "48.0.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", "ts:build": "tsc -p ./tsconfig.release.json", "ts:clear": "npx rimraf --glob \"src/**/*.@(js|d.ts)\"", "lint": "eslint \"**/*.{js,ts}\" --quiet", - "start": "ckeditor5-package-tools start", "stylelint": "stylelint --quiet --allow-empty-input 'theme/**/*.css'", "test": "vitest", - "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false", - "prepublishOnly": "npm run ts:build && ckeditor5-package-tools export-package-as-javascript", - "postpublish": "npm run ts:clear && ckeditor5-package-tools export-package-as-typescript", - "translations:synchronize": "ckeditor5-package-tools translations:synchronize", - "translations:validate": "ckeditor5-package-tools translations:synchronize --validate-only" - }, - "lint-staged": { - "**/*.{js,ts}": [ - "eslint --quiet" - ], - "**/*.css": [ - "stylelint --quiet --allow-empty-input" - ] + "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false" } } diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 2269494eb6..084392bccd 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -26,47 +26,30 @@ "devDependencies": { "@ckeditor/ckeditor5-dev-build-tools": "55.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", - "@ckeditor/ckeditor5-package-tools": "5.1.0", - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", "@vitest/browser": "4.1.2", "@vitest/coverage-istanbul": "4.1.2", - "ckeditor5": "47.6.1", + "ckeditor5": "48.0.0", "eslint": "10.1.0", "eslint-config-ckeditor5": ">=9.1.0", - "http-server": "14.1.1", - "lint-staged": "16.4.0", "stylelint": "17.6.0", "stylelint-config-ckeditor5": ">=9.1.0", - "ts-node": "10.9.2", "typescript": "6.0.2", "vite-plugin-svgo": "2.0.0", "vitest": "4.1.2", "webdriverio": "9.27.0" }, "peerDependencies": { - "ckeditor5": "47.6.1" + "ckeditor5": "48.0.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", "ts:build": "tsc -p ./tsconfig.release.json", "ts:clear": "npx rimraf --glob \"src/**/*.@(js|d.ts)\"", "lint": "eslint \"**/*.{js,ts}\" --quiet", - "start": "ckeditor5-package-tools start", "stylelint": "stylelint --quiet --allow-empty-input 'theme/**/*.css'", "test": "vitest", - "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false", - "prepublishOnly": "npm run ts:build && ckeditor5-package-tools export-package-as-javascript", - "postpublish": "npm run ts:clear && ckeditor5-package-tools export-package-as-typescript", - "translations:synchronize": "ckeditor5-package-tools translations:synchronize", - "translations:validate": "ckeditor5-package-tools translations:synchronize --validate-only" - }, - "lint-staged": { - "**/*.{js,ts}": [ - "eslint --quiet" - ], - "**/*.css": [ - "stylelint --quiet --allow-empty-input" - ] + "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false" } } diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 3ea6bdd5c1..9f600151b5 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -26,51 +26,34 @@ "devDependencies": { "@ckeditor/ckeditor5-dev-build-tools": "55.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", - "@ckeditor/ckeditor5-package-tools": "5.1.0", - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", "@vitest/browser": "4.1.2", "@vitest/coverage-istanbul": "4.1.2", - "ckeditor5": "47.6.1", + "ckeditor5": "48.0.0", "eslint": "10.1.0", "eslint-config-ckeditor5": ">=9.1.0", - "http-server": "14.1.1", - "lint-staged": "16.4.0", "stylelint": "17.6.0", "stylelint-config-ckeditor5": ">=9.1.0", - "ts-node": "10.9.2", "typescript": "6.0.2", "vite-plugin-svgo": "2.0.0", "vitest": "4.1.2", "webdriverio": "9.27.0" }, "peerDependencies": { - "ckeditor5": "47.6.1" + "ckeditor5": "48.0.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", "ts:build": "tsc -p ./tsconfig.release.json", "ts:clear": "npx rimraf --glob \"src/**/*.@(js|d.ts)\"", "lint": "eslint \"**/*.{js,ts}\" --quiet", - "start": "ckeditor5-package-tools start", "stylelint": "stylelint --quiet --allow-empty-input 'theme/**/*.css'", "test": "vitest", - "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false", - "prepublishOnly": "npm run ts:build && ckeditor5-package-tools export-package-as-javascript", - "postpublish": "npm run ts:clear && ckeditor5-package-tools export-package-as-typescript", - "translations:synchronize": "ckeditor5-package-tools translations:synchronize", - "translations:validate": "ckeditor5-package-tools translations:synchronize --validate-only" - }, - "lint-staged": { - "**/*.{js,ts}": [ - "eslint --quiet" - ], - "**/*.css": [ - "stylelint --quiet --allow-empty-input" - ] + "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false" }, "dependencies": { - "@ckeditor/ckeditor5-icons": "47.6.1", + "@ckeditor/ckeditor5-icons": "48.0.0", "mathlive": "0.109.0" } } diff --git a/packages/ckeditor5-math/src/ui/mainformview.ts b/packages/ckeditor5-math/src/ui/mainformview.ts index 52d3b05120..c5989cfbd4 100644 --- a/packages/ckeditor5-math/src/ui/mainformview.ts +++ b/packages/ckeditor5-math/src/ui/mainformview.ts @@ -1,6 +1,5 @@ import { ButtonView, FocusCycler, FocusTracker, KeystrokeHandler, LabelView, submitHandler, SwitchButtonView, View, ViewCollection, type FocusableView, type Locale } from 'ckeditor5'; -import IconCheck from "@ckeditor/ckeditor5-icons/theme/icons/check.svg?raw"; -import IconCancel from "@ckeditor/ckeditor5-icons/theme/icons/cancel.svg?raw"; +import { IconCheck, IconCancel } from "@ckeditor/ckeditor5-icons"; import { extractDelimiters, hasDelimiters } from '../utils.js'; import MathView, { type MathViewOptions } from './mathview.js'; import MathInputView from './mathinputview.js'; diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 92b8c8cd02..1b0cf028c6 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -26,51 +26,34 @@ "devDependencies": { "@ckeditor/ckeditor5-dev-build-tools": "55.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", - "@ckeditor/ckeditor5-package-tools": "5.1.0", - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/eslint-plugin": "8.58.0", + "@typescript-eslint/parser": "8.58.0", "@vitest/browser": "4.1.2", "@vitest/coverage-istanbul": "4.1.2", - "ckeditor5": "47.6.1", + "ckeditor5": "48.0.0", "eslint": "10.1.0", "eslint-config-ckeditor5": ">=9.1.0", - "http-server": "14.1.1", - "lint-staged": "16.4.0", "stylelint": "17.6.0", "stylelint-config-ckeditor5": ">=9.1.0", - "ts-node": "10.9.2", "typescript": "6.0.2", "vite-plugin-svgo": "2.0.0", "vitest": "4.1.2", "webdriverio": "9.27.0" }, "peerDependencies": { - "ckeditor5": "47.6.1" + "ckeditor5": "48.0.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", "ts:build": "tsc -p ./tsconfig.release.json", "ts:clear": "npx rimraf --glob \"src/**/*.@(js|d.ts)\"", "lint": "eslint \"**/*.{js,ts}\" --quiet", - "start": "ckeditor5-package-tools start", "stylelint": "stylelint --quiet --allow-empty-input 'theme/**/*.css'", "test": "vitest", - "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false", - "prepublishOnly": "npm run ts:build && ckeditor5-package-tools export-package-as-javascript", - "postpublish": "npm run ts:clear && ckeditor5-package-tools export-package-as-typescript", - "translations:synchronize": "ckeditor5-package-tools translations:synchronize", - "translations:validate": "ckeditor5-package-tools translations:synchronize --validate-only" - }, - "lint-staged": { - "**/*.{js,ts}": [ - "eslint --quiet" - ], - "**/*.css": [ - "stylelint --quiet --allow-empty-input" - ] + "test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false" }, "dependencies": { "@types/lodash-es": "4.17.12", - "lodash-es": "4.17.23" + "lodash-es": "4.18.1" } } diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 9d37bafe95..2b28ce4f61 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -12,11 +12,11 @@ "@triliumnext/ckeditor5-keyboard-marker": "workspace:*", "@triliumnext/ckeditor5-math": "workspace:*", "@triliumnext/ckeditor5-mermaid": "workspace:*", - "ckeditor5": "47.6.1", - "ckeditor5-premium-features": "47.6.1" + "ckeditor5": "48.0.0", + "ckeditor5-premium-features": "48.0.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.45", + "@smithy/middleware-retry": "4.4.46", "@types/jquery": "4.0.0" } } diff --git a/packages/ckeditor5/src/extra_slash_commands.ts b/packages/ckeditor5/src/extra_slash_commands.ts index 142ce50523..ee6068dc3d 100644 --- a/packages/ckeditor5/src/extra_slash_commands.ts +++ b/packages/ckeditor5/src/extra_slash_commands.ts @@ -1,11 +1,7 @@ import type { Editor } from 'ckeditor5'; import type { SlashCommandEditorConfig } from 'ckeditor5-premium-features'; import { icons as footnoteIcons } from '@triliumnext/ckeditor5-footnotes'; -import IconPageBreak from "@ckeditor/ckeditor5-icons/theme/icons/page-break.svg?raw"; -import IconAlignLeft from "@ckeditor/ckeditor5-icons/theme/icons/align-left.svg?raw"; -import IconAlignCenter from "@ckeditor/ckeditor5-icons/theme/icons/align-center.svg?raw"; -import IconAlignRight from "@ckeditor/ckeditor5-icons/theme/icons/align-right.svg?raw"; -import IconAlignJustify from "@ckeditor/ckeditor5-icons/theme/icons/align-justify.svg?raw"; +import { IconPageBreak, IconAlignLeft, IconAlignCenter, IconAlignRight, IconAlignJustify } from "@ckeditor/ckeditor5-icons"; import bxInfoCircle from "boxicons/svg/regular/bx-info-circle.svg?raw"; import bxBulb from "boxicons/svg/regular/bx-bulb.svg?raw"; import bxCommentError from "boxicons/svg/regular/bx-comment-error.svg?raw"; diff --git a/packages/ckeditor5/src/plugins/file_upload/progressbarview.ts b/packages/ckeditor5/src/plugins/file_upload/progressbarview.ts index 24d5a1a356..2e48f361de 100644 --- a/packages/ckeditor5/src/plugins/file_upload/progressbarview.ts +++ b/packages/ckeditor5/src/plugins/file_upload/progressbarview.ts @@ -1,4 +1,4 @@ -import cancelIcon from '@ckeditor/ckeditor5-core/theme/icons/cancel.svg?raw'; +import { IconCancel } from '@ckeditor/ckeditor5-icons'; import { ButtonView, Locale, toUnit, View } from 'ckeditor5'; const toPx = toUnit('%'); @@ -54,7 +54,7 @@ export default class ProgressBarView extends View { _createCancelButton(locale: Locale) { const view = new ButtonView(locale); view.set({ - icon: cancelIcon, + icon: IconCancel, tooltip: true, label: 'Cancel', //@ts-expect-error Object literal may only specify known properties, and 'attributes' does not exist in type diff --git a/packages/commons/package.json b/packages/commons/package.json index b1505e50a4..2fbf998a84 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -16,6 +16,7 @@ }, "dependencies": { "dayjs": "1.11.20", - "dayjs-plugin-utc": "0.1.2" + "dayjs-plugin-utc": "0.1.2", + "marked": "17.0.5" } } \ No newline at end of file diff --git a/packages/commons/src/index.ts b/packages/commons/src/index.ts index faae4922eb..f9e000aeba 100644 --- a/packages/commons/src/index.ts +++ b/packages/commons/src/index.ts @@ -17,3 +17,4 @@ export * from "./lib/week_utils.js"; export { default as BUILTIN_ATTRIBUTES } from "./lib/builtin_attributes.js"; export * from "./lib/spreadsheet/render_to_html.js"; export * from "./lib/llm_api.js"; +export * from "./lib/marked_extensions.js"; diff --git a/packages/commons/src/lib/i18n.ts b/packages/commons/src/lib/i18n.ts index e2cc3231aa..86b5829f64 100644 --- a/packages/commons/src/lib/i18n.ts +++ b/packages/commons/src/lib/i18n.ts @@ -9,27 +9,29 @@ export interface Locale { devOnly?: boolean; /** The value to pass to `--lang` for the Electron instance in order to set it as a locale. Not setting it will hide it from the list of supported locales. */ electronLocale?: "en" | "de" | "es" | "fr" | "zh_CN" | "zh_TW" | "ro" | "af" | "am" | "ar" | "bg" | "bn" | "ca" | "cs" | "da" | "el" | "en_GB" | "es_419" | "et" | "fa" | "fi" | "fil" | "gu" | "he" | "hi" | "hr" | "hu" | "id" | "it" | "ja" | "kn" | "ko" | "lt" | "lv" | "ml" | "mr" | "ms" | "nb" | "nl" | "pl" | "pt_BR" | "pt_PT" | "ru" | "sk" | "sl" | "sr" | "sv" | "sw" | "ta" | "te" | "th" | "tr" | "uk" | "ur" | "vi"; + /** The Tesseract OCR language code for this locale (e.g. "eng", "fra", "deu"). See https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html */ + tesseractCode?: "eng" | "deu" | "spa" | "fra" | "gle" | "ita" | "hin" | "jpn" | "por" | "pol" | "ron" | "rus" | "chi_sim" | "chi_tra" | "ukr" | "ara" | "heb" | "kur" | "fas" | "kor"; } // When adding a new locale, prefer the version with hyphen instead of underscore. const UNSORTED_LOCALES = [ - { id: "cn", name: "简体中文", electronLocale: "zh_CN" }, - { id: "de", name: "Deutsch", electronLocale: "de" }, - { id: "en", name: "English (United States)", electronLocale: "en" }, - { id: "en-GB", name: "English (United Kingdom)", electronLocale: "en_GB" }, - { id: "es", name: "Español", electronLocale: "es" }, - { id: "fr", name: "Français", electronLocale: "fr" }, - { id: "ga", name: "Gaeilge", electronLocale: "en" }, - { id: "it", name: "Italiano", electronLocale: "it" }, - { id: "hi", name: "हिन्दी", electronLocale: "hi" }, - { id: "ja", name: "日本語", electronLocale: "ja" }, - { id: "pt_br", name: "Português (Brasil)", electronLocale: "pt_BR" }, - { id: "pt", name: "Português (Portugal)", electronLocale: "pt_PT" }, - { id: "pl", name: "Polski", electronLocale: "pl" }, - { id: "ro", name: "Română", electronLocale: "ro" }, - { id: "ru", name: "Русский", electronLocale: "ru" }, - { id: "tw", name: "繁體中文", electronLocale: "zh_TW" }, - { id: "uk", name: "Українська", electronLocale: "uk" }, + { id: "cn", name: "简体中文", electronLocale: "zh_CN", tesseractCode: "chi_sim" }, + { id: "de", name: "Deutsch", electronLocale: "de", tesseractCode: "deu" }, + { id: "en", name: "English (United States)", electronLocale: "en", tesseractCode: "eng" }, + { id: "en-GB", name: "English (United Kingdom)", electronLocale: "en_GB", tesseractCode: "eng" }, + { id: "es", name: "Español", electronLocale: "es", tesseractCode: "spa" }, + { id: "fr", name: "Français", electronLocale: "fr", tesseractCode: "fra" }, + { id: "ga", name: "Gaeilge", electronLocale: "en", tesseractCode: "gle" }, + { id: "it", name: "Italiano", electronLocale: "it", tesseractCode: "ita" }, + { id: "hi", name: "हिन्दी", electronLocale: "hi", tesseractCode: "hin" }, + { id: "ja", name: "日本語", electronLocale: "ja", tesseractCode: "jpn" }, + { id: "pt_br", name: "Português (Brasil)", electronLocale: "pt_BR", tesseractCode: "por" }, + { id: "pt", name: "Português (Portugal)", electronLocale: "pt_PT", tesseractCode: "por" }, + { id: "pl", name: "Polski", electronLocale: "pl", tesseractCode: "pol" }, + { id: "ro", name: "Română", electronLocale: "ro", tesseractCode: "ron" }, + { id: "ru", name: "Русский", electronLocale: "ru", tesseractCode: "rus" }, + { id: "tw", name: "繁體中文", electronLocale: "zh_TW", tesseractCode: "chi_tra" }, + { id: "uk", name: "Українська", electronLocale: "uk", tesseractCode: "ukr" }, /** * Development-only languages. @@ -53,25 +55,29 @@ const UNSORTED_LOCALES = [ id: "ar", name: "اَلْعَرَبِيَّةُ", rtl: true, - electronLocale: "ar" + electronLocale: "ar", + tesseractCode: "ara" }, { // Hebrew id: "he", name: "עברית", rtl: true, - contentOnly: true + contentOnly: true, + tesseractCode: "heb" }, { // Kurdish id: "ku", name: "کوردی", rtl: true, - contentOnly: true + contentOnly: true, + tesseractCode: "kur" }, { // Persian id: "fa", name: "فارسی", rtl: true, - contentOnly: true + contentOnly: true, + tesseractCode: "fas" } ] as const; @@ -82,3 +88,10 @@ export const LOCALES: Locale[] = Array.from(UNSORTED_LOCALES) export type LOCALE_IDS = typeof UNSORTED_LOCALES[number]["id"]; /** A type containing a string union of all the supported locales that are not content-only (i.e. can be used as the UI language). */ export type DISPLAYABLE_LOCALE_IDS = Exclude["id"]; + +/** + * Returns the Tesseract OCR language code for the given locale ID, or `null` if not mapped. + */ +export function getTesseractCode(localeId: string): string | null { + return LOCALES.find((l) => l.id === localeId)?.tesseractCode ?? null; +} diff --git a/packages/commons/src/lib/marked_extensions.spec.ts b/packages/commons/src/lib/marked_extensions.spec.ts new file mode 100644 index 0000000000..963c0a4a71 --- /dev/null +++ b/packages/commons/src/lib/marked_extensions.spec.ts @@ -0,0 +1,96 @@ +import { describe, expect, it } from "vitest"; +import { Marked } from "marked"; +import { createWikiLinkExtension, createTransclusionExtension } from "./marked_extensions.js"; + +describe("marked_extensions", () => { + describe("createWikiLinkExtension", () => { + it("should render basic wiki links", () => { + const marked = new Marked({ extensions: [createWikiLinkExtension()] }); + const result = marked.parse("[[abc123]]"); + expect(result).toContain('abc123'); + }); + + it("should escape HTML in link text to prevent XSS", () => { + const marked = new Marked({ extensions: [createWikiLinkExtension()] }); + // Malicious input attempting to inject HTML/script via link text + const result = marked.parse("[[]]"); + + // The output should NOT contain unescaped script tags + expect(result).not.toContain(""); + // Should be properly escaped + expect(result).toContain("<script>"); + }); + + it("should escape attribute-breaking characters in href to prevent XSS", () => { + const marked = new Marked({ extensions: [createWikiLinkExtension()] }); + // Malicious input attempting to break out of href attribute + const result = marked.parse('[[x" onclick="alert(1)"]]'); + + // The output should NOT allow breaking out of the href attribute + // The key is that quotes are escaped, so onclick can't become an actual attribute + expect(result).not.toContain('href="/x"'); // Would indicate unescaped quote breaking out + expect(result).not.toContain('" onclick="'); // Unescaped pattern that would create event handler + // Double quotes should be escaped + expect(result).toContain('"'); + // The href should contain the escaped malicious input, not be broken by it + expect(result).toContain('href="/x"'); + }); + + it("should handle custom formatHref safely", () => { + const marked = new Marked({ + extensions: [createWikiLinkExtension({ formatHref: (id) => `#root/${id}` })] + }); + const result = marked.parse('[[x">]]'); + + // The < and > should be escaped so no img tag is injected + expect(result).not.toContain(' + }); + }); + + describe("createTransclusionExtension", () => { + it("should render basic transclusions", () => { + const marked = new Marked({ extensions: [createTransclusionExtension()] }); + const result = marked.parse("![[abc123]]"); + expect(result).toContain(''); + }); + + it("should escape attribute-breaking characters in src to prevent XSS", () => { + const marked = new Marked({ extensions: [createTransclusionExtension()] }); + // Malicious input attempting to break out of src attribute + const result = marked.parse('![[x" onerror="alert(1)"]]'); + + // The output should NOT allow breaking out of the src attribute + // The key is that quotes are escaped, so onerror can't become an actual attribute + expect(result).not.toContain('src="/x"'); // Would indicate unescaped quote + expect(result).not.toContain('" onerror="'); // Unescaped pattern + // Double quotes should be escaped + expect(result).toContain('"'); + // The src should contain the escaped malicious input + expect(result).toContain('src="/x"'); + }); + + it("should escape HTML injection attempts in transclusion", () => { + const marked = new Marked({ extensions: [createTransclusionExtension()] }); + // Attempt to close img tag and inject script + const result = marked.parse('![[x">]]'); + + expect(result).not.toContain(''); + }); + + it("should handle custom formatSrc safely", () => { + const marked = new Marked({ + extensions: [createTransclusionExtension({ formatSrc: (id) => `/api/images/${id}` })] + }); + const result = marked.parse('![[x" onload="alert(1)]]'); + + // The quote should be escaped so onload can't become an actual attribute + expect(result).not.toContain('src="/api/images/x"'); // Would indicate unescaped quote + expect(result).toContain('"'); // Quote should be escaped + expect(result).toContain('src="/api/images/x"'); // Escaped version + }); + }); +}); diff --git a/packages/commons/src/lib/marked_extensions.ts b/packages/commons/src/lib/marked_extensions.ts new file mode 100644 index 0000000000..413a8220e4 --- /dev/null +++ b/packages/commons/src/lib/marked_extensions.ts @@ -0,0 +1,107 @@ +import type { TokenizerAndRendererExtension } from "marked"; + +/** + * Escapes HTML special characters to prevent XSS attacks. + * Used for both attribute values and text content. + */ +function escapeHtml(str: string): string { + return str + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +export interface WikiLinkOptions { + /** Format the href for the link. Defaults to `/${noteId}` */ + formatHref?: (noteId: string) => string; +} + +/** + * Creates a wiki-link extension for internal note links: [[noteId]] + * + * @example + * // Server-side (for import) + * createWikiLinkExtension() // uses default /${noteId} + * + * // Client-side (for navigation) + * createWikiLinkExtension({ formatHref: (id) => `#root/${id}` }) + */ +export function createWikiLinkExtension(options: WikiLinkOptions = {}): TokenizerAndRendererExtension { + const formatHref = options.formatHref ?? ((id) => `/${id}`); + + return { + name: "wikiLink", + level: "inline", + + start(src: string) { + return src.indexOf("[["); + }, + + tokenizer(src) { + const match = /^\[\[([^\]]+?)\]\]/.exec(src); + if (match) { + return { + type: "wikiLink", + raw: match[0], + text: match[1].trim(), + href: match[1].trim() + }; + } + }, + + renderer(token) { + const noteId = token.href as string; + return `${escapeHtml(token.text as string)}`; + } + }; +} + +export interface TransclusionOptions { + /** Format the src for the image/embed. Defaults to `/${noteId}` */ + formatSrc?: (noteId: string) => string; +} + +/** + * Creates a transclusion extension for embedding note content: ![[noteId]] + * Terminology inspired by https://silverbullet.md/Transclusions + * + * @example + * createTransclusionExtension() // uses default /${noteId} + * createTransclusionExtension({ formatSrc: (id) => `/api/images/${id}` }) + */ +export function createTransclusionExtension(options: TransclusionOptions = {}): TokenizerAndRendererExtension { + const formatSrc = options.formatSrc ?? ((id) => `/${id}`); + + return { + name: "transclusion", + level: "inline", + + start(src: string) { + return src.match(/!\[\[/)?.index; + }, + + tokenizer(src) { + const match = /^!\[\[([^\]]+?)\]\]/.exec(src); + if (match) { + return { + type: "transclusion", + raw: match[0], + href: match[1].trim() + }; + } + }, + + renderer(token) { + const noteId = token.href as string; + return ``; + } + }; +} + +/** Pre-configured wiki-link extension for server-side (uses /noteId format) */ +export const wikiLinkExtension = createWikiLinkExtension(); + +/** Pre-configured transclusion extension for server-side (uses /noteId format) */ +export const transclusionExtension = createTransclusionExtension(); diff --git a/packages/commons/src/lib/options_interface.ts b/packages/commons/src/lib/options_interface.ts index 334a8bd7a4..590e3436dc 100644 --- a/packages/commons/src/lib/options_interface.ts +++ b/packages/commons/src/lib/options_interface.ts @@ -144,6 +144,14 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions`, ``); } - for (const file of [ "viewer.mjs", "custom.mjs" ]) { + for (const file of [ "viewer.mjs", "custom.mjs", "../build/pdf.mjs" ]) { html = html.replace( ``, `` @@ -84,6 +84,15 @@ function patchCacheBuster(htmlFilePath: string) { } writeFileSync(htmlFilePath, html); + + // Also patch the worker source in viewer.mjs + const viewerMjsPath = htmlFilePath.replace("viewer.html", "viewer.mjs"); + let viewerMjs = readFileSync(viewerMjsPath, "utf-8"); + viewerMjs = viewerMjs.replace( + `value: "../build/pdf.worker.mjs"`, + `value: "../build/pdf.worker.mjs?v=${version}"` + ); + writeFileSync(viewerMjsPath, viewerMjs); } function watchForChanges() { diff --git a/packages/pdfjs-viewer/scripts/update-viewer.ts b/packages/pdfjs-viewer/scripts/update-viewer.ts index 452aaa3e51..34acc27faf 100644 --- a/packages/pdfjs-viewer/scripts/update-viewer.ts +++ b/packages/pdfjs-viewer/scripts/update-viewer.ts @@ -1,4 +1,4 @@ -import { join } from "path"; +import { join, dirname } from "path"; import packageJson from "../package.json" with { type: "json" }; import fs from "fs/promises"; import * as yauzl from "yauzl"; @@ -34,12 +34,13 @@ async function main() { } const relativePath = entry.fileName.substring("web/".length); - zip.openReadStream(entry, (err, readStream) => { + zip.openReadStream(entry, async (err, readStream) => { if (err) { console.error(`Failed to read ${entry.fileName} from zip:`, err); return; } const outPath = join(__dirname, "../viewer", relativePath); + await fs.mkdir(dirname(outPath), { recursive: true }); const outStream = createWriteStream(outPath); readStream.pipe(outStream); outStream.on("finish", () => { diff --git a/packages/pdfjs-viewer/viewer/locale/be/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/be/viewer.ftl index 2931e7b888..98adf30d62 100644 --- a/packages/pdfjs-viewer/viewer/locale/be/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/be/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Мініяцюра старонкі { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Выбраць старонку { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Выбраць старонку { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Старонка { $page } з { $total } ## Find panel button title and messages @@ -649,9 +662,12 @@ pdfjs-toggle-views-manager-button = .title = Паказаць/схаваць бакавую панэль pdfjs-toggle-views-manager-notification-button = .title = Паказаць/схаваць бакавую панэль (дакумент мае мініяцюры/змест/далучэнні/пласты) +pdfjs-toggle-views-manager-button1-label = Кіраванне старонкамі pdfjs-toggle-views-manager-button-label = Паказаць/схаваць бакавую панэль pdfjs-views-manager-sidebar = .aria-label = Бакавая панэль +pdfjs-views-manager-sidebar-resizer = + .aria-label = Змена памеру бакавой панэлі pdfjs-views-manager-view-selector-button = .title = Выгляд pdfjs-views-manager-view-selector-button-label = Выгляд @@ -711,9 +727,19 @@ pdfjs-views-manager-status-warning-copy-label = Не ўдалося скапія pdfjs-views-manager-status-warning-delete-label = Не ўдалося выдаліць. Абнавіце старонку і паспрабуйце зноў. pdfjs-views-manager-status-warning-save-label = Не ўдалося захаваць. Абнавіце старонку і паспрабуйце зноў. pdfjs-views-manager-status-undo-button-label = Адмяніць +pdfjs-views-manager-status-done-button-label = Гатова pdfjs-views-manager-status-close-button = .title = Закрыць pdfjs-views-manager-status-close-button-label = Закрыць +pdfjs-views-manager-paste-button-label = Уставіць +pdfjs-views-manager-paste-button-before = + .title = Уставіць перад першай старонкай +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Уставіць пасля старонкі { $page } +pdfjs-toggle-views-manager-button1 = + .title = Кіраванне старонкамі ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/bqi/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/bqi/viewer.ftl new file mode 100644 index 0000000000..a2d05359bf --- /dev/null +++ b/packages/pdfjs-viewer/viewer/locale/bqi/viewer.ftl @@ -0,0 +1,67 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +## Main toolbar buttons (tooltips and alt text for images) + +pdfjs-print-button = + .title = چاپ +pdfjs-print-button-label = چاپ + +## + +pdfjs-document-properties-linearized-yes = هری + +## Print + +pdfjs-print-progress-close-button = لقو + +## Password + +pdfjs-password-ok-button = خا +pdfjs-password-cancel-button = لقو + +## Editing + +pdfjs-editor-stamp-button = + .title = ٱووردن یا آلشت شؽواتا +pdfjs-editor-stamp-button-label = ٱووردن یا آلشت شؽواتا + +## Default editor aria labels + +pdfjs-editor-stamp-editor = + .aria-label = آلشتگر شؽوات + +## + +# .default-content is used as a placeholder in an empty text editor. +pdfjs-free-text2 = + .aria-label = آلشتگر هؽل + .default-content = ناهاڌن پا هؽل کردن... +pdfjs-editor-comments-sidebar-no-comments-link = قلوه دووسته بۊین + +## Alt-text dialog + +pdfjs-editor-alt-text-cancel-button = لقو + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + +pdfjs-editor-new-alt-text-disclaimer-learn-more-url = قلوه دووسته بۊین + +## Dialog buttons + +pdfjs-editor-add-signature-cancel-button = لقو + +## Comment popup + +pdfjs-editor-edit-comment-popup-button-label = آلشت منشڌ +pdfjs-editor-edit-comment-popup-button = + .title = آلشت منشڌ + +## Edit a comment dialog + +# An existing comment is edited +pdfjs-editor-edit-comment-dialog-title-when-editing = آلشت منشڌ +pdfjs-editor-edit-comment-dialog-cancel-button = لقو diff --git a/packages/pdfjs-viewer/viewer/locale/cs/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/cs/viewer.ftl index 6868596def..69fed588b7 100644 --- a/packages/pdfjs-viewer/viewer/locale/cs/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/cs/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Náhled strany { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Vybrat stranu { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Vybrat stranu { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Strana { $page } z { $total } ## Find panel button title and messages @@ -653,13 +666,18 @@ pdfjs-toggle-views-manager-button = .title = Přepnout postranní lištu pdfjs-toggle-views-manager-notification-button = .title = Přepnout postranní lištu (dokument obsahuje náhledy/osnovu/přílohy/vrstvy) +pdfjs-toggle-views-manager-button1-label = Spravovat strany pdfjs-toggle-views-manager-button-label = Přepnout postranní lištu pdfjs-views-manager-sidebar = .aria-label = Postranní lišta +pdfjs-views-manager-sidebar-resizer = + .aria-label = Změna velikosti v postranní liště pdfjs-views-manager-view-selector-button = .title = Zobrazení pdfjs-views-manager-view-selector-button-label = Zobrazení pdfjs-views-manager-pages-title = Stránky +pdfjs-views-manager-outlines-title1 = Osnova dokumentu + .title = Osnova dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky) pdfjs-views-manager-outlines-title = Osnova dokumentu pdfjs-views-manager-attachments-title = Přílohy pdfjs-views-manager-layers-title = Vrstvy @@ -674,16 +692,17 @@ pdfjs-views-manager-add-file-button-label = Přidat soubor # $count (Number) - the number of selected pages. pdfjs-views-manager-pages-status-action-label = { $count -> - [one] { $count } vybrán + [one] { $count } vybrána [few] { $count } vybrány [many] { $count } vybráno *[other] { $count } vybráno } -pdfjs-views-manager-pages-status-none-action-label = Vyberte stránky +pdfjs-views-manager-pages-status-none-action-label = Výběr stránek pdfjs-views-manager-pages-status-action-button-label = Správa pdfjs-views-manager-pages-status-copy-button-label = Kopírovat pdfjs-views-manager-pages-status-cut-button-label = Vyjmout pdfjs-views-manager-pages-status-delete-button-label = Smazat +pdfjs-views-manager-pages-status-export-selected-button-label = Exportovat vybrané… pdfjs-views-manager-pages-status-save-as-button-label = Uložit jako… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -719,9 +738,22 @@ pdfjs-views-manager-status-warning-copy-label = Kopírování se nezdařilo. Obn pdfjs-views-manager-status-warning-delete-label = Smazání se nezdařilo. Obnovte stránku a zkuste to znovu. pdfjs-views-manager-status-warning-save-label = Nepodařilo se uložit. Obnovte stránku a zkuste to znovu. pdfjs-views-manager-status-undo-button-label = Zpět +pdfjs-views-manager-status-done-button-label = Hotovo pdfjs-views-manager-status-close-button = .title = Zavřít pdfjs-views-manager-status-close-button-label = Zavřít +pdfjs-views-manager-paste-button-label = Vložit +pdfjs-views-manager-paste-button-before = + .title = Vloží před první stránku +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Vložit za stránku { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOVÉ +pdfjs-toggle-views-manager-button1 = + .title = Spravovat strany ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/cy/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/cy/viewer.ftl index 8842d0d27d..c1677d5d44 100644 --- a/packages/pdfjs-viewer/viewer/locale/cy/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/cy/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Llun Bach Tudalen { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Dewis tudalen { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Dewis tudalen { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Tudalen { $page } o { $total } ## Find panel button title and messages @@ -661,9 +674,12 @@ pdfjs-toggle-views-manager-button = .title = Togl y Bar Ochr pdfjs-toggle-views-manager-notification-button = .title = Togl y Bar Ochr (dogfen yn cynnwys lluniau bach/amlinelliad/atodiadau/haenau) +pdfjs-toggle-views-manager-button1-label = Rheoli tudalennau pdfjs-toggle-views-manager-button-label = Togl y Bar Ochr pdfjs-views-manager-sidebar = .aria-label = Bar Ochr +pdfjs-views-manager-sidebar-resizer = + .aria-label = Newid maint bar ochr pdfjs-views-manager-view-selector-button = .title = Golygon pdfjs-views-manager-view-selector-button-label = Golygon @@ -735,9 +751,19 @@ pdfjs-views-manager-status-warning-copy-label = Methu copïo. Adnewyddwch y duda pdfjs-views-manager-status-warning-delete-label = Methu dileu. Adnewyddwch y dudalen a cheisio eto. pdfjs-views-manager-status-warning-save-label = Methu cadw. Adnewyddwch y dudalen a cheisio eto. pdfjs-views-manager-status-undo-button-label = Dadwneud +pdfjs-views-manager-status-done-button-label = Gorffen pdfjs-views-manager-status-close-button = .title = Cau pdfjs-views-manager-status-close-button-label = Cau +pdfjs-views-manager-paste-button-label = Gludo +pdfjs-views-manager-paste-button-before = + .title = Gludo cyn y dudalen gyntaf +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Gludo ar ôl tudalen { $page } +pdfjs-toggle-views-manager-button1 = + .title = Rheoli tudalennau ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/da/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/da/viewer.ftl index a2463d5f92..ea79975b81 100644 --- a/packages/pdfjs-viewer/viewer/locale/da/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/da/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniature af side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Vælg side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Vælg side { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Side { $page } af { $total } ## Find panel button title and messages @@ -534,6 +547,7 @@ pdfjs-editor-undo-bar-message-freetext = Tekst fjernet pdfjs-editor-undo-bar-message-ink = Tegning fjernet pdfjs-editor-undo-bar-message-stamp = Billede fjernet pdfjs-editor-undo-bar-message-signature = Signatur fjernet +pdfjs-editor-undo-bar-message-comment = Kommentar fjernet # Variables: # $count (Number) - the number of removed annotations. pdfjs-editor-undo-bar-message-multiple = @@ -633,6 +647,36 @@ pdfjs-editor-edit-comment-dialog-cancel-button = Annuller pdfjs-editor-add-comment-button = .title = Tilføj kommentar +## The view manager is a sidebar displaying different views: +## - thumbnails; +## - outline; +## - attachments; +## - layers. +## The thumbnails view is used to edit the pdf: remove/insert pages, ... + +pdfjs-toggle-views-manager-button = + .title = Slå sidepanel til eller fra +pdfjs-toggle-views-manager-notification-button = + .title = Slå sidepanel til eller fra (dokumentet indeholder miniaturer/disposition/vedhæftede filer/lag) +pdfjs-toggle-views-manager-button1-label = Håndter sider +pdfjs-toggle-views-manager-button-label = Slå sidepanel til eller fra +pdfjs-views-manager-sidebar = + .aria-label = Sidepanel +pdfjs-views-manager-view-selector-button = + .title = Visninger +pdfjs-views-manager-view-selector-button-label = Visninger +pdfjs-views-manager-pages-title = Sider +pdfjs-views-manager-outlines-title = Dokument-disposition +pdfjs-views-manager-attachments-title = Vedhæftede filer +pdfjs-views-manager-layers-title = Lag +pdfjs-views-manager-pages-option-label = Sider +pdfjs-views-manager-paste-button-before = + .title = Indsæt før første side +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Indsæt efter side { $page } + ## Main menu for adding/removing signatures pdfjs-editor-delete-signature-button1 = diff --git a/packages/pdfjs-viewer/viewer/locale/de/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/de/viewer.ftl index 799817a0da..15274ef942 100644 --- a/packages/pdfjs-viewer/viewer/locale/de/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/de/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniaturansicht von Seite { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Seite { $page } auswählen +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Seite { $page } auswählen +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Seite { $page } von { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Sidebar umschalten pdfjs-toggle-views-manager-notification-button = .title = Sidebar umschalten (Dokument enthält Miniaturansichten/Dokumentstruktur/Anhänge/Ebenen) +pdfjs-toggle-views-manager-button1-label = Seiten verwalten pdfjs-toggle-views-manager-button-label = Sidebar umschalten pdfjs-views-manager-sidebar = .aria-label = Sidebar +pdfjs-views-manager-sidebar-resizer = + .aria-label = Größenanpassung der Sidebar pdfjs-views-manager-view-selector-button = .title = Ansichten pdfjs-views-manager-view-selector-button-label = Ansichten pdfjs-views-manager-pages-title = Seiten +pdfjs-views-manager-outlines-title1 = Dokumentstruktur + .title = Dokumentstruktur (Doppelklick zum Ein- bzw. Ausblenden aller Einträge) pdfjs-views-manager-outlines-title = Dokumentstruktur pdfjs-views-manager-attachments-title = Anhänge +pdfjs-views-manager-layers-title1 = Ebenen + .title = Ebenen (Doppelklick, um alle Ebenen auf den Standard-Zustand zurückzusetzen) pdfjs-views-manager-layers-title = Ebenen pdfjs-views-manager-pages-option-label = Seiten pdfjs-views-manager-outlines-option-label = Dokumentstruktur @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Verwalten pdfjs-views-manager-pages-status-copy-button-label = Kopieren pdfjs-views-manager-pages-status-cut-button-label = Ausschneiden pdfjs-views-manager-pages-status-delete-button-label = Löschen +pdfjs-views-manager-pages-status-export-selected-button-label = Ausgewählte exportieren… pdfjs-views-manager-pages-status-save-as-button-label = Speichern unter… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Kopieren nicht möglich. Aktuali pdfjs-views-manager-status-warning-delete-label = Löschen war nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut. pdfjs-views-manager-status-warning-save-label = Speichern nicht möglich. Aktualisieren Sie die Seite und versuchen Sie es erneut. pdfjs-views-manager-status-undo-button-label = Rückgängig +pdfjs-views-manager-status-done-button-label = Fertig pdfjs-views-manager-status-close-button = .title = Schließen pdfjs-views-manager-status-close-button-label = Schließen pdfjs-views-manager-paste-button-label = Einfügen +pdfjs-views-manager-paste-button-before = + .title = Vor der ersten Seite einfügen +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Nach Seite { $page } einfügen +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NEU +pdfjs-toggle-views-manager-button1 = + .title = Seiten verwalten ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/dsb/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/dsb/viewer.ftl index dc4e293f39..7c25ff5d48 100644 --- a/packages/pdfjs-viewer/viewer/locale/dsb/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/dsb/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura boka { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Bok { $page } wubraś +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Bok { $page } wubraś +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Bok { $page } z { $total } ## Find panel button title and messages @@ -653,15 +666,22 @@ pdfjs-toggle-views-manager-button = .title = Bocnicu pśešaltowaś pdfjs-toggle-views-manager-notification-button = .title = Bocnicu pśešaltowaś (dokument miniatury/rozrědowanje/pśipiski/warstwy wopśimujo) +pdfjs-toggle-views-manager-button1-label = Boki zastojaś pdfjs-toggle-views-manager-button-label = Bocnicu pśešaltowaś pdfjs-views-manager-sidebar = .aria-label = Bocnica +pdfjs-views-manager-sidebar-resizer = + .aria-label = Pśiměrjenje wjelikosći bocnice pdfjs-views-manager-view-selector-button = .title = Naglědy pdfjs-views-manager-view-selector-button-label = Naglědy pdfjs-views-manager-pages-title = Boki +pdfjs-views-manager-outlines-title1 = Dokumentowa struktura + .title = Dokumentowa struktura (klikniśo dwójcy, aby wšykne zapiski pokazał/schował) pdfjs-views-manager-outlines-title = Dokumentowa struktura pdfjs-views-manager-attachments-title = Pśidanki +pdfjs-views-manager-layers-title1 = Rowniny + .title = Rowniny (klikniśo dwójcy, aby wšykne rowniny na standardny status slědk stajił) pdfjs-views-manager-layers-title = Rowniny pdfjs-views-manager-pages-option-label = Boki pdfjs-views-manager-outlines-option-label = Dokumentowa struktura @@ -684,6 +704,7 @@ pdfjs-views-manager-pages-status-action-button-label = Zastojaś pdfjs-views-manager-pages-status-copy-button-label = Kopěrowaś pdfjs-views-manager-pages-status-cut-button-label = Wurězaś pdfjs-views-manager-pages-status-delete-button-label = Lašowaś +pdfjs-views-manager-pages-status-export-selected-button-label = Wubrane eksportěrowaś… pdfjs-views-manager-pages-status-save-as-button-label = Składowaś ako… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -719,9 +740,22 @@ pdfjs-views-manager-status-warning-copy-label = Njedajo se kopěrowaś. Aktualiz pdfjs-views-manager-status-warning-delete-label = Njedajo se lašowaś. Aktualizěrujśo bok a wopytajśo hyšći raz. pdfjs-views-manager-status-warning-save-label = Njedajo se składowaś. Aktualizěrujśo bok a wopytajśo hyšći raz. pdfjs-views-manager-status-undo-button-label = Anulěrowaś +pdfjs-views-manager-status-done-button-label = Dokóńcony pdfjs-views-manager-status-close-button = .title = Zacyniś pdfjs-views-manager-status-close-button-label = Zacyniś +pdfjs-views-manager-paste-button-label = Zasajźiś +pdfjs-views-manager-paste-button-before = + .title = Pśed prědnym bokom zasajźiś +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Za bokom { $page } zasajźiś +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOWY +pdfjs-toggle-views-manager-button1 = + .title = Boki zastojaś ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/el/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/el/viewer.ftl index 22f9fc1234..4bdcf1802d 100644 --- a/packages/pdfjs-viewer/viewer/locale/el/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/el/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Μικρογραφία σελίδας { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Επιλογή σελίδας { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Επιλογή σελίδας { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Σελίδα { $page } από { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = (Απ)ενεργοποίηση πλαϊνής γραμμής pdfjs-toggle-views-manager-notification-button = .title = (Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει μικρογραφίες/περίγραμμα/συνημμένα/επίπεδα) +pdfjs-toggle-views-manager-button1-label = Διαχείριση σελίδων pdfjs-toggle-views-manager-button-label = (Απ)ενεργοποίηση πλαϊνής γραμμής pdfjs-views-manager-sidebar = .aria-label = Πλαϊνή γραμμή +pdfjs-views-manager-sidebar-resizer = + .aria-label = Αλλαγή μεγέθους πλαϊνής γραμμής pdfjs-views-manager-view-selector-button = .title = Προβολές pdfjs-views-manager-view-selector-button-label = Προβολές pdfjs-views-manager-pages-title = Σελίδες +pdfjs-views-manager-outlines-title1 = Διάρθρωση εγγράφου + .title = Διάρθρωση εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων) pdfjs-views-manager-outlines-title = Διάρθρωση εγγράφου pdfjs-views-manager-attachments-title = Συνημμένα +pdfjs-views-manager-layers-title1 = Επίπεδα + .title = Επίπεδα (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση) pdfjs-views-manager-layers-title = Επίπεδα pdfjs-views-manager-pages-option-label = Σελίδες pdfjs-views-manager-outlines-option-label = Διάρθρωση εγγράφου @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Διαχείριση pdfjs-views-manager-pages-status-copy-button-label = Αντιγραφή pdfjs-views-manager-pages-status-cut-button-label = Αποκοπή pdfjs-views-manager-pages-status-delete-button-label = Διαγραφή +pdfjs-views-manager-pages-status-export-selected-button-label = Εξαγωγή επιλεγμένων… pdfjs-views-manager-pages-status-save-as-button-label = Αποθήκευση ως… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Δεν ήταν δυνατή η pdfjs-views-manager-status-warning-delete-label = Δεν ήταν δυνατή η διαγραφή. Ανανεώστε τη σελίδα και δοκιμάστε ξανά. pdfjs-views-manager-status-warning-save-label = Δεν ήταν δυνατή η αποθήκευση. Ανανεώστε τη σελίδα και δοκιμάστε ξανά. pdfjs-views-manager-status-undo-button-label = Αναίρεση +pdfjs-views-manager-status-done-button-label = Τέλος pdfjs-views-manager-status-close-button = .title = Κλείσιμο pdfjs-views-manager-status-close-button-label = Κλείσιμο +pdfjs-views-manager-paste-button-label = Επικόλληση +pdfjs-views-manager-paste-button-before = + .title = Επικόλληση πριν από την πρώτη σελίδα +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Επικόλληση μετά τη σελίδα { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = ΝΕΟ +pdfjs-toggle-views-manager-button1 = + .title = Διαχείριση σελίδων ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/en-CA/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/en-CA/viewer.ftl index b5e2920424..5867587c0e 100644 --- a/packages/pdfjs-viewer/viewer/locale/en-CA/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/en-CA/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Thumbnail of Page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Select page { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Select page { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Page { $page } of { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Toggle Sidebar pdfjs-toggle-views-manager-notification-button = .title = Toggle Sidebar (document contains thumbnails/outline/attachments/layers) +pdfjs-toggle-views-manager-button1-label = Manage pages pdfjs-toggle-views-manager-button-label = Toggle Sidebar pdfjs-views-manager-sidebar = .aria-label = Sidebar +pdfjs-views-manager-sidebar-resizer = + .aria-label = Sidebar resizer pdfjs-views-manager-view-selector-button = .title = Views pdfjs-views-manager-view-selector-button-label = Views pdfjs-views-manager-pages-title = Pages +pdfjs-views-manager-outlines-title1 = Document outline + .title = Document outline (double-click to expand/collapse all items) pdfjs-views-manager-outlines-title = Document outline pdfjs-views-manager-attachments-title = Attachments +pdfjs-views-manager-layers-title1 = Layers + .title = Layers (double-click to reset all layers to the default state) pdfjs-views-manager-layers-title = Layers pdfjs-views-manager-pages-option-label = Pages pdfjs-views-manager-outlines-option-label = Document outline @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Manage pdfjs-views-manager-pages-status-copy-button-label = Copy pdfjs-views-manager-pages-status-cut-button-label = Cut pdfjs-views-manager-pages-status-delete-button-label = Delete +pdfjs-views-manager-pages-status-export-selected-button-label = Export selected… pdfjs-views-manager-pages-status-save-as-button-label = Save as… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Couldn’t copy. Refresh page an pdfjs-views-manager-status-warning-delete-label = Couldn’t delete. Refresh page and try again. pdfjs-views-manager-status-warning-save-label = Couldn’t save. Refresh page and try again. pdfjs-views-manager-status-undo-button-label = Undo +pdfjs-views-manager-status-done-button-label = Done pdfjs-views-manager-status-close-button = .title = Close pdfjs-views-manager-status-close-button-label = Close +pdfjs-views-manager-paste-button-label = Paste +pdfjs-views-manager-paste-button-before = + .title = Paste before the first page +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Paste after page { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NEW +pdfjs-toggle-views-manager-button1 = + .title = Manage pages ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/en-GB/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/en-GB/viewer.ftl index 3af7bf2288..f1bdc7e71b 100644 --- a/packages/pdfjs-viewer/viewer/locale/en-GB/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/en-GB/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Thumbnail of Page { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Select page { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Select page { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Page { $page } of { $total } ## Find panel button title and messages @@ -649,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Toggle Sidebar pdfjs-toggle-views-manager-notification-button = .title = Toggle Sidebar (document contains thumbnails/outline/attachments/layers) +pdfjs-toggle-views-manager-button1-label = Manage pages pdfjs-toggle-views-manager-button-label = Toggle Sidebar pdfjs-views-manager-sidebar = .aria-label = Sidebar @@ -658,8 +668,12 @@ pdfjs-views-manager-view-selector-button = .title = Views pdfjs-views-manager-view-selector-button-label = Views pdfjs-views-manager-pages-title = Pages +pdfjs-views-manager-outlines-title1 = Document outline + .title = Document outline (double-click to expand/collapse all items) pdfjs-views-manager-outlines-title = Document outline pdfjs-views-manager-attachments-title = Attachments +pdfjs-views-manager-layers-title1 = Layers + .title = Layers (double-click to reset all layers to the default state) pdfjs-views-manager-layers-title = Layers pdfjs-views-manager-pages-option-label = Pages pdfjs-views-manager-outlines-option-label = Document outline @@ -680,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Manage pdfjs-views-manager-pages-status-copy-button-label = Copy pdfjs-views-manager-pages-status-cut-button-label = Cut pdfjs-views-manager-pages-status-delete-button-label = Delete +pdfjs-views-manager-pages-status-export-selected-button-label = Export selected… pdfjs-views-manager-pages-status-save-as-button-label = Save as… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -709,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Couldn’t copy. Refresh page an pdfjs-views-manager-status-warning-delete-label = Couldn’t delete. Refresh page and try again. pdfjs-views-manager-status-warning-save-label = Couldn’t save. Refresh page and try again. pdfjs-views-manager-status-undo-button-label = Undo +pdfjs-views-manager-status-done-button-label = Done pdfjs-views-manager-status-close-button = .title = Close pdfjs-views-manager-status-close-button-label = Close pdfjs-views-manager-paste-button-label = Paste +pdfjs-views-manager-paste-button-before = + .title = Paste before the first page +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Paste after page { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NEW +pdfjs-toggle-views-manager-button1 = + .title = Manage pages ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/en-US/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/en-US/viewer.ftl index 97a2d04691..c281f1d106 100644 --- a/packages/pdfjs-viewer/viewer/locale/en-US/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/en-US/viewer.ftl @@ -705,9 +705,11 @@ pdfjs-views-manager-view-selector-button = .title = Views pdfjs-views-manager-view-selector-button-label = Views pdfjs-views-manager-pages-title = Pages -pdfjs-views-manager-outlines-title = Document outline +pdfjs-views-manager-outlines-title1 = Document outline + .title = Document outline (double-click to expand/collapse all items) pdfjs-views-manager-attachments-title = Attachments -pdfjs-views-manager-layers-title = Layers +pdfjs-views-manager-layers-title1 = Layers + .title = Layers (double-click to reset all layers to the default state) pdfjs-views-manager-pages-option-label = Pages pdfjs-views-manager-outlines-option-label = Document outline @@ -730,7 +732,7 @@ pdfjs-views-manager-pages-status-action-button-label = Manage pdfjs-views-manager-pages-status-copy-button-label = Copy pdfjs-views-manager-pages-status-cut-button-label = Cut pdfjs-views-manager-pages-status-delete-button-label = Delete -pdfjs-views-manager-pages-status-save-as-button-label = Save as… +pdfjs-views-manager-pages-status-export-selected-button-label = Export selected… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -764,7 +766,20 @@ pdfjs-views-manager-status-warning-copy-label = Couldn’t copy. Refresh page an pdfjs-views-manager-status-warning-delete-label = Couldn’t delete. Refresh page and try again. pdfjs-views-manager-status-warning-save-label = Couldn’t save. Refresh page and try again. pdfjs-views-manager-status-undo-button-label = Undo +pdfjs-views-manager-status-done-button-label = Done pdfjs-views-manager-status-close-button = .title = Close pdfjs-views-manager-status-close-button-label = Close + pdfjs-views-manager-paste-button-label = Paste +pdfjs-views-manager-paste-button-before = + .title = Paste before the first page + +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Paste after page { $page } + +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NEW diff --git a/packages/pdfjs-viewer/viewer/locale/eo/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/eo/viewer.ftl index 2990897f01..b8a7f402ba 100644 --- a/packages/pdfjs-viewer/viewer/locale/eo/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/eo/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniaturo de paĝo { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Elekti paĝon { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Elekti paĝon { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Paĝo { $page } el { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Montri/kaŝi flankan strion pdfjs-toggle-views-manager-notification-button = .title = Montri/kaŝi flankan strion (la dokumento enhavas miniaturojn/konturon/kunsendaĵojn/tavolojn) +pdfjs-toggle-views-manager-button1-label = Administri paĝojn pdfjs-toggle-views-manager-button-label = Montri/kaŝi flankan strion pdfjs-views-manager-sidebar = .aria-label = Flanka strio +pdfjs-views-manager-sidebar-resizer = + .aria-label = Dimensiigilo por la flanka strio pdfjs-views-manager-view-selector-button = .title = Vidoj pdfjs-views-manager-view-selector-button-label = Vidoj pdfjs-views-manager-pages-title = Paĝoj +pdfjs-views-manager-outlines-title1 = Konturo de dokumento + .title = Konturo de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn) pdfjs-views-manager-outlines-title = Konturo de dokumento pdfjs-views-manager-attachments-title = Kunsendaĵoj +pdfjs-views-manager-layers-title1 = Tavoloj + .title = Tavoloj (alklaku duoble por ke ĉiuj tavoloj reiru al la norma stato) pdfjs-views-manager-layers-title = Tavoloj pdfjs-views-manager-pages-option-label = Paĝoj pdfjs-views-manager-outlines-option-label = Konturo de dokumento @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Administri pdfjs-views-manager-pages-status-copy-button-label = Kopii pdfjs-views-manager-pages-status-cut-button-label = Eltondi pdfjs-views-manager-pages-status-delete-button-label = Forigi +pdfjs-views-manager-pages-status-export-selected-button-label = Eksporti elektitajn… pdfjs-views-manager-pages-status-save-as-button-label = Konservi kiel… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Ne eblis kopii. Refreŝigu la pa pdfjs-views-manager-status-warning-delete-label = Ne eblis forigi. Refreŝigu la paĝon kaj provu denove. pdfjs-views-manager-status-warning-save-label = Ne eblis konservi. Refreŝigu la paĝon kaj provu denove. pdfjs-views-manager-status-undo-button-label = Malfari +pdfjs-views-manager-status-done-button-label = Farita pdfjs-views-manager-status-close-button = .title = Fermi pdfjs-views-manager-status-close-button-label = Fermi +pdfjs-views-manager-paste-button-label = Alglui +pdfjs-views-manager-paste-button-before = + .title = Alglui antaŭ la unua paĝo +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Alglui post la paĝo { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOVA +pdfjs-toggle-views-manager-button1 = + .title = Administri paĝojn ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/es-AR/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/es-AR/viewer.ftl index e2afedfd5c..337a70619b 100644 --- a/packages/pdfjs-viewer/viewer/locale/es-AR/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/es-AR/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura de página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Seleccionar página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Seleccionar página { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Página { $page } de { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Alternar barra lateral pdfjs-toggle-views-manager-notification-button = .title = Alternar barra lateral (el documento contiene miniaturas/esquemas/adjuntos/capas) +pdfjs-toggle-views-manager-button1-label = Administrar páginas pdfjs-toggle-views-manager-button-label = Alternar barra lateral pdfjs-views-manager-sidebar = .aria-label = Barra lateral +pdfjs-views-manager-sidebar-resizer = + .aria-label = Redimensionador de barra lateral pdfjs-views-manager-view-selector-button = .title = Vistas pdfjs-views-manager-view-selector-button-label = Vistas pdfjs-views-manager-pages-title = Páginas +pdfjs-views-manager-outlines-title1 = Esquema del documento + .title = Esquema del documento (doble clic para expandir/colapsar todos los ítems) pdfjs-views-manager-outlines-title = Esquema del documento pdfjs-views-manager-attachments-title = Adjuntos +pdfjs-views-manager-layers-title1 = Capas + .title = Capas (doble clic para restablecer todas las cañas al estado predeterminado) pdfjs-views-manager-layers-title = Capas pdfjs-views-manager-pages-option-label = Páginas pdfjs-views-manager-outlines-option-label = Esquema del documento @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Administrar pdfjs-views-manager-pages-status-copy-button-label = Copiar pdfjs-views-manager-pages-status-cut-button-label = Cortar pdfjs-views-manager-pages-status-delete-button-label = Borrar +pdfjs-views-manager-pages-status-export-selected-button-label = Exportar seleccionado… pdfjs-views-manager-pages-status-save-as-button-label = Guardar como… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = No se pudo copiar. Refresque la pdfjs-views-manager-status-warning-delete-label = No se pudo borrar. Refresque la página y pruebe de nuevo. pdfjs-views-manager-status-warning-save-label = No se pudo guardar. Refresque la página y pruebe de nuevo. pdfjs-views-manager-status-undo-button-label = Deshacer +pdfjs-views-manager-status-done-button-label = Listo pdfjs-views-manager-status-close-button = .title = Cerrar pdfjs-views-manager-status-close-button-label = Cerrar +pdfjs-views-manager-paste-button-label = Pegar +pdfjs-views-manager-paste-button-before = + .title = Pegar antes de la primera página +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Pegar después de la página { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NUEVO +pdfjs-toggle-views-manager-button1 = + .title = Administrar páginas ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/es-CL/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/es-CL/viewer.ftl index 3f06380451..fef510a3c3 100644 --- a/packages/pdfjs-viewer/viewer/locale/es-CL/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/es-CL/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura de la página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Selecciona la página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Selecciona la página { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Página { $page } de { $total } ## Find panel button title and messages @@ -645,9 +658,12 @@ pdfjs-toggle-views-manager-button = .title = Barra lateral pdfjs-toggle-views-manager-notification-button = .title = Cambiar barra lateral (índice de contenidos del documento/miniaturas/adjuntos/capas) +pdfjs-toggle-views-manager-button1-label = Gestionar páginas pdfjs-toggle-views-manager-button-label = Barra lateral pdfjs-views-manager-sidebar = .aria-label = Barra lateral +pdfjs-views-manager-sidebar-resizer = + .aria-label = Redimensionador de la barra lateral pdfjs-views-manager-view-selector-button = .title = Vistas pdfjs-views-manager-view-selector-button-label = Vistas @@ -703,9 +719,19 @@ pdfjs-views-manager-status-warning-copy-label = No se pudo copiar. Actualiza la pdfjs-views-manager-status-warning-delete-label = No se pudo eliminar. Actualiza la página y vuelve a intentarlo. pdfjs-views-manager-status-warning-save-label = No se pudo guardar. Actualiza la página y vuelve a intentarlo. pdfjs-views-manager-status-undo-button-label = Deshacer +pdfjs-views-manager-status-done-button-label = Hecho pdfjs-views-manager-status-close-button = .title = Cerrar pdfjs-views-manager-status-close-button-label = Cerrar +pdfjs-views-manager-paste-button-label = Pegar +pdfjs-views-manager-paste-button-before = + .title = Pegar antes de la primera página +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Pegar después de la página { $page } +pdfjs-toggle-views-manager-button1 = + .title = Gestionar páginas ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/es-ES/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/es-ES/viewer.ftl index 1740dfb803..b03f200346 100644 --- a/packages/pdfjs-viewer/viewer/locale/es-ES/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/es-ES/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura de la página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Seleccionar página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Seleccionar página { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Página { $page } de { $total } ## Find panel button title and messages @@ -645,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Cambiar barra lateral pdfjs-toggle-views-manager-notification-button = .title = Alternar barra lateral (el documento contiene miniaturas/esquemas/adjuntos/capas) +pdfjs-toggle-views-manager-button1-label = Administrar páginas pdfjs-toggle-views-manager-button-label = Cambiar barra lateral pdfjs-views-manager-sidebar = .aria-label = Barra lateral @@ -703,9 +717,19 @@ pdfjs-views-manager-status-warning-copy-label = No se pudo copiar. Refresque la pdfjs-views-manager-status-warning-delete-label = No se pudo cortar. Refresque la página y pruebe de nuevo. pdfjs-views-manager-status-warning-save-label = No se pudo cortar. Refresque la página y pruebe de nuevo. pdfjs-views-manager-status-undo-button-label = Deshacer +pdfjs-views-manager-status-done-button-label = Hecho pdfjs-views-manager-status-close-button = .title = Cerrar pdfjs-views-manager-status-close-button-label = Cerrar +pdfjs-views-manager-paste-button-label = Pegar +pdfjs-views-manager-paste-button-before = + .title = Pegar antes de la primera página +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Pegar después de la página { $page } +pdfjs-toggle-views-manager-button1 = + .title = Administrar páginas ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/es-MX/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/es-MX/viewer.ftl index 0dc9fa1927..7b7d6c6ee6 100644 --- a/packages/pdfjs-viewer/viewer/locale/es-MX/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/es-MX/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura de la página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Seleccionar página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Seleccionar página { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Página { $page } de { $total } ## Find panel button title and messages @@ -645,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Alternar barra lateral pdfjs-toggle-views-manager-notification-button = .title = Cambiar barra lateral (índice de contenidos del documento/miniaturas/adjuntos/capas) +pdfjs-toggle-views-manager-button1-label = Administrar páginas pdfjs-toggle-views-manager-button-label = Alternar barra lateral pdfjs-views-manager-sidebar = .aria-label = Barra lateral @@ -707,6 +721,8 @@ pdfjs-views-manager-status-close-button = .title = Cerrar pdfjs-views-manager-status-close-button-label = Cerrar pdfjs-views-manager-paste-button-label = Pegar +pdfjs-toggle-views-manager-button1 = + .title = Administrar páginas ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/eu/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/eu/viewer.ftl index 784f1555b0..73523d340d 100644 --- a/packages/pdfjs-viewer/viewer/locale/eu/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/eu/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = { $page }. orriaren koadro txikia +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Hautatu { $page } orria +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Hautatu { $page } orria +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = { $total } / { $page }. orria ## Find panel button title and messages @@ -649,9 +662,12 @@ pdfjs-toggle-views-manager-button = .title = Txandakatu alboko barra pdfjs-toggle-views-manager-notification-button = .title = Txandakatu alboko barra (dokumentuak koadro txikiak/eskema/eranskinak/geruzak ditu) +pdfjs-toggle-views-manager-button1-label = Kudeatu orriak pdfjs-toggle-views-manager-button-label = Txandakatu alboko barra pdfjs-views-manager-sidebar = .aria-label = Alboko barra +pdfjs-views-manager-sidebar-resizer = + .aria-label = Alboko barra neurriz aldatzekoa pdfjs-views-manager-view-selector-button = .title = Ikuspegiak pdfjs-views-manager-view-selector-button-label = Ikuspegiak @@ -707,9 +723,19 @@ pdfjs-views-manager-status-warning-copy-label = Ezin da kopiatu. Berritu orria e pdfjs-views-manager-status-warning-delete-label = Ezin da ezabatu. Berritu orria eta saiatu berriro. pdfjs-views-manager-status-warning-save-label = Ezin da gorde. Berritu orria eta saiatu berriro. pdfjs-views-manager-status-undo-button-label = Desegin +pdfjs-views-manager-status-done-button-label = Eginda pdfjs-views-manager-status-close-button = .title = Itxi pdfjs-views-manager-status-close-button-label = Itxi +pdfjs-views-manager-paste-button-label = Itsatsi +pdfjs-views-manager-paste-button-before = + .title = Itsatsi lehen orriaren aurretik +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Itsatsi { $page }. orriaren aurretik +pdfjs-toggle-views-manager-button1 = + .title = Kudeatu orriak ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/fi/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/fi/viewer.ftl index 2cd070ff1d..ec2b616f6a 100644 --- a/packages/pdfjs-viewer/viewer/locale/fi/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/fi/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Pienoiskuva sivusta { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Valitse sivu { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Valitse sivu { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Sivu { $page }/{ $total } ## Find panel button title and messages @@ -645,15 +658,20 @@ pdfjs-toggle-views-manager-button = .title = Näytä/piilota sivupaneeli pdfjs-toggle-views-manager-notification-button = .title = Näytä/piilota sivupaneeli (dokumentissa on pienoiskuvat/sisällys/liitteitä/tasoja) +pdfjs-toggle-views-manager-button1-label = Hallitse sivuja pdfjs-toggle-views-manager-button-label = Näytä/piilota sivupaneeli pdfjs-views-manager-sidebar = .aria-label = Sivupaneeli +pdfjs-views-manager-sidebar-resizer = + .aria-label = Sivupaneelin koon muuttaja pdfjs-views-manager-view-selector-button = .title = Näkymät pdfjs-views-manager-view-selector-button-label = Näkymät pdfjs-views-manager-pages-title = Sivut pdfjs-views-manager-outlines-title = Dokumentin sisällys pdfjs-views-manager-attachments-title = Liitteet +pdfjs-views-manager-layers-title1 = Tasot + .title = Tasot (napsauta kahdesti nollataksesi tasot niiden oletustilaan) pdfjs-views-manager-layers-title = Tasot pdfjs-views-manager-pages-option-label = Sivut pdfjs-views-manager-outlines-option-label = Dokumentin sisällys @@ -674,6 +692,7 @@ pdfjs-views-manager-pages-status-action-button-label = Hallitse pdfjs-views-manager-pages-status-copy-button-label = Kopioi pdfjs-views-manager-pages-status-cut-button-label = Leikkaa pdfjs-views-manager-pages-status-delete-button-label = Poista +pdfjs-views-manager-pages-status-export-selected-button-label = Vie valitut… pdfjs-views-manager-pages-status-save-as-button-label = Tallenna nimellä… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +722,22 @@ pdfjs-views-manager-status-warning-copy-label = Kopiointi epäonnistui. Päivit pdfjs-views-manager-status-warning-delete-label = Poisto epäonnistui. Päivitä sivu ja yritä uudelleen. pdfjs-views-manager-status-warning-save-label = Tallentaminen epäonnistui. Päivitä sivu ja yritä uudelleen. pdfjs-views-manager-status-undo-button-label = Kumoa +pdfjs-views-manager-status-done-button-label = Valmis pdfjs-views-manager-status-close-button = .title = Sulje pdfjs-views-manager-status-close-button-label = Sulje +pdfjs-views-manager-paste-button-label = Liitä +pdfjs-views-manager-paste-button-before = + .title = Liitä ennen ensimmäistä sivua +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Liitä sivun { $page } jälkeen +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = UUTTA +pdfjs-toggle-views-manager-button1 = + .title = Hallitse sivuja ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/fr/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/fr/viewer.ftl index a448d2cf4e..2c2a3ce7c0 100644 --- a/packages/pdfjs-viewer/viewer/locale/fr/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/fr/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Vignette de la page { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Sélectionner la page { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Sélectionner la page { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Page { $page } sur { $total } ## Find panel button title and messages @@ -645,6 +654,7 @@ pdfjs-toggle-views-manager-button = .title = Afficher/Masquer le panneau latéral pdfjs-toggle-views-manager-notification-button = .title = Afficher/Masquer le panneau latéral (le document contient des vignettes/plan/pièces jointes/calques) +pdfjs-toggle-views-manager-button1-label = Gérer les pages pdfjs-toggle-views-manager-button-label = Afficher/Masquer le panneau latéral pdfjs-views-manager-sidebar = .aria-label = Panneau latéral @@ -654,8 +664,12 @@ pdfjs-views-manager-view-selector-button = .title = Vues pdfjs-views-manager-view-selector-button-label = Vues pdfjs-views-manager-pages-title = Pages +pdfjs-views-manager-outlines-title1 = Structure du document + .title = Structure du document (double-cliquer pour développer/réduire tous les éléments) pdfjs-views-manager-outlines-title = Signets du document pdfjs-views-manager-attachments-title = Pièces jointes +pdfjs-views-manager-layers-title1 = Calques + .title = Calques (double-cliquer pour réinitialiser tous les calques à leur état par défaut) pdfjs-views-manager-layers-title = Calques pdfjs-views-manager-pages-option-label = Pages pdfjs-views-manager-outlines-option-label = Signets du document @@ -676,6 +690,7 @@ pdfjs-views-manager-pages-status-action-button-label = Gérer pdfjs-views-manager-pages-status-copy-button-label = Copier pdfjs-views-manager-pages-status-cut-button-label = Couper pdfjs-views-manager-pages-status-delete-button-label = Supprimer +pdfjs-views-manager-pages-status-export-selected-button-label = Exporter la sélection… pdfjs-views-manager-pages-status-save-as-button-label = Enregistrer sous… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -705,10 +720,22 @@ pdfjs-views-manager-status-warning-copy-label = Copie impossible. Actualisez la pdfjs-views-manager-status-warning-delete-label = Suppression impossible. Actualisez la page et essayez à nouveau. pdfjs-views-manager-status-warning-save-label = Enregistrement impossible. Actualisez la page et essayez à nouveau. pdfjs-views-manager-status-undo-button-label = Annuler +pdfjs-views-manager-status-done-button-label = Terminer pdfjs-views-manager-status-close-button = .title = Fermer pdfjs-views-manager-status-close-button-label = Fermer pdfjs-views-manager-paste-button-label = Coller +pdfjs-views-manager-paste-button-before = + .title = Coller avant la première page +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Coller après la page { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOUVEAU +pdfjs-toggle-views-manager-button1 = + .title = Gérer les pages ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/fy-NL/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/fy-NL/viewer.ftl index f479c0da91..6ec83c7540 100644 --- a/packages/pdfjs-viewer/viewer/locale/fy-NL/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/fy-NL/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatuer fan side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Side { $page } selektearje +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Side { $page } selektearje +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Side { $page } fan { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Sidebalke yn-/útskeakelje pdfjs-toggle-views-manager-notification-button = .title = Sidebalke yn-/útskeakelje (dokumint befettet miniatueren/oersjoch/bylagen/lagen) +pdfjs-toggle-views-manager-button1-label = Siden beheare pdfjs-toggle-views-manager-button-label = Sidebalke yn-/útskeakelje pdfjs-views-manager-sidebar = .aria-label = Sidebalke +pdfjs-views-manager-sidebar-resizer = + .aria-label = Gruttewiziging sydbalke pdfjs-views-manager-view-selector-button = .title = Werjeften pdfjs-views-manager-view-selector-button-label = Werjeften pdfjs-views-manager-pages-title = Siden +pdfjs-views-manager-outlines-title1 = Dokumintoersjoch + .title = Dokumintoersjoch (dûbelklik om alle items út/yn te klappen) pdfjs-views-manager-outlines-title = Dokumintoersjoch pdfjs-views-manager-attachments-title = Bylagen +pdfjs-views-manager-layers-title1 = Lagen + .title = Lagen (dûbelklik om alle lagen nei de standertstatus werom te setten) pdfjs-views-manager-layers-title = Lagen pdfjs-views-manager-pages-option-label = Siden pdfjs-views-manager-outlines-option-label = Dokumintoersjoch @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Beheare pdfjs-views-manager-pages-status-copy-button-label = Kopiearje pdfjs-views-manager-pages-status-cut-button-label = Knippe pdfjs-views-manager-pages-status-delete-button-label = Fuortsmite +pdfjs-views-manager-pages-status-export-selected-button-label = Selektearre eksportearje… pdfjs-views-manager-pages-status-save-as-button-label = Bewarje as… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Kin net kopiearje. Ferfarskje de pdfjs-views-manager-status-warning-delete-label = Kin net fuortsmite. Ferfarskje de side en probearje it opnij. pdfjs-views-manager-status-warning-save-label = Kin net bewarje. Ferfarskje de side en probearje it opnij. pdfjs-views-manager-status-undo-button-label = Ungedien meitsje +pdfjs-views-manager-status-done-button-label = Dien pdfjs-views-manager-status-close-button = .title = Slute pdfjs-views-manager-status-close-button-label = Slute +pdfjs-views-manager-paste-button-label = Plakke +pdfjs-views-manager-paste-button-before = + .title = Plakke foar de earste side +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Plakke nei side { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NIJ +pdfjs-toggle-views-manager-button1 = + .title = Siden beheare ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/gn/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/gn/viewer.ftl index 6eb4d28d0d..19ff2fd82f 100644 --- a/packages/pdfjs-viewer/viewer/locale/gn/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/gn/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Kuatiarogue mba’emirĩ { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Eiporavo kuatiarogue { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Eiporavo kuatiarogue { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Kuatiarogue { $page } { $total } mba’e ## Find panel button title and messages @@ -644,6 +657,7 @@ pdfjs-toggle-views-manager-button = .title = Emoambue tenda yke pdfjs-toggle-views-manager-notification-button = .title = Embojopyru tenda ykegua (kuatia oguereko mba’e’i, kuaakaha/moirũha/ñuãha) +pdfjs-toggle-views-manager-button1-label = Eñangareko kuotiarogue pdfjs-toggle-views-manager-button-label = Emoambue tenda yke pdfjs-views-manager-sidebar = .aria-label = Ta’ãngarupa yke @@ -653,8 +667,12 @@ pdfjs-views-manager-view-selector-button = .title = Hechaha pdfjs-views-manager-view-selector-button-label = Hechaha pdfjs-views-manager-pages-title = Kuatiarogue +pdfjs-views-manager-outlines-title1 = Kuatiaite jejapopy + .title = Kuatiaite jejapopy (eikutu jo’a emyasãi hag̃ua/emomichĩmbaite mba’eporuita) pdfjs-views-manager-outlines-title = Kuatiaite jejapopy pdfjs-views-manager-attachments-title = Moirũha +pdfjs-views-manager-layers-title1 = Ñuãhaita + .title = Ñuãhaita (eikutu jo’a erupaite jey hag̃ua ñuãhaita oĩ haguepevoi) pdfjs-views-manager-layers-title = Ñuãha pdfjs-views-manager-pages-option-label = Kuatiarogueita pdfjs-views-manager-outlines-option-label = Kuatiaite jejapopy @@ -675,6 +693,7 @@ pdfjs-views-manager-pages-status-action-button-label = Ñangareko pdfjs-views-manager-pages-status-copy-button-label = Monguatia pdfjs-views-manager-pages-status-cut-button-label = Kytĩ pdfjs-views-manager-pages-status-delete-button-label = Mboguete +pdfjs-views-manager-pages-status-export-selected-button-label = Eguerahauka poravopyre… pdfjs-views-manager-pages-status-save-as-button-label = Ñongatu pyahu… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -704,10 +723,22 @@ pdfjs-views-manager-status-warning-copy-label = Ndaikatúi oñembokuatia. Embopy pdfjs-views-manager-status-warning-delete-label = Ndaikatúi embogue. Embopyahu kuatiarogue ha eha’ã jey. pdfjs-views-manager-status-warning-save-label = Ndaikatúi eñongatu. Embopyahu kuatiarogue ha eha’ã jey. pdfjs-views-manager-status-undo-button-label = Mboguevi +pdfjs-views-manager-status-done-button-label = Oĩma pdfjs-views-manager-status-close-button = .title = Mboty pdfjs-views-manager-status-close-button-label = Mboty pdfjs-views-manager-paste-button-label = Mboja +pdfjs-views-manager-paste-button-before = + .title = Emboja togue peteĩha mboyve +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Emboja kuatiarogue { $page } rire +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = PYAHU +pdfjs-toggle-views-manager-button1 = + .title = Eñangareko kuotiarogue ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/he/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/he/viewer.ftl index cfd393b97d..9b70c86463 100644 --- a/packages/pdfjs-viewer/viewer/locale/he/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/he/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = תצוגה מקדימה של עמוד { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = בחירת עמוד { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = בחירת עמוד { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = עמוד { $page } מתוך { $total } ## Find panel button title and messages @@ -649,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = החלפת תצוגת סרגל צד pdfjs-toggle-views-manager-notification-button = .title = החלפת תצוגת סרגל צד (מסמך שמכיל תמונות ממוזערות/תוכן עניינים/קבצים מצורפים/שכבות) +pdfjs-toggle-views-manager-button1-label = ניהול עמודים pdfjs-toggle-views-manager-button-label = החלפת תצוגת סרגל צד pdfjs-views-manager-sidebar = .aria-label = סרגל צד @@ -658,8 +668,12 @@ pdfjs-views-manager-view-selector-button = .title = תצוגות pdfjs-views-manager-view-selector-button-label = תצוגות pdfjs-views-manager-pages-title = עמודים +pdfjs-views-manager-outlines-title1 = תוכן העניינים של המסמך + .title = הצגת תוכן העניינים של המסמך (יש ללחוץ לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים) pdfjs-views-manager-outlines-title = תוכן העניינים של המסמך pdfjs-views-manager-attachments-title = קבצים מצורפים +pdfjs-views-manager-layers-title1 = שכבות + .title = הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל) pdfjs-views-manager-layers-title = שכבות pdfjs-views-manager-pages-option-label = עמודים pdfjs-views-manager-outlines-option-label = תוכן העניינים של המסמך @@ -680,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = ניהול pdfjs-views-manager-pages-status-copy-button-label = העתקה pdfjs-views-manager-pages-status-cut-button-label = גזירה pdfjs-views-manager-pages-status-delete-button-label = מחיקה +pdfjs-views-manager-pages-status-export-selected-button-label = ייצוא הפריטים שנבחרו… pdfjs-views-manager-pages-status-save-as-button-label = שמירה בשם… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -709,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = לא ניתן היה להעתי pdfjs-views-manager-status-warning-delete-label = לא ניתן היה למחוק. נא לרענן את הדף ולנסות שוב. pdfjs-views-manager-status-warning-save-label = לא ניתן היה לשמור. נא לרענן את הדף ולנסות שוב. pdfjs-views-manager-status-undo-button-label = ביטול פעולה +pdfjs-views-manager-status-done-button-label = סיום pdfjs-views-manager-status-close-button = .title = סגירה pdfjs-views-manager-status-close-button-label = סגירה pdfjs-views-manager-paste-button-label = הדבקה +pdfjs-views-manager-paste-button-before = + .title = להדביק לפני העמוד הראשון +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = להדביק אחרי עמוד { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = חדש +pdfjs-toggle-views-manager-button1 = + .title = ניהול עמודים ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/hsb/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/hsb/viewer.ftl index b66aa72baf..b73567e2b2 100644 --- a/packages/pdfjs-viewer/viewer/locale/hsb/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/hsb/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Miniatura strony { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Stronu { $page } wubrać +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Stronu { $page } wubrać +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Strona { $page } z { $total } ## Find panel button title and messages @@ -657,15 +666,22 @@ pdfjs-toggle-views-manager-button = .title = Bóčnicu přepinać pdfjs-toggle-views-manager-notification-button = .title = Bóčnicu přepinać (dokument miniatury/rozrjad/přiwěški/woršty wobsahuje) +pdfjs-toggle-views-manager-button1-label = Strony rjadować pdfjs-toggle-views-manager-button-label = Bóčnicu přepinać pdfjs-views-manager-sidebar = .aria-label = Bóčnica +pdfjs-views-manager-sidebar-resizer = + .aria-label = Přiměrjenje wulkosće bóčnicy pdfjs-views-manager-view-selector-button = .title = Napohlady pdfjs-views-manager-view-selector-button-label = Napohlady pdfjs-views-manager-pages-title = Strony +pdfjs-views-manager-outlines-title1 = Dokumentowa struktura + .title = Dokumentowa struktura (klikńće dwójce, zo byšće wšě zapiski pokazał/schował) pdfjs-views-manager-outlines-title = Dokumentowa struktura pdfjs-views-manager-attachments-title = Přiwěški +pdfjs-views-manager-layers-title1 = Runiny + .title = Runiny (klikńće dwójce, zo byšće wšě runiny na standardny status wróćo stajił) pdfjs-views-manager-layers-title = Runiny pdfjs-views-manager-pages-option-label = Strony pdfjs-views-manager-outlines-option-label = Dokumentowa struktura @@ -688,6 +704,7 @@ pdfjs-views-manager-pages-status-action-button-label = Rjadować pdfjs-views-manager-pages-status-copy-button-label = Kopěrować pdfjs-views-manager-pages-status-cut-button-label = Wutřihać pdfjs-views-manager-pages-status-delete-button-label = Zhašeć +pdfjs-views-manager-pages-status-export-selected-button-label = Wubrane eksportować… pdfjs-views-manager-pages-status-save-as-button-label = Składować jako… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -723,10 +740,22 @@ pdfjs-views-manager-status-warning-copy-label = Njeda so kopěrować. Aktualizuj pdfjs-views-manager-status-warning-delete-label = Njeda so zhašeć. Aktualizujće stronu a spytajće hišće raz. pdfjs-views-manager-status-warning-save-label = Njeda so składować. Aktualizujće stronu a spytajće hišće raz. pdfjs-views-manager-status-undo-button-label = Cofnyć +pdfjs-views-manager-status-done-button-label = Dokónčeny pdfjs-views-manager-status-close-button = .title = Začinić pdfjs-views-manager-status-close-button-label = Začinić pdfjs-views-manager-paste-button-label = Zasadźić +pdfjs-views-manager-paste-button-before = + .title = Před prěnjej stronu zasadźić +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Za stronu { $page } zasadźić +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOWY +pdfjs-toggle-views-manager-button1 = + .title = Strony rjadować ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/hu/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/hu/viewer.ftl index e1536f92a4..cce862016d 100644 --- a/packages/pdfjs-viewer/viewer/locale/hu/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/hu/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = { $page }. oldal bélyegképe +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = { $page }. oldal kiválasztása +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = { $page }. oldal kiválasztása +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = { $page }. / { $total } oldal ## Find panel button title and messages @@ -645,9 +658,12 @@ pdfjs-toggle-views-manager-button = .title = Oldalsáv be/ki pdfjs-toggle-views-manager-notification-button = .title = Oldalsáv be/ki (a dokumentum bélyegképeket/vázlatot/mellékleteket/rétegeket tartalmaz) +pdfjs-toggle-views-manager-button1-label = Oldalak kezelése pdfjs-toggle-views-manager-button-label = Oldalsáv be/ki pdfjs-views-manager-sidebar = .aria-label = Oldalsáv +pdfjs-views-manager-sidebar-resizer = + .aria-label = Oldalsáv-átméretező pdfjs-views-manager-view-selector-button = .title = Nézetek pdfjs-views-manager-view-selector-button-label = Nézetek @@ -703,9 +719,19 @@ pdfjs-views-manager-status-warning-copy-label = Nem sikerült másolni. Frissít pdfjs-views-manager-status-warning-delete-label = Nem sikerült törölni. Frissítse az oldalt, és próbálja újra. pdfjs-views-manager-status-warning-save-label = Nem sikerült menteni. Frissítse az oldalt, és próbálja újra. pdfjs-views-manager-status-undo-button-label = Visszavonás +pdfjs-views-manager-status-done-button-label = Kész pdfjs-views-manager-status-close-button = .title = Bezárás pdfjs-views-manager-status-close-button-label = Bezárás +pdfjs-views-manager-paste-button-label = Beillesztés +pdfjs-views-manager-paste-button-before = + .title = Beillesztés az első oldal elé +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Beillesztés a(z) { $page }. oldal után +pdfjs-toggle-views-manager-button1 = + .title = Oldalak kezelése ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/hy-AM/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/hy-AM/viewer.ftl index 91bee63633..71aa8b3054 100644 --- a/packages/pdfjs-viewer/viewer/locale/hy-AM/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/hy-AM/viewer.ftl @@ -370,6 +370,17 @@ pdfjs-editor-add-saved-signature-button = pdfjs-free-text2 = .aria-label = Գրվածքի խմբագիր .default-content = Սկսեք մուտքագրել... +# Used to show how many comments are present in the pdf file. +# Variables: +# $count (Number) - the number of comments. +pdfjs-editor-comments-sidebar-title = + { $count -> + [one] Մեկնաբանություն + *[other] Մեկնաբանություններ + } +# Instructional copy to add a comment by selecting text or an annotations. +pdfjs-editor-comments-sidebar-no-comments1 = Տեսնո՞ւմ եք ինչ-որ ուշագրավ բան։ Գունանշեք այն և թողեք մեկնաբանություն։ +pdfjs-editor-comments-sidebar-no-comments-link = Իմանալ ավելին ## Alt-text dialog @@ -548,8 +559,8 @@ pdfjs-editor-add-signature-image-button = Պատկեր ## Tab panels pdfjs-editor-add-signature-type-input = - .aria-label = Մուտքագրեք ձեր ստորագրությունը - .placeholder = Մուտքագրեք ձեր ստորագրությունը + .aria-label = Մուտքագրել ստորագրություն + .placeholder = Մուտքագրել ստորագրություն pdfjs-editor-add-signature-draw-placeholder = Նկարեք ձեր ստորագրությունը pdfjs-editor-add-signature-draw-thickness-range-label = Հաստություն # Variables: @@ -586,6 +597,31 @@ pdfjs-editor-add-signature-cancel-button = Չեղարկել pdfjs-editor-add-signature-add-button = Ավելացնել pdfjs-editor-edit-signature-update-button = Թարմացնել +## Edit a comment dialog + +# No existing comment +pdfjs-editor-edit-comment-dialog-title-when-adding = Ավելացնել մեկնաբանություն +pdfjs-editor-edit-comment-dialog-save-button-when-adding = Ավելացնել +pdfjs-editor-edit-comment-dialog-text-input = + .placeholder = Մուտքագրեք այստեղ… +pdfjs-editor-edit-comment-dialog-cancel-button = Չեղարկել + +## Edit a comment button in the editor toolbar + +pdfjs-editor-add-comment-button = + .title = Ավելացնել մեկնաբանություն + +## The view manager is a sidebar displaying different views: +## - thumbnails; +## - outline; +## - attachments; +## - layers. +## The thumbnails view is used to edit the pdf: remove/insert pages, ... + +pdfjs-views-manager-add-file-button = + .title = Ավելացնել ֆայլ +pdfjs-views-manager-add-file-button-label = Ավելացնել ֆայլ + ## Main menu for adding/removing signatures pdfjs-editor-delete-signature-button1 = diff --git a/packages/pdfjs-viewer/viewer/locale/ia/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/ia/viewer.ftl index f5bb958af8..5c112847d5 100644 --- a/packages/pdfjs-viewer/viewer/locale/ia/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/ia/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Vignette del pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Seliger pagina { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Seliger pagina { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Pagina { $page } de { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Monstrar/celar le barra lateral pdfjs-toggle-views-manager-notification-button = .title = Monstrar/celar le barra lateral (le documento contine miniaturas/structura/attachamentos/stratos) +pdfjs-toggle-views-manager-button1-label = Gerer paginas pdfjs-toggle-views-manager-button-label = Monstrar/celar le barra lateral pdfjs-views-manager-sidebar = .aria-label = Barra lateral +pdfjs-views-manager-sidebar-resizer = + .aria-label = Saltar al declaration pdfjs-views-manager-view-selector-button = .title = Vistas pdfjs-views-manager-view-selector-button-label = Vistas pdfjs-views-manager-pages-title = Paginas +pdfjs-views-manager-outlines-title1 = Structura de documento + .title = Structura de documento (clicca-duplemente pro expander/collaber tote elementos) pdfjs-views-manager-outlines-title = Schema del documento pdfjs-views-manager-attachments-title = Annexos +pdfjs-views-manager-layers-title1 = Stratos + .title = Stratos (clicca-duplemente pro reinitialisar tote le stratos al stato predefinite) pdfjs-views-manager-layers-title = Stratos pdfjs-views-manager-pages-option-label = Paginas pdfjs-views-manager-outlines-option-label = Schema del documento @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Gerer pdfjs-views-manager-pages-status-copy-button-label = Copiar pdfjs-views-manager-pages-status-cut-button-label = Secar pdfjs-views-manager-pages-status-delete-button-label = Deler +pdfjs-views-manager-pages-status-export-selected-button-label = Exportar seligite… pdfjs-views-manager-pages-status-save-as-button-label = Salvar como… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Impossibile copiar. Refresca le pdfjs-views-manager-status-warning-delete-label = Impossibile deler. Refresca le pagina e retenta. pdfjs-views-manager-status-warning-save-label = Impossibile salvar. Refresca le pagina e retenta. pdfjs-views-manager-status-undo-button-label = Disfacer +pdfjs-views-manager-status-done-button-label = Facite pdfjs-views-manager-status-close-button = .title = Clauder pdfjs-views-manager-status-close-button-label = Clauder pdfjs-views-manager-paste-button-label = Collar +pdfjs-views-manager-paste-button-before = + .title = Collar ante le prime pagina +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Colla post pagina { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOVA +pdfjs-toggle-views-manager-button1 = + .title = Gerer paginas ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/is/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/is/viewer.ftl index 11b6d1b450..2f27e672f7 100644 --- a/packages/pdfjs-viewer/viewer/locale/is/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/is/viewer.ftl @@ -102,7 +102,7 @@ pdfjs-spread-even-button-label = Jafnatöludreifing pdfjs-document-properties-button = .title = Eiginleikar skjals… pdfjs-document-properties-button-label = Eiginleikar skjals… -pdfjs-document-properties-file-name = Skráarnafn: +pdfjs-document-properties-file-name = Skráarheiti: pdfjs-document-properties-file-size = Skrárstærð: # Variables: # $kb (Number) - the PDF file size in kilobytes diff --git a/packages/pdfjs-viewer/viewer/locale/it/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/it/viewer.ftl index d4b5663764..d15a18573b 100644 --- a/packages/pdfjs-viewer/viewer/locale/it/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/it/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Miniatura della pagina { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Seleziona pagina { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Seleziona pagina { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Pagina { $page } di { $total } ## Find panel button title and messages @@ -649,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Attiva/disattiva barra laterale pdfjs-toggle-views-manager-notification-button = .title = Attiva/disattiva barra laterale (il documento contiene miniature, struttura, allegati, livelli) +pdfjs-toggle-views-manager-button1-label = Gestisci pagine pdfjs-toggle-views-manager-button-label = Attiva/disattiva barra laterale pdfjs-views-manager-sidebar = .aria-label = Barra laterale @@ -658,8 +668,12 @@ pdfjs-views-manager-view-selector-button = .title = Viste pdfjs-views-manager-view-selector-button-label = Viste pdfjs-views-manager-pages-title = Pagine +pdfjs-views-manager-outlines-title1 = Struttura del documento + .title = Struttura del documento (doppio clic per espandere/comprimere tutti gli elementi) pdfjs-views-manager-outlines-title = Struttura del documento pdfjs-views-manager-attachments-title = Allegati +pdfjs-views-manager-layers-title1 = Livelli + .title = Livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito) pdfjs-views-manager-layers-title = Livelli pdfjs-views-manager-pages-option-label = Pagine pdfjs-views-manager-outlines-option-label = Struttura del documento @@ -680,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Gestisci pdfjs-views-manager-pages-status-copy-button-label = Copia pdfjs-views-manager-pages-status-cut-button-label = Taglia pdfjs-views-manager-pages-status-delete-button-label = Elimina +pdfjs-views-manager-pages-status-export-selected-button-label = Esporta selezionati… pdfjs-views-manager-pages-status-save-as-button-label = Salva con nome… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -709,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Copia non riuscita. Ricarica la pdfjs-views-manager-status-warning-delete-label = Eliminazione non riuscita. Ricarica la pagina e riprova. pdfjs-views-manager-status-warning-save-label = Salvataggio non riuscito. Ricarica la pagina e prova di nuovo. pdfjs-views-manager-status-undo-button-label = Annulla +pdfjs-views-manager-status-done-button-label = Fatto pdfjs-views-manager-status-close-button = .title = Chiudi pdfjs-views-manager-status-close-button-label = Chiudi pdfjs-views-manager-paste-button-label = Incolla +pdfjs-views-manager-paste-button-before = + .title = Incolla dopo la prima pagina +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Incolla dopo pagina { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOVITÀ +pdfjs-toggle-views-manager-button1 = + .title = Gestisci pagine ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/ja/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/ja/viewer.ftl index 23abbd5cc2..8d92c15977 100644 --- a/packages/pdfjs-viewer/viewer/locale/ja/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/ja/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = { $page } ページの縮小版 +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = { $page } ページを選択します +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = { $page } ページを選択します +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = { $page } / { $total } ページ ## Find panel button title and messages @@ -629,9 +642,12 @@ pdfjs-toggle-views-manager-button = .title = サイドバーを切り替えます pdfjs-toggle-views-manager-notification-button = .title = サイドバーを切り替えます (文書に含まれるサムネイル、アウトライン、添付データ、レイヤー) +pdfjs-toggle-views-manager-button1-label = ページを管理 pdfjs-toggle-views-manager-button-label = サイドバーを切り替え pdfjs-views-manager-sidebar = .aria-label = サイドバー +pdfjs-views-manager-sidebar-resizer = + .aria-label = サイドバーの幅変更 pdfjs-views-manager-view-selector-button = .title = ビュー pdfjs-views-manager-view-selector-button-label = ビュー @@ -674,6 +690,9 @@ pdfjs-views-manager-status-undo-button-label = 元に戻す pdfjs-views-manager-status-close-button = .title = 閉じる pdfjs-views-manager-status-close-button-label = 閉じる +pdfjs-views-manager-paste-button-label = 貼り付け +pdfjs-toggle-views-manager-button1 = + .title = ページを管理 ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/ka/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/ka/viewer.ftl index 66bdeae5a9..e31d8dbde1 100644 --- a/packages/pdfjs-viewer/viewer/locale/ka/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/ka/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = გვერდის შეთვალიერება { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = მონიშნეთ { $page } გვერდი +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = მონიშნეთ { $page } გვერდი +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = გვერდი { $page }, სულ { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = გვერდითა ზოლის გამოჩენა/დამალვა pdfjs-toggle-views-manager-notification-button = .title = გვერდითი ზოლის გამოჩენა (შეიცავს შესათვალიერებელს/სარჩევს/დანართს) +pdfjs-toggle-views-manager-button1-label = გვერდების მართვა pdfjs-toggle-views-manager-button-label = გვერდითა ზოლის გამოჩენა/დამალვა pdfjs-views-manager-sidebar = .aria-label = გვერდითი ზოლი +pdfjs-views-manager-sidebar-resizer = + .aria-label = გვერდითი ზოლის ზომაცვლა pdfjs-views-manager-view-selector-button = .title = ხედები pdfjs-views-manager-view-selector-button-label = ხედები pdfjs-views-manager-pages-title = გვერდები +pdfjs-views-manager-outlines-title1 = დოკუმენტის სარჩევი + .title = დოკუმენტის სარჩევი (ორმაგი წკაპით ყველა ჩანაწერის ჩამოშლა/აკეცვა) pdfjs-views-manager-outlines-title = დოკუმენტის სარჩევი pdfjs-views-manager-attachments-title = დანართები +pdfjs-views-manager-layers-title1 = შრეები + .title = შრეები (ორმაგი წკაპით ყველა შრის ნაგულისხმევზე დაბრუნება) pdfjs-views-manager-layers-title = შრეები pdfjs-views-manager-pages-option-label = გვერდები pdfjs-views-manager-outlines-option-label = დოკუმენტის სარჩევი @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = მართვა pdfjs-views-manager-pages-status-copy-button-label = ასლი pdfjs-views-manager-pages-status-cut-button-label = ამოჭრა pdfjs-views-manager-pages-status-delete-button-label = წაშლა +pdfjs-views-manager-pages-status-export-selected-button-label = შერჩეულის გატანა… pdfjs-views-manager-pages-status-save-as-button-label = შენახვა როგორც… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = ასლი ვერ აიღ pdfjs-views-manager-status-warning-delete-label = ვერ წაიშალა. განაახლეთ გვერდი და კვლავ სცადეთ. pdfjs-views-manager-status-warning-save-label = ვერ შეინახა. განაახლეთ გვერდი და კვლავ სცადეთ. pdfjs-views-manager-status-undo-button-label = დაბრუნება +pdfjs-views-manager-status-done-button-label = მზადაა pdfjs-views-manager-status-close-button = .title = დახურვა pdfjs-views-manager-status-close-button-label = დახურვა +pdfjs-views-manager-paste-button-label = ჩასმა +pdfjs-views-manager-paste-button-before = + .title = ჩასმა პირველი გვერდის წინ +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = ჩასმა { $page } გვერდის შემდეგ +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = ᲡᲘᲐᲮᲚᲔ +pdfjs-toggle-views-manager-button1 = + .title = გვერდების მართვა ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/kk/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/kk/viewer.ftl index 7ee7cc2744..674e702f4d 100644 --- a/packages/pdfjs-viewer/viewer/locale/kk/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/kk/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = { $page } парағы үшін кіші көрінісі # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = { $page } бетін таңдау +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = { $page } бетін таңдау +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Бет { $page }/{ $total } ## Find panel button title and messages @@ -649,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Бүйір панелін көрсету/жасыру pdfjs-toggle-views-manager-notification-button = .title = Бүйір панелін көрсету/жасыру (құжатта кіші көріністер/құрылымы/салынымдар/қабаттар бар) +pdfjs-toggle-views-manager-button1-label = Беттерді басқару pdfjs-toggle-views-manager-button-label = Бүйір панелін көрсету/жасыру pdfjs-views-manager-sidebar = .aria-label = Бүйір панелі @@ -709,10 +719,19 @@ pdfjs-views-manager-status-warning-copy-label = Көшіру мүмкін бол pdfjs-views-manager-status-warning-delete-label = Өшіру мүмкін болмады. Бетті жаңартып, қайталап көріңіз. pdfjs-views-manager-status-warning-save-label = Сақтау мүмкін болмады. Бетті жаңартып, қайталап көріңіз. pdfjs-views-manager-status-undo-button-label = Болдырмау +pdfjs-views-manager-status-done-button-label = Дайын pdfjs-views-manager-status-close-button = .title = Жабу pdfjs-views-manager-status-close-button-label = Жабу pdfjs-views-manager-paste-button-label = Кірістіру +pdfjs-views-manager-paste-button-before = + .title = Бірінші беттің алдына кірістіру +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = { $page } бетінен кейін кірістіру +pdfjs-toggle-views-manager-button1 = + .title = Беттерді басқару ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/ko/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/ko/viewer.ftl index 0b417e7ac4..6fcd10a458 100644 --- a/packages/pdfjs-viewer/viewer/locale/ko/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/ko/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = { $page } 페이지 미리보기 # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = { $page } 페이지 선택 +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = { $page } 페이지 선택 +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = { $page } / { $total } 페이지 ## Find panel button title and messages @@ -633,6 +642,7 @@ pdfjs-toggle-views-manager-button = .title = 사이드바 표시/숨기기 pdfjs-toggle-views-manager-notification-button = .title = 사이드바 표시/숨기기 (문서에 미리보기/아웃라인/첨부파일/레이어 포함됨) +pdfjs-toggle-views-manager-button1-label = 페이지 관리 pdfjs-toggle-views-manager-button-label = 사이드바 표시/숨기기 pdfjs-views-manager-sidebar = .aria-label = 사이드바 @@ -642,8 +652,12 @@ pdfjs-views-manager-view-selector-button = .title = 보기 pdfjs-views-manager-view-selector-button-label = 보기 pdfjs-views-manager-pages-title = 페이지 +pdfjs-views-manager-outlines-title1 = 문서 아웃라인 + .title = 문서 아웃라인 (더블 클릭해서 모든 항목 펼치기/접기) pdfjs-views-manager-outlines-title = 문서 아웃라인 pdfjs-views-manager-attachments-title = 첨부파일 +pdfjs-views-manager-layers-title1 = 레이어 + .title = 레이어 (더블 클릭해서 모든 레이어를 기본 상태로 재설정) pdfjs-views-manager-layers-title = 레이어 pdfjs-views-manager-pages-option-label = 페이지 pdfjs-views-manager-outlines-option-label = 문서 아웃라인 @@ -660,6 +674,7 @@ pdfjs-views-manager-pages-status-action-button-label = 관리 pdfjs-views-manager-pages-status-copy-button-label = 복사 pdfjs-views-manager-pages-status-cut-button-label = 잘라내기 pdfjs-views-manager-pages-status-delete-button-label = 삭제 +pdfjs-views-manager-pages-status-export-selected-button-label = 선택한 항목 내보내기… pdfjs-views-manager-pages-status-save-as-button-label = 다른 이름으로 저장… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -677,10 +692,22 @@ pdfjs-views-manager-status-warning-copy-label = 복사할 수 없습니다. 페 pdfjs-views-manager-status-warning-delete-label = 삭제할 수 없습니다. 페이지를 새로 고침하고 다시 시도하세요. pdfjs-views-manager-status-warning-save-label = 저장할 수 없습니다. 페이지를 새로 고침하고 다시 시도하세요. pdfjs-views-manager-status-undo-button-label = 실행 취소 +pdfjs-views-manager-status-done-button-label = 완료 pdfjs-views-manager-status-close-button = .title = 닫기 pdfjs-views-manager-status-close-button-label = 닫기 pdfjs-views-manager-paste-button-label = 붙여넣기 +pdfjs-views-manager-paste-button-before = + .title = 첫 페이지 앞에 붙여넣기 +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = { $page } 페이지 뒤에 붙여넣기 +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = 신규 +pdfjs-toggle-views-manager-button1 = + .title = 페이지 관리 ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/locale.json b/packages/pdfjs-viewer/viewer/locale/locale.json index 24ec55abe5..16ae62e3a9 100644 --- a/packages/pdfjs-viewer/viewer/locale/locale.json +++ b/packages/pdfjs-viewer/viewer/locale/locale.json @@ -1 +1 @@ -{"ach":"ach/viewer.ftl","af":"af/viewer.ftl","an":"an/viewer.ftl","ar":"ar/viewer.ftl","ast":"ast/viewer.ftl","az":"az/viewer.ftl","be":"be/viewer.ftl","bg":"bg/viewer.ftl","bn":"bn/viewer.ftl","bo":"bo/viewer.ftl","br":"br/viewer.ftl","brx":"brx/viewer.ftl","bs":"bs/viewer.ftl","ca":"ca/viewer.ftl","cak":"cak/viewer.ftl","ckb":"ckb/viewer.ftl","cs":"cs/viewer.ftl","cy":"cy/viewer.ftl","da":"da/viewer.ftl","de":"de/viewer.ftl","dsb":"dsb/viewer.ftl","el":"el/viewer.ftl","en-ca":"en-CA/viewer.ftl","en-gb":"en-GB/viewer.ftl","en-us":"en-US/viewer.ftl","eo":"eo/viewer.ftl","es-ar":"es-AR/viewer.ftl","es-cl":"es-CL/viewer.ftl","es-es":"es-ES/viewer.ftl","es-mx":"es-MX/viewer.ftl","et":"et/viewer.ftl","eu":"eu/viewer.ftl","fa":"fa/viewer.ftl","ff":"ff/viewer.ftl","fi":"fi/viewer.ftl","fr":"fr/viewer.ftl","fur":"fur/viewer.ftl","fy-nl":"fy-NL/viewer.ftl","ga-ie":"ga-IE/viewer.ftl","gd":"gd/viewer.ftl","gl":"gl/viewer.ftl","gn":"gn/viewer.ftl","gu-in":"gu-IN/viewer.ftl","he":"he/viewer.ftl","hi-in":"hi-IN/viewer.ftl","hr":"hr/viewer.ftl","hsb":"hsb/viewer.ftl","hu":"hu/viewer.ftl","hy-am":"hy-AM/viewer.ftl","hye":"hye/viewer.ftl","ia":"ia/viewer.ftl","id":"id/viewer.ftl","is":"is/viewer.ftl","it":"it/viewer.ftl","ja":"ja/viewer.ftl","ka":"ka/viewer.ftl","kab":"kab/viewer.ftl","kk":"kk/viewer.ftl","km":"km/viewer.ftl","kn":"kn/viewer.ftl","ko":"ko/viewer.ftl","lij":"lij/viewer.ftl","lo":"lo/viewer.ftl","lt":"lt/viewer.ftl","ltg":"ltg/viewer.ftl","lv":"lv/viewer.ftl","meh":"meh/viewer.ftl","mk":"mk/viewer.ftl","ml":"ml/viewer.ftl","mr":"mr/viewer.ftl","ms":"ms/viewer.ftl","my":"my/viewer.ftl","nb-no":"nb-NO/viewer.ftl","ne-np":"ne-NP/viewer.ftl","nl":"nl/viewer.ftl","nn-no":"nn-NO/viewer.ftl","oc":"oc/viewer.ftl","pa-in":"pa-IN/viewer.ftl","pl":"pl/viewer.ftl","pt-br":"pt-BR/viewer.ftl","pt-pt":"pt-PT/viewer.ftl","rm":"rm/viewer.ftl","ro":"ro/viewer.ftl","ru":"ru/viewer.ftl","sat":"sat/viewer.ftl","sc":"sc/viewer.ftl","scn":"scn/viewer.ftl","sco":"sco/viewer.ftl","si":"si/viewer.ftl","sk":"sk/viewer.ftl","skr":"skr/viewer.ftl","sl":"sl/viewer.ftl","son":"son/viewer.ftl","sq":"sq/viewer.ftl","sr":"sr/viewer.ftl","sv-se":"sv-SE/viewer.ftl","szl":"szl/viewer.ftl","ta":"ta/viewer.ftl","te":"te/viewer.ftl","tg":"tg/viewer.ftl","th":"th/viewer.ftl","tl":"tl/viewer.ftl","tr":"tr/viewer.ftl","trs":"trs/viewer.ftl","uk":"uk/viewer.ftl","ur":"ur/viewer.ftl","uz":"uz/viewer.ftl","vi":"vi/viewer.ftl","wo":"wo/viewer.ftl","xh":"xh/viewer.ftl","zh-cn":"zh-CN/viewer.ftl","zh-tw":"zh-TW/viewer.ftl"} \ No newline at end of file +{"ach":"ach/viewer.ftl","af":"af/viewer.ftl","an":"an/viewer.ftl","ar":"ar/viewer.ftl","ast":"ast/viewer.ftl","az":"az/viewer.ftl","be":"be/viewer.ftl","bg":"bg/viewer.ftl","bn":"bn/viewer.ftl","bo":"bo/viewer.ftl","bqi":"bqi/viewer.ftl","br":"br/viewer.ftl","brx":"brx/viewer.ftl","bs":"bs/viewer.ftl","ca":"ca/viewer.ftl","cak":"cak/viewer.ftl","ckb":"ckb/viewer.ftl","cs":"cs/viewer.ftl","cy":"cy/viewer.ftl","da":"da/viewer.ftl","de":"de/viewer.ftl","dsb":"dsb/viewer.ftl","el":"el/viewer.ftl","en-ca":"en-CA/viewer.ftl","en-gb":"en-GB/viewer.ftl","en-us":"en-US/viewer.ftl","eo":"eo/viewer.ftl","es-ar":"es-AR/viewer.ftl","es-cl":"es-CL/viewer.ftl","es-es":"es-ES/viewer.ftl","es-mx":"es-MX/viewer.ftl","et":"et/viewer.ftl","eu":"eu/viewer.ftl","fa":"fa/viewer.ftl","ff":"ff/viewer.ftl","fi":"fi/viewer.ftl","fr":"fr/viewer.ftl","fur":"fur/viewer.ftl","fy-nl":"fy-NL/viewer.ftl","ga-ie":"ga-IE/viewer.ftl","gd":"gd/viewer.ftl","gl":"gl/viewer.ftl","gn":"gn/viewer.ftl","gu-in":"gu-IN/viewer.ftl","he":"he/viewer.ftl","hi-in":"hi-IN/viewer.ftl","hr":"hr/viewer.ftl","hsb":"hsb/viewer.ftl","hu":"hu/viewer.ftl","hy-am":"hy-AM/viewer.ftl","hye":"hye/viewer.ftl","ia":"ia/viewer.ftl","id":"id/viewer.ftl","is":"is/viewer.ftl","it":"it/viewer.ftl","ja":"ja/viewer.ftl","ka":"ka/viewer.ftl","kab":"kab/viewer.ftl","kk":"kk/viewer.ftl","km":"km/viewer.ftl","kn":"kn/viewer.ftl","ko":"ko/viewer.ftl","lij":"lij/viewer.ftl","lo":"lo/viewer.ftl","lt":"lt/viewer.ftl","ltg":"ltg/viewer.ftl","lv":"lv/viewer.ftl","meh":"meh/viewer.ftl","mk":"mk/viewer.ftl","ml":"ml/viewer.ftl","mr":"mr/viewer.ftl","ms":"ms/viewer.ftl","my":"my/viewer.ftl","nb-no":"nb-NO/viewer.ftl","ne-np":"ne-NP/viewer.ftl","nl":"nl/viewer.ftl","nn-no":"nn-NO/viewer.ftl","oc":"oc/viewer.ftl","pa-in":"pa-IN/viewer.ftl","pl":"pl/viewer.ftl","pt-br":"pt-BR/viewer.ftl","pt-pt":"pt-PT/viewer.ftl","rm":"rm/viewer.ftl","ro":"ro/viewer.ftl","ru":"ru/viewer.ftl","sat":"sat/viewer.ftl","sc":"sc/viewer.ftl","scn":"scn/viewer.ftl","sco":"sco/viewer.ftl","si":"si/viewer.ftl","sk":"sk/viewer.ftl","skr":"skr/viewer.ftl","sl":"sl/viewer.ftl","son":"son/viewer.ftl","sq":"sq/viewer.ftl","sr":"sr/viewer.ftl","sv-se":"sv-SE/viewer.ftl","szl":"szl/viewer.ftl","ta":"ta/viewer.ftl","te":"te/viewer.ftl","tg":"tg/viewer.ftl","th":"th/viewer.ftl","tl":"tl/viewer.ftl","tr":"tr/viewer.ftl","trs":"trs/viewer.ftl","uk":"uk/viewer.ftl","ur":"ur/viewer.ftl","uz":"uz/viewer.ftl","vi":"vi/viewer.ftl","wo":"wo/viewer.ftl","xh":"xh/viewer.ftl","zh-cn":"zh-CN/viewer.ftl","zh-tw":"zh-TW/viewer.ftl"} \ No newline at end of file diff --git a/packages/pdfjs-viewer/viewer/locale/nb-NO/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/nb-NO/viewer.ftl index 5513adfead..4ffd3a99bb 100644 --- a/packages/pdfjs-viewer/viewer/locale/nb-NO/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/nb-NO/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatyrbilde av side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Velg side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Velg side { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Side { $page } av { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Vis/skjul sidestolpe pdfjs-toggle-views-manager-notification-button = .title = Vis/skjul sidestolpe (dokumentet inneholder miniatyrbilder/disposisjon/vedlegg/lag) +pdfjs-toggle-views-manager-button1-label = Behandle sider pdfjs-toggle-views-manager-button-label = Vis/skjul sidestolpe pdfjs-views-manager-sidebar = .aria-label = Sidestolpe +pdfjs-views-manager-sidebar-resizer = + .aria-label = Endre størrelse på sidestolpen pdfjs-views-manager-view-selector-button = .title = Visninger pdfjs-views-manager-view-selector-button-label = Visninger pdfjs-views-manager-pages-title = Sider +pdfjs-views-manager-outlines-title1 = Dokumentoversikt + .title = Dokumentoversikt (dobbeltklikk for å utvide/skjule alle elementer) pdfjs-views-manager-outlines-title = Dokumentdisposisjon pdfjs-views-manager-attachments-title = Vedlegg +pdfjs-views-manager-layers-title1 = Lag + .title = Lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) pdfjs-views-manager-layers-title = Lag pdfjs-views-manager-pages-option-label = Sider pdfjs-views-manager-outlines-option-label = Dokumentdisposisjon @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Behandle pdfjs-views-manager-pages-status-copy-button-label = Kopier pdfjs-views-manager-pages-status-cut-button-label = Klipp ut pdfjs-views-manager-pages-status-delete-button-label = Slett +pdfjs-views-manager-pages-status-export-selected-button-label = Eksporter valgte… pdfjs-views-manager-pages-status-save-as-button-label = Lagre som … # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Kunne ikke kopiere. Oppdater sid pdfjs-views-manager-status-warning-delete-label = Kunne ikke slette. Oppdater siden og prøv på nytt. pdfjs-views-manager-status-warning-save-label = Kunne ikke lagre. Oppdater siden og prøv på nytt. pdfjs-views-manager-status-undo-button-label = Angre +pdfjs-views-manager-status-done-button-label = Ferdig pdfjs-views-manager-status-close-button = .title = Lukk pdfjs-views-manager-status-close-button-label = Lukk +pdfjs-views-manager-paste-button-label = Lim inn +pdfjs-views-manager-paste-button-before = + .title = Lim inn før første side +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Lim inn etter side { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NY +pdfjs-toggle-views-manager-button1 = + .title = Behandle sider ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/nl/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/nl/viewer.ftl index b0f6f49aee..ff32550b9c 100644 --- a/packages/pdfjs-viewer/viewer/locale/nl/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/nl/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Miniatuur van pagina { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Pagina { $page } selecteren +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Pagina { $page } selecteren +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Pagina { $page } van { $total } ## Find panel button title and messages @@ -649,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Zijbalk in-/uitschakelen pdfjs-toggle-views-manager-notification-button = .title = Zijbalk in-/uitschakelen (document bevat miniaturen/overzicht/bijlagen/lagen) +pdfjs-toggle-views-manager-button1-label = Pagina’s beheren pdfjs-toggle-views-manager-button-label = Zijbalk in-/uitschakelen pdfjs-views-manager-sidebar = .aria-label = Zijbalk @@ -658,8 +668,12 @@ pdfjs-views-manager-view-selector-button = .title = Weergaven pdfjs-views-manager-view-selector-button-label = Weergaven pdfjs-views-manager-pages-title = Pagina’s +pdfjs-views-manager-outlines-title1 = Documentoverzicht + .title = Documentoverzicht (dubbelklik om alle items uit te vouwen/samen te vouwen) pdfjs-views-manager-outlines-title = Documentoverzicht pdfjs-views-manager-attachments-title = Bijlagen +pdfjs-views-manager-layers-title1 = Lagen + .title = Lagen (dubbelklik om alle lagen naar de standaardstatus terug te zetten) pdfjs-views-manager-layers-title = Lagen pdfjs-views-manager-pages-option-label = Pagina’s pdfjs-views-manager-outlines-option-label = Documentoverzicht @@ -680,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Beheren pdfjs-views-manager-pages-status-copy-button-label = Kopiëren pdfjs-views-manager-pages-status-cut-button-label = Knippen pdfjs-views-manager-pages-status-delete-button-label = Verwijderen +pdfjs-views-manager-pages-status-export-selected-button-label = Geselecteerde exporteren… pdfjs-views-manager-pages-status-save-as-button-label = Opslaan als… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -709,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Kan niet kopiëren. Vernieuw de pdfjs-views-manager-status-warning-delete-label = Kan niet verwijderen. Vernieuw de pagina en probeer het opnieuw. pdfjs-views-manager-status-warning-save-label = Kan niet opslaan. Vernieuw de pagina en probeer het opnieuw. pdfjs-views-manager-status-undo-button-label = Ongedaan maken +pdfjs-views-manager-status-done-button-label = Gereed pdfjs-views-manager-status-close-button = .title = Sluiten pdfjs-views-manager-status-close-button-label = Sluiten pdfjs-views-manager-paste-button-label = Plakken +pdfjs-views-manager-paste-button-before = + .title = Plakken voor de eerste pagina +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Plakken na pagina { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NIEUW +pdfjs-toggle-views-manager-button1 = + .title = Pagina’s beheren ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/nn-NO/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/nn-NO/viewer.ftl index 8f28a346e4..233e0c9c40 100644 --- a/packages/pdfjs-viewer/viewer/locale/nn-NO/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/nn-NO/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatyrbilde av side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Vel side { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Vel side { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Side { $page } av { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Vis/skjul sidestolpe pdfjs-toggle-views-manager-notification-button = .title = Vis/skjul sidestolpe (dokumentet inneheld miniatyrbilde/disposisjon/vedlegg/lag) +pdfjs-toggle-views-manager-button1-label = Handsam sider pdfjs-toggle-views-manager-button-label = Vis/skjul sidestolpe pdfjs-views-manager-sidebar = .aria-label = Sidestolpe +pdfjs-views-manager-sidebar-resizer = + .aria-label = Endre storleiken på sidestolpen pdfjs-views-manager-view-selector-button = .title = Vis pdfjs-views-manager-view-selector-button-label = Visningar pdfjs-views-manager-pages-title = Sider +pdfjs-views-manager-outlines-title1 = Dokumentoversikt + .title = Dokumentoversikt (dobbelklikk for å utvide/skjule alle element) pdfjs-views-manager-outlines-title = Dokumentdisposisjon pdfjs-views-manager-attachments-title = Vedlegg +pdfjs-views-manager-layers-title1 = Lag + .title = Lag (dobbelklikk for å tilbakestille alle lag til standardtilstand) pdfjs-views-manager-layers-title = Lag pdfjs-views-manager-pages-option-label = Sider pdfjs-views-manager-outlines-option-label = Dokumentdisposisjon @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Handsam pdfjs-views-manager-pages-status-copy-button-label = Kopier pdfjs-views-manager-pages-status-cut-button-label = Klipp ut pdfjs-views-manager-pages-status-delete-button-label = Slett +pdfjs-views-manager-pages-status-export-selected-button-label = Eksporter valde… pdfjs-views-manager-pages-status-save-as-button-label = Lagre som… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Klarte ikkje å kopiere. Oppdate pdfjs-views-manager-status-warning-delete-label = Klarte ikkje å slette. Oppdater sida og prøv på nytt. pdfjs-views-manager-status-warning-save-label = Klarte ikkje å lagre. Oppdater sida og prøv på nytt. pdfjs-views-manager-status-undo-button-label = Angre +pdfjs-views-manager-status-done-button-label = Ferdig pdfjs-views-manager-status-close-button = .title = Lat att pdfjs-views-manager-status-close-button-label = Lat att pdfjs-views-manager-paste-button-label = Lim inn +pdfjs-views-manager-paste-button-before = + .title = Lim inn før første side +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Lim inn etter side { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NY +pdfjs-toggle-views-manager-button1 = + .title = Handsam sider ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/oc/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/oc/viewer.ftl index eb18c13694..3182e6317e 100644 --- a/packages/pdfjs-viewer/viewer/locale/oc/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/oc/viewer.ftl @@ -356,6 +356,7 @@ pdfjs-editor-highlight-show-all-button = ## New alt-text dialog ## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. +pdfjs-editor-new-alt-text-not-now-button = Pas ara pdfjs-editor-new-alt-text-error-close-button = Tampar ## Image alt-text settings diff --git a/packages/pdfjs-viewer/viewer/locale/pa-IN/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/pa-IN/viewer.ftl index b2c3b1a9c5..d1282649c1 100644 --- a/packages/pdfjs-viewer/viewer/locale/pa-IN/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/pa-IN/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = { $page } ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = { $page } ਸਫ਼ੇ ਨੂੰ ਚੁਣੋ +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = { $page } ਸਫ਼ੇ ਨੂੰ ਚੁਣੋ +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = { $total } ਵਿੱਚੋਂ { $page } ਸਫ਼ਾ ## Find panel button title and messages @@ -645,9 +658,12 @@ pdfjs-toggle-views-manager-button = .title = ਬਾਹੀ ਬਦਲੋ pdfjs-toggle-views-manager-notification-button = .title = ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਥੰਮਨੇਲ/ਆਨਲਾਈਨਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ) +pdfjs-toggle-views-manager-button1-label = ਸਫ਼ਿਆਂ ਦਾ ਇੰਤਜ਼ਾਮ pdfjs-toggle-views-manager-button-label = ਬਾਹੀ ਨੂੰ ਬਦਲੋ pdfjs-views-manager-sidebar = .aria-label = ਬਾਹੀ +pdfjs-views-manager-sidebar-resizer = + .aria-label = ਬਾਹੀ ਦਾ ਆਕਾਰ-ਬਦਲ pdfjs-views-manager-view-selector-button = .title = ਵੇਖੋ pdfjs-views-manager-view-selector-button-label = ਵੇਖੋ @@ -703,9 +719,19 @@ pdfjs-views-manager-status-warning-copy-label = ਕਾਪੀ ਨਹੀਂ ਕੀ pdfjs-views-manager-status-warning-delete-label = ਹਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। ਸਫ਼ੇ ਨੂੰ ਤਾਜ਼ਾ ਕਰਕੇ ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ। pdfjs-views-manager-status-warning-save-label = ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। ਸਫ਼ੇ ਨੂੰ ਤਾਜ਼ਾ ਕਰਕੇ ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ। pdfjs-views-manager-status-undo-button-label = ਵਾਪਸ +pdfjs-views-manager-status-done-button-label = ਮੁਕੰਮਲ pdfjs-views-manager-status-close-button = .title = ਬੰਦ ਕਰੋ pdfjs-views-manager-status-close-button-label = ਬੰਦ ਕਰੋ +pdfjs-views-manager-paste-button-label = ਚੇਪੋ +pdfjs-views-manager-paste-button-before = + .title = ਪਹਿਲੇ ਸਫ਼ੇ ਦੇ ਬਾਅਦ ਚੇਪੋ +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = { $page } ਸਫ਼ੇ ਦੇ ਬਾਅਦ ਚੇਪੋ +pdfjs-toggle-views-manager-button1 = + .title = ਸਫ਼ਿਆਂ ਦਾ ਇੰਤਜ਼ਾਮ ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/pl/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/pl/viewer.ftl index 506886fe9a..7adff64b71 100644 --- a/packages/pdfjs-viewer/viewer/locale/pl/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/pl/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura { $page }. strony +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Zaznacz { $page }. stronę +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Zaznacz { $page }. stronę +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = { $page }. strona z { $total } ## Find panel button title and messages @@ -648,9 +661,12 @@ pdfjs-toggle-views-manager-button = .title = Przełącz panel boczny pdfjs-toggle-views-manager-notification-button = .title = Przełącz panel boczny (dokument zawiera miniatury/konspekt/załączniki/warstwy) +pdfjs-toggle-views-manager-button1-label = Zarządzaj stronami pdfjs-toggle-views-manager-button-label = Przełącz panel boczny pdfjs-views-manager-sidebar = .aria-label = Panel boczny +pdfjs-views-manager-sidebar-resizer = + .aria-label = Zmiana rozmiaru panelu bocznego pdfjs-views-manager-view-selector-button = .title = Widoki pdfjs-views-manager-view-selector-button-label = Widoki @@ -710,9 +726,19 @@ pdfjs-views-manager-status-warning-copy-label = Nie udało się skopiować. Odś pdfjs-views-manager-status-warning-delete-label = Nie udało się usunąć. Odśwież stronę i spróbuj ponownie. pdfjs-views-manager-status-warning-save-label = Nie udało się zachować. Odśwież stronę i spróbuj ponownie. pdfjs-views-manager-status-undo-button-label = Cofnij +pdfjs-views-manager-status-done-button-label = Gotowe pdfjs-views-manager-status-close-button = .title = Zamknij pdfjs-views-manager-status-close-button-label = Zamknij +pdfjs-views-manager-paste-button-label = Wklej +pdfjs-views-manager-paste-button-before = + .title = Wklej przed pierwszą stroną +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Wklej po { $page }. stronie +pdfjs-toggle-views-manager-button1 = + .title = Zarządzaj stronami ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/pt-BR/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/pt-BR/viewer.ftl index 5311458154..c04acec680 100644 --- a/packages/pdfjs-viewer/viewer/locale/pt-BR/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/pt-BR/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatura da página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Selecionar página { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Selecionar página { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Página { $page } de { $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Exibir/ocultar painel lateral pdfjs-toggle-views-manager-notification-button = .title = Exibir/ocultar painel lateral (documento contém miniaturas/estrutura/anexos/camadas) +pdfjs-toggle-views-manager-button1-label = Gerenciar páginas pdfjs-toggle-views-manager-button-label = Exibir/ocultar painel lateral pdfjs-views-manager-sidebar = .aria-label = Painel lateral +pdfjs-views-manager-sidebar-resizer = + .aria-label = Redimensionador do painel lateral pdfjs-views-manager-view-selector-button = .title = Exibição pdfjs-views-manager-view-selector-button-label = Exibição pdfjs-views-manager-pages-title = Páginas +pdfjs-views-manager-outlines-title1 = Estrutura do documento + .title = Estrutura do documento (duplo clique para expandir/recolher todos os itens) pdfjs-views-manager-outlines-title = Estrutura do documento pdfjs-views-manager-attachments-title = Anexos +pdfjs-views-manager-layers-title1 = Camadas + .title = Camadas (duplo clique para redefinir todas as camadas ao estado padrão) pdfjs-views-manager-layers-title = Camadas pdfjs-views-manager-pages-option-label = Páginas pdfjs-views-manager-outlines-option-label = Estrutura do documento @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Gerenciar pdfjs-views-manager-pages-status-copy-button-label = Copiar pdfjs-views-manager-pages-status-cut-button-label = Cortar pdfjs-views-manager-pages-status-delete-button-label = Excluir +pdfjs-views-manager-pages-status-export-selected-button-label = Exportar selecionados… pdfjs-views-manager-pages-status-save-as-button-label = Salvar como… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Não foi possível copiar. Atual pdfjs-views-manager-status-warning-delete-label = Não foi possível excluir. Atualize a página e tente novamente. pdfjs-views-manager-status-warning-save-label = Não foi possível salvar. Atualize a página e tente novamente. pdfjs-views-manager-status-undo-button-label = Desfazer +pdfjs-views-manager-status-done-button-label = Pronto pdfjs-views-manager-status-close-button = .title = Fechar pdfjs-views-manager-status-close-button-label = Fechar +pdfjs-views-manager-paste-button-label = Colar +pdfjs-views-manager-paste-button-before = + .title = Colar antes da primeira página +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Colar após a página { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NOVIDADE +pdfjs-toggle-views-manager-button1 = + .title = Gerenciar páginas ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/ru/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/ru/viewer.ftl index 440df1c76d..39d5def014 100644 --- a/packages/pdfjs-viewer/viewer/locale/ru/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/ru/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Миниатюра страницы { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Выбрать страницу { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Выбрать страницу { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Страница { $page } из { $total } ## Find panel button title and messages @@ -653,6 +662,7 @@ pdfjs-toggle-views-manager-button = .title = Показать/скрыть боковую панель pdfjs-toggle-views-manager-notification-button = .title = Показать/скрыть боковую панель (документ содержит миниатюры/структуру/вложения/слои) +pdfjs-toggle-views-manager-button1-label = Управление страницами pdfjs-toggle-views-manager-button-label = Показать/скрыть боковую панель pdfjs-views-manager-sidebar = .aria-label = Боковая панель @@ -662,8 +672,12 @@ pdfjs-views-manager-view-selector-button = .title = Вид pdfjs-views-manager-view-selector-button-label = Вид pdfjs-views-manager-pages-title = Страницы +pdfjs-views-manager-outlines-title1 = Структура документа + .title = Структура документа (щёлкните дважды, чтобы раскрыть/свернуть все элементы) pdfjs-views-manager-outlines-title = Структура документа pdfjs-views-manager-attachments-title = Вложения +pdfjs-views-manager-layers-title1 = Слои + .title = Слои (щёлкните дважды, чтобы сбросить все слои в положение по умолчанию) pdfjs-views-manager-layers-title = Слои pdfjs-views-manager-pages-option-label = Страницы pdfjs-views-manager-outlines-option-label = Структура документа @@ -685,6 +699,7 @@ pdfjs-views-manager-pages-status-action-button-label = Управление pdfjs-views-manager-pages-status-copy-button-label = Копировать pdfjs-views-manager-pages-status-cut-button-label = Вырезать pdfjs-views-manager-pages-status-delete-button-label = Удалить +pdfjs-views-manager-pages-status-export-selected-button-label = Экспортировать выбранное… pdfjs-views-manager-pages-status-save-as-button-label = Сохранить как… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -717,10 +732,22 @@ pdfjs-views-manager-status-warning-copy-label = Не удалось скопир pdfjs-views-manager-status-warning-delete-label = Не удалось удалить. Обновить страницу и попробовать ещё раз. pdfjs-views-manager-status-warning-save-label = Не удалось сохранить. Обновить страницу и попробовать ещё раз. pdfjs-views-manager-status-undo-button-label = Отменить +pdfjs-views-manager-status-done-button-label = Готово pdfjs-views-manager-status-close-button = .title = Закрыть pdfjs-views-manager-status-close-button-label = Закрыть pdfjs-views-manager-paste-button-label = Вставить +pdfjs-views-manager-paste-button-before = + .title = Вставить перед первой страницей +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Вставить после страницы { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = НОВОЕ +pdfjs-toggle-views-manager-button1 = + .title = Управление страницами ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/sk/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/sk/viewer.ftl index 7a6df46300..716630e9ae 100644 --- a/packages/pdfjs-viewer/viewer/locale/sk/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/sk/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniatúra strany { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Vybrať stranu { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Vybrať stranu { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Strana { $page } z { $total } ## Find panel button title and messages @@ -653,9 +666,12 @@ pdfjs-toggle-views-manager-button = .title = Prepnúť bočný panel pdfjs-toggle-views-manager-notification-button = .title = Prepnúť bočný panel (dokument obsahuje miniatúry/prehľad/prílohy/vrstvy) +pdfjs-toggle-views-manager-button1-label = Spravovať strany pdfjs-toggle-views-manager-button-label = Prepnúť bočný panel pdfjs-views-manager-sidebar = .aria-label = Bočný panel +pdfjs-views-manager-sidebar-resizer = + .aria-label = Zmeniť veľkosť bočného panela pdfjs-views-manager-view-selector-button = .title = Zobrazenia pdfjs-views-manager-view-selector-button-label = Zobrazenia @@ -719,9 +735,19 @@ pdfjs-views-manager-status-warning-copy-label = Skopírovanie sa nepodarilo. Obn pdfjs-views-manager-status-warning-delete-label = Odstránenie sa nepodarilo. Obnovte stránku a skúste to znova. pdfjs-views-manager-status-warning-save-label = Uloženie sa nepodarilo. Obnovte stránku a skúste to znova. pdfjs-views-manager-status-undo-button-label = Späť +pdfjs-views-manager-status-done-button-label = Hotovo pdfjs-views-manager-status-close-button = .title = Zavrieť pdfjs-views-manager-status-close-button-label = Zavrieť +pdfjs-views-manager-paste-button-label = Prilepiť +pdfjs-views-manager-paste-button-before = + .title = Vložiť pred prvú stranu +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Vložiť za stranu { $page } +pdfjs-toggle-views-manager-button1 = + .title = Spravovať strany ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/sl/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/sl/viewer.ftl index 98d67fcb4c..7a3f344cba 100644 --- a/packages/pdfjs-viewer/viewer/locale/sl/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/sl/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Sličica strani { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Izberi stran { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Izberi stran { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Stran { $page } od { $total } ## Find panel button title and messages @@ -653,9 +666,12 @@ pdfjs-toggle-views-manager-button = .title = Preklopi stransko vrstico pdfjs-toggle-views-manager-notification-button = .title = Preklopi stransko vrstico (dokument vsebuje sličice/oris/priponke/plasti) +pdfjs-toggle-views-manager-button1-label = Upravljanje strani pdfjs-toggle-views-manager-button-label = Preklopi stransko vrstico pdfjs-views-manager-sidebar = .aria-label = Stranska vrstica +pdfjs-views-manager-sidebar-resizer = + .aria-label = Sprememba velikosti stranske vrstice pdfjs-views-manager-view-selector-button = .title = Pogledi pdfjs-views-manager-view-selector-button-label = Pogledi @@ -719,9 +735,19 @@ pdfjs-views-manager-status-warning-copy-label = Kopiranje ni bilo mogoče. Osve pdfjs-views-manager-status-warning-delete-label = Brisanje ni bilo mogoče. Osvežite stran in poskusite znova. pdfjs-views-manager-status-warning-save-label = Shranjevanje ni bilo mogoče. Osvežite stran in poskusite znova. pdfjs-views-manager-status-undo-button-label = Razveljavi +pdfjs-views-manager-status-done-button-label = Končano pdfjs-views-manager-status-close-button = .title = Zapri pdfjs-views-manager-status-close-button-label = Zapri +pdfjs-views-manager-paste-button-label = Prilepi +pdfjs-views-manager-paste-button-before = + .title = Prilepi pred prvo stran +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Prilepi za stranjo { $page } +pdfjs-toggle-views-manager-button1 = + .title = Upravljanje strani ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/sq/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/sq/viewer.ftl index cca7268da9..8f81f66810 100644 --- a/packages/pdfjs-viewer/viewer/locale/sq/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/sq/viewer.ftl @@ -192,6 +192,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Miniaturë e Faqes { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Përzgjidhni faqen { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Përzgjidhni faqen { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Faqja { $page } nga { $total } gjithsej ## Find panel button title and messages @@ -525,6 +538,7 @@ pdfjs-editor-undo-bar-message-freetext = U hoq tekst pdfjs-editor-undo-bar-message-ink = U hoq vizatim pdfjs-editor-undo-bar-message-stamp = U hoq figurë pdfjs-editor-undo-bar-message-signature = Nënshkrimi u hoq +pdfjs-editor-undo-bar-message-comment = Komenti u hoq # Variables: # $count (Number) - the number of removed annotations. pdfjs-editor-undo-bar-message-multiple = @@ -624,6 +638,98 @@ pdfjs-editor-edit-comment-dialog-cancel-button = Anuloje pdfjs-editor-add-comment-button = .title = Shtoni koment +## The view manager is a sidebar displaying different views: +## - thumbnails; +## - outline; +## - attachments; +## - layers. +## The thumbnails view is used to edit the pdf: remove/insert pages, ... + +pdfjs-toggle-views-manager-button = + .title = Shfaq/Fshih Anështyllën +pdfjs-toggle-views-manager-notification-button = + .title = Shfaqni/Fshihni Anështyllër (dokumenti përmban miniatura/përvijim/bashkëngjitje/shtresa) +pdfjs-toggle-views-manager-button1-label = Administroni faqe +pdfjs-toggle-views-manager-button-label = Shfaq/Fshih Anështyllën +pdfjs-views-manager-sidebar = + .aria-label = Anështyllë +pdfjs-views-manager-sidebar-resizer = + .aria-label = Ripërmasues anështylle +pdfjs-views-manager-view-selector-button = + .title = Pamje +pdfjs-views-manager-view-selector-button-label = Pamje +pdfjs-views-manager-pages-title = Faqe +pdfjs-views-manager-outlines-title = Përvijim dokumenti +pdfjs-views-manager-attachments-title = Bashkëngjitje +pdfjs-views-manager-layers-title1 = Shtresa + .title = Shtresa (dyklikoni që të rikthehen krejt shtresat te gjendja parazgjedhje) +pdfjs-views-manager-layers-title = Shtresa +pdfjs-views-manager-pages-option-label = Faqe +pdfjs-views-manager-outlines-option-label = Përvijim dokumenti +pdfjs-views-manager-attachments-option-label = Bashkëngjitje +pdfjs-views-manager-layers-option-label = Shtresa +pdfjs-views-manager-add-file-button = + .title = Shtoni kartelë +pdfjs-views-manager-add-file-button-label = Shtoni kartelë +# Variables: +# $count (Number) - the number of selected pages. +pdfjs-views-manager-pages-status-action-label = + { $count -> + [one] { $count } e përzgjedhur + *[other] { $count } të përzgjedhura + } +pdfjs-views-manager-pages-status-none-action-label = Përzgjidhni faqe +pdfjs-views-manager-pages-status-action-button-label = Administrojini +pdfjs-views-manager-pages-status-copy-button-label = Kopjoje +pdfjs-views-manager-pages-status-cut-button-label = Prije +pdfjs-views-manager-pages-status-delete-button-label = Fshije +pdfjs-views-manager-pages-status-export-selected-button-label = Eksportoni të përzgjedhurit… +pdfjs-views-manager-pages-status-save-as-button-label = Ruajeni si… +# Variables: +# $count (Number) - the number of selected pages to be cut. +pdfjs-views-manager-status-undo-cut-label = + { $count -> + [one] Prerje e 1 faqeje + *[other] Prerje e { $count } faqesh + } +# Variables: +# $count (Number) - the number of selected pages to be copied. +pdfjs-views-manager-pages-status-undo-copy-label = + { $count -> + [one] 1 faqe e kopjuar + *[other] { $count } faqe të kopjuara + } +# Variables: +# $count (Number) - the number of selected pages to be deleted. +pdfjs-views-manager-pages-status-undo-delete-label = + { $count -> + [one] 1 faqe e fshirë + *[other] { $count } faqe të fshira + } +pdfjs-views-manager-pages-status-waiting-ready-label = Po bëhet gati kartela juaj… +pdfjs-views-manager-pages-status-waiting-uploading-label = Po ngarkohet kartelë… +pdfjs-views-manager-status-warning-cut-label = S’u bë dot prerja. Rifreskoni faqen dhe riprovoni. +pdfjs-views-manager-status-warning-copy-label = S’u kopjua dot. Rifreskoni faqen dhe riprovoni. +pdfjs-views-manager-status-warning-delete-label = S’u fshi dot. Rifreskoni faqen dhe riprovoni. +pdfjs-views-manager-status-warning-save-label = S’u ruajt dot. Rifreskoni faqen dhe riprovoni. +pdfjs-views-manager-status-undo-button-label = Zhbëje +pdfjs-views-manager-status-done-button-label = U bë +pdfjs-views-manager-status-close-button = + .title = Mbylle +pdfjs-views-manager-status-close-button-label = Mbylle +pdfjs-views-manager-paste-button-label = Ngjite +pdfjs-views-manager-paste-button-before = + .title = Ngjite para faqes së parë +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Ngjite pas faqes { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = E RE +pdfjs-toggle-views-manager-button1 = + .title = Administroni faqe + ## Main menu for adding/removing signatures pdfjs-editor-delete-signature-button1 = diff --git a/packages/pdfjs-viewer/viewer/locale/sr/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/sr/viewer.ftl index d4861fb326..5bfd47d686 100644 --- a/packages/pdfjs-viewer/viewer/locale/sr/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/sr/viewer.ftl @@ -42,6 +42,12 @@ pdfjs-print-button-label = Штампај pdfjs-save-button = .title = Сачувај pdfjs-save-button-label = Сачувај +# Used in Firefox for Android as a tooltip for the download button (“download” is a verb). +pdfjs-download-button = + .title = Преузми +# Used in Firefox for Android as a label for the download button (“download” is a verb). +# Length of the translation matters since we are in a mobile context, with limited screen estate. +pdfjs-download-button-label = Преузми pdfjs-bookmark-button = .title = Тренутна страница (погледајте URL са тренутне странице) pdfjs-bookmark-button-label = Тренутна страница @@ -98,6 +104,14 @@ pdfjs-document-properties-button = pdfjs-document-properties-button-label = Параметри документа… pdfjs-document-properties-file-name = Име датотеке: pdfjs-document-properties-file-size = Величина датотеке: +# Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } бајтова) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } бајтова) pdfjs-document-properties-title = Наслов: pdfjs-document-properties-author = Аутор: pdfjs-document-properties-subject = Тема: @@ -187,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Сличица од странице { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Изабери страницу { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Изабери страницу { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Страница { $page } од { $total } ## Find panel button title and messages @@ -205,6 +232,23 @@ pdfjs-find-match-diacritics-checkbox-label = Дијакритика pdfjs-find-entire-word-checkbox-label = Целе речи pdfjs-find-reached-top = Достигнут врх документа, наставио са дна pdfjs-find-reached-bottom = Достигнуто дно документа, наставио са врха +# Variables: +# $current (Number) - the index of the currently active find result +# $total (Number) - the total number of matches in the document +pdfjs-find-match-count = + { $total -> + [one] { $current } од { $total } поклапања + [few] { $current } од { $total } поклапања + *[other] { $current } од { $total } поклапања + } +# Variables: +# $limit (Number) - the maximum number of matches +pdfjs-find-match-count-limit = + { $limit -> + [one] Више од { $limit } поклапања + [few] Више од { $limit } поклапања + *[other] Више од { $limit } поклапања + } pdfjs-find-not-found = Фраза није пронађена ## Predefined zoom values @@ -257,9 +301,13 @@ pdfjs-web-fonts-disabled = Веб фонтови су онемогућени: н pdfjs-editor-free-text-button = .title = Текст +pdfjs-editor-color-picker-free-text-input = + .title = Промени боју текста pdfjs-editor-free-text-button-label = Текст pdfjs-editor-ink-button = .title = Цртај +pdfjs-editor-color-picker-ink-input = + .title = Промени боју цртежа pdfjs-editor-ink-button-label = Цртај pdfjs-editor-stamp-button = .title = Додај или уреди слике @@ -271,6 +319,33 @@ pdfjs-highlight-floating-button1 = .title = Означи .aria-label = Означи pdfjs-highlight-floating-button-label = Означи +pdfjs-comment-floating-button = + .title = Коментар + .aria-label = Коментар +pdfjs-comment-floating-button-label = Напомена +pdfjs-editor-comment-button = + .title = Коментар + .aria-label = Коментар +pdfjs-editor-comment-button-label = Коментар +pdfjs-editor-signature-button = + .title = Додај потпис +pdfjs-editor-signature-button-label = Додај потпис + +## Default editor aria labels + +# “Highlight” is a noun, the string is used on the editor for highlights. +pdfjs-editor-highlight-editor = + .aria-label = Уређивач истицања +# “Drawing” is a noun, the string is used on the editor for drawings. +pdfjs-editor-ink-editor = + .aria-label = Уређивач цртања +# Used when a signature editor is selected/hovered. +# Variables: +# $description (String) - a string describing/labeling the signature. +pdfjs-editor-signature-editor1 = + .aria-description = Уређивач потписа: { $description } +pdfjs-editor-stamp-editor = + .aria-label = Уређивач слика ## Remove button for the various kind of editor. @@ -282,6 +357,8 @@ pdfjs-editor-remove-stamp-button = .title = Уклони слику pdfjs-editor-remove-highlight-button = .title = Уклони ознаку +pdfjs-editor-remove-signature-button = + .title = Уклони потпис ## @@ -294,12 +371,40 @@ pdfjs-editor-ink-opacity-input = Опацитет pdfjs-editor-stamp-add-image-button = .title = Додај слику pdfjs-editor-stamp-add-image-button-label = Додај слику +# This refers to the thickness of the line used for free highlighting (not bound to text) +pdfjs-editor-free-highlight-thickness-input = Дебљина pdfjs-editor-free-highlight-thickness-title = .title = Промени дебљину при означавању других ставки сем текста +pdfjs-editor-add-signature-container = + .aria-label = Контроле потписа и сачувани потписи +pdfjs-editor-signature-add-signature-button = + .title = Додај нови потпис +pdfjs-editor-signature-add-signature-button-label = Додај нови потпис +# Used on the button to use an already saved signature. +# Variables: +# $description (String) - a string describing/labeling the signature. +pdfjs-editor-add-saved-signature-button = + .title = Сачувани потпис: { $description } # .default-content is used as a placeholder in an empty text editor. pdfjs-free-text2 = .aria-label = Уређивач текста .default-content = Почни куцати… +# Used to show how many comments are present in the pdf file. +# Variables: +# $count (Number) - the number of comments. +pdfjs-editor-comments-sidebar-title = + { $count -> + [one] Напомена + [few] Напомене + *[other] Напомене + } +pdfjs-editor-comments-sidebar-close-button = + .title = Затвори бочну површ + .aria-label = Затвори бочну површ +pdfjs-editor-comments-sidebar-close-button-label = Затвори бочну површ +# Instructional copy to add a comment by selecting text or an annotations. +pdfjs-editor-comments-sidebar-no-comments1 = Видите нешто вредно пажње? Истакните то и оставите напомену. +pdfjs-editor-comments-sidebar-no-comments-link = Сазнајте више ## Alt-text dialog @@ -384,3 +489,276 @@ pdfjs-editor-new-alt-text-disclaimer1 = Овај алтернативни тек pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Сазнајте више pdfjs-editor-new-alt-text-create-automatically-button-label = Прави алтернативни текст аутоматски pdfjs-editor-new-alt-text-not-now-button = Не сада +pdfjs-editor-new-alt-text-error-title = Није могуће самостално направити алтернативни текст +pdfjs-editor-new-alt-text-error-description = Напишите сопствени алтернативни текст или покушајте поново касније. +pdfjs-editor-new-alt-text-error-close-button = Затвори +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +# $downloadedSize (Number) - the downloaded size (in MB) of the AI model. +pdfjs-editor-new-alt-text-ai-model-downloading-progress = Преузимање ВИ модела за алтернативни текст ({ $downloadedSize } од { $totalSize } MB) + .aria-valuetext = Преузимање ВИ модела за алтернативни текст ({ $downloadedSize } од { $totalSize } MB) +# This is a button that users can click to edit the alt text they have already added. +pdfjs-editor-new-alt-text-added-button = + .aria-label = Алтернативни текст је додат +pdfjs-editor-new-alt-text-added-button-label = Алтернативни текст је додат +# This is a button that users can click to open the alt text editor and add alt text when it is not present. +pdfjs-editor-new-alt-text-missing-button = + .aria-label = Недостаје алтернативни текст +pdfjs-editor-new-alt-text-missing-button-label = Недостаје алтернативни текст +# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated. +pdfjs-editor-new-alt-text-to-review-button = + .aria-label = Прегледај алтернативни текст +pdfjs-editor-new-alt-text-to-review-button-label = Прегледај алтернативни текст +# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. +# Variables: +# $generatedAltText (String) - the generated alt-text. +pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Аутоматски направљено: { $generatedAltText } + +## Image alt-text settings + +pdfjs-image-alt-text-settings-button = + .title = Подешавања алтернативног текста слике +pdfjs-image-alt-text-settings-button-label = Подешавања алтернативног текста слике +pdfjs-editor-alt-text-settings-dialog-label = Подешавања алтернативног текста слике +pdfjs-editor-alt-text-settings-automatic-title = Аутоматски алтернативни текст +pdfjs-editor-alt-text-settings-create-model-button-label = Аутоматски прави алтернативни текст +pdfjs-editor-alt-text-settings-create-model-description = Предлаже описе како би се помогло људима који не виде слику или када се слика не учита. +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = ВИ модел за алтернативни текст ({ $totalSize } MB) +pdfjs-editor-alt-text-settings-ai-model-description = Ради локално на вашем уређају тако да ваши подаци остају приватни. Потребно за аутоматски алтернативни текст. +pdfjs-editor-alt-text-settings-delete-model-button = Обриши +pdfjs-editor-alt-text-settings-download-model-button = Преузми +pdfjs-editor-alt-text-settings-downloading-model-button = Преузимање… +pdfjs-editor-alt-text-settings-editor-title = Уређивач алтернативног текста +pdfjs-editor-alt-text-settings-show-dialog-button-label = Прикажи уређивач алтернативног текста одмах при додавању слике +pdfjs-editor-alt-text-settings-show-dialog-description = Помаже вам да све ваше слике имају алтернативни текст. +pdfjs-editor-alt-text-settings-close-button = Затвори + +## Accessibility labels (announced by screen readers) for objects added to the editor. + +pdfjs-editor-highlight-added-alert = Истицање је додато +pdfjs-editor-freetext-added-alert = Текст је додат +pdfjs-editor-ink-added-alert = Цртеж је додат +pdfjs-editor-stamp-added-alert = Слика је додата +pdfjs-editor-signature-added-alert = Потпис је додат + +## "Annotations removed" bar + +pdfjs-editor-undo-bar-message-highlight = Истицање је уклоњено +pdfjs-editor-undo-bar-message-freetext = Текст је уклоњен +pdfjs-editor-undo-bar-message-ink = Цртеж је уклоњен +pdfjs-editor-undo-bar-message-stamp = Слика је уклоњена +pdfjs-editor-undo-bar-message-signature = Потпис је уклоњен +pdfjs-editor-undo-bar-message-comment = Коментар је уклоњен +# Variables: +# $count (Number) - the number of removed annotations. +pdfjs-editor-undo-bar-message-multiple = + { $count -> + [one] Уклоњена је { $count } забелешка + [few] Уклоњене су { $count } забелешке + *[other] Уклоњено је { $count } забелешки + } +pdfjs-editor-undo-bar-undo-button = + .title = Опозови +pdfjs-editor-undo-bar-undo-button-label = Опозови +pdfjs-editor-undo-bar-close-button = + .title = Затвори +pdfjs-editor-undo-bar-close-button-label = Затвори + +## Add a signature dialog + +pdfjs-editor-add-signature-dialog-label = Овај прозор омогућава кориснику да направи потпис који ће додати у ПДФ документ. Корисник може да уреди име (које такође служи као алтернативни текст) и опционо сачува потпис за поновну употребу. +pdfjs-editor-add-signature-dialog-title = Додај потпис + +## Tab names + +# Type is a verb (you can type your name as signature) +pdfjs-editor-add-signature-type-button = Куцај + .title = Куцај +# Draw is a verb (you can draw your signature) +pdfjs-editor-add-signature-draw-button = Цртај + .title = Цртај +pdfjs-editor-add-signature-image-button = Слика + .title = Слика + +## Tab panels + +pdfjs-editor-add-signature-type-input = + .aria-label = Укуцајте свој потпис + .placeholder = Укуцајте свој потпис +pdfjs-editor-add-signature-draw-placeholder = Нацртајте свој потпис +pdfjs-editor-add-signature-draw-thickness-range-label = Дебљина +# Variables: +# $thickness (Number) - the thickness (in pixels) of the line used to draw a signature. +pdfjs-editor-add-signature-draw-thickness-range = + .title = Дебљина цртања: { $thickness } +pdfjs-editor-add-signature-image-placeholder = Превуците датотеку овде за отпремање +pdfjs-editor-add-signature-image-browse-link = + { PLATFORM() -> + [macos] Или изаберите датотеке слика + *[other] Или потражите датотеке слика + } + +## Controls + +pdfjs-editor-add-signature-description-label = Опис (алтернативни текст) +pdfjs-editor-add-signature-description-input = + .title = Опис (алтернативни текст) +pdfjs-editor-add-signature-description-default-when-drawing = Потпис +pdfjs-editor-add-signature-clear-button-label = Обриши потпис +pdfjs-editor-add-signature-clear-button = + .title = Обриши потпис +pdfjs-editor-add-signature-save-checkbox = Сачувај потпис +pdfjs-editor-add-signature-save-warning-message = Достигли сте ограничење од 5 сачуваних потписа. Уклоните један да бисте сачували више. +pdfjs-editor-add-signature-image-upload-error-title = Није могуће отпремити слику +pdfjs-editor-add-signature-image-upload-error-description = Проверите своју мрежну везу или покушајте са другом сликом. +pdfjs-editor-add-signature-image-no-data-error-title = Ова слика се не може претворити у потпис +pdfjs-editor-add-signature-image-no-data-error-description = Покушајте да отпремите другу слику. +pdfjs-editor-add-signature-error-close-button = Затвори + +## Dialog buttons + +pdfjs-editor-add-signature-cancel-button = Откажи +pdfjs-editor-add-signature-add-button = Додај +pdfjs-editor-edit-signature-update-button = Ажурирај + +## Comment popup + +pdfjs-editor-edit-comment-popup-button-label = Уреди коментар +pdfjs-editor-edit-comment-popup-button = + .title = Уреди коментар +pdfjs-editor-delete-comment-popup-button-label = Уклони коментар +pdfjs-editor-delete-comment-popup-button = + .title = Уклони коментар +pdfjs-show-comment-button = + .title = Прикажи напомену + +## Edit a comment dialog + +# An existing comment is edited +pdfjs-editor-edit-comment-dialog-title-when-editing = Уреди напомену +pdfjs-editor-edit-comment-dialog-save-button-when-editing = Ажурирај +# No existing comment +pdfjs-editor-edit-comment-dialog-title-when-adding = Додај напомену +pdfjs-editor-edit-comment-dialog-save-button-when-adding = Додај +pdfjs-editor-edit-comment-dialog-text-input = + .placeholder = Почните да куцате… +pdfjs-editor-edit-comment-dialog-cancel-button = Откажи + +## Edit a comment button in the editor toolbar + +pdfjs-editor-add-comment-button = + .title = Додај напомену + +## The view manager is a sidebar displaying different views: +## - thumbnails; +## - outline; +## - attachments; +## - layers. +## The thumbnails view is used to edit the pdf: remove/insert pages, ... + +pdfjs-toggle-views-manager-button = + .title = Прикажи/сакриј бочну површ +pdfjs-toggle-views-manager-notification-button = + .title = Прикажи/сакриј бочну површ (документ садржи умањене сличице/оквир/прилоге/слојеве) +pdfjs-toggle-views-manager-button1-label = Управљај страницама +pdfjs-toggle-views-manager-button-label = Прикажи/сакриј бочну површ +pdfjs-views-manager-sidebar = + .aria-label = Бочна површ +pdfjs-views-manager-sidebar-resizer = + .aria-label = Промена величине бочне површи +pdfjs-views-manager-view-selector-button = + .title = Прегледи +pdfjs-views-manager-view-selector-button-label = Прегледи +pdfjs-views-manager-pages-title = Странице +pdfjs-views-manager-outlines-title1 = Контура документа + .title = Контура документа (двоклик за ширење/скупљање свих ставки) +pdfjs-views-manager-outlines-title = Оквир документа +pdfjs-views-manager-attachments-title = Прилози +pdfjs-views-manager-layers-title1 = Слојеви + .title = Слојеви (двоклик за враћање свих слојева у подразумевано стање) +pdfjs-views-manager-layers-title = Слојеви +pdfjs-views-manager-pages-option-label = Странице +pdfjs-views-manager-outlines-option-label = Контура документа +pdfjs-views-manager-attachments-option-label = Прилози +pdfjs-views-manager-layers-option-label = Слојеви +pdfjs-views-manager-add-file-button = + .title = Додај датотеку +pdfjs-views-manager-add-file-button-label = Додај датотеку +# Variables: +# $count (Number) - the number of selected pages. +pdfjs-views-manager-pages-status-action-label = + { $count -> + [one] Изабрана је { $count } страница + [few] Изабране су { $count } странице + *[other] Изабрано је { $count } страница + } +pdfjs-views-manager-pages-status-none-action-label = Изаберите странице +pdfjs-views-manager-pages-status-action-button-label = Управљај +pdfjs-views-manager-pages-status-copy-button-label = Умножи +pdfjs-views-manager-pages-status-cut-button-label = Исеци +pdfjs-views-manager-pages-status-delete-button-label = Обриши +pdfjs-views-manager-pages-status-export-selected-button-label = Извези изабрано… +pdfjs-views-manager-pages-status-save-as-button-label = Сачувај као… +# Variables: +# $count (Number) - the number of selected pages to be cut. +pdfjs-views-manager-status-undo-cut-label = + { $count -> + [one] Исечена је 1 страница + [few] Исечене су { $count } странице + *[other] Исечено је { $count } страница + } +# Variables: +# $count (Number) - the number of selected pages to be copied. +pdfjs-views-manager-pages-status-undo-copy-label = + { $count -> + [one] Умножена је 1 страница + [few] Умножене су { $count } странице + *[other] Умножено је { $count } страница + } +# Variables: +# $count (Number) - the number of selected pages to be deleted. +pdfjs-views-manager-pages-status-undo-delete-label = + { $count -> + [one] Обрисана је 1 страница + [few] Обрисане су { $count } странице + *[other] Обрисано је { $count } страница + } +pdfjs-views-manager-pages-status-waiting-ready-label = Припремам датотеку… +pdfjs-views-manager-pages-status-waiting-uploading-label = Отпремам датотеку… +pdfjs-views-manager-status-warning-cut-label = Не могу да исечем. Освежите страницу и покушајте поново. +pdfjs-views-manager-status-warning-copy-label = Не могу да умножим. Освежите страницу и покушајте поново. +pdfjs-views-manager-status-warning-delete-label = Не могу да обришем. Освежите страницу и покушајте поново. +pdfjs-views-manager-status-warning-save-label = Не могу да сачувам. Освежите страницу и покушајте поново. +pdfjs-views-manager-status-undo-button-label = Опозови +pdfjs-views-manager-status-done-button-label = Готово +pdfjs-views-manager-status-close-button = + .title = Затвори +pdfjs-views-manager-status-close-button-label = Затвори +pdfjs-views-manager-paste-button-label = Убаци +pdfjs-views-manager-paste-button-before = + .title = Убаци пре прве странице +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Убаци после странице { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = НОВО +pdfjs-toggle-views-manager-button1 = + .title = Управљај страницама + +## Main menu for adding/removing signatures + +pdfjs-editor-delete-signature-button1 = + .title = Уклони сачувани потпис +pdfjs-editor-delete-signature-button-label1 = Уклони сачувани потпис + +## Editor toolbar + +pdfjs-editor-add-signature-edit-button-label = Уреди опис + +## Edit signature description dialog + +pdfjs-editor-edit-signature-dialog-title = Уреди опис diff --git a/packages/pdfjs-viewer/viewer/locale/sv-SE/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/sv-SE/viewer.ftl index 34bbff9aca..f150f73c2b 100644 --- a/packages/pdfjs-viewer/viewer/locale/sv-SE/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/sv-SE/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Miniatyr av sida { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Välj sida { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Välj sida { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Sida { $page } av { $total } ## Find panel button title and messages @@ -649,6 +658,7 @@ pdfjs-toggle-views-manager-button = .title = Visa/dölj sidofält pdfjs-toggle-views-manager-notification-button = .title = Visa/dölj sidofält (dokument innehåller miniatyrer/översikt/bilagor/lager) +pdfjs-toggle-views-manager-button1-label = Hantera sidor pdfjs-toggle-views-manager-button-label = Visa/dölj sidofält pdfjs-views-manager-sidebar = .aria-label = Sidofält @@ -658,8 +668,12 @@ pdfjs-views-manager-view-selector-button = .title = Vyer pdfjs-views-manager-view-selector-button-label = Vyer pdfjs-views-manager-pages-title = Sidor +pdfjs-views-manager-outlines-title1 = Dokumentöversikt + .title = Dokumentöversikt (dubbelklicka för att expandera/komprimera alla objekt) pdfjs-views-manager-outlines-title = Dokumentöversikt pdfjs-views-manager-attachments-title = Bilagor +pdfjs-views-manager-layers-title1 = Lager + .title = Lager (dubbelklicka för att återställa alla lager till standardläge) pdfjs-views-manager-layers-title = Lager pdfjs-views-manager-pages-option-label = Sidor pdfjs-views-manager-outlines-option-label = Dokumentöversikt @@ -680,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Hantera pdfjs-views-manager-pages-status-copy-button-label = Kopiera pdfjs-views-manager-pages-status-cut-button-label = Klipp ut pdfjs-views-manager-pages-status-delete-button-label = Ta bort +pdfjs-views-manager-pages-status-export-selected-button-label = Exportera markerad… pdfjs-views-manager-pages-status-save-as-button-label = Spara som… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -709,10 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Det gick inte att kopiera. Uppda pdfjs-views-manager-status-warning-delete-label = Det gick inte att ta bort. Uppdatera sidan och försök igen. pdfjs-views-manager-status-warning-save-label = Det gick inte att spara. Uppdatera sidan och försök igen. pdfjs-views-manager-status-undo-button-label = Ångra +pdfjs-views-manager-status-done-button-label = Klar pdfjs-views-manager-status-close-button = .title = Stäng pdfjs-views-manager-status-close-button-label = Stäng pdfjs-views-manager-paste-button-label = Klistra in +pdfjs-views-manager-paste-button-before = + .title = Klistra in före den första sidan +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Klistra in efter sida { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = NYTT +pdfjs-toggle-views-manager-button1 = + .title = Hantera sidor ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/tg/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/tg/viewer.ftl index 52ae39105a..baee9da510 100644 --- a/packages/pdfjs-viewer/viewer/locale/tg/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/tg/viewer.ftl @@ -645,6 +645,7 @@ pdfjs-toggle-views-manager-button = .title = Фаъол кардани навори ҷонибӣ pdfjs-toggle-views-manager-notification-button = .title = Фаъол кардани навори ҷонибӣ (ҳуҷҷат дорои тасвирчаҳо/сохтор/замимаҳо/қабатҳо мебошад) +pdfjs-toggle-views-manager-button1-label = Идоракунии саҳифаҳо pdfjs-toggle-views-manager-button-label = Фаъол кардани навори ҷонибӣ pdfjs-views-manager-sidebar = .aria-label = Навори ҷонибӣ @@ -706,6 +707,9 @@ pdfjs-views-manager-status-undo-button-label = Бекор кардан pdfjs-views-manager-status-close-button = .title = Пӯшидан pdfjs-views-manager-status-close-button-label = Пӯшидан +pdfjs-views-manager-paste-button-label = Гузоштан +pdfjs-toggle-views-manager-button1 = + .title = Идоракунии саҳифаҳо ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/th/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/th/viewer.ftl index b8482350f0..0a5b853ed0 100644 --- a/packages/pdfjs-viewer/viewer/locale/th/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/th/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = ภาพขนาดย่อของหน้า { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = เลือกหน้า { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = เลือกหน้า { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = หน้า { $page } จาก { $total } ## Find panel button title and messages @@ -629,6 +642,7 @@ pdfjs-toggle-views-manager-button = .title = เปิด/ปิดแถบข้าง pdfjs-toggle-views-manager-notification-button = .title = เปิด/ปิดแถบข้าง (เอกสารมีภาพย่อ/เค้าร่าง/ไฟล์แนบ/เลเยอร์) +pdfjs-toggle-views-manager-button1-label = จัดการหน้า pdfjs-toggle-views-manager-button-label = เปิด/ปิดแถบข้าง pdfjs-views-manager-sidebar = .aria-label = แถบข้าง @@ -638,6 +652,8 @@ pdfjs-views-manager-view-selector-button-label = มุมมอง pdfjs-views-manager-pages-title = หน้า pdfjs-views-manager-outlines-title = เค้าร่างเอกสาร pdfjs-views-manager-attachments-title = ไฟล์แนบ +pdfjs-views-manager-layers-title1 = เลเยอร์ + .title = เลเยอร์ (คลิกสองครั้งเพื่อล้างค่าเลเยอร์ทั้งหมดกลับสู่สถานะเริ่มต้น) pdfjs-views-manager-layers-title = เลเยอร์ pdfjs-views-manager-pages-option-label = หน้า pdfjs-views-manager-outlines-option-label = เค้าร่างเอกสาร @@ -654,6 +670,7 @@ pdfjs-views-manager-pages-status-action-button-label = จัดการ pdfjs-views-manager-pages-status-copy-button-label = คัดลอก pdfjs-views-manager-pages-status-cut-button-label = ตัด pdfjs-views-manager-pages-status-delete-button-label = ลบ +pdfjs-views-manager-pages-status-export-selected-button-label = ส่งออกรายการที่เลือก… pdfjs-views-manager-pages-status-save-as-button-label = บันทึกเป็น… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -671,9 +688,22 @@ pdfjs-views-manager-status-warning-copy-label = ไม่สามารถค pdfjs-views-manager-status-warning-delete-label = ไม่สามารถลบได้ โปรดรีเฟรชหน้าแล้วลองอีกครั้ง pdfjs-views-manager-status-warning-save-label = ไม่สามารถบันทึกได้ โปรดรีเฟรชหน้าแล้วลองอีกครั้ง pdfjs-views-manager-status-undo-button-label = เลิกทำ +pdfjs-views-manager-status-done-button-label = เสร็จสิ้น pdfjs-views-manager-status-close-button = .title = ปิด pdfjs-views-manager-status-close-button-label = ปิด +pdfjs-views-manager-paste-button-label = วาง +pdfjs-views-manager-paste-button-before = + .title = วางก่อนหน้าแรก +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = วางหลังหน้า { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = ใหม่ +pdfjs-toggle-views-manager-button1 = + .title = จัดการหน้า ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/tr/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/tr/viewer.ftl index 7d5b71dcc5..3eb096a97d 100644 --- a/packages/pdfjs-viewer/viewer/locale/tr/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/tr/viewer.ftl @@ -201,6 +201,19 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = { $page }. sayfanın küçük hâli +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = { $page }. sayfayı seç +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = { $page }. sayfayı seç +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Sayfa { $page }/{ $total } ## Find panel button title and messages @@ -645,15 +658,22 @@ pdfjs-toggle-views-manager-button = .title = Kenar çubuğunu aç/kapat pdfjs-toggle-views-manager-notification-button = .title = Kenar çubuğunu aç/kapat (Belge, küçük resimler/ana hat/ekler/katmanlar içeriyor) +pdfjs-toggle-views-manager-button1-label = Sayfaları yönet pdfjs-toggle-views-manager-button-label = Kenar çubuğunu aç/kapat pdfjs-views-manager-sidebar = .aria-label = Kenar çubuğu +pdfjs-views-manager-sidebar-resizer = + .aria-label = Kenar çubuğu boyutlandırıcı pdfjs-views-manager-view-selector-button = .title = Görünümler pdfjs-views-manager-view-selector-button-label = Görünümler pdfjs-views-manager-pages-title = Sayfalar +pdfjs-views-manager-outlines-title1 = Belge ana hatları + .title = Belge ana hatları (Tüm öğeleri genişletmek/daraltmak için çift tıklayın) pdfjs-views-manager-outlines-title = Belge ana hatları pdfjs-views-manager-attachments-title = Ekler +pdfjs-views-manager-layers-title1 = Katmanlar + .title = Katmanlar (Tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın) pdfjs-views-manager-layers-title = Katmanlar pdfjs-views-manager-pages-option-label = Sayfalar pdfjs-views-manager-outlines-option-label = Belge ana hatları @@ -674,6 +694,7 @@ pdfjs-views-manager-pages-status-action-button-label = Yönet pdfjs-views-manager-pages-status-copy-button-label = Kopyala pdfjs-views-manager-pages-status-cut-button-label = Kes pdfjs-views-manager-pages-status-delete-button-label = Sil +pdfjs-views-manager-pages-status-export-selected-button-label = Seçilenleri dışa aktar… pdfjs-views-manager-pages-status-save-as-button-label = Farklı kaydet… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -703,9 +724,22 @@ pdfjs-views-manager-status-warning-copy-label = Kopyalanamadı. Sayfayı tazeley pdfjs-views-manager-status-warning-delete-label = Silinemedi. Sayfayı tazeleyip yeniden deneyin. pdfjs-views-manager-status-warning-save-label = Kaydedilemedi. Sayfayı tazeleyip yeniden deneyin. pdfjs-views-manager-status-undo-button-label = Geri al +pdfjs-views-manager-status-done-button-label = Tamam pdfjs-views-manager-status-close-button = .title = Kapat pdfjs-views-manager-status-close-button-label = Kapat +pdfjs-views-manager-paste-button-label = Yapıştır +pdfjs-views-manager-paste-button-before = + .title = İlk sayfadan önce yapıştır +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = { $page }. sayfadan sonra yapıştır +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = YENİ +pdfjs-toggle-views-manager-button1 = + .title = Sayfaları yönet ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/uk/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/uk/viewer.ftl index 00a81e8ed0..d89976d5ef 100644 --- a/packages/pdfjs-viewer/viewer/locale/uk/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/uk/viewer.ftl @@ -201,6 +201,10 @@ pdfjs-thumb-page-title = # $page (Number) - the page number pdfjs-thumb-page-canvas = .aria-label = Ескіз сторінки { $page } +# Variables: +# $page (Number) - the page number +pdfjs-thumb-page-checkbox = + .aria-label = Вибрати сторінку { $page } ## Find panel button title and messages @@ -652,6 +656,8 @@ pdfjs-toggle-views-manager-notification-button = pdfjs-toggle-views-manager-button-label = Перемкнути бічну панель pdfjs-views-manager-sidebar = .aria-label = Бічна панель +pdfjs-views-manager-sidebar-resizer = + .aria-label = Зміна розміру бічної панелі pdfjs-views-manager-view-selector-button = .title = Вигляд pdfjs-views-manager-view-selector-button-label = Вигляд @@ -714,6 +720,7 @@ pdfjs-views-manager-status-undo-button-label = Повернути pdfjs-views-manager-status-close-button = .title = Закрити pdfjs-views-manager-status-close-button-label = Закрити +pdfjs-views-manager-paste-button-label = Вставити ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/vi/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/vi/viewer.ftl index 9066962adc..a025cf922d 100644 --- a/packages/pdfjs-viewer/viewer/locale/vi/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/vi/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = Ảnh thu nhỏ của trang { $page } # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = Chọn trang { $page } +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = Chọn trang { $page } +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = Trang { $page } / { $total } ## Find panel button title and messages @@ -633,6 +642,7 @@ pdfjs-toggle-views-manager-button = .title = Bật/tắt thanh lề pdfjs-toggle-views-manager-notification-button = .title = Bật tắt thanh lề (tài liệu bao gồm hình thu nhỏ/phác thảo/tập tin đính kèm/lớp) +pdfjs-toggle-views-manager-button1-label = Quản lý trang pdfjs-toggle-views-manager-button-label = Bật/tắt thanh lề pdfjs-views-manager-sidebar = .aria-label = Thanh lề @@ -642,8 +652,12 @@ pdfjs-views-manager-view-selector-button = .title = Chế độ hiển thị pdfjs-views-manager-view-selector-button-label = Chế độ hiển thị pdfjs-views-manager-pages-title = Trang +pdfjs-views-manager-outlines-title1 = Bản phác thảo tài liệu + .title = Bản phác thảo tài liệu (nhấp đúp chuột để mở rộng/thu gọn tất cả các mục) pdfjs-views-manager-outlines-title = Bản phác thảo tài liệu pdfjs-views-manager-attachments-title = Đính kèm +pdfjs-views-manager-layers-title1 = Lớp + .title = Lớp (nhấp đúp chuột để đặt lại tất cả các lớp về trạng thái mặc định.) pdfjs-views-manager-layers-title = Lớp pdfjs-views-manager-pages-option-label = Trang pdfjs-views-manager-outlines-option-label = Bản phác thảo tài liệu @@ -660,6 +674,7 @@ pdfjs-views-manager-pages-status-action-button-label = Quản lý pdfjs-views-manager-pages-status-copy-button-label = Sao chép pdfjs-views-manager-pages-status-cut-button-label = Cắt pdfjs-views-manager-pages-status-delete-button-label = Dán +pdfjs-views-manager-pages-status-export-selected-button-label = Xuất các mục đã chọn… pdfjs-views-manager-pages-status-save-as-button-label = Lưu thành… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -677,10 +692,22 @@ pdfjs-views-manager-status-warning-copy-label = Không thể sao chép. Vui lòn pdfjs-views-manager-status-warning-delete-label = Không thể xoá. Vui lòng làm mới trang và thử lại. pdfjs-views-manager-status-warning-save-label = Không thể lưu. Vui lòng làm mới trang và thử lại. pdfjs-views-manager-status-undo-button-label = Hoàn tác +pdfjs-views-manager-status-done-button-label = Xong pdfjs-views-manager-status-close-button = .title = Đóng pdfjs-views-manager-status-close-button-label = Đóng pdfjs-views-manager-paste-button-label = Dán +pdfjs-views-manager-paste-button-before = + .title = Dán trước trang đầu +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = Dán sau trang { $page } +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = MỚI +pdfjs-toggle-views-manager-button1 = + .title = Quản lý trang ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/zh-CN/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/zh-CN/viewer.ftl index f5a100c025..2f5f7e6106 100644 --- a/packages/pdfjs-viewer/viewer/locale/zh-CN/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/zh-CN/viewer.ftl @@ -674,6 +674,7 @@ pdfjs-views-manager-status-undo-button-label = 撤销 pdfjs-views-manager-status-close-button = .title = 关闭 pdfjs-views-manager-status-close-button-label = 关闭 +pdfjs-views-manager-paste-button-label = 粘贴 ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/locale/zh-TW/viewer.ftl b/packages/pdfjs-viewer/viewer/locale/zh-TW/viewer.ftl index 5d954192e3..0f5b7bc5cd 100644 --- a/packages/pdfjs-viewer/viewer/locale/zh-TW/viewer.ftl +++ b/packages/pdfjs-viewer/viewer/locale/zh-TW/viewer.ftl @@ -203,8 +203,17 @@ pdfjs-thumb-page-canvas = .aria-label = 第 { $page } 頁的縮圖 # Variables: # $page (Number) - the page number +pdfjs-thumb-page-checkbox1 = + .title = 選擇第 { $page } 頁 +# Variables: +# $page (Number) - the page number pdfjs-thumb-page-checkbox = .aria-label = 選擇第 { $page } 頁 +# Variables: +# $page (Number) - the page number +# $total (Number) - the number of pages +pdfjs-thumb-page-title1 = + .title = 第 { $page } 頁,共 { $total } 頁 ## Find panel button title and messages @@ -633,6 +642,7 @@ pdfjs-toggle-views-manager-button = .title = 切換側邊欄 pdfjs-toggle-views-manager-notification-button = .title = 切換側邊欄(包含縮圖、大綱、附件、圖層的文件) +pdfjs-toggle-views-manager-button1-label = 管理頁面 pdfjs-toggle-views-manager-button-label = 切換側邊欄 pdfjs-views-manager-sidebar = .aria-label = 側邊欄 @@ -642,8 +652,12 @@ pdfjs-views-manager-view-selector-button = .title = 畫面 pdfjs-views-manager-view-selector-button-label = 畫面 pdfjs-views-manager-pages-title = 頁面 +pdfjs-views-manager-outlines-title1 = 文件大綱 + .title = 文件大綱(點兩下即可展開/摺疊所有項目) pdfjs-views-manager-outlines-title = 文件大綱 pdfjs-views-manager-attachments-title = 附件 +pdfjs-views-manager-layers-title1 = 圖層 + .title = 圖層(點兩下即可將所有圖層重設回預設狀態) pdfjs-views-manager-layers-title = 圖層 pdfjs-views-manager-pages-option-label = 頁面 pdfjs-views-manager-outlines-option-label = 文件大綱 @@ -660,6 +674,7 @@ pdfjs-views-manager-pages-status-action-button-label = 管理 pdfjs-views-manager-pages-status-copy-button-label = 複製 pdfjs-views-manager-pages-status-cut-button-label = 剪下 pdfjs-views-manager-pages-status-delete-button-label = 刪除 +pdfjs-views-manager-pages-status-export-selected-button-label = 匯出選擇項目… pdfjs-views-manager-pages-status-save-as-button-label = 另存新檔… # Variables: # $count (Number) - the number of selected pages to be cut. @@ -677,10 +692,22 @@ pdfjs-views-manager-status-warning-copy-label = 無法複製頁面,請重新 pdfjs-views-manager-status-warning-delete-label = 無法刪除頁面,請重新整理頁面後再試一次。 pdfjs-views-manager-status-warning-save-label = 無法儲存頁面,請重新整理頁面後再試一次。 pdfjs-views-manager-status-undo-button-label = 還原 +pdfjs-views-manager-status-done-button-label = 完成 pdfjs-views-manager-status-close-button = .title = 關閉 pdfjs-views-manager-status-close-button-label = 關閉 pdfjs-views-manager-paste-button-label = 貼上 +pdfjs-views-manager-paste-button-before = + .title = 貼到第一頁前 +# Variables: +# $page (Number) - the page number after which the paste button is. +pdfjs-views-manager-paste-button-after = + .title = 貼到第 { $page } 頁後 +# Badge used to promote a new feature in the UI, keep it as short as possible. +# It's spelled uppercase for English, but it can be translated as usual. +pdfjs-new-badge-content = 新功能 +pdfjs-toggle-views-manager-button1 = + .title = 管理頁面 ## Main menu for adding/removing signatures diff --git a/packages/pdfjs-viewer/viewer/viewer.css b/packages/pdfjs-viewer/viewer/viewer.css index 2f5a0dbb79..b7128b54f2 100644 --- a/packages/pdfjs-viewer/viewer/viewer.css +++ b/packages/pdfjs-viewer/viewer/viewer.css @@ -990,6 +990,7 @@ background-color:var(--highlight-selected-bg-color); -webkit-backdrop-filter:var(--highlight-selected-backdrop-filter); backdrop-filter:var(--highlight-selected-backdrop-filter); + scroll-margin-top:50px; } .textLayer ::-moz-selection{ @@ -1025,6 +1026,19 @@ top:0; } +.textLayerImages{ + position:absolute; + inset:0; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; +} + +.textLayerImages canvas{ + position:absolute; + transform-origin:0% 0%; + } + .annotationLayer{ --csstools-color-scheme--light:initial; color-scheme:only light; @@ -5330,6 +5344,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ transparent 79% ); --menuitem-text-active-fg:var(--menu-text-color); + --menuitem-active-border-color:var(--menuitem-border-color); --menuitem-focus-bg:color-mix( in srgb, var(--menu-text-color), @@ -5353,6 +5368,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --menu-backdrop-filter:none; --csstools-light-dark-toggle--124:var(--csstools-color-scheme--light) #fbfbfe; --menu-text-color:var(--csstools-light-dark-toggle--124, #15141a); + --menu-text-disabled-color:var(--menu-text-color); --menuitem-text-hover-fg:var(--menu-text-color); --menuitem-hover-bg:color-mix( in srgb, @@ -5360,6 +5376,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ transparent 86% ); --menuitem-hover-background-blend-mode:normal; + --disabled-opacity:0.62; } @supports (color: light-dark(red, red)){ @@ -5413,14 +5430,18 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --menu-box-shadow:none; --menu-backdrop-filter:none; --menu-text-color:ButtonText; + --menu-text-disabled-color:GrayText; --menu-border-color:CanvasText; --menuitem-border-color:none; --menuitem-hover-bg:SelectedItemText; --menuitem-text-hover-fg:SelectedItem; --menuitem-active-bg:SelectedItemText; + --menuitem-active-border-color:ButtonText; --menuitem-text-active-fg:SelectedItem; + --menuitem-focus-bg:ButtonFace; --menuitem-focus-outline-color:CanvasText; --menuitem-focus-border-color:none; + --disabled-opacity:1; } } @@ -5451,12 +5472,12 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --menu-mark-icon-size:16px; } -.popupMenu > li{ +.popupMenu > button{ display:flex; align-items:center; - list-style:none; + position:relative; width:100%; - height:24px; + height:26px; padding-inline:calc(var(--menu-mark-icon-size) + var(--menuitem-gap)) var(--menuitem-gap); gap:var(--menuitem-gap); box-sizing:border-box; @@ -5465,7 +5486,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ background:transparent; } -:is(.popupMenu > li):has(button.selected)::before{ +.selected:is(.popupMenu > button)::after{ content:""; display:inline-block; width:11px; @@ -5478,93 +5499,93 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ mask-image:var(--menuitem-checkmark-icon); background-color:var(--menu-text-color); position:absolute; - margin-inline-start:-16px; + inset-inline-start:var(--menuitem-gap); + top:50%; + transform:translateY(-50%); } -:is(.popupMenu > li):has(button:disabled){ - opacity:0.62; - pointer-events:none; +:is(.popupMenu > button):disabled{ + opacity:var(--disabled-opacity); } -:is(.popupMenu > li):hover{ - background:var(--menuitem-hover-bg); - background-blend-mode:var(--menuitem-hover-background-blend-mode); - } +.selected:is(.popupMenu > button):disabled::after{ + background-color:var(--menu-text-disabled-color); + } -:is(:is(.popupMenu > li):hover > button):not(.noIcon)::before{ +:is(.popupMenu > button):disabled:not(.noIcon)::before{ + background-color:var(--menu-text-disabled-color); + } + +:is(.popupMenu > button):disabled > span{ + color:var(--menu-text-disabled-color); + } + +:is(.popupMenu > button):not(:disabled):hover{ + background:var(--menuitem-hover-bg); + background-blend-mode:var(--menuitem-hover-background-blend-mode); + } + +:is(.popupMenu > button):not(:disabled):hover:not(.noIcon)::before{ background-color:var(--menuitem-text-hover-fg); } -:is(:is(.popupMenu > li):hover > button) > span{ +:is(.popupMenu > button):not(:disabled):hover > span{ color:var(--menuitem-text-hover-fg); } -:is(.popupMenu > li):hover:has(button.selected)::before{ - background-color:var(--menuitem-text-hover-fg); +.selected:is(.popupMenu > button):not(:disabled):hover::after{ + background-color:var(--menuitem-text-hover-fg); + } + +:is(.popupMenu > button):not(:disabled):active{ + background-color:var(--menuitem-active-bg); + border-color:var(--menuitem-active-border-color); } -:is(.popupMenu > li):active{ - background-color:var(--menuitem-active-bg); - } +:is(.popupMenu > button):not(:disabled):active > span{ + color:var(--menuitem-text-active-fg); + } -:is(.popupMenu > li):active > button > span{ - color:var(--menuitem-text-active-fg); +:is(.popupMenu > button):not(:disabled):focus-visible{ + border-color:var(--menuitem-focus-border-color); + background-color:var(--menuitem-focus-bg); + outline:2px solid var(--menuitem-focus-outline-color); + outline-offset:2px; } -:is(.popupMenu > li):has( > button:focus-visible){ - border-color:var(--menuitem-focus-border-color); - background-color:var(--menuitem-focus-bg); - outline:2px solid var(--menuitem-focus-outline-color); - outline-offset:2px; +:is(.popupMenu > button):not(.noIcon)::before{ + display:inline-block; + width:var(--menu-icon-size); + height:var(--menu-icon-size); + content:""; + -webkit-mask-size:cover; + mask-size:cover; + -webkit-mask-position:center; + mask-position:center; + background-color:var(--menu-text-color); } -:is(.popupMenu > li) > button{ +:is(.popupMenu > button) > span{ display:flex; - flex-direction:row; align-items:center; + align-self:stretch; width:100%; - height:auto; - padding:var(--menuitem-gap); - gap:var(--menuitem-gap); - background:transparent; - border:none; + min-width:-moz-max-content; + min-width:max-content; + text-align:start; + color:var(--menu-text-color); + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + padding-inline-start:6px; + + font:menu; + font-size:13px; + font-style:normal; + font-weight:510; + line-height:normal; } -:is(:is(.popupMenu > li) > button):not(.noIcon)::before{ - display:inline-block; - width:var(--menu-icon-size); - height:var(--menu-icon-size); - content:""; - -webkit-mask-size:cover; - mask-size:cover; - -webkit-mask-position:center; - mask-position:center; - background-color:var(--menu-text-color); - } - -:is(:is(.popupMenu > li) > button):focus-visible{ - outline:none; - } - -:is(:is(.popupMenu > li) > button) > span{ - display:inline-block; - width:-moz-max-content; - width:max-content; - height:auto; - text-align:start; - color:var(--menu-text-color); - -webkit-user-select:none; - -moz-user-select:none; - user-select:none; - padding-inline-start:6px; - - font:menu; - font-size:13px; - font-style:normal; - font-weight:510; - line-height:normal; - } - .treeView{ --csstools-light-dark-toggle--125:var(--csstools-color-scheme--light) rgb(255 255 255 / 0.8); --treeitem-color:var(--csstools-light-dark-toggle--125, rgb(0 0 0 / 0.8)); @@ -5812,6 +5833,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --image-current-shadow:0 0.375px 1.5px 0 var(--csstools-light-dark-toggle--153, rgb(0 0 0 / 0.05)), 0 0 0 var(--image-border-width) var(--image-current-border-color), 0 3px 12px 0 var(--csstools-light-dark-toggle--154, rgb(0 0 0 / 0.1)); --csstools-light-dark-toggle--155:var(--csstools-color-scheme--light) rgb(0 202 219 / 0.08); --image-dragging-placeholder-bg:var(--csstools-light-dark-toggle--155, rgb(0 98 250 / 0.08)); + --image-dragging-placeholder-border:var(--image-outline); --multiple-dragging-bg:white; --image-multiple-dragging-shadow:0 0 0 var(--image-border-width) var(--image-current-border-color), var(--image-border-width) var(--image-border-width) 0 calc(var(--image-border-width) / 2) var(--multiple-dragging-bg), var(--image-border-width) var(--image-border-width) 0 calc(3 * var(--image-border-width) / 2) var(--image-current-border-color); --image-dragging-shadow:0 0 0 var(--image-border-width) var(--image-current-border-color); @@ -6000,6 +6022,8 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --multiple-dragging-bg:Canvas; --multiple-dragging-indicator-bg:ButtonBorder; --multiple-dragging-text-color:Canvas; + --image-dragging-placeholder-bg:Canvas; + --image-dragging-placeholder-border:1px GrayText solid; } } @@ -6062,10 +6086,11 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ } .viewsCloseButton:is(#viewsManager .viewsManagerButton){ - width:32px; - height:32px; + width:26px; + height:26px; padding:4px; border-radius:8px; + background:none; } .viewsCloseButton:is(#viewsManager .viewsManagerButton)::before{ @@ -6085,7 +6110,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ } :is(#viewsManager #viewsManagerHeader) .viewsManagerLabel{ - flex:0; + flex:1 1 auto; color:var(--text-color); text-align:center; height:-moz-fit-content; @@ -6113,6 +6138,15 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ padding:12px 16px 12px 8px; } +:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle):not(:has(#viewsManagerHeaderLabel ~ button:not([hidden])))::after{ + + content:""; + flex:0 0 auto; + width:32px; + height:32px; + pointer-events:none; + } + :is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector{ width:48px; height:32px; @@ -6165,22 +6199,22 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ z-index:1; } -#thumbnailsViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > li > button)::before{ +#thumbnailsViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > button)::before{ -webkit-mask-image:var(--menuitem-thumbnailsView-icon); mask-image:var(--menuitem-thumbnailsView-icon); } -#outlinesViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > li > button)::before{ +#outlinesViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > button)::before{ -webkit-mask-image:var(--menuitem-outlinesView-icon); mask-image:var(--menuitem-outlinesView-icon); } -#attachmentsViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > li > button)::before{ +#attachmentsViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > button)::before{ -webkit-mask-image:var(--menuitem-attachmentsView-icon); mask-image:var(--menuitem-attachmentsView-icon); } -#layersViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > li > button)::before{ +#layersViewMenu:is(:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerTitle) #viewsManagerSelector) > .popupMenu) > button)::before{ -webkit-mask-image:var(--menuitem-layersView-icon); mask-image:var(--menuitem-layersView-icon); } @@ -6253,20 +6287,35 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ background-color:var(--status-actions-bg); } -:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerStatus) #viewsManagerStatusAction) > span.selected::before{ - content:""; - display:inline-block; +:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerStatus) #viewsManagerStatusAction) #viewsManagerStatusActionLabelContainer > button{ + position:relative; width:var(--icon-size); height:var(--icon-size); - -webkit-mask-repeat:no-repeat; - mask-repeat:no-repeat; - -webkit-mask-position:center; - mask-position:center; - background-color:var(--indicator-color); - -webkit-mask-image:var(--pages-selected-icon); - mask-image:var(--pages-selected-icon); + border:none; + padding:0; + flex:0 0 auto; } +:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerStatus) #viewsManagerStatusAction) #viewsManagerStatusActionLabelContainer > button)::before{ + content:""; + position:absolute; + inset:0; + -webkit-mask-repeat:no-repeat; + mask-repeat:no-repeat; + -webkit-mask-position:center; + mask-position:center; + background-color:var(--indicator-color); + -webkit-mask-image:var(--pages-selected-icon); + mask-image:var(--pages-selected-icon); + } + +#viewsManagerStatusActionDeselectButton:is(:is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerStatus) #viewsManagerStatusAction) #viewsManagerStatusActionLabelContainer > button):focus-visible{ + outline:2px solid var(--button-focus-outline-color); + border:1px solid var(--button-focus-border-color); + border-radius:2px; + outline-offset:1px; + } + :is(:is(:is(#viewsManager #viewsManagerHeader) #viewsManagerStatus) #viewsManagerStatusAction) #actionSelector{ height:32px; min-width:115px; @@ -6408,6 +6457,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ :is(#viewsManager #viewsManagerContent) #thumbnailsView{ --thumbnail-width:126px; + --gap-between-input-and-thumbnail:16px; display:flex; flex-flow:row wrap; @@ -6444,6 +6494,10 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ contain:strict; } +.pasteMode:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView){ + gap:var(--gap-between-input-and-thumbnail); + } + .pasteMode:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail{ flex-direction:column; } @@ -6473,14 +6527,24 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ :is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail{ --input-dim:16px; - --gap-between-input-and-thumbnail:16px; + } + +:is(:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail):not(:is(:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail):has(input)){ + --input-dim:0px; + --gap-between-input-and-thumbnail:0px; + } + +:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail{ display:inline-flex; justify-content:flex-end; align-items:center; flex-direction:row-reverse; gap:var(--gap-between-input-and-thumbnail); - width:190px; + width:calc( + var(--thumbnail-width) + 2 * + (var(--input-dim) + var(--gap-between-input-and-thumbnail)) + ); height:auto; position:relative; scroll-margin-top:20px; @@ -6654,6 +6718,7 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ .placeholder:is(:is(:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail) > .thumbnailImageContainer){ background-color:var(--image-dragging-placeholder-bg); box-shadow:none !important; + outline:var(--image-dragging-placeholder-border); } .draggingThumbnail:is(:is(:is(:is(#viewsManager #viewsManagerContent) #thumbnailsView) > .thumbnail) > .thumbnailImageContainer){ @@ -6916,11 +6981,18 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --csstools-light-dark-toggle--165:var(--csstools-color-scheme--light) #0df; --focus-ring-color:var(--csstools-light-dark-toggle--165, #0060df); --focus-ring-outline:2px solid var(--focus-ring-color); + --csstools-light-dark-toggle--166:var(--csstools-color-scheme--light) #37b847; + --new-badge-bg:var(--csstools-light-dark-toggle--166, #070); + --csstools-light-dark-toggle--167:var(--csstools-color-scheme--light) #15141a; + --new-badge-color:var(--csstools-light-dark-toggle--167, #fff); + --new-badge-border-color:light-dark(#fbfbfe / 40%, #15141a / 40%); } @supports (color: light-dark(red, red)){ :root{ --focus-ring-color:light-dark(#0060df, #0df); + --new-badge-bg:light-dark(#070, #37b847); + --new-badge-color:light-dark(#fff, #15141a); } } @@ -6929,6 +7001,10 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ :root *{ --csstools-light-dark-toggle--165:var(--csstools-color-scheme--light) #0df; --focus-ring-color:var(--csstools-light-dark-toggle--165, #0060df); + --csstools-light-dark-toggle--166:var(--csstools-color-scheme--light) #37b847; + --new-badge-bg:var(--csstools-light-dark-toggle--166, #070); + --csstools-light-dark-toggle--167:var(--csstools-color-scheme--light) #15141a; + --new-badge-color:var(--csstools-light-dark-toggle--167, #fff); } } @@ -6947,9 +7023,30 @@ button.hasPopupMenu[aria-expanded="false"] + menu{ --page-border:1px solid CanvasText; --spreadHorizontalWrapped-margin-LR:3.5px; --focus-ring-color:CanvasText; + --new-badge-bg:AccentColor; + --new-badge-color:ButtonFace; + --new-badge-border-color:CanvasText; } } +.newBadge{ + background-color:var(--new-badge-bg); + color:var(--new-badge-color); + border-radius:4px; + border:1px solid var(--new-badge-border-color); + padding-inline:4px; + margin-inline:4px; + font:menu; + font-size:12px; + font-style:normal; + font-weight:400; + line-height:normal; + flex:0 0 fit-content; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; +} + [data-main-rotation="90"]{ transform:rotate(90deg) translateY(-100%); } diff --git a/packages/pdfjs-viewer/viewer/viewer.html b/packages/pdfjs-viewer/viewer/viewer.html index bc5940153d..a7f2328d09 100644 --- a/packages/pdfjs-viewer/viewer/viewer.html +++ b/packages/pdfjs-viewer/viewer/viewer.html @@ -67,7 +67,7 @@ See https://github.com/adobe-type-tools/cmap-resources aria-describedby="viewsManagerHeaderLabel" data-l10n-id="pdfjs-views-manager-sidebar" > -
+
-
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • + + + +
    - + + +
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • + + + +
    -
    +
    @@ -1136,7 +1131,7 @@ See https://github.com/adobe-type-tools/cmap-resources -
    +
    diff --git a/packages/pdfjs-viewer/viewer/viewer.mjs b/packages/pdfjs-viewer/viewer/viewer.mjs index 4b86468c59..3bb869d809 100644 --- a/packages/pdfjs-viewer/viewer/viewer.mjs +++ b/packages/pdfjs-viewer/viewer/viewer.mjs @@ -21,8 +21,8 @@ */ /** - * pdfjsVersion = 5.5.207 - * pdfjsBuild = 527964698 + * pdfjsVersion = 5.6.205 + * pdfjsBuild = ada343803 */ /******/ // The require scope /******/ var __webpack_require__ = {}; @@ -48,76 +48,12 @@ /************************************************************************/ var __webpack_exports__ = {}; -;// ./web/pdfjs.js -const { - AbortException, - AnnotationEditorLayer, - AnnotationEditorParamsType, - AnnotationEditorType, - AnnotationEditorUIManager, - AnnotationLayer, - AnnotationMode, - AnnotationType, - applyOpacity, - build, - ColorPicker, - createValidAbsoluteUrl, - CSSConstants, - DOMSVGFactory, - DrawLayer, - FeatureTest, - fetchData, - findContrastColor, - getDocument, - getFilenameFromUrl, - getPdfFilenameFromUrl, - getRGB, - getUuid, - getXfaPageViewport, - GlobalWorkerOptions, - ImageKind, - InvalidPDFException, - isDataScheme, - isPdfFile, - isValidExplicitDest, - makeArr, - makeMap, - makeObj, - MathClamp, - noContextMenu, - normalizeUnicode, - OPS, - OutputScale, - PasswordResponses, - PDFDataRangeTransport, - PDFDateString, - PDFWorker, - PermissionFlag, - PixelsPerInch, - RenderingCancelledException, - renderRichText, - ResponseException, - setLayerDimensions, - shadow, - SignatureExtractor, - stopEvent, - SupportedImageMimeTypes, - TextLayer, - TouchManager, - updateUrlHash, - Util, - VerbosityLevel, - version, - XfaLayer -} = globalThis.pdfjsLib; - ;// ./web/ui_utils.js - const DEFAULT_SCALE_VALUE = "auto"; const DEFAULT_SCALE = 1.0; const DEFAULT_SCALE_DELTA = 1.1; const MIN_SCALE = 0.1; -const MAX_SCALE = 10.0; +const MAX_SCALE = 25.0; const UNKNOWN_SCALE = 0; const MAX_AUTO_SCALE = 1.25; const SCROLLBAR_PADDING = 40; @@ -160,7 +96,7 @@ const CursorTool = { ZOOM: 2 }; const AutoPrintRegExp = /\bprint\s*\(/; -function scrollIntoView(element, spot, scrollMatches = false) { +function scrollIntoView(element, spot) { let parent = element.offsetParent; if (!parent) { console.error("offsetParent is not set -- cannot scroll"); @@ -168,7 +104,7 @@ function scrollIntoView(element, spot, scrollMatches = false) { } let offsetY = element.offsetTop + element.clientTop; let offsetX = element.offsetLeft + element.clientLeft; - while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains("markedContent") || getComputedStyle(parent).overflow === "hidden")) { + while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth) { offsetY += parent.offsetTop; offsetX += parent.offsetLeft; parent = parent.offsetParent; @@ -181,13 +117,7 @@ function scrollIntoView(element, spot, scrollMatches = false) { offsetY += spot.top; } if (spot.left !== undefined) { - if (scrollMatches) { - const elementWidth = element.getBoundingClientRect().width; - const padding = MathClamp((parent.clientWidth - elementWidth) / 2, 20, 400); - offsetX += spot.left - padding; - } else { - offsetX += spot.left; - } + offsetX += spot.left; parent.scrollLeft = offsetX; } } @@ -766,6 +696,10 @@ const defaultOptions = { value: true, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, + enableNewBadge: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, enableOptimizedPartialRendering: { value: false, kind: OptionKind.VIEWER + OptionKind.PREFERENCE @@ -818,6 +752,10 @@ const defaultOptions = { value: "./images/", kind: OptionKind.VIEWER }, + imagesRightClickMinSize: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, maxCanvasPixels: { value: 2 ** 25, kind: OptionKind.VIEWER @@ -900,7 +838,11 @@ const defaultOptions = { }, enableHWA: { value: true, - kind: OptionKind.API + OptionKind.VIEWER + OptionKind.PREFERENCE + kind: OptionKind.API + OptionKind.PREFERENCE + }, + enableWebGPU: { + value: true, + kind: OptionKind.API + OptionKind.PREFERENCE }, enableXfa: { value: true, @@ -1047,6 +989,70 @@ class AppOptions { } } +;// ./web/pdfjs.js +const { + AbortException, + AnnotationEditorLayer, + AnnotationEditorParamsType, + AnnotationEditorType, + AnnotationEditorUIManager, + AnnotationLayer, + AnnotationMode, + AnnotationType, + applyOpacity, + build, + ColorPicker, + createValidAbsoluteUrl, + CSSConstants, + DOMSVGFactory, + DrawLayer, + FeatureTest, + fetchData, + findContrastColor, + getDocument, + getFilenameFromUrl, + getPdfFilenameFromUrl, + getRGB, + getUuid, + getXfaPageViewport, + GlobalWorkerOptions, + ImageKind, + InvalidPDFException, + isDataScheme, + isPdfFile, + isValidExplicitDest, + makeArr, + makeMap, + makeObj, + MathClamp, + noContextMenu, + normalizeUnicode, + OPS, + OutputScale, + PasswordResponses, + PDFDataRangeTransport, + PDFDateString, + PDFWorker, + PermissionFlag, + PixelsPerInch, + RenderingCancelledException, + renderRichText, + ResponseException, + setLayerDimensions, + shadow, + SignatureExtractor, + stopEvent, + SupportedImageMimeTypes, + TextLayer, + TextLayerImages, + TouchManager, + updateUrlHash, + Util, + VerbosityLevel, + version, + XfaLayer +} = globalThis.pdfjsLib; + ;// ./web/pdf_link_service.js @@ -3117,7 +3123,7 @@ class genericl10n_GenericL10n extends L10n { yield this.#createBundleFallback(lang); } static async #createBundleFallback(lang) { - const text = "pdfjs-previous-button =\n .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n .title = Next Page\npdfjs-next-button-label = Next\npdfjs-page-input =\n .title = Page\npdfjs-of-pages = of { $pagesCount }\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n .title = Zoom\npdfjs-presentation-mode-button =\n .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n .title = Save\npdfjs-save-button-label = Save\npdfjs-download-button =\n .title = Download\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\npdfjs-tools-button =\n .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\npdfjs-document-properties-button =\n .title = Document Properties\u2026\npdfjs-document-properties-button-label = Document Properties\u2026\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\npdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes)\npdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\npdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\npdfjs-document-properties-page-size-dimension-string = { $width } \xD7 { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } \xD7 { $height } { $unit } ({ $name }, { $orientation })\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\npdfjs-print-progress-message = Preparing document for printing\u2026\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\npdfjs-current-outline-item-button =\n .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\npdfjs-thumb-page-title1 =\n .title = Page { $page } of { $total }\npdfjs-thumb-page-canvas =\n .aria-label = Thumbnail of Page { $page }\npdfjs-thumb-page-checkbox1 =\n .title = Select page { $page }\npdfjs-find-input =\n .title = Find\n .placeholder = Find in document\u2026\npdfjs-find-previous-button =\n .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-match-count =\n { $total ->\n [one] { $current } of { $total } match\n *[other] { $current } of { $total } matches\n }\npdfjs-find-match-count-limit =\n { $limit ->\n [one] More than { $limit } match\n *[other] More than { $limit } matches\n }\npdfjs-find-not-found = Phrase not found\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\npdfjs-page-scale-percent = { $scale }%\npdfjs-page-landmark =\n .aria-label = Page { $page }\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\npdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-text-annotation-type =\n .alt = [{ $type } Annotation]\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\npdfjs-editor-free-text-button =\n .title = Text\npdfjs-editor-color-picker-free-text-input =\n .title = Change text color\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n .title = Draw\npdfjs-editor-color-picker-ink-input =\n .title = Change drawing color\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button1 =\n .title = Highlight\n .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\npdfjs-comment-floating-button =\n .title = Comment\n .aria-label = Comment\npdfjs-comment-floating-button-label = Comment\npdfjs-editor-comment-button =\n .title = Comment\n .aria-label = Comment\npdfjs-editor-comment-button-label = Comment\npdfjs-editor-signature-button =\n .title = Add signature\npdfjs-editor-signature-button-label = Add signature\npdfjs-editor-highlight-editor =\n .aria-label = Highlight editor\npdfjs-editor-ink-editor =\n .aria-label = Drawing editor\npdfjs-editor-signature-editor1 =\n .aria-description = Signature editor: { $description }\npdfjs-editor-stamp-editor =\n .aria-label = Image editor\npdfjs-editor-remove-ink-button =\n .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n .title = Remove text\npdfjs-editor-remove-stamp-button =\n .title = Remove image\npdfjs-editor-remove-highlight-button =\n .title = Remove highlight\npdfjs-editor-remove-signature-button =\n .title = Remove signature\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n .title = Change thickness when highlighting items other than text\npdfjs-editor-add-signature-container =\n .aria-label = Signature controls and saved signatures\npdfjs-editor-signature-add-signature-button =\n .title = Add new signature\npdfjs-editor-signature-add-signature-button-label = Add new signature\npdfjs-editor-add-saved-signature-button =\n .title = Saved signature: { $description }\npdfjs-free-text2 =\n .aria-label = Text Editor\n .default-content = Start typing\u2026\npdfjs-editor-comments-sidebar-title =\n { $count ->\n [one] Comment\n *[other] Comments\n }\npdfjs-editor-comments-sidebar-close-button =\n .title = Close the sidebar\n .aria-label = Close the sidebar\npdfjs-editor-comments-sidebar-close-button-label = Close the sidebar\npdfjs-editor-comments-sidebar-no-comments1 = See something noteworthy? Highlight it and leave a comment.\npdfjs-editor-comments-sidebar-no-comments-link = Learn more\npdfjs-editor-alt-text-button =\n .aria-label = Alt text\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button =\n .aria-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can\u2019t see the image or when it doesn\u2019t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\npdfjs-editor-alt-text-textarea =\n .placeholder = For example, \u201CA young man sits down at a table to eat a meal\u201D\npdfjs-editor-resizer-top-left =\n .aria-label = Top left corner \u2014 resize\npdfjs-editor-resizer-top-middle =\n .aria-label = Top middle \u2014 resize\npdfjs-editor-resizer-top-right =\n .aria-label = Top right corner \u2014 resize\npdfjs-editor-resizer-middle-right =\n .aria-label = Middle right \u2014 resize\npdfjs-editor-resizer-bottom-right =\n .aria-label = Bottom right corner \u2014 resize\npdfjs-editor-resizer-bottom-middle =\n .aria-label = Bottom middle \u2014 resize\npdfjs-editor-resizer-bottom-left =\n .aria-label = Bottom left corner \u2014 resize\npdfjs-editor-resizer-middle-left =\n .aria-label = Middle left \u2014 resize\npdfjs-editor-highlight-colorpicker-label = Highlight color\npdfjs-editor-colorpicker-button =\n .title = Change color\npdfjs-editor-colorpicker-dropdown =\n .aria-label = Color choices\npdfjs-editor-colorpicker-yellow =\n .title = Yellow\npdfjs-editor-colorpicker-green =\n .title = Green\npdfjs-editor-colorpicker-blue =\n .title = Blue\npdfjs-editor-colorpicker-pink =\n .title = Pink\npdfjs-editor-colorpicker-red =\n .title = Red\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n .title = Show all\npdfjs-editor-new-alt-text-dialog-edit-label = Edit alt text (image description)\npdfjs-editor-new-alt-text-dialog-add-label = Add alt text (image description)\npdfjs-editor-new-alt-text-textarea =\n .placeholder = Write your description here\u2026\npdfjs-editor-new-alt-text-description = Short description for people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate.\npdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more\npdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically\npdfjs-editor-new-alt-text-not-now-button = Not now\npdfjs-editor-new-alt-text-error-title = Couldn\u2019t create alt text automatically\npdfjs-editor-new-alt-text-error-description = Please write your own alt text or try again later.\npdfjs-editor-new-alt-text-error-close-button = Close\npdfjs-editor-new-alt-text-ai-model-downloading-progress = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\n .aria-valuetext = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\npdfjs-editor-new-alt-text-added-button =\n .aria-label = Alt text added\npdfjs-editor-new-alt-text-added-button-label = Alt text added\npdfjs-editor-new-alt-text-missing-button =\n .aria-label = Missing alt text\npdfjs-editor-new-alt-text-missing-button-label = Missing alt text\npdfjs-editor-new-alt-text-to-review-button =\n .aria-label = Review alt text\npdfjs-editor-new-alt-text-to-review-button-label = Review alt text\npdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Created automatically: { $generatedAltText }\npdfjs-image-alt-text-settings-button =\n .title = Image alt text settings\npdfjs-image-alt-text-settings-button-label = Image alt text settings\npdfjs-editor-alt-text-settings-dialog-label = Image alt text settings\npdfjs-editor-alt-text-settings-automatic-title = Automatic alt text\npdfjs-editor-alt-text-settings-create-model-button-label = Create alt text automatically\npdfjs-editor-alt-text-settings-create-model-description = Suggests descriptions to help people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-alt-text-settings-editor-title = Alt text editor\npdfjs-editor-alt-text-settings-show-dialog-button-label = Show alt text editor right away when adding an image\npdfjs-editor-alt-text-settings-show-dialog-description = Helps you make sure all your images have alt text.\npdfjs-editor-alt-text-settings-close-button = Close\npdfjs-editor-highlight-added-alert = Highlight added\npdfjs-editor-freetext-added-alert = Text added\npdfjs-editor-ink-added-alert = Drawing added\npdfjs-editor-stamp-added-alert = Image added\npdfjs-editor-signature-added-alert = Signature added\npdfjs-editor-undo-bar-message-highlight = Highlight removed\npdfjs-editor-undo-bar-message-freetext = Text removed\npdfjs-editor-undo-bar-message-ink = Drawing removed\npdfjs-editor-undo-bar-message-stamp = Image removed\npdfjs-editor-undo-bar-message-signature = Signature removed\npdfjs-editor-undo-bar-message-comment = Comment removed\npdfjs-editor-undo-bar-message-multiple =\n { $count ->\n [one] { $count } annotation removed\n *[other] { $count } annotations removed\n }\npdfjs-editor-undo-bar-undo-button =\n .title = Undo\npdfjs-editor-undo-bar-undo-button-label = Undo\npdfjs-editor-undo-bar-close-button =\n .title = Close\npdfjs-editor-undo-bar-close-button-label = Close\npdfjs-editor-add-signature-dialog-label = This modal allows the user to create a signature to add to a PDF document. The user can edit the name (which also serves as the alt text), and optionally save the signature for repeated use.\npdfjs-editor-add-signature-dialog-title = Add a signature\npdfjs-editor-add-signature-type-button = Type\n .title = Type\npdfjs-editor-add-signature-draw-button = Draw\n .title = Draw\npdfjs-editor-add-signature-image-button = Image\n .title = Image\npdfjs-editor-add-signature-type-input =\n .aria-label = Type your signature\n .placeholder = Type your signature\npdfjs-editor-add-signature-draw-placeholder = Draw your signature\npdfjs-editor-add-signature-draw-thickness-range-label = Thickness\npdfjs-editor-add-signature-draw-thickness-range =\n .title = Drawing thickness: { $thickness }\npdfjs-editor-add-signature-image-placeholder = Drag a file here to upload\npdfjs-editor-add-signature-image-browse-link =\n { PLATFORM() ->\n [macos] Or choose image files\n *[other] Or browse image files\n }\npdfjs-editor-add-signature-description-label = Description (alt text)\npdfjs-editor-add-signature-description-input =\n .title = Description (alt text)\npdfjs-editor-add-signature-description-default-when-drawing = Signature\npdfjs-editor-add-signature-clear-button-label = Clear signature\npdfjs-editor-add-signature-clear-button =\n .title = Clear signature\npdfjs-editor-add-signature-save-checkbox = Save signature\npdfjs-editor-add-signature-save-warning-message = You\u2019ve reached the limit of 5 saved signatures. Remove one to save more.\npdfjs-editor-add-signature-image-upload-error-title = Couldn\u2019t upload image\npdfjs-editor-add-signature-image-upload-error-description = Check your network connection or try another image.\npdfjs-editor-add-signature-image-no-data-error-title = Can\u2019t convert this image into a signature\npdfjs-editor-add-signature-image-no-data-error-description = Please try uploading a different image.\npdfjs-editor-add-signature-error-close-button = Close\npdfjs-editor-add-signature-cancel-button = Cancel\npdfjs-editor-add-signature-add-button = Add\npdfjs-editor-delete-signature-button1 =\n .title = Remove saved signature\npdfjs-editor-delete-signature-button-label1 = Remove saved signature\npdfjs-editor-add-signature-edit-button-label = Edit description\npdfjs-editor-edit-signature-dialog-title = Edit description\npdfjs-editor-edit-signature-update-button = Update\npdfjs-show-comment-button =\n .title = Show comment\npdfjs-editor-edit-comment-popup-button-label = Edit comment\npdfjs-editor-edit-comment-popup-button =\n .title = Edit comment\npdfjs-editor-delete-comment-popup-button-label = Remove comment\npdfjs-editor-delete-comment-popup-button =\n .title = Remove comment\npdfjs-editor-edit-comment-dialog-title-when-editing = Edit comment\npdfjs-editor-edit-comment-dialog-save-button-when-editing = Update\npdfjs-editor-edit-comment-dialog-title-when-adding = Add comment\npdfjs-editor-edit-comment-dialog-save-button-when-adding = Add\npdfjs-editor-edit-comment-dialog-text-input =\n .placeholder = Start typing\u2026\npdfjs-editor-edit-comment-dialog-cancel-button = Cancel\npdfjs-editor-add-comment-button =\n .title = Add comment\npdfjs-toggle-views-manager-button1 =\n .title = Manage pages\npdfjs-toggle-views-manager-notification-button =\n .title = Toggle Sidebar (document contains thumbnails/outline/attachments/layers)\npdfjs-toggle-views-manager-button1-label = Manage pages\npdfjs-views-manager-sidebar =\n .aria-label = Sidebar\npdfjs-views-manager-sidebar-resizer =\n .aria-label = Sidebar resizer\npdfjs-views-manager-view-selector-button =\n .title = Views\npdfjs-views-manager-view-selector-button-label = Views\npdfjs-views-manager-pages-title = Pages\npdfjs-views-manager-outlines-title = Document outline\npdfjs-views-manager-attachments-title = Attachments\npdfjs-views-manager-layers-title = Layers\npdfjs-views-manager-pages-option-label = Pages\npdfjs-views-manager-outlines-option-label = Document outline\npdfjs-views-manager-attachments-option-label = Attachments\npdfjs-views-manager-layers-option-label = Layers\npdfjs-views-manager-add-file-button =\n .title = Add file\npdfjs-views-manager-add-file-button-label = Add file\npdfjs-views-manager-pages-status-action-label =\n { $count ->\n [one] { $count } selected\n *[other] { $count } selected\n }\npdfjs-views-manager-pages-status-none-action-label = Select pages\npdfjs-views-manager-pages-status-action-button-label = Manage\npdfjs-views-manager-pages-status-copy-button-label = Copy\npdfjs-views-manager-pages-status-cut-button-label = Cut\npdfjs-views-manager-pages-status-delete-button-label = Delete\npdfjs-views-manager-pages-status-save-as-button-label = Save as\u2026\npdfjs-views-manager-status-undo-cut-label =\n { $count ->\n [one] 1 page cut\n *[other] { $count } pages cut\n }\npdfjs-views-manager-pages-status-undo-copy-label =\n { $count ->\n [one] 1 page copied\n *[other] { $count } pages copied\n }\npdfjs-views-manager-pages-status-undo-delete-label =\n { $count ->\n [one] 1 page deleted\n *[other] { $count } pages deleted\n }\npdfjs-views-manager-pages-status-waiting-ready-label = Getting your file ready\u2026\npdfjs-views-manager-pages-status-waiting-uploading-label = Uploading file\u2026\npdfjs-views-manager-status-warning-cut-label = Couldn\u2019t cut. Refresh page and try again.\npdfjs-views-manager-status-warning-copy-label = Couldn\u2019t copy. Refresh page and try again.\npdfjs-views-manager-status-warning-delete-label = Couldn\u2019t delete. Refresh page and try again.\npdfjs-views-manager-status-warning-save-label = Couldn\u2019t save. Refresh page and try again.\npdfjs-views-manager-status-undo-button-label = Undo\npdfjs-views-manager-status-close-button =\n .title = Close\npdfjs-views-manager-status-close-button-label = Close\npdfjs-views-manager-paste-button-label = Paste"; + const text = "pdfjs-previous-button =\n .title = Previous Page\npdfjs-previous-button-label = Previous\npdfjs-next-button =\n .title = Next Page\npdfjs-next-button-label = Next\npdfjs-page-input =\n .title = Page\npdfjs-of-pages = of { $pagesCount }\npdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })\npdfjs-zoom-out-button =\n .title = Zoom Out\npdfjs-zoom-out-button-label = Zoom Out\npdfjs-zoom-in-button =\n .title = Zoom In\npdfjs-zoom-in-button-label = Zoom In\npdfjs-zoom-select =\n .title = Zoom\npdfjs-presentation-mode-button =\n .title = Switch to Presentation Mode\npdfjs-presentation-mode-button-label = Presentation Mode\npdfjs-open-file-button =\n .title = Open File\npdfjs-open-file-button-label = Open\npdfjs-print-button =\n .title = Print\npdfjs-print-button-label = Print\npdfjs-save-button =\n .title = Save\npdfjs-save-button-label = Save\npdfjs-download-button =\n .title = Download\npdfjs-download-button-label = Download\npdfjs-bookmark-button =\n .title = Current Page (View URL from Current Page)\npdfjs-bookmark-button-label = Current Page\npdfjs-tools-button =\n .title = Tools\npdfjs-tools-button-label = Tools\npdfjs-first-page-button =\n .title = Go to First Page\npdfjs-first-page-button-label = Go to First Page\npdfjs-last-page-button =\n .title = Go to Last Page\npdfjs-last-page-button-label = Go to Last Page\npdfjs-page-rotate-cw-button =\n .title = Rotate Clockwise\npdfjs-page-rotate-cw-button-label = Rotate Clockwise\npdfjs-page-rotate-ccw-button =\n .title = Rotate Counterclockwise\npdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise\npdfjs-cursor-text-select-tool-button =\n .title = Enable Text Selection Tool\npdfjs-cursor-text-select-tool-button-label = Text Selection Tool\npdfjs-cursor-hand-tool-button =\n .title = Enable Hand Tool\npdfjs-cursor-hand-tool-button-label = Hand Tool\npdfjs-scroll-page-button =\n .title = Use Page Scrolling\npdfjs-scroll-page-button-label = Page Scrolling\npdfjs-scroll-vertical-button =\n .title = Use Vertical Scrolling\npdfjs-scroll-vertical-button-label = Vertical Scrolling\npdfjs-scroll-horizontal-button =\n .title = Use Horizontal Scrolling\npdfjs-scroll-horizontal-button-label = Horizontal Scrolling\npdfjs-scroll-wrapped-button =\n .title = Use Wrapped Scrolling\npdfjs-scroll-wrapped-button-label = Wrapped Scrolling\npdfjs-spread-none-button =\n .title = Do not join page spreads\npdfjs-spread-none-button-label = No Spreads\npdfjs-spread-odd-button =\n .title = Join page spreads starting with odd-numbered pages\npdfjs-spread-odd-button-label = Odd Spreads\npdfjs-spread-even-button =\n .title = Join page spreads starting with even-numbered pages\npdfjs-spread-even-button-label = Even Spreads\npdfjs-document-properties-button =\n .title = Document Properties\u2026\npdfjs-document-properties-button-label = Document Properties\u2026\npdfjs-document-properties-file-name = File name:\npdfjs-document-properties-file-size = File size:\npdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes)\npdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes)\npdfjs-document-properties-title = Title:\npdfjs-document-properties-author = Author:\npdfjs-document-properties-subject = Subject:\npdfjs-document-properties-keywords = Keywords:\npdfjs-document-properties-creation-date = Creation Date:\npdfjs-document-properties-modification-date = Modification Date:\npdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-document-properties-creator = Creator:\npdfjs-document-properties-producer = PDF Producer:\npdfjs-document-properties-version = PDF Version:\npdfjs-document-properties-page-count = Page Count:\npdfjs-document-properties-page-size = Page Size:\npdfjs-document-properties-page-size-unit-inches = in\npdfjs-document-properties-page-size-unit-millimeters = mm\npdfjs-document-properties-page-size-orientation-portrait = portrait\npdfjs-document-properties-page-size-orientation-landscape = landscape\npdfjs-document-properties-page-size-name-a-three = A3\npdfjs-document-properties-page-size-name-a-four = A4\npdfjs-document-properties-page-size-name-letter = Letter\npdfjs-document-properties-page-size-name-legal = Legal\npdfjs-document-properties-page-size-dimension-string = { $width } \xD7 { $height } { $unit } ({ $orientation })\npdfjs-document-properties-page-size-dimension-name-string = { $width } \xD7 { $height } { $unit } ({ $name }, { $orientation })\npdfjs-document-properties-linearized = Fast Web View:\npdfjs-document-properties-linearized-yes = Yes\npdfjs-document-properties-linearized-no = No\npdfjs-document-properties-close-button = Close\npdfjs-print-progress-message = Preparing document for printing\u2026\npdfjs-print-progress-percent = { $progress }%\npdfjs-print-progress-close-button = Cancel\npdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.\npdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.\npdfjs-current-outline-item-button =\n .title = Find Current Outline Item\npdfjs-current-outline-item-button-label = Current Outline Item\npdfjs-findbar-button =\n .title = Find in Document\npdfjs-findbar-button-label = Find\npdfjs-additional-layers = Additional Layers\npdfjs-thumb-page-title1 =\n .title = Page { $page } of { $total }\npdfjs-thumb-page-canvas =\n .aria-label = Thumbnail of Page { $page }\npdfjs-thumb-page-checkbox1 =\n .title = Select page { $page }\npdfjs-find-input =\n .title = Find\n .placeholder = Find in document\u2026\npdfjs-find-previous-button =\n .title = Find the previous occurrence of the phrase\npdfjs-find-previous-button-label = Previous\npdfjs-find-next-button =\n .title = Find the next occurrence of the phrase\npdfjs-find-next-button-label = Next\npdfjs-find-highlight-checkbox = Highlight All\npdfjs-find-match-case-checkbox-label = Match Case\npdfjs-find-match-diacritics-checkbox-label = Match Diacritics\npdfjs-find-entire-word-checkbox-label = Whole Words\npdfjs-find-reached-top = Reached top of document, continued from bottom\npdfjs-find-reached-bottom = Reached end of document, continued from top\npdfjs-find-match-count =\n { $total ->\n [one] { $current } of { $total } match\n *[other] { $current } of { $total } matches\n }\npdfjs-find-match-count-limit =\n { $limit ->\n [one] More than { $limit } match\n *[other] More than { $limit } matches\n }\npdfjs-find-not-found = Phrase not found\npdfjs-page-scale-width = Page Width\npdfjs-page-scale-fit = Page Fit\npdfjs-page-scale-auto = Automatic Zoom\npdfjs-page-scale-actual = Actual Size\npdfjs-page-scale-percent = { $scale }%\npdfjs-page-landmark =\n .aria-label = Page { $page }\npdfjs-loading-error = An error occurred while loading the PDF.\npdfjs-invalid-file-error = Invalid or corrupted PDF file.\npdfjs-missing-file-error = Missing PDF file.\npdfjs-unexpected-response-error = Unexpected server response.\npdfjs-rendering-error = An error occurred while rendering the page.\npdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: \"short\", timeStyle: \"medium\") }\npdfjs-text-annotation-type =\n .alt = [{ $type } Annotation]\npdfjs-password-label = Enter the password to open this PDF file.\npdfjs-password-invalid = Invalid password. Please try again.\npdfjs-password-ok-button = OK\npdfjs-password-cancel-button = Cancel\npdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.\npdfjs-editor-free-text-button =\n .title = Text\npdfjs-editor-color-picker-free-text-input =\n .title = Change text color\npdfjs-editor-free-text-button-label = Text\npdfjs-editor-ink-button =\n .title = Draw\npdfjs-editor-color-picker-ink-input =\n .title = Change drawing color\npdfjs-editor-ink-button-label = Draw\npdfjs-editor-stamp-button =\n .title = Add or edit images\npdfjs-editor-stamp-button-label = Add or edit images\npdfjs-editor-highlight-button =\n .title = Highlight\npdfjs-editor-highlight-button-label = Highlight\npdfjs-highlight-floating-button1 =\n .title = Highlight\n .aria-label = Highlight\npdfjs-highlight-floating-button-label = Highlight\npdfjs-comment-floating-button =\n .title = Comment\n .aria-label = Comment\npdfjs-comment-floating-button-label = Comment\npdfjs-editor-comment-button =\n .title = Comment\n .aria-label = Comment\npdfjs-editor-comment-button-label = Comment\npdfjs-editor-signature-button =\n .title = Add signature\npdfjs-editor-signature-button-label = Add signature\npdfjs-editor-highlight-editor =\n .aria-label = Highlight editor\npdfjs-editor-ink-editor =\n .aria-label = Drawing editor\npdfjs-editor-signature-editor1 =\n .aria-description = Signature editor: { $description }\npdfjs-editor-stamp-editor =\n .aria-label = Image editor\npdfjs-editor-remove-ink-button =\n .title = Remove drawing\npdfjs-editor-remove-freetext-button =\n .title = Remove text\npdfjs-editor-remove-stamp-button =\n .title = Remove image\npdfjs-editor-remove-highlight-button =\n .title = Remove highlight\npdfjs-editor-remove-signature-button =\n .title = Remove signature\npdfjs-editor-free-text-color-input = Color\npdfjs-editor-free-text-size-input = Size\npdfjs-editor-ink-color-input = Color\npdfjs-editor-ink-thickness-input = Thickness\npdfjs-editor-ink-opacity-input = Opacity\npdfjs-editor-stamp-add-image-button =\n .title = Add image\npdfjs-editor-stamp-add-image-button-label = Add image\npdfjs-editor-free-highlight-thickness-input = Thickness\npdfjs-editor-free-highlight-thickness-title =\n .title = Change thickness when highlighting items other than text\npdfjs-editor-add-signature-container =\n .aria-label = Signature controls and saved signatures\npdfjs-editor-signature-add-signature-button =\n .title = Add new signature\npdfjs-editor-signature-add-signature-button-label = Add new signature\npdfjs-editor-add-saved-signature-button =\n .title = Saved signature: { $description }\npdfjs-free-text2 =\n .aria-label = Text Editor\n .default-content = Start typing\u2026\npdfjs-editor-comments-sidebar-title =\n { $count ->\n [one] Comment\n *[other] Comments\n }\npdfjs-editor-comments-sidebar-close-button =\n .title = Close the sidebar\n .aria-label = Close the sidebar\npdfjs-editor-comments-sidebar-close-button-label = Close the sidebar\npdfjs-editor-comments-sidebar-no-comments1 = See something noteworthy? Highlight it and leave a comment.\npdfjs-editor-comments-sidebar-no-comments-link = Learn more\npdfjs-editor-alt-text-button =\n .aria-label = Alt text\npdfjs-editor-alt-text-button-label = Alt text\npdfjs-editor-alt-text-edit-button =\n .aria-label = Edit alt text\npdfjs-editor-alt-text-dialog-label = Choose an option\npdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can\u2019t see the image or when it doesn\u2019t load.\npdfjs-editor-alt-text-add-description-label = Add a description\npdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.\npdfjs-editor-alt-text-mark-decorative-label = Mark as decorative\npdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.\npdfjs-editor-alt-text-cancel-button = Cancel\npdfjs-editor-alt-text-save-button = Save\npdfjs-editor-alt-text-decorative-tooltip = Marked as decorative\npdfjs-editor-alt-text-textarea =\n .placeholder = For example, \u201CA young man sits down at a table to eat a meal\u201D\npdfjs-editor-resizer-top-left =\n .aria-label = Top left corner \u2014 resize\npdfjs-editor-resizer-top-middle =\n .aria-label = Top middle \u2014 resize\npdfjs-editor-resizer-top-right =\n .aria-label = Top right corner \u2014 resize\npdfjs-editor-resizer-middle-right =\n .aria-label = Middle right \u2014 resize\npdfjs-editor-resizer-bottom-right =\n .aria-label = Bottom right corner \u2014 resize\npdfjs-editor-resizer-bottom-middle =\n .aria-label = Bottom middle \u2014 resize\npdfjs-editor-resizer-bottom-left =\n .aria-label = Bottom left corner \u2014 resize\npdfjs-editor-resizer-middle-left =\n .aria-label = Middle left \u2014 resize\npdfjs-editor-highlight-colorpicker-label = Highlight color\npdfjs-editor-colorpicker-button =\n .title = Change color\npdfjs-editor-colorpicker-dropdown =\n .aria-label = Color choices\npdfjs-editor-colorpicker-yellow =\n .title = Yellow\npdfjs-editor-colorpicker-green =\n .title = Green\npdfjs-editor-colorpicker-blue =\n .title = Blue\npdfjs-editor-colorpicker-pink =\n .title = Pink\npdfjs-editor-colorpicker-red =\n .title = Red\npdfjs-editor-highlight-show-all-button-label = Show all\npdfjs-editor-highlight-show-all-button =\n .title = Show all\npdfjs-editor-new-alt-text-dialog-edit-label = Edit alt text (image description)\npdfjs-editor-new-alt-text-dialog-add-label = Add alt text (image description)\npdfjs-editor-new-alt-text-textarea =\n .placeholder = Write your description here\u2026\npdfjs-editor-new-alt-text-description = Short description for people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate.\npdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more\npdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically\npdfjs-editor-new-alt-text-not-now-button = Not now\npdfjs-editor-new-alt-text-error-title = Couldn\u2019t create alt text automatically\npdfjs-editor-new-alt-text-error-description = Please write your own alt text or try again later.\npdfjs-editor-new-alt-text-error-close-button = Close\npdfjs-editor-new-alt-text-ai-model-downloading-progress = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\n .aria-valuetext = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)\npdfjs-editor-new-alt-text-added-button =\n .aria-label = Alt text added\npdfjs-editor-new-alt-text-added-button-label = Alt text added\npdfjs-editor-new-alt-text-missing-button =\n .aria-label = Missing alt text\npdfjs-editor-new-alt-text-missing-button-label = Missing alt text\npdfjs-editor-new-alt-text-to-review-button =\n .aria-label = Review alt text\npdfjs-editor-new-alt-text-to-review-button-label = Review alt text\npdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Created automatically: { $generatedAltText }\npdfjs-image-alt-text-settings-button =\n .title = Image alt text settings\npdfjs-image-alt-text-settings-button-label = Image alt text settings\npdfjs-editor-alt-text-settings-dialog-label = Image alt text settings\npdfjs-editor-alt-text-settings-automatic-title = Automatic alt text\npdfjs-editor-alt-text-settings-create-model-button-label = Create alt text automatically\npdfjs-editor-alt-text-settings-create-model-description = Suggests descriptions to help people who can\u2019t see the image or when the image doesn\u2019t load.\npdfjs-editor-alt-text-settings-editor-title = Alt text editor\npdfjs-editor-alt-text-settings-show-dialog-button-label = Show alt text editor right away when adding an image\npdfjs-editor-alt-text-settings-show-dialog-description = Helps you make sure all your images have alt text.\npdfjs-editor-alt-text-settings-close-button = Close\npdfjs-editor-highlight-added-alert = Highlight added\npdfjs-editor-freetext-added-alert = Text added\npdfjs-editor-ink-added-alert = Drawing added\npdfjs-editor-stamp-added-alert = Image added\npdfjs-editor-signature-added-alert = Signature added\npdfjs-editor-undo-bar-message-highlight = Highlight removed\npdfjs-editor-undo-bar-message-freetext = Text removed\npdfjs-editor-undo-bar-message-ink = Drawing removed\npdfjs-editor-undo-bar-message-stamp = Image removed\npdfjs-editor-undo-bar-message-signature = Signature removed\npdfjs-editor-undo-bar-message-comment = Comment removed\npdfjs-editor-undo-bar-message-multiple =\n { $count ->\n [one] { $count } annotation removed\n *[other] { $count } annotations removed\n }\npdfjs-editor-undo-bar-undo-button =\n .title = Undo\npdfjs-editor-undo-bar-undo-button-label = Undo\npdfjs-editor-undo-bar-close-button =\n .title = Close\npdfjs-editor-undo-bar-close-button-label = Close\npdfjs-editor-add-signature-dialog-label = This modal allows the user to create a signature to add to a PDF document. The user can edit the name (which also serves as the alt text), and optionally save the signature for repeated use.\npdfjs-editor-add-signature-dialog-title = Add a signature\npdfjs-editor-add-signature-type-button = Type\n .title = Type\npdfjs-editor-add-signature-draw-button = Draw\n .title = Draw\npdfjs-editor-add-signature-image-button = Image\n .title = Image\npdfjs-editor-add-signature-type-input =\n .aria-label = Type your signature\n .placeholder = Type your signature\npdfjs-editor-add-signature-draw-placeholder = Draw your signature\npdfjs-editor-add-signature-draw-thickness-range-label = Thickness\npdfjs-editor-add-signature-draw-thickness-range =\n .title = Drawing thickness: { $thickness }\npdfjs-editor-add-signature-image-placeholder = Drag a file here to upload\npdfjs-editor-add-signature-image-browse-link =\n { PLATFORM() ->\n [macos] Or choose image files\n *[other] Or browse image files\n }\npdfjs-editor-add-signature-description-label = Description (alt text)\npdfjs-editor-add-signature-description-input =\n .title = Description (alt text)\npdfjs-editor-add-signature-description-default-when-drawing = Signature\npdfjs-editor-add-signature-clear-button-label = Clear signature\npdfjs-editor-add-signature-clear-button =\n .title = Clear signature\npdfjs-editor-add-signature-save-checkbox = Save signature\npdfjs-editor-add-signature-save-warning-message = You\u2019ve reached the limit of 5 saved signatures. Remove one to save more.\npdfjs-editor-add-signature-image-upload-error-title = Couldn\u2019t upload image\npdfjs-editor-add-signature-image-upload-error-description = Check your network connection or try another image.\npdfjs-editor-add-signature-image-no-data-error-title = Can\u2019t convert this image into a signature\npdfjs-editor-add-signature-image-no-data-error-description = Please try uploading a different image.\npdfjs-editor-add-signature-error-close-button = Close\npdfjs-editor-add-signature-cancel-button = Cancel\npdfjs-editor-add-signature-add-button = Add\npdfjs-editor-delete-signature-button1 =\n .title = Remove saved signature\npdfjs-editor-delete-signature-button-label1 = Remove saved signature\npdfjs-editor-add-signature-edit-button-label = Edit description\npdfjs-editor-edit-signature-dialog-title = Edit description\npdfjs-editor-edit-signature-update-button = Update\npdfjs-show-comment-button =\n .title = Show comment\npdfjs-editor-edit-comment-popup-button-label = Edit comment\npdfjs-editor-edit-comment-popup-button =\n .title = Edit comment\npdfjs-editor-delete-comment-popup-button-label = Remove comment\npdfjs-editor-delete-comment-popup-button =\n .title = Remove comment\npdfjs-editor-edit-comment-dialog-title-when-editing = Edit comment\npdfjs-editor-edit-comment-dialog-save-button-when-editing = Update\npdfjs-editor-edit-comment-dialog-title-when-adding = Add comment\npdfjs-editor-edit-comment-dialog-save-button-when-adding = Add\npdfjs-editor-edit-comment-dialog-text-input =\n .placeholder = Start typing\u2026\npdfjs-editor-edit-comment-dialog-cancel-button = Cancel\npdfjs-editor-add-comment-button =\n .title = Add comment\npdfjs-toggle-views-manager-button1 =\n .title = Manage pages\npdfjs-toggle-views-manager-notification-button =\n .title = Toggle Sidebar (document contains thumbnails/outline/attachments/layers)\npdfjs-toggle-views-manager-button1-label = Manage pages\npdfjs-views-manager-sidebar =\n .aria-label = Sidebar\npdfjs-views-manager-sidebar-resizer =\n .aria-label = Sidebar resizer\npdfjs-views-manager-view-selector-button =\n .title = Views\npdfjs-views-manager-view-selector-button-label = Views\npdfjs-views-manager-pages-title = Pages\npdfjs-views-manager-outlines-title1 = Document outline\n .title = Document outline (double-click to expand/collapse all items)\npdfjs-views-manager-attachments-title = Attachments\npdfjs-views-manager-layers-title1 = Layers\n .title = Layers (double-click to reset all layers to the default state)\npdfjs-views-manager-pages-option-label = Pages\npdfjs-views-manager-outlines-option-label = Document outline\npdfjs-views-manager-attachments-option-label = Attachments\npdfjs-views-manager-layers-option-label = Layers\npdfjs-views-manager-add-file-button =\n .title = Add file\npdfjs-views-manager-add-file-button-label = Add file\npdfjs-views-manager-pages-status-action-label =\n { $count ->\n [one] { $count } selected\n *[other] { $count } selected\n }\npdfjs-views-manager-pages-status-none-action-label = Select pages\npdfjs-views-manager-pages-status-action-button-label = Manage\npdfjs-views-manager-pages-status-copy-button-label = Copy\npdfjs-views-manager-pages-status-cut-button-label = Cut\npdfjs-views-manager-pages-status-delete-button-label = Delete\npdfjs-views-manager-pages-status-export-selected-button-label = Export selected\u2026\npdfjs-views-manager-status-undo-cut-label =\n { $count ->\n [one] 1 page cut\n *[other] { $count } pages cut\n }\npdfjs-views-manager-pages-status-undo-copy-label =\n { $count ->\n [one] 1 page copied\n *[other] { $count } pages copied\n }\npdfjs-views-manager-pages-status-undo-delete-label =\n { $count ->\n [one] 1 page deleted\n *[other] { $count } pages deleted\n }\npdfjs-views-manager-pages-status-waiting-ready-label = Getting your file ready\u2026\npdfjs-views-manager-pages-status-waiting-uploading-label = Uploading file\u2026\npdfjs-views-manager-status-warning-cut-label = Couldn\u2019t cut. Refresh page and try again.\npdfjs-views-manager-status-warning-copy-label = Couldn\u2019t copy. Refresh page and try again.\npdfjs-views-manager-status-warning-delete-label = Couldn\u2019t delete. Refresh page and try again.\npdfjs-views-manager-status-warning-save-label = Couldn\u2019t save. Refresh page and try again.\npdfjs-views-manager-status-undo-button-label = Undo\npdfjs-views-manager-status-done-button-label = Done\npdfjs-views-manager-status-close-button =\n .title = Close\npdfjs-views-manager-status-close-button-label = Close\npdfjs-views-manager-paste-button-label = Paste\npdfjs-views-manager-paste-button-before =\n .title = Paste before the first page\npdfjs-views-manager-paste-button-after =\n .title = Paste after page { $page }\npdfjs-new-badge-content = NEW"; return createBundle(lang, text); } } @@ -4422,7 +4428,7 @@ class Sidebar { sidebar, resizer, toggleButton - }, ltr, isResizerOnTheLeft) { + }, ltr, isResizerOnTheLeft, globalAbortSignal) { this._sidebar = sidebar; this.#coefficient = ltr === isResizerOnTheLeft ? -1 : 1; this.#resizer = resizer; @@ -4436,6 +4442,9 @@ class Sidebar { toggleButton.addEventListener("click", this.toggle.bind(this)); this._isOpen = false; sidebar.hidden = true; + globalAbortSignal?.addEventListener("abort", this.destroy.bind(this), { + once: true + }); this.#resizeObserver = new ResizeObserver(([{ borderBoxSize: [{ inlineSize @@ -4559,14 +4568,14 @@ class CommentManager { #popup; #sidebar; static #hasForcedColors = null; - constructor(commentDialog, sidebar, eventBus, linkService, overlayManager, ltr, hasForcedColors) { + constructor(commentDialog, sidebar, eventBus, linkService, overlayManager, ltr, hasForcedColors, globalAbortSignal) { const dateFormat = new Intl.DateTimeFormat(undefined, { dateStyle: "long" }); this.dialogElement = commentDialog.dialog; this.#dialog = new CommentDialog(commentDialog, overlayManager, eventBus, ltr); this.#popup = new CommentPopup(eventBus, dateFormat, ltr, this.dialogElement); - this.#sidebar = new CommentSidebar(sidebar, eventBus, linkService, this.#popup, dateFormat, ltr); + this.#sidebar = new CommentSidebar(sidebar, eventBus, linkService, this.#popup, dateFormat, ltr, globalAbortSignal); this.#popup.sidebar = this.#sidebar; CommentManager.#hasForcedColors = hasForcedColors; } @@ -4610,7 +4619,7 @@ class CommentManager { return CommentManager._makeCommentColor(color, opacity); } static _makeCommentColor(color, opacity) { - return this.#hasForcedColors ? null : findContrastColor(applyOpacity(...color, opacity ?? 1), CSSConstants.commentForegroundColor); + return this.#hasForcedColors ? null : findContrastColor(applyOpacity(color, opacity ?? 1), CSSConstants.commentForegroundColor); } destroy() { this.#dialog.destroy(); @@ -4643,12 +4652,12 @@ class CommentSidebar extends Sidebar { sidebarTitle, closeButton, commentToolbarButton - }, eventBus, linkService, popup, dateFormat, ltr) { + }, eventBus, linkService, popup, dateFormat, ltr, globalAbortSignal) { super({ sidebar, resizer: sidebarResizer, toggleButton: commentToolbarButton - }, ltr, true); + }, ltr, true, globalAbortSignal); this.#sidebarTitle = sidebarTitle; this.#commentsList = commentsList; this.#commentCount = commentCount; @@ -5668,7 +5677,9 @@ class EditorUndoBar { signal: this.#showController.signal }); this.#focusTimeout = setTimeout(() => { - this.#container.focus(); + if (!this.#container.contains(document.activeElement)) { + this.#container.focus(); + } this.#focusTimeout = null; }, 100); } @@ -6552,7 +6563,6 @@ const FindState = { PENDING: 3 }; const FIND_TIMEOUT = 250; -const MATCH_SCROLL_OFFSET_TOP = -50; const CHARACTERS_TO_NORMALIZE = { "\u2010": "-", "\u2018": "'", @@ -6766,7 +6776,8 @@ class PDFFindController { #state = null; #updateMatchesCountOnProgress = true; #visitedPagesCount = 0; - #copiedExtractTextPromises = null; + #copiedPageData = null; + #savedPageData = null; constructor({ linkService, eventBus, @@ -6858,7 +6869,6 @@ class PDFFindController { } scrollMatchIntoView({ element = null, - selectedLeft = 0, pageIndex = -1, matchIndex = -1 }) { @@ -6870,11 +6880,10 @@ class PDFFindController { return; } this._scrollMatches = false; - const spot = { - top: MATCH_SCROLL_OFFSET_TOP, - left: selectedLeft - }; - scrollIntoView(element, spot, true); + element.scrollIntoView({ + block: "start", + inline: "center" + }); } #reset() { this._highlightMatches = false; @@ -6904,7 +6913,7 @@ class PDFFindController { this._dirtyMatch = false; clearTimeout(this._findTimeout); this._findTimeout = null; - this.#copiedExtractTextPromises = null; + this.#copiedPageData = null; this._firstPageCapability = Promise.withResolvers(); } get #query() { @@ -7266,23 +7275,78 @@ class PDFFindController { return; } if (type === "copy") { - this.#copiedExtractTextPromises = new Map(); + const promises = new Map(); + const contents = new Map(); + const diffs = new Map(); + const diacritics = new Map(); for (const pageNum of pageNumbers) { - this.#copiedExtractTextPromises.set(pageNum, this._extractTextPromises[pageNum - 1]); + promises.set(pageNum, this._extractTextPromises[pageNum - 1]); + contents.set(pageNum, this._pageContents[pageNum - 1]); + diffs.set(pageNum, this._pageDiffs[pageNum - 1]); + diacritics.set(pageNum, this._hasDiacritics[pageNum - 1]); } + this.#copiedPageData = { + promises, + contents, + diffs, + diacritics + }; return; } - this.#onFindBarClose(); + if (type === "cancelCopy") { + this.#copiedPageData = null; + return; + } + if (type === "delete") { + this.#savedPageData = { + promises: this._extractTextPromises, + contents: this._pageContents, + diffs: this._pageDiffs, + diacritics: this._hasDiacritics + }; + } + if (type === "cancelDelete") { + this._extractTextPromises = this.#savedPageData.promises; + this._pageContents = this.#savedPageData.contents; + this._pageDiffs = this.#savedPageData.diffs; + this._hasDiacritics = this.#savedPageData.diacritics; + return; + } + if (type === "cleanSavedData") { + this.#savedPageData = null; + return; + } + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + this._resumePageIdx = null; this._dirtyMatch = true; - const prevTextPromises = this._extractTextPromises; - const extractTextPromises = this._extractTextPromises.length = []; - for (let i = 1, ii = pagesMapper.length; i <= ii; i++) { + const prevPromises = this._extractTextPromises; + const prevContents = this._pageContents; + const prevDiffs = this._pageDiffs; + const prevDiacritics = this._hasDiacritics; + const extractTextPromises = this._extractTextPromises = []; + const pageContents = this._pageContents = []; + const pageDiffs = this._pageDiffs = []; + const hasDiacritics = this._hasDiacritics = []; + for (let i = 1, ii = pagesMapper.pagesNumber; i <= ii; i++) { const prevPageNumber = pagesMapper.getPrevPageNumber(i); if (prevPageNumber < 0) { - extractTextPromises.push(this.#copiedExtractTextPromises?.get(-prevPageNumber) || Promise.resolve()); + const src = -prevPageNumber; + extractTextPromises.push(this.#copiedPageData?.promises.get(src) || Promise.resolve()); + pageContents.push(this.#copiedPageData?.contents.get(src) ?? ""); + pageDiffs.push(this.#copiedPageData?.diffs.get(src) ?? null); + hasDiacritics.push(this.#copiedPageData?.diacritics.get(src) ?? false); continue; } - extractTextPromises.push(prevTextPromises[prevPageNumber - 1] || Promise.resolve()); + extractTextPromises.push(prevPromises[prevPageNumber - 1] || Promise.resolve()); + pageContents.push(prevContents[prevPageNumber - 1] ?? ""); + pageDiffs.push(prevDiffs[prevPageNumber - 1] ?? null); + hasDiacritics.push(prevDiacritics[prevPageNumber - 1] ?? false); + } + if (this.#state) { + this.#nextMatch(); } } #onFindBarClose(evt) { @@ -9586,51 +9650,6 @@ class PDFScriptingManager { } } -;// ./web/pdf_text_extractor.js -class PdfTextExtractor { - #pdfViewer; - #externalServices; - #textPromise; - #pendingRequests = new Set(); - constructor(externalServices) { - this.#externalServices = externalServices; - window.addEventListener("requestTextContent", ({ - detail - }) => { - this.extractTextContent(detail.requestId); - }); - } - setViewer(pdfViewer) { - this.#pdfViewer = pdfViewer; - if (this.#pdfViewer && this.#pendingRequests.size) { - for (const pendingRequest of this.#pendingRequests) { - this.extractTextContent(pendingRequest); - } - this.#pendingRequests.clear(); - } - } - async extractTextContent(requestId) { - if (!this.#pdfViewer) { - this.#pendingRequests.add(requestId); - return; - } - if (!this.#textPromise) { - const textPromise = this.#textPromise = this.#pdfViewer.getAllText(); - textPromise.then(() => { - setTimeout(() => { - if (this.#textPromise === textPromise) { - this.#textPromise = null; - } - }, 5000); - }); - } - this.#externalServices.reportText({ - text: await this.#textPromise, - requestId - }); - } -} - ;// ./web/menu.js class Menu { @@ -9907,7 +9926,6 @@ class PDFThumbnailView extends RenderableView { pageColors: this.pageColors, enableSplitMerge: !!this.checkbox }); - thumbnailView.setPdfPage(this.pdfPage); const { imageContainer } = this; @@ -9924,14 +9942,32 @@ class PDFThumbnailView extends RenderableView { const pasteButton = this.pasteButton = document.createElement("button"); pasteButton.classList.add("thumbnailPasteButton", "viewsManagerButton"); pasteButton.tabIndex = 0; + pasteButton.setAttribute("data-l10n-id", "pdfjs-views-manager-paste-button-after"); + pasteButton.setAttribute("data-l10n-args", JSON.stringify({ + page: this.pageLabel ?? this.id + })); const span = document.createElement("span"); span.setAttribute("data-l10n-id", "pdfjs-views-manager-paste-button-label"); pasteButton.append(span); pasteButton.addEventListener("click", () => { pasteCallback(this.id); }); + if (this.id === 1) { + const prevPasteButton = this.prevPasteButton = pasteButton.cloneNode(true); + prevPasteButton.setAttribute("data-l10n-id", "pdfjs-views-manager-paste-button-before"); + prevPasteButton.addEventListener("click", () => { + pasteCallback(0); + }); + this.imageContainer.before(prevPasteButton); + } this.imageContainer.after(pasteButton); } + removePasteButton() { + this.pasteButton?.remove(); + this.pasteButton = null; + this.prevPasteButton?.remove(); + this.prevPasteButton = null; + } toggleSelected(isSelected) { if (this.checkbox) { this.checkbox.checked = isSelected; @@ -10237,16 +10273,29 @@ class PDFThumbnailViewer { #currentScrollBottom = 0; #currentScrollTop = 0; #pagesMapper = null; - #manageSaveAsButton = null; + #manageExportButton = null; #manageDeleteButton = null; #manageCopyButton = null; #manageCutButton = null; #copiedThumbnails = null; + #savedThumbnails = null; + #deletedPageNumbers = null; #copiedPageNumbers = null; + #boundPastePages = this.#pastePages.bind(this); #isCut = false; #isOneColumnView = false; #scrollableContainerWidth = 0; #scrollableContainerHeight = 0; + #statusLabel = null; + #statusBar = null; + #deselectButton = null; + #undoBar = null; + #undoLabel = null; + #undoButton = null; + #undoCloseButton = null; + #isInPasteMode = false; + #hasUndoBarVisible = false; + #newBadge = null; constructor({ container, eventBus, @@ -10256,8 +10305,10 @@ class PDFThumbnailViewer { maxCanvasDim, pageColors, abortSignal, - enableHWA, enableSplitMerge, + enableNewBadge, + statusBar, + undoBar, manageMenu, addFileButton }) { @@ -10269,8 +10320,14 @@ class PDFThumbnailViewer { this.maxCanvasPixels = maxCanvasPixels; this.maxCanvasDim = maxCanvasDim; this.pageColors = pageColors || null; - this.enableHWA = enableHWA || false; this.#enableSplitMerge = enableSplitMerge || false; + this.#statusLabel = statusBar?.viewsManagerStatusActionLabel || null; + this.#deselectButton = statusBar?.viewsManagerStatusActionDeselectButton || null; + this.#statusBar = statusBar?.viewsManagerStatusAction || null; + this.#undoBar = undoBar?.viewsManagerStatusUndo || null; + this.#undoLabel = undoBar?.viewsManagerStatusUndoLabel || null; + this.#undoButton = undoBar?.viewsManagerStatusUndoButton || null; + this.#undoCloseButton = undoBar?.viewsManagerStatusUndoCloseButton || null; if (this.#enableSplitMerge && manageMenu) { const { button, @@ -10278,29 +10335,70 @@ class PDFThumbnailViewer { copy, cut, delete: del, - saveAs + exportSelected } = manageMenu; + if (enableNewBadge) { + const newSpan = document.createElement("span"); + newSpan.setAttribute("data-l10n-id", "pdfjs-new-badge-content"); + newSpan.classList.add("newBadge"); + button.parentElement.before(newSpan); + this.#newBadge = newSpan; + } this.eventBus.on("pagesloaded", () => { button.disabled = false; }, { once: true }); - this._manageMenu = new Menu(menu, button, [copy, cut, del, saveAs]); - this.#manageSaveAsButton = saveAs; - saveAs.addEventListener("click", () => { - this.eventBus.dispatch("savepageseditedpdf", { - source: this, - data: this.#pagesMapper.getPageMappingForSaving() - }); - }); + this._manageMenu = new Menu(menu, button, [copy, cut, del, exportSelected]); + this.#manageExportButton = exportSelected; + exportSelected.addEventListener("click", this.#saveExtractedPages.bind(this)); this.#manageDeleteButton = del; - del.addEventListener("click", this.#deletePages.bind(this)); + del.addEventListener("click", this.#deletePages.bind(this, "delete")); this.#manageCopyButton = copy; copy.addEventListener("click", this.#copyPages.bind(this)); this.#manageCutButton = cut; cut.addEventListener("click", this.#cutPages.bind(this)); this.#toggleMenuEntries(false); button.disabled = true; + this.eventBus.on("editingaction", ({ + name + }) => { + switch (name) { + case "copyPage": + this.#copyPages(); + break; + case "cutPage": + this.#cutPages(); + break; + case "deletePage": + this.#deletePages("delete"); + break; + case "savePage": + this.#saveExtractedPages(); + break; + } + }); + this.container.addEventListener("contextmenu", e => { + this.eventBus.dispatch("editingstateschanged", { + source: this, + details: { + thumbnailId: parseInt(e.target.closest(".thumbnailImageContainer")?.parentElement.getAttribute("page-number")) ?? -1, + hasSelectedPages: !!this.#selectedPages?.size, + canDeletePages: this.#canDelete() + } + }); + }, { + signal: abortSignal, + passive: true + }); + this.#undoButton?.addEventListener("click", this.#undo.bind(this)); + this.#undoCloseButton?.addEventListener("click", this.#dismissUndo.bind(this, true)); + this.#deselectButton?.addEventListener("click", () => { + this.#clearSelection(); + this.#toggleMenuEntries(false); + this.#updateStatus("select"); + }); + this.#deselectButton.classList.toggle("hidden", true); } else { manageMenu.button.hidden = true; } @@ -10320,6 +10418,14 @@ class PDFThumbnailViewer { views: this._thumbnails }); } + #resetCurrentThumbnail(newPageNumber) { + if (!this.pdfDocument) { + return; + } + const thumbnailView = this._thumbnails[this._currentPageNumber - 1]; + thumbnailView?.toggleCurrent(false); + this._currentPageNumber = newPageNumber; + } scrollThumbnailIntoView(pageNumber) { if (!this.pdfDocument) { return; @@ -10330,10 +10436,8 @@ class PDFThumbnailViewer { return; } if (pageNumber !== this._currentPageNumber) { - const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1]; - prevThumbnailView?.toggleCurrent(false); + this.#resetCurrentThumbnail(pageNumber); thumbnailView.toggleCurrent(true); - this._currentPageNumber = pageNumber; } const { first, @@ -10429,7 +10533,6 @@ class PDFThumbnailViewer { maxCanvasPixels: this.maxCanvasPixels, maxCanvasDim: this.maxCanvasDim, pageColors: this.pageColors, - enableHWA: this.enableHWA, enableSplitMerge: this.#enableSplitMerge }); this._thumbnails.push(thumbnail); @@ -10498,23 +10601,27 @@ class PDFThumbnailViewer { } return false; } + hasStructuralChanges() { + return this.#pagesMapper?.hasBeenAltered() || false; + } + getStructuralChanges() { + return this.#pagesMapper?.getPageMappingForSaving() || null; + } static #getScaleFactor(image) { return PDFThumbnailViewer.#draggingScaleFactor ||= parseFloat(getComputedStyle(image).getPropertyValue("--thumbnail-dragging-scale")); } #updateThumbnails(currentPageNumber) { + this.#resetCurrentThumbnail(0); let newCurrentPageNumber = 0; const pagesMapper = this.#pagesMapper; - this.container.replaceChildren(); - const prevThumbnails = this._thumbnails; + const prevThumbnails = this.#savedThumbnails = this._thumbnails; const newThumbnails = this._thumbnails = []; const fragment = document.createDocumentFragment(); const isCut = this.#isCut; - const oldThumbnails = new Set(prevThumbnails); for (let i = 1, ii = pagesMapper.pagesNumber; i <= ii; i++) { const prevPageNumber = pagesMapper.getPrevPageNumber(i); if (prevPageNumber < 0) { let thumbnail = this.#copiedThumbnails.get(-prevPageNumber); - oldThumbnails.delete(thumbnail); thumbnail.checkbox.checked = false; if (isCut) { thumbnail.updateId(i); @@ -10531,14 +10638,10 @@ class PDFThumbnailViewer { const newThumbnail = prevThumbnails[prevPageNumber - 1]; newThumbnails.push(newThumbnail); newThumbnail.updateId(i); - oldThumbnails.delete(newThumbnail); newThumbnail.checkbox.checked = false; fragment.append(newThumbnail.div); } - this.container.append(fragment); - for (const oldThumbnail of oldThumbnails) { - oldThumbnail.destroy(); - } + this.container.replaceChildren(fragment); return newCurrentPageNumber; } #onStartDragging(draggedThumbnail) { @@ -10546,6 +10649,7 @@ class PDFThumbnailViewer { this.#currentScrollBottom = this.#currentScrollTop + this.scrollableContainer.clientHeight; this.#dragAC = new AbortController(); this.container.classList.add("isDragging"); + this.#newBadge?.classList.add("hidden"); const startPageNumber = parseInt(draggedThumbnail.getAttribute("page-number"), 10); this.#lastDraggedOverIndex = startPageNumber - 1; if (!this.#selectedPages?.has(startPageNumber)) { @@ -10590,6 +10694,7 @@ class PDFThumbnailViewer { this.#dragMarker = null; this.#dragAC.abort(); this.#dragAC = null; + this.#newBadge?.classList.remove("hidden"); this.container.classList.remove("isDragging"); for (const selected of this.#selectedPages) { const thumbnail = this._thumbnails[selected - 1]; @@ -10616,22 +10721,22 @@ class PDFThumbnailViewer { const newIndex = lastDraggedOverIndex + 1; const pagesToMove = Array.from(selectedPages).sort((a, b) => a - b); const pagesMapper = this.#pagesMapper; - let currentPageNumber = isNaN(this.#pageNumberToRemove) ? pagesToMove[0] : this.#pageNumberToRemove; + const currentPageNumber = isNaN(this.#pageNumberToRemove) ? pagesToMove[0] : this.#pageNumberToRemove; pagesMapper.movePages(selectedPages, pagesToMove, newIndex); - currentPageNumber = this.#updateThumbnails(currentPageNumber); + this.#updateCurrentPage(this.#updateThumbnails(currentPageNumber)); this.#computeThumbnailsPosition(); selectedPages.clear(); this.#pageNumberToRemove = NaN; - this.#updateMenuEntries(); + this.#toggleMenuEntries(false); + this.#updateStatus("select"); + this.#reportTelemetry({ + action: "move" + }); this.eventBus.dispatch("pagesedited", { source: this, pagesMapper, type: "move" }); - setTimeout(() => { - this.forceRendering(); - this.linkService.goToPage(currentPageNumber); - }, 0); } if (!isNaN(this.#pageNumberToRemove)) { this.#selectPage(this.#pageNumberToRemove, false); @@ -10644,11 +10749,130 @@ class PDFThumbnailViewer { } this.#selectedPages.clear(); } + #updateCurrentPage(currentPageNumber, forceFocus = false) { + setTimeout(() => { + this.forceRendering(); + const newPageNumber = currentPageNumber || 1; + this.linkService.goToPage(newPageNumber); + const thumbnailView = this._thumbnails[newPageNumber - 1]; + if (forceFocus || !this.container.contains(document.activeElement)) { + thumbnailView.imageContainer.focus(); + } + }, 0); + } + #undo() { + this.#clearSelection(); + this.#toggleMenuEntries(false); + this.#updateStatus("select"); + if (this.#copiedThumbnails) { + this.#copiedThumbnails = null; + this.#pagesMapper.cancelCopy(); + this.#togglePasteMode(false); + this.eventBus.dispatch("pagesedited", { + source: this, + pagesMapper: this.#pagesMapper, + type: "cancelCopy" + }); + } + this.#isCut = false; + if (this.#savedThumbnails) { + const currentThumb = this._thumbnails[this._currentPageNumber - 1]; + currentThumb?.toggleCurrent(false); + const fragment = document.createDocumentFragment(); + for (let i = 1, ii = this.#savedThumbnails.length; i <= ii; i++) { + const thumbnail = this.#savedThumbnails[i - 1]; + thumbnail.updateId(i); + thumbnail.checkbox.checked = false; + fragment.append(thumbnail.div); + } + this.container.replaceChildren(fragment); + this._thumbnails = this.#savedThumbnails; + this.#savedThumbnails = null; + const newIdx = currentThumb ? this._thumbnails.indexOf(currentThumb) : -1; + this._currentPageNumber = newIdx + 1; + currentThumb?.toggleCurrent(newIdx !== -1); + this.#pagesMapper.cancelDelete(); + this.eventBus.dispatch("pagesedited", { + source: this, + pagesMapper: this.#pagesMapper, + type: "cancelDelete" + }); + } + } + #dismissUndo(mustUpdateStatus) { + this.#copiedThumbnails = null; + if (this.#deletedPageNumbers) { + if (this.#savedThumbnails) { + for (const pageNumber of this.#deletedPageNumbers) { + this.#savedThumbnails[pageNumber - 1].destroy(); + } + this.#savedThumbnails = null; + } + this.#deletedPageNumbers = null; + } + this.#isCut = false; + if (mustUpdateStatus) { + this.#updateStatus("select"); + } + this.#togglePasteMode(false); + this.#pagesMapper.cleanSavedData(); + this.eventBus.dispatch("pagesedited", { + source: this, + pagesMapper: this.#pagesMapper, + type: "cleanSavedData" + }); + } + #canDelete() { + const size = this.#selectedPages?.size || 0; + return size > 0 && size < this._thumbnails.length; + } + #togglePasteMode(enable) { + this.#isInPasteMode = enable; + if (enable) { + this.container.classList.add("pasteMode"); + for (const thumbnail of this._thumbnails) { + thumbnail.addPasteButton(this.#boundPastePages); + } + } else { + this.container.classList.remove("pasteMode"); + for (const thumbnail of this._thumbnails) { + thumbnail.removePasteButton(); + } + } + } + #reportTelemetry(data) { + this.eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "pageOrganization", + data + } + }); + } + #saveExtractedPages() { + this.#reportTelemetry({ + action: "exportSelected" + }); + this.eventBus.dispatch("saveextractedpages", { + source: this, + data: this.#pagesMapper.extractPages(this.#selectedPages) + }); + this.#clearSelection(); + this.#toggleMenuEntries(false); + this.#updateStatus("select"); + } #copyPages(clearSelection = true) { + if (!this.#isCut) { + this.#savedThumbnails = null; + this.#reportTelemetry({ + action: "copy" + }); + } + this.#updateStatus(this.#isCut ? "cut" : "copy"); const pageNumbersToCopy = this.#copiedPageNumbers = Uint32Array.from(this.#selectedPages).sort((a, b) => a - b); const pagesMapper = this.#pagesMapper; pagesMapper.copyPages(pageNumbersToCopy); - this.#copiedThumbnails ||= new Map(); + this.#copiedThumbnails = new Map(); for (const pageNumber of pageNumbersToCopy) { this.#copiedThumbnails.set(pageNumber, this._thumbnails[pageNumber - 1]); } @@ -10661,24 +10885,30 @@ class PDFThumbnailViewer { if (clearSelection) { this.#clearSelection(); } - for (const thumbnail of this._thumbnails) { - thumbnail.addPasteButton(this.#pastePages.bind(this)); - } - this.container.classList.add("pasteMode"); + this.#togglePasteMode(true); this.#toggleMenuEntries(false); } #cutPages() { + if (!this.#canDelete()) { + return; + } + this.#reportTelemetry({ + action: "cut" + }); this.#isCut = true; this.#copyPages(false); this.#deletePages("cut"); } #pastePages(index) { - this.container.classList.remove("pasteMode"); - this.#toggleMenuEntries(true); + this.#reportTelemetry({ + action: "paste" + }); const pagesMapper = this.#pagesMapper; - let currentPageNumber = this.#copiedPageNumbers.includes(this._currentPageNumber) ? 0 : this._currentPageNumber; + const currentPageNumber = this.#copiedPageNumbers.includes(this._currentPageNumber) ? 0 : this._currentPageNumber; pagesMapper.pastePages(index); - currentPageNumber = this.#updateThumbnails(currentPageNumber); + this.#updateThumbnails(currentPageNumber); + this.#updateCurrentPage(index + 1, true); + this.#computeThumbnailsPosition(); this.eventBus.dispatch("pagesedited", { source: this, pagesMapper, @@ -10687,22 +10917,26 @@ class PDFThumbnailViewer { }); this.#copiedThumbnails = null; this.#isCut = false; - this.#updateMenuEntries(); - setTimeout(() => { - this.forceRendering(); - this.linkService.goToPage(currentPageNumber || 1); - }, 0); + this.#togglePasteMode(false); + this.#toggleMenuEntries(false); + this.#updateStatus("select"); } #deletePages(type = "delete") { - const selectedPages = this.#selectedPages; - if (selectedPages.size === 0) { + if (!this.#canDelete()) { return; } + const selectedPages = this.#selectedPages; + if (type === "delete") { + this.#reportTelemetry({ + action: "delete" + }); + this.#updateStatus("delete"); + } const pagesMapper = this.#pagesMapper; - let currentPageNumber = selectedPages.has(this._currentPageNumber) ? 0 : this._currentPageNumber; - const pagesToDelete = Uint32Array.from(selectedPages).sort((a, b) => a - b); + const currentPageNumber = selectedPages.has(this._currentPageNumber) ? 0 : this._currentPageNumber; + const pagesToDelete = this.#deletedPageNumbers = Uint32Array.from(selectedPages).sort((a, b) => a - b); pagesMapper.deletePages(pagesToDelete); - currentPageNumber = this.#updateThumbnails(currentPageNumber); + this.#updateCurrentPage(this.#updateThumbnails(currentPageNumber)); selectedPages.clear(); this.#updateMenuEntries(); this.eventBus.dispatch("pagesedited", { @@ -10711,17 +10945,64 @@ class PDFThumbnailViewer { pageNumbers: pagesToDelete, type }); - setTimeout(() => { - this.forceRendering(); - this.linkService.goToPage(currentPageNumber || 1); - }, 0); } #updateMenuEntries() { - this.#manageSaveAsButton.disabled = !this.#pagesMapper.hasBeenAltered(); - this.#manageDeleteButton.disabled = this.#manageCopyButton.disabled = this.#manageCutButton.disabled = !this.#selectedPages?.size; + const size = this.#selectedPages?.size || 0; + this.#manageExportButton.disabled = this.#manageCopyButton.disabled = !size; + this.#manageDeleteButton.disabled = this.#manageCutButton.disabled = !this.#canDelete(); } #toggleMenuEntries(enable) { - this.#manageSaveAsButton.disabled = this.#manageDeleteButton.disabled = this.#manageCopyButton.disabled = this.#manageCutButton.disabled = !enable; + this.#manageExportButton.disabled = this.#manageDeleteButton.disabled = this.#manageCopyButton.disabled = this.#manageCutButton.disabled = !enable; + } + #updateStatus(type) { + if (!this.#statusBar || !this.#undoBar) { + return; + } + const count = this.#selectedPages?.size || 0; + if (type === "select") { + this.#statusLabel.setAttribute("data-l10n-id", count ? "pdfjs-views-manager-pages-status-action-label" : "pdfjs-views-manager-pages-status-none-action-label"); + if (count) { + this.#newBadge?.classList.add("hidden"); + this.#statusLabel.setAttribute("data-l10n-args", JSON.stringify({ + count + })); + this.#deselectButton.classList.toggle("hidden", false); + } else { + this.#newBadge?.classList.remove("hidden"); + this.#statusLabel.removeAttribute("data-l10n-args"); + this.#deselectButton.classList.toggle("hidden", true); + } + this.#statusBar.classList.toggle("hidden", false); + this.#undoBar.classList.toggle("hidden", true); + this.#hasUndoBarVisible = false; + return; + } + let l10nId; + switch (type) { + case "copy": + l10nId = "pdfjs-views-manager-pages-status-undo-copy-label"; + break; + case "cut": + l10nId = "pdfjs-views-manager-status-undo-cut-label"; + break; + case "delete": + l10nId = "pdfjs-views-manager-pages-status-undo-delete-label"; + break; + } + this.#undoLabel.setAttribute("data-l10n-id", l10nId); + this.#undoLabel.setAttribute("data-l10n-args", JSON.stringify({ + count + })); + if (type === "copy") { + this.#undoButton.firstElementChild.setAttribute("data-l10n-id", "pdfjs-views-manager-status-done-button-label"); + this.#undoCloseButton.classList.toggle("hidden", true); + } else { + this.#undoButton.firstElementChild.setAttribute("data-l10n-id", "pdfjs-views-manager-status-undo-button-label"); + this.#undoCloseButton.classList.toggle("hidden", false); + } + this.#statusBar.classList.toggle("hidden", true); + this.#undoBar.classList.toggle("hidden", false); + this.#hasUndoBarVisible = true; } #moveDraggedContainer(dx, dy) { if (this.#isOneColumnView) { @@ -10816,11 +11097,6 @@ class PDFThumbnailViewer { firstRightX ??= prevX + w; positionsX.push(prevX); } - if (reminder > 0 && i >= ii - reminder) { - const cx = x + w / 2; - positionsLastX.push(cx); - lastRightX ??= cx + w; - } if (y > prevY) { if (reminder === -1 && positionsX.length > 1) { reminder = ii % positionsX.length; @@ -10829,6 +11105,11 @@ class PDFThumbnailViewer { firstBottomY ??= prevY + h; positionsY.push(prevY); } + if (reminder > 0 && i >= ii - reminder) { + const cx = x + w / 2; + positionsLastX.push(cx); + lastRightX ??= cx + w; + } } const space = positionsX.length > 1 ? (positionsX[1] - firstRightX) / 2 : (positionsY[1] - firstBottomY) / 2; this.#thumbnailsPositions = { @@ -10903,7 +11184,7 @@ class PDFThumbnailViewer { break; case "Delete": case "Backspace": - if (this.#enableSplitMerge && this.#selectedPages?.size) { + if (this.#enableSplitMerge && !this.#isInPasteMode && this.#selectedPages?.size) { this.#deletePages(); stopEvent(e); } @@ -10924,6 +11205,9 @@ class PDFThumbnailViewer { this.#addDragListeners(); } #selectPage(pageNumber, checked) { + if (this.#hasUndoBarVisible) { + this.#dismissUndo(false); + } const set = this.#selectedPages ??= new Set(); if (checked) { set.add(pageNumber); @@ -10931,6 +11215,7 @@ class PDFThumbnailViewer { set.delete(pageNumber); } this.#updateMenuEntries(); + this.#updateStatus("select"); } #addDragListeners() { if (!this.#enableSplitMerge) { @@ -10943,7 +11228,7 @@ class PDFThumbnailViewer { clientY: clickY, pointerId: dragPointerId } = e; - if (e.button !== 0 || this.#pagesMapper.copiedPageNumbers?.length > 0 || !isNaN(this.#lastDraggedOverIndex) || !draggedImage.classList.contains("thumbnailImageContainer")) { + if (e.button !== 0 || this.#isInPasteMode || this._thumbnails.length === 1 || !isNaN(this.#lastDraggedOverIndex) || !draggedImage.classList.contains("thumbnailImageContainer")) { return; } const thumbnail = draggedImage.parentElement; @@ -11178,7 +11463,6 @@ class AnnotationEditorLayerBuilder { #structTreeLayer = null; #textLayer = null; #uiManager; - #clonedFrom = null; constructor(options) { this.pageIndex = options.pageIndex; this.accessibilityManager = options.accessibilityManager; @@ -11193,7 +11477,6 @@ class AnnotationEditorLayerBuilder { this.#drawLayer = options.drawLayer || null; this.#onAppend = options.onAppend || null; this.#structTreeLayer = options.structTreeLayer || null; - this.#clonedFrom = options.clonedFrom || null; } updatePageIndex(newPageIndex) { this.pageIndex = newPageIndex; @@ -11236,15 +11519,13 @@ class AnnotationEditorLayerBuilder { textLayer: this.#textLayer, drawLayer: this.#drawLayer }); - this.annotationEditorLayer.setClonedFrom(this.#clonedFrom?.annotationEditorLayer); - this.#clonedFrom = null; const parameters = { viewport: clonedViewport, div, annotations: null, intent }; - this.annotationEditorLayer.render(parameters); + await this.annotationEditorLayer.render(parameters); this.show(); } cancel() { @@ -11644,8 +11925,10 @@ class BasePDFPageView extends RenderableView { canvas = null; div = null; enableOptimizedPartialRendering = false; + imagesRightClickMinSize = -1; eventBus = null; id = null; + imageCoordinates = null; pageColors = null; recordedBBoxes = null; renderingQueue = null; @@ -11656,6 +11939,7 @@ class BasePDFPageView extends RenderableView { this.pageColors = options.pageColors || null; this.renderingQueue = options.renderingQueue; this.enableOptimizedPartialRendering = options.enableOptimizedPartialRendering ?? false; + this.imagesRightClickMinSize = options.imagesRightClickMinSize ?? -1; this.minDurationToUpdateCanvas = options.minDurationToUpdateCanvas ?? 500; } get renderingState() { @@ -11799,6 +12083,9 @@ class BasePDFPageView extends RenderableView { if (this.enableOptimizedPartialRendering) { this.recordedBBoxes ??= renderTask.recordedBBoxes; } + if (this.imagesRightClickMinSize !== -1) { + this.imageCoordinates ??= this.pdfPage.imageCoordinates; + } } } this.renderingState = RenderingStates.FINISHED; @@ -12286,11 +12573,23 @@ class StructTreeLayerBuilder { this.#elementsToStealFromTextLayer = null; } } + #collectIds(node, ids) { + if (!node) { + return; + } + if ("id" in node) { + ids.push(node.id); + } + for (const kid of node.children || []) { + this.#collectIds(kid, ids); + } + } #walk(node, parentNodes = []) { if (!node) { return null; } let element; + let visitChildren = true; if ("role" in node) { const { role @@ -12322,17 +12621,11 @@ class StructTreeLayerBuilder { } if (role === "Formula") { if (node.mathML && MathMLSanitizer.sanitizer) { + visitChildren = false; element.setHTML(node.mathML, { sanitizer: MathMLSanitizer.sanitizer }); - for (const { - id - } of node.children || []) { - if (!id) { - continue; - } - (this.#elementsToHideInTextLayer ||= []).push(id); - } + this.#collectIds(node, this.#elementsToHideInTextLayer ||= []); delete node.alt; } if (!node.mathML && node.children.length === 1 && node.children[0].role !== "math") { @@ -12346,7 +12639,7 @@ class StructTreeLayerBuilder { if (node.children) { if (node.children.length === 1 && "id" in node.children[0]) { this.#setAttributes(node.children[0], element); - } else { + } else if (visitChildren) { parentNodes.push(node); for (const kid of node.children) { element.append(this.#walk(kid, parentNodes)); @@ -12639,13 +12932,9 @@ class TextHighlighter { span.append(node); div.append(span); if (className.includes("selected")) { - const { - left - } = span.getClientRects()[0]; - const parentLeft = div.getBoundingClientRect().left; - return left - parentLeft; + return span; } - return 0; + return null; } div.append(node); return 0; @@ -12671,7 +12960,7 @@ class TextHighlighter { const end = match.end; const isSelected = isSelectedPage && i === selectedMatchIdx; const highlightSuffix = isSelected ? " selected" : ""; - let selectedLeft = 0; + let selectedSpan = null; if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { if (prevEnd !== null) { appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); @@ -12681,9 +12970,9 @@ class TextHighlighter { appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); } if (begin.divIdx === end.divIdx) { - selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); + selectedSpan = appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); } else { - selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); + selectedSpan = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { textDivs[n0].className = "highlight middle" + highlightSuffix; } @@ -12692,8 +12981,7 @@ class TextHighlighter { prevEnd = end; if (isSelected) { findController.scrollMatchIntoView({ - element: textDivs[begin.divIdx], - selectedLeft, + element: selectedSpan, pageIndex: pageIdx, matchIndex: selectedMatchIdx }); @@ -12740,6 +13028,7 @@ class TextHighlighter { class TextLayerBuilder { + #abortSignal = null; #enablePermissions = false; #onAppend = null; #renderingDone = false; @@ -12751,19 +13040,22 @@ class TextLayerBuilder { highlighter = null, accessibilityManager = null, enablePermissions = false, - onAppend = null + onAppend = null, + abortSignal = null }) { this.pdfPage = pdfPage; this.highlighter = highlighter; this.accessibilityManager = accessibilityManager; this.#enablePermissions = enablePermissions === true; this.#onAppend = onAppend; + this.#abortSignal = abortSignal; this.div = document.createElement("div"); this.div.tabIndex = 0; this.div.className = "textLayer"; } async render({ viewport, + images, textContentParams = null }) { if (this.#renderingDone && this.#textLayer) { @@ -12780,6 +13072,7 @@ class TextLayerBuilder { includeMarkedContent: true, disableNormalization: true }), + images, container: this.div, viewport }); @@ -12822,18 +13115,22 @@ class TextLayerBuilder { const { div } = this; + const abortSignal = this.#abortSignal; + const opts = abortSignal ? { + signal: abortSignal + } : null; div.addEventListener("mousedown", () => { div.classList.add("selecting"); - }); + }, opts); div.addEventListener("copy", event => { if (!this.#enablePermissions) { const selection = document.getSelection(); event.clipboardData.setData("text/plain", removeNullCharacters(normalizeUnicode(selection.toString()))); } stopEvent(event); - }); + }, opts); TextLayerBuilder.#textLayers.set(div, end); - TextLayerBuilder.#enableGlobalSelectionListener(); + TextLayerBuilder.#enableGlobalSelectionListener(abortSignal); } static #removeGlobalSelectionListener(textLayerDiv) { this.#textLayers.delete(textLayerDiv); @@ -12842,14 +13139,12 @@ class TextLayerBuilder { this.#selectionChangeAbortController = null; } } - static #enableGlobalSelectionListener() { + static #enableGlobalSelectionListener(globalAbortSignal) { if (this.#selectionChangeAbortController) { return; } this.#selectionChangeAbortController = new AbortController(); - const { - signal - } = this.#selectionChangeAbortController; + const signal = globalAbortSignal ? AbortSignal.any([this.#selectionChangeAbortController.signal, globalAbortSignal]) : this.#selectionChangeAbortController.signal; const reset = (end, textLayer) => { textLayer.append(end); end.style.width = ""; @@ -12961,6 +13256,7 @@ class TextLayerBuilder { const DEFAULT_LAYER_PROPERTIES = null; const LAYERS_ORDER = new Map([["canvasWrapper", 0], ["textLayer", 1], ["annotationLayer", 2], ["annotationEditorLayer", 3], ["xfaLayer", 3]]); class PDFPageView extends BasePDFPageView { + #abortSignal = null; #annotationMode = AnnotationMode.ENABLE_FORMS; #canvasWrapper = null; #commentManager = null; @@ -12981,7 +13277,6 @@ class PDFPageView extends BasePDFPageView { regularAnnotations: true }; #layers = [null, null, null, null]; - #clonedFrom = null; constructor(options) { super(options); const { @@ -12990,6 +13285,7 @@ class PDFPageView extends BasePDFPageView { } = options; this.renderingId = "page" + this.id; this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES; + this.#abortSignal = options.abortSignal || null; this.pdfPage = null; this.pageLabel = null; this.rotation = 0; @@ -13006,7 +13302,6 @@ class PDFPageView extends BasePDFPageView { this.capCanvasAreaFactor = options.capCanvasAreaFactor ?? AppOptions.get("capCanvasAreaFactor"); this.#enableAutoLinking = options.enableAutoLinking !== false; this.#commentManager = options.commentManager || null; - this.#clonedFrom = options.clonedFrom || null; this.l10n = options.l10n; this.l10n ||= new genericl10n_GenericL10n(); this._isStandalone = !this.renderingQueue?.hasViewer(); @@ -13062,6 +13357,7 @@ class PDFPageView extends BasePDFPageView { defaultViewport: this.viewport, id, layerProperties: this.#layerProperties, + abortSignal: this.#abortSignal, scale: this.scale, optionalContentConfigPromise: this._optionalContentConfigPromise, textLayerMode: this.#textLayerMode, @@ -13073,10 +13369,9 @@ class PDFPageView extends BasePDFPageView { capCanvasAreaFactor: this.capCanvasAreaFactor, enableAutoLinking: this.#enableAutoLinking, commentManager: this.#commentManager, - l10n: this.l10n, - clonedFrom: this + l10n: this.l10n }); - clone.setPdfPage(this.pdfPage); + clone.setPdfPage(this.pdfPage.clone(id - 1)); return clone; } #addLayer(div, name) { @@ -13121,6 +13416,7 @@ class PDFPageView extends BasePDFPageView { if (this.id === newPageNumber) { return; } + const oldPageNumber = this.id; this.id = newPageNumber; this.renderingId = `page${newPageNumber}`; if (this.pdfPage) { @@ -13135,7 +13431,7 @@ class PDFPageView extends BasePDFPageView { page: newPageNumber })); this._textHighlighter.pageIdx = newPageNumber - 1; - this.annotationEditorLayer?.updatePageIndex(newPageNumber - 1); + this.#layerProperties.annotationEditorUIManager?.updatePageIndex(oldPageNumber - 1, newPageNumber - 1); } setPdfPage(pdfPage) { if (this._isStandalone && (this.pageColors?.foreground === "CanvasText" || this.pageColors?.background === "Canvas")) { @@ -13248,7 +13544,8 @@ class PDFPageView extends BasePDFPageView { let error = null; try { await this.textLayer.render({ - viewport: this.viewport + viewport: this.viewport, + images: this.imageCoordinates ? new TextLayerImages(this.imagesRightClickMinSize, this.imageCoordinates, this.viewport, () => this.canvas) : null }); } catch (ex) { if (ex instanceof AbortException) { @@ -13388,7 +13685,8 @@ class PDFPageView extends BasePDFPageView { if (this.#needsRestrictedScaling && this.maxCanvasPixels > 0 && visibleArea) { this.detailView ??= new PDFPageDetailView({ pageView: this, - enableOptimizedPartialRendering: this.enableOptimizedPartialRendering + enableOptimizedPartialRendering: this.enableOptimizedPartialRendering, + imagesRightClickMinSize: -1 }); this.detailView.update({ visibleArea @@ -13596,7 +13894,7 @@ class PDFPageView extends BasePDFPageView { } return canvasWrapper; } - _getRenderingContext(canvas, transform, recordOperations) { + _getRenderingContext(canvas, transform, recordOperations, recordImages) { return { canvas, transform, @@ -13606,7 +13904,8 @@ class PDFPageView extends BasePDFPageView { annotationCanvasMap: this._annotationCanvasMap, pageColors: this.pageColors, isEditing: this.#isEditing, - recordOperations + recordOperations, + recordImages }; } async draw() { @@ -13637,7 +13936,8 @@ class PDFPageView extends BasePDFPageView { this.l10n.pause(); this.#addLayer(textLayerDiv, "textLayer"); this.l10n.resume(); - } + }, + abortSignal: this.#abortSignal }); } if (!this.annotationLayer && this.#annotationMode !== AnnotationMode.DISABLE) { @@ -13708,8 +14008,9 @@ class PDFPageView extends BasePDFPageView { this.#scaleRoundY = sfy[1]; } const recordBBoxes = this.enableOptimizedPartialRendering && this.#hasRestrictedScaling && !this.recordedBBoxes; + const recordImages = this.imagesRightClickMinSize !== -1 && !this.imageCoordinates; const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; - const resultPromise = this._drawCanvas(this._getRenderingContext(canvas, transform, recordBBoxes), () => { + const resultPromise = this._drawCanvas(this._getRenderingContext(canvas, transform, recordBBoxes, recordImages), () => { prevCanvas?.remove(); this._resetCanvas(); }, renderTask => { @@ -13746,12 +14047,10 @@ class PDFPageView extends BasePDFPageView { annotationLayer: this.annotationLayer?.annotationLayer, textLayer: this.textLayer, drawLayer: this.drawLayer.getDrawLayer(), - clonedFrom: this.#clonedFrom?.annotationEditorLayer, onAppend: annotationEditorLayerDiv => { this.#addLayer(annotationEditorLayerDiv, "annotationEditorLayer"); } }); - this.#clonedFrom = null; this.#renderAnnotationEditorLayer(); } }); @@ -13869,12 +14168,12 @@ class PDFViewer { #commentManager = null; #containerTopLeft = null; #editorUndoBar = null; - #enableHWA = false; #enableHighlightFloatingButton = false; #enablePermissions = false; #enableUpdatedAddImage = false; #enableNewAltTextWhenAddingImage = false; #enableAutoLinking = true; + #abortSignal = null; #eventAbortController = null; #minDurationToUpdateCanvas = 0; #mlManager = null; @@ -13882,9 +14181,8 @@ class PDFViewer { #scrollTimeoutId = null; #switchAnnotationEditorModeAC = null; #switchAnnotationEditorModeTimeoutId = null; - #getAllTextInProgress = false; + #copyAllInProgress = false; #hiddenCopyElement = null; - #interruptCopyCondition = false; #previousContainerHeight = 0; #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); #scrollModePageState = null; @@ -13894,8 +14192,10 @@ class PDFViewer { #textLayerMode = TextLayerMode.ENABLE; #viewerAlert = null; #copiedPageViews = null; + #savedPageViews = null; + #deletedPageNumbers = null; constructor(options) { - const viewerVersion = "5.5.207"; + const viewerVersion = "5.6.205"; if (version !== viewerVersion) { throw new Error(`The API version "${version}" does not match the Viewer version "${viewerVersion}".`); } @@ -13936,12 +14236,12 @@ class PDFViewer { this.capCanvasAreaFactor = options.capCanvasAreaFactor; this.enableDetailCanvas = options.enableDetailCanvas ?? true; this.enableOptimizedPartialRendering = options.enableOptimizedPartialRendering ?? false; + this.imagesRightClickMinSize = options.imagesRightClickMinSize ?? -1; this.l10n = options.l10n; this.l10n ||= new genericl10n_GenericL10n(); this.#enablePermissions = options.enablePermissions || false; this.pageColors = options.pageColors || null; this.#mlManager = options.mlManager || null; - this.#enableHWA = options.enableHWA || false; this.#supportsPinchToZoom = options.supportsPinchToZoom !== false; this.#enableAutoLinking = options.enableAutoLinking !== false; this.#minDurationToUpdateCanvas = options.minDurationToUpdateCanvas ?? 500; @@ -13955,6 +14255,7 @@ class PDFViewer { const { abortSignal } = options; + this.#abortSignal = abortSignal || null; abortSignal?.addEventListener("abort", () => { this.#resizeObserver.disconnect(); this.#resizeObserver = null; @@ -14205,11 +14506,11 @@ class PDFViewer { await Promise.race([this._onePageRenderedCapability.promise, hiddenCapability.promise]); ac.abort(); } - async getAllText() { + async getAllText(interruptSignal = null) { const texts = []; const buffer = []; for (let pageNum = 1, pagesCount = this.pdfDocument.numPages; pageNum <= pagesCount; ++pageNum) { - if (this.#interruptCopyCondition) { + if (interruptSignal?.aborted) { return null; } buffer.length = 0; @@ -14236,29 +14537,33 @@ class PDFViewer { anchorNode } = selection; if (anchorNode && focusNode && selection.containsNode(this.#hiddenCopyElement)) { - if (this.#getAllTextInProgress || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) { + if (this.#copyAllInProgress || textLayerMode === TextLayerMode.ENABLE_PERMISSIONS) { stopEvent(event); return; } - this.#getAllTextInProgress = true; + this.#copyAllInProgress = true; const { classList } = this.viewer; classList.add("copyAll"); - const ac = new AbortController(); - window.addEventListener("keydown", ev => this.#interruptCopyCondition = ev.key === "Escape", { - signal: ac.signal + const keydownAC = new AbortController(), + interruptAC = new AbortController(); + window.addEventListener("keydown", ev => { + if (ev.key === "Escape") { + interruptAC.abort(); + } + }, { + signal: keydownAC.signal }); - this.getAllText().then(async text => { + this.getAllText(interruptAC.signal).then(async text => { if (text !== null) { await navigator.clipboard.writeText(text); } }).catch(reason => { console.warn(`Something goes wrong when extracting the text: ${reason.message}`); }).finally(() => { - this.#getAllTextInProgress = false; - this.#interruptCopyCondition = false; - ac.abort(); + this.#copyAllInProgress = false; + keydownAC.abort(); classList.remove("copyAll"); }); stopEvent(event); @@ -14397,13 +14702,14 @@ class PDFViewer { capCanvasAreaFactor: this.capCanvasAreaFactor, enableDetailCanvas: this.enableDetailCanvas, enableOptimizedPartialRendering: this.enableOptimizedPartialRendering, + imagesRightClickMinSize: this.imagesRightClickMinSize, pageColors, l10n: this.l10n, layerProperties: this._layerProperties, - enableHWA: this.#enableHWA, enableAutoLinking: this.#enableAutoLinking, minDurationToUpdateCanvas: this.#minDurationToUpdateCanvas, - commentManager: this.#commentManager + commentManager: this.#commentManager, + abortSignal: this.#abortSignal }); this._pages.push(pageView); } @@ -14498,15 +14804,52 @@ class PDFViewer { } return; } + if (type === "cancelCopy") { + this.#copiedPageViews = null; + return; + } const isCut = type === "cut"; if (isCut || type === "delete") { - for (const pageNum of pageNumbers) { - this._pages[pageNum - 1].deleteMe(isCut); + this.#savedPageViews = this._pages; + this.#deletedPageNumbers = pageNumbers; + } + if (type === "cancelDelete") { + this.#deletedPageNumbers = null; + if (!this.#savedPageViews) { + return; } + const viewerElement = this._scrollMode === ScrollMode.PAGE ? null : this.viewer; + if (viewerElement) { + this.#annotationEditorUIManager?.startUpdatePages(); + const fragment = document.createDocumentFragment(); + for (let i = 0, ii = this.#savedPageViews.length; i < ii; i++) { + const page = this.#savedPageViews[i]; + page.updatePageNumber(i + 1); + fragment.append(page.div); + } + viewerElement.replaceChildren(fragment); + this.#annotationEditorUIManager?.endUpdatePages(); + } + this._pages = this.#savedPageViews; + this.#savedPageViews = null; + return; + } + if (type === "cleanSavedData") { + if (this.#deletedPageNumbers) { + if (this.#savedPageViews) { + for (const pageNum of this.#deletedPageNumbers) { + this.#savedPageViews[pageNum - 1].deleteMe(); + } + this.#savedPageViews = null; + } + this.#deletedPageNumbers = null; + } + return; } this._currentPageNumber = 0; const prevPages = this._pages; const newPages = this._pages = []; + this.#annotationEditorUIManager?.startUpdatePages(); for (let i = 1, ii = pagesMapper.pagesNumber; i <= ii; i++) { const prevPageNumber = pagesMapper.getPrevPageNumber(i); if (prevPageNumber < 0) { @@ -14514,6 +14857,7 @@ class PDFViewer { if (hasBeenCut) { page.updatePageNumber(i); } else { + this.#annotationEditorUIManager?.clonePage(-prevPageNumber - 1, i - 1); page = page.clone(i); } newPages.push(page); @@ -14523,21 +14867,19 @@ class PDFViewer { newPages.push(page); page.updatePageNumber(i); } - if (!isCut) { + this.#annotationEditorUIManager?.endUpdatePages(); + if (type === "paste") { this.#copiedPageViews = null; } const viewerElement = this._scrollMode === ScrollMode.PAGE ? null : this.viewer; if (viewerElement) { - viewerElement.replaceChildren(); const fragment = document.createDocumentFragment(); - for (let i = 0, ii = pagesMapper.pagesNumber; i < ii; i++) { - const { - div - } = newPages[i]; - div.setAttribute("data-page-number", i + 1); + for (const { + div + } of newPages) { fragment.append(div); } - viewerElement.append(fragment); + viewerElement.replaceChildren(fragment); } setTimeout(() => { this.forceRendering(); @@ -17152,13 +17494,15 @@ class ViewsManager extends Sidebar { viewsManagerStatus }, eventBus, - l10n + l10n, + enableSplitMerge = false, + globalAbortSignal }) { super({ sidebar: sidebarContainer, resizer, toggleButton - }, l10n.getDirection() === "ltr", false); + }, l10n.getDirection() === "ltr", false, globalAbortSignal); this.isOpen = false; this.active = SidebarView.THUMBS; this.isInitialViewSet = false; @@ -17182,12 +17526,16 @@ class ViewsManager extends Sidebar { this.viewsManagerHeaderLabel = viewsManagerHeaderLabel; this.viewsManagerStatus = viewsManagerStatus; this.eventBus = eventBus; + if (!enableSplitMerge) { + viewsManagerStatus.hidden = true; + } + this._enableSplitMerge = enableSplitMerge; this.menu = new Menu(viewsManagerSelectorOptions, viewsManagerSelectorButton, [thumbnailButton, outlineButton, attachmentsButton, layersButton]); ViewsManager.#l10nDescription ||= Object.freeze({ pagesTitle: "pdfjs-views-manager-pages-title", - outlinesTitle: "pdfjs-views-manager-outlines-title", + outlinesTitle: "pdfjs-views-manager-outlines-title1", attachmentsTitle: "pdfjs-views-manager-attachments-title", - layersTitle: "pdfjs-views-manager-layers-title", + layersTitle: "pdfjs-views-manager-layers-title1", notificationButton: "pdfjs-toggle-views-manager-notification-button", toggleButton: "pdfjs-toggle-views-manager-button" }); @@ -17256,7 +17604,9 @@ class ViewsManager extends Sidebar { console.error(`PDFSidebar.switchView: "${view}" is not a valid view.`); return; } - this.viewsManagerStatus.hidden = view !== SidebarView.THUMBS; + if (this._enableSplitMerge) { + this.viewsManagerStatus.hidden = view !== SidebarView.THUMBS; + } this.viewsManagerAddFileButton.hidden = view !== SidebarView.THUMBS; this.viewsManagerCurrentOutlineButton.hidden = view !== SidebarView.OUTLINE; this.viewsManagerHeaderLabel.setAttribute("data-l10n-id", ViewsManager.#l10nDescription[titleL10nId] || ""); @@ -17364,28 +17714,31 @@ class ViewsManager extends Sidebar { } }); } + this.viewsManagerHeaderLabel.addEventListener("dblclick", e => { + if (this.active === SidebarView.OUTLINE) { + eventBus.dispatch("toggleoutlinetree", { + source: this + }); + return; + } + if (this.active === SidebarView.LAYERS) { + eventBus.dispatch("resetlayers", { + source: this + }); + } + }); this.thumbnailButton.addEventListener("click", () => { this.switchView(SidebarView.THUMBS); }); this.outlineButton.addEventListener("click", () => { this.switchView(SidebarView.OUTLINE); }); - this.outlineButton.addEventListener("dblclick", () => { - eventBus.dispatch("toggleoutlinetree", { - source: this - }); - }); this.attachmentsButton.addEventListener("click", () => { this.switchView(SidebarView.ATTACHMENTS); }); this.layersButton.addEventListener("click", () => { this.switchView(SidebarView.LAYERS); }); - this.layersButton.addEventListener("dblclick", () => { - eventBus.dispatch("resetlayers", { - source: this - }); - }); this.viewsManagerCurrentOutlineButton.addEventListener("click", () => { eventBus.dispatch("currentoutlineitem", { source: this @@ -17569,7 +17922,6 @@ const PDFViewerApplication = { AppOptions.set("externalLinkTarget", LinkTarget.TOP); } await this._initializeViewerComponents(); - this.pdfTextExtractor = new PdfTextExtractor(this.externalServices); this.bindEvents(); this.bindWindowEvents(); this._initializedCapability.settled = true; @@ -17704,6 +18056,7 @@ const PDFViewerApplication = { background: AppOptions.get("pageColorsBackground"), foreground: AppOptions.get("pageColorsForeground") } : null; + const enableSplitMerge = AppOptions.get("enableSplitMerge"); let altTextManager; if (AppOptions.get("enableUpdatedAddImage")) { altTextManager = appConfig.newAltTextDialog ? new NewAltTextManager(appConfig.newAltTextDialog, overlayManager, eventBus) : null; @@ -17714,7 +18067,6 @@ const PDFViewerApplication = { this.editorUndoBar = new EditorUndoBar(appConfig.editorUndoBar, eventBus); } const signatureManager = AppOptions.get("enableSignatureEditor") && appConfig.addSignatureDialog ? new SignatureManager(appConfig.addSignatureDialog, appConfig.editSignatureDialog, appConfig.annotationEditorParams?.editorSignatureAddSignature || null, overlayManager, l10n, externalServices.createSignatureStorage(eventBus, abortSignal), eventBus) : null; - const ltr = appConfig.viewerContainer ? getComputedStyle(appConfig.viewerContainer).direction === "ltr" : true; const commentManager = AppOptions.get("enableComment") && appConfig.editCommentDialog ? new CommentManager(appConfig.editCommentDialog, { learnMoreUrl: AppOptions.get("commentLearnMoreUrl"), sidebar: appConfig.annotationEditorParams?.editorCommentsSidebar || null, @@ -17724,9 +18076,8 @@ const PDFViewerApplication = { sidebarTitle: appConfig.annotationEditorParams?.editorCommentsSidebarTitle || null, closeButton: appConfig.annotationEditorParams?.editorCommentsSidebarCloseButton || null, commentToolbarButton: appConfig.toolbar?.editorCommentButton || null - }, eventBus, linkService, overlayManager, ltr, hasForcedColors) : null; - const enableHWA = AppOptions.get("enableHWA"), - maxCanvasPixels = AppOptions.get("maxCanvasPixels"), + }, eventBus, linkService, overlayManager, l10n.getDirection() === "ltr", hasForcedColors, abortSignal) : null; + const maxCanvasPixels = AppOptions.get("maxCanvasPixels"), maxCanvasDim = AppOptions.get("maxCanvasDim"), capCanvasAreaFactor = AppOptions.get("capCanvasAreaFactor"); const pdfViewer = this.pdfViewer = new PDFViewer({ @@ -17759,10 +18110,10 @@ const PDFViewerApplication = { enableDetailCanvas: AppOptions.get("enableDetailCanvas"), enablePermissions: AppOptions.get("enablePermissions"), enableOptimizedPartialRendering: AppOptions.get("enableOptimizedPartialRendering"), + imagesRightClickMinSize: AppOptions.get("imagesRightClickMinSize"), pageColors, mlManager, abortSignal, - enableHWA, supportsPinchToZoom: this.supportsPinchToZoom, enableAutoLinking: AppOptions.get("enableAutoLinking"), minDurationToUpdateCanvas: AppOptions.get("minDurationToUpdateCanvas") @@ -17771,8 +18122,11 @@ const PDFViewerApplication = { linkService.setViewer(pdfViewer); pdfScriptingManager.setViewer(pdfViewer); if (appConfig.viewsManager?.thumbnailsView) { + const { + viewsManager + } = appConfig; this.pdfThumbnailViewer = new PDFThumbnailViewer({ - container: appConfig.viewsManager.thumbnailsView, + container: viewsManager.thumbnailsView, eventBus, renderingQueue, linkService, @@ -17780,10 +18134,12 @@ const PDFViewerApplication = { maxCanvasDim, pageColors, abortSignal, - enableHWA, - enableSplitMerge: AppOptions.get("enableSplitMerge"), - manageMenu: appConfig.viewsManager.manageMenu, - addFileButton: appConfig.viewsManager.viewsManagerAddFileButton + enableSplitMerge, + enableNewBadge: AppOptions.get("enableNewBadge"), + statusBar: viewsManager.viewsManagerStatusBar, + undoBar: viewsManager.viewsManagerUndoBar, + manageMenu: viewsManager.manageMenu, + addFileButton: viewsManager.viewsManagerAddFileButton }); renderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); } @@ -17875,7 +18231,9 @@ const PDFViewerApplication = { this.viewsManager = new ViewsManager({ elements: appConfig.viewsManager, eventBus, - l10n + l10n, + enableSplitMerge, + globalAbortSignal: abortSignal }); this.viewsManager.onToggled = this.forceRendering.bind(this); this.viewsManager.onUpdateThumbnails = () => { @@ -18079,8 +18437,8 @@ const PDFViewerApplication = { if (this.isViewerEmbedded) { return; } - const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing; - document.title = `${editorIndicator ? "* " : ""}${title}`; + const hasChangesIndicator = this._hasChanges() && !this.pdfRenderingQueue.printing; + document.title = `${hasChangesIndicator ? "* " : ""}${title}`; }, get _docFilename() { return this._contentDispositionFilename || getPdfFilenameFromUrl(this.url); @@ -18113,9 +18471,9 @@ const PDFViewerApplication = { if (!this.pdfLoadingTask) { return; } - if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) { + if (this._hasChanges() && this._annotationStorageModified) { try { - await this.save(); + await this.downloadOrSave(); } catch {} } const promises = []; @@ -18127,7 +18485,6 @@ const PDFViewerApplication = { this.pdfViewer.setDocument(null); this.pdfLinkService.setDocument(null); this.pdfDocumentProperties?.setDocument(null); - this.pdfTextExtractor?.setViewer(null); } this.pdfLinkService.externalLinkEnabled = true; this.store = null; @@ -18184,6 +18541,9 @@ const PDFViewerApplication = { if (loadingTask !== this.pdfLoadingTask) { return undefined; } + if (this.loadingBar) { + this.loadingBar.percent ||= 0; + } let key = "pdfjs-loading-error"; if (reason instanceof InvalidPDFException) { key = "pdfjs-invalid-file-error"; @@ -18236,7 +18596,19 @@ const PDFViewerApplication = { classList } = this.appConfig.appContainer; classList.add("wait"); - await (this.pdfDocument?.annotationStorage.size > 0 ? this.save() : this.download()); + if (this.pdfThumbnailViewer?.hasStructuralChanges()) { + this.externalServices.reportTelemetry({ + type: "pageOrganization", + data: { + action: "save" + } + }); + await this.onSavePages({ + data: this.pdfThumbnailViewer.getStructuralChanges() + }); + } else { + await (this.pdfDocument?.annotationStorage.size > 0 ? this.save() : this.download()); + } classList.remove("wait"); }, async _documentError(key, moreInfo = null) { @@ -18307,7 +18679,6 @@ const PDFViewerApplication = { this.pdfDocumentProperties?.setDocument(pdfDocument); const pdfViewer = this.pdfViewer; pdfViewer.setDocument(pdfDocument); - this.pdfTextExtractor.setViewer(pdfViewer); const { firstPagePromise, onePageRendered, @@ -18597,6 +18968,9 @@ const PDFViewerApplication = { }); } }, + _hasChanges() { + return this.pdfDocument?.annotationStorage.size > 0 || this.pdfThumbnailViewer?.hasStructuralChanges(); + }, _initializeAnnotationStorageCallbacks(pdfDocument) { if (pdfDocument !== this.pdfDocument) { return; @@ -18605,11 +18979,9 @@ const PDFViewerApplication = { annotationStorage } = pdfDocument; annotationStorage.onSetModified = () => { - window.addEventListener("beforeunload", beforeUnload); this._annotationStorageModified = true; }; annotationStorage.onResetModified = () => { - window.removeEventListener("beforeunload", beforeUnload); delete this._annotationStorageModified; }; annotationStorage.onAnnotationEditor = typeStr => { @@ -18785,7 +19157,7 @@ const PDFViewerApplication = { eventBus._on("fileinputchange", onFileInputChange.bind(this), opts); eventBus._on("openfile", onOpenFile.bind(this), opts); eventBus._on("pagesedited", this.onPagesEdited.bind(this), opts); - eventBus._on("savepageseditedpdf", this.onSavePagesEditedPDF.bind(this), opts); + eventBus._on("saveextractedpages", this.onSavePages.bind(this), opts); }, bindWindowEvents() { if (this._windowAbortController) { @@ -18865,6 +19237,9 @@ const PDFViewerApplication = { }, { signal }); + window.addEventListener("beforeunload", onBeforeUnload.bind(this), { + signal + }); if (!("onscrollend" in document.documentElement)) { return; } @@ -18931,7 +19306,7 @@ const PDFViewerApplication = { onPagesEdited(data) { this.pdfViewer.onPagesEdited(data); }, - async onSavePagesEditedPDF({ + async onSavePages({ data: extractParams }) { if (!this.pdfDocument) { @@ -19275,6 +19650,14 @@ function closeEditorUndoBar(evt) { this.editorUndoBar.hide(); } } +function onBeforeUnload(evt) { + if (this._hasChanges()) { + evt.preventDefault(); + evt.returnValue = ""; + return false; + } + return true; +} function onClick(evt) { closeSecondaryToolbar.call(this, evt); closeEditorUndoBar.call(this, evt); @@ -19559,11 +19942,6 @@ function onKeyDown(evt) { evt.preventDefault(); } } -function beforeUnload(evt) { - evt.preventDefault(); - evt.returnValue = ""; - return false; -} ;// ./web/viewer.js @@ -19657,13 +20035,24 @@ function getViewerConfiguration() { viewsManagerCurrentOutlineButton: document.getElementById("viewsManagerCurrentOutlineButton"), viewsManagerHeaderLabel: document.getElementById("viewsManagerHeaderLabel"), viewsManagerStatus: document.getElementById("viewsManagerStatus"), + viewsManagerStatusBar: { + viewsManagerStatusAction: document.getElementById("viewsManagerStatusAction"), + viewsManagerStatusActionDeselectButton: document.getElementById("viewsManagerStatusActionDeselectButton"), + viewsManagerStatusActionLabel: document.getElementById("viewsManagerStatusActionLabel") + }, + viewsManagerUndoBar: { + viewsManagerStatusUndo: document.getElementById("viewsManagerStatusUndo"), + viewsManagerStatusUndoLabel: document.getElementById("viewsManagerStatusUndoLabel"), + viewsManagerStatusUndoButton: document.getElementById("viewsManagerStatusUndoButton"), + viewsManagerStatusUndoCloseButton: document.getElementById("viewsManagerStatusUndoCloseButton") + }, manageMenu: { button: document.getElementById("viewsManagerStatusActionButton"), menu: document.getElementById("viewsManagerStatusActionOptions"), copy: document.getElementById("viewsManagerStatusActionCopy"), cut: document.getElementById("viewsManagerStatusActionCut"), delete: document.getElementById("viewsManagerStatusActionDelete"), - saveAs: document.getElementById("viewsManagerStatusActionSaveAs") + exportSelected: document.getElementById("viewsManagerStatusActionExport") } }, findBar: { diff --git a/packages/pdfjs-viewer/viewer/viewer.mjs.map b/packages/pdfjs-viewer/viewer/viewer.mjs.map index 5942a6411c..86a3d728c4 100644 --- a/packages/pdfjs-viewer/viewer/viewer.mjs.map +++ b/packages/pdfjs-viewer/viewer/viewer.mjs.map @@ -1 +1 @@ -{"version":3,"file":"viewer.mjs","mappings":"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","sources":["webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/./web/pdfjs.js","webpack://pdf.js/./web/ui_utils.js","webpack://pdf.js/./web/app_options.js","webpack://pdf.js/./web/pdf_link_service.js","webpack://pdf.js/./web/event_utils.js","webpack://pdf.js/./web/external_services.js","webpack://pdf.js/./web/preferences.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/types.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resolver.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/scope.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/builtins.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/memoizer.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/bundle.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resource.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/index.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/overlay.js","webpack://pdf.js/./node_modules/cached-iterable/src/cached_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_sync_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_async_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/index.mjs","webpack://pdf.js/./node_modules/@fluent/dom/esm/localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/dom_localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/index.js","webpack://pdf.js/./web/l10n.js","webpack://pdf.js/./web/genericl10n.js","webpack://pdf.js/./web/generic_scripting.js","webpack://pdf.js/./web/generic_signature_storage.js","webpack://pdf.js/./web/genericcom.js","webpack://pdf.js/./web/new_alt_text_manager.js","webpack://pdf.js/./web/alt_text_manager.js","webpack://pdf.js/./web/annotation_editor_params.js","webpack://pdf.js/./web/caret_browsing.js","webpack://pdf.js/./web/sidebar.js","webpack://pdf.js/./web/comment_manager.js","webpack://pdf.js/./web/base_download_manager.js","webpack://pdf.js/./web/download_manager.js","webpack://pdf.js/./web/editor_undo_bar.js","webpack://pdf.js/./web/overlay_manager.js","webpack://pdf.js/./web/password_prompt.js","webpack://pdf.js/./web/base_tree_viewer.js","webpack://pdf.js/./web/pdf_attachment_viewer.js","webpack://pdf.js/./web/grab_to_pan.js","webpack://pdf.js/./web/pdf_cursor_tools.js","webpack://pdf.js/./web/pdf_document_properties.js","webpack://pdf.js/./web/pdf_find_utils.js","webpack://pdf.js/./web/pdf_find_controller.js","webpack://pdf.js/./web/pdf_find_bar.js","webpack://pdf.js/./web/pdf_history.js","webpack://pdf.js/./web/pdf_layer_viewer.js","webpack://pdf.js/./web/pdf_outline_viewer.js","webpack://pdf.js/./web/pdf_presentation_mode.js","webpack://pdf.js/./web/xfa_layer_builder.js","webpack://pdf.js/./web/print_utils.js","webpack://pdf.js/./web/pdf_print_service.js","webpack://pdf.js/./web/renderable_view.js","webpack://pdf.js/./web/pdf_rendering_queue.js","webpack://pdf.js/./web/pdf_scripting_manager.js","webpack://pdf.js/./web/pdf_text_extractor.js","webpack://pdf.js/./web/menu.js","webpack://pdf.js/./web/pdf_thumbnail_view.js","webpack://pdf.js/./web/pdf_thumbnail_viewer.js","webpack://pdf.js/./web/annotation_editor_layer_builder.js","webpack://pdf.js/./web/annotation_layer_builder.js","webpack://pdf.js/./web/autolinker.js","webpack://pdf.js/./web/base_pdf_page_view.js","webpack://pdf.js/./web/draw_layer_builder.js","webpack://pdf.js/./web/pdf_page_detail_view.js","webpack://pdf.js/./web/struct_tree_layer_builder.js","webpack://pdf.js/./web/text_accessibility.js","webpack://pdf.js/./web/text_highlighter.js","webpack://pdf.js/./web/text_layer_builder.js","webpack://pdf.js/./web/pdf_page_view.js","webpack://pdf.js/./web/pdf_viewer.js","webpack://pdf.js/./web/secondary_toolbar.js","webpack://pdf.js/./web/signature_manager.js","webpack://pdf.js/./web/toolbar.js","webpack://pdf.js/./web/view_history.js","webpack://pdf.js/./web/views_manager.js","webpack://pdf.js/./web/app.js","webpack://pdf.js/./web/viewer.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n AnnotationType,\n applyOpacity,\n build,\n ColorPicker,\n createValidAbsoluteUrl,\n CSSConstants,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n findContrastColor,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getUuid,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n isValidExplicitDest,\n makeArr,\n makeMap,\n makeObj,\n MathClamp,\n noContextMenu,\n normalizeUnicode,\n OPS,\n OutputScale,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n renderRichText,\n ResponseException,\n setLayerDimensions,\n shadow,\n SignatureExtractor,\n stopEvent,\n SupportedImageMimeTypes,\n TextLayer,\n TouchManager,\n updateUrlHash,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n} = globalThis.pdfjsLib;\n\nexport {\n AbortException,\n AnnotationEditorLayer,\n AnnotationEditorParamsType,\n AnnotationEditorType,\n AnnotationEditorUIManager,\n AnnotationLayer,\n AnnotationMode,\n AnnotationType,\n applyOpacity,\n build,\n ColorPicker,\n createValidAbsoluteUrl,\n CSSConstants,\n DOMSVGFactory,\n DrawLayer,\n FeatureTest,\n fetchData,\n findContrastColor,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getRGB,\n getUuid,\n getXfaPageViewport,\n GlobalWorkerOptions,\n ImageKind,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n isValidExplicitDest,\n makeArr,\n makeMap,\n makeObj,\n MathClamp,\n noContextMenu,\n normalizeUnicode,\n OPS,\n OutputScale,\n PasswordResponses,\n PDFDataRangeTransport,\n PDFDateString,\n PDFWorker,\n PermissionFlag,\n PixelsPerInch,\n RenderingCancelledException,\n renderRichText,\n ResponseException,\n setLayerDimensions,\n shadow,\n SignatureExtractor,\n stopEvent,\n SupportedImageMimeTypes,\n TextLayer,\n TouchManager,\n updateUrlHash,\n Util,\n VerbosityLevel,\n version,\n XfaLayer,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MathClamp } from \"pdfjs-lib\";\n\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst SidebarView = {\n UNKNOWN: -1,\n NONE: 0,\n THUMBS: 1, // Default value.\n OUTLINE: 2,\n ATTACHMENTS: 3,\n LAYERS: 4,\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_PERMISSIONS: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n PAGE: 3,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\nconst CursorTool = {\n SELECT: 0, // The default value.\n HAND: 1,\n ZOOM: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {HTMLElement} element - The element to be visible.\n * @param {Object} [spot] - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {number} [spot.left]\n * @param {number} [spot.top]\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n * ignore elements that either: Contains marked content identifiers,\n * or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error(\"offsetParent is not set -- cannot scroll\");\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (\n (parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (scrollMatches &&\n (parent.classList.contains(\"markedContent\") ||\n getComputedStyle(parent).overflow === \"hidden\"))\n ) {\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n if (scrollMatches) {\n const elementWidth = element.getBoundingClientRect().width;\n const padding = MathClamp(\n (parent.clientWidth - elementWidth) / 2,\n 20,\n 400\n );\n offsetX += spot.left - padding;\n } else {\n offsetX += spot.left;\n }\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback, abortSignal = undefined) {\n const debounceScroll = function (evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n const currentX = viewAreaElement.scrollLeft;\n const lastX = state.lastX;\n if (currentX !== lastX) {\n state.right = currentX > lastX;\n }\n state.lastX = currentX;\n const currentY = viewAreaElement.scrollTop;\n const lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n const state = {\n right: true,\n down: true,\n lastX: viewAreaElement.scrollLeft,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener(\"scroll\", debounceScroll, {\n useCapture: true,\n signal: abortSignal,\n });\n abortSignal?.addEventListener(\n \"abort\",\n () => window.cancelAnimationFrame(rAF),\n { once: true }\n );\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value¶m2=...).\n * @param {string} query\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n const params = new Map();\n for (const [key, value] of new URLSearchParams(query)) {\n params.set(key.toLowerCase(), value);\n }\n return params;\n}\n\nconst InvisibleCharsRegExp = /[\\x00-\\x1F]/g;\n\n/**\n * @param {string} str\n * @param {boolean} [replaceInvisible]\n */\nfunction removeNullCharacters(str, replaceInvisible = false) {\n if (!InvisibleCharsRegExp.test(str)) {\n return str;\n }\n if (replaceInvisible) {\n return str.replaceAll(InvisibleCharsRegExp, m => (m === \"\\x00\" ? \"\" : \" \"));\n }\n return str.replaceAll(\"\\x00\", \"\");\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition, start = 0) {\n let minIndex = start;\n let maxIndex = items.length - 1;\n\n if (maxIndex < 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n const currentIndex = (minIndex + maxIndex) >> 1;\n const currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n * They are both natural numbers.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n const xinv = 1 / x;\n const limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n const x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0,\n b = 1,\n c = 1,\n d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n const p = a + c,\n q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p;\n d = q;\n } else {\n a = p;\n b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\n/**\n * @param {number} x - A positive number to round to a multiple of `div`.\n * @param {number} div - A natural number.\n */\nfunction floorToDivide(x, div) {\n return x - (x % div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = ((x2 - x1) / 72) * userUnit;\n const height = ((y2 - y1) / 72) * userUnit;\n\n return {\n width: changeOrientation ? height : width,\n height: changeOrientation ? width : height,\n };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n * before the first visible element in `views`, but not by too much. (Usually,\n * this will be the first element in the first partially visible row in\n * `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n // binarySearchFirstItem's assumption is that the input is ordered, with only\n // one index where the conditions flips from false to true: [false ...,\n // true...]. With vertical scrolling and spreads, it is possible to have\n // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n // similar sequence, with many more mixed true and false in the middle.\n //\n // So there is no guarantee that the binary search yields the index of the\n // first visible element. It could have been any of the other visible elements\n // that were preceded by a hidden element.\n\n // Of course, if either this element or the previous (hidden) element is also\n // the first element, there's nothing to worry about.\n if (index < 2) {\n return index;\n }\n\n // That aside, the possible cases are represented below.\n //\n // **** = fully hidden\n // A*B* = mix of partially visible and/or hidden pages\n // CDEF = fully visible\n //\n // (1) Binary search could have returned A, in which case we can stop.\n // (2) Binary search could also have returned B, in which case we need to\n // check the whole row.\n // (3) Binary search could also have returned C, in which case we need to\n // check the whole previous row.\n //\n // There's one other possibility:\n //\n // **** = fully hidden\n // ABCD = mix of fully and/or partially visible pages\n //\n // (4) Binary search could only have returned A.\n\n // Initially assume that we need to find the beginning of the current row\n // (case 1, 2, or 4), which means finding a page that is above the current\n // page's top. If the found page is partially visible, we're definitely not in\n // case 3, and this assumption is correct.\n let elt = views[index].div;\n let pageTop = elt.offsetTop + elt.clientTop;\n\n if (pageTop >= top) {\n // The found page is fully visible, so we're actually either in case 3 or 4,\n // and unfortunately we can't tell the difference between them without\n // scanning the entire previous row, so we just conservatively assume that\n // we do need to backtrack to that row. In both cases, the previous page is\n // in the previous row, so use its top instead.\n elt = views[index - 1].div;\n pageTop = elt.offsetTop + elt.clientTop;\n }\n\n // Now we backtrack to the first page that still has its bottom below\n // `pageTop`, which is the top of a page in the first visible row (unless\n // we're in case 4, in which case it's the row before that).\n // `index` is found by binary search, so the page at `index - 1` is\n // invisible and we can start looking for potentially visible pages from\n // `index - 2`. (However, if this loop terminates on its first iteration,\n // which is the case when pages are stacked vertically, `index` should remain\n // unchanged, so we use a distinct loop variable.)\n for (let i = index - 2; i >= 0; --i) {\n elt = views[i].div;\n if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n // We have reached the previous row, so stop now.\n // This loop is expected to terminate relatively quickly because the\n // number of pages per row is expected to be small.\n break;\n }\n index = i;\n }\n return index;\n}\n\n/**\n * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n * HTMLElement, which should all be descendants of `scrollEl` satisfying the\n * relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n * sorted in descending order of the percent of their padding box that is\n * visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n * laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n * be in right-to-left mode. The default value is `false`.\n */\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n * - If `horizontal`, no left of any earlier element is to the right of the\n * left of any later element.\n * - Otherwise, `views` can be split into contiguous rows where, within a row,\n * no top of any element is below the bottom of any other element, and\n * between rows, no bottom of any element in an earlier row is below the\n * top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param {GetVisibleElementsParameters} params\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n scrollEl,\n views,\n sortByVisibility = false,\n horizontal = false,\n rtl = false,\n}) {\n const top = scrollEl.scrollTop,\n bottom = top + scrollEl.clientHeight;\n const left = scrollEl.scrollLeft,\n right = left + scrollEl.clientWidth;\n\n // Throughout this \"generic\" function, comments will assume we're working with\n // PDF document pages, which is the most important and complex case. In this\n // case, the visible elements we're actually interested is the page canvas,\n // which is contained in a wrapper which adds no padding/border/margin, which\n // is itself contained in `view.div` which adds no padding (but does add a\n // border). So, as specified in this function's doc comment, this function\n // does all of its work on the padding edge of the provided views, starting at\n // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n // the border). Adding clientWidth/Height gets us the bottom-right corner of\n // the padding edge.\n function isElementBottomAfterViewTop(view) {\n const element = view.div;\n const elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n function isElementNextAfterViewHorizontally(view) {\n const element = view.div;\n const elementLeft = element.offsetLeft + element.clientLeft;\n const elementRight = elementLeft + element.clientWidth;\n return rtl ? elementLeft < right : elementRight > left;\n }\n\n const visible = [],\n ids = new Set(),\n numViews = views.length;\n let firstVisibleElementInd = binarySearchFirstItem(\n views,\n horizontal\n ? isElementNextAfterViewHorizontally\n : isElementBottomAfterViewTop\n );\n\n // Please note the return value of the `binarySearchFirstItem` function when\n // no valid element is found (hence the `firstVisibleElementInd` check below).\n if (\n firstVisibleElementInd > 0 &&\n firstVisibleElementInd < numViews &&\n !horizontal\n ) {\n // In wrapped scrolling (or vertical scrolling with spreads), with some page\n // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n // condition: there can be pages with bottoms above the view top between\n // pages with bottoms below. This function detects and corrects that error;\n // see it for more comments.\n firstVisibleElementInd = backtrackBeforeAllVisibleElements(\n firstVisibleElementInd,\n views,\n top\n );\n }\n\n // lastEdge acts as a cutoff for us to stop looping, because we know all\n // subsequent pages will be hidden.\n //\n // When using wrapped scrolling or vertical scrolling with spreads, we can't\n // simply stop the first time we reach a page below the bottom of the view;\n // the tops of subsequent pages on the same row could still be visible. In\n // horizontal scrolling, we don't have that issue, so we can stop as soon as\n // we pass `right`, without needing the code below that handles the -1 case.\n let lastEdge = horizontal ? right : -1;\n\n for (let i = firstVisibleElementInd; i < numViews; i++) {\n const view = views[i],\n element = view.div;\n const currentWidth = element.offsetLeft + element.clientLeft;\n const currentHeight = element.offsetTop + element.clientTop;\n const viewWidth = element.clientWidth,\n viewHeight = element.clientHeight;\n const viewRight = currentWidth + viewWidth;\n const viewBottom = currentHeight + viewHeight;\n\n if (lastEdge === -1) {\n // As commented above, this is only needed in non-horizontal cases.\n // Setting lastEdge to the bottom of the first page that is partially\n // visible ensures that the next page fully below lastEdge is on the\n // next row, which has to be fully hidden along with all subsequent rows.\n if (viewBottom >= bottom) {\n lastEdge = viewBottom;\n }\n } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n break;\n }\n\n if (\n viewBottom <= top ||\n currentHeight >= bottom ||\n viewRight <= left ||\n currentWidth >= right\n ) {\n continue;\n }\n\n const minY = Math.max(0, top - currentHeight);\n const minX = Math.max(0, left - currentWidth);\n\n const hiddenHeight = minY + Math.max(0, viewBottom - bottom);\n const hiddenWidth = minX + Math.max(0, viewRight - right);\n\n const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n visibleArea:\n // We only specify which part of the page is visible when it's not\n // the full page, as there is no point in handling a partial page\n // rendering otherwise.\n percent === 100\n ? null\n : {\n minX,\n minY,\n maxX: Math.min(viewRight, right) - currentWidth,\n maxY: Math.min(viewBottom, bottom) - currentHeight,\n },\n view,\n percent,\n widthPercent: (fractionWidth * 100) | 0,\n });\n ids.add(view.id);\n }\n\n const first = visible[0],\n last = visible.at(-1);\n\n if (sortByVisibility) {\n visible.sort(function (a, b) {\n const pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, ids };\n}\n\nfunction normalizeWheelEventDirection(evt) {\n let delta = Math.hypot(evt.deltaX, evt.deltaY);\n const angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n const deltaMode = evt.deltaMode; // Avoid being affected by bug 1392460.\n let delta = normalizeWheelEventDirection(evt);\n\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(ScrollMode).includes(mode) &&\n mode !== ScrollMode.UNKNOWN\n );\n}\n\nfunction isValidSpreadMode(mode) {\n return (\n Number.isInteger(mode) &&\n Object.values(SpreadMode).includes(mode) &&\n mode !== SpreadMode.UNKNOWN\n );\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof window === \"undefined\"\n ) {\n // Prevent \"ReferenceError: window is not defined\" errors when running the\n // unit-tests in Node.js environments.\n setTimeout(resolve, 20);\n return;\n }\n window.requestAnimationFrame(resolve);\n});\n\nconst docStyle =\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ? null\n : document.documentElement.style;\n\nclass ProgressBar {\n #classList = null;\n\n #disableAutoFetchTimeout = null;\n\n #percent = 0;\n\n #style = null;\n\n #visible = true;\n\n constructor(bar) {\n this.#classList = bar.classList;\n this.#style = bar.style;\n }\n\n get percent() {\n return this.#percent;\n }\n\n set percent(val) {\n this.#percent = val;\n\n if (isNaN(val)) {\n this.#classList.add(\"indeterminate\");\n return;\n }\n this.#classList.remove(\"indeterminate\");\n\n this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n const container = viewer.parentNode;\n const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.#style.setProperty(\n \"--progressBar-end-offset\",\n `${scrollbarWidth}px`\n );\n }\n }\n\n setDisableAutoFetch(delay = /* ms = */ 5000) {\n if (this.#percent === 100 || isNaN(this.#percent)) {\n return;\n }\n if (this.#disableAutoFetchTimeout) {\n clearTimeout(this.#disableAutoFetchTimeout);\n }\n this.show();\n\n this.#disableAutoFetchTimeout = setTimeout(() => {\n this.#disableAutoFetchTimeout = null;\n this.hide();\n }, delay);\n }\n\n hide() {\n if (!this.#visible) {\n return;\n }\n this.#visible = false;\n this.#classList.add(\"hidden\");\n }\n\n show() {\n if (this.#visible) {\n return;\n }\n this.#visible = true;\n this.#classList.remove(\"hidden\");\n }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n let curRoot = document;\n let curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n while (curActiveOrFocused?.shadowRoot) {\n curRoot = curActiveOrFocused.shadowRoot;\n curActiveOrFocused =\n curRoot.activeElement || curRoot.querySelector(\":focus\");\n }\n\n return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * @param {string} layout - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n let scrollMode = ScrollMode.VERTICAL,\n spreadMode = SpreadMode.NONE;\n\n switch (layout) {\n case \"SinglePage\":\n scrollMode = ScrollMode.PAGE;\n break;\n case \"OneColumn\":\n break;\n case \"TwoPageLeft\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnLeft\":\n spreadMode = SpreadMode.ODD;\n break;\n case \"TwoPageRight\":\n scrollMode = ScrollMode.PAGE;\n /* falls through */\n case \"TwoColumnRight\":\n spreadMode = SpreadMode.EVEN;\n break;\n }\n return { scrollMode, spreadMode };\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n * since the Fullscreen API used in browsers requires that entering\n * fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n switch (mode) {\n case \"UseNone\":\n return SidebarView.NONE;\n case \"UseThumbs\":\n return SidebarView.THUMBS;\n case \"UseOutlines\":\n return SidebarView.OUTLINE;\n case \"UseAttachments\":\n return SidebarView.ATTACHMENTS;\n case \"UseOC\":\n return SidebarView.LAYERS;\n }\n return SidebarView.NONE; // Default value.\n}\n\nfunction toggleCheckedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-checked\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleSelectedBtn(button, toggle, view = null) {\n button.classList.toggle(\"selected\", toggle);\n button.setAttribute(\"aria-selected\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleExpandedBtn(button, toggle, view = null) {\n button.classList.toggle(\"toggled\", toggle);\n button.setAttribute(\"aria-expanded\", toggle);\n\n view?.classList.toggle(\"hidden\", !toggle);\n}\n\n// In Firefox, the css calc function uses f32 precision but the Chrome or Safari\n// are using f64 one. So in order to have the same rendering in all browsers, we\n// need to use the right precision in order to have correct dimensions.\nconst calcRound =\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? Math.fround\n : (function () {\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n typeof document === \"undefined\"\n ) {\n return x => x;\n }\n const e = document.createElement(\"div\");\n e.style.width = \"round(down, calc(1.6666666666666665 * 792px), 1px)\";\n return e.style.width === \"calc(1320px)\" ? Math.fround : x => x;\n })();\n\nexport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n approximateFraction,\n AutoPrintRegExp,\n backtrackBeforeAllVisibleElements, // only exported for testing\n binarySearchFirstItem,\n calcRound,\n CursorTool,\n DEFAULT_SCALE,\n DEFAULT_SCALE_DELTA,\n DEFAULT_SCALE_VALUE,\n docStyle,\n floorToDivide,\n getActiveOrFocusedElement,\n getPageSizeInches,\n getVisibleElements,\n isPortraitOrientation,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n MAX_AUTO_SCALE,\n MAX_SCALE,\n MIN_SCALE,\n normalizeWheelEventDelta,\n normalizeWheelEventDirection,\n parseQueryString,\n PresentationModeState,\n ProgressBar,\n removeNullCharacters,\n SCROLLBAR_PADDING,\n scrollIntoView,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n toggleCheckedBtn,\n toggleExpandedBtn,\n toggleSelectedBtn,\n UNKNOWN_SCALE,\n VERTICAL_PADDING,\n watchScroll,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-var\n var compatParams = new Map();\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"LIB\") &&\n !globalThis.navigator?.language\n ) {\n globalThis.navigator = {\n language: \"en-US\",\n maxTouchPoints: 1,\n platform: \"\",\n userAgent: \"\",\n };\n }\n const { maxTouchPoints, platform, userAgent } = navigator;\n\n const isAndroid = /Android/.test(userAgent);\n const isIOS =\n /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n (platform === \"MacIntel\" && maxTouchPoints > 1);\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n if (isIOS || isAndroid) {\n compatParams.set(\"maxCanvasPixels\", 5242880);\n }\n\n // Don't use system fonts on Android (issue 18210).\n // Support: Android\n if (isAndroid) {\n compatParams.set(\"useSystemFonts\", false);\n }\n}\n\nconst OptionKind = {\n BROWSER: 0x01,\n VIEWER: 0x02,\n API: 0x04,\n WORKER: 0x08,\n EVENT_DISPATCH: 0x10,\n PREFERENCE: 0x80,\n};\n\n// Should only be used with options that allow multiple types.\nconst Type = {\n BOOLEAN: 0x01,\n NUMBER: 0x02,\n OBJECT: 0x04,\n STRING: 0x08,\n UNDEFINED: 0x10,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n * see `OptionKind.PREFERENCE`, hence the values below must use only\n * primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n allowedGlobalEvents: {\n /** @type {Object} */\n value: null,\n kind: OptionKind.BROWSER,\n },\n canvasMaxAreaInBytes: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.BROWSER + OptionKind.API,\n },\n isInAutomation: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n localeProperties: {\n /** @type {Object} */\n value:\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")\n ? { lang: navigator.language || \"en-US\" }\n : null,\n kind: OptionKind.BROWSER,\n },\n maxCanvasDim: {\n /** @type {number} */\n value: 32767,\n kind: OptionKind.BROWSER + OptionKind.VIEWER,\n },\n nimbusDataStr: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.BROWSER,\n },\n supportsCaretBrowsingMode: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsDocumentFonts: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsIntegratedFind: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomCtrlKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsMouseWheelZoomMetaKey: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPinchToZoom: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n supportsPrinting: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.BROWSER,\n },\n toolbarDensity: {\n /** @type {number} */\n value: 0, // 0 = \"normal\", 1 = \"compact\", 2 = \"touch\"\n kind: OptionKind.BROWSER + OptionKind.EVENT_DISPATCH,\n },\n\n altTextLearnMoreUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"https://support.mozilla.org/1/firefox/%VERSION%/%OS%/%LOCALE%/pdf-alt-text\"\n : \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationEditorMode: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n annotationMode: {\n /** @type {number} */\n value: 2,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n capCanvasAreaFactor: {\n /** @type {number} */\n value: 200,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n commentLearnMoreUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"MOZCENTRAL\")\n ? \"https://support.mozilla.org/%LOCALE%/kb/view-pdf-files-firefox-or-choose-another-viewer#w_add-a-comment-to-a-pdf\"\n : \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n cursorToolOnLoad: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n debuggerSrc: {\n /** @type {string} */\n value: \"./debugger.mjs\",\n kind: OptionKind.VIEWER,\n },\n defaultZoomDelay: {\n /** @type {number} */\n value: 400,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n defaultZoomValue: {\n /** @type {string} */\n value: \"\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n disableHistory: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER,\n },\n disablePageLabels: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableAltText: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableAltTextModelDownload: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH,\n },\n enableAutoLinking: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableComment: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableDetailCanvas: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER,\n },\n enableGuessAltText: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE + OptionKind.EVENT_DISPATCH,\n },\n enableHighlightFloatingButton: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableNewAltTextWhenAddingImage: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableOptimizedPartialRendering: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePermissions: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enablePrintAutoRotate: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableScripting: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableSignatureEditor: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableSplitMerge: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableUpdatedAddImage: {\n // We'll probably want to make some experiments before enabling this\n // in Firefox release, but it has to be temporary.\n // TODO: remove it when unnecessary.\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n externalLinkRel: {\n /** @type {string} */\n value: \"noopener noreferrer nofollow\",\n kind: OptionKind.VIEWER,\n },\n externalLinkTarget: {\n /** @type {number} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n highlightEditorColors: {\n /** @type {string} */\n value:\n \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F,\" +\n \"yellow_HCM=#FFFFCC,green_HCM=#53FFBC,blue_HCM=#80EBFF,pink_HCM=#F6B8FF,red_HCM=#C50043\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n historyUpdateUrl: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n ignoreDestinationZoom: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n imageResourcesPath: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/images/\"\n : \"./images/\",\n kind: OptionKind.VIEWER,\n },\n maxCanvasPixels: {\n /** @type {number} */\n value: 2 ** 25,\n kind: OptionKind.VIEWER,\n },\n minDurationToUpdateCanvas: {\n /** @type {number} */\n value: 500, // ms\n kind: OptionKind.VIEWER,\n },\n forcePageColors: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsBackground: {\n /** @type {string} */\n value: \"Canvas\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pageColorsForeground: {\n /** @type {string} */\n value: \"CanvasText\",\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n pdfBugEnabled: {\n /** @type {boolean} */\n value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n printResolution: {\n /** @type {number} */\n value: 150,\n kind: OptionKind.VIEWER,\n },\n sidebarViewOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n scrollModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n spreadModeOnLoad: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n textLayerMode: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewerCssTheme: {\n /** @type {number} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\") ? 2 : 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n viewOnLoad: {\n /** @type {boolean} */\n value: 0,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n\n cMapPacked: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n cMapUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/bcmaps/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/cmaps/\"\n : \"../web/cmaps/\",\n kind: OptionKind.API,\n },\n disableAutoFetch: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableFontFace: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableRange: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n disableStream: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n docBaseUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? // NOTE: We cannot use the `updateUrlHash` function here, because of\n // the default preferences generation (see `gulpfile.mjs`).\n // However, the following line is *only* used in development mode.\n document.URL.split(\"#\", 1)[0]\n : \"\",\n kind: OptionKind.API,\n },\n enableHWA: {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\"),\n kind: OptionKind.API + OptionKind.VIEWER + OptionKind.PREFERENCE,\n },\n enableXfa: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API + OptionKind.PREFERENCE,\n },\n fontExtraProperties: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n iccUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/iccs/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/iccs/\"\n : \"../web/iccs/\",\n kind: OptionKind.API,\n },\n isEvalSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n isOffscreenCanvasSupported: {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.API,\n },\n maxImageSize: {\n /** @type {number} */\n value: -1,\n kind: OptionKind.API,\n },\n pdfBug: {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.API,\n },\n standardFontDataUrl: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../external/standard_fonts/\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/standard_fonts/\"\n : \"../web/standard_fonts/\",\n kind: OptionKind.API,\n },\n useSystemFonts: {\n // On Android, there is almost no chance to have the font we want so we\n // don't use the system fonts in this case (bug 1882613).\n /** @type {boolean|undefined} */\n value: (\n typeof PDFJSDev === \"undefined\"\n ? window.isGECKOVIEW\n : PDFJSDev.test(\"GECKOVIEW\")\n )\n ? false\n : undefined,\n kind: OptionKind.API,\n type: Type.BOOLEAN + Type.UNDEFINED,\n },\n verbosity: {\n /** @type {number} */\n value: 1,\n kind: OptionKind.API,\n },\n wasmUrl: {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/web/wasm/\"\n : \"../web/wasm/\",\n kind: OptionKind.API,\n },\n\n workerPort: {\n /** @type {Object} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? globalThis.pdfjsPreloadedWorker || null\n : null,\n kind: OptionKind.WORKER,\n },\n workerSrc: {\n /** @type {string} */\n value:\n // eslint-disable-next-line no-nested-ternary\n typeof PDFJSDev === \"undefined\"\n ? \"../src/pdf.worker.js\"\n : PDFJSDev.test(\"MOZCENTRAL\")\n ? \"resource://pdf.js/build/pdf.worker.mjs\"\n : \"../build/pdf.worker.mjs\",\n kind: OptionKind.WORKER,\n },\n};\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n defaultOptions.defaultUrl = {\n /** @type {string} */\n value:\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n ? \"\"\n : \"compressed.tracemonkey-pldi-09.pdf\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.sandboxBundleSrc = {\n /** @type {string} */\n value:\n typeof PDFJSDev === \"undefined\"\n ? \"../build/dev-sandbox/pdf.sandbox.mjs\"\n : \"../build/pdf.sandbox.mjs\",\n kind: OptionKind.VIEWER,\n };\n defaultOptions.enableFakeMLManager = {\n /** @type {boolean} */\n value: true,\n kind: OptionKind.VIEWER,\n };\n}\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n defaultOptions.disablePreferences = {\n /** @type {boolean} */\n value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n kind: OptionKind.VIEWER,\n };\n} else if (PDFJSDev.test(\"CHROME\")) {\n defaultOptions.disableTelemetry = {\n /** @type {boolean} */\n value: false,\n kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n };\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // Ensure that the `defaultOptions` are correctly specified.\n for (const name in defaultOptions) {\n const { value, kind, type } = defaultOptions[name];\n\n if (kind & OptionKind.PREFERENCE) {\n if (kind === OptionKind.PREFERENCE) {\n throw new Error(`Cannot use only \"PREFERENCE\" kind: ${name}`);\n }\n if (kind & OptionKind.BROWSER) {\n throw new Error(`Cannot mix \"PREFERENCE\" and \"BROWSER\" kind: ${name}`);\n }\n if (type !== undefined) {\n throw new Error(\n `Cannot have \\`type\\`-field for \"PREFERENCE\" kind: ${name}`\n );\n }\n if (typeof compatParams === \"object\" && compatParams.has(name)) {\n throw new Error(\n `Should not have compatibility-value for \"PREFERENCE\" kind: ${name}`\n );\n }\n // Only \"simple\" preference-values are allowed.\n if (\n typeof value !== \"boolean\" &&\n typeof value !== \"string\" &&\n !Number.isInteger(value)\n ) {\n throw new Error(`Invalid value for \"PREFERENCE\" kind: ${name}`);\n }\n } else if (kind & OptionKind.BROWSER) {\n if (type !== undefined) {\n throw new Error(\n `Cannot have \\`type\\`-field for \"BROWSER\" kind: ${name}`\n );\n }\n if (typeof compatParams === \"object\" && compatParams.has(name)) {\n throw new Error(\n `Should not have compatibility-value for \"BROWSER\" kind: ${name}`\n );\n }\n if (value === undefined) {\n throw new Error(`Invalid value for \"BROWSER\" kind: ${name}`);\n }\n }\n }\n}\n\nclass AppOptions {\n static eventBus;\n\n static #opts = new Map();\n\n static {\n // Initialize all the user-options.\n for (const name in defaultOptions) {\n this.#opts.set(name, defaultOptions[name].value);\n }\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n // Apply any compatibility-values to the user-options.\n for (const [name, value] of compatParams) {\n this.#opts.set(name, value);\n }\n this._hasInvokedSet = false;\n\n this._checkDisablePreferences = () => {\n if (this.get(\"disablePreferences\")) {\n // Give custom implementations of the default viewer a simpler way to\n // opt-out of having the `Preferences` override existing `AppOptions`.\n return true;\n }\n if (this._hasInvokedSet) {\n console.warn(\n \"The Preferences may override manually set AppOptions; \" +\n 'please use the \"disablePreferences\"-option to prevent that.'\n );\n }\n return false;\n };\n }\n }\n\n constructor() {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Cannot initialize AppOptions.\");\n }\n }\n\n static get(name) {\n return this.#opts.get(name);\n }\n\n static getAll(kind = null, defaultOnly = false) {\n const options = Object.create(null);\n for (const name in defaultOptions) {\n const defaultOpt = defaultOptions[name];\n\n if (kind && !(kind & defaultOpt.kind)) {\n continue;\n }\n options[name] = !defaultOnly ? this.#opts.get(name) : defaultOpt.value;\n }\n return options;\n }\n\n static set(name, value) {\n this.setAll({ [name]: value });\n }\n\n static setAll(options, prefs = false) {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n this._hasInvokedSet ||= true;\n }\n let events;\n\n for (const name in options) {\n const defaultOpt = defaultOptions[name],\n userOpt = options[name];\n\n if (\n !defaultOpt ||\n !(\n typeof userOpt === typeof defaultOpt.value ||\n Type[(typeof userOpt).toUpperCase()] & defaultOpt.type\n )\n ) {\n continue;\n }\n const { kind } = defaultOpt;\n\n if (\n prefs &&\n !(kind & OptionKind.BROWSER || kind & OptionKind.PREFERENCE)\n ) {\n continue;\n }\n if (this.eventBus && kind & OptionKind.EVENT_DISPATCH) {\n (events ||= new Map()).set(name, userOpt);\n }\n this.#opts.set(name, userOpt);\n }\n\n if (events) {\n for (const [name, value] of events) {\n this.eventBus.dispatch(name.toLowerCase(), { source: this, value });\n }\n }\n }\n}\n\nexport { AppOptions, OptionKind };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n\nimport { isValidExplicitDest } from \"pdfjs-lib\";\nimport { parseQueryString } from \"./ui_utils.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n * for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n * external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n * thus preserving the current zoom level in the viewer, when navigating\n * to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n */\nclass PDFLinkService {\n externalLinkEnabled = true;\n\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({\n eventBus,\n externalLinkTarget = null,\n externalLinkRel = null,\n ignoreDestinationZoom = false,\n } = {}) {\n this.eventBus = eventBus;\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n }\n\n setDocument(pdfDocument, baseUrl = null) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @type {number}\n */\n get pagesCount() {\n return this.pdfDocument?.pagesMapper.pagesNumber || 0;\n }\n\n /**\n * @type {number}\n */\n get page() {\n return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n if (this.pdfDocument) {\n this.pdfViewer.currentPageNumber = value;\n }\n }\n\n /**\n * @type {number}\n */\n get rotation() {\n return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n if (this.pdfDocument) {\n this.pdfViewer.pagesRotation = value;\n }\n }\n\n /**\n * @type {boolean}\n */\n get isInPresentationMode() {\n return this.pdfDocument ? this.pdfViewer.isInPresentationMode : false;\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n async goToDestination(dest) {\n if (!this.pdfDocument) {\n return;\n }\n let namedDest, explicitDest, pageNumber;\n if (typeof dest === \"string\") {\n namedDest = dest;\n explicitDest = await this.pdfDocument.getDestination(dest);\n } else {\n namedDest = null;\n explicitDest = await dest;\n }\n if (!Array.isArray(explicitDest)) {\n console.error(\n `goToDestination: \"${explicitDest}\" is not a valid destination array, for dest=\"${dest}\".`\n );\n return;\n }\n // Dest array looks like that: \n const [destRef] = explicitDest;\n\n if (destRef && typeof destRef === \"object\") {\n pageNumber = this.pdfDocument.cachedPageNumber(destRef);\n\n if (!pageNumber) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n try {\n pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;\n } catch {\n console.error(\n `goToDestination: \"${destRef}\" is not a valid page reference, for dest=\"${dest}\".`\n );\n return;\n }\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `goToDestination: \"${pageNumber}\" is not a valid page number, for dest=\"${dest}\".`\n );\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new destination into\n // view, to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.push({ namedDest, explicitDest, pageNumber });\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n ignoreDestinationZoom: this._ignoreDestinationZoom,\n });\n\n const ac = new AbortController();\n this.eventBus._on(\n \"textlayerrendered\",\n evt => {\n if (evt.pageNumber === pageNumber) {\n evt.source.textLayer.div.focus();\n ac.abort();\n }\n },\n { signal: ac.signal }\n );\n }\n\n /**\n * This method will, when available, also update the browser history.\n *\n * @param {number|string} val - The page number, or page label.\n */\n goToPage(val) {\n if (!this.pdfDocument) {\n return;\n }\n const pageNumber =\n (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n val | 0;\n if (\n !(\n Number.isInteger(pageNumber) &&\n pageNumber > 0 &&\n pageNumber <= this.pagesCount\n )\n ) {\n console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new page into view,\n // to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.pushPage(pageNumber);\n }\n\n this.pdfViewer.scrollPageIntoView({ pageNumber });\n }\n\n /**\n * Scrolls to a specific location in the PDF document.\n * @param {number} pageNumber - The page number to scroll to.\n * @param {number} x - The x-coordinate to scroll to in page coordinates.\n * @param {number} y - The y-coordinate to scroll to in page coordinates.\n * @param {Object} [options]\n */\n goToXY(pageNumber, x, y, options = {}) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: [null, { name: \"XYZ\" }, x, y],\n ignoreDestinationZoom: true,\n ...options,\n });\n }\n\n /**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLAnchorElement} link\n * @param {string} url\n * @param {boolean} [newWindow]\n */\n addLinkAttributes(link, url, newWindow = false) {\n if (!url || typeof url !== \"string\") {\n throw new Error('A valid \"url\" parameter must provided.');\n }\n const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n rel = this.externalLinkRel;\n\n if (this.externalLinkEnabled) {\n link.href = link.title = url;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${url}`;\n link.onclick = () => false;\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === \"string\") {\n if (dest.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(dest));\n }\n } else if (Array.isArray(dest)) {\n const str = JSON.stringify(dest);\n if (str.length > 0) {\n return this.getAnchorUrl(\"#\" + escape(str));\n }\n }\n return this.getAnchorUrl(\"\");\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in .\n * @param {string} anchor - The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return this.baseUrl ? this.baseUrl + anchor : anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber, dest;\n if (hash.includes(\"=\")) {\n const params = parseQueryString(hash);\n if (params.has(\"search\")) {\n const query = params.get(\"search\").replaceAll('\"', \"\"),\n phrase = params.get(\"phrase\") === \"true\";\n\n this.eventBus.dispatch(\"findfromurlhash\", {\n source: this,\n query: phrase ? query : query.match(/\\S+/g),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if (params.has(\"page\")) {\n pageNumber = params.get(\"page\") | 0 || 1;\n }\n if (params.has(\"zoom\")) {\n // Build the destination array.\n const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n const zoomArg = zoomArgs[0];\n const zoomArgNumber = parseFloat(zoomArg);\n\n if (!zoomArg.includes(\"Fit\")) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [\n null,\n { name: \"XYZ\" },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n ];\n } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n dest = [null, { name: zoomArg }];\n } else if (\n zoomArg === \"FitH\" ||\n zoomArg === \"FitBH\" ||\n zoomArg === \"FitV\" ||\n zoomArg === \"FitBV\"\n ) {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n ];\n } else if (zoomArg === \"FitR\") {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n );\n } else {\n dest = [\n null,\n { name: zoomArg },\n zoomArgs[1] | 0,\n zoomArgs[2] | 0,\n zoomArgs[3] | 0,\n zoomArgs[4] | 0,\n ];\n }\n } else {\n console.error(\n `PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`\n );\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if (params.has(\"pagemode\")) {\n this.eventBus.dispatch(\"pagemode\", {\n source: this,\n mode: params.get(\"pagemode\"),\n });\n }\n // Ensure that this parameter is *always* handled last, in order to\n // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n if (params.has(\"nameddest\")) {\n this.goToDestination(params.get(\"nameddest\"));\n }\n\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n return;\n }\n // Support opening of PDF attachments in the Firefox PDF Viewer,\n // which uses a couple of non-standard hash parameters; refer to\n // `DownloadManager._getOpenDataUrl` in the firefoxcom.js file.\n if (!params.has(\"filename\") || !params.has(\"filedest\")) {\n return;\n }\n hash = params.get(\"filedest\");\n }\n\n // Named (or explicit) destination.\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!Array.isArray(dest)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch {}\n\n if (typeof dest === \"string\" || isValidExplicitDest(dest)) {\n this.goToDestination(dest);\n return;\n }\n console.error(\n `PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`\n );\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n if (!this.pdfDocument) {\n return;\n }\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case \"GoBack\":\n this.pdfHistory?.back();\n break;\n\n case \"GoForward\":\n this.pdfHistory?.forward();\n break;\n\n case \"NextPage\":\n this.pdfViewer.nextPage();\n break;\n\n case \"PrevPage\":\n this.pdfViewer.previousPage();\n break;\n\n case \"LastPage\":\n this.page = this.pagesCount;\n break;\n\n case \"FirstPage\":\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch(\"namedaction\", {\n source: this,\n action,\n });\n }\n\n /**\n * @param {Object} action\n */\n async executeSetOCGState(action) {\n if (!this.pdfDocument) {\n return;\n }\n const pdfDocument = this.pdfDocument,\n optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n\n if (pdfDocument !== this.pdfDocument) {\n return; // The document was closed while the optional content resolved.\n }\n optionalContentConfig.setOCGState(action);\n\n this.pdfViewer.optionalContentConfigPromise = Promise.resolve(\n optionalContentConfig\n );\n }\n}\n\nclass SimpleLinkService extends PDFLinkService {\n setDocument(pdfDocument, baseUrl = null) {}\n}\n\nexport { LinkTarget, PDFLinkService, SimpleLinkService };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst WaitOnType = {\n EVENT: \"event\",\n TIMEOUT: \"timeout\",\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n * `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n * timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nasync function waitOnEventOrTimeout({ target, name, delay = 0 }) {\n if (\n typeof target !== \"object\" ||\n !(name && typeof name === \"string\") ||\n !(Number.isInteger(delay) && delay >= 0)\n ) {\n throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n }\n const { promise, resolve } = Promise.withResolvers();\n const ac = new AbortController();\n\n function handler(type) {\n ac.abort(); // Remove event listener.\n clearTimeout(timeout);\n\n resolve(type);\n }\n\n const evtMethod = target instanceof EventBus ? \"_on\" : \"addEventListener\";\n target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {\n signal: ac.signal,\n });\n\n const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);\n\n return promise;\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n #listeners = Object.create(null);\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n on(eventName, listener, options = null) {\n this._on(eventName, listener, {\n external: true,\n once: options?.once,\n signal: options?.signal,\n });\n }\n\n /**\n * @param {string} eventName\n * @param {function} listener\n * @param {Object} [options]\n */\n off(eventName, listener, options = null) {\n this._off(eventName, listener);\n }\n\n /**\n * @param {string} eventName\n * @param {Object} data\n */\n dispatch(eventName, data) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n let externalListeners;\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n for (const { listener, external, once } of eventListeners.slice(0)) {\n if (once) {\n this._off(eventName, listener);\n }\n if (external) {\n (externalListeners ||= []).push(listener);\n continue;\n }\n listener(data);\n }\n // Dispatch any \"external\" listeners *after* the internal ones, to give the\n // viewer components time to handle events and update their state first.\n if (externalListeners) {\n for (const listener of externalListeners) {\n listener(data);\n }\n externalListeners = null;\n }\n }\n\n /**\n * @ignore\n */\n _on(eventName, listener, options = null) {\n let rmAbort = null;\n if (options?.signal instanceof AbortSignal) {\n const { signal } = options;\n if (signal.aborted) {\n console.error(\"Cannot use an `aborted` signal.\");\n return;\n }\n const onAbort = () => this._off(eventName, listener);\n rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n signal.addEventListener(\"abort\", onAbort);\n }\n\n const eventListeners = (this.#listeners[eventName] ||= []);\n eventListeners.push({\n listener,\n external: options?.external === true,\n once: options?.once === true,\n rmAbort,\n });\n }\n\n /**\n * @ignore\n */\n _off(eventName, listener, options = null) {\n const eventListeners = this.#listeners[eventName];\n if (!eventListeners) {\n return;\n }\n for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n const evt = eventListeners[i];\n if (evt.listener === listener) {\n evt.rmAbort?.(); // Ensure that the `AbortSignal` listener is removed.\n eventListeners.splice(i, 1);\n return;\n }\n }\n }\n}\n\n/**\n * NOTE: Only used in the Firefox built-in pdf viewer.\n */\nclass FirefoxEventBus extends EventBus {\n #externalServices;\n\n #globalEventNames;\n\n #isInAutomation;\n\n constructor(globalEventNames, externalServices, isInAutomation) {\n super();\n this.#globalEventNames = globalEventNames;\n this.#externalServices = externalServices;\n this.#isInAutomation = isInAutomation;\n }\n\n dispatch(eventName, data) {\n if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: FirefoxEventBus.dispatch\");\n }\n super.dispatch(eventName, data);\n\n if (this.#isInAutomation) {\n const detail = Object.create(null);\n if (data) {\n for (const key in data) {\n const value = data[key];\n if (key === \"source\") {\n if (value === window || value === document) {\n return; // No need to re-dispatch (already) global events.\n }\n continue; // Ignore the `source` property.\n }\n detail[key] = value;\n }\n }\n const event = new CustomEvent(eventName, {\n bubbles: true,\n cancelable: true,\n detail,\n });\n document.dispatchEvent(event);\n }\n\n if (this.#globalEventNames?.has(eventName)) {\n this.#externalServices.dispatchGlobalEvent({\n eventName,\n detail: data,\n });\n }\n }\n}\n\nexport { EventBus, FirefoxEventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass BaseExternalServices {\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseExternalServices\n ) {\n throw new Error(\"Cannot initialize BaseExternalServices.\");\n }\n }\n\n updateFindControlState(data) {}\n\n updateFindMatchesCount(data) {}\n\n initPassiveLoading() {}\n\n reportTelemetry(data) {}\n\n reportText(data) {}\n\n /**\n * @returns {Promise}\n */\n async createL10n() {\n throw new Error(\"Not implemented: createL10n\");\n }\n\n createScripting() {\n throw new Error(\"Not implemented: createScripting\");\n }\n\n createSignatureStorage() {\n throw new Error(\"Not implemented: createSignatureStorage\");\n }\n\n updateEditorStates(data) {\n throw new Error(\"Not implemented: updateEditorStates\");\n }\n\n dispatchGlobalEvent(_event) {}\n}\n\nexport { BaseExternalServices };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions, OptionKind } from \"./app_options.js\";\n\n/**\n * BasePreferences - Abstract base class for storing persistent settings.\n * Used for settings that should be applied to all opened documents,\n * or every time the viewer is loaded.\n */\nclass BasePreferences {\n #defaults = Object.freeze(\n AppOptions.getAll(OptionKind.PREFERENCE, /* defaultOnly = */ true)\n );\n\n #initializedPromise = null;\n\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BasePreferences\n ) {\n throw new Error(\"Cannot initialize BasePreferences.\");\n }\n\n this.#initializedPromise = this._readFromStorage(this.#defaults).then(\n ({ browserPrefs, prefs }) => {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n AppOptions._checkDisablePreferences()\n ) {\n return;\n }\n AppOptions.setAll({ ...browserPrefs, ...prefs }, /* prefs = */ true);\n }\n );\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n window.addEventListener(\n \"updatedPreference\",\n async ({ detail: { name, value } }) => {\n await this.#initializedPromise;\n AppOptions.setAll({ [name]: value }, /* prefs = */ true);\n }\n );\n }\n }\n\n /**\n * Stub function for writing preferences to storage.\n * @param {Object} prefObj The preferences that should be written to storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been written.\n */\n async _writeToStorage(prefObj) {\n throw new Error(\"Not implemented: _writeToStorage\");\n }\n\n /**\n * Stub function for reading preferences from storage.\n * @param {Object} prefObj The preferences that should be read from storage.\n * @returns {Promise} A promise that is resolved with an {Object} containing\n * the preferences that have been read.\n */\n async _readFromStorage(prefObj) {\n throw new Error(\"Not implemented: _readFromStorage\");\n }\n\n /**\n * Reset the preferences to their default values and update storage.\n * @returns {Promise} A promise that is resolved when the preference values\n * have been reset.\n */\n async reset() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Please use `about:config` to change preferences.\");\n }\n await this.#initializedPromise;\n AppOptions.setAll(this.#defaults, /* prefs = */ true);\n\n await this._writeToStorage(this.#defaults);\n }\n\n /**\n * Set the value of a preference.\n * @param {string} name The name of the preference that should be changed.\n * @param {boolean|number|string} value The new value of the preference.\n * @returns {Promise} A promise that is resolved when the value has been set,\n * provided that the preference exists and the types match.\n */\n async set(name, value) {\n await this.#initializedPromise;\n AppOptions.setAll({ [name]: value }, /* prefs = */ true);\n\n await this._writeToStorage(\n typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n ? { [name]: AppOptions.get(name) }\n : AppOptions.getAll(OptionKind.PREFERENCE)\n );\n }\n\n /**\n * Get the value of a preference.\n * @param {string} name The name of the preference whose value is requested.\n * @returns {Promise} A promise resolved with a {boolean|number|string}\n * containing the value of the preference.\n */\n async get(name) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n throw new Error(\"Not implemented: get\");\n }\n await this.#initializedPromise;\n return AppOptions.get(name);\n }\n\n get defaults() {\n return this.#defaults;\n }\n\n get initializedPromise() {\n return this.#initializedPromise;\n }\n}\n\nexport { BasePreferences };\n","/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n /**\n * Create a `FluentType` instance.\n *\n * @param value The JavaScript value to wrap.\n */\n constructor(value) {\n this.value = value;\n }\n /**\n * Unwrap the raw value stored by this `FluentType`.\n */\n valueOf() {\n return this.value;\n }\n}\n/**\n * A {@link FluentType} representing no correct value.\n */\nexport class FluentNone extends FluentType {\n /**\n * Create an instance of `FluentNone` with an optional fallback value.\n * @param value The fallback value of this `FluentNone`.\n */\n constructor(value = \"???\") {\n super(value);\n }\n /**\n * Format this `FluentNone` to the fallback string.\n */\n toString(scope) {\n return `{${this.value}}`;\n }\n}\n/**\n * A {@link FluentType} representing a number.\n *\n * A `FluentNumber` instance stores the number value of the number it\n * represents. It may also store an option bag of options which will be passed\n * to `Intl.NumerFormat` when the `FluentNumber` is formatted to a string.\n */\nexport class FluentNumber extends FluentType {\n /**\n * Create an instance of `FluentNumber` with options to the\n * `Intl.NumberFormat` constructor.\n *\n * @param value The number value of this `FluentNumber`.\n * @param opts Options which will be passed to `Intl.NumberFormat`.\n */\n constructor(value, opts = {}) {\n super(value);\n this.opts = opts;\n }\n /**\n * Format this `FluentNumber` to a string.\n */\n toString(scope) {\n if (scope) {\n try {\n const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);\n return nf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n }\n }\n return this.value.toString(10);\n }\n}\n/**\n * A {@link FluentType} representing a date and time.\n *\n * A `FluentDateTime` instance stores a Date object, Temporal object, or a number\n * as a numerical timestamp in milliseconds. It may also store an\n * option bag of options which will be passed to `Intl.DateTimeFormat` when the\n * `FluentDateTime` is formatted to a string.\n */\nexport class FluentDateTime extends FluentType {\n static supportsValue(value) {\n if (typeof value === \"number\")\n return true;\n if (value instanceof Date)\n return true;\n if (value instanceof FluentType)\n return FluentDateTime.supportsValue(value.valueOf());\n // Temporary workaround to support environments without Temporal\n if (\"Temporal\" in globalThis) {\n // for TypeScript, which doesn't know about Temporal yet\n const _Temporal = globalThis.Temporal;\n if (value instanceof _Temporal.Instant ||\n value instanceof _Temporal.PlainDateTime ||\n value instanceof _Temporal.PlainDate ||\n value instanceof _Temporal.PlainMonthDay ||\n value instanceof _Temporal.PlainTime ||\n value instanceof _Temporal.PlainYearMonth) {\n return true;\n }\n }\n return false;\n }\n /**\n * Create an instance of `FluentDateTime` with options to the\n * `Intl.DateTimeFormat` constructor.\n *\n * @param value The number value of this `FluentDateTime`, in milliseconds.\n * @param opts Options which will be passed to `Intl.DateTimeFormat`.\n */\n constructor(value, opts = {}) {\n // unwrap any FluentType value, but only retain the opts from FluentDateTime\n if (value instanceof FluentDateTime) {\n opts = { ...value.opts, ...opts };\n value = value.value;\n }\n else if (value instanceof FluentType) {\n value = value.valueOf();\n }\n // Intl.DateTimeFormat defaults to gregorian calendar, but Temporal defaults to iso8601\n if (typeof value === \"object\" &&\n \"calendarId\" in value &&\n opts.calendar === undefined) {\n opts = { ...opts, calendar: value.calendarId };\n }\n super(value);\n this.opts = opts;\n }\n [Symbol.toPrimitive](hint) {\n return hint === \"string\" ? this.toString() : this.toNumber();\n }\n /**\n * Convert this `FluentDateTime` to a number.\n * Note that this isn't always possible due to the nature of Temporal objects.\n * In such cases, a TypeError will be thrown.\n */\n toNumber() {\n const value = this.value;\n if (typeof value === \"number\")\n return value;\n if (value instanceof Date)\n return value.getTime();\n if (\"epochMilliseconds\" in value) {\n return value.epochMilliseconds;\n }\n if (\"toZonedDateTime\" in value) {\n return value.toZonedDateTime(\"UTC\").epochMilliseconds;\n }\n throw new TypeError(\"Unwrapping a non-number value as a number\");\n }\n /**\n * Format this `FluentDateTime` to a string.\n */\n toString(scope) {\n if (scope) {\n try {\n const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);\n return dtf.format(this.value);\n }\n catch (err) {\n scope.reportError(err);\n }\n }\n if (typeof this.value === \"number\" || this.value instanceof Date) {\n return new Date(this.value).toISOString();\n }\n return this.value.toString();\n }\n}\n","/**\n * The role of the Fluent resolver is to format a `Pattern` to an instance of\n * `FluentValue`. For performance reasons, primitive strings are considered\n * such instances, too.\n *\n * Translations can contain references to other messages or variables,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers and dates into the bundle's languages.\n * See the documentation of the Fluent syntax for more information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * All expressions resolve to an instance of `FluentValue`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n * Functions in this file pass around an instance of the `Scope` class, which\n * stores the data required for successful resolution and error recovery.\n */\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n/**\n * The maximum number of placeables which can be expanded in a single call to\n * `formatPattern`. The limit protects against the Billion Laughs and Quadratic\n * Blowup attacks. See https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.\n */\nconst MAX_PLACEABLES = 100;\n/** Unicode bidi isolation characters. */\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n/** Helper: match a variant key to the given selector. */\nfunction match(scope, selector, key) {\n if (key === selector) {\n // Both are strings.\n return true;\n }\n // XXX Consider comparing options too, e.g. minimumFractionDigits.\n if (key instanceof FluentNumber &&\n selector instanceof FluentNumber &&\n key.value === selector.value) {\n return true;\n }\n if (selector instanceof FluentNumber && typeof key === \"string\") {\n let category = scope\n .memoizeIntlObject(Intl.PluralRules, selector.opts)\n .select(selector.value);\n if (key === category) {\n return true;\n }\n }\n return false;\n}\n/** Helper: resolve the default variant from a list of variants. */\nfunction getDefault(scope, variants, star) {\n if (variants[star]) {\n return resolvePattern(scope, variants[star].value);\n }\n scope.reportError(new RangeError(\"No default\"));\n return new FluentNone();\n}\n/** Helper: resolve arguments to a call expression. */\nfunction getArguments(scope, args) {\n const positional = [];\n const named = Object.create(null);\n for (const arg of args) {\n if (arg.type === \"narg\") {\n named[arg.name] = resolveExpression(scope, arg.value);\n }\n else {\n positional.push(resolveExpression(scope, arg));\n }\n }\n return { positional, named };\n}\n/** Resolve an expression to a Fluent type. */\nfunction resolveExpression(scope, expr) {\n switch (expr.type) {\n case \"str\":\n return expr.value;\n case \"num\":\n return new FluentNumber(expr.value, {\n minimumFractionDigits: expr.precision,\n });\n case \"var\":\n return resolveVariableReference(scope, expr);\n case \"mesg\":\n return resolveMessageReference(scope, expr);\n case \"term\":\n return resolveTermReference(scope, expr);\n case \"func\":\n return resolveFunctionReference(scope, expr);\n case \"select\":\n return resolveSelectExpression(scope, expr);\n default:\n return new FluentNone();\n }\n}\n/** Resolve a reference to a variable. */\nfunction resolveVariableReference(scope, { name }) {\n let arg;\n if (scope.params) {\n // We're inside a TermReference. It's OK to reference undefined parameters.\n if (Object.prototype.hasOwnProperty.call(scope.params, name)) {\n arg = scope.params[name];\n }\n else {\n return new FluentNone(`$${name}`);\n }\n }\n else if (scope.args &&\n Object.prototype.hasOwnProperty.call(scope.args, name)) {\n // We're in the top-level Pattern or inside a MessageReference. Missing\n // variables references produce ReferenceErrors.\n arg = scope.args[name];\n }\n else {\n scope.reportError(new ReferenceError(`Unknown variable: $${name}`));\n return new FluentNone(`$${name}`);\n }\n // Return early if the argument already is an instance of FluentType.\n if (arg instanceof FluentType) {\n return arg;\n }\n // Convert the argument to a Fluent type.\n switch (typeof arg) {\n case \"string\":\n return arg;\n case \"number\":\n return new FluentNumber(arg);\n case \"object\":\n if (FluentDateTime.supportsValue(arg)) {\n return new FluentDateTime(arg);\n }\n // eslint-disable-next-line no-fallthrough\n default:\n scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));\n return new FluentNone(`$${name}`);\n }\n}\n/** Resolve a reference to another message. */\nfunction resolveMessageReference(scope, { name, attr }) {\n const message = scope.bundle._messages.get(name);\n if (!message) {\n scope.reportError(new ReferenceError(`Unknown message: ${name}`));\n return new FluentNone(name);\n }\n if (attr) {\n const attribute = message.attributes[attr];\n if (attribute) {\n return resolvePattern(scope, attribute);\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${name}.${attr}`);\n }\n if (message.value) {\n return resolvePattern(scope, message.value);\n }\n scope.reportError(new ReferenceError(`No value: ${name}`));\n return new FluentNone(name);\n}\n/** Resolve a call to a Term with key-value arguments. */\nfunction resolveTermReference(scope, { name, attr, args }) {\n const id = `-${name}`;\n const term = scope.bundle._terms.get(id);\n if (!term) {\n scope.reportError(new ReferenceError(`Unknown term: ${id}`));\n return new FluentNone(id);\n }\n if (attr) {\n const attribute = term.attributes[attr];\n if (attribute) {\n // Every TermReference has its own variables.\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, attribute);\n scope.params = null;\n return resolved;\n }\n scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n return new FluentNone(`${id}.${attr}`);\n }\n scope.params = getArguments(scope, args).named;\n const resolved = resolvePattern(scope, term.value);\n scope.params = null;\n return resolved;\n}\n/** Resolve a call to a Function with positional and key-value arguments. */\nfunction resolveFunctionReference(scope, { name, args }) {\n // Some functions are built-in. Others may be provided by the runtime via\n // the `FluentBundle` constructor.\n let func = scope.bundle._functions[name];\n if (!func) {\n scope.reportError(new ReferenceError(`Unknown function: ${name}()`));\n return new FluentNone(`${name}()`);\n }\n if (typeof func !== \"function\") {\n scope.reportError(new TypeError(`Function ${name}() is not callable`));\n return new FluentNone(`${name}()`);\n }\n try {\n let resolved = getArguments(scope, args);\n return func(resolved.positional, resolved.named);\n }\n catch (err) {\n scope.reportError(err);\n return new FluentNone(`${name}()`);\n }\n}\n/** Resolve a select expression to the member object. */\nfunction resolveSelectExpression(scope, { selector, variants, star }) {\n let sel = resolveExpression(scope, selector);\n if (sel instanceof FluentNone) {\n return getDefault(scope, variants, star);\n }\n // Match the selector against keys of each variant, in order.\n for (const variant of variants) {\n const key = resolveExpression(scope, variant.key);\n if (match(scope, sel, key)) {\n return resolvePattern(scope, variant.value);\n }\n }\n return getDefault(scope, variants, star);\n}\n/** Resolve a pattern (a complex string with placeables). */\nexport function resolveComplexPattern(scope, ptn) {\n if (scope.dirty.has(ptn)) {\n scope.reportError(new RangeError(\"Cyclic reference\"));\n return new FluentNone();\n }\n // Tag the pattern as dirty for the purpose of the current resolution.\n scope.dirty.add(ptn);\n const result = [];\n // Wrap interpolations with Directional Isolate Formatting characters\n // only when the pattern has more than one element.\n const useIsolating = scope.bundle._useIsolating && ptn.length > 1;\n for (const elem of ptn) {\n if (typeof elem === \"string\") {\n result.push(scope.bundle._transform(elem));\n continue;\n }\n scope.placeables++;\n if (scope.placeables > MAX_PLACEABLES) {\n scope.dirty.delete(ptn);\n // This is a fatal error which causes the resolver to instantly bail out\n // on this pattern. The length check protects against excessive memory\n // usage, and throwing protects against eating up the CPU when long\n // placeables are deeply nested.\n throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` +\n `max allowed is ${MAX_PLACEABLES}`);\n }\n if (useIsolating) {\n result.push(FSI);\n }\n result.push(resolveExpression(scope, elem).toString(scope));\n if (useIsolating) {\n result.push(PDI);\n }\n }\n scope.dirty.delete(ptn);\n return result.join(\"\");\n}\n/**\n * Resolve a simple or a complex Pattern to a FluentString\n * (which is really the string primitive).\n */\nfunction resolvePattern(scope, value) {\n // Resolve a simple pattern.\n if (typeof value === \"string\") {\n return scope.bundle._transform(value);\n }\n return resolveComplexPattern(scope, value);\n}\n","export class Scope {\n constructor(bundle, errors, args) {\n /**\n * The Set of patterns already encountered during this resolution.\n * Used to detect and prevent cyclic resolutions.\n * @ignore\n */\n this.dirty = new WeakSet();\n /** A dict of parameters passed to a TermReference. */\n this.params = null;\n /**\n * The running count of placeables resolved so far.\n * Used to detect the Billion Laughs and Quadratic Blowup attacks.\n * @ignore\n */\n this.placeables = 0;\n this.bundle = bundle;\n this.errors = errors;\n this.args = args;\n }\n reportError(error) {\n if (!this.errors || !(error instanceof Error)) {\n throw error;\n }\n this.errors.push(error);\n }\n memoizeIntlObject(ctor, opts) {\n let cache = this.bundle._intls.get(ctor);\n if (!cache) {\n cache = {};\n this.bundle._intls.set(ctor, cache);\n }\n let id = JSON.stringify(opts);\n if (!cache[id]) {\n // @ts-expect-error This is fine.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n cache[id] = new ctor(this.bundle.locales, opts);\n }\n return cache[id];\n }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n * - args - an array of positional args\n * - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentValue`. Functions must return `FluentValues` as well.\n */\nimport { FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\nfunction values(opts, allowed) {\n const unwrapped = Object.create(null);\n for (const [name, opt] of Object.entries(opts)) {\n if (allowed.includes(name)) {\n unwrapped[name] = opt.valueOf();\n }\n }\n return unwrapped;\n}\nconst NUMBER_ALLOWED = [\n \"unitDisplay\",\n \"currencyDisplay\",\n \"useGrouping\",\n \"minimumIntegerDigits\",\n \"minimumFractionDigits\",\n \"maximumFractionDigits\",\n \"minimumSignificantDigits\",\n \"maximumSignificantDigits\",\n];\n/**\n * The implementation of the `NUMBER()` builtin available to translations.\n *\n * Translations may call the `NUMBER()` builtin in order to specify formatting\n * options of a number. For example:\n *\n * pi = The value of π is {NUMBER($pi, maximumFractionDigits: 2)}.\n *\n * The implementation expects an array of {@link FluentValue | FluentValues} representing the\n * positional arguments, and an object of named {@link FluentValue | FluentValues} representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * unitDisplay\n * currencyDisplay\n * useGrouping\n * minimumIntegerDigits\n * minimumFractionDigits\n * maximumFractionDigits\n * minimumSignificantDigits\n * maximumSignificantDigits\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `NUMBER()`.\n * @param opts The named argments passed to this `NUMBER()`.\n */\nexport function NUMBER(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`NUMBER(${arg.valueOf()})`);\n }\n if (arg instanceof FluentNumber) {\n return new FluentNumber(arg.valueOf(), {\n ...arg.opts,\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n if (arg instanceof FluentDateTime) {\n return new FluentNumber(arg.toNumber(), {\n ...values(opts, NUMBER_ALLOWED),\n });\n }\n throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst DATETIME_ALLOWED = [\n \"dateStyle\",\n \"timeStyle\",\n \"fractionalSecondDigits\",\n \"dayPeriod\",\n \"hour12\",\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n];\n/**\n * The implementation of the `DATETIME()` builtin available to translations.\n *\n * Translations may call the `DATETIME()` builtin in order to specify\n * formatting options of a number. For example:\n *\n * now = It's {DATETIME($today, month: \"long\")}.\n *\n * The implementation expects an array of {@link FluentValue | FluentValues} representing the\n * positional arguments, and an object of named {@link FluentValue | FluentValues} representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n * dateStyle\n * timeStyle\n * fractionalSecondDigits\n * dayPeriod\n * hour12\n * weekday\n * era\n * year\n * month\n * day\n * hour\n * minute\n * second\n * timeZoneName\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `DATETIME()`.\n * @param opts The named argments passed to this `DATETIME()`.\n */\nexport function DATETIME(args, opts) {\n let arg = args[0];\n if (arg instanceof FluentNone) {\n return new FluentNone(`DATETIME(${arg.valueOf()})`);\n }\n if (arg instanceof FluentDateTime || arg instanceof FluentNumber) {\n return new FluentDateTime(arg, values(opts, DATETIME_ALLOWED));\n }\n throw new TypeError(\"Invalid argument to DATETIME\");\n}\n","const cache = new Map();\nexport function getMemoizerForLocale(locales) {\n const stringLocale = Array.isArray(locales) ? locales.join(\" \") : locales;\n let memoizer = cache.get(stringLocale);\n if (memoizer === undefined) {\n memoizer = new Map();\n cache.set(stringLocale, memoizer);\n }\n return memoizer;\n}\n","import { resolveComplexPattern } from \"./resolver.js\";\nimport { Scope } from \"./scope.js\";\nimport { FluentNone } from \"./types.js\";\nimport { NUMBER, DATETIME } from \"./builtins.js\";\nimport { getMemoizerForLocale } from \"./memoizer.js\";\n/**\n * Message bundles are single-language stores of translation resources. They are\n * responsible for formatting message values and attributes to strings.\n */\nexport class FluentBundle {\n /**\n * Create an instance of `FluentBundle`.\n *\n * @example\n * ```js\n * let bundle = new FluentBundle([\"en-US\", \"en\"]);\n *\n * let bundle = new FluentBundle(locales, {useIsolating: false});\n *\n * let bundle = new FluentBundle(locales, {\n * useIsolating: true,\n * functions: {\n * NODE_ENV: () => process.env.NODE_ENV\n * }\n * });\n * ```\n *\n * @param locales - Used to instantiate `Intl` formatters used by translations.\n * @param options - Optional configuration for the bundle.\n */\n constructor(locales, { functions, useIsolating = true, transform = (v) => v, } = {}) {\n /** @ignore */\n this._terms = new Map();\n /** @ignore */\n this._messages = new Map();\n this.locales = Array.isArray(locales) ? locales : [locales];\n this._functions = {\n NUMBER,\n DATETIME,\n ...functions,\n };\n this._useIsolating = useIsolating;\n this._transform = transform;\n this._intls = getMemoizerForLocale(locales);\n }\n /**\n * Check if a message is present in the bundle.\n *\n * @param id - The identifier of the message to check.\n */\n hasMessage(id) {\n return this._messages.has(id);\n }\n /**\n * Return a raw unformatted message object from the bundle.\n *\n * Raw messages are `{value, attributes}` shapes containing translation units\n * called `Patterns`. `Patterns` are implementation-specific; they should be\n * treated as black boxes and formatted with `FluentBundle.formatPattern`.\n *\n * @param id - The identifier of the message to check.\n */\n getMessage(id) {\n return this._messages.get(id);\n }\n /**\n * Add a translation resource to the bundle.\n *\n * @example\n * ```js\n * let res = new FluentResource(\"foo = Foo\");\n * bundle.addResource(res);\n * bundle.getMessage(\"foo\");\n * // → {value: .., attributes: {..}}\n * ```\n *\n * @param res\n * @param options\n */\n addResource(res, { allowOverrides = false, } = {}) {\n const errors = [];\n for (let i = 0; i < res.body.length; i++) {\n let entry = res.body[i];\n if (entry.id.startsWith(\"-\")) {\n // Identifiers starting with a dash (-) define terms. Terms are private\n // and cannot be retrieved from FluentBundle.\n if (allowOverrides === false && this._terms.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing term: \"${entry.id}\"`));\n continue;\n }\n this._terms.set(entry.id, entry);\n }\n else {\n if (allowOverrides === false && this._messages.has(entry.id)) {\n errors.push(new Error(`Attempt to override an existing message: \"${entry.id}\"`));\n continue;\n }\n this._messages.set(entry.id, entry);\n }\n }\n return errors;\n }\n /**\n * Format a `Pattern` to a string.\n *\n * Format a raw `Pattern` into a string. `args` will be used to resolve\n * references to variables passed as arguments to the translation.\n *\n * In case of errors `formatPattern` will try to salvage as much of the\n * translation as possible and will still return a string. For performance\n * reasons, the encountered errors are not returned but instead are appended\n * to the `errors` array passed as the third argument.\n *\n * If `errors` is omitted, the first encountered error will be thrown.\n *\n * @example\n * ```js\n * let errors = [];\n * bundle.addResource(\n * new FluentResource(\"hello = Hello, {$name}!\"));\n *\n * let hello = bundle.getMessage(\"hello\");\n * if (hello.value) {\n * bundle.formatPattern(hello.value, {name: \"Jane\"}, errors);\n * // Returns \"Hello, Jane!\" and `errors` is empty.\n *\n * bundle.formatPattern(hello.value, undefined, errors);\n * // Returns \"Hello, {$name}!\" and `errors` is now:\n * // []\n * }\n * ```\n */\n formatPattern(pattern, args = null, errors = null) {\n // Resolve a simple pattern without creating a scope. No error handling is\n // required; by definition simple patterns don't have placeables.\n if (typeof pattern === \"string\") {\n return this._transform(pattern);\n }\n // Resolve a complex pattern.\n let scope = new Scope(this, errors, args);\n try {\n let value = resolveComplexPattern(scope, pattern);\n return value.toString(scope);\n }\n catch (err) {\n if (scope.errors && err instanceof Error) {\n scope.errors.push(err);\n return new FluentNone().toString(scope);\n }\n throw err;\n }\n }\n}\n","// This regex is used to iterate through the beginnings of messages and terms.\n// With the /m flag, the ^ matches at the beginning of every line.\nconst RE_MESSAGE_START = /^(-?[a-zA-Z][\\w-]*) *= */gm;\n// Both Attributes and Variants are parsed in while loops. These regexes are\n// used to break out of them.\nconst RE_ATTRIBUTE_START = /\\.([a-zA-Z][\\w-]*) *= */y;\nconst RE_VARIANT_START = /\\*?\\[/y;\nconst RE_NUMBER_LITERAL = /(-?[0-9]+(?:\\.([0-9]+))?)/y;\nconst RE_IDENTIFIER = /([a-zA-Z][\\w-]*)/y;\nconst RE_REFERENCE = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y;\nconst RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;\n// A \"run\" is a sequence of text or string literal characters which don't\n// require any special handling. For TextElements such special characters are: {\n// (starts a placeable), and line breaks which require additional logic to check\n// if the next line is indented. For StringLiterals they are: \\ (starts an\n// escape sequence), \" (ends the literal), and line breaks which are not allowed\n// in StringLiterals. Note that string runs may be empty; text runs may not.\nconst RE_TEXT_RUN = /([^{}\\n\\r]+)/y;\nconst RE_STRING_RUN = /([^\\\\\"\\n\\r]*)/y;\n// Escape sequences.\nconst RE_STRING_ESCAPE = /\\\\([\\\\\"])/y;\nconst RE_UNICODE_ESCAPE = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y;\n// Used for trimming TextElements and indents.\nconst RE_LEADING_NEWLINES = /^\\n+/;\nconst RE_TRAILING_SPACES = / +$/;\n// Used in makeIndent to strip spaces from blank lines and normalize CRLF to LF.\nconst RE_BLANK_LINES = / *\\r?\\n/g;\n// Used in makeIndent to measure the indentation.\nconst RE_INDENT = /( *)$/;\n// Common tokens.\nconst TOKEN_BRACE_OPEN = /{\\s*/y;\nconst TOKEN_BRACE_CLOSE = /\\s*}/y;\nconst TOKEN_BRACKET_OPEN = /\\[\\s*/y;\nconst TOKEN_BRACKET_CLOSE = /\\s*] */y;\nconst TOKEN_PAREN_OPEN = /\\s*\\(\\s*/y;\nconst TOKEN_ARROW = /\\s*->\\s*/y;\nconst TOKEN_COLON = /\\s*:\\s*/y;\n// Note the optional comma. As a deviation from the Fluent EBNF, the parser\n// doesn't enforce commas between call arguments.\nconst TOKEN_COMMA = /\\s*,?\\s*/y;\nconst TOKEN_BLANK = /\\s+/y;\n/**\n * Fluent Resource is a structure storing parsed localization entries.\n */\nexport class FluentResource {\n constructor(source) {\n this.body = [];\n RE_MESSAGE_START.lastIndex = 0;\n let cursor = 0;\n // Iterate over the beginnings of messages and terms to efficiently skip\n // comments and recover from errors.\n while (true) {\n let next = RE_MESSAGE_START.exec(source);\n if (next === null) {\n break;\n }\n cursor = RE_MESSAGE_START.lastIndex;\n try {\n this.body.push(parseMessage(next[1]));\n }\n catch (err) {\n if (err instanceof SyntaxError) {\n // Don't report any Fluent syntax errors. Skip directly to the\n // beginning of the next message or term.\n continue;\n }\n throw err;\n }\n }\n // The parser implementation is inlined below for performance reasons,\n // as well as for convenience of accessing `source` and `cursor`.\n // The parser focuses on minimizing the number of false negatives at the\n // expense of increasing the risk of false positives. In other words, it\n // aims at parsing valid Fluent messages with a success rate of 100%, but it\n // may also parse a few invalid messages which the reference parser would\n // reject. The parser doesn't perform any validation and may produce entries\n // which wouldn't make sense in the real world. For best results users are\n // advised to validate translations with the fluent-syntax parser\n // pre-runtime.\n // The parser makes an extensive use of sticky regexes which can be anchored\n // to any offset of the source string without slicing it. Errors are thrown\n // to bail out of parsing of ill-formed messages.\n function test(re) {\n re.lastIndex = cursor;\n return re.test(source);\n }\n // Advance the cursor by the char if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeChar(char, errorClass) {\n if (source[cursor] === char) {\n cursor++;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${char}`);\n }\n return false;\n }\n // Advance the cursor by the token if it matches. May be used as a predicate\n // (was the match found?) or, if errorClass is passed, as an assertion.\n function consumeToken(re, errorClass) {\n if (test(re)) {\n cursor = re.lastIndex;\n return true;\n }\n if (errorClass) {\n throw new errorClass(`Expected ${re.toString()}`);\n }\n return false;\n }\n // Execute a regex, advance the cursor, and return all capture groups.\n function match(re) {\n re.lastIndex = cursor;\n let result = re.exec(source);\n if (result === null) {\n throw new SyntaxError(`Expected ${re.toString()}`);\n }\n cursor = re.lastIndex;\n return result;\n }\n // Execute a regex, advance the cursor, and return the capture group.\n function match1(re) {\n return match(re)[1];\n }\n function parseMessage(id) {\n let value = parsePattern();\n let attributes = parseAttributes();\n if (value === null && Object.keys(attributes).length === 0) {\n throw new SyntaxError(\"Expected message value or attributes\");\n }\n return { id, value, attributes };\n }\n function parseAttributes() {\n let attrs = Object.create(null);\n while (test(RE_ATTRIBUTE_START)) {\n let name = match1(RE_ATTRIBUTE_START);\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected attribute value\");\n }\n attrs[name] = value;\n }\n return attrs;\n }\n function parsePattern() {\n let first;\n // First try to parse any simple text on the same line as the id.\n if (test(RE_TEXT_RUN)) {\n first = match1(RE_TEXT_RUN);\n }\n // If there's a placeable on the first line, parse a complex pattern.\n if (source[cursor] === \"{\" || source[cursor] === \"}\") {\n // Re-use the text parsed above, if possible.\n return parsePatternElements(first ? [first] : [], Infinity);\n }\n // RE_TEXT_VALUE stops at newlines. Only continue parsing the pattern if\n // what comes after the newline is indented.\n let indent = parseIndent();\n if (indent) {\n if (first) {\n // If there's text on the first line, the blank block is part of the\n // translation content in its entirety.\n return parsePatternElements([first, indent], indent.length);\n }\n // Otherwise, we're dealing with a block pattern, i.e. a pattern which\n // starts on a new line. Discrad the leading newlines but keep the\n // inline indent; it will be used by the dedentation logic.\n indent.value = trim(indent.value, RE_LEADING_NEWLINES);\n return parsePatternElements([indent], indent.length);\n }\n if (first) {\n // It was just a simple inline text after all.\n return trim(first, RE_TRAILING_SPACES);\n }\n return null;\n }\n // Parse a complex pattern as an array of elements.\n function parsePatternElements(elements = [], commonIndent) {\n while (true) {\n if (test(RE_TEXT_RUN)) {\n elements.push(match1(RE_TEXT_RUN));\n continue;\n }\n if (source[cursor] === \"{\") {\n elements.push(parsePlaceable());\n continue;\n }\n if (source[cursor] === \"}\") {\n throw new SyntaxError(\"Unbalanced closing brace\");\n }\n let indent = parseIndent();\n if (indent) {\n elements.push(indent);\n commonIndent = Math.min(commonIndent, indent.length);\n continue;\n }\n break;\n }\n let lastIndex = elements.length - 1;\n let lastElement = elements[lastIndex];\n // Trim the trailing spaces in the last element if it's a TextElement.\n if (typeof lastElement === \"string\") {\n elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);\n }\n let baked = [];\n for (let element of elements) {\n if (element instanceof Indent) {\n // Dedent indented lines by the maximum common indent.\n element = element.value.slice(0, element.value.length - commonIndent);\n }\n if (element) {\n baked.push(element);\n }\n }\n return baked;\n }\n function parsePlaceable() {\n consumeToken(TOKEN_BRACE_OPEN, SyntaxError);\n let selector = parseInlineExpression();\n if (consumeToken(TOKEN_BRACE_CLOSE)) {\n return selector;\n }\n if (consumeToken(TOKEN_ARROW)) {\n let variants = parseVariants();\n consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);\n return {\n type: \"select\",\n selector,\n ...variants,\n };\n }\n throw new SyntaxError(\"Unclosed placeable\");\n }\n function parseInlineExpression() {\n if (source[cursor] === \"{\") {\n // It's a nested placeable.\n return parsePlaceable();\n }\n if (test(RE_REFERENCE)) {\n let [, sigil, name, attr = null] = match(RE_REFERENCE);\n if (sigil === \"$\") {\n return { type: \"var\", name };\n }\n if (consumeToken(TOKEN_PAREN_OPEN)) {\n let args = parseArguments();\n if (sigil === \"-\") {\n // A parameterized term: -term(...).\n return { type: \"term\", name, attr, args };\n }\n if (RE_FUNCTION_NAME.test(name)) {\n return { type: \"func\", name, args };\n }\n throw new SyntaxError(\"Function names must be all upper-case\");\n }\n if (sigil === \"-\") {\n // A non-parameterized term: -term.\n return {\n type: \"term\",\n name,\n attr,\n args: [],\n };\n }\n return { type: \"mesg\", name, attr };\n }\n return parseLiteral();\n }\n function parseArguments() {\n let args = [];\n while (true) {\n switch (source[cursor]) {\n case \")\": // End of the argument list.\n cursor++;\n return args;\n case undefined: // EOF\n throw new SyntaxError(\"Unclosed argument list\");\n }\n args.push(parseArgument());\n // Commas between arguments are treated as whitespace.\n consumeToken(TOKEN_COMMA);\n }\n }\n function parseArgument() {\n let expr = parseInlineExpression();\n if (expr.type !== \"mesg\") {\n return expr;\n }\n if (consumeToken(TOKEN_COLON)) {\n // The reference is the beginning of a named argument.\n return {\n type: \"narg\",\n name: expr.name,\n value: parseLiteral(),\n };\n }\n // It's a regular message reference.\n return expr;\n }\n function parseVariants() {\n let variants = [];\n let count = 0;\n let star;\n while (test(RE_VARIANT_START)) {\n if (consumeChar(\"*\")) {\n star = count;\n }\n let key = parseVariantKey();\n let value = parsePattern();\n if (value === null) {\n throw new SyntaxError(\"Expected variant value\");\n }\n variants[count++] = { key, value };\n }\n if (count === 0) {\n return null;\n }\n if (star === undefined) {\n throw new SyntaxError(\"Expected default variant\");\n }\n return { variants, star };\n }\n function parseVariantKey() {\n consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);\n let key;\n if (test(RE_NUMBER_LITERAL)) {\n key = parseNumberLiteral();\n }\n else {\n key = {\n type: \"str\",\n value: match1(RE_IDENTIFIER),\n };\n }\n consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);\n return key;\n }\n function parseLiteral() {\n if (test(RE_NUMBER_LITERAL)) {\n return parseNumberLiteral();\n }\n if (source[cursor] === '\"') {\n return parseStringLiteral();\n }\n throw new SyntaxError(\"Invalid expression\");\n }\n function parseNumberLiteral() {\n let [, value, fraction = \"\"] = match(RE_NUMBER_LITERAL);\n let precision = fraction.length;\n return {\n type: \"num\",\n value: parseFloat(value),\n precision,\n };\n }\n function parseStringLiteral() {\n consumeChar('\"', SyntaxError);\n let value = \"\";\n while (true) {\n value += match1(RE_STRING_RUN);\n if (source[cursor] === \"\\\\\") {\n value += parseEscapeSequence();\n continue;\n }\n if (consumeChar('\"')) {\n return { type: \"str\", value };\n }\n // We've reached an EOL of EOF.\n throw new SyntaxError(\"Unclosed string literal\");\n }\n }\n // Unescape known escape sequences.\n function parseEscapeSequence() {\n if (test(RE_STRING_ESCAPE)) {\n return match1(RE_STRING_ESCAPE);\n }\n if (test(RE_UNICODE_ESCAPE)) {\n let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);\n let codepoint = parseInt(codepoint4 || codepoint6, 16);\n return codepoint <= 0xd7ff || 0xe000 <= codepoint\n ? // It's a Unicode scalar value.\n String.fromCodePoint(codepoint)\n : // Lonely surrogates can cause trouble when the parsing result is\n // saved using UTF-8. Use U+FFFD REPLACEMENT CHARACTER instead.\n \"�\";\n }\n throw new SyntaxError(\"Unknown escape sequence\");\n }\n // Parse blank space. Return it if it looks like indent before a pattern\n // line. Skip it othwerwise.\n function parseIndent() {\n let start = cursor;\n consumeToken(TOKEN_BLANK);\n // Check the first non-blank character after the indent.\n switch (source[cursor]) {\n case \".\":\n case \"[\":\n case \"*\":\n case \"}\":\n case undefined: // EOF\n // A special character. End the Pattern.\n return false;\n case \"{\":\n // Placeables don't require indentation (in EBNF: block-placeable).\n // Continue the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // If the first character on the line is not one of the special characters\n // listed above, it's a regular text character. Check if there's at least\n // one space of indent before it.\n if (source[cursor - 1] === \" \") {\n // It's an indented text character (in EBNF: indented-char). Continue\n // the Pattern.\n return makeIndent(source.slice(start, cursor));\n }\n // A not-indented text character is likely the identifier of the next\n // message. End the Pattern.\n return false;\n }\n // Trim blanks in text according to the given regex.\n function trim(text, re) {\n return text.replace(re, \"\");\n }\n // Normalize a blank block and extract the indent details.\n function makeIndent(blank) {\n let value = blank.replace(RE_BLANK_LINES, \"\\n\");\n let length = RE_INDENT.exec(blank)[1].length;\n return new Indent(value, length);\n }\n }\n}\nclass Indent {\n constructor(value, length) {\n this.value = value;\n this.length = length;\n }\n}\n","/**\n * A JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n * @module\n */\nexport { FluentBundle } from \"./bundle.js\";\nexport { FluentResource } from \"./resource.js\";\nexport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n","/* eslint no-console: [\"error\", {allow: [\"warn\"]}] */\n/* global console */\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &, &, &.\nconst reOverlay = /<|&#?\\w+;/;\n/**\n * Elements allowed in translations even if they are not present in the source\n * HTML. They are text-level elements as defined by the HTML5 spec:\n * https://www.w3.org/TR/html5/text-level-semantics.html with the exception of:\n *\n * - a - because we don't allow href on it anyways,\n * - ruby, rt, rp - because we don't allow nested elements to be inserted.\n */\nconst TEXT_LEVEL_ELEMENTS = {\n \"http://www.w3.org/1999/xhtml\": [\n \"em\",\n \"strong\",\n \"small\",\n \"s\",\n \"cite\",\n \"q\",\n \"dfn\",\n \"abbr\",\n \"data\",\n \"time\",\n \"code\",\n \"var\",\n \"samp\",\n \"kbd\",\n \"sub\",\n \"sup\",\n \"i\",\n \"b\",\n \"u\",\n \"mark\",\n \"bdi\",\n \"bdo\",\n \"span\",\n \"br\",\n \"wbr\",\n ],\n};\nconst LOCALIZABLE_ATTRIBUTES = {\n \"http://www.w3.org/1999/xhtml\": {\n global: [\"title\", \"aria-description\", \"aria-label\", \"aria-valuetext\"],\n a: [\"download\"],\n area: [\"download\", \"alt\"],\n // value is special-cased in isAttrNameLocalizable\n input: [\"alt\", \"placeholder\"],\n menuitem: [\"label\"],\n menu: [\"label\"],\n optgroup: [\"label\"],\n option: [\"label\"],\n track: [\"label\"],\n img: [\"alt\"],\n textarea: [\"placeholder\"],\n th: [\"abbr\"],\n },\n \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n global: [\n \"accesskey\",\n \"aria-label\",\n \"aria-valuetext\",\n \"label\",\n \"title\",\n \"tooltiptext\",\n ],\n description: [\"value\"],\n key: [\"key\", \"keycode\"],\n label: [\"value\"],\n textbox: [\"placeholder\", \"value\"],\n },\n};\n/**\n * Translate an element.\n *\n * Translate the element's text content and attributes. Some HTML markup is\n * allowed in the translation. The element's children with the data-l10n-name\n * attribute will be treated as arguments to the translation. If the\n * translation defines the same children, their attributes and text contents\n * will be used for translating the matching source child.\n *\n * @param {Element} element\n * @param {Object} translation\n * @private\n */\nexport default function translateElement(element, translation) {\n const { value } = translation;\n if (typeof value === \"string\") {\n if (element.localName === \"title\" &&\n element.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n // A special case for the HTML title element whose content must be text.\n element.textContent = value;\n }\n else if (!reOverlay.test(value)) {\n // If the translation doesn't contain any markup skip the overlay logic.\n element.textContent = value;\n }\n else {\n // Else parse the translation's HTML using an inert template element,\n // sanitize it and replace the element's content.\n const templateElement = element.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n templateElement.innerHTML = value;\n overlayChildNodes(templateElement.content, element);\n }\n }\n // Even if the translation doesn't define any localizable attributes, run\n // overlayAttributes to remove any localizable attributes set by previous\n // translations.\n overlayAttributes(translation, element);\n}\n/**\n * Replace child nodes of an element with child nodes of another element.\n *\n * The contents of the target element will be cleared and fully replaced with\n * sanitized contents of the source element.\n *\n * @param {DocumentFragment} fromFragment - The source of children to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayChildNodes(fromFragment, toElement) {\n for (const childNode of fromFragment.childNodes) {\n if (childNode.nodeType === childNode.TEXT_NODE) {\n // Keep the translated text node.\n continue;\n }\n if (childNode.hasAttribute(\"data-l10n-name\")) {\n const sanitized = getNodeForNamedElement(toElement, childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n if (isElementAllowed(childNode)) {\n const sanitized = createSanitizedElement(childNode);\n fromFragment.replaceChild(sanitized, childNode);\n continue;\n }\n console.warn(`An element of forbidden type \"${childNode.localName}\" was found in ` +\n \"the translation. Only safe text-level elements and elements with \" +\n \"data-l10n-name are allowed.\");\n // If all else fails, replace the element with its text content.\n fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);\n }\n toElement.textContent = \"\";\n toElement.appendChild(fromFragment);\n}\nfunction hasAttribute(attributes, name) {\n if (!attributes) {\n return false;\n }\n for (let attr of attributes) {\n if (attr.name === name) {\n return true;\n }\n }\n return false;\n}\n/**\n * Transplant localizable attributes of an element to another element.\n *\n * Any localizable attributes already set on the target element will be\n * cleared.\n *\n * @param {Element|Object} fromElement - The source of child nodes to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayAttributes(fromElement, toElement) {\n const explicitlyAllowed = toElement.hasAttribute(\"data-l10n-attrs\")\n ? toElement\n .getAttribute(\"data-l10n-attrs\")\n .split(\",\")\n .map(i => i.trim())\n : null;\n // Remove existing localizable attributes if they\n // will not be used in the new translation.\n for (const attr of Array.from(toElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n !hasAttribute(fromElement.attributes, attr.name)) {\n toElement.removeAttribute(attr.name);\n }\n }\n // fromElement might be a {value, attributes} object as returned by\n // Localization.messageFromBundle. In which case attributes may be null to\n // save GC cycles.\n if (!fromElement.attributes) {\n return;\n }\n // Set localizable attributes.\n for (const attr of Array.from(fromElement.attributes)) {\n if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n toElement.getAttribute(attr.name) !== attr.value) {\n toElement.setAttribute(attr.name, attr.value);\n }\n }\n}\n/**\n * Sanitize a child element created by the translation.\n *\n * Try to find a corresponding child in sourceElement and use it as the base\n * for the sanitization. This will preserve functional attribtues defined on\n * the child element in the source HTML.\n *\n * @param {Element} sourceElement - The source for data-l10n-name lookups.\n * @param {Element} translatedChild - The translated child to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction getNodeForNamedElement(sourceElement, translatedChild) {\n const childName = translatedChild.getAttribute(\"data-l10n-name\");\n const sourceChild = sourceElement.querySelector(`[data-l10n-name=\"${childName}\"]`);\n if (!sourceChild) {\n console.warn(`An element named \"${childName}\" wasn't found in the source.`);\n return createTextNodeFromTextContent(translatedChild);\n }\n if (sourceChild.localName !== translatedChild.localName) {\n console.warn(`An element named \"${childName}\" was found in the translation ` +\n `but its type ${translatedChild.localName} didn't match the ` +\n `element found in the source (${sourceChild.localName}).`);\n return createTextNodeFromTextContent(translatedChild);\n }\n // Remove it from sourceElement so that the translation cannot use\n // the same reference name again.\n sourceElement.removeChild(sourceChild);\n // We can't currently guarantee that a translation won't remove\n // sourceChild from the element completely, which could break the app if\n // it relies on an event handler attached to the sourceChild. Let's make\n // this limitation explicit for now by breaking the identitiy of the\n // sourceChild by cloning it. This will destroy all event handlers\n // attached to sourceChild via addEventListener and via on\n // properties.\n const clone = sourceChild.cloneNode(false);\n return shallowPopulateUsing(translatedChild, clone);\n}\n/**\n * Sanitize an allowed element.\n *\n * Text-level elements allowed in translations may only use safe attributes\n * and will have any nested markup stripped to text content.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction createSanitizedElement(element) {\n // Start with an empty element of the same type to remove nested children\n // and non-localizable attributes defined by the translation.\n const clone = element.ownerDocument.createElement(element.localName);\n return shallowPopulateUsing(element, clone);\n}\n/**\n * Convert an element to a text node.\n *\n * @param {Element} element - The element to be sanitized.\n * @returns {Node}\n * @private\n */\nfunction createTextNodeFromTextContent(element) {\n return element.ownerDocument.createTextNode(element.textContent);\n}\n/**\n * Check if element is allowed in the translation.\n *\n * This method is used by the sanitizer when the translation markup contains\n * an element which is not present in the source code.\n *\n * @param {Element} element\n * @returns {boolean}\n * @private\n */\nfunction isElementAllowed(element) {\n const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];\n return allowed && allowed.includes(element.localName);\n}\n/**\n * Check if attribute is allowed for the given element.\n *\n * This method is used by the sanitizer when the translation markup contains\n * DOM attributes, or when the translation has traits which map to DOM\n * attributes.\n *\n * `explicitlyAllowed` can be passed as a list of attributes explicitly\n * allowed on this element.\n *\n * @param {string} name\n * @param {Element} element\n * @param {Array} explicitlyAllowed\n * @returns {boolean}\n * @private\n */\nfunction isAttrNameLocalizable(name, element, explicitlyAllowed = null) {\n if (explicitlyAllowed && explicitlyAllowed.includes(name)) {\n return true;\n }\n const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];\n if (!allowed) {\n return false;\n }\n const attrName = name.toLowerCase();\n const elemName = element.localName;\n // Is it a globally safe attribute?\n if (allowed.global.includes(attrName)) {\n return true;\n }\n // Are there no allowed attributes for this element?\n if (!allowed[elemName]) {\n return false;\n }\n // Is it allowed on this element?\n if (allowed[elemName].includes(attrName)) {\n return true;\n }\n // Special case for value on HTML inputs with type button, reset, submit\n if (element.namespaceURI === \"http://www.w3.org/1999/xhtml\" &&\n elemName === \"input\" &&\n attrName === \"value\") {\n const type = element.type.toLowerCase();\n if (type === \"submit\" || type === \"button\" || type === \"reset\") {\n return true;\n }\n }\n return false;\n}\n/**\n * Helper to set textContent and localizable attributes on an element.\n *\n * @param {Element} fromElement\n * @param {Element} toElement\n * @returns {Element}\n * @private\n */\nfunction shallowPopulateUsing(fromElement, toElement) {\n toElement.textContent = fromElement.textContent;\n overlayAttributes(fromElement, toElement);\n return toElement;\n}\n","/*\n * Base CachedIterable class.\n */\nexport default class CachedIterable extends Array {\n /**\n * Create a `CachedIterable` instance from an iterable or, if another\n * instance of `CachedIterable` is passed, return it without any\n * modifications.\n *\n * @param {Iterable} iterable\n * @returns {CachedIterable}\n */\n static from(iterable) {\n if (iterable instanceof this) {\n return iterable;\n }\n\n return new this(iterable);\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedSyncIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedSyncIterable extends CachedIterable {\n /**\n * Create an `CachedSyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedSyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n [Symbol.iterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && last.done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedAsyncIterable caches the elements yielded by an async iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedAsyncIterable extends CachedIterable {\n /**\n * Create an `CachedAsyncIterable` instance.\n *\n * @param {Iterable} iterable\n * @returns {CachedAsyncIterable}\n */\n constructor(iterable) {\n super();\n\n if (Symbol.asyncIterator in Object(iterable)) {\n this.iterator = iterable[Symbol.asyncIterator]();\n } else if (Symbol.iterator in Object(iterable)) {\n this.iterator = iterable[Symbol.iterator]();\n } else {\n throw new TypeError(\"Argument must implement the iteration protocol.\");\n }\n }\n\n /**\n * Asynchronous iterator caching the yielded elements.\n *\n * Elements yielded by the original iterable will be cached and available\n * synchronously. Returns an async generator object implementing the\n * iterator protocol over the elements of the original (async or sync)\n * iterable.\n */\n [Symbol.asyncIterator]() {\n const cached = this;\n let cur = 0;\n\n return {\n async next() {\n if (cached.length <= cur) {\n cached.push(cached.iterator.next());\n }\n return cached[cur++];\n }\n };\n }\n\n /**\n * This method allows user to consume the next element from the iterator\n * into the cache.\n *\n * @param {number} count - number of elements to consume\n */\n async touchNext(count = 1) {\n let idx = 0;\n while (idx++ < count) {\n const last = this[this.length - 1];\n if (last && (await last).done) {\n break;\n }\n this.push(this.iterator.next());\n }\n // Return the last cached {value, done} object to allow the calling\n // code to decide if it needs to call touchNext again.\n return this[this.length - 1];\n }\n}\n","export {default as CachedSyncIterable} from \"./cached_sync_iterable.mjs\";\nexport {default as CachedAsyncIterable} from \"./cached_async_iterable.mjs\";\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\n/* global console */\nimport { CachedAsyncIterable } from \"cached-iterable\";\n/**\n * The `Localization` class is a central high-level API for vanilla\n * JavaScript use of Fluent.\n * It combines language negotiation, FluentBundle and I/O to\n * provide a scriptable API to format translations.\n */\nexport default class Localization {\n /**\n * @param {Array} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n *\n * @returns {Localization}\n */\n constructor(resourceIds = [], generateBundles) {\n this.resourceIds = resourceIds;\n this.generateBundles = generateBundles;\n this.onChange(true);\n }\n addResourceIds(resourceIds, eager = false) {\n this.resourceIds.push(...resourceIds);\n this.onChange(eager);\n return this.resourceIds.length;\n }\n removeResourceIds(resourceIds) {\n this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));\n this.onChange();\n return this.resourceIds.length;\n }\n /**\n * Format translations and handle fallback if needed.\n *\n * Format translations for `keys` from `FluentBundle` instances on this\n * DOMLocalization. In case of errors, fetch the next context in the\n * fallback chain.\n *\n * @param {Array} keys - Translation keys to format.\n * @param {Function} method - Formatting function.\n * @returns {Promise>}\n * @private\n */\n async formatWithFallback(keys, method) {\n const translations = [];\n let hasAtLeastOneBundle = false;\n for await (const bundle of this.bundles) {\n hasAtLeastOneBundle = true;\n const missingIds = keysFromBundle(method, bundle, keys, translations);\n if (missingIds.size === 0) {\n break;\n }\n if (typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const ids = Array.from(missingIds).join(\", \");\n console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);\n }\n }\n if (!hasAtLeastOneBundle && typeof console !== \"undefined\") {\n console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n keys: ${JSON.stringify(keys)}.\n resourceIds: ${JSON.stringify(this.resourceIds)}.`);\n }\n return translations;\n }\n /**\n * Format translations into `{value, attributes}` objects.\n *\n * The fallback logic is the same as in `formatValues`\n * but it returns `{value, attributes}` objects\n * which are suitable for the translation of DOM elements.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatMessages([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // [\n * // { value: 'Hello, Mary!', attributes: null },\n * // {\n * // value: 'Welcome!',\n * // attributes: [ { name: \"title\", value: 'Hello' } ]\n * // }\n * // ]\n * ```\n *\n * @param {Array} keys\n * @returns {Promise>}\n * @private\n */\n formatMessages(keys) {\n return this.formatWithFallback(keys, messageFromBundle);\n }\n /**\n * Retrieve translations corresponding to the passed keys.\n *\n * A generalized version of `DOMLocalization.formatValue`. Keys must\n * be `{id, args}` objects.\n *\n * Returns a Promise resolving to an array of the translation strings.\n *\n * @example\n * ```js\n * docL10n.formatValues([\n * {id: 'hello', args: { who: 'Mary' }},\n * {id: 'hello', args: { who: 'John' }},\n * {id: 'welcome'}\n * ]).then(console.log);\n *\n * // ['Hello, Mary!', 'Hello, John!', 'Welcome!']\n * ```\n *\n * @param {Array} keys\n * @returns {Promise>}\n */\n formatValues(keys) {\n return this.formatWithFallback(keys, valueFromBundle);\n }\n /**\n * Retrieve the translation corresponding to the `id` identifier.\n *\n * If passed, `args` is a simple hash object with a list of variables that\n * will be interpolated in the value of the translation.\n *\n * Returns a Promise resolving to the translation string.\n *\n * Use this sparingly for one-off messages which don't need to be\n * retranslated when the user changes their language preferences, e.g. in\n * notifications.\n *\n * @example\n * ```js\n * docL10n.formatValue(\n * 'hello', { who: 'world' }\n * ).then(console.log);\n *\n * // 'Hello, world!'\n * ```\n *\n * @param {string} id - Identifier of the translation to format\n * @param {Object} [args] - Optional external arguments\n * @returns {Promise}\n */\n async formatValue(id, args) {\n const [val] = await this.formatValues([{ id, args }]);\n return val;\n }\n handleEvent() {\n this.onChange();\n }\n /**\n * This method should be called when there's a reason to believe\n * that language negotiation or available resources changed.\n */\n onChange(eager = false) {\n this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));\n if (eager) {\n this.bundles.touchNext(2);\n }\n }\n}\n/**\n * Format the value of a message into a string or `null`.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a value of a single L10n Entity using provided `FluentBundle`.\n *\n * If the message doesn't have a value, return `null`.\n *\n * @param {FluentBundle} bundle\n * @param {Array} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {string|null}\n * @private\n */\nfunction valueFromBundle(bundle, errors, message, args) {\n if (message.value) {\n return bundle.formatPattern(message.value, args, errors);\n }\n return null;\n}\n/**\n * Format all public values of a message into a {value, attributes} object.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a single L10n Entity using provided `FluentBundle`.\n *\n * The function will return an object with a value and attributes of the\n * entity.\n *\n * @param {FluentBundle} bundle\n * @param {Array} errors\n * @param {Object} message\n * @param {Object} args\n * @returns {Object}\n * @private\n */\nfunction messageFromBundle(bundle, errors, message, args) {\n const formatted = {\n value: null,\n attributes: null,\n };\n if (message.value) {\n formatted.value = bundle.formatPattern(message.value, args, errors);\n }\n let attrNames = Object.keys(message.attributes);\n if (attrNames.length > 0) {\n formatted.attributes = new Array(attrNames.length);\n for (let [i, name] of attrNames.entries()) {\n let value = bundle.formatPattern(message.attributes[name], args, errors);\n formatted.attributes[i] = { name, value };\n }\n }\n return formatted;\n}\n/**\n * This function is an inner function for `Localization.formatWithFallback`.\n *\n * It takes a `FluentBundle`, list of l10n-ids and a method to be used for\n * key resolution (either `valueFromBundle` or `messageFromBundle`) and\n * optionally a value returned from `keysFromBundle` executed against\n * another `FluentBundle`.\n *\n * The idea here is that if the previous `FluentBundle` did not resolve\n * all keys, we're calling this function with the next context to resolve\n * the remaining ones.\n *\n * In the function, we loop over `keys` and check if we have the `prev`\n * passed and if it has an error entry for the position we're in.\n *\n * If it doesn't, it means that we have a good translation for this key and\n * we return it. If it does, we'll try to resolve the key using the passed\n * `FluentBundle`.\n *\n * In the end, we fill the translations array, and return the Set with\n * missing ids.\n *\n * See `Localization.formatWithFallback` for more info on how this is used.\n *\n * @param {Function} method\n * @param {FluentBundle} bundle\n * @param {Array} keys\n * @param {{Array<{value: string, attributes: Object}>}} translations\n *\n * @returns {Set}\n * @private\n */\nfunction keysFromBundle(method, bundle, keys, translations) {\n const messageErrors = [];\n const missingIds = new Set();\n keys.forEach(({ id, args }, i) => {\n if (translations[i] !== undefined) {\n return;\n }\n let message = bundle.getMessage(id);\n if (message) {\n messageErrors.length = 0;\n translations[i] = method(bundle, messageErrors, message, args);\n if (messageErrors.length > 0 && typeof console !== \"undefined\") {\n const locale = bundle.locales[0];\n const errors = messageErrors.join(\", \");\n console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);\n }\n }\n else {\n missingIds.add(id);\n }\n });\n return missingIds;\n}\n","import translateElement from \"./overlay.js\";\nimport Localization from \"./localization.js\";\nconst L10NID_ATTR_NAME = \"data-l10n-id\";\nconst L10NARGS_ATTR_NAME = \"data-l10n-args\";\nconst L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;\n/**\n * The `DOMLocalization` class is responsible for fetching resources and\n * formatting translations.\n *\n * It implements the fallback strategy in case of errors encountered during the\n * formatting of translations and methods for observing DOM\n * trees with a `MutationObserver`.\n */\nexport default class DOMLocalization extends Localization {\n /**\n * @param {Array} resourceIds - List of resource IDs\n * @param {Function} generateBundles - Function that returns a\n * generator over FluentBundles\n * @returns {DOMLocalization}\n */\n constructor(resourceIds, generateBundles) {\n super(resourceIds, generateBundles);\n // A Set of DOM trees observed by the `MutationObserver`.\n this.roots = new Set();\n // requestAnimationFrame handler.\n this.pendingrAF = null;\n // list of elements pending for translation.\n this.pendingElements = new Set();\n this.windowElement = null;\n this.mutationObserver = null;\n this.observerConfig = {\n attributes: true,\n characterData: false,\n childList: true,\n subtree: true,\n attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME],\n };\n }\n onChange(eager = false) {\n super.onChange(eager);\n if (this.roots) {\n this.translateRoots();\n }\n }\n /**\n * Set the `data-l10n-id` and `data-l10n-args` attributes on DOM elements.\n * FluentDOM makes use of mutation observers to detect changes\n * to `data-l10n-*` attributes and translate elements asynchronously.\n * `setAttributes` is a convenience method which allows to translate\n * DOM elements declaratively.\n *\n * You should always prefer to use `data-l10n-id` on elements (statically in\n * HTML or dynamically via `setAttributes`) over manually retrieving\n * translations with `format`. The use of attributes ensures that the\n * elements can be retranslated when the user changes their language\n * preferences.\n *\n * ```javascript\n * localization.setAttributes(\n * document.querySelector('#welcome'), 'hello', { who: 'world' }\n * );\n * ```\n *\n * This will set the following attributes on the `#welcome` element.\n * The MutationObserver will pick up this change and will localize the element\n * asynchronously.\n *\n * ```html\n *

    \n *

    \n * ```\n *\n * @param {Element} element - Element to set attributes on\n * @param {string} id - l10n-id string\n * @param {Object} args - KVP list of l10n arguments\n * @returns {Element}\n */\n setAttributes(element, id, args) {\n element.setAttribute(L10NID_ATTR_NAME, id);\n if (args) {\n element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));\n }\n else {\n element.removeAttribute(L10NARGS_ATTR_NAME);\n }\n return element;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements.\n *\n * ```javascript\n * localization.getAttributes(\n * document.querySelector('#welcome')\n * );\n * // -> { id: 'hello', args: { who: 'world' } }\n * ```\n *\n * @param {Element} element - HTML element\n * @returns {{id: string, args: Object}}\n */\n getAttributes(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n /**\n * Add `newRoot` to the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, start observing\n * `newRoot` in order to translate mutations in it.\n *\n * @param {Element | DocumentFragment} newRoot - Root to observe.\n */\n connectRoot(newRoot) {\n for (const root of this.roots) {\n if (root === newRoot ||\n root.contains(newRoot) ||\n newRoot.contains(root)) {\n throw new Error(\"Cannot add a root that overlaps with existing root.\");\n }\n }\n if (this.windowElement) {\n if (this.windowElement !== newRoot.ownerDocument.defaultView) {\n throw new Error(`Cannot connect a root:\n DOMLocalization already has a root from a different window.`);\n }\n }\n else {\n this.windowElement = newRoot.ownerDocument.defaultView;\n this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));\n }\n this.roots.add(newRoot);\n this.mutationObserver.observe(newRoot, this.observerConfig);\n }\n /**\n * Remove `root` from the list of roots managed by this `DOMLocalization`.\n *\n * Additionally, if this `DOMLocalization` has an observer, stop observing\n * `root`.\n *\n * Returns `true` if the root was the last one managed by this\n * `DOMLocalization`.\n *\n * @param {Element | DocumentFragment} root - Root to disconnect.\n * @returns {boolean}\n */\n disconnectRoot(root) {\n this.roots.delete(root);\n // Pause the mutation observer to stop observing `root`.\n this.pauseObserving();\n if (this.roots.size === 0) {\n this.mutationObserver = null;\n if (this.windowElement && this.pendingrAF) {\n this.windowElement.cancelAnimationFrame(this.pendingrAF);\n }\n this.windowElement = null;\n this.pendingrAF = null;\n this.pendingElements.clear();\n return true;\n }\n // Resume observing all other roots.\n this.resumeObserving();\n return false;\n }\n /**\n * Translate all roots associated with this `DOMLocalization`.\n *\n * @returns {Promise}\n */\n translateRoots() {\n const roots = Array.from(this.roots);\n return Promise.all(roots.map(root => this.translateFragment(root)));\n }\n /**\n * Pauses the `MutationObserver`.\n */\n pauseObserving() {\n if (!this.mutationObserver) {\n return;\n }\n this.translateMutations(this.mutationObserver.takeRecords());\n this.mutationObserver.disconnect();\n }\n /**\n * Resumes the `MutationObserver`.\n */\n resumeObserving() {\n if (!this.mutationObserver) {\n return;\n }\n for (const root of this.roots) {\n this.mutationObserver.observe(root, this.observerConfig);\n }\n }\n /**\n * Translate mutations detected by the `MutationObserver`.\n *\n * @private\n */\n translateMutations(mutations) {\n for (const mutation of mutations) {\n switch (mutation.type) {\n case \"attributes\":\n if (mutation.target.hasAttribute(\"data-l10n-id\")) {\n this.pendingElements.add(mutation.target);\n }\n break;\n case \"childList\":\n for (const addedNode of mutation.addedNodes) {\n if (addedNode.nodeType === addedNode.ELEMENT_NODE) {\n if (addedNode.childElementCount) {\n for (const element of this.getTranslatables(addedNode)) {\n this.pendingElements.add(element);\n }\n }\n else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {\n this.pendingElements.add(addedNode);\n }\n }\n }\n break;\n }\n }\n // This fragment allows us to coalesce all pending translations\n // into a single requestAnimationFrame.\n if (this.pendingElements.size > 0) {\n if (this.pendingrAF === null) {\n this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n this.translateElements(Array.from(this.pendingElements));\n this.pendingElements.clear();\n this.pendingrAF = null;\n });\n }\n }\n }\n /**\n * Translate a DOM element or fragment asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a DOM fragment.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {Element | DocumentFragment} frag - Element or DocumentFragment to be translated\n * @returns {Promise}\n */\n translateFragment(frag) {\n return this.translateElements(this.getTranslatables(frag));\n }\n /**\n * Translate a list of DOM elements asynchronously using this\n * `DOMLocalization` object.\n *\n * Manually trigger the translation (or re-translation) of a list of elements.\n * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n * with information about which translations to use.\n *\n * Returns a `Promise` that gets resolved once the translation is complete.\n *\n * @param {Array} elements - List of elements to be translated\n * @returns {Promise}\n */\n async translateElements(elements) {\n if (!elements.length) {\n return undefined;\n }\n const keys = elements.map(this.getKeysForElement);\n const translations = await this.formatMessages(keys);\n return this.applyTranslations(elements, translations);\n }\n /**\n * Applies translations onto elements.\n *\n * @param {Array} elements\n * @param {Array} translations\n * @private\n */\n applyTranslations(elements, translations) {\n this.pauseObserving();\n for (let i = 0; i < elements.length; i++) {\n if (translations[i] !== undefined) {\n translateElement(elements[i], translations[i]);\n }\n }\n this.resumeObserving();\n }\n /**\n * Collects all translatable child elements of the element.\n *\n * @param {Element | DocumentFragment} element\n * @returns {Array}\n * @private\n */\n getTranslatables(element) {\n const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));\n if (typeof element.hasAttribute === \"function\" &&\n element.hasAttribute(L10NID_ATTR_NAME)) {\n nodes.push(element);\n }\n return nodes;\n }\n /**\n * Get the `data-l10n-*` attributes from DOM elements as a two-element\n * array.\n *\n * @param {Element} element\n * @returns {Object}\n * @private\n */\n getKeysForElement(element) {\n return {\n id: element.getAttribute(L10NID_ATTR_NAME),\n args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n };\n }\n}\n","export { default as DOMLocalization } from \"./dom_localization.js\";\nexport { default as Localization } from \"./localization.js\";\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * NOTE: The L10n-implementations should use lowercase language-codes\n * internally.\n */\nclass L10n {\n #dir;\n\n #elements;\n\n #lang;\n\n #l10n;\n\n constructor({ lang, isRTL }, l10n = null) {\n this.#lang = L10n.#fixupLangCode(lang);\n this.#l10n = l10n;\n this.#dir = (isRTL ?? L10n.#isRTL(this.#lang)) ? \"rtl\" : \"ltr\";\n }\n\n _setL10n(l10n) {\n this.#l10n = l10n;\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n document.l10n = l10n;\n }\n }\n\n /** @inheritdoc */\n getLanguage() {\n return this.#lang;\n }\n\n /** @inheritdoc */\n getDirection() {\n return this.#dir;\n }\n\n /** @inheritdoc */\n async get(ids, args = null, fallback) {\n if (Array.isArray(ids)) {\n ids = ids.map(id => ({ id }));\n const messages = await this.#l10n.formatMessages(ids);\n return messages.map(message => message.value);\n }\n\n const messages = await this.#l10n.formatMessages([\n {\n id: ids,\n args,\n },\n ]);\n return messages[0]?.value || fallback;\n }\n\n /** @inheritdoc */\n async translate(element) {\n (this.#elements ||= new Set()).add(element);\n try {\n this.#l10n.connectRoot(element);\n await this.#l10n.translateRoots();\n } catch {\n // Element is under an existing root, so there is no need to add it again.\n }\n }\n\n /** @inheritdoc */\n async translateOnce(element) {\n try {\n await this.#l10n.translateElements([element]);\n } catch (ex) {\n console.error(\"translateOnce:\", ex);\n }\n }\n\n /** @inheritdoc */\n async destroy() {\n if (this.#elements) {\n for (const element of this.#elements) {\n this.#l10n.disconnectRoot(element);\n }\n this.#elements.clear();\n this.#elements = null;\n }\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n pause() {\n this.#l10n.pauseObserving();\n }\n\n /** @inheritdoc */\n resume() {\n this.#l10n.resumeObserving();\n }\n\n static #fixupLangCode(langCode) {\n // Use only lowercase language-codes internally, and fallback to English.\n langCode = langCode?.toLowerCase() || \"en-us\";\n\n // Try to support \"incompletely\" specified language codes (see issue 13689).\n const PARTIAL_LANG_CODES = {\n en: \"en-us\",\n es: \"es-es\",\n fy: \"fy-nl\",\n ga: \"ga-ie\",\n gu: \"gu-in\",\n hi: \"hi-in\",\n hy: \"hy-am\",\n nb: \"nb-no\",\n ne: \"ne-np\",\n nn: \"nn-no\",\n pa: \"pa-in\",\n pt: \"pt-pt\",\n sv: \"sv-se\",\n zh: \"zh-cn\",\n };\n return PARTIAL_LANG_CODES[langCode] || langCode;\n }\n\n static #isRTL(lang) {\n const shortCode = lang.split(\"-\", 1)[0];\n return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(shortCode);\n }\n}\n\nconst GenericL10n = null;\n\nexport { GenericL10n, L10n };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FeatureTest, fetchData } from \"pdfjs-lib\";\nimport { FluentBundle, FluentResource } from \"fluent-bundle\";\nimport { DOMLocalization } from \"fluent-dom\";\nimport { L10n } from \"./l10n.js\";\n\nfunction PLATFORM() {\n const { isAndroid, isLinux, isMac, isWindows } = FeatureTest.platform;\n if (isLinux) {\n return \"linux\";\n }\n if (isWindows) {\n return \"windows\";\n }\n if (isMac) {\n return \"macos\";\n }\n if (isAndroid) {\n return \"android\";\n }\n return \"other\";\n}\n\nfunction createBundle(lang, text) {\n const resource = new FluentResource(text);\n const bundle = new FluentBundle(lang, {\n functions: { PLATFORM },\n });\n const errors = bundle.addResource(resource);\n if (errors.length) {\n console.error(\"L10n errors\", errors);\n }\n return bundle;\n}\n\nclass GenericL10n extends L10n {\n constructor(lang) {\n super({ lang });\n\n const generateBundles = !lang\n ? GenericL10n.#generateBundlesFallback.bind(\n GenericL10n,\n this.getLanguage()\n )\n : GenericL10n.#generateBundles.bind(\n GenericL10n,\n \"en-us\",\n this.getLanguage()\n );\n this._setL10n(new DOMLocalization([], generateBundles));\n }\n\n /**\n * Generate the bundles for Fluent.\n * @param {String} defaultLang - The fallback language to use for\n * translations.\n * @param {String} baseLang - The base language to use for translations.\n */\n static async *#generateBundles(defaultLang, baseLang) {\n const { baseURL, paths } = await this.#getPaths();\n\n const langs = [baseLang];\n if (defaultLang !== baseLang) {\n // Also fallback to the short-format of the base language\n // (see issue 17269).\n const shortLang = baseLang.split(\"-\", 1)[0];\n\n if (shortLang !== baseLang) {\n langs.push(shortLang);\n }\n langs.push(defaultLang);\n }\n // Trigger fetching of bundles in parallel, to reduce overall load time.\n const bundles = langs.map(lang => [\n lang,\n this.#createBundle(lang, baseURL, paths),\n ]);\n\n for (const [lang, bundlePromise] of bundles) {\n const bundle = await bundlePromise;\n if (bundle) {\n yield bundle;\n } else if (lang === \"en-us\") {\n yield this.#createBundleFallback(lang);\n }\n }\n }\n\n static async #createBundle(lang, baseURL, paths) {\n const path = paths[lang];\n if (!path) {\n return null;\n }\n const url = new URL(path, baseURL);\n const text = await fetchData(url, /* type = */ \"text\");\n\n return createBundle(lang, text);\n }\n\n static async #getPaths() {\n try {\n const { href } = document.querySelector(`link[type=\"application/l10n\"]`);\n const paths = await fetchData(href, /* type = */ \"json\");\n\n return {\n baseURL: href.substring(0, href.lastIndexOf(\"/\") + 1) || \"./\",\n paths,\n };\n } catch {}\n return { baseURL: \"./\", paths: Object.create(null) };\n }\n\n static async *#generateBundlesFallback(lang) {\n yield this.#createBundleFallback(lang);\n }\n\n static async #createBundleFallback(lang) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n throw new Error(\"Not implemented: #createBundleFallback\");\n }\n const text =\n typeof PDFJSDev === \"undefined\"\n ? await fetchData(\n new URL(\"../l10n/en-US/viewer.ftl\", window.location.href),\n /* type = */ \"text\"\n )\n : PDFJSDev.eval(\"DEFAULT_FTL\");\n\n return createBundle(lang, text);\n }\n}\n\nexport { GenericL10n };\n","/* Copyright 2020 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getPdfFilenameFromUrl } from \"pdfjs-lib\";\n\nasync function docProperties(pdfDocument) {\n const url = \"\",\n baseUrl = \"\";\n const { info, metadata, contentDispositionFilename, contentLength } =\n await pdfDocument.getMetadata();\n\n return {\n ...info,\n baseURL: baseUrl,\n filesize: contentLength || (await pdfDocument.getDownloadInfo()).length,\n filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n metadata: metadata?.getRaw(),\n authors: metadata?.get(\"dc:creator\"),\n numPages: pdfDocument.numPages,\n URL: url,\n };\n}\n\nclass GenericScripting {\n constructor(sandboxBundleSrc) {\n this._ready = new Promise((resolve, reject) => {\n const sandbox =\n typeof PDFJSDev === \"undefined\"\n ? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method\n : __raw_import__(sandboxBundleSrc);\n sandbox\n .then(pdfjsSandbox => {\n resolve(pdfjsSandbox.QuickJSSandbox());\n })\n .catch(reject);\n });\n }\n\n async createSandbox(data) {\n const sandbox = await this._ready;\n sandbox.create(data);\n }\n\n async dispatchEventInSandbox(event) {\n const sandbox = await this._ready;\n setTimeout(() => sandbox.dispatchEvent(event), 0);\n }\n\n async destroySandbox() {\n const sandbox = await this._ready;\n sandbox.nukeSandbox();\n }\n}\n\nexport { docProperties, GenericScripting };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getUuid } from \"pdfjs-lib\";\n\nconst KEY_STORAGE = \"pdfjs.signature\";\n\nclass SignatureStorage {\n // TODO: Encrypt the data in using a password and add a UI for entering it.\n // We could use the Web Crypto API for this (see https://bradyjoslin.com/blog/encryption-webcrypto/\n // for an example).\n\n #eventBus;\n\n #signatures = null;\n\n #signal = null;\n\n constructor(eventBus, signal) {\n this.#eventBus = eventBus;\n this.#signal = signal;\n }\n\n #save() {\n localStorage.setItem(\n KEY_STORAGE,\n JSON.stringify(Object.fromEntries(this.#signatures))\n );\n }\n\n async getAll() {\n if (this.#signal) {\n window.addEventListener(\n \"storage\",\n ({ key }) => {\n if (key === KEY_STORAGE) {\n this.#signatures = null;\n this.#eventBus?.dispatch(\"storedsignatureschanged\", {\n source: this,\n });\n }\n },\n { signal: this.#signal }\n );\n this.#signal = null;\n }\n if (!this.#signatures) {\n this.#signatures = new Map();\n const data = localStorage.getItem(KEY_STORAGE);\n if (data) {\n for (const [key, value] of Object.entries(JSON.parse(data))) {\n this.#signatures.set(key, value);\n }\n }\n }\n return this.#signatures;\n }\n\n async isFull() {\n // Only allow 5 signatures to be saved.\n return (await this.size()) === 5;\n }\n\n async size() {\n return (await this.getAll()).size;\n }\n\n async create(data) {\n if (await this.isFull()) {\n return null;\n }\n const uuid = getUuid();\n this.#signatures.set(uuid, data);\n this.#save();\n\n return uuid;\n }\n\n async delete(uuid) {\n const signatures = await this.getAll();\n if (!signatures.has(uuid)) {\n return false;\n }\n signatures.delete(uuid);\n this.#save();\n\n return true;\n }\n}\n\nexport { SignatureStorage };\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions } from \"./app_options.js\";\nimport { BaseExternalServices } from \"./external_services.js\";\nimport { BasePreferences } from \"./preferences.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { GenericScripting } from \"./generic_scripting.js\";\nimport { SignatureStorage } from \"./generic_signature_storage.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/genericcom\" shall not be used outside GENERIC build.'\n );\n}\n\nfunction initCom(app) {}\n\nclass Preferences extends BasePreferences {\n async _writeToStorage(prefObj) {\n localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n }\n\n async _readFromStorage(prefObj) {\n return { prefs: JSON.parse(localStorage.getItem(\"pdfjs.preferences\")) };\n }\n}\n\nclass ExternalServices extends BaseExternalServices {\n async createL10n() {\n return new GenericL10n(AppOptions.get(\"localeProperties\")?.lang);\n }\n\n createScripting() {\n return new GenericScripting(AppOptions.get(\"sandboxBundleSrc\"));\n }\n\n createSignatureStorage(eventBus, signal) {\n return new SignatureStorage(eventBus, signal);\n }\n}\n\nclass MLManager {\n static {\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n this.getFakeMLManager = options => new FakeMLManager(options);\n }\n }\n\n async isEnabledFor(_name) {\n return false;\n }\n\n async deleteModel(_service) {\n return null;\n }\n\n isReady(_name) {\n return false;\n }\n\n guess(_data) {}\n\n toggleService(_name, _enabled) {}\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n // eslint-disable-next-line no-var\n var FakeMLManager = class {\n eventBus = null;\n\n hasProgress = false;\n\n constructor({ enableGuessAltText, enableAltTextModelDownload }) {\n this.enableGuessAltText = enableGuessAltText;\n this.enableAltTextModelDownload = enableAltTextModelDownload;\n }\n\n setEventBus(eventBus, abortSignal) {\n this.eventBus = eventBus;\n }\n\n async isEnabledFor(_name) {\n return this.enableGuessAltText;\n }\n\n async deleteModel(_name) {\n this.enableAltTextModelDownload = false;\n return null;\n }\n\n async loadModel(_name) {}\n\n async downloadModel(_name) {\n // Simulate downloading the model but with progress.\n // The progress can be seen in the new alt-text dialog.\n this.hasProgress = true;\n\n const { promise, resolve } = Promise.withResolvers();\n const total = 1e8;\n const end = 1.5 * total;\n const increment = 5e6;\n let loaded = 0;\n const id = setInterval(() => {\n loaded += increment;\n if (loaded <= end) {\n this.eventBus.dispatch(\"loadaiengineprogress\", {\n source: this,\n detail: {\n total,\n totalLoaded: loaded,\n finished: loaded + increment >= end,\n },\n });\n return;\n }\n clearInterval(id);\n this.hasProgress = false;\n this.enableAltTextModelDownload = true;\n resolve(true);\n }, 900);\n return promise;\n }\n\n isReady(_name) {\n return this.enableAltTextModelDownload;\n }\n\n guess({ request: { data } }) {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(data ? { output: \"Fake alt text.\" } : { error: true });\n }, 3000);\n });\n }\n\n toggleService(_name, enabled) {\n this.enableGuessAltText = enabled;\n }\n };\n}\n\nexport { ExternalServices, initCom, MLManager, Preferences };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"pdfjs-lib\";\n\nclass NewAltTextManager {\n #boundCancel = this.#cancel.bind(this);\n\n #createAutomaticallyButton;\n\n #currentEditor = null;\n\n #cancelButton;\n\n #descriptionContainer;\n\n #dialog;\n\n #disclaimer;\n\n #downloadModel;\n\n #downloadModelDescription;\n\n #eventBus;\n\n #firstTime = false;\n\n #guessedAltText;\n\n #hasAI = null;\n\n #isEditing = null;\n\n #imagePreview;\n\n #imageData;\n\n #isAILoading = false;\n\n #wasAILoading = false;\n\n #learnMore;\n\n #notNowButton;\n\n #overlayManager;\n\n #textarea;\n\n #title;\n\n #uiManager;\n\n #previousAltText = null;\n\n constructor(\n {\n descriptionContainer,\n dialog,\n imagePreview,\n cancelButton,\n disclaimer,\n notNowButton,\n saveButton,\n textarea,\n learnMore,\n errorCloseButton,\n createAutomaticallyButton,\n downloadModel,\n downloadModelDescription,\n title,\n },\n overlayManager,\n eventBus\n ) {\n this.#cancelButton = cancelButton;\n this.#createAutomaticallyButton = createAutomaticallyButton;\n this.#descriptionContainer = descriptionContainer;\n this.#dialog = dialog;\n this.#disclaimer = disclaimer;\n this.#notNowButton = notNowButton;\n this.#imagePreview = imagePreview;\n this.#textarea = textarea;\n this.#learnMore = learnMore;\n this.#title = title;\n this.#downloadModel = downloadModel;\n this.#downloadModelDescription = downloadModelDescription;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#boundCancel);\n notNowButton.addEventListener(\"click\", this.#boundCancel);\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n errorCloseButton.addEventListener(\"click\", () => {\n this.#toggleError(false);\n });\n createAutomaticallyButton.addEventListener(\"click\", async () => {\n const checked =\n createAutomaticallyButton.getAttribute(\"aria-pressed\") !== \"true\";\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.ai_generation_check\",\n data: { status: checked },\n });\n\n if (this.#uiManager) {\n const isAltTextEnabled =\n await this.#uiManager.mlManager.isEnabledFor(\"altText\");\n this.#createAutomaticallyButton.disabled = true;\n if (checked && !isAltTextEnabled) {\n this.#textarea.value = \"\";\n this.#setProgress();\n this.#uiManager.setPreference(\"enableGuessAltText\", true);\n await this.#uiManager.mlManager.downloadModel(\"altText\");\n this.#setPref(\"enableAltTextModelDownload\", true);\n } else if (!checked && isAltTextEnabled) {\n this.#uiManager.setPreference(\"enableGuessAltText\", false);\n await this.#uiManager.mlManager.deleteModel(\"altText\");\n this.#setPref(\"enableAltTextModelDownload\", false);\n }\n this.#createAutomaticallyButton.disabled = false;\n await this.#uiManager.mlManager.toggleService(\"altText\", checked);\n }\n this.#toggleGuessAltText(checked, /* isInitial = */ false);\n });\n textarea.addEventListener(\"focus\", () => {\n this.#wasAILoading = this.#isAILoading;\n this.#toggleLoading(false);\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"blur\", () => {\n if (!textarea.value) {\n this.#toggleLoading(this.#wasAILoading);\n }\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"input\", () => {\n this.#toggleTitleAndDisclaimer();\n });\n textarea.addEventListener(\"keydown\", e => {\n if (\n (e.ctrlKey || e.metaKey) &&\n e.key === \"Enter\" &&\n !saveButton.disabled\n ) {\n this.#save();\n }\n });\n\n eventBus._on(\"enableguessalttext\", ({ value }) => {\n this.#toggleGuessAltText(value, /* isInitial = */ false);\n });\n\n this.#overlayManager.register(dialog);\n\n this.#learnMore.addEventListener(\"click\", () => {\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.info\",\n data: { topic: \"alt_text\" },\n });\n });\n }\n\n #setPref(name, value) {\n this.#eventBus.dispatch(\"setpreference\", {\n source: this,\n name,\n value,\n });\n }\n\n #toggleLoading(value) {\n if (!this.#uiManager || this.#isAILoading === value) {\n return;\n }\n this.#isAILoading = value;\n this.#descriptionContainer.classList.toggle(\"loading\", value);\n }\n\n #toggleError(value) {\n if (!this.#uiManager) {\n return;\n }\n this.#dialog.classList.toggle(\"error\", value);\n }\n\n async #toggleGuessAltText(value, isInitial) {\n if (!this.#uiManager) {\n return;\n }\n this.#dialog.classList.toggle(\"aiDisabled\", !value);\n this.#createAutomaticallyButton.setAttribute(\"aria-pressed\", value);\n\n if (value) {\n const { altTextLearnMoreUrl } = this.#uiManager.mlManager;\n if (altTextLearnMoreUrl) {\n this.#learnMore.href = altTextLearnMoreUrl;\n }\n this.#mlGuessAltText(isInitial);\n } else {\n this.#toggleLoading(false);\n this.#isAILoading = false;\n this.#toggleTitleAndDisclaimer();\n }\n }\n\n #toggleNotNow() {\n this.#notNowButton.classList.toggle(\"hidden\", !this.#firstTime);\n this.#cancelButton.classList.toggle(\"hidden\", this.#firstTime);\n }\n\n #toggleAI(value) {\n if (!this.#uiManager || this.#hasAI === value) {\n return;\n }\n this.#hasAI = value;\n this.#dialog.classList.toggle(\"noAi\", !value);\n this.#toggleTitleAndDisclaimer();\n }\n\n #toggleTitleAndDisclaimer() {\n // Disclaimer is visible when the AI is loading or the user didn't change\n // the guessed alt text.\n const visible =\n this.#isAILoading ||\n (this.#guessedAltText && this.#guessedAltText === this.#textarea.value);\n this.#disclaimer.hidden = !visible;\n\n // The title changes depending if the text area is empty or not.\n const isEditing = this.#isAILoading || !!this.#textarea.value;\n if (this.#isEditing === isEditing) {\n return;\n }\n this.#isEditing = isEditing;\n this.#title.setAttribute(\n \"data-l10n-id\",\n isEditing\n ? \"pdfjs-editor-new-alt-text-dialog-edit-label\"\n : \"pdfjs-editor-new-alt-text-dialog-add-label\"\n );\n }\n\n async #mlGuessAltText(isInitial) {\n if (this.#isAILoading) {\n // We're still loading the previous guess.\n return;\n }\n\n if (this.#textarea.value) {\n // The user has already set an alt text.\n return;\n }\n\n if (isInitial && this.#previousAltText !== null) {\n // The user has already set an alt text (empty or not).\n return;\n }\n\n this.#guessedAltText = this.#currentEditor.guessedAltText;\n if (this.#previousAltText === null && this.#guessedAltText) {\n // We have a guessed alt text and the user didn't change it.\n this.#addAltText(this.#guessedAltText);\n return;\n }\n\n this.#toggleLoading(true);\n this.#toggleTitleAndDisclaimer();\n\n let hasError = false;\n try {\n // When calling #mlGuessAltText we don't wait for it, so we must take care\n // that the alt text dialog can have been closed before the response is.\n\n const altText = await this.#currentEditor.mlGuessAltText(\n this.#imageData,\n /* updateAltTextData = */ false\n );\n if (altText) {\n this.#guessedAltText = altText;\n this.#wasAILoading = this.#isAILoading;\n if (this.#isAILoading) {\n this.#addAltText(altText);\n }\n }\n } catch (e) {\n console.error(e);\n hasError = true;\n }\n\n this.#toggleLoading(false);\n this.#toggleTitleAndDisclaimer();\n\n if (hasError && this.#uiManager) {\n this.#toggleError(true);\n }\n }\n\n #addAltText(altText) {\n if (!this.#uiManager || this.#textarea.value) {\n return;\n }\n this.#textarea.value = altText;\n this.#toggleTitleAndDisclaimer();\n }\n\n #setProgress() {\n // Show the download model progress.\n this.#downloadModel.classList.toggle(\"hidden\", false);\n\n const callback = async ({ detail: { finished, total, totalLoaded } }) => {\n const ONE_MEGA_BYTES = 1e6;\n // totalLoaded can be greater than total if the download is compressed.\n // So we cheat to avoid any confusion.\n totalLoaded = Math.min(0.99 * total, totalLoaded);\n\n // Update the progress.\n const totalSize = (this.#downloadModelDescription.ariaValueMax =\n Math.round(total / ONE_MEGA_BYTES));\n const downloadedSize = (this.#downloadModelDescription.ariaValueNow =\n Math.round(totalLoaded / ONE_MEGA_BYTES));\n this.#downloadModelDescription.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ totalSize, downloadedSize })\n );\n if (!finished) {\n return;\n }\n\n // We're done, remove the listener and hide the download model progress.\n this.#eventBus._off(\"loadaiengineprogress\", callback);\n this.#downloadModel.classList.toggle(\"hidden\", true);\n\n this.#toggleAI(true);\n if (!this.#uiManager) {\n return;\n }\n const { mlManager } = this.#uiManager;\n\n // The model has been downloaded, we can now enable the AI service.\n mlManager.toggleService(\"altText\", true);\n this.#toggleGuessAltText(\n await mlManager.isEnabledFor(\"altText\"),\n /* isInitial = */ true\n );\n };\n this.#eventBus._on(\"loadaiengineprogress\", callback);\n }\n\n async editAltText(uiManager, editor, firstTime) {\n if (this.#currentEditor || !editor) {\n return;\n }\n\n if (firstTime && editor.hasAltTextData()) {\n editor.altTextFinish();\n return;\n }\n\n this.#firstTime = firstTime;\n const { mlManager } = uiManager;\n const hasAI = !!mlManager;\n this.#toggleTitleAndDisclaimer();\n\n if (mlManager && !mlManager.isReady(\"altText\")) {\n if (mlManager.hasProgress) {\n this.#setProgress();\n } else {\n this.#createAutomaticallyButton.setAttribute(\"aria-pressed\", false);\n }\n } else {\n this.#downloadModel.classList.toggle(\"hidden\", true);\n }\n\n const isAltTextEnabledPromise = mlManager?.isEnabledFor(\"altText\");\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n\n ({ altText: this.#previousAltText } = editor.altTextData);\n this.#textarea.value = this.#previousAltText ?? \"\";\n\n // TODO: get this value from Firefox\n // (https://bugzilla.mozilla.org/show_bug.cgi?id=1908184)\n const AI_MAX_IMAGE_DIMENSION = 224;\n const MAX_PREVIEW_DIMENSION = 180;\n\n // The max dimension of the preview in the dialog is 180px, so we keep 224px\n // and rescale it thanks to css.\n\n let canvas, width, height;\n if (mlManager) {\n ({\n canvas,\n width,\n height,\n imageData: this.#imageData,\n } = editor.copyCanvas(\n AI_MAX_IMAGE_DIMENSION,\n MAX_PREVIEW_DIMENSION,\n /* createImageData = */ true\n ));\n if (hasAI) {\n this.#toggleGuessAltText(\n await isAltTextEnabledPromise,\n /* isInitial = */ true\n );\n }\n } else {\n ({ canvas, width, height } = editor.copyCanvas(\n AI_MAX_IMAGE_DIMENSION,\n MAX_PREVIEW_DIMENSION,\n /* createImageData = */ false\n ));\n }\n\n canvas.setAttribute(\"role\", \"presentation\");\n const { style } = canvas;\n style.width = `${width}px`;\n style.height = `${height}px`;\n this.#imagePreview.append(canvas);\n\n this.#toggleNotNow();\n this.#toggleAI(hasAI);\n this.#toggleError(false);\n\n try {\n await this.#overlayManager.open(this.#dialog);\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #cancel() {\n this.#currentEditor.altTextData = {\n cancel: true,\n };\n const altText = this.#textarea.value.trim();\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.dismiss\",\n data: {\n alt_text_type: altText ? \"present\" : \"empty\",\n flow: this.#firstTime ? \"image_add\" : \"alt_text_edit\",\n },\n });\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: { alt_text_modal: true, alt_text_type: \"skipped\" },\n });\n this.#finish();\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n\n #close() {\n const canvas = this.#imagePreview.firstElementChild;\n canvas.remove();\n canvas.width = canvas.height = 0;\n this.#imageData = null;\n\n this.#toggleLoading(false);\n\n this.#uiManager?.addEditListeners();\n this.#currentEditor.altTextFinish();\n this.#uiManager?.setSelected(this.#currentEditor);\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #extractWords(text) {\n return new Set(\n text\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/gu)\n .filter(x => !!x)\n );\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n this.#currentEditor.altTextData = {\n altText,\n decorative: false,\n };\n this.#currentEditor.altTextData.guessedAltText = this.#guessedAltText;\n\n if (this.#guessedAltText && this.#guessedAltText !== altText) {\n const guessedWords = this.#extractWords(this.#guessedAltText);\n const words = this.#extractWords(altText);\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.user_edit\",\n data: {\n total_words: guessedWords.size,\n words_removed: guessedWords.difference(words).size,\n words_added: words.difference(guessedWords).size,\n },\n });\n }\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.image_added\",\n data: {\n alt_text_modal: true,\n alt_text_type: altText ? \"present\" : \"empty\",\n },\n });\n\n this.#currentEditor._reportTelemetry({\n action: \"pdfjs.image.alt_text.save\",\n data: {\n alt_text_type: altText ? \"present\" : \"empty\",\n flow: this.#firstTime ? \"image_add\" : \"alt_text_edit\",\n },\n });\n\n this.#finish();\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n }\n}\n\nclass ImageAltTextSettings {\n #createModelButton;\n\n #dialog;\n\n #eventBus;\n\n #mlManager;\n\n #overlayManager;\n\n #showAltTextDialogButton;\n\n constructor(\n {\n dialog,\n createModelButton,\n learnMore,\n closeButton,\n showAltTextDialogButton,\n },\n overlayManager,\n eventBus,\n mlManager\n ) {\n this.#dialog = dialog;\n this.#createModelButton = createModelButton;\n this.#showAltTextDialogButton = showAltTextDialogButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#mlManager = mlManager;\n\n const { altTextLearnMoreUrl } = mlManager;\n if (altTextLearnMoreUrl) {\n learnMore.href = altTextLearnMoreUrl;\n }\n\n dialog.addEventListener(\"contextmenu\", noContextMenu);\n\n createModelButton.addEventListener(\"click\", async e => {\n const checked = this.#togglePref(\"enableGuessAltText\", e);\n await (checked ? this.#download(true) : this.#delete(true));\n await mlManager.toggleService(\"altText\", checked);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_ai_generation_check\",\n data: { status: checked },\n });\n });\n\n showAltTextDialogButton.addEventListener(\"click\", e => {\n const checked = this.#togglePref(\"enableNewAltTextWhenAddingImage\", e);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_edit_alt_text_check\",\n data: { status: checked },\n });\n });\n\n closeButton.addEventListener(\"click\", this.#finish.bind(this));\n\n learnMore.addEventListener(\"click\", () => {\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.info\",\n data: { topic: \"ai_generation\" },\n });\n });\n\n eventBus._on(\"enablealttextmodeldownload\", ({ value }) => {\n if (value) {\n this.#download(false);\n } else {\n this.#delete(false);\n }\n });\n\n this.#overlayManager.register(dialog);\n }\n\n #reportTelemetry(data) {\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data,\n },\n });\n }\n\n async #download(isFromUI = false) {\n if (isFromUI) {\n await this.#mlManager.downloadModel(\"altText\");\n\n this.#setPref(\"enableGuessAltText\", true);\n this.#mlManager.toggleService(\"altText\", true);\n this.#setPref(\"enableAltTextModelDownload\", true);\n }\n }\n\n async #delete(isFromUI = false) {\n if (isFromUI) {\n await this.#mlManager.deleteModel(\"altText\");\n this.#setPref(\"enableGuessAltText\", false);\n this.#setPref(\"enableAltTextModelDownload\", false);\n }\n\n this.#createModelButton.setAttribute(\"aria-pressed\", false);\n }\n\n async open({ enableGuessAltText, enableNewAltTextWhenAddingImage }) {\n const { enableAltTextModelDownload } = this.#mlManager;\n this.#createModelButton.setAttribute(\n \"aria-pressed\",\n enableAltTextModelDownload && enableGuessAltText\n );\n this.#showAltTextDialogButton.setAttribute(\n \"aria-pressed\",\n enableNewAltTextWhenAddingImage\n );\n\n await this.#overlayManager.open(this.#dialog);\n this.#reportTelemetry({\n type: \"stamp\",\n action: \"pdfjs.image.alt_text.settings_displayed\",\n });\n }\n\n #togglePref(name, { target }) {\n const checked = target.getAttribute(\"aria-pressed\") !== \"true\";\n this.#setPref(name, checked);\n target.setAttribute(\"aria-pressed\", checked);\n return checked;\n }\n\n #setPref(name, value) {\n this.#eventBus.dispatch(\"setpreference\", {\n source: this,\n name,\n value,\n });\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n}\n\nexport { ImageAltTextSettings, NewAltTextManager };\n","/* Copyright 2023 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DOMSVGFactory } from \"pdfjs-lib\";\n\nclass AltTextManager {\n #clickAC = null;\n\n #currentEditor = null;\n\n #cancelButton;\n\n #dialog;\n\n #eventBus;\n\n #hasUsedPointer = false;\n\n #optionDescription;\n\n #optionDecorative;\n\n #overlayManager;\n\n #saveButton;\n\n #textarea;\n\n #uiManager;\n\n #previousAltText = null;\n\n #resizeAC = null;\n\n #svgElement = null;\n\n #rectElement = null;\n\n #container;\n\n #telemetryData = null;\n\n constructor(\n {\n dialog,\n optionDescription,\n optionDecorative,\n textarea,\n cancelButton,\n saveButton,\n },\n container,\n overlayManager,\n eventBus\n ) {\n this.#dialog = dialog;\n this.#optionDescription = optionDescription;\n this.#optionDecorative = optionDecorative;\n this.#textarea = textarea;\n this.#cancelButton = cancelButton;\n this.#saveButton = saveButton;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#container = container;\n\n const onUpdateUIState = this.#updateUIState.bind(this);\n\n dialog.addEventListener(\"close\", this.#close.bind(this));\n dialog.addEventListener(\"contextmenu\", event => {\n if (event.target !== this.#textarea) {\n event.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n optionDescription.addEventListener(\"change\", onUpdateUIState);\n optionDecorative.addEventListener(\"change\", onUpdateUIState);\n textarea.addEventListener(\"keydown\", e => {\n if (\n (e.ctrlKey || e.metaKey) &&\n e.key === \"Enter\" &&\n !saveButton.disabled\n ) {\n this.#save();\n }\n });\n\n this.#overlayManager.register(dialog);\n }\n\n #createSVGElement() {\n if (this.#svgElement) {\n return;\n }\n\n // We create a mask to add to the dialog backdrop: the idea is to have a\n // darken background everywhere except on the editor to clearly see the\n // picture to describe.\n\n const svgFactory = new DOMSVGFactory();\n const svg = (this.#svgElement = svgFactory.createElement(\"svg\"));\n svg.setAttribute(\"width\", \"0\");\n svg.setAttribute(\"height\", \"0\");\n const defs = svgFactory.createElement(\"defs\");\n svg.append(defs);\n const mask = svgFactory.createElement(\"mask\");\n defs.append(mask);\n mask.setAttribute(\"id\", \"alttext-manager-mask\");\n mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n let rect = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"white\");\n rect.setAttribute(\"width\", \"1\");\n rect.setAttribute(\"height\", \"1\");\n rect.setAttribute(\"x\", \"0\");\n rect.setAttribute(\"y\", \"0\");\n\n rect = this.#rectElement = svgFactory.createElement(\"rect\");\n mask.append(rect);\n rect.setAttribute(\"fill\", \"black\");\n this.#dialog.append(svg);\n }\n\n async editAltText(uiManager, editor) {\n if (this.#currentEditor || !editor) {\n return;\n }\n this.#createSVGElement();\n\n this.#hasUsedPointer = false;\n\n this.#clickAC = new AbortController();\n const clickOpts = { signal: this.#clickAC.signal },\n onClick = this.#onClick.bind(this);\n for (const element of [\n this.#optionDescription,\n this.#optionDecorative,\n this.#textarea,\n this.#saveButton,\n this.#cancelButton,\n ]) {\n element.addEventListener(\"click\", onClick, clickOpts);\n }\n\n const { altText, decorative } = editor.altTextData;\n if (decorative === true) {\n this.#optionDecorative.checked = true;\n this.#optionDescription.checked = false;\n } else {\n this.#optionDecorative.checked = false;\n this.#optionDescription.checked = true;\n }\n this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n this.#updateUIState();\n\n this.#currentEditor = editor;\n this.#uiManager = uiManager;\n this.#uiManager.removeEditListeners();\n\n this.#resizeAC = new AbortController();\n this.#eventBus._on(\"resize\", this.#setPosition.bind(this), {\n signal: this.#resizeAC.signal,\n });\n\n try {\n await this.#overlayManager.open(this.#dialog);\n this.#setPosition();\n } catch (ex) {\n this.#close();\n throw ex;\n }\n }\n\n #setPosition() {\n if (!this.#currentEditor) {\n return;\n }\n const dialog = this.#dialog;\n const { style } = dialog;\n const {\n x: containerX,\n y: containerY,\n width: containerW,\n height: containerH,\n } = this.#container.getBoundingClientRect();\n const { innerWidth: windowW, innerHeight: windowH } = window;\n const { width: dialogW, height: dialogH } = dialog.getBoundingClientRect();\n const { x, y, width, height } = this.#currentEditor.getClientDimensions();\n const MARGIN = 10;\n const isLTR = this.#uiManager.direction === \"ltr\";\n\n const xs = Math.max(x, containerX);\n const xe = Math.min(x + width, containerX + containerW);\n const ys = Math.max(y, containerY);\n const ye = Math.min(y + height, containerY + containerH);\n this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n\n let left = null;\n let top = Math.max(y, 0);\n top += Math.min(windowH - (top + dialogH), 0);\n\n if (isLTR) {\n // Prefer to position the dialog \"after\" (so on the right) the editor.\n if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n }\n } else if (x > dialogW + MARGIN) {\n left = x - dialogW - MARGIN;\n } else if (x + width + MARGIN + dialogW < windowW) {\n left = x + width + MARGIN;\n }\n\n if (left === null) {\n top = null;\n left = Math.max(x, 0);\n left += Math.min(windowW - (left + dialogW), 0);\n if (y > dialogH + MARGIN) {\n top = y - dialogH - MARGIN;\n } else if (y + height + MARGIN + dialogH < windowH) {\n top = y + height + MARGIN;\n }\n }\n\n if (top !== null) {\n dialog.classList.add(\"positioned\");\n if (isLTR) {\n style.left = `${left}px`;\n } else {\n style.right = `${windowW - left - dialogW}px`;\n }\n style.top = `${top}px`;\n } else {\n dialog.classList.remove(\"positioned\");\n style.left = \"\";\n style.top = \"\";\n }\n }\n\n #finish() {\n this.#overlayManager.closeIfActive(this.#dialog);\n }\n\n #close() {\n this.#currentEditor._reportTelemetry(\n this.#telemetryData || {\n action: \"alt_text_cancel\",\n alt_text_keyboard: !this.#hasUsedPointer,\n }\n );\n this.#telemetryData = null;\n\n this.#removeOnClickListeners();\n this.#uiManager?.addEditListeners();\n this.#resizeAC?.abort();\n this.#resizeAC = null;\n this.#currentEditor.altTextFinish();\n this.#currentEditor = null;\n this.#uiManager = null;\n }\n\n #updateUIState() {\n this.#textarea.disabled = this.#optionDecorative.checked;\n }\n\n #save() {\n const altText = this.#textarea.value.trim();\n const decorative = this.#optionDecorative.checked;\n this.#currentEditor.altTextData = {\n altText,\n decorative,\n };\n this.#telemetryData = {\n action: \"alt_text_save\",\n alt_text_description: !!altText,\n alt_text_edit:\n !!this.#previousAltText && this.#previousAltText !== altText,\n alt_text_decorative: decorative,\n alt_text_keyboard: !this.#hasUsedPointer,\n };\n this.#finish();\n }\n\n #onClick(evt) {\n if (evt.detail === 0) {\n return; // The keyboard was used.\n }\n this.#hasUsedPointer = true;\n this.#removeOnClickListeners();\n }\n\n #removeOnClickListeners() {\n this.#clickAC?.abort();\n this.#clickAC = null;\n }\n\n destroy() {\n this.#uiManager = null; // Avoid re-adding the edit listeners.\n this.#finish();\n this.#svgElement?.remove();\n this.#svgElement = this.#rectElement = null;\n }\n}\n\nexport { AltTextManager };\n","/* Copyright 2022 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorParamsType } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} AnnotationEditorParamsOptions\n * @property {HTMLInputElement} editorFreeTextFontSize\n * @property {HTMLInputElement} editorFreeTextColor\n * @property {HTMLInputElement} editorInkColor\n * @property {HTMLInputElement} editorInkThickness\n * @property {HTMLInputElement} editorInkOpacity\n * @property {HTMLButtonElement} editorStampAddImage\n * @property {HTMLInputElement} editorFreeHighlightThickness\n * @property {HTMLButtonElement} editorHighlightShowAll\n * @property {HTMLButtonElement} editorSignatureAddSignature\n */\n\nclass AnnotationEditorParams {\n /**\n * @param {AnnotationEditorParamsOptions} options\n * @param {EventBus} eventBus\n */\n constructor(options, eventBus) {\n this.eventBus = eventBus;\n this.#bindListeners(options);\n }\n\n /**\n * @param {AnnotationEditorParamsOptions} options\n */\n #bindListeners({\n editorFreeTextFontSize,\n editorFreeTextColor,\n editorInkColor,\n editorInkThickness,\n editorInkOpacity,\n editorStampAddImage,\n editorFreeHighlightThickness,\n editorHighlightShowAll,\n editorSignatureAddSignature,\n }) {\n const { eventBus } = this;\n\n const dispatchEvent = (typeStr, value) => {\n eventBus.dispatch(\"switchannotationeditorparams\", {\n source: this,\n type: AnnotationEditorParamsType[typeStr],\n value,\n });\n };\n editorFreeTextFontSize.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n });\n editorFreeTextColor.addEventListener(\"input\", function () {\n dispatchEvent(\"FREETEXT_COLOR\", this.value);\n });\n editorInkColor.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_COLOR\", this.value);\n });\n editorInkThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n });\n editorInkOpacity.addEventListener(\"input\", function () {\n dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n });\n editorStampAddImage.addEventListener(\"click\", () => {\n eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"editing\",\n data: { action: \"pdfjs.image.add_image_click\" },\n },\n });\n dispatchEvent(\"CREATE\");\n });\n editorFreeHighlightThickness.addEventListener(\"input\", function () {\n dispatchEvent(\"HIGHLIGHT_THICKNESS\", this.valueAsNumber);\n });\n editorHighlightShowAll.addEventListener(\"click\", function () {\n const checked = this.getAttribute(\"aria-pressed\") === \"true\";\n this.setAttribute(\"aria-pressed\", !checked);\n dispatchEvent(\"HIGHLIGHT_SHOW_ALL\", !checked);\n });\n editorSignatureAddSignature.addEventListener(\"click\", () => {\n dispatchEvent(\"CREATE\");\n });\n\n eventBus._on(\"annotationeditorparamschanged\", evt => {\n for (const [type, value] of evt.details) {\n switch (type) {\n case AnnotationEditorParamsType.FREETEXT_SIZE:\n editorFreeTextFontSize.value = value;\n break;\n case AnnotationEditorParamsType.FREETEXT_COLOR:\n editorFreeTextColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_COLOR:\n editorInkColor.value = value;\n break;\n case AnnotationEditorParamsType.INK_THICKNESS:\n editorInkThickness.value = value;\n break;\n case AnnotationEditorParamsType.INK_OPACITY:\n editorInkOpacity.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_COLOR:\n eventBus.dispatch(\"mainhighlightcolorpickerupdatecolor\", {\n source: this,\n value,\n });\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n editorFreeHighlightThickness.value = value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_FREE:\n editorFreeHighlightThickness.disabled = !value;\n break;\n case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n editorHighlightShowAll.setAttribute(\"aria-pressed\", value);\n break;\n }\n }\n });\n }\n}\n\nexport { AnnotationEditorParams };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Used to compare floats: there is no exact equality due to rounding errors.\nconst PRECISION = 1e-1;\n\nclass CaretBrowsingMode {\n #mainContainer;\n\n #toolBarHeight = 0;\n\n #viewerContainer;\n\n constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) {\n this.#mainContainer = mainContainer;\n this.#viewerContainer = viewerContainer;\n\n if (!toolbarContainer) {\n return;\n }\n this.#toolBarHeight = toolbarContainer.getBoundingClientRect().height;\n\n const toolbarObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.target === toolbarContainer) {\n this.#toolBarHeight = Math.floor(entry.borderBoxSize[0].blockSize);\n break;\n }\n }\n });\n toolbarObserver.observe(toolbarContainer);\n\n abortSignal.addEventListener(\"abort\", () => toolbarObserver.disconnect(), {\n once: true,\n });\n }\n\n /**\n * Return true if the two rectangles are on the same line.\n * @param {DOMRect} rect1\n * @param {DOMRect} rect2\n * @returns {boolean}\n */\n #isOnSameLine(rect1, rect2) {\n const top1 = rect1.y;\n const bot1 = rect1.bottom;\n const mid1 = rect1.y + rect1.height / 2;\n\n const top2 = rect2.y;\n const bot2 = rect2.bottom;\n const mid2 = rect2.y + rect2.height / 2;\n\n return (top1 <= mid2 && mid2 <= bot1) || (top2 <= mid1 && mid1 <= bot2);\n }\n\n /**\n * Return `true` if the rectangle is:\n * - under the caret when `isUp === false`.\n * - over the caret when `isUp === true`.\n * @param {DOMRect} rect\n * @param {number} x\n * @param {number} y\n * @param {boolean} isUp\n * @returns {boolean}\n */\n #isUnderOver(rect, x, y, isUp) {\n const midY = rect.y + rect.height / 2;\n return (\n (isUp ? y >= midY : y <= midY) &&\n rect.x - PRECISION <= x &&\n x <= rect.right + PRECISION\n );\n }\n\n /**\n * Check if the rectangle is visible.\n * @param {DOMRect} rect\n * @returns {boolean}\n */\n #isVisible(rect) {\n return (\n rect.top >= this.#toolBarHeight &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n\n /**\n * Get the position of the caret.\n * @param {Selection} selection\n * @param {boolean} isUp\n * @returns {Array}\n */\n #getCaretPosition(selection, isUp) {\n const { focusNode, focusOffset } = selection;\n const range = document.createRange();\n range.setStart(focusNode, focusOffset);\n range.setEnd(focusNode, focusOffset);\n const rect = range.getBoundingClientRect();\n\n return [rect.x, isUp ? rect.top : rect.bottom];\n }\n\n static #caretPositionFromPoint(x, y) {\n if (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n !document.caretPositionFromPoint\n ) {\n const { startContainer: offsetNode, startOffset: offset } =\n document.caretRangeFromPoint(x, y);\n return { offsetNode, offset };\n }\n return document.caretPositionFromPoint(x, y);\n }\n\n #setCaretPositionHelper(selection, caretX, select, element, rect) {\n rect ||= element.getBoundingClientRect();\n if (caretX <= rect.x + PRECISION) {\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (rect.right - PRECISION <= caretX) {\n const { lastChild } = element;\n if (select) {\n selection.extend(lastChild, lastChild.length);\n } else {\n selection.setPosition(lastChild, lastChild.length);\n }\n return;\n }\n\n const midY = rect.y + rect.height / 2;\n let caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n let parentElement = caretPosition.offsetNode?.parentElement;\n if (parentElement && parentElement !== element) {\n // There is an element on top of the one in the text layer, so we\n // need to hide all the elements (except the one in the text layer)\n // at this position in order to get the correct caret position.\n const elementsAtPoint = document.elementsFromPoint(caretX, midY);\n const savedVisibilities = [];\n for (const el of elementsAtPoint) {\n if (el === element) {\n break;\n }\n const { style } = el;\n savedVisibilities.push([el, style.visibility]);\n style.visibility = \"hidden\";\n }\n caretPosition = CaretBrowsingMode.#caretPositionFromPoint(caretX, midY);\n parentElement = caretPosition.offsetNode?.parentElement;\n for (const [el, visibility] of savedVisibilities) {\n el.style.visibility = visibility;\n }\n }\n if (parentElement !== element) {\n // The element targeted by caretPositionFromPoint isn't in the text\n // layer.\n if (select) {\n selection.extend(element.firstChild, 0);\n } else {\n selection.setPosition(element.firstChild, 0);\n }\n return;\n }\n if (select) {\n selection.extend(caretPosition.offsetNode, caretPosition.offset);\n } else {\n selection.setPosition(caretPosition.offsetNode, caretPosition.offset);\n }\n }\n\n /**\n * Set the caret position or extend the selection (it depends on the select\n * parameter).\n * @param {boolean} select\n * @param {Selection} selection\n * @param {Element} newLineElement\n * @param {DOMRect} newLineElementRect\n * @param {number} caretX\n */\n #setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n ) {\n if (this.#isVisible(newLineElementRect)) {\n this.#setCaretPositionHelper(\n selection,\n caretX,\n select,\n newLineElement,\n newLineElementRect\n );\n return;\n }\n this.#mainContainer.addEventListener(\n \"scrollend\",\n this.#setCaretPositionHelper.bind(\n this,\n selection,\n caretX,\n select,\n newLineElement,\n null\n ),\n { once: true }\n );\n newLineElement.scrollIntoView();\n }\n\n /**\n * Get the node on the next page.\n * @param {Element} textLayer\n * @param {boolean} isUp\n * @returns {Node}\n */\n #getNodeOnNextPage(textLayer, isUp) {\n while (true) {\n const page = textLayer.closest(\".page\");\n const pageNumber = parseInt(page.getAttribute(\"data-page-number\"));\n const nextPage = isUp ? pageNumber - 1 : pageNumber + 1;\n textLayer = this.#viewerContainer.querySelector(\n `.page[data-page-number=\"${nextPage}\"] .textLayer`\n );\n if (!textLayer) {\n return null;\n }\n const walker = document.createTreeWalker(textLayer, NodeFilter.SHOW_TEXT);\n const node = isUp ? walker.lastChild() : walker.firstChild();\n if (node) {\n return node;\n }\n }\n }\n\n /**\n * Move the caret in the given direction.\n * @param {boolean} isUp\n * @param {boolean} select\n */\n moveCaret(isUp, select) {\n const selection = document.getSelection();\n if (selection.rangeCount === 0) {\n return;\n }\n const { focusNode } = selection;\n const focusElement =\n focusNode.nodeType !== Node.ELEMENT_NODE\n ? focusNode.parentElement\n : focusNode;\n const root = focusElement.closest(\".textLayer\");\n if (!root) {\n return;\n }\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n walker.currentNode = focusNode;\n\n // Move to the next element which is not on the same line as the focus\n // element.\n const focusRect = focusElement.getBoundingClientRect();\n let newLineElement = null;\n const nodeIterator = (\n isUp ? walker.previousSibling : walker.nextSibling\n ).bind(walker);\n while (nodeIterator()) {\n const element = walker.currentNode.parentElement;\n if (!this.#isOnSameLine(focusRect, element.getBoundingClientRect())) {\n newLineElement = element;\n break;\n }\n }\n\n if (!newLineElement) {\n // Need to find the next line on the next page.\n const node = this.#getNodeOnNextPage(root, isUp);\n if (!node) {\n return;\n }\n if (select) {\n const lastNode =\n (isUp ? walker.firstChild() : walker.lastChild()) || focusNode;\n selection.extend(lastNode, isUp ? 0 : lastNode.length);\n const range = document.createRange();\n range.setStart(node, isUp ? node.length : 0);\n range.setEnd(node, isUp ? node.length : 0);\n selection.addRange(range);\n return;\n }\n const [caretX] = this.#getCaretPosition(selection, isUp);\n const { parentElement } = node;\n this.#setCaretPosition(\n select,\n selection,\n parentElement,\n parentElement.getBoundingClientRect(),\n caretX\n );\n return;\n }\n\n // We've a candidate for the next line now we want to find the first element\n // which is under/over the caret.\n const [caretX, caretY] = this.#getCaretPosition(selection, isUp);\n const newLineElementRect = newLineElement.getBoundingClientRect();\n\n // Maybe the element on the new line is a valid candidate.\n if (this.#isUnderOver(newLineElementRect, caretX, caretY, isUp)) {\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n return;\n }\n\n while (nodeIterator()) {\n // Search an element on the same line as newLineElement\n // which could be under/over the caret.\n const element = walker.currentNode.parentElement;\n const elementRect = element.getBoundingClientRect();\n if (!this.#isOnSameLine(newLineElementRect, elementRect)) {\n break;\n }\n if (this.#isUnderOver(elementRect, caretX, caretY, isUp)) {\n // We found the element.\n this.#setCaretPosition(select, selection, element, elementRect, caretX);\n return;\n }\n }\n\n // No element has been found so just put the caret on the element on the new\n // line.\n this.#setCaretPosition(\n select,\n selection,\n newLineElement,\n newLineElementRect,\n caretX\n );\n }\n}\n\nexport { CaretBrowsingMode };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu, stopEvent } from \"pdfjs-lib\";\n\n// Timeout before ending resize operation.\nconst RESIZE_TIMEOUT = 400; // ms\n\n/**\n * Viewer control to display a sidebar with resizer functionality.\n */\nclass Sidebar {\n #initialWidth = 0;\n\n #width = 0;\n\n #coefficient;\n\n #resizeTimeout = null;\n\n #resizer;\n\n #isResizerOnTheLeft;\n\n #isKeyboardResizing = false;\n\n #resizeObserver;\n\n #prevX = 0;\n\n /**\n * @typedef {Object} SidebarElements\n * @property {HTMLElement} sidebar - The sidebar element.\n * @property {HTMLElement} resizer - The sidebar resizer element.\n * @property {HTMLElement} toggleButton - The button used to toggle the\n * sidebar.\n */\n\n /**\n * Create a sidebar with resizer functionality.\n * @param {SidebarElements} sidebarElements\n * @param {boolean} ltr\n * @param {boolean} isResizerOnTheLeft\n */\n constructor({ sidebar, resizer, toggleButton }, ltr, isResizerOnTheLeft) {\n this._sidebar = sidebar;\n this.#coefficient = ltr === isResizerOnTheLeft ? -1 : 1;\n this.#resizer = resizer;\n this.#isResizerOnTheLeft = isResizerOnTheLeft;\n\n const style = window.getComputedStyle(sidebar);\n this.#initialWidth = this.#width = parseFloat(\n style.getPropertyValue(\"--sidebar-width\")\n );\n resizer.ariaValueMin =\n parseFloat(style.getPropertyValue(\"--sidebar-min-width\")) || 0;\n resizer.ariaValueMax =\n parseFloat(style.getPropertyValue(\"--sidebar-max-width\")) || Infinity;\n resizer.ariaValueNow = this.#width;\n\n this.#makeSidebarResizable();\n toggleButton.addEventListener(\"click\", this.toggle.bind(this));\n this._isOpen = false;\n sidebar.hidden = true;\n\n this.#resizeObserver = new ResizeObserver(\n ([\n {\n borderBoxSize: [{ inlineSize }],\n },\n ]) => {\n if (!isNaN(this.#prevX)) {\n this.#prevX += this.#coefficient * (inlineSize - this.#width);\n }\n this.#setWidth(inlineSize);\n }\n );\n this.#resizeObserver.observe(sidebar);\n }\n\n #makeSidebarResizable() {\n const sidebarStyle = this._sidebar.style;\n let pointerMoveAC;\n const cancelResize = () => {\n this.#resizeTimeout = null;\n this._sidebar.classList.remove(\"resizing\");\n pointerMoveAC?.abort();\n pointerMoveAC = null;\n this.#isKeyboardResizing = false;\n this.onStopResizing();\n this.#prevX = NaN;\n };\n this.#resizer.addEventListener(\"pointerdown\", e => {\n if (pointerMoveAC) {\n cancelResize();\n return;\n }\n this.onStartResizing();\n const { clientX } = e;\n stopEvent(e);\n this.#prevX = clientX;\n pointerMoveAC = new AbortController();\n const { signal } = pointerMoveAC;\n const sidebar = this._sidebar;\n sidebar.classList.add(\"resizing\");\n const parentStyle = sidebar.parentElement.style;\n parentStyle.minWidth = 0;\n window.addEventListener(\"contextmenu\", noContextMenu, { signal });\n window.addEventListener(\n \"pointermove\",\n ev => {\n if (!pointerMoveAC || Math.abs(ev.clientX - this.#prevX) < 1) {\n return;\n }\n stopEvent(ev);\n sidebarStyle.width = `${Math.round(this.#width + this.#coefficient * (ev.clientX - this.#prevX))}px`;\n },\n { signal, capture: true }\n );\n window.addEventListener(\"blur\", cancelResize, { signal });\n window.addEventListener(\n \"pointerup\",\n ev => {\n if (pointerMoveAC) {\n cancelResize();\n stopEvent(ev);\n }\n },\n { signal }\n );\n });\n this.#resizer.addEventListener(\"keydown\", e => {\n const { key } = e;\n const isArrowLeft = key === \"ArrowLeft\";\n if (isArrowLeft || key === \"ArrowRight\") {\n if (!this.#isKeyboardResizing) {\n this._sidebar.classList.add(\"resizing\");\n this.#isKeyboardResizing = true;\n this.onStartResizing();\n }\n\n const base = e.ctrlKey || e.metaKey ? 10 : 1;\n const dx = base * (isArrowLeft ? -1 : 1);\n clearTimeout(this.#resizeTimeout);\n this.#resizeTimeout = setTimeout(cancelResize, RESIZE_TIMEOUT);\n sidebarStyle.width = `${Math.round(this.#width + this.#coefficient * dx)}px`;\n stopEvent(e);\n }\n });\n }\n\n #setWidth(newWidth) {\n this.#width = newWidth;\n this.#resizer.ariaValueNow = Math.round(newWidth);\n if (this.#isResizerOnTheLeft) {\n this._sidebar.parentElement.style.insetInlineStart = `${(this.#initialWidth - newWidth).toFixed(3)}px`;\n }\n this.onResizing(newWidth);\n }\n\n /**\n * Get the current width of the sidebar in pixels.\n * @returns {number}\n */\n get width() {\n return this.#width;\n }\n\n /**\n * Set the width of the sidebar in pixels.\n * @param {number} newWidth\n */\n set width(newWidth) {\n this._sidebar.style.width = `${newWidth}px`;\n }\n\n /**\n * Callback to be executed when the user starts resizing the sidebar.\n */\n onStartResizing() {}\n\n /**\n * Callback to be executed when the user stops resizing the sidebar.\n */\n onStopResizing() {}\n\n /**\n * Callback to be executed when the sidebar is being resized.\n * @param {number} newWidth - The new width of the sidebar in pixels.\n */\n onResizing(_newWidth) {}\n\n /**\n * Toggle the sidebar's visibility.\n * @param {boolean} [visibility] - The visibility state to set.\n */\n toggle(visibility = !this._isOpen) {\n this._sidebar.hidden = !(this._isOpen = visibility);\n }\n\n destroy() {\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n }\n}\n\nexport { Sidebar };\n","/* Copyright 2025 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n AnnotationEditorType,\n applyOpacity,\n CSSConstants,\n findContrastColor,\n MathClamp,\n noContextMenu,\n PDFDateString,\n renderRichText,\n shadow,\n stopEvent,\n Util,\n} from \"pdfjs-lib\";\nimport { binarySearchFirstItem } from \"./ui_utils.js\";\nimport { Sidebar } from \"./sidebar.js\";\n\nclass CommentManager {\n #dialog;\n\n #popup;\n\n #sidebar;\n\n static #hasForcedColors = null;\n\n constructor(\n commentDialog,\n sidebar,\n eventBus,\n linkService,\n overlayManager,\n ltr,\n hasForcedColors\n ) {\n const dateFormat = new Intl.DateTimeFormat(undefined, {\n dateStyle: \"long\",\n });\n this.dialogElement = commentDialog.dialog;\n this.#dialog = new CommentDialog(\n commentDialog,\n overlayManager,\n eventBus,\n ltr\n );\n this.#popup = new CommentPopup(\n eventBus,\n dateFormat,\n ltr,\n this.dialogElement\n );\n this.#sidebar = new CommentSidebar(\n sidebar,\n eventBus,\n linkService,\n this.#popup,\n dateFormat,\n ltr\n );\n this.#popup.sidebar = this.#sidebar;\n CommentManager.#hasForcedColors = hasForcedColors;\n }\n\n setSidebarUiManager(uiManager) {\n this.#sidebar.setUIManager(uiManager);\n }\n\n showSidebar(annotations) {\n this.#sidebar.show(annotations);\n }\n\n hideSidebar() {\n this.#sidebar.hide();\n }\n\n removeComments(ids) {\n this.#sidebar.removeComments(ids);\n }\n\n selectComment(id) {\n this.#sidebar.selectComment(null, id);\n }\n\n addComment(annotation) {\n this.#sidebar.addComment(annotation);\n }\n\n updateComment(annotation) {\n this.#sidebar.updateComment(annotation);\n }\n\n toggleCommentPopup(editor, isSelected, visibility, isEditable) {\n if (isSelected) {\n this.selectComment(editor.uid);\n }\n this.#popup.toggle(editor, isSelected, visibility, isEditable);\n }\n\n destroyPopup() {\n this.#popup.destroy();\n }\n\n updatePopupColor(editor) {\n this.#popup.updateColor(editor);\n }\n\n showDialog(uiManager, editor, posX, posY, options) {\n return this.#dialog.open(uiManager, editor, posX, posY, options);\n }\n\n makeCommentColor(color, opacity) {\n return CommentManager._makeCommentColor(color, opacity);\n }\n\n static _makeCommentColor(color, opacity) {\n return this.#hasForcedColors\n ? null\n : findContrastColor(\n applyOpacity(...color, opacity ?? 1),\n CSSConstants.commentForegroundColor\n );\n }\n\n destroy() {\n this.#dialog.destroy();\n this.#sidebar.hide();\n this.#popup.destroy();\n }\n}\n\nclass CommentSidebar extends Sidebar {\n #annotations = null;\n\n #eventBus;\n\n #boundCommentClick = this.#commentClick.bind(this);\n\n #boundCommentKeydown = this.#commentKeydown.bind(this);\n\n #closeButton;\n\n #commentsList;\n\n #commentCount;\n\n #dateFormat;\n\n #sidebarTitle;\n\n #learnMoreUrl;\n\n #linkService;\n\n #popup;\n\n #elementsToAnnotations = null;\n\n #idsToElements = null;\n\n #uiManager = null;\n\n constructor(\n {\n learnMoreUrl,\n sidebar,\n sidebarResizer,\n commentsList,\n commentCount,\n sidebarTitle,\n closeButton,\n commentToolbarButton,\n },\n eventBus,\n linkService,\n popup,\n dateFormat,\n ltr\n ) {\n super(\n { sidebar, resizer: sidebarResizer, toggleButton: commentToolbarButton },\n ltr,\n /* isResizerOnTheLeft = */ true\n );\n this.#sidebarTitle = sidebarTitle;\n this.#commentsList = commentsList;\n this.#commentCount = commentCount;\n this.#learnMoreUrl = learnMoreUrl;\n this.#linkService = linkService;\n this.#closeButton = closeButton;\n this.#popup = popup;\n this.#dateFormat = dateFormat;\n this.#eventBus = eventBus;\n\n closeButton.addEventListener(\"click\", () => {\n eventBus.dispatch(\"switchannotationeditormode\", {\n source: this,\n mode: AnnotationEditorType.NONE,\n });\n });\n const keyDownCallback = e => {\n if (e.key === \"ArrowDown\" || e.key === \"Home\" || e.key === \"F6\") {\n this.#commentsList.firstElementChild.focus();\n stopEvent(e);\n } else if (e.key === \"ArrowUp\" || e.key === \"End\") {\n this.#commentsList.lastElementChild.focus();\n stopEvent(e);\n }\n };\n commentToolbarButton.addEventListener(\"keydown\", keyDownCallback);\n sidebar.addEventListener(\"keydown\", keyDownCallback);\n }\n\n setUIManager(uiManager) {\n this.#uiManager = uiManager;\n }\n\n show(annotations) {\n this.#elementsToAnnotations = new WeakMap();\n this.#idsToElements = new Map();\n this.#annotations = annotations;\n annotations.sort(this.#sortComments.bind(this));\n if (annotations.length !== 0) {\n const fragment = document.createDocumentFragment();\n for (const annotation of annotations) {\n fragment.append(this.#createCommentElement(annotation));\n }\n\n this.#setCommentsCount(fragment);\n this.#commentsList.append(fragment);\n } else {\n this.#setCommentsCount();\n }\n this._sidebar.hidden = false;\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"commentSidebar\",\n data: { numberOfAnnotations: annotations.length },\n },\n });\n }\n\n hide() {\n this._sidebar.hidden = true;\n this.#commentsList.replaceChildren();\n this.#elementsToAnnotations = null;\n this.#idsToElements = null;\n this.#annotations = null;\n }\n\n removeComments(ids) {\n if (ids.length === 0 || !this.#idsToElements) {\n return;\n }\n if (\n new Set(this.#idsToElements.keys()).difference(new Set(ids)).size === 0\n ) {\n this.#removeAll();\n return;\n }\n for (const id of ids) {\n this.#removeComment(id);\n }\n }\n\n focusComment(id) {\n const element = this.#idsToElements.get(id);\n if (!element) {\n return;\n }\n this._sidebar.scrollTop = element.offsetTop - this._sidebar.offsetTop;\n for (const el of this.#commentsList.children) {\n el.classList.toggle(\"selected\", el === element);\n }\n }\n\n updateComment(annotation) {\n if (!this.#idsToElements) {\n return;\n }\n const {\n id,\n creationDate,\n modificationDate,\n richText,\n contentsObj,\n popupRef,\n } = annotation;\n\n if (!popupRef || (!richText && !contentsObj?.str)) {\n this.#removeComment(id);\n }\n\n const element = this.#idsToElements.get(id);\n if (!element) {\n return;\n }\n const prevAnnotation = this.#elementsToAnnotations.get(element);\n let index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, prevAnnotation) >= 0\n );\n if (index >= this.#annotations.length) {\n return;\n }\n\n this.#setDate(element.firstElementChild, modificationDate || creationDate);\n this.#setText(element.lastElementChild, richText, contentsObj);\n\n this.#annotations.splice(index, 1);\n index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, annotation) >= 0\n );\n this.#annotations.splice(index, 0, annotation);\n if (index >= this.#commentsList.children.length) {\n this.#commentsList.append(element);\n } else {\n this.#commentsList.insertBefore(\n element,\n this.#commentsList.children[index]\n );\n }\n }\n\n #removeComment(id) {\n const element = this.#idsToElements?.get(id);\n if (!element) {\n return;\n }\n const annotation = this.#elementsToAnnotations.get(element);\n const index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, annotation) >= 0\n );\n if (index >= this.#annotations.length) {\n return;\n }\n this.#annotations.splice(index, 1);\n element.remove();\n this.#idsToElements.delete(id);\n this.#setCommentsCount();\n }\n\n #removeAll() {\n this.#commentsList.replaceChildren();\n this.#elementsToAnnotations = new WeakMap();\n this.#idsToElements.clear();\n this.#annotations.length = 0;\n this.#setCommentsCount();\n }\n\n selectComment(element, id = null) {\n if (!this.#idsToElements) {\n return;\n }\n const hasNoElement = !element;\n element ||= this.#idsToElements.get(id);\n for (const el of this.#commentsList.children) {\n el.classList.toggle(\"selected\", el === element);\n }\n if (hasNoElement) {\n element?.scrollIntoView({ behavior: \"instant\", block: \"center\" });\n }\n }\n\n addComment(annotation) {\n if (this.#idsToElements?.has(annotation.id)) {\n return;\n }\n const { popupRef, contentsObj } = annotation;\n if (!popupRef || !contentsObj?.str) {\n return;\n }\n const commentItem = this.#createCommentElement(annotation);\n if (this.#annotations.length === 0) {\n this.#commentsList.replaceChildren(commentItem);\n this.#annotations.push(annotation);\n this.#setCommentsCount();\n return;\n }\n const index = binarySearchFirstItem(\n this.#annotations,\n a => this.#sortComments(a, annotation) >= 0\n );\n this.#annotations.splice(index, 0, annotation);\n if (index >= this.#commentsList.children.length) {\n this.#commentsList.append(commentItem);\n } else {\n this.#commentsList.insertBefore(\n commentItem,\n this.#commentsList.children[index]\n );\n }\n this.#setCommentsCount();\n }\n\n #setCommentsCount(container = this.#commentsList) {\n const count = this.#idsToElements.size;\n this.#sidebarTitle.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ count })\n );\n this.#commentCount.textContent = count;\n if (count === 0) {\n container.append(this.#createZeroCommentElement());\n }\n }\n\n #createZeroCommentElement() {\n const commentItem = document.createElement(\"li\");\n commentItem.classList.add(\"sidebarComment\", \"noComments\");\n const textDiv = document.createElement(\"div\");\n textDiv.className = \"sidebarCommentText\";\n textDiv.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-comments-sidebar-no-comments1\"\n );\n commentItem.append(textDiv);\n if (this.#learnMoreUrl) {\n const a = document.createElement(\"a\");\n a.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-comments-sidebar-no-comments-link\"\n );\n a.href = this.#learnMoreUrl;\n a.target = \"_blank\";\n a.rel = \"noopener noreferrer\";\n commentItem.append(a);\n }\n return commentItem;\n }\n\n #setDate(element, date) {\n date = PDFDateString.toDateObject(date);\n element.dateTime = date.toISOString();\n element.textContent = this.#dateFormat.format(date);\n }\n\n #setText(element, richText, contentsObj) {\n element.replaceChildren();\n const html =\n richText?.str && (!contentsObj?.str || richText.str === contentsObj.str)\n ? richText.html\n : contentsObj?.str;\n renderRichText(\n {\n html,\n dir: contentsObj?.dir || \"auto\",\n className: \"richText\",\n },\n element\n );\n }\n\n #createCommentElement(annotation) {\n const {\n id,\n creationDate,\n modificationDate,\n richText,\n contentsObj,\n color,\n opacity,\n } = annotation;\n const commentItem = document.createElement(\"li\");\n commentItem.role = \"button\";\n commentItem.className = \"sidebarComment\";\n commentItem.tabIndex = -1;\n commentItem.style.backgroundColor =\n (color && CommentManager._makeCommentColor(color, opacity)) || \"\";\n const dateDiv = document.createElement(\"time\");\n this.#setDate(dateDiv, modificationDate || creationDate);\n\n const textDiv = document.createElement(\"div\");\n textDiv.className = \"sidebarCommentText\";\n this.#setText(textDiv, richText, contentsObj);\n\n commentItem.append(dateDiv, textDiv);\n commentItem.addEventListener(\"click\", this.#boundCommentClick);\n commentItem.addEventListener(\"keydown\", this.#boundCommentKeydown);\n\n this.#elementsToAnnotations.set(commentItem, annotation);\n this.#idsToElements.set(id, commentItem);\n return commentItem;\n }\n\n async #commentClick({ currentTarget }) {\n if (currentTarget.classList.contains(\"selected\")) {\n currentTarget.classList.remove(\"selected\");\n this.#popup._hide();\n return;\n }\n const annotation = this.#elementsToAnnotations.get(currentTarget);\n if (!annotation) {\n return;\n }\n this.#popup._hide();\n const { id, pageIndex, rect } = annotation;\n const pageNumber = pageIndex + 1;\n const pageVisiblePromise =\n this.#uiManager?.waitForEditorsRendered(pageNumber);\n this.#linkService?.goToXY(pageNumber, rect[0], rect[3], {\n center: \"both\",\n });\n this.selectComment(currentTarget);\n await pageVisiblePromise;\n this.#uiManager?.selectComment(pageIndex, id);\n }\n\n #commentKeydown(e) {\n const { key, currentTarget } = e;\n switch (key) {\n case \"ArrowDown\":\n (\n currentTarget.nextElementSibling ||\n this.#commentsList.firstElementChild\n ).focus();\n stopEvent(e);\n break;\n case \"ArrowUp\":\n (\n currentTarget.previousElementSibling ||\n this.#commentsList.lastElementChild\n ).focus();\n stopEvent(e);\n break;\n case \"Home\":\n this.#commentsList.firstElementChild.focus();\n stopEvent(e);\n break;\n case \"End\":\n this.#commentsList.lastElementChild.focus();\n stopEvent(e);\n break;\n case \"Enter\":\n case \" \":\n this.#commentClick(e);\n stopEvent(e);\n break;\n case \"ShiftTab\":\n this.#closeButton.focus();\n stopEvent(e);\n break;\n }\n }\n\n #sortComments(a, b) {\n const dateA = PDFDateString.toDateObject(\n a.modificationDate || a.creationDate\n );\n const dateB = PDFDateString.toDateObject(\n b.modificationDate || b.creationDate\n );\n if (dateA !== dateB) {\n if (dateA !== null && dateB !== null) {\n return dateB - dateA;\n }\n return dateA !== null ? -1 : 1;\n }\n if (a.pageIndex !== b.pageIndex) {\n return a.pageIndex - b.pageIndex;\n }\n if (a.rect[3] !== b.rect[3]) {\n return b.rect[3] - a.rect[3];\n }\n if (a.rect[0] !== b.rect[0]) {\n return a.rect[0] - b.rect[0];\n }\n if (a.rect[1] !== b.rect[1]) {\n return b.rect[1] - a.rect[1];\n }\n if (a.rect[2] !== b.rect[2]) {\n return a.rect[2] - b.rect[2];\n }\n return a.id.localeCompare(b.id);\n }\n}\n\nclass CommentDialog {\n #dialog;\n\n #editor;\n\n #overlayManager;\n\n #previousText = \"\";\n\n #commentText = \"\";\n\n #textInput;\n\n #title;\n\n #saveButton;\n\n #uiManager;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #dialogX = 0;\n\n #dialogY = 0;\n\n #isLTR;\n\n #eventBus;\n\n constructor(\n { dialog, toolbar, title, textInput, cancelButton, saveButton },\n overlayManager,\n eventBus,\n ltr\n ) {\n this.#dialog = dialog;\n this.#textInput = textInput;\n this.#overlayManager = overlayManager;\n this.#eventBus = eventBus;\n this.#saveButton = saveButton;\n this.#title = title;\n this.#isLTR = ltr;\n\n const finishBound = this.#finish.bind(this);\n dialog.addEventListener(\"close\", finishBound);\n dialog.addEventListener(\"contextmenu\", e => {\n if (e.target !== this.#textInput) {\n e.preventDefault();\n }\n });\n cancelButton.addEventListener(\"click\", finishBound);\n saveButton.addEventListener(\"click\", this.#save.bind(this));\n\n textInput.addEventListener(\"input\", () => {\n saveButton.disabled = textInput.value === this.#previousText;\n });\n textInput.addEventListener(\"keydown\", e => {\n if (\n (e.ctrlKey || e.metaKey) &&\n e.key === \"Enter\" &&\n !saveButton.disabled\n ) {\n this.#save();\n }\n });\n\n // Make the dialog draggable.\n let pointerMoveAC;\n const cancelDrag = () => {\n dialog.classList.remove(\"dragging\");\n pointerMoveAC?.abort();\n pointerMoveAC = null;\n };\n toolbar.addEventListener(\"pointerdown\", e => {\n if (pointerMoveAC) {\n cancelDrag();\n return;\n }\n const { clientX, clientY } = e;\n stopEvent(e);\n this.#prevDragX = clientX;\n this.#prevDragY = clientY;\n pointerMoveAC = new AbortController();\n const { signal } = pointerMoveAC;\n const { innerHeight, innerWidth } = window;\n dialog.classList.add(\"dragging\");\n window.addEventListener(\n \"pointermove\",\n ev => {\n if (!pointerMoveAC) {\n return;\n }\n const { clientX: x, clientY: y } = ev;\n this.#setPosition(\n this.#dialogX + (x - this.#prevDragX) / innerWidth,\n this.#dialogY + (y - this.#prevDragY) / innerHeight\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n stopEvent(ev);\n },\n { signal }\n );\n window.addEventListener(\"blur\", cancelDrag, { signal });\n window.addEventListener(\n \"pointerup\",\n ev => {\n if (pointerMoveAC) {\n cancelDrag();\n stopEvent(ev);\n }\n },\n { signal }\n );\n });\n\n overlayManager.register(dialog);\n }\n\n async open(uiManager, editor, posX, posY, options) {\n if (editor) {\n this.#uiManager = uiManager;\n this.#editor = editor;\n }\n const {\n contentsObj: { str },\n color,\n opacity,\n } = editor.getData();\n const { style: dialogStyle } = this.#dialog;\n if (color) {\n dialogStyle.backgroundColor = CommentManager._makeCommentColor(\n color,\n opacity\n );\n dialogStyle.borderColor = Util.makeHexColor(...color);\n } else {\n dialogStyle.backgroundColor = dialogStyle.borderColor = \"\";\n }\n this.#commentText = str || \"\";\n const textInput = this.#textInput;\n textInput.value = this.#previousText = this.#commentText;\n if (str) {\n this.#title.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-title-when-editing\"\n );\n this.#saveButton.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-save-button-when-editing\"\n );\n } else {\n this.#title.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-title-when-adding\"\n );\n this.#saveButton.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-dialog-save-button-when-adding\"\n );\n }\n if (options?.height) {\n textInput.style.height = `${options.height}px`;\n }\n this.#uiManager?.removeEditListeners();\n this.#saveButton.disabled = true;\n const parentDimensions = options?.parentDimensions;\n const { innerHeight, innerWidth } = window;\n if (editor.hasDefaultPopupPosition()) {\n const { dialogWidth, dialogHeight } = this._dialogDimensions;\n if (parentDimensions) {\n if (\n this.#isLTR &&\n posX + dialogWidth >\n Math.min(parentDimensions.x + parentDimensions.width, innerWidth)\n ) {\n const buttonWidth = this.#editor.commentButtonWidth;\n posX -= dialogWidth - buttonWidth * parentDimensions.width;\n } else if (!this.#isLTR) {\n const buttonWidth =\n this.#editor.commentButtonWidth * parentDimensions.width;\n if (posX - dialogWidth < Math.max(0, parentDimensions.x)) {\n posX = Math.max(0, posX);\n } else {\n posX -= dialogWidth - buttonWidth;\n }\n }\n }\n const height = Math.max(dialogHeight, options?.height || 0);\n if (posY + height > innerHeight) {\n posY = innerHeight - height;\n }\n if (posY < 0) {\n posY = 0;\n }\n }\n\n posX = MathClamp(posX / innerWidth, 0, 1);\n posY = MathClamp(posY / innerHeight, 0, 1);\n this.#setPosition(posX, posY);\n\n await this.#overlayManager.open(this.#dialog);\n textInput.focus();\n }\n\n async #save() {\n this.#editor.comment = this.#textInput.value;\n this.#finish();\n }\n\n get _dialogDimensions() {\n const dialog = this.#dialog;\n const { style } = dialog;\n style.opacity = \"0\";\n style.display = \"block\";\n const { width, height } = dialog.getBoundingClientRect();\n style.opacity = style.display = \"\";\n return shadow(this, \"_dialogDimensions\", {\n dialogWidth: width,\n dialogHeight: height,\n });\n }\n\n #setPosition(x, y) {\n this.#dialogX = x;\n this.#dialogY = y;\n const { style } = this.#dialog;\n style.left = `${100 * x}%`;\n style.top = `${100 * y}%`;\n }\n\n #finish() {\n if (!this.#editor) {\n return;\n }\n const edited = this.#textInput.value !== this.#commentText;\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"comment\",\n data: {\n edited,\n },\n },\n });\n\n this.#editor?.focusCommentButton();\n this.#editor = null;\n this.#textInput.value = this.#previousText = this.#commentText = \"\";\n this.#overlayManager.closeIfActive(this.#dialog);\n this.#textInput.style.height = \"\";\n this.#uiManager?.addEditListeners();\n this.#uiManager = null;\n }\n\n destroy() {\n this.#uiManager = null;\n this.#editor = null;\n this.#finish();\n }\n}\n\nclass CommentPopup {\n #buttonsContainer = null;\n\n #eventBus;\n\n #commentDialog;\n\n #dateFormat;\n\n #editor = null;\n\n #isLTR;\n\n #container = null;\n\n #text = null;\n\n #time = null;\n\n #prevDragX = 0;\n\n #prevDragY = 0;\n\n #posX = 0;\n\n #posY = 0;\n\n #previousFocusedElement = null;\n\n #selected = false;\n\n #visible = false;\n\n constructor(eventBus, dateFormat, ltr, commentDialog) {\n this.#eventBus = eventBus;\n this.#dateFormat = dateFormat;\n this.#isLTR = ltr;\n this.#commentDialog = commentDialog;\n this.sidebar = null;\n }\n\n get _popupWidth() {\n const container = this.#createPopup();\n const { style } = container;\n style.opacity = \"0\";\n style.display = \"block\";\n document.body.append(container);\n const width = container.getBoundingClientRect().width;\n container.remove();\n style.opacity = style.display = \"\";\n return shadow(this, \"_popupWidth\", width);\n }\n\n #createPopup() {\n if (this.#container) {\n return this.#container;\n }\n const container = (this.#container = document.createElement(\"div\"));\n container.className = \"commentPopup\";\n container.id = \"commentPopup\";\n container.tabIndex = -1;\n container.role = \"dialog\";\n container.ariaModal = \"false\";\n container.addEventListener(\"contextmenu\", noContextMenu);\n container.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n this.toggle(this.#editor, true, false);\n this.#previousFocusedElement?.focus();\n stopEvent(e);\n }\n });\n container.addEventListener(\"click\", () => {\n container.focus();\n });\n\n const top = document.createElement(\"div\");\n top.className = \"commentPopupTop\";\n const time = (this.#time = document.createElement(\"time\"));\n time.className = \"commentPopupTime\";\n\n const buttons = (this.#buttonsContainer = document.createElement(\"div\"));\n buttons.className = \"commentPopupButtons\";\n const edit = document.createElement(\"button\");\n edit.classList.add(\"commentPopupEdit\", \"toolbarButton\");\n edit.tabIndex = 0;\n edit.setAttribute(\"data-l10n-id\", \"pdfjs-editor-edit-comment-popup-button\");\n edit.ariaHasPopup = \"dialog\";\n edit.ariaControlsElements = [this.#commentDialog];\n const editLabel = document.createElement(\"span\");\n editLabel.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-edit-comment-popup-button-label\"\n );\n edit.append(editLabel);\n edit.addEventListener(\"click\", () => {\n const editor = this.#editor;\n const height = parseFloat(getComputedStyle(this.#text).height);\n this.toggle(editor, /* isSelected */ true, /* visibility */ false);\n editor.editComment({\n height,\n });\n });\n edit.addEventListener(\"contextmenu\", noContextMenu);\n\n const del = document.createElement(\"button\");\n del.classList.add(\"commentPopupDelete\", \"toolbarButton\");\n del.tabIndex = 0;\n del.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-delete-comment-popup-button\"\n );\n const delLabel = document.createElement(\"span\");\n delLabel.setAttribute(\n \"data-l10n-id\",\n \"pdfjs-editor-delete-comment-popup-button-label\"\n );\n del.append(delLabel);\n del.addEventListener(\"click\", () => {\n this.#eventBus.dispatch(\"reporttelemetry\", {\n source: this,\n details: {\n type: \"comment\",\n data: {\n deleted: true,\n },\n },\n });\n const editor = this.#editor;\n const savedData = editor.comment;\n this.destroy();\n if (savedData?.text) {\n editor._uiManager.deleteComment(editor, savedData);\n } else {\n editor.comment = null;\n }\n editor.focus();\n });\n del.addEventListener(\"contextmenu\", noContextMenu);\n buttons.append(edit, del);\n\n top.append(time, buttons);\n\n const separator = document.createElement(\"hr\");\n\n const text = (this.#text = document.createElement(\"div\"));\n text.className = \"commentPopupText\";\n container.append(top, separator, text);\n\n // Make the dialog draggable.\n let pointerMoveAC;\n const cancelDrag = () => {\n container.classList.remove(\"dragging\");\n pointerMoveAC?.abort();\n pointerMoveAC = null;\n };\n top.addEventListener(\"pointerdown\", e => {\n if (pointerMoveAC) {\n cancelDrag();\n return;\n }\n const { target, clientX, clientY } = e;\n if (buttons.contains(target)) {\n return;\n }\n stopEvent(e);\n const { width: parentWidth, height: parentHeight } =\n this.#editor.parentBoundingClientRect;\n this.#prevDragX = clientX;\n this.#prevDragY = clientY;\n pointerMoveAC = new AbortController();\n const { signal } = pointerMoveAC;\n container.classList.add(\"dragging\");\n window.addEventListener(\n \"pointermove\",\n ev => {\n if (!pointerMoveAC) {\n return; // Not dragging.\n }\n const { clientX: x, clientY: y } = ev;\n this.#setPosition(\n this.#posX + (x - this.#prevDragX) / parentWidth,\n this.#posY + (y - this.#prevDragY) / parentHeight,\n /* correctPosition = */ false\n );\n this.#prevDragX = x;\n this.#prevDragY = y;\n stopEvent(ev);\n },\n { signal }\n );\n window.addEventListener(\"blur\", cancelDrag, { signal });\n window.addEventListener(\n \"pointerup\",\n ev => {\n if (pointerMoveAC) {\n cancelDrag();\n stopEvent(ev);\n }\n },\n { signal }\n );\n });\n\n return container;\n }\n\n updateColor(editor) {\n if (this.#editor !== editor || !this.#visible) {\n return;\n }\n const { color, opacity } = editor.getData();\n this.#container.style.backgroundColor =\n (color && CommentManager._makeCommentColor(color, opacity)) || \"\";\n }\n\n _hide(editor) {\n const container = this.#createPopup();\n\n container.classList.toggle(\"hidden\", true);\n container.classList.toggle(\"selected\", false);\n (editor || this.#editor)?.setCommentButtonStates({\n selected: false,\n hasPopup: false,\n });\n this.#editor = null;\n this.#selected = false;\n this.#visible = false;\n this.#text.replaceChildren();\n this.sidebar.selectComment(null);\n }\n\n toggle(editor, isSelected, visibility = undefined, isEditable = true) {\n if (!editor) {\n this.destroy();\n return;\n }\n\n if (isSelected) {\n visibility ??=\n this.#editor === editor ? !this.#selected || !this.#visible : true;\n } else {\n if (this.#selected) {\n return;\n }\n visibility ??= !this.#visible;\n }\n\n if (!visibility) {\n this._hide(editor);\n return;\n }\n\n this.#visible = true;\n if (this.#editor !== editor) {\n this.#editor?.setCommentButtonStates({\n selected: false,\n hasPopup: false,\n });\n }\n\n const container = this.#createPopup();\n this.#buttonsContainer.classList.toggle(\"hidden\", !isEditable);\n container.classList.toggle(\"hidden\", false);\n container.classList.toggle(\"selected\", isSelected);\n this.#selected = isSelected;\n this.#editor = editor;\n editor.setCommentButtonStates({\n selected: isSelected,\n hasPopup: true,\n });\n\n const {\n contentsObj,\n richText,\n creationDate,\n modificationDate,\n color,\n opacity,\n } = editor.getData();\n container.style.backgroundColor =\n (color && CommentManager._makeCommentColor(color, opacity)) || \"\";\n this.#text.replaceChildren();\n const html =\n richText?.str && (!contentsObj?.str || richText.str === contentsObj.str)\n ? richText.html\n : contentsObj?.str;\n if (html) {\n renderRichText(\n {\n html,\n dir: contentsObj?.dir || \"auto\",\n className: \"richText\",\n },\n this.#text\n );\n }\n this.#time.textContent = this.#dateFormat.format(\n PDFDateString.toDateObject(modificationDate || creationDate)\n );\n this.#setPosition(\n ...editor.commentPopupPosition,\n /* correctPosition = */ editor.hasDefaultPopupPosition()\n );\n editor.elementBeforePopup.after(container);\n container.addEventListener(\n \"focus\",\n ({ relatedTarget }) => {\n this.#previousFocusedElement = relatedTarget;\n },\n { once: true }\n );\n if (isSelected) {\n setTimeout(() => container.focus(), 0);\n }\n }\n\n #setPosition(x, y, correctPosition) {\n if (!correctPosition) {\n this.#editor.commentPopupPosition = [x, y];\n } else {\n const parentRect = this.#editor.parentBoundingClientRect;\n const widthRatio = this._popupWidth / parentRect.width;\n if (\n (this.#isLTR && x + widthRatio > 1) ||\n (!this.#isLTR && x - widthRatio >= 0)\n ) {\n const buttonWidth = this.#editor.commentButtonWidth;\n x -= widthRatio - buttonWidth;\n }\n const margin = 0.01;\n if (this.#isLTR) {\n x = Math.max(x, -parentRect.x / parentRect.width + margin);\n } else {\n x = Math.min(\n x,\n (window.innerWidth - parentRect.x) / parentRect.width -\n widthRatio -\n margin\n );\n }\n }\n this.#posX = x;\n this.#posY = y;\n const { style } = this.#container;\n style.left = `${100 * x}%`;\n style.top = `${100 * y}%`;\n }\n\n destroy() {\n this._hide();\n this.#container?.remove();\n this.#container = this.#text = this.#time = null;\n this.#prevDragX = this.#prevDragY = Infinity;\n this.#posX = this.#posY = 0;\n this.#previousFocusedElement = null;\n }\n}\n\nexport { CommentManager };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isPdfFile } from \"pdfjs-lib\";\n\nclass BaseDownloadManager {\n #openBlobUrls = new WeakMap();\n\n constructor() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n this.constructor === BaseDownloadManager\n ) {\n throw new Error(\"Cannot initialize BaseDownloadManager.\");\n }\n }\n\n _triggerDownload(blobUrl, originalUrl, filename, isAttachment = false) {\n throw new Error(\"Not implemented: _triggerDownload\");\n }\n\n _getOpenDataUrl(blobUrl, filename, dest = null) {\n throw new Error(\"Not implemented: _getOpenDataUrl\");\n }\n\n /**\n * @param {Uint8Array} data\n * @param {string} filename\n * @param {string} [contentType]\n */\n downloadData(data, filename, contentType) {\n const blobUrl = URL.createObjectURL(\n new Blob([data], { type: contentType })\n );\n\n this._triggerDownload(\n blobUrl,\n /* originalUrl = */ blobUrl,\n filename,\n /* isAttachment = */ true\n );\n }\n\n /**\n * @param {Uint8Array} data\n * @param {string} filename\n * @param {string | null} [dest]\n * @returns {boolean} Indicating if the data was opened.\n */\n openOrDownloadData(data, filename, dest = null) {\n const isPdfData = isPdfFile(filename);\n const contentType = isPdfData ? \"application/pdf\" : \"\";\n\n if (isPdfData) {\n const blobUrl = this.#openBlobUrls.getOrInsertComputed(data, () =>\n URL.createObjectURL(new Blob([data], { type: contentType }))\n );\n try {\n const viewerUrl = this._getOpenDataUrl(blobUrl, filename, dest);\n\n window.open(viewerUrl);\n return true;\n } catch (ex) {\n console.error(\"openOrDownloadData:\", ex);\n // Release the `blobUrl`, since opening it failed, and fallback to\n // downloading the PDF file.\n URL.revokeObjectURL(blobUrl);\n this.#openBlobUrls.delete(data);\n }\n }\n\n this.downloadData(data, filename, contentType);\n return false;\n }\n\n /**\n * @param {Uint8Array} data\n * @param {string} url\n * @param {string} filename\n */\n download(data, url, filename) {\n const blobUrl = data\n ? URL.createObjectURL(new Blob([data], { type: \"application/pdf\" }))\n : null;\n\n this._triggerDownload(blobUrl, /* originalUrl = */ url, filename);\n }\n}\n\nexport { BaseDownloadManager };\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseDownloadManager } from \"./base_download_manager.js\";\nimport { createValidAbsoluteUrl } from \"pdfjs-lib\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"CHROME || GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/download_manager\" shall not be used ' +\n \"outside CHROME and GENERIC builds.\"\n );\n}\n\nclass DownloadManager extends BaseDownloadManager {\n _triggerDownload(blobUrl, originalUrl, filename, isAttachment = false) {\n if (!blobUrl && !isAttachment) {\n // Fallback to downloading non-attachments by their URL.\n if (!createValidAbsoluteUrl(originalUrl, \"http://example.com\")) {\n throw new Error(`_triggerDownload - not a valid URL: ${originalUrl}`);\n }\n blobUrl = originalUrl + \"#pdfjs.action=download\";\n }\n\n const a = document.createElement(\"a\");\n a.href = blobUrl;\n a.target = \"_parent\";\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if (\"download\" in a) {\n a.download = filename;\n }\n // must be in the document for recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).append(a);\n a.click();\n a.remove();\n }\n\n _getOpenDataUrl(blobUrl, filename, dest = null) {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"COMPONENTS\")) {\n throw new Error(\"Opening data is not supported in `COMPONENTS` builds.\");\n }\n // The current URL is the viewer, let's use it and append the file.\n let url = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n if (dest) {\n url += `#${escape(dest)}`;\n }\n return url;\n }\n}\n\nexport { DownloadManager };\n","/* Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { noContextMenu } from \"pdfjs-lib\";\n\nclass EditorUndoBar {\n #closeButton = null;\n\n #container;\n\n #eventBus = null;\n\n #focusTimeout = null;\n\n #initController = null;\n\n isOpen = false;\n\n #message;\n\n #showController = null;\n\n #undoButton;\n\n static #l10nMessages = Object.freeze({\n highlight: \"pdfjs-editor-undo-bar-message-highlight\",\n freetext: \"pdfjs-editor-undo-bar-message-freetext\",\n stamp: \"pdfjs-editor-undo-bar-message-stamp\",\n ink: \"pdfjs-editor-undo-bar-message-ink\",\n signature: \"pdfjs-editor-undo-bar-message-signature\",\n comment: \"pdfjs-editor-undo-bar-message-comment\",\n _multiple: \"pdfjs-editor-undo-bar-message-multiple\",\n });\n\n constructor({ container, message, undoButton, closeButton }, eventBus) {\n this.#container = container;\n this.#message = message;\n this.#undoButton = undoButton;\n this.#closeButton = closeButton;\n this.#eventBus = eventBus;\n }\n\n destroy() {\n this.#initController?.abort();\n this.#initController = null;\n\n this.hide();\n }\n\n show(undoAction, messageData) {\n if (!this.#initController) {\n this.#initController = new AbortController();\n const opts = { signal: this.#initController.signal };\n const boundHide = this.hide.bind(this);\n\n this.#container.addEventListener(\"contextmenu\", noContextMenu, opts);\n this.#closeButton.addEventListener(\"click\", boundHide, opts);\n this.#eventBus._on(\"beforeprint\", boundHide, opts);\n this.#eventBus._on(\"download\", boundHide, opts);\n }\n\n this.hide();\n\n if (typeof messageData === \"string\") {\n this.#message.setAttribute(\n \"data-l10n-id\",\n EditorUndoBar.#l10nMessages[messageData]\n );\n } else {\n this.#message.setAttribute(\n \"data-l10n-id\",\n EditorUndoBar.#l10nMessages._multiple\n );\n this.#message.setAttribute(\n \"data-l10n-args\",\n JSON.stringify({ count: messageData })\n );\n }\n this.isOpen = true;\n this.#container.hidden = false;\n\n this.#showController = new AbortController();\n\n this.#undoButton.addEventListener(\n \"click\",\n () => {\n undoAction();\n this.hide();\n },\n { signal: this.#showController.signal }\n );\n\n // Without the setTimeout, VoiceOver will read out the document title\n // instead of the popup label.\n this.#focusTimeout = setTimeout(() => {\n this.#container.focus();\n this.#focusTimeout = null;\n }, 100);\n }\n\n hide() {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n this.#container.hidden = true;\n\n this.#showController?.abort();\n this.#showController = null;\n\n if (this.#focusTimeout) {\n clearTimeout(this.#focusTimeout);\n this.#focusTimeout = null;\n }\n }\n}\n\nexport { EditorUndoBar };\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass OverlayManager {\n #overlays = new WeakMap();\n\n #active = null;\n\n get active() {\n return this.#active;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @param {boolean} [canForceClose] - Indicates if opening the overlay closes\n * an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n */\n async register(dialog, canForceClose = false) {\n if (typeof dialog !== \"object\") {\n throw new Error(\"Not enough parameters.\");\n } else if (this.#overlays.has(dialog)) {\n throw new Error(\"The overlay is already registered.\");\n }\n this.#overlays.set(dialog, { canForceClose });\n\n dialog.addEventListener(\"cancel\", ({ target }) => {\n if (this.#active === target) {\n this.#active = null;\n }\n });\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n async open(dialog) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (this.#active) {\n if (this.#active === dialog) {\n throw new Error(\"The overlay is already active.\");\n } else if (this.#overlays.get(dialog).canForceClose) {\n await this.close();\n } else {\n throw new Error(\"Another overlay is currently active.\");\n }\n }\n this.#active = dialog;\n dialog.showModal();\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async close(dialog = this.#active) {\n if (!this.#overlays.has(dialog)) {\n throw new Error(\"The overlay does not exist.\");\n } else if (!this.#active) {\n throw new Error(\"The overlay is currently not active.\");\n } else if (this.#active !== dialog) {\n throw new Error(\"Another overlay is currently active.\");\n }\n dialog.close();\n this.#active = null;\n }\n\n /**\n * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n async closeIfActive(dialog) {\n if (this.#active === dialog) {\n await this.close(dialog);\n }\n }\n}\n\nexport { OverlayManager };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @typedef {import(\"./overlay_manager.js\").OverlayManager} OverlayManager */\n\nimport { PasswordResponses } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} PasswordPromptOptions\n * @property {HTMLDialogElement} dialog - The overlay's DOM element.\n * @property {HTMLParagraphElement} label - Label containing instructions for\n * entering the password.\n * @property {HTMLInputElement} input - Input field for entering the password.\n * @property {HTMLButtonElement} submitButton - Button for submitting the\n * password.\n * @property {HTMLButtonElement} cancelButton - Button for cancelling password\n * entry.\n */\n\nclass PasswordPrompt {\n #activeCapability = null;\n\n #updateCallback = null;\n\n #reason = null;\n\n /**\n * @param {PasswordPromptOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {boolean} [isViewerEmbedded] - If the viewer is embedded, in e.g.\n * an