@superdoc-dev/cli 0.5.0-next.43 → 0.5.0-next.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1477 -1144
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -1217,9 +1217,168 @@ function formatInlineAliasExpectedResult(key) {
|
|
|
1217
1217
|
function projectFromDefinitions(fn) {
|
|
1218
1218
|
return Object.fromEntries(OPERATION_IDS.map((id) => [id, fn(id, OPERATION_DEFINITIONS[id])]));
|
|
1219
1219
|
}
|
|
1220
|
-
var NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_CAPABLE, T_PLAN_ENGINE, T_NOT_FOUND_COMMAND, T_IMAGE_COMMAND, T_CC_READ, T_CC_MUTATION, T_CC_TYPED, T_CC_TYPED_READ, T_CC_RAW, T_QUERY_MATCH, T_SECTION_CREATE, T_SECTION_READ, T_PARAGRAPH_MUTATION, T_SECTION_MUTATION, T_SECTION_SETTINGS_MUTATION, T_HEADER_FOOTER_MUTATION, T_STORY, T_REF_READ_LIST, T_REF_MUTATION, T_REF_MUTATION_REMOVE, T_REF_INSERT, T_PROTECTION_READ, T_PROTECTION_MUTATION, T_PERM_RANGE_READ, T_PERM_RANGE_MUTATION, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
|
|
1220
|
+
var INTENT_GROUP_META, NONE_FAILURES, NONE_THROWS, T_NOT_FOUND, T_NOT_FOUND_CAPABLE, T_PLAN_ENGINE, T_NOT_FOUND_COMMAND, T_IMAGE_COMMAND, T_CC_READ, T_CC_MUTATION, T_CC_TYPED, T_CC_TYPED_READ, T_CC_RAW, T_QUERY_MATCH, T_SECTION_CREATE, T_SECTION_READ, T_PARAGRAPH_MUTATION, T_SECTION_MUTATION, T_SECTION_SETTINGS_MUTATION, T_HEADER_FOOTER_MUTATION, T_STORY, T_REF_READ_LIST, T_REF_MUTATION, T_REF_MUTATION_REMOVE, T_REF_INSERT, T_PROTECTION_READ, T_PROTECTION_MUTATION, T_PERM_RANGE_READ, T_PERM_RANGE_MUTATION, FORMAT_INLINE_ALIAS_OPERATION_DEFINITIONS, OPERATION_DEFINITIONS, OPERATION_IDS, SINGLETON_OPERATION_IDS, NAMESPACED_OPERATION_IDS;
|
|
1221
1221
|
var init_operation_definitions = __esm(() => {
|
|
1222
1222
|
init_inline_run_patch();
|
|
1223
|
+
INTENT_GROUP_META = {
|
|
1224
|
+
search: {
|
|
1225
|
+
toolName: "superdoc_search",
|
|
1226
|
+
description: "Refs expire after any mutation; always re-search before the next edit. " + "Find text patterns or nodes in the document and get ref handles for targeting edits and formatting. " + "Use this to locate content before calling superdoc_edit or superdoc_format. " + "Text search returns handle.ref covering only the matched substring. Node search finds blocks by type (paragraph, heading, table, listItem, etc.). " + 'The "require" parameter controls match cardinality: "first" returns one match, "all" returns every match, "exactlyOne" fails if not exactly one match. ' + 'Supports scoping via "within" to search inside a single block. ' + "Do NOT use regex or markdown formatting markers (#, **, etc.) in search patterns; patterns are plain text only. " + "Do NOT use this tool when you already have a ref from superdoc_get_content blocks or superdoc_create; use that ref directly.",
|
|
1227
|
+
inputExamples: [
|
|
1228
|
+
{ select: { type: "text", pattern: "Introduction" }, require: "first" },
|
|
1229
|
+
{ select: { type: "text", pattern: "total amount" }, require: "all" },
|
|
1230
|
+
{ select: { type: "node", nodeType: "heading" }, require: "all" },
|
|
1231
|
+
{
|
|
1232
|
+
select: { type: "text", pattern: "contract" },
|
|
1233
|
+
within: { kind: "block", nodeType: "paragraph", nodeId: "abc123" },
|
|
1234
|
+
require: "first"
|
|
1235
|
+
}
|
|
1236
|
+
]
|
|
1237
|
+
},
|
|
1238
|
+
get_content: {
|
|
1239
|
+
toolName: "superdoc_get_content",
|
|
1240
|
+
description: "Read document content in various formats. Call this first in any workflow to understand document structure before making edits. " + 'Action "blocks" returns structured block data with nodeId, nodeType, textPreview, formatting properties (fontFamily, fontSize, color, bold, underline, alignment), and ref handles for immediate use with superdoc_edit or superdoc_format. ' + 'Action "text" and "markdown" return the full document as plain text or Markdown. Action "html" returns HTML. ' + 'Action "info" returns document metadata: word count, paragraph count, page count, outline, available styles, and capability flags. ' + 'The "blocks" action supports pagination via "offset" and "limit", and filtering via "nodeTypes". Other actions ignore these parameters. ' + "This tool never modifies the document. " + "Do NOT call superdoc_edit or superdoc_format without first reading blocks to get valid refs and formatting reference values.",
|
|
1241
|
+
inputExamples: [
|
|
1242
|
+
{ action: "blocks" },
|
|
1243
|
+
{ action: "blocks", offset: 0, limit: 20, nodeTypes: ["heading", "paragraph"] },
|
|
1244
|
+
{ action: "text" },
|
|
1245
|
+
{ action: "info" }
|
|
1246
|
+
]
|
|
1247
|
+
},
|
|
1248
|
+
edit: {
|
|
1249
|
+
toolName: "superdoc_edit",
|
|
1250
|
+
description: "Refs expire after any mutation; always re-search before the next edit. " + "Modify document text: insert new content, replace existing text, delete a range, or undo/redo. " + "Use this for single text modifications. For 2+ edits that must succeed or fail atomically, use superdoc_mutations instead. " + 'For replace and delete, pass a "ref" from superdoc_search or superdoc_get_content blocks. A search ref covers only the matched substring; a block ref covers the entire block text, so use block refs when rewriting or shortening whole paragraphs. ' + 'Insert supports plain text (default), markdown, or html via the "type" parameter. Use "placement" (before, after, insideStart, insideEnd) to control position relative to the target. ' + 'Supports "dryRun" to preview changes and "changeMode: tracked" to record edits as tracked changes. ' + 'Do NOT build "target" objects manually when a ref is available; prefer "ref" for simpler, more reliable targeting.',
|
|
1251
|
+
inputExamples: [
|
|
1252
|
+
{ action: "replace", ref: "<handle.ref>", text: "new text here" },
|
|
1253
|
+
{ action: "insert", value: "Appended paragraph.", placement: "insideEnd" },
|
|
1254
|
+
{ action: "insert", ref: "<block.ref>", value: "Inserted before.", placement: "before" },
|
|
1255
|
+
{ action: "delete", ref: "<handle.ref>" },
|
|
1256
|
+
{ action: "undo" }
|
|
1257
|
+
]
|
|
1258
|
+
},
|
|
1259
|
+
create: {
|
|
1260
|
+
toolName: "superdoc_create",
|
|
1261
|
+
description: "You MUST call superdoc_format after this tool to match document styling. " + "Create a single paragraph, heading, or table in the document. Returns a nodeId for chaining subsequent creates and for use as a block target in superdoc_format. " + 'When the user asks for a "heading", use action "heading" with a level (default 1). Use action "paragraph" only when the user asks for regular body text. ' + 'Before creating, call superdoc_get_content blocks to read formatting from regular body text paragraphs (non-empty, non-title blocks with alignment "justify" or "left"). ' + 'After creating, re-fetch blocks with superdoc_get_content to get a fresh ref for the new block, then apply TWO format calls: (1) superdoc_format action "inline" for character styling, AND (2) superdoc_format action "set_alignment" with the block target for paragraph alignment. Both calls are REQUIRED. ' + 'For body paragraphs: inline {bold:false, underline:false, fontFamily, fontSize, color from body blocks}, alignment "justify". Ignore underline:true from blocks data for body text; it is a style artifact. For headings: inline {bold:true, underline:true, fontSize scaled up, fontFamily, color}, alignment "center". ' + 'Position with "at": {kind:"documentEnd"} (default), {kind:"documentStart"}, or {kind:"after"/"before", target:{kind:"block", nodeType, nodeId}} for relative placement. ' + 'When creating multiple items in sequence, use the previous response nodeId as the next "at" target to maintain correct ordering. ' + 'Do NOT use newlines in "text" to create multiple paragraphs; call this tool separately for each one.',
|
|
1262
|
+
inputExamples: [
|
|
1263
|
+
{ action: "paragraph", text: "New paragraph content.", at: { kind: "documentEnd" } },
|
|
1264
|
+
{
|
|
1265
|
+
action: "heading",
|
|
1266
|
+
text: "Section Title",
|
|
1267
|
+
level: 2,
|
|
1268
|
+
at: { kind: "after", target: { kind: "block", nodeType: "paragraph", nodeId: "<nodeId>" } }
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
action: "paragraph",
|
|
1272
|
+
text: "Chained item.",
|
|
1273
|
+
at: { kind: "after", target: { kind: "block", nodeType: "paragraph", nodeId: "<previousNodeId>" } }
|
|
1274
|
+
},
|
|
1275
|
+
{ action: "table", rows: 3, columns: 4, at: { kind: "documentEnd" } }
|
|
1276
|
+
]
|
|
1277
|
+
},
|
|
1278
|
+
format: {
|
|
1279
|
+
toolName: "superdoc_format",
|
|
1280
|
+
description: "Change text and paragraph formatting. Use this after superdoc_create to style new content, or with a search ref to restyle existing text. " + 'Action "inline" applies character formatting (bold, italic, underline, color, fontSize, fontFamily, highlight, strike, vertAlign) to a text range via "ref". ' + 'Action "set_style" applies a named paragraph style by styleId (get available styles from superdoc_get_content info). ' + 'Actions "set_alignment", "set_indentation", "set_spacing", "set_direction", and "set_flow_options" change paragraph-level properties and require a block target: {kind:"block", nodeType:"paragraph", nodeId:"<nodeId>"}, NOT a ref. ' + 'Use "set_flow_options" with pageBreakBefore:true to start a paragraph on a new page. ' + 'Supports "dryRun" and "changeMode: tracked" for inline formatting. Paragraph-level actions do NOT support tracked changes. ' + "Do NOT use a search ref for paragraph-level actions; they require a block target with nodeId. " + 'Do NOT use {kind:"block", start:{kind:"nodeEdge",...}} or selection-like structures for paragraph actions. ONLY {kind:"block", nodeType, nodeId} is accepted. ' + "Do NOT issue multiple superdoc_format calls in parallel; each call invalidates refs for subsequent calls. Format one block at a time. " + "Do NOT hardcode formatting values; always read them from superdoc_get_content blocks and replicate.",
|
|
1281
|
+
inputExamples: [
|
|
1282
|
+
{ action: "inline", ref: "<handle.ref>", inline: { bold: true } },
|
|
1283
|
+
{
|
|
1284
|
+
action: "inline",
|
|
1285
|
+
ref: "<create.ref>",
|
|
1286
|
+
inline: { fontFamily: "Calibri", fontSize: 11, color: "#000000", bold: false }
|
|
1287
|
+
},
|
|
1288
|
+
{
|
|
1289
|
+
action: "set_alignment",
|
|
1290
|
+
target: { kind: "block", nodeType: "paragraph", nodeId: "<nodeId>" },
|
|
1291
|
+
alignment: "center"
|
|
1292
|
+
},
|
|
1293
|
+
{
|
|
1294
|
+
action: "set_flow_options",
|
|
1295
|
+
target: { kind: "block", nodeType: "paragraph", nodeId: "<nodeId>" },
|
|
1296
|
+
pageBreakBefore: true
|
|
1297
|
+
},
|
|
1298
|
+
{
|
|
1299
|
+
action: "set_spacing",
|
|
1300
|
+
target: { kind: "block", nodeType: "paragraph", nodeId: "<nodeId>" },
|
|
1301
|
+
lineSpacing: { rule: "auto", value: 1.5 }
|
|
1302
|
+
}
|
|
1303
|
+
]
|
|
1304
|
+
},
|
|
1305
|
+
table: { toolName: "superdoc_table", description: "Table structure and cell operations" },
|
|
1306
|
+
list: {
|
|
1307
|
+
toolName: "superdoc_list",
|
|
1308
|
+
description: "Create and manipulate bullet and numbered lists. " + 'To create a list: first create all paragraphs at the SAME location using superdoc_create (chain each using the previous nodeId as the "at" target). ' + 'Then call action "create" with mode:"fromParagraphs", a preset ("disc" for bullet, "decimal" for numbered), and a range target: {from:{kind:"block", nodeType:"paragraph", nodeId:"<first>"}, to:{kind:"block", nodeType:"paragraph", nodeId:"<last>"}}. ' + "The range converts ALL paragraphs between from and to into list items. Make sure no other content exists between them. " + 'Action "set_type" converts between bullet and ordered (target any item in the list, kind:"ordered" or "bullet"). ' + 'Action "insert" adds a new item before/after a target list item. ' + 'Actions "indent" and "outdent" change nesting level; "set_level" jumps to a specific level (0-8). ' + 'Action "detach" converts a list item back to a plain paragraph. ' + "Do NOT target paragraphs with indent/outdent/set_type; these actions require a listItem target.",
|
|
1309
|
+
inputExamples: [
|
|
1310
|
+
{
|
|
1311
|
+
action: "create",
|
|
1312
|
+
mode: "fromParagraphs",
|
|
1313
|
+
preset: "disc",
|
|
1314
|
+
target: {
|
|
1315
|
+
from: { kind: "block", nodeType: "paragraph", nodeId: "<firstId>" },
|
|
1316
|
+
to: { kind: "block", nodeType: "paragraph", nodeId: "<lastId>" }
|
|
1317
|
+
}
|
|
1318
|
+
},
|
|
1319
|
+
{ action: "set_type", target: { kind: "block", nodeType: "listItem", nodeId: "<itemId>" }, kind: "ordered" },
|
|
1320
|
+
{
|
|
1321
|
+
action: "insert",
|
|
1322
|
+
target: { kind: "block", nodeType: "listItem", nodeId: "<itemId>" },
|
|
1323
|
+
position: "after",
|
|
1324
|
+
text: "New list item"
|
|
1325
|
+
},
|
|
1326
|
+
{ action: "indent", target: { kind: "block", nodeType: "listItem", nodeId: "<itemId>" } }
|
|
1327
|
+
]
|
|
1328
|
+
},
|
|
1329
|
+
comment: {
|
|
1330
|
+
toolName: "superdoc_comment",
|
|
1331
|
+
description: "Manage document comment threads: create, read, update, and delete. " + 'To create a comment, first use superdoc_search to find the target text, then pass action "create" with the comment text and a target: {kind:"text", blockId:"<blockId>", range:{start:<N>, end:<N>}} using the blockId and highlightRange from the search result. ' + 'For threaded replies, pass "parentId" with the parent comment ID. ' + 'Action "list" returns all comments with optional pagination (limit, offset) and filtering (includeResolved:true to include resolved). ' + 'Action "get" retrieves a single comment by ID. Action "update" changes status to "resolved" or marks as internal. Action "delete" removes a comment or reply by ID. ' + 'Do NOT pass "ref", "id", or "parentId" when creating a new top-level comment; only "action", "text", and "target" are needed.',
|
|
1332
|
+
inputExamples: [
|
|
1333
|
+
{
|
|
1334
|
+
action: "create",
|
|
1335
|
+
text: "Please review this section.",
|
|
1336
|
+
target: { kind: "text", blockId: "<blockId>", range: { start: 5, end: 25 } }
|
|
1337
|
+
},
|
|
1338
|
+
{ action: "list", limit: 20, offset: 0 },
|
|
1339
|
+
{ action: "update", id: "<commentId>", status: "resolved" },
|
|
1340
|
+
{ action: "delete", id: "<commentId>" }
|
|
1341
|
+
]
|
|
1342
|
+
},
|
|
1343
|
+
track_changes: {
|
|
1344
|
+
toolName: "superdoc_track_changes",
|
|
1345
|
+
description: "Review and resolve tracked changes (insertions, deletions, format changes) in the document. " + 'Action "list" returns all tracked changes with optional filtering by type (insert, delete, format) and pagination (limit, offset). Each change includes an ID, type, author, timestamp, and content preview. ' + 'Action "decide" accepts or rejects changes. Pass decision:"accept" to apply the change permanently, or decision:"reject" to discard it. ' + 'Target a single change with {id:"<changeId>"} or all changes at once with {scope:"all"}. ' + "Do NOT use this tool unless the document has tracked changes. Use superdoc_get_content info to check the tracked change count first.",
|
|
1346
|
+
inputExamples: [
|
|
1347
|
+
{ action: "list" },
|
|
1348
|
+
{ action: "list", type: "insert", limit: 10 },
|
|
1349
|
+
{ action: "decide", decision: "accept", target: { id: "<changeId>" } },
|
|
1350
|
+
{ action: "decide", decision: "reject", target: { scope: "all" } }
|
|
1351
|
+
]
|
|
1352
|
+
},
|
|
1353
|
+
link: { toolName: "superdoc_link", description: "Manage hyperlinks" },
|
|
1354
|
+
image: { toolName: "superdoc_image", description: "Image placement and properties" },
|
|
1355
|
+
section: { toolName: "superdoc_section", description: "Page layout, margins, columns" },
|
|
1356
|
+
mutations: {
|
|
1357
|
+
toolName: "superdoc_mutations",
|
|
1358
|
+
description: "All steps succeed or all fail; no partial application. " + "Execute multiple text edits atomically in a single batch. Use this INSTEAD OF multiple sequential superdoc_edit calls when you need 2+ text changes that should succeed or fail together. " + 'Each step has an id (e.g. "s1"), an op (text.rewrite, text.insert, text.delete, format.apply, assert), a "where" clause for targeting ({by:"select", select:{...}, require:"first"|"exactlyOne"|"all"} or {by:"ref", ref:"..."}), and "args" with operation-specific parameters. ' + 'Action "preview" dry-runs the plan without modifying the document. Action "apply" executes it. ' + "CRITICAL: split mutations by phase. Text mutations (text.rewrite, text.insert, text.delete) go in one call. Formatting (format.apply) goes in a separate call with fresh refs from a new superdoc_search. " + "Do NOT create two steps that target overlapping text in the same block; combine them into a single text.rewrite step. Overlapping steps fail with PLAN_CONFLICT_OVERLAP. " + "Do NOT use this for single edits; use superdoc_edit instead. " + "Do NOT mix text mutations and formatting in the same call.",
|
|
1359
|
+
inputExamples: [
|
|
1360
|
+
{
|
|
1361
|
+
action: "apply",
|
|
1362
|
+
atomic: true,
|
|
1363
|
+
changeMode: "direct",
|
|
1364
|
+
steps: [
|
|
1365
|
+
{
|
|
1366
|
+
id: "s1",
|
|
1367
|
+
op: "text.rewrite",
|
|
1368
|
+
where: { by: "select", select: { type: "text", pattern: "old term" }, require: "all" },
|
|
1369
|
+
args: { replacement: { text: "new term" } }
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
id: "s2",
|
|
1373
|
+
op: "text.delete",
|
|
1374
|
+
where: { by: "select", select: { type: "text", pattern: " (deprecated)" }, require: "all" },
|
|
1375
|
+
args: {}
|
|
1376
|
+
}
|
|
1377
|
+
]
|
|
1378
|
+
}
|
|
1379
|
+
]
|
|
1380
|
+
}
|
|
1381
|
+
};
|
|
1223
1382
|
NONE_FAILURES = [];
|
|
1224
1383
|
NONE_THROWS = [];
|
|
1225
1384
|
T_NOT_FOUND = ["TARGET_NOT_FOUND"];
|
|
@@ -2151,7 +2310,9 @@ var init_operation_definitions = __esm(() => {
|
|
|
2151
2310
|
throws: T_PARAGRAPH_MUTATION
|
|
2152
2311
|
}),
|
|
2153
2312
|
referenceDocPath: "format/paragraph/set-flow-options.mdx",
|
|
2154
|
-
referenceGroup: "format.paragraph"
|
|
2313
|
+
referenceGroup: "format.paragraph",
|
|
2314
|
+
intentGroup: "format",
|
|
2315
|
+
intentAction: "set_flow_options"
|
|
2155
2316
|
},
|
|
2156
2317
|
"format.paragraph.setTabStop": {
|
|
2157
2318
|
memberPath: "format.paragraph.setTabStop",
|
|
@@ -3055,7 +3216,9 @@ var init_operation_definitions = __esm(() => {
|
|
|
3055
3216
|
throws: [...T_NOT_FOUND_COMMAND, "INVALID_TARGET", "AMBIGUOUS_TARGET"]
|
|
3056
3217
|
}),
|
|
3057
3218
|
referenceDocPath: "create/table.mdx",
|
|
3058
|
-
referenceGroup: "create"
|
|
3219
|
+
referenceGroup: "create",
|
|
3220
|
+
intentGroup: "create",
|
|
3221
|
+
intentAction: "table"
|
|
3059
3222
|
},
|
|
3060
3223
|
"tables.convertFromText": {
|
|
3061
3224
|
memberPath: "tables.convertFromText",
|
|
@@ -7469,7 +7632,7 @@ function optionalTargetLocatorWithPayload(payloadProperties, payloadRequired = [
|
|
|
7469
7632
|
objectSchema({
|
|
7470
7633
|
ref: {
|
|
7471
7634
|
type: "string",
|
|
7472
|
-
description: "Handle ref
|
|
7635
|
+
description: "Handle ref from superdoc_search result (pass handle.ref value directly). Preferred over building a target object."
|
|
7473
7636
|
},
|
|
7474
7637
|
...payloadProperties
|
|
7475
7638
|
}, ["ref", ...payloadRequired]),
|
|
@@ -8386,13 +8549,21 @@ var init_schemas = __esm(() => {
|
|
|
8386
8549
|
success: { const: true },
|
|
8387
8550
|
paragraph: paragraphAddressSchema,
|
|
8388
8551
|
insertionPoint: textAddressSchema,
|
|
8389
|
-
trackedChangeRefs: arraySchema(trackChangeRefSchema)
|
|
8552
|
+
trackedChangeRefs: arraySchema(trackChangeRefSchema),
|
|
8553
|
+
ref: {
|
|
8554
|
+
type: "string",
|
|
8555
|
+
description: "Ref handle for the created block. Pass directly to superdoc_format or superdoc_edit ref param without searching."
|
|
8556
|
+
}
|
|
8390
8557
|
}, ["success", "paragraph", "insertionPoint"]);
|
|
8391
8558
|
createHeadingSuccessSchema = objectSchema({
|
|
8392
8559
|
success: { const: true },
|
|
8393
8560
|
heading: headingAddressSchema,
|
|
8394
8561
|
insertionPoint: textAddressSchema,
|
|
8395
|
-
trackedChangeRefs: arraySchema(trackChangeRefSchema)
|
|
8562
|
+
trackedChangeRefs: arraySchema(trackChangeRefSchema),
|
|
8563
|
+
ref: {
|
|
8564
|
+
type: "string",
|
|
8565
|
+
description: "Ref handle for the created block. Pass directly to superdoc_format or superdoc_edit ref param without searching."
|
|
8566
|
+
}
|
|
8396
8567
|
}, ["success", "heading", "insertionPoint"]);
|
|
8397
8568
|
headingLevelSchema = { type: "integer", minimum: 1, maximum: 6 };
|
|
8398
8569
|
listsInsertSuccessSchema = objectSchema({
|
|
@@ -9492,8 +9663,13 @@ var init_schemas = __esm(() => {
|
|
|
9492
9663
|
fontFamily: { type: "string", description: "Font family from first text run." },
|
|
9493
9664
|
fontSize: { type: "number", description: "Font size from first text run." },
|
|
9494
9665
|
bold: { type: "boolean", description: "True if text is bold." },
|
|
9666
|
+
color: { type: "string", description: "Text color when explicitly set (e.g. '#000000')." },
|
|
9495
9667
|
alignment: { type: "string", description: "Paragraph alignment." },
|
|
9496
|
-
headingLevel: { type: "number", description: "Heading level (1-6)." }
|
|
9668
|
+
headingLevel: { type: "number", description: "Heading level (1-6)." },
|
|
9669
|
+
ref: {
|
|
9670
|
+
type: "string",
|
|
9671
|
+
description: "Ref handle for this block. Pass directly to superdoc_format or superdoc_edit ref param. Only present for non-empty blocks."
|
|
9672
|
+
}
|
|
9497
9673
|
}, ["ordinal", "nodeId", "nodeType"])
|
|
9498
9674
|
},
|
|
9499
9675
|
revision: { type: "string" }
|
|
@@ -15031,6 +15207,23 @@ var init_create = __esm(() => {
|
|
|
15031
15207
|
});
|
|
15032
15208
|
|
|
15033
15209
|
// ../../packages/document-api/src/blocks/blocks.ts
|
|
15210
|
+
function normalizeBlocksListInput(input) {
|
|
15211
|
+
if (!input)
|
|
15212
|
+
return input;
|
|
15213
|
+
if (input.limit != null && input.limit === 0) {
|
|
15214
|
+
const { limit: _, ...rest } = input;
|
|
15215
|
+
input = Object.keys(rest).length > 0 ? rest : undefined;
|
|
15216
|
+
if (!input)
|
|
15217
|
+
return input;
|
|
15218
|
+
}
|
|
15219
|
+
if (Array.isArray(input.nodeTypes) && input.nodeTypes.length === 0) {
|
|
15220
|
+
const { nodeTypes: _, ...rest } = input;
|
|
15221
|
+
input = Object.keys(rest).length > 0 ? rest : undefined;
|
|
15222
|
+
if (!input)
|
|
15223
|
+
return input;
|
|
15224
|
+
}
|
|
15225
|
+
return input;
|
|
15226
|
+
}
|
|
15034
15227
|
function validateBlocksListInput(input) {
|
|
15035
15228
|
if (!input)
|
|
15036
15229
|
return;
|
|
@@ -15125,8 +15318,9 @@ function validateBlocksDeleteRangeInput(input) {
|
|
|
15125
15318
|
validateBlockNodeAddress(input.end, "end");
|
|
15126
15319
|
}
|
|
15127
15320
|
function executeBlocksList(adapter, input) {
|
|
15128
|
-
|
|
15129
|
-
|
|
15321
|
+
const normalized = normalizeBlocksListInput(input);
|
|
15322
|
+
validateBlocksListInput(normalized);
|
|
15323
|
+
return adapter.list(normalized);
|
|
15130
15324
|
}
|
|
15131
15325
|
function executeBlocksDelete(adapter, input, options) {
|
|
15132
15326
|
validateBlocksDeleteInput(input);
|
|
@@ -65039,7 +65233,7 @@ var init_remark_gfm_BUJjZJLy_es = __esm(() => {
|
|
|
65039
65233
|
emptyOptions2 = {};
|
|
65040
65234
|
});
|
|
65041
65235
|
|
|
65042
|
-
// ../../packages/superdoc/dist/chunks/SuperConverter-
|
|
65236
|
+
// ../../packages/superdoc/dist/chunks/SuperConverter-DerEPM5g.es.js
|
|
65043
65237
|
function getExtensionConfigField(extension$1, field, context = { name: "" }) {
|
|
65044
65238
|
const fieldValue = extension$1.config[field];
|
|
65045
65239
|
if (typeof fieldValue === "function")
|
|
@@ -66850,7 +67044,7 @@ function optionalTargetLocatorWithPayload2(payloadProperties, payloadRequired =
|
|
|
66850
67044
|
objectSchema2({
|
|
66851
67045
|
ref: {
|
|
66852
67046
|
type: "string",
|
|
66853
|
-
description: "Handle ref
|
|
67047
|
+
description: "Handle ref from superdoc_search result (pass handle.ref value directly). Preferred over building a target object."
|
|
66854
67048
|
},
|
|
66855
67049
|
...payloadProperties
|
|
66856
67050
|
}, ["ref", ...payloadRequired]),
|
|
@@ -69277,6 +69471,23 @@ function executeCreateTableOfContents2(adapter, input, options) {
|
|
|
69277
69471
|
};
|
|
69278
69472
|
return adapter.tableOfContents(normalized, normalizeMutationOptions2(options));
|
|
69279
69473
|
}
|
|
69474
|
+
function normalizeBlocksListInput2(input) {
|
|
69475
|
+
if (!input)
|
|
69476
|
+
return input;
|
|
69477
|
+
if (input.limit != null && input.limit === 0) {
|
|
69478
|
+
const { limit: _, ...rest } = input;
|
|
69479
|
+
input = Object.keys(rest).length > 0 ? rest : undefined;
|
|
69480
|
+
if (!input)
|
|
69481
|
+
return input;
|
|
69482
|
+
}
|
|
69483
|
+
if (Array.isArray(input.nodeTypes) && input.nodeTypes.length === 0) {
|
|
69484
|
+
const { nodeTypes: _, ...rest } = input;
|
|
69485
|
+
input = Object.keys(rest).length > 0 ? rest : undefined;
|
|
69486
|
+
if (!input)
|
|
69487
|
+
return input;
|
|
69488
|
+
}
|
|
69489
|
+
return input;
|
|
69490
|
+
}
|
|
69280
69491
|
function validateBlocksListInput2(input) {
|
|
69281
69492
|
if (!input)
|
|
69282
69493
|
return;
|
|
@@ -69334,8 +69545,9 @@ function validateBlocksDeleteRangeInput2(input) {
|
|
|
69334
69545
|
validateBlockNodeAddress2(input.end, "end");
|
|
69335
69546
|
}
|
|
69336
69547
|
function executeBlocksList2(adapter, input) {
|
|
69337
|
-
|
|
69338
|
-
|
|
69548
|
+
const normalized = normalizeBlocksListInput2(input);
|
|
69549
|
+
validateBlocksListInput2(normalized);
|
|
69550
|
+
return adapter.list(normalized);
|
|
69339
69551
|
}
|
|
69340
69552
|
function executeBlocksDelete2(adapter, input, options) {
|
|
69341
69553
|
validateBlocksDeleteInput2(input);
|
|
@@ -85929,18 +86141,21 @@ function sanitizeHtml(html2, forbiddenTags = [
|
|
|
85929
86141
|
}
|
|
85930
86142
|
const container = resolvedDocument.createElement("div");
|
|
85931
86143
|
container.innerHTML = html2;
|
|
86144
|
+
const domNode = resolvedDocument.defaultView?.Node ?? globalThis.Node;
|
|
86145
|
+
const COMMENT_NODE = domNode?.COMMENT_NODE ?? 8;
|
|
86146
|
+
const ELEMENT_NODE = domNode?.ELEMENT_NODE ?? 1;
|
|
85932
86147
|
const stripWordListConditionalPrefixes = (root2) => {
|
|
85933
86148
|
const stripFromNode = (node3) => {
|
|
85934
86149
|
if (!node3?.childNodes)
|
|
85935
86150
|
return;
|
|
85936
86151
|
for (let i$1 = 0;i$1 < node3.childNodes.length; i$1 += 1) {
|
|
85937
86152
|
const current = node3.childNodes[i$1];
|
|
85938
|
-
if (current?.nodeType ===
|
|
86153
|
+
if (current?.nodeType === COMMENT_NODE && current.nodeValue?.includes("[if !supportLists]")) {
|
|
85939
86154
|
const nodesToStrip = [];
|
|
85940
86155
|
let endifComment = null;
|
|
85941
86156
|
for (let j = i$1 + 1;j < node3.childNodes.length; j += 1) {
|
|
85942
86157
|
const next = node3.childNodes[j];
|
|
85943
|
-
if (next?.nodeType ===
|
|
86158
|
+
if (next?.nodeType === COMMENT_NODE && next.nodeValue?.includes("[endif]")) {
|
|
85944
86159
|
endifComment = next;
|
|
85945
86160
|
break;
|
|
85946
86161
|
}
|
|
@@ -85958,7 +86173,7 @@ function sanitizeHtml(html2, forbiddenTags = [
|
|
|
85958
86173
|
i$1 -= 1;
|
|
85959
86174
|
continue;
|
|
85960
86175
|
}
|
|
85961
|
-
if (current?.nodeType ===
|
|
86176
|
+
if (current?.nodeType === ELEMENT_NODE)
|
|
85962
86177
|
stripFromNode(current);
|
|
85963
86178
|
}
|
|
85964
86179
|
};
|
|
@@ -86293,16 +86508,18 @@ function hasPreservableContent(element, knownTags) {
|
|
|
86293
86508
|
function createDocFromHTML(content$2, editor, options = {}) {
|
|
86294
86509
|
const { isImport = false } = options;
|
|
86295
86510
|
let parsedContent;
|
|
86511
|
+
let domDocument = options.document ?? editor?.options?.document ?? editor?.options?.mockDocument ?? (typeof document !== "undefined" ? document : null);
|
|
86296
86512
|
if (typeof content$2 === "string") {
|
|
86297
|
-
const domDocument = options.document ?? editor?.options?.document ?? editor?.options?.mockDocument ?? (typeof document !== "undefined" ? document : null);
|
|
86298
86513
|
const tempDiv = htmlHandler(stripHtmlStyles(content$2, domDocument), editor, domDocument);
|
|
86299
86514
|
if (isImport)
|
|
86300
86515
|
tempDiv.dataset.superdocImport = "true";
|
|
86301
86516
|
parsedContent = tempDiv;
|
|
86302
86517
|
} else
|
|
86303
86518
|
parsedContent = content$2;
|
|
86304
|
-
|
|
86305
|
-
|
|
86519
|
+
const domElement = parsedContent?.ownerDocument?.defaultView?.Element ?? domDocument?.defaultView?.Element ?? globalThis.Element;
|
|
86520
|
+
const parsedElement = (options.onUnsupportedContent || options.warnOnUnsupportedContent) && domElement && parsedContent instanceof domElement ? parsedContent : null;
|
|
86521
|
+
if (parsedElement) {
|
|
86522
|
+
const unsupported = detectUnsupportedContent(parsedElement, editor.schema);
|
|
86306
86523
|
if (unsupported.length > 0)
|
|
86307
86524
|
if (options.onUnsupportedContent)
|
|
86308
86525
|
options.onUnsupportedContent(unsupported);
|
|
@@ -116546,7 +116763,7 @@ var isRegExp = (value) => {
|
|
|
116546
116763
|
if (id2)
|
|
116547
116764
|
return trackedChanges.filter(({ mark }) => mark.attrs.id === id2);
|
|
116548
116765
|
return trackedChanges;
|
|
116549
|
-
}, DERIVED_ID_LENGTH = 24, groupedCache, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES2, VALID_APPEARANCES, FIELD_LIKE_SDT_TYPES, liveDocumentCountsCache, BIBLIOGRAPHY_NAMESPACE_URI = "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", CUSTOM_XML_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", CUSTOM_XML_PROPS_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", DEFAULT_SELECTED_STYLE = "/APA.XSL", DEFAULT_STYLE_NAME = "APA", DEFAULT_VERSION = "6", API_TO_OOXML_SOURCE_TYPE, OOXML_TO_API_SOURCE_TYPE, SIMPLE_FIELD_TO_XML_TAG, XML_TAG_TO_SIMPLE_FIELD, import_lib2, FONT_FAMILY_FALLBACKS, DEFAULT_GENERIC_FALLBACK = "sans-serif", DEFAULT_FONT_SIZE_PT = 10, CURRENT_APP_VERSION = "1.23.
|
|
116766
|
+
}, DERIVED_ID_LENGTH = 24, groupedCache, SDT_NODE_NAMES, SDT_BLOCK_NAME = "structuredContentBlock", VALID_CONTROL_TYPES, VALID_LOCK_MODES2, VALID_APPEARANCES, FIELD_LIKE_SDT_TYPES, liveDocumentCountsCache, BIBLIOGRAPHY_NAMESPACE_URI = "http://schemas.openxmlformats.org/officeDocument/2006/bibliography", CUSTOM_XML_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", CUSTOM_XML_PROPS_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", DEFAULT_SELECTED_STYLE = "/APA.XSL", DEFAULT_STYLE_NAME = "APA", DEFAULT_VERSION = "6", API_TO_OOXML_SOURCE_TYPE, OOXML_TO_API_SOURCE_TYPE, SIMPLE_FIELD_TO_XML_TAG, XML_TAG_TO_SIMPLE_FIELD, import_lib2, FONT_FAMILY_FALLBACKS, DEFAULT_GENERIC_FALLBACK = "sans-serif", DEFAULT_FONT_SIZE_PT = 10, CURRENT_APP_VERSION = "1.23.1", collectRunDefaultProperties = (runProps, { allowOverrideTypeface = true, allowOverrideSize = true, themeResolver, state }) => {
|
|
116550
116767
|
if (!runProps?.elements?.length || !state)
|
|
116551
116768
|
return;
|
|
116552
116769
|
const fontsNode = runProps.elements.find((el) => el.name === "w:rFonts");
|
|
@@ -116580,7 +116797,7 @@ var isRegExp = (value) => {
|
|
|
116580
116797
|
state.kern = kernNode.attributes["w:val"];
|
|
116581
116798
|
}
|
|
116582
116799
|
}, SuperConverter;
|
|
116583
|
-
var
|
|
116800
|
+
var init_SuperConverter_DerEPM5g_es = __esm(() => {
|
|
116584
116801
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
116585
116802
|
init_jszip_ChlR43oI_es();
|
|
116586
116803
|
init_xml_js_40FWvL78_es();
|
|
@@ -120525,7 +120742,9 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
120525
120742
|
throws: T_PARAGRAPH_MUTATION2
|
|
120526
120743
|
}),
|
|
120527
120744
|
referenceDocPath: "format/paragraph/set-flow-options.mdx",
|
|
120528
|
-
referenceGroup: "format.paragraph"
|
|
120745
|
+
referenceGroup: "format.paragraph",
|
|
120746
|
+
intentGroup: "format",
|
|
120747
|
+
intentAction: "set_flow_options"
|
|
120529
120748
|
},
|
|
120530
120749
|
"format.paragraph.setTabStop": {
|
|
120531
120750
|
memberPath: "format.paragraph.setTabStop",
|
|
@@ -121622,7 +121841,9 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
121622
121841
|
]
|
|
121623
121842
|
}),
|
|
121624
121843
|
referenceDocPath: "create/table.mdx",
|
|
121625
|
-
referenceGroup: "create"
|
|
121844
|
+
referenceGroup: "create",
|
|
121845
|
+
intentGroup: "create",
|
|
121846
|
+
intentAction: "table"
|
|
121626
121847
|
},
|
|
121627
121848
|
"tables.convertFromText": {
|
|
121628
121849
|
memberPath: "tables.convertFromText",
|
|
@@ -126141,7 +126362,11 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
126141
126362
|
success: { const: true },
|
|
126142
126363
|
paragraph: paragraphAddressSchema2,
|
|
126143
126364
|
insertionPoint: textAddressSchema2,
|
|
126144
|
-
trackedChangeRefs: arraySchema2(trackChangeRefSchema2)
|
|
126365
|
+
trackedChangeRefs: arraySchema2(trackChangeRefSchema2),
|
|
126366
|
+
ref: {
|
|
126367
|
+
type: "string",
|
|
126368
|
+
description: "Ref handle for the created block. Pass directly to superdoc_format or superdoc_edit ref param without searching."
|
|
126369
|
+
}
|
|
126145
126370
|
}, [
|
|
126146
126371
|
"success",
|
|
126147
126372
|
"paragraph",
|
|
@@ -126151,7 +126376,11 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
126151
126376
|
success: { const: true },
|
|
126152
126377
|
heading: headingAddressSchema2,
|
|
126153
126378
|
insertionPoint: textAddressSchema2,
|
|
126154
|
-
trackedChangeRefs: arraySchema2(trackChangeRefSchema2)
|
|
126379
|
+
trackedChangeRefs: arraySchema2(trackChangeRefSchema2),
|
|
126380
|
+
ref: {
|
|
126381
|
+
type: "string",
|
|
126382
|
+
description: "Ref handle for the created block. Pass directly to superdoc_format or superdoc_edit ref param without searching."
|
|
126383
|
+
}
|
|
126155
126384
|
}, [
|
|
126156
126385
|
"success",
|
|
126157
126386
|
"heading",
|
|
@@ -127664,6 +127893,10 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
127664
127893
|
type: "boolean",
|
|
127665
127894
|
description: "True if text is bold."
|
|
127666
127895
|
},
|
|
127896
|
+
color: {
|
|
127897
|
+
type: "string",
|
|
127898
|
+
description: "Text color when explicitly set (e.g. '#000000')."
|
|
127899
|
+
},
|
|
127667
127900
|
alignment: {
|
|
127668
127901
|
type: "string",
|
|
127669
127902
|
description: "Paragraph alignment."
|
|
@@ -127671,6 +127904,10 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
127671
127904
|
headingLevel: {
|
|
127672
127905
|
type: "number",
|
|
127673
127906
|
description: "Heading level (1-6)."
|
|
127907
|
+
},
|
|
127908
|
+
ref: {
|
|
127909
|
+
type: "string",
|
|
127910
|
+
description: "Ref handle for this block. Pass directly to superdoc_format or superdoc_edit ref param. Only present for non-empty blocks."
|
|
127674
127911
|
}
|
|
127675
127912
|
}, [
|
|
127676
127913
|
"ordinal",
|
|
@@ -173461,7 +173698,7 @@ var init_remark_gfm_DCND_V_3_es = __esm(() => {
|
|
|
173461
173698
|
init_remark_gfm_BUJjZJLy_es();
|
|
173462
173699
|
});
|
|
173463
173700
|
|
|
173464
|
-
// ../../packages/superdoc/dist/chunks/src-
|
|
173701
|
+
// ../../packages/superdoc/dist/chunks/src-sJ2EXqLW.es.js
|
|
173465
173702
|
function deleteProps(obj, propOrProps) {
|
|
173466
173703
|
const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
|
|
173467
173704
|
const removeNested = (target, pathParts, index2 = 0) => {
|
|
@@ -174098,7 +174335,7 @@ function prosemirrorToYXmlFragment(doc$12, xmlFragment) {
|
|
|
174098
174335
|
}
|
|
174099
174336
|
function getSuperdocVersion() {
|
|
174100
174337
|
try {
|
|
174101
|
-
return "1.23.
|
|
174338
|
+
return "1.23.1";
|
|
174102
174339
|
} catch {
|
|
174103
174340
|
return "unknown";
|
|
174104
174341
|
}
|
|
@@ -176153,6 +176390,39 @@ function tableSeparatorNeeds$1(doc$12, pos) {
|
|
|
176153
176390
|
after: !nodeAfter || nodeAfter.type.name === "table"
|
|
176154
176391
|
};
|
|
176155
176392
|
}
|
|
176393
|
+
function computeParagraphContentBounds(paragraphPos, paragraphNode) {
|
|
176394
|
+
if (!Number.isFinite(paragraphPos) || !paragraphNode || !Number.isFinite(paragraphNode.nodeSize))
|
|
176395
|
+
return null;
|
|
176396
|
+
let from$1 = paragraphPos + 1;
|
|
176397
|
+
let to = paragraphPos + paragraphNode.nodeSize - 1;
|
|
176398
|
+
if (paragraphNode.firstChild?.type?.name === "run")
|
|
176399
|
+
from$1 = paragraphPos + 2;
|
|
176400
|
+
if (paragraphNode.lastChild?.type?.name === "run")
|
|
176401
|
+
to = paragraphPos + paragraphNode.nodeSize - 2;
|
|
176402
|
+
if (to < from$1)
|
|
176403
|
+
to = from$1;
|
|
176404
|
+
return {
|
|
176405
|
+
from: from$1,
|
|
176406
|
+
to
|
|
176407
|
+
};
|
|
176408
|
+
}
|
|
176409
|
+
function computeToggleListSelectionRange({ selectionWasCollapsed, affectedParagraphCount, firstParagraphPos, lastParagraphPos, firstNode, lastNode }) {
|
|
176410
|
+
if (affectedParagraphCount <= 0)
|
|
176411
|
+
return null;
|
|
176412
|
+
const firstBounds = computeParagraphContentBounds(firstParagraphPos, firstNode);
|
|
176413
|
+
const lastBounds = computeParagraphContentBounds(lastParagraphPos, lastNode);
|
|
176414
|
+
if (!firstBounds || !lastBounds)
|
|
176415
|
+
return null;
|
|
176416
|
+
if (selectionWasCollapsed && affectedParagraphCount === 1)
|
|
176417
|
+
return {
|
|
176418
|
+
from: lastBounds.to,
|
|
176419
|
+
to: lastBounds.to
|
|
176420
|
+
};
|
|
176421
|
+
return {
|
|
176422
|
+
from: firstBounds.from,
|
|
176423
|
+
to: lastBounds.to
|
|
176424
|
+
};
|
|
176425
|
+
}
|
|
176156
176426
|
function numFmtIsBullet(numFmt) {
|
|
176157
176427
|
if (numFmt == null)
|
|
176158
176428
|
return false;
|
|
@@ -195811,6 +196081,21 @@ function collectTrackInsertRefsInRange(editor, from$1, to) {
|
|
|
195811
196081
|
entityId: id2
|
|
195812
196082
|
}));
|
|
195813
196083
|
}
|
|
196084
|
+
function mintBlockRef(editor, storyKey, nodeId, textLength) {
|
|
196085
|
+
return encodeV4Ref({
|
|
196086
|
+
v: 4,
|
|
196087
|
+
rev: getRevision(editor),
|
|
196088
|
+
storyKey,
|
|
196089
|
+
scope: "block",
|
|
196090
|
+
matchId: `create:${nodeId}`,
|
|
196091
|
+
segments: [{
|
|
196092
|
+
blockId: nodeId,
|
|
196093
|
+
start: 0,
|
|
196094
|
+
end: textLength
|
|
196095
|
+
}],
|
|
196096
|
+
blockIndex: 0
|
|
196097
|
+
});
|
|
196098
|
+
}
|
|
195814
196099
|
function resolveCreateInsertPosition(editor, at) {
|
|
195815
196100
|
const location$1 = at ?? { kind: "documentEnd" };
|
|
195816
196101
|
if (location$1.kind === "documentStart")
|
|
@@ -195838,7 +196123,7 @@ function resolveCreatedBlock(editor, nodeType, blockId) {
|
|
|
195838
196123
|
return fallback;
|
|
195839
196124
|
throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Created ${nodeType} could not be resolved after insertion.`, { [`${nodeType}Id`]: blockId });
|
|
195840
196125
|
}
|
|
195841
|
-
function buildParagraphCreateSuccess(paragraphNodeId, trackedChangeRefs, story) {
|
|
196126
|
+
function buildParagraphCreateSuccess(paragraphNodeId, trackedChangeRefs, story, ref$1) {
|
|
195842
196127
|
return {
|
|
195843
196128
|
success: true,
|
|
195844
196129
|
paragraph: {
|
|
@@ -195856,10 +196141,11 @@ function buildParagraphCreateSuccess(paragraphNodeId, trackedChangeRefs, story)
|
|
|
195856
196141
|
},
|
|
195857
196142
|
...story && { story }
|
|
195858
196143
|
},
|
|
195859
|
-
trackedChangeRefs
|
|
196144
|
+
trackedChangeRefs,
|
|
196145
|
+
...ref$1 ? { ref: ref$1 } : {}
|
|
195860
196146
|
};
|
|
195861
196147
|
}
|
|
195862
|
-
function buildHeadingCreateSuccess(headingNodeId, trackedChangeRefs, story) {
|
|
196148
|
+
function buildHeadingCreateSuccess(headingNodeId, trackedChangeRefs, story, ref$1) {
|
|
195863
196149
|
return {
|
|
195864
196150
|
success: true,
|
|
195865
196151
|
heading: {
|
|
@@ -195877,7 +196163,8 @@ function buildHeadingCreateSuccess(headingNodeId, trackedChangeRefs, story) {
|
|
|
195877
196163
|
},
|
|
195878
196164
|
...story && { story }
|
|
195879
196165
|
},
|
|
195880
|
-
trackedChangeRefs
|
|
196166
|
+
trackedChangeRefs,
|
|
196167
|
+
...ref$1 ? { ref: ref$1 } : {}
|
|
195881
196168
|
};
|
|
195882
196169
|
}
|
|
195883
196170
|
function createParagraphWrapper(editor, input2, options) {
|
|
@@ -195953,7 +196240,9 @@ function createParagraphWrapper(editor, input2, options) {
|
|
|
195953
196240
|
if (runtime.commit)
|
|
195954
196241
|
runtime.commit(editor);
|
|
195955
196242
|
const nonBodyStory = runtime.kind !== "body" ? runtime.locator : undefined;
|
|
195956
|
-
|
|
196243
|
+
const textLen = input2.text?.length ?? 0;
|
|
196244
|
+
const ref$1 = textLen > 0 ? mintBlockRef(storyEditor, runtime.storyKey, canonicalId, textLen) : undefined;
|
|
196245
|
+
return buildParagraphCreateSuccess(canonicalId, trackedChangeRefs, nonBodyStory, ref$1);
|
|
195957
196246
|
} finally {
|
|
195958
196247
|
disposeEphemeralWriteRuntime(runtime);
|
|
195959
196248
|
}
|
|
@@ -196033,7 +196322,9 @@ function createHeadingWrapper(editor, input2, options) {
|
|
|
196033
196322
|
if (runtime.commit)
|
|
196034
196323
|
runtime.commit(editor);
|
|
196035
196324
|
const nonBodyStory = runtime.kind !== "body" ? runtime.locator : undefined;
|
|
196036
|
-
|
|
196325
|
+
const textLen = input2.text?.length ?? 0;
|
|
196326
|
+
const ref$1 = textLen > 0 ? mintBlockRef(storyEditor, runtime.storyKey, canonicalId, textLen) : undefined;
|
|
196327
|
+
return buildHeadingCreateSuccess(canonicalId, trackedChangeRefs, nonBodyStory, ref$1);
|
|
196037
196328
|
} finally {
|
|
196038
196329
|
disposeEphemeralWriteRuntime(runtime);
|
|
196039
196330
|
}
|
|
@@ -196052,6 +196343,8 @@ function extractBlockFormatting(node3) {
|
|
|
196052
196343
|
let fontFamily;
|
|
196053
196344
|
let fontSize;
|
|
196054
196345
|
let bold2;
|
|
196346
|
+
let underline;
|
|
196347
|
+
let color2;
|
|
196055
196348
|
node3.descendants((child) => {
|
|
196056
196349
|
if (fontFamily !== undefined)
|
|
196057
196350
|
return false;
|
|
@@ -196059,19 +196352,28 @@ function extractBlockFormatting(node3) {
|
|
|
196059
196352
|
if (!child.isText || marks.length === 0)
|
|
196060
196353
|
return;
|
|
196061
196354
|
for (const mark2 of marks) {
|
|
196355
|
+
const markName = mark2.type.name;
|
|
196062
196356
|
const attrs = mark2.attrs;
|
|
196063
|
-
if (
|
|
196064
|
-
fontFamily
|
|
196065
|
-
|
|
196066
|
-
|
|
196067
|
-
|
|
196068
|
-
|
|
196357
|
+
if (markName === "textStyle") {
|
|
196358
|
+
if (typeof attrs.fontFamily === "string" && attrs.fontFamily)
|
|
196359
|
+
fontFamily = attrs.fontFamily;
|
|
196360
|
+
if (attrs.fontSize != null) {
|
|
196361
|
+
const raw = typeof attrs.fontSize === "string" ? parseFloat(attrs.fontSize) : attrs.fontSize;
|
|
196362
|
+
if (typeof raw === "number" && Number.isFinite(raw))
|
|
196363
|
+
fontSize = raw;
|
|
196364
|
+
}
|
|
196365
|
+
if (typeof attrs.color === "string" && attrs.color)
|
|
196366
|
+
color2 = attrs.color;
|
|
196069
196367
|
}
|
|
196070
|
-
if (attrs.
|
|
196368
|
+
if (markName === "bold" && attrs.value === true)
|
|
196071
196369
|
bold2 = true;
|
|
196370
|
+
if (markName === "underline")
|
|
196371
|
+
underline = true;
|
|
196072
196372
|
}
|
|
196073
196373
|
return false;
|
|
196074
196374
|
});
|
|
196375
|
+
if (color2 === "auto")
|
|
196376
|
+
color2 = undefined;
|
|
196075
196377
|
let headingLevel;
|
|
196076
196378
|
if (typeof styleId === "string") {
|
|
196077
196379
|
const m$1 = HEADING_PATTERN.exec(styleId);
|
|
@@ -196083,6 +196385,8 @@ function extractBlockFormatting(node3) {
|
|
|
196083
196385
|
...fontFamily ? { fontFamily } : {},
|
|
196084
196386
|
...fontSize !== undefined ? { fontSize } : {},
|
|
196085
196387
|
...bold2 ? { bold: bold2 } : {},
|
|
196388
|
+
...underline ? { underline } : {},
|
|
196389
|
+
...color2 ? { color: color2 } : {},
|
|
196086
196390
|
...pProps?.justification ? { alignment: pProps.justification } : {},
|
|
196087
196391
|
...headingLevel ? { headingLevel } : {}
|
|
196088
196392
|
};
|
|
@@ -196149,17 +196453,36 @@ function blocksListWrapper(editor, input2) {
|
|
|
196149
196453
|
const total = filtered.length;
|
|
196150
196454
|
const offset$1 = input2?.offset ?? 0;
|
|
196151
196455
|
const limit = input2?.limit ?? total;
|
|
196456
|
+
const paged = filtered.slice(offset$1, offset$1 + limit);
|
|
196457
|
+
const rev = getRevision(editor);
|
|
196152
196458
|
return {
|
|
196153
196459
|
total,
|
|
196154
|
-
blocks:
|
|
196155
|
-
|
|
196156
|
-
|
|
196157
|
-
|
|
196158
|
-
|
|
196159
|
-
|
|
196160
|
-
|
|
196161
|
-
|
|
196162
|
-
|
|
196460
|
+
blocks: paged.map((candidate, i4) => {
|
|
196461
|
+
const textLength = computeTextContentLength(candidate.node);
|
|
196462
|
+
const ref$1 = textLength > 0 ? encodeV4Ref({
|
|
196463
|
+
v: 4,
|
|
196464
|
+
rev,
|
|
196465
|
+
storyKey: "body",
|
|
196466
|
+
scope: "block",
|
|
196467
|
+
matchId: candidate.nodeId,
|
|
196468
|
+
segments: [{
|
|
196469
|
+
blockId: candidate.nodeId,
|
|
196470
|
+
start: 0,
|
|
196471
|
+
end: textLength
|
|
196472
|
+
}],
|
|
196473
|
+
blockIndex: offset$1 + i4
|
|
196474
|
+
}) : undefined;
|
|
196475
|
+
return {
|
|
196476
|
+
ordinal: offset$1 + i4,
|
|
196477
|
+
nodeId: candidate.nodeId,
|
|
196478
|
+
nodeType: candidate.nodeType,
|
|
196479
|
+
textPreview: extractTextPreview(candidate.node),
|
|
196480
|
+
isEmpty: textLength === 0,
|
|
196481
|
+
...extractBlockFormatting(candidate.node),
|
|
196482
|
+
...ref$1 ? { ref: ref$1 } : {}
|
|
196483
|
+
};
|
|
196484
|
+
}),
|
|
196485
|
+
revision: rev
|
|
196163
196486
|
};
|
|
196164
196487
|
}
|
|
196165
196488
|
function blocksDeleteWrapper(editor, input2, options) {
|
|
@@ -211906,6 +212229,502 @@ function resolveAnnotationDisplayLabel(annotation, contentEl) {
|
|
|
211906
212229
|
value: derivedLabel
|
|
211907
212230
|
};
|
|
211908
212231
|
}
|
|
212232
|
+
function cssClassForKind(kind) {
|
|
212233
|
+
switch (kind) {
|
|
212234
|
+
case "spelling":
|
|
212235
|
+
return PROOFING_CSS.SPELLING;
|
|
212236
|
+
case "grammar":
|
|
212237
|
+
return PROOFING_CSS.GRAMMAR;
|
|
212238
|
+
case "style":
|
|
212239
|
+
return PROOFING_CSS.STYLE;
|
|
212240
|
+
}
|
|
212241
|
+
}
|
|
212242
|
+
function computeSplitSegments(spanPmStart, spanPmEnd, spanText, annotations) {
|
|
212243
|
+
const boundaries = /* @__PURE__ */ new Set;
|
|
212244
|
+
boundaries.add(spanPmStart);
|
|
212245
|
+
boundaries.add(spanPmEnd);
|
|
212246
|
+
for (const annotation of annotations) {
|
|
212247
|
+
const clampedFrom = Math.max(annotation.pmFrom, spanPmStart);
|
|
212248
|
+
const clampedTo = Math.min(annotation.pmTo, spanPmEnd);
|
|
212249
|
+
if (clampedFrom > spanPmStart)
|
|
212250
|
+
boundaries.add(clampedFrom);
|
|
212251
|
+
if (clampedTo < spanPmEnd)
|
|
212252
|
+
boundaries.add(clampedTo);
|
|
212253
|
+
}
|
|
212254
|
+
const sortedBoundaries = Array.from(boundaries).sort((a2, b$1) => a2 - b$1);
|
|
212255
|
+
const segments = [];
|
|
212256
|
+
for (let index2 = 0;index2 < sortedBoundaries.length - 1; index2 += 1) {
|
|
212257
|
+
const segmentPmStart = sortedBoundaries[index2];
|
|
212258
|
+
const segmentPmEnd = sortedBoundaries[index2 + 1];
|
|
212259
|
+
const textStart = segmentPmStart - spanPmStart;
|
|
212260
|
+
const textEnd = segmentPmEnd - spanPmStart;
|
|
212261
|
+
if (textEnd <= textStart || textStart >= spanText.length)
|
|
212262
|
+
continue;
|
|
212263
|
+
const clampedTextEnd = Math.min(textEnd, spanText.length);
|
|
212264
|
+
let proofingClass = null;
|
|
212265
|
+
for (const annotation of annotations)
|
|
212266
|
+
if (annotation.pmFrom <= segmentPmStart && annotation.pmTo >= segmentPmEnd) {
|
|
212267
|
+
proofingClass = cssClassForKind(annotation.kind);
|
|
212268
|
+
break;
|
|
212269
|
+
}
|
|
212270
|
+
segments.push({
|
|
212271
|
+
textStart,
|
|
212272
|
+
textEnd: clampedTextEnd,
|
|
212273
|
+
pmStart: segmentPmStart,
|
|
212274
|
+
pmEnd: segmentPmEnd,
|
|
212275
|
+
proofingClass
|
|
212276
|
+
});
|
|
212277
|
+
}
|
|
212278
|
+
return segments;
|
|
212279
|
+
}
|
|
212280
|
+
function replaceSpanWithSiblings(originalSpan, segments, spanText) {
|
|
212281
|
+
const parent = originalSpan.parentNode;
|
|
212282
|
+
if (!parent)
|
|
212283
|
+
return [];
|
|
212284
|
+
const doc$12 = originalSpan.ownerDocument;
|
|
212285
|
+
const siblings = [];
|
|
212286
|
+
for (const segment of segments) {
|
|
212287
|
+
const text5 = spanText.slice(segment.textStart, segment.textEnd);
|
|
212288
|
+
if (text5.length === 0)
|
|
212289
|
+
continue;
|
|
212290
|
+
const span = doc$12.createElement("span");
|
|
212291
|
+
for (let index2 = 0;index2 < originalSpan.attributes.length; index2 += 1) {
|
|
212292
|
+
const attr = originalSpan.attributes[index2];
|
|
212293
|
+
span.setAttribute(attr.name, attr.value);
|
|
212294
|
+
}
|
|
212295
|
+
span.setAttribute("data-pm-start", String(segment.pmStart));
|
|
212296
|
+
span.setAttribute("data-pm-end", String(segment.pmEnd));
|
|
212297
|
+
if (segment.proofingClass) {
|
|
212298
|
+
span.classList.add(segment.proofingClass);
|
|
212299
|
+
span.setAttribute("aria-invalid", "spelling");
|
|
212300
|
+
}
|
|
212301
|
+
span.setAttribute(PROOFING_CSS.SPLIT_ATTR, "");
|
|
212302
|
+
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
212303
|
+
span.textContent = "";
|
|
212304
|
+
span.appendChild(doc$12.createTextNode(text5));
|
|
212305
|
+
splitOriginMap.set(span, originalSpan);
|
|
212306
|
+
siblings.push(span);
|
|
212307
|
+
}
|
|
212308
|
+
originalSpan.style.display = "none";
|
|
212309
|
+
originalSpan.setAttribute(PROOFING_CSS.DATA_ATTR, "original");
|
|
212310
|
+
const originalPmStart = originalSpan.getAttribute("data-pm-start");
|
|
212311
|
+
const originalPmEnd = originalSpan.getAttribute("data-pm-end");
|
|
212312
|
+
if (originalPmStart)
|
|
212313
|
+
originalSpan.setAttribute("data-sd-orig-pm-start", originalPmStart);
|
|
212314
|
+
if (originalPmEnd)
|
|
212315
|
+
originalSpan.setAttribute("data-sd-orig-pm-end", originalPmEnd);
|
|
212316
|
+
originalSpan.removeAttribute("data-pm-start");
|
|
212317
|
+
originalSpan.removeAttribute("data-pm-end");
|
|
212318
|
+
for (const sibling of siblings)
|
|
212319
|
+
parent.insertBefore(sibling, originalSpan);
|
|
212320
|
+
return siblings;
|
|
212321
|
+
}
|
|
212322
|
+
function restoreSplitSpans(container) {
|
|
212323
|
+
const splitSpans = Array.from(container.querySelectorAll(`[${PROOFING_CSS.SPLIT_ATTR}]`));
|
|
212324
|
+
if (splitSpans.length === 0)
|
|
212325
|
+
return false;
|
|
212326
|
+
const groupsByOriginal = /* @__PURE__ */ new Map;
|
|
212327
|
+
for (const span of splitSpans) {
|
|
212328
|
+
const original = splitOriginMap.get(span);
|
|
212329
|
+
if (!original)
|
|
212330
|
+
continue;
|
|
212331
|
+
const group = groupsByOriginal.get(original);
|
|
212332
|
+
if (group)
|
|
212333
|
+
group.push(span);
|
|
212334
|
+
else
|
|
212335
|
+
groupsByOriginal.set(original, [span]);
|
|
212336
|
+
}
|
|
212337
|
+
for (const [original, siblings] of groupsByOriginal) {
|
|
212338
|
+
const parent = original.parentNode;
|
|
212339
|
+
if (!parent)
|
|
212340
|
+
continue;
|
|
212341
|
+
unhideOriginalSpan(original);
|
|
212342
|
+
for (const sibling of siblings)
|
|
212343
|
+
parent.removeChild(sibling);
|
|
212344
|
+
}
|
|
212345
|
+
const remainingSplitSpans = Array.from(container.querySelectorAll(`[${PROOFING_CSS.SPLIT_ATTR}]`));
|
|
212346
|
+
for (const span of remainingSplitSpans)
|
|
212347
|
+
span.parentNode?.removeChild(span);
|
|
212348
|
+
const hiddenOriginals = Array.from(container.querySelectorAll(`[${PROOFING_CSS.DATA_ATTR}="original"]`));
|
|
212349
|
+
for (const element3 of hiddenOriginals)
|
|
212350
|
+
unhideOriginalSpan(element3);
|
|
212351
|
+
return true;
|
|
212352
|
+
}
|
|
212353
|
+
function unhideOriginalSpan(element3) {
|
|
212354
|
+
element3.style.display = "";
|
|
212355
|
+
if (!element3.style.cssText)
|
|
212356
|
+
element3.removeAttribute("style");
|
|
212357
|
+
element3.removeAttribute(PROOFING_CSS.DATA_ATTR);
|
|
212358
|
+
const savedStart = element3.getAttribute("data-sd-orig-pm-start");
|
|
212359
|
+
const savedEnd = element3.getAttribute("data-sd-orig-pm-end");
|
|
212360
|
+
if (savedStart) {
|
|
212361
|
+
element3.setAttribute("data-pm-start", savedStart);
|
|
212362
|
+
element3.removeAttribute("data-sd-orig-pm-start");
|
|
212363
|
+
}
|
|
212364
|
+
if (savedEnd) {
|
|
212365
|
+
element3.setAttribute("data-pm-end", savedEnd);
|
|
212366
|
+
element3.removeAttribute("data-sd-orig-pm-end");
|
|
212367
|
+
}
|
|
212368
|
+
}
|
|
212369
|
+
function applyProofingDecorations(container, annotations) {
|
|
212370
|
+
const hadPrevious = clearProofingDecorations(container);
|
|
212371
|
+
if (annotations.length === 0)
|
|
212372
|
+
return hadPrevious;
|
|
212373
|
+
const sortedAnnotations = [...annotations].sort((left$1, right$1) => left$1.pmFrom - right$1.pmFrom);
|
|
212374
|
+
const spans = Array.from(container.querySelectorAll("[data-pm-start][data-pm-end]"));
|
|
212375
|
+
let mutated = false;
|
|
212376
|
+
for (const span of spans) {
|
|
212377
|
+
const pmStart = Number.parseInt(span.getAttribute("data-pm-start") ?? "", 10);
|
|
212378
|
+
const pmEnd = Number.parseInt(span.getAttribute("data-pm-end") ?? "", 10);
|
|
212379
|
+
if (Number.isNaN(pmStart) || Number.isNaN(pmEnd) || pmEnd <= pmStart)
|
|
212380
|
+
continue;
|
|
212381
|
+
if (!isLeafTextSpan(span))
|
|
212382
|
+
continue;
|
|
212383
|
+
const overlappingAnnotations = findOverlappingAnnotations(sortedAnnotations, pmStart, pmEnd);
|
|
212384
|
+
if (overlappingAnnotations.length === 0)
|
|
212385
|
+
continue;
|
|
212386
|
+
const text5 = span.textContent ?? "";
|
|
212387
|
+
if (text5.length === 0)
|
|
212388
|
+
continue;
|
|
212389
|
+
if (isCoveredBySingleAnnotation(pmStart, pmEnd, overlappingAnnotations)) {
|
|
212390
|
+
span.classList.add(cssClassForKind(overlappingAnnotations[0].kind));
|
|
212391
|
+
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
212392
|
+
span.setAttribute("aria-invalid", "spelling");
|
|
212393
|
+
mutated = true;
|
|
212394
|
+
continue;
|
|
212395
|
+
}
|
|
212396
|
+
const segments = computeSplitSegments(pmStart, pmEnd, text5, overlappingAnnotations);
|
|
212397
|
+
if (segments.length > 1) {
|
|
212398
|
+
replaceSpanWithSiblings(span, segments, text5);
|
|
212399
|
+
mutated = true;
|
|
212400
|
+
continue;
|
|
212401
|
+
}
|
|
212402
|
+
if (segments.length === 1 && segments[0].proofingClass) {
|
|
212403
|
+
span.classList.add(segments[0].proofingClass);
|
|
212404
|
+
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
212405
|
+
span.setAttribute("aria-invalid", "spelling");
|
|
212406
|
+
mutated = true;
|
|
212407
|
+
}
|
|
212408
|
+
}
|
|
212409
|
+
return mutated || hadPrevious;
|
|
212410
|
+
}
|
|
212411
|
+
function clearProofingDecorations(container) {
|
|
212412
|
+
let cleared = false;
|
|
212413
|
+
const restoredSplits = restoreSplitSpans(container);
|
|
212414
|
+
const decoratedElements = Array.from(container.querySelectorAll(`[${PROOFING_CSS.DATA_ATTR}]`));
|
|
212415
|
+
for (const element3 of decoratedElements) {
|
|
212416
|
+
element3.classList.remove(PROOFING_CSS.SPELLING, PROOFING_CSS.GRAMMAR, PROOFING_CSS.STYLE);
|
|
212417
|
+
element3.removeAttribute(PROOFING_CSS.DATA_ATTR);
|
|
212418
|
+
element3.removeAttribute("aria-invalid");
|
|
212419
|
+
cleared = true;
|
|
212420
|
+
}
|
|
212421
|
+
return cleared || restoredSplits;
|
|
212422
|
+
}
|
|
212423
|
+
function isLeafTextSpan(element3) {
|
|
212424
|
+
const children = element3.childNodes;
|
|
212425
|
+
if (children.length === 0)
|
|
212426
|
+
return false;
|
|
212427
|
+
for (let index2 = 0;index2 < children.length; index2 += 1)
|
|
212428
|
+
if (children[index2].nodeType === Node.ELEMENT_NODE)
|
|
212429
|
+
return false;
|
|
212430
|
+
return true;
|
|
212431
|
+
}
|
|
212432
|
+
function findOverlappingAnnotations(sortedAnnotations, pmStart, pmEnd) {
|
|
212433
|
+
const overlapping = [];
|
|
212434
|
+
for (const annotation of sortedAnnotations) {
|
|
212435
|
+
if (annotation.pmFrom >= pmEnd)
|
|
212436
|
+
break;
|
|
212437
|
+
if (annotation.pmTo > pmStart)
|
|
212438
|
+
overlapping.push(annotation);
|
|
212439
|
+
}
|
|
212440
|
+
return overlapping;
|
|
212441
|
+
}
|
|
212442
|
+
function isCoveredBySingleAnnotation(pmStart, pmEnd, annotations) {
|
|
212443
|
+
return annotations.some((annotation) => annotation.pmFrom <= pmStart && annotation.pmTo >= pmEnd);
|
|
212444
|
+
}
|
|
212445
|
+
function isSuppressed(issue, normalizedIgnored) {
|
|
212446
|
+
if (normalizedIgnored.size === 0)
|
|
212447
|
+
return false;
|
|
212448
|
+
const raw = issue.word ?? issue.message;
|
|
212449
|
+
if (!raw)
|
|
212450
|
+
return false;
|
|
212451
|
+
const normalized = raw.normalize("NFC").toLowerCase();
|
|
212452
|
+
return normalizedIgnored.has(normalized);
|
|
212453
|
+
}
|
|
212454
|
+
function resolveSegmentLanguage(paraNode, defaultLanguage) {
|
|
212455
|
+
const runLanguage = findFirstRunLanguage(paraNode);
|
|
212456
|
+
if (runLanguage)
|
|
212457
|
+
return runLanguage;
|
|
212458
|
+
const paraLang = extractParagraphLanguage(paraNode);
|
|
212459
|
+
if (paraLang)
|
|
212460
|
+
return paraLang;
|
|
212461
|
+
return defaultLanguage;
|
|
212462
|
+
}
|
|
212463
|
+
function findFirstRunLanguage(paraNode) {
|
|
212464
|
+
let lang = null;
|
|
212465
|
+
paraNode.descendants((node3) => {
|
|
212466
|
+
if (lang)
|
|
212467
|
+
return false;
|
|
212468
|
+
if (node3.type.name === "run") {
|
|
212469
|
+
const runProps = node3.attrs.runProperties;
|
|
212470
|
+
if (runProps?.lang?.val) {
|
|
212471
|
+
lang = runProps.lang.val;
|
|
212472
|
+
return false;
|
|
212473
|
+
}
|
|
212474
|
+
}
|
|
212475
|
+
return true;
|
|
212476
|
+
});
|
|
212477
|
+
return lang;
|
|
212478
|
+
}
|
|
212479
|
+
function extractParagraphLanguage(paraNode) {
|
|
212480
|
+
return paraNode.attrs.paragraphProperties?.lang?.val ?? null;
|
|
212481
|
+
}
|
|
212482
|
+
function extractSegmentsWithMaps(doc$12, defaultLanguage, pageResolver) {
|
|
212483
|
+
const segments = [];
|
|
212484
|
+
const offsetMaps = /* @__PURE__ */ new Map;
|
|
212485
|
+
const segmentPositions = /* @__PURE__ */ new Map;
|
|
212486
|
+
walkParagraphs(doc$12, (paraNode, paraPos, surface) => {
|
|
212487
|
+
const { text: text5, slices } = extractParagraphText(paraNode, paraPos);
|
|
212488
|
+
if (text5.length === 0)
|
|
212489
|
+
return;
|
|
212490
|
+
const segmentId = buildSegmentId(paraNode, paraPos);
|
|
212491
|
+
const language = resolveSegmentLanguage(paraNode, defaultLanguage ?? null);
|
|
212492
|
+
const pageIndex = pageResolver?.(paraPos);
|
|
212493
|
+
segments.push({
|
|
212494
|
+
id: segmentId,
|
|
212495
|
+
text: text5,
|
|
212496
|
+
language,
|
|
212497
|
+
metadata: {
|
|
212498
|
+
blockId: paraNode.attrs.sdBlockId,
|
|
212499
|
+
pageIndex,
|
|
212500
|
+
surface
|
|
212501
|
+
}
|
|
212502
|
+
});
|
|
212503
|
+
offsetMaps.set(segmentId, {
|
|
212504
|
+
segmentId,
|
|
212505
|
+
slices
|
|
212506
|
+
});
|
|
212507
|
+
segmentPositions.set(segmentId, paraPos);
|
|
212508
|
+
});
|
|
212509
|
+
return {
|
|
212510
|
+
segments,
|
|
212511
|
+
offsetMaps,
|
|
212512
|
+
segmentPositions
|
|
212513
|
+
};
|
|
212514
|
+
}
|
|
212515
|
+
function walkParagraphs(doc$12, visitor) {
|
|
212516
|
+
doc$12.descendants((node3, pos) => {
|
|
212517
|
+
const typeName = node3.type.name;
|
|
212518
|
+
if (typeName === "header" || typeName === "footer")
|
|
212519
|
+
return false;
|
|
212520
|
+
if (typeName === "paragraph") {
|
|
212521
|
+
visitor(node3, pos, isInsideTableCell(doc$12, pos) ? "table-cell" : "body");
|
|
212522
|
+
return false;
|
|
212523
|
+
}
|
|
212524
|
+
return true;
|
|
212525
|
+
});
|
|
212526
|
+
}
|
|
212527
|
+
function isInsideTableCell(doc$12, pos) {
|
|
212528
|
+
const resolved = doc$12.resolve(pos);
|
|
212529
|
+
for (let depth = resolved.depth;depth > 0; depth--) {
|
|
212530
|
+
const ancestor = resolved.node(depth);
|
|
212531
|
+
if (ancestor.type.name === "tableCell" || ancestor.type.name === "tableHeader")
|
|
212532
|
+
return true;
|
|
212533
|
+
}
|
|
212534
|
+
return false;
|
|
212535
|
+
}
|
|
212536
|
+
function extractParagraphText(paraNode, paraPos) {
|
|
212537
|
+
const parts = [];
|
|
212538
|
+
const slices = [];
|
|
212539
|
+
let textOffset = 0;
|
|
212540
|
+
const contentStart = paraPos + 1;
|
|
212541
|
+
paraNode.forEach((child, offset$1) => {
|
|
212542
|
+
processNode(child, contentStart + offset$1);
|
|
212543
|
+
});
|
|
212544
|
+
return {
|
|
212545
|
+
text: parts.join(""),
|
|
212546
|
+
slices
|
|
212547
|
+
};
|
|
212548
|
+
function processNode(node3, pos) {
|
|
212549
|
+
const typeName = node3.type.name;
|
|
212550
|
+
if (typeName === "run") {
|
|
212551
|
+
const runProps = node3.attrs.runProperties;
|
|
212552
|
+
if (runProps?.vanish === true) {
|
|
212553
|
+
emitBoundary();
|
|
212554
|
+
return;
|
|
212555
|
+
}
|
|
212556
|
+
if (runProps?.noProof === true) {
|
|
212557
|
+
emitBoundary();
|
|
212558
|
+
return;
|
|
212559
|
+
}
|
|
212560
|
+
const runContentStart = pos + 1;
|
|
212561
|
+
node3.forEach((child, childOff) => {
|
|
212562
|
+
processNode(child, runContentStart + childOff);
|
|
212563
|
+
});
|
|
212564
|
+
return;
|
|
212565
|
+
}
|
|
212566
|
+
if (node3.isText && node3.text) {
|
|
212567
|
+
if (hasTrackDeleteMark(node3))
|
|
212568
|
+
return;
|
|
212569
|
+
const text5 = node3.text;
|
|
212570
|
+
const pmFrom = pos;
|
|
212571
|
+
const pmTo = pos + text5.length;
|
|
212572
|
+
slices.push({
|
|
212573
|
+
textStart: textOffset,
|
|
212574
|
+
textEnd: textOffset + text5.length,
|
|
212575
|
+
pmFrom,
|
|
212576
|
+
pmTo
|
|
212577
|
+
});
|
|
212578
|
+
parts.push(text5);
|
|
212579
|
+
textOffset += text5.length;
|
|
212580
|
+
return;
|
|
212581
|
+
}
|
|
212582
|
+
if (isNonTextInlineNode(typeName)) {
|
|
212583
|
+
emitBoundary();
|
|
212584
|
+
return;
|
|
212585
|
+
}
|
|
212586
|
+
if (node3.childCount > 0) {
|
|
212587
|
+
const contentStart$1 = pos + 1;
|
|
212588
|
+
node3.forEach((child, childOff) => {
|
|
212589
|
+
processNode(child, contentStart$1 + childOff);
|
|
212590
|
+
});
|
|
212591
|
+
}
|
|
212592
|
+
}
|
|
212593
|
+
function emitBoundary() {
|
|
212594
|
+
if (parts.length > 0 && !parts[parts.length - 1].endsWith(" ")) {
|
|
212595
|
+
parts.push(" ");
|
|
212596
|
+
textOffset += 1;
|
|
212597
|
+
}
|
|
212598
|
+
}
|
|
212599
|
+
}
|
|
212600
|
+
function hasTrackDeleteMark(node3) {
|
|
212601
|
+
return node3.marks?.some((m$1) => m$1.type.name === "trackDelete") ?? false;
|
|
212602
|
+
}
|
|
212603
|
+
function isNonTextInlineNode(typeName) {
|
|
212604
|
+
return NON_TEXT_INLINE_NODES.has(typeName);
|
|
212605
|
+
}
|
|
212606
|
+
function buildSegmentId(paraNode, paraPos) {
|
|
212607
|
+
const blockId = paraNode.attrs.sdBlockId;
|
|
212608
|
+
return blockId ? `blk-${blockId}` : `pos-${paraPos}`;
|
|
212609
|
+
}
|
|
212610
|
+
function resolveIssuePmRangeFromSlices(issue, slices) {
|
|
212611
|
+
const pmFrom = textOffsetToPmPos(issue.start, slices);
|
|
212612
|
+
const pmTo = textOffsetToPmPos(issue.end, slices);
|
|
212613
|
+
if (pmFrom === null || pmTo === null || pmFrom >= pmTo)
|
|
212614
|
+
return null;
|
|
212615
|
+
return {
|
|
212616
|
+
...issue,
|
|
212617
|
+
pmFrom,
|
|
212618
|
+
pmTo
|
|
212619
|
+
};
|
|
212620
|
+
}
|
|
212621
|
+
function textOffsetToPmPos(textOffset, slices) {
|
|
212622
|
+
for (const slice2 of slices)
|
|
212623
|
+
if (textOffset >= slice2.textStart && textOffset <= slice2.textEnd) {
|
|
212624
|
+
const delta = textOffset - slice2.textStart;
|
|
212625
|
+
return slice2.pmFrom + delta;
|
|
212626
|
+
}
|
|
212627
|
+
for (const slice2 of slices)
|
|
212628
|
+
if (slice2.textStart >= textOffset)
|
|
212629
|
+
return slice2.pmFrom;
|
|
212630
|
+
if (slices.length > 0) {
|
|
212631
|
+
const last2 = slices[slices.length - 1];
|
|
212632
|
+
if (textOffset >= last2.textEnd)
|
|
212633
|
+
return last2.pmTo;
|
|
212634
|
+
}
|
|
212635
|
+
return null;
|
|
212636
|
+
}
|
|
212637
|
+
function computeDirtySegmentIds(segments, segmentPositions, changedRanges) {
|
|
212638
|
+
if (changedRanges.length === 0)
|
|
212639
|
+
return /* @__PURE__ */ new Set;
|
|
212640
|
+
const dirty = /* @__PURE__ */ new Set;
|
|
212641
|
+
const sorted = segments.map((seg) => ({
|
|
212642
|
+
id: seg.id,
|
|
212643
|
+
pos: segmentPositions.get(seg.id) ?? -1
|
|
212644
|
+
})).filter((s2) => s2.pos >= 0).sort((a2, b$1) => a2.pos - b$1.pos);
|
|
212645
|
+
for (const range of changedRanges)
|
|
212646
|
+
for (let i4 = 0;i4 < sorted.length; i4++) {
|
|
212647
|
+
const seg = sorted[i4];
|
|
212648
|
+
const segEnd = sorted[i4 + 1]?.pos ?? Infinity;
|
|
212649
|
+
if (seg.pos < range.to && segEnd > range.from)
|
|
212650
|
+
dirty.add(seg.id);
|
|
212651
|
+
if (seg.pos <= range.from && segEnd >= range.from && i4 > 0)
|
|
212652
|
+
dirty.add(sorted[i4 - 1].id);
|
|
212653
|
+
}
|
|
212654
|
+
return dirty;
|
|
212655
|
+
}
|
|
212656
|
+
function hashSegmentText(text5) {
|
|
212657
|
+
let hash$3 = 2166136261;
|
|
212658
|
+
for (let i4 = 0;i4 < text5.length; i4++) {
|
|
212659
|
+
hash$3 ^= text5.charCodeAt(i4);
|
|
212660
|
+
hash$3 = Math.imul(hash$3, 16777619);
|
|
212661
|
+
}
|
|
212662
|
+
return (hash$3 >>> 0).toString(16);
|
|
212663
|
+
}
|
|
212664
|
+
function prioritizeByVisibility(segments, visibilitySource) {
|
|
212665
|
+
const visiblePages = visibilitySource.getVisiblePageIndices();
|
|
212666
|
+
if (!visiblePages || visiblePages.length === 0)
|
|
212667
|
+
return segments;
|
|
212668
|
+
const visibleSet = new Set(visiblePages);
|
|
212669
|
+
const visible = [];
|
|
212670
|
+
const rest = [];
|
|
212671
|
+
for (const seg of segments) {
|
|
212672
|
+
const pageIndex = seg.metadata.pageIndex;
|
|
212673
|
+
if (pageIndex !== undefined && visibleSet.has(pageIndex))
|
|
212674
|
+
visible.push(seg);
|
|
212675
|
+
else
|
|
212676
|
+
rest.push(seg);
|
|
212677
|
+
}
|
|
212678
|
+
return [...visible, ...rest];
|
|
212679
|
+
}
|
|
212680
|
+
function buildPaintSlices(issues) {
|
|
212681
|
+
const spellingIssues = issues.filter((i4) => i4.kind === "spelling");
|
|
212682
|
+
if (spellingIssues.length === 0)
|
|
212683
|
+
return [];
|
|
212684
|
+
const sorted = [...spellingIssues].sort((a2, b$1) => a2.pmFrom - b$1.pmFrom || a2.pmTo - b$1.pmTo);
|
|
212685
|
+
const slices = [];
|
|
212686
|
+
let current = null;
|
|
212687
|
+
for (const issue of sorted) {
|
|
212688
|
+
if (!current) {
|
|
212689
|
+
current = {
|
|
212690
|
+
pmFrom: issue.pmFrom,
|
|
212691
|
+
pmTo: issue.pmTo,
|
|
212692
|
+
kind: "spelling",
|
|
212693
|
+
issue
|
|
212694
|
+
};
|
|
212695
|
+
continue;
|
|
212696
|
+
}
|
|
212697
|
+
if (issue.pmFrom <= current.pmTo)
|
|
212698
|
+
current.pmTo = Math.max(current.pmTo, issue.pmTo);
|
|
212699
|
+
else {
|
|
212700
|
+
slices.push(current);
|
|
212701
|
+
current = {
|
|
212702
|
+
pmFrom: issue.pmFrom,
|
|
212703
|
+
pmTo: issue.pmTo,
|
|
212704
|
+
kind: "spelling",
|
|
212705
|
+
issue
|
|
212706
|
+
};
|
|
212707
|
+
}
|
|
212708
|
+
}
|
|
212709
|
+
if (current)
|
|
212710
|
+
slices.push(current);
|
|
212711
|
+
return slices;
|
|
212712
|
+
}
|
|
212713
|
+
function findSliceAtPosition(slices, pmPos) {
|
|
212714
|
+
let lo = 0;
|
|
212715
|
+
let hi = slices.length - 1;
|
|
212716
|
+
while (lo <= hi) {
|
|
212717
|
+
const mid = lo + hi >>> 1;
|
|
212718
|
+
const slice2 = slices[mid];
|
|
212719
|
+
if (pmPos < slice2.pmFrom)
|
|
212720
|
+
hi = mid - 1;
|
|
212721
|
+
else if (pmPos >= slice2.pmTo)
|
|
212722
|
+
lo = mid + 1;
|
|
212723
|
+
else
|
|
212724
|
+
return slice2;
|
|
212725
|
+
}
|
|
212726
|
+
return null;
|
|
212727
|
+
}
|
|
211909
212728
|
function mapWordFamilyFallback(wordFamily) {
|
|
211910
212729
|
if (!wordFamily)
|
|
211911
212730
|
return DEFAULT_GENERIC_FALLBACK2;
|
|
@@ -214117,217 +214936,6 @@ function sanitizeUrl(href) {
|
|
|
214117
214936
|
return null;
|
|
214118
214937
|
return sanitizeHref(href)?.href ?? null;
|
|
214119
214938
|
}
|
|
214120
|
-
function cssClassForKind(kind) {
|
|
214121
|
-
switch (kind) {
|
|
214122
|
-
case "spelling":
|
|
214123
|
-
return PROOFING_CSS.SPELLING;
|
|
214124
|
-
case "grammar":
|
|
214125
|
-
return PROOFING_CSS.GRAMMAR;
|
|
214126
|
-
case "style":
|
|
214127
|
-
return PROOFING_CSS.STYLE;
|
|
214128
|
-
}
|
|
214129
|
-
}
|
|
214130
|
-
function computeSplitSegments(spanPmStart, spanPmEnd, spanText, annotations) {
|
|
214131
|
-
const boundaries = /* @__PURE__ */ new Set;
|
|
214132
|
-
boundaries.add(spanPmStart);
|
|
214133
|
-
boundaries.add(spanPmEnd);
|
|
214134
|
-
for (const ann of annotations) {
|
|
214135
|
-
const clampedFrom = Math.max(ann.pmFrom, spanPmStart);
|
|
214136
|
-
const clampedTo = Math.min(ann.pmTo, spanPmEnd);
|
|
214137
|
-
if (clampedFrom > spanPmStart)
|
|
214138
|
-
boundaries.add(clampedFrom);
|
|
214139
|
-
if (clampedTo < spanPmEnd)
|
|
214140
|
-
boundaries.add(clampedTo);
|
|
214141
|
-
}
|
|
214142
|
-
const sorted = Array.from(boundaries).sort((a2, b$1) => a2 - b$1);
|
|
214143
|
-
const segments = [];
|
|
214144
|
-
for (let i4 = 0;i4 < sorted.length - 1; i4++) {
|
|
214145
|
-
const segPmStart = sorted[i4];
|
|
214146
|
-
const segPmEnd = sorted[i4 + 1];
|
|
214147
|
-
const textStart = segPmStart - spanPmStart;
|
|
214148
|
-
const textEnd = segPmEnd - spanPmStart;
|
|
214149
|
-
if (textEnd <= textStart || textStart >= spanText.length)
|
|
214150
|
-
continue;
|
|
214151
|
-
const clampedTextEnd = Math.min(textEnd, spanText.length);
|
|
214152
|
-
let proofingClass = null;
|
|
214153
|
-
for (const ann of annotations)
|
|
214154
|
-
if (ann.pmFrom <= segPmStart && ann.pmTo >= segPmEnd) {
|
|
214155
|
-
proofingClass = cssClassForKind(ann.kind);
|
|
214156
|
-
break;
|
|
214157
|
-
}
|
|
214158
|
-
segments.push({
|
|
214159
|
-
textStart,
|
|
214160
|
-
textEnd: clampedTextEnd,
|
|
214161
|
-
pmStart: segPmStart,
|
|
214162
|
-
pmEnd: segPmEnd,
|
|
214163
|
-
proofingClass
|
|
214164
|
-
});
|
|
214165
|
-
}
|
|
214166
|
-
return segments;
|
|
214167
|
-
}
|
|
214168
|
-
function replaceSpanWithSiblings(originalSpan, segments, spanText) {
|
|
214169
|
-
const parent = originalSpan.parentNode;
|
|
214170
|
-
if (!parent)
|
|
214171
|
-
return [];
|
|
214172
|
-
const doc$12 = originalSpan.ownerDocument;
|
|
214173
|
-
const siblings = [];
|
|
214174
|
-
for (const seg of segments) {
|
|
214175
|
-
const text5 = spanText.slice(seg.textStart, seg.textEnd);
|
|
214176
|
-
if (text5.length === 0)
|
|
214177
|
-
continue;
|
|
214178
|
-
const span = doc$12.createElement("span");
|
|
214179
|
-
for (let i4 = 0;i4 < originalSpan.attributes.length; i4++) {
|
|
214180
|
-
const attr = originalSpan.attributes[i4];
|
|
214181
|
-
span.setAttribute(attr.name, attr.value);
|
|
214182
|
-
}
|
|
214183
|
-
span.setAttribute("data-pm-start", String(seg.pmStart));
|
|
214184
|
-
span.setAttribute("data-pm-end", String(seg.pmEnd));
|
|
214185
|
-
if (seg.proofingClass) {
|
|
214186
|
-
span.classList.add(seg.proofingClass);
|
|
214187
|
-
span.setAttribute("aria-invalid", "spelling");
|
|
214188
|
-
}
|
|
214189
|
-
span.setAttribute(PROOFING_CSS.SPLIT_ATTR, "");
|
|
214190
|
-
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
214191
|
-
span.textContent = "";
|
|
214192
|
-
span.appendChild(doc$12.createTextNode(text5));
|
|
214193
|
-
splitOriginMap.set(span, originalSpan);
|
|
214194
|
-
siblings.push(span);
|
|
214195
|
-
}
|
|
214196
|
-
originalSpan.style.display = "none";
|
|
214197
|
-
originalSpan.setAttribute(PROOFING_CSS.DATA_ATTR, "original");
|
|
214198
|
-
const origPmStart = originalSpan.getAttribute("data-pm-start");
|
|
214199
|
-
const origPmEnd = originalSpan.getAttribute("data-pm-end");
|
|
214200
|
-
if (origPmStart)
|
|
214201
|
-
originalSpan.setAttribute("data-sd-orig-pm-start", origPmStart);
|
|
214202
|
-
if (origPmEnd)
|
|
214203
|
-
originalSpan.setAttribute("data-sd-orig-pm-end", origPmEnd);
|
|
214204
|
-
originalSpan.removeAttribute("data-pm-start");
|
|
214205
|
-
originalSpan.removeAttribute("data-pm-end");
|
|
214206
|
-
for (const sib of siblings)
|
|
214207
|
-
parent.insertBefore(sib, originalSpan);
|
|
214208
|
-
return siblings;
|
|
214209
|
-
}
|
|
214210
|
-
function restoreSplitSpans(container) {
|
|
214211
|
-
const splitSpans = Array.from(container.querySelectorAll(`[${PROOFING_CSS.SPLIT_ATTR}]`));
|
|
214212
|
-
if (splitSpans.length === 0)
|
|
214213
|
-
return false;
|
|
214214
|
-
const groupsByOriginal = /* @__PURE__ */ new Map;
|
|
214215
|
-
for (const span of splitSpans) {
|
|
214216
|
-
const original = splitOriginMap.get(span);
|
|
214217
|
-
if (!original)
|
|
214218
|
-
continue;
|
|
214219
|
-
const group = groupsByOriginal.get(original);
|
|
214220
|
-
if (group)
|
|
214221
|
-
group.push(span);
|
|
214222
|
-
else
|
|
214223
|
-
groupsByOriginal.set(original, [span]);
|
|
214224
|
-
}
|
|
214225
|
-
for (const [original, siblings] of groupsByOriginal) {
|
|
214226
|
-
const parent = original.parentNode;
|
|
214227
|
-
if (!parent)
|
|
214228
|
-
continue;
|
|
214229
|
-
unhideOriginalSpan(original);
|
|
214230
|
-
for (const sib of siblings)
|
|
214231
|
-
parent.removeChild(sib);
|
|
214232
|
-
}
|
|
214233
|
-
const remaining = Array.from(container.querySelectorAll(`[${PROOFING_CSS.SPLIT_ATTR}]`));
|
|
214234
|
-
for (const span of remaining)
|
|
214235
|
-
span.parentNode?.removeChild(span);
|
|
214236
|
-
const hiddenOriginals = Array.from(container.querySelectorAll(`[${PROOFING_CSS.DATA_ATTR}="original"]`));
|
|
214237
|
-
for (const el of hiddenOriginals)
|
|
214238
|
-
unhideOriginalSpan(el);
|
|
214239
|
-
return true;
|
|
214240
|
-
}
|
|
214241
|
-
function unhideOriginalSpan(el) {
|
|
214242
|
-
el.style.display = "";
|
|
214243
|
-
if (!el.style.cssText)
|
|
214244
|
-
el.removeAttribute("style");
|
|
214245
|
-
el.removeAttribute(PROOFING_CSS.DATA_ATTR);
|
|
214246
|
-
const savedStart = el.getAttribute("data-sd-orig-pm-start");
|
|
214247
|
-
const savedEnd = el.getAttribute("data-sd-orig-pm-end");
|
|
214248
|
-
if (savedStart) {
|
|
214249
|
-
el.setAttribute("data-pm-start", savedStart);
|
|
214250
|
-
el.removeAttribute("data-sd-orig-pm-start");
|
|
214251
|
-
}
|
|
214252
|
-
if (savedEnd) {
|
|
214253
|
-
el.setAttribute("data-pm-end", savedEnd);
|
|
214254
|
-
el.removeAttribute("data-sd-orig-pm-end");
|
|
214255
|
-
}
|
|
214256
|
-
}
|
|
214257
|
-
function applyProofingDecorations(container, annotations) {
|
|
214258
|
-
const hadPrevious = clearProofingDecorations(container);
|
|
214259
|
-
if (annotations.length === 0)
|
|
214260
|
-
return hadPrevious;
|
|
214261
|
-
const sorted = [...annotations].sort((a2, b$1) => a2.pmFrom - b$1.pmFrom);
|
|
214262
|
-
const spans = Array.from(container.querySelectorAll("[data-pm-start][data-pm-end]"));
|
|
214263
|
-
let mutated = false;
|
|
214264
|
-
for (const span of spans) {
|
|
214265
|
-
const pmStart = parseInt(span.getAttribute("data-pm-start"), 10);
|
|
214266
|
-
const pmEnd = parseInt(span.getAttribute("data-pm-end"), 10);
|
|
214267
|
-
if (isNaN(pmStart) || isNaN(pmEnd) || pmEnd <= pmStart)
|
|
214268
|
-
continue;
|
|
214269
|
-
if (!isLeafTextSpan(span))
|
|
214270
|
-
continue;
|
|
214271
|
-
const overlapping = findOverlapping(sorted, pmStart, pmEnd);
|
|
214272
|
-
if (overlapping.length === 0)
|
|
214273
|
-
continue;
|
|
214274
|
-
const text5 = span.textContent ?? "";
|
|
214275
|
-
if (text5.length === 0)
|
|
214276
|
-
continue;
|
|
214277
|
-
if (isCoveredBySingleAnnotation(pmStart, pmEnd, overlapping)) {
|
|
214278
|
-
span.classList.add(cssClassForKind(overlapping[0].kind));
|
|
214279
|
-
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
214280
|
-
span.setAttribute("aria-invalid", "spelling");
|
|
214281
|
-
mutated = true;
|
|
214282
|
-
} else {
|
|
214283
|
-
const segments = computeSplitSegments(pmStart, pmEnd, text5, overlapping);
|
|
214284
|
-
if (segments.length > 1) {
|
|
214285
|
-
replaceSpanWithSiblings(span, segments, text5);
|
|
214286
|
-
mutated = true;
|
|
214287
|
-
} else if (segments.length === 1 && segments[0].proofingClass) {
|
|
214288
|
-
span.classList.add(segments[0].proofingClass);
|
|
214289
|
-
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
214290
|
-
span.setAttribute("aria-invalid", "spelling");
|
|
214291
|
-
mutated = true;
|
|
214292
|
-
}
|
|
214293
|
-
}
|
|
214294
|
-
}
|
|
214295
|
-
return mutated || hadPrevious;
|
|
214296
|
-
}
|
|
214297
|
-
function clearProofingDecorations(container) {
|
|
214298
|
-
let cleared = false;
|
|
214299
|
-
const splitRestored = restoreSplitSpans(container);
|
|
214300
|
-
const decorated = Array.from(container.querySelectorAll(`[${PROOFING_CSS.DATA_ATTR}]`));
|
|
214301
|
-
for (const el of decorated) {
|
|
214302
|
-
el.classList.remove(PROOFING_CSS.SPELLING, PROOFING_CSS.GRAMMAR, PROOFING_CSS.STYLE);
|
|
214303
|
-
el.removeAttribute(PROOFING_CSS.DATA_ATTR);
|
|
214304
|
-
el.removeAttribute("aria-invalid");
|
|
214305
|
-
cleared = true;
|
|
214306
|
-
}
|
|
214307
|
-
return cleared || splitRestored;
|
|
214308
|
-
}
|
|
214309
|
-
function isLeafTextSpan(el) {
|
|
214310
|
-
const children = el.childNodes;
|
|
214311
|
-
if (children.length === 0)
|
|
214312
|
-
return false;
|
|
214313
|
-
for (let i4 = 0;i4 < children.length; i4++)
|
|
214314
|
-
if (children[i4].nodeType === Node.ELEMENT_NODE)
|
|
214315
|
-
return false;
|
|
214316
|
-
return true;
|
|
214317
|
-
}
|
|
214318
|
-
function findOverlapping(sorted, pmStart, pmEnd) {
|
|
214319
|
-
const result = [];
|
|
214320
|
-
for (const ann of sorted) {
|
|
214321
|
-
if (ann.pmFrom >= pmEnd)
|
|
214322
|
-
break;
|
|
214323
|
-
if (ann.pmTo > pmStart)
|
|
214324
|
-
result.push(ann);
|
|
214325
|
-
}
|
|
214326
|
-
return result;
|
|
214327
|
-
}
|
|
214328
|
-
function isCoveredBySingleAnnotation(pmStart, pmEnd, annotations) {
|
|
214329
|
-
return annotations.some((ann) => ann.pmFrom <= pmStart && ann.pmTo >= pmEnd);
|
|
214330
|
-
}
|
|
214331
214939
|
function assertRequiredBlockMeasurePair(label, blocks2, measures) {
|
|
214332
214940
|
if (blocks2.length !== measures.length)
|
|
214333
214941
|
throw new Error(`${label} blocks and measures must have the same length.`);
|
|
@@ -214368,289 +214976,6 @@ function buildLegacyPaintInput(layout, legacyState, flowMode, pageGap) {
|
|
|
214368
214976
|
footerMeasures: legacyState.footerMeasures
|
|
214369
214977
|
};
|
|
214370
214978
|
}
|
|
214371
|
-
function isSuppressed(issue, normalizedIgnored) {
|
|
214372
|
-
if (normalizedIgnored.size === 0)
|
|
214373
|
-
return false;
|
|
214374
|
-
const raw = issue.word ?? issue.message;
|
|
214375
|
-
if (!raw)
|
|
214376
|
-
return false;
|
|
214377
|
-
const normalized = raw.normalize("NFC").toLowerCase();
|
|
214378
|
-
return normalizedIgnored.has(normalized);
|
|
214379
|
-
}
|
|
214380
|
-
function resolveSegmentLanguage(paraNode, defaultLanguage) {
|
|
214381
|
-
const runLanguage = findFirstRunLanguage(paraNode);
|
|
214382
|
-
if (runLanguage)
|
|
214383
|
-
return runLanguage;
|
|
214384
|
-
const paraLang = extractParagraphLanguage(paraNode);
|
|
214385
|
-
if (paraLang)
|
|
214386
|
-
return paraLang;
|
|
214387
|
-
return defaultLanguage;
|
|
214388
|
-
}
|
|
214389
|
-
function findFirstRunLanguage(paraNode) {
|
|
214390
|
-
let lang = null;
|
|
214391
|
-
paraNode.descendants((node3) => {
|
|
214392
|
-
if (lang)
|
|
214393
|
-
return false;
|
|
214394
|
-
if (node3.type.name === "run") {
|
|
214395
|
-
const runProps = node3.attrs.runProperties;
|
|
214396
|
-
if (runProps?.lang?.val) {
|
|
214397
|
-
lang = runProps.lang.val;
|
|
214398
|
-
return false;
|
|
214399
|
-
}
|
|
214400
|
-
}
|
|
214401
|
-
return true;
|
|
214402
|
-
});
|
|
214403
|
-
return lang;
|
|
214404
|
-
}
|
|
214405
|
-
function extractParagraphLanguage(paraNode) {
|
|
214406
|
-
return paraNode.attrs.paragraphProperties?.lang?.val ?? null;
|
|
214407
|
-
}
|
|
214408
|
-
function extractSegmentsWithMaps(doc$12, defaultLanguage, pageResolver) {
|
|
214409
|
-
const segments = [];
|
|
214410
|
-
const offsetMaps = /* @__PURE__ */ new Map;
|
|
214411
|
-
const segmentPositions = /* @__PURE__ */ new Map;
|
|
214412
|
-
walkParagraphs(doc$12, (paraNode, paraPos, surface) => {
|
|
214413
|
-
const { text: text5, slices } = extractParagraphText(paraNode, paraPos);
|
|
214414
|
-
if (text5.length === 0)
|
|
214415
|
-
return;
|
|
214416
|
-
const segmentId = buildSegmentId(paraNode, paraPos);
|
|
214417
|
-
const language = resolveSegmentLanguage(paraNode, defaultLanguage ?? null);
|
|
214418
|
-
const pageIndex = pageResolver?.(paraPos);
|
|
214419
|
-
segments.push({
|
|
214420
|
-
id: segmentId,
|
|
214421
|
-
text: text5,
|
|
214422
|
-
language,
|
|
214423
|
-
metadata: {
|
|
214424
|
-
blockId: paraNode.attrs.sdBlockId,
|
|
214425
|
-
pageIndex,
|
|
214426
|
-
surface
|
|
214427
|
-
}
|
|
214428
|
-
});
|
|
214429
|
-
offsetMaps.set(segmentId, {
|
|
214430
|
-
segmentId,
|
|
214431
|
-
slices
|
|
214432
|
-
});
|
|
214433
|
-
segmentPositions.set(segmentId, paraPos);
|
|
214434
|
-
});
|
|
214435
|
-
return {
|
|
214436
|
-
segments,
|
|
214437
|
-
offsetMaps,
|
|
214438
|
-
segmentPositions
|
|
214439
|
-
};
|
|
214440
|
-
}
|
|
214441
|
-
function walkParagraphs(doc$12, visitor) {
|
|
214442
|
-
doc$12.descendants((node3, pos) => {
|
|
214443
|
-
const typeName = node3.type.name;
|
|
214444
|
-
if (typeName === "header" || typeName === "footer")
|
|
214445
|
-
return false;
|
|
214446
|
-
if (typeName === "paragraph") {
|
|
214447
|
-
visitor(node3, pos, isInsideTableCell(doc$12, pos) ? "table-cell" : "body");
|
|
214448
|
-
return false;
|
|
214449
|
-
}
|
|
214450
|
-
return true;
|
|
214451
|
-
});
|
|
214452
|
-
}
|
|
214453
|
-
function isInsideTableCell(doc$12, pos) {
|
|
214454
|
-
const resolved = doc$12.resolve(pos);
|
|
214455
|
-
for (let depth = resolved.depth;depth > 0; depth--) {
|
|
214456
|
-
const ancestor = resolved.node(depth);
|
|
214457
|
-
if (ancestor.type.name === "tableCell" || ancestor.type.name === "tableHeader")
|
|
214458
|
-
return true;
|
|
214459
|
-
}
|
|
214460
|
-
return false;
|
|
214461
|
-
}
|
|
214462
|
-
function extractParagraphText(paraNode, paraPos) {
|
|
214463
|
-
const parts = [];
|
|
214464
|
-
const slices = [];
|
|
214465
|
-
let textOffset = 0;
|
|
214466
|
-
const contentStart = paraPos + 1;
|
|
214467
|
-
paraNode.forEach((child, offset$1) => {
|
|
214468
|
-
processNode(child, contentStart + offset$1);
|
|
214469
|
-
});
|
|
214470
|
-
return {
|
|
214471
|
-
text: parts.join(""),
|
|
214472
|
-
slices
|
|
214473
|
-
};
|
|
214474
|
-
function processNode(node3, pos) {
|
|
214475
|
-
const typeName = node3.type.name;
|
|
214476
|
-
if (typeName === "run") {
|
|
214477
|
-
const runProps = node3.attrs.runProperties;
|
|
214478
|
-
if (runProps?.vanish === true) {
|
|
214479
|
-
emitBoundary();
|
|
214480
|
-
return;
|
|
214481
|
-
}
|
|
214482
|
-
if (runProps?.noProof === true) {
|
|
214483
|
-
emitBoundary();
|
|
214484
|
-
return;
|
|
214485
|
-
}
|
|
214486
|
-
const runContentStart = pos + 1;
|
|
214487
|
-
node3.forEach((child, childOff) => {
|
|
214488
|
-
processNode(child, runContentStart + childOff);
|
|
214489
|
-
});
|
|
214490
|
-
return;
|
|
214491
|
-
}
|
|
214492
|
-
if (node3.isText && node3.text) {
|
|
214493
|
-
if (hasTrackDeleteMark(node3))
|
|
214494
|
-
return;
|
|
214495
|
-
const text5 = node3.text;
|
|
214496
|
-
const pmFrom = pos;
|
|
214497
|
-
const pmTo = pos + text5.length;
|
|
214498
|
-
slices.push({
|
|
214499
|
-
textStart: textOffset,
|
|
214500
|
-
textEnd: textOffset + text5.length,
|
|
214501
|
-
pmFrom,
|
|
214502
|
-
pmTo
|
|
214503
|
-
});
|
|
214504
|
-
parts.push(text5);
|
|
214505
|
-
textOffset += text5.length;
|
|
214506
|
-
return;
|
|
214507
|
-
}
|
|
214508
|
-
if (isNonTextInlineNode(typeName)) {
|
|
214509
|
-
emitBoundary();
|
|
214510
|
-
return;
|
|
214511
|
-
}
|
|
214512
|
-
if (node3.childCount > 0) {
|
|
214513
|
-
const contentStart$1 = pos + 1;
|
|
214514
|
-
node3.forEach((child, childOff) => {
|
|
214515
|
-
processNode(child, contentStart$1 + childOff);
|
|
214516
|
-
});
|
|
214517
|
-
}
|
|
214518
|
-
}
|
|
214519
|
-
function emitBoundary() {
|
|
214520
|
-
if (parts.length > 0 && !parts[parts.length - 1].endsWith(" ")) {
|
|
214521
|
-
parts.push(" ");
|
|
214522
|
-
textOffset += 1;
|
|
214523
|
-
}
|
|
214524
|
-
}
|
|
214525
|
-
}
|
|
214526
|
-
function hasTrackDeleteMark(node3) {
|
|
214527
|
-
return node3.marks?.some((m$1) => m$1.type.name === "trackDelete") ?? false;
|
|
214528
|
-
}
|
|
214529
|
-
function isNonTextInlineNode(typeName) {
|
|
214530
|
-
return NON_TEXT_INLINE_NODES.has(typeName);
|
|
214531
|
-
}
|
|
214532
|
-
function buildSegmentId(paraNode, paraPos) {
|
|
214533
|
-
const blockId = paraNode.attrs.sdBlockId;
|
|
214534
|
-
return blockId ? `blk-${blockId}` : `pos-${paraPos}`;
|
|
214535
|
-
}
|
|
214536
|
-
function resolveIssuePmRangeFromSlices(issue, slices) {
|
|
214537
|
-
const pmFrom = textOffsetToPmPos(issue.start, slices);
|
|
214538
|
-
const pmTo = textOffsetToPmPos(issue.end, slices);
|
|
214539
|
-
if (pmFrom === null || pmTo === null || pmFrom >= pmTo)
|
|
214540
|
-
return null;
|
|
214541
|
-
return {
|
|
214542
|
-
...issue,
|
|
214543
|
-
pmFrom,
|
|
214544
|
-
pmTo
|
|
214545
|
-
};
|
|
214546
|
-
}
|
|
214547
|
-
function textOffsetToPmPos(textOffset, slices) {
|
|
214548
|
-
for (const slice2 of slices)
|
|
214549
|
-
if (textOffset >= slice2.textStart && textOffset <= slice2.textEnd) {
|
|
214550
|
-
const delta = textOffset - slice2.textStart;
|
|
214551
|
-
return slice2.pmFrom + delta;
|
|
214552
|
-
}
|
|
214553
|
-
for (const slice2 of slices)
|
|
214554
|
-
if (slice2.textStart >= textOffset)
|
|
214555
|
-
return slice2.pmFrom;
|
|
214556
|
-
if (slices.length > 0) {
|
|
214557
|
-
const last2 = slices[slices.length - 1];
|
|
214558
|
-
if (textOffset >= last2.textEnd)
|
|
214559
|
-
return last2.pmTo;
|
|
214560
|
-
}
|
|
214561
|
-
return null;
|
|
214562
|
-
}
|
|
214563
|
-
function computeDirtySegmentIds(segments, segmentPositions, changedRanges) {
|
|
214564
|
-
if (changedRanges.length === 0)
|
|
214565
|
-
return /* @__PURE__ */ new Set;
|
|
214566
|
-
const dirty = /* @__PURE__ */ new Set;
|
|
214567
|
-
const sorted = segments.map((seg) => ({
|
|
214568
|
-
id: seg.id,
|
|
214569
|
-
pos: segmentPositions.get(seg.id) ?? -1
|
|
214570
|
-
})).filter((s2) => s2.pos >= 0).sort((a2, b$1) => a2.pos - b$1.pos);
|
|
214571
|
-
for (const range of changedRanges)
|
|
214572
|
-
for (let i4 = 0;i4 < sorted.length; i4++) {
|
|
214573
|
-
const seg = sorted[i4];
|
|
214574
|
-
const segEnd = sorted[i4 + 1]?.pos ?? Infinity;
|
|
214575
|
-
if (seg.pos < range.to && segEnd > range.from)
|
|
214576
|
-
dirty.add(seg.id);
|
|
214577
|
-
if (seg.pos <= range.from && segEnd >= range.from && i4 > 0)
|
|
214578
|
-
dirty.add(sorted[i4 - 1].id);
|
|
214579
|
-
}
|
|
214580
|
-
return dirty;
|
|
214581
|
-
}
|
|
214582
|
-
function hashSegmentText(text5) {
|
|
214583
|
-
let hash$3 = 2166136261;
|
|
214584
|
-
for (let i4 = 0;i4 < text5.length; i4++) {
|
|
214585
|
-
hash$3 ^= text5.charCodeAt(i4);
|
|
214586
|
-
hash$3 = Math.imul(hash$3, 16777619);
|
|
214587
|
-
}
|
|
214588
|
-
return (hash$3 >>> 0).toString(16);
|
|
214589
|
-
}
|
|
214590
|
-
function prioritizeByVisibility(segments, visibilitySource) {
|
|
214591
|
-
const visiblePages = visibilitySource.getVisiblePageIndices();
|
|
214592
|
-
if (!visiblePages || visiblePages.length === 0)
|
|
214593
|
-
return segments;
|
|
214594
|
-
const visibleSet = new Set(visiblePages);
|
|
214595
|
-
const visible = [];
|
|
214596
|
-
const rest = [];
|
|
214597
|
-
for (const seg of segments) {
|
|
214598
|
-
const pageIndex = seg.metadata.pageIndex;
|
|
214599
|
-
if (pageIndex !== undefined && visibleSet.has(pageIndex))
|
|
214600
|
-
visible.push(seg);
|
|
214601
|
-
else
|
|
214602
|
-
rest.push(seg);
|
|
214603
|
-
}
|
|
214604
|
-
return [...visible, ...rest];
|
|
214605
|
-
}
|
|
214606
|
-
function buildPaintSlices(issues) {
|
|
214607
|
-
const spellingIssues = issues.filter((i4) => i4.kind === "spelling");
|
|
214608
|
-
if (spellingIssues.length === 0)
|
|
214609
|
-
return [];
|
|
214610
|
-
const sorted = [...spellingIssues].sort((a2, b$1) => a2.pmFrom - b$1.pmFrom || a2.pmTo - b$1.pmTo);
|
|
214611
|
-
const slices = [];
|
|
214612
|
-
let current = null;
|
|
214613
|
-
for (const issue of sorted) {
|
|
214614
|
-
if (!current) {
|
|
214615
|
-
current = {
|
|
214616
|
-
pmFrom: issue.pmFrom,
|
|
214617
|
-
pmTo: issue.pmTo,
|
|
214618
|
-
kind: "spelling",
|
|
214619
|
-
issue
|
|
214620
|
-
};
|
|
214621
|
-
continue;
|
|
214622
|
-
}
|
|
214623
|
-
if (issue.pmFrom <= current.pmTo)
|
|
214624
|
-
current.pmTo = Math.max(current.pmTo, issue.pmTo);
|
|
214625
|
-
else {
|
|
214626
|
-
slices.push(current);
|
|
214627
|
-
current = {
|
|
214628
|
-
pmFrom: issue.pmFrom,
|
|
214629
|
-
pmTo: issue.pmTo,
|
|
214630
|
-
kind: "spelling",
|
|
214631
|
-
issue
|
|
214632
|
-
};
|
|
214633
|
-
}
|
|
214634
|
-
}
|
|
214635
|
-
if (current)
|
|
214636
|
-
slices.push(current);
|
|
214637
|
-
return slices;
|
|
214638
|
-
}
|
|
214639
|
-
function findSliceAtPosition(slices, pmPos) {
|
|
214640
|
-
let lo = 0;
|
|
214641
|
-
let hi = slices.length - 1;
|
|
214642
|
-
while (lo <= hi) {
|
|
214643
|
-
const mid = lo + hi >>> 1;
|
|
214644
|
-
const slice2 = slices[mid];
|
|
214645
|
-
if (pmPos < slice2.pmFrom)
|
|
214646
|
-
hi = mid - 1;
|
|
214647
|
-
else if (pmPos >= slice2.pmTo)
|
|
214648
|
-
lo = mid + 1;
|
|
214649
|
-
else
|
|
214650
|
-
return slice2;
|
|
214651
|
-
}
|
|
214652
|
-
return null;
|
|
214653
|
-
}
|
|
214654
214979
|
function appendToArrayMap(map$12, key$1, value) {
|
|
214655
214980
|
const existing = map$12.get(key$1);
|
|
214656
214981
|
if (existing) {
|
|
@@ -233209,7 +233534,13 @@ var Node$13 = class Node$14 {
|
|
|
233209
233534
|
const attrs = {
|
|
233210
233535
|
...sdBlockId ? { sdBlockId } : undefined,
|
|
233211
233536
|
...paraId ? { paraId } : undefined,
|
|
233212
|
-
paragraphProperties: {
|
|
233537
|
+
paragraphProperties: {
|
|
233538
|
+
styleId: `Heading${level}`,
|
|
233539
|
+
numberingProperties: {
|
|
233540
|
+
numId: "0",
|
|
233541
|
+
ilvl: "0"
|
|
233542
|
+
}
|
|
233543
|
+
}
|
|
233213
233544
|
};
|
|
233214
233545
|
const normalizedText = typeof text5 === "string" ? text5 : "";
|
|
233215
233546
|
const textNode = normalizedText.length > 0 ? state.schema.text(normalizedText) : null;
|
|
@@ -233684,24 +234015,25 @@ var Node$13 = class Node$14 {
|
|
|
233684
234015
|
if (paragraphsInSelection.length > 0) {
|
|
233685
234016
|
const firstPara = paragraphsInSelection[0];
|
|
233686
234017
|
const lastPara = paragraphsInSelection[paragraphsInSelection.length - 1];
|
|
233687
|
-
const
|
|
233688
|
-
const
|
|
233689
|
-
const
|
|
233690
|
-
const
|
|
233691
|
-
const
|
|
233692
|
-
|
|
233693
|
-
|
|
233694
|
-
|
|
233695
|
-
|
|
233696
|
-
|
|
233697
|
-
|
|
233698
|
-
|
|
233699
|
-
|
|
233700
|
-
|
|
233701
|
-
|
|
233702
|
-
tr.setSelection(
|
|
233703
|
-
|
|
233704
|
-
|
|
234018
|
+
const firstParagraphPos = firstPara.pos;
|
|
234019
|
+
const lastParagraphPos = lastPara.pos;
|
|
234020
|
+
const firstNode = tr.doc.nodeAt(firstParagraphPos);
|
|
234021
|
+
const lastNode = tr.doc.nodeAt(lastParagraphPos);
|
|
234022
|
+
const restoredSelectionRange = computeToggleListSelectionRange({
|
|
234023
|
+
selectionWasCollapsed: selection.empty,
|
|
234024
|
+
affectedParagraphCount: paragraphsInSelection.length,
|
|
234025
|
+
firstParagraphPos,
|
|
234026
|
+
lastParagraphPos,
|
|
234027
|
+
firstNode,
|
|
234028
|
+
lastNode
|
|
234029
|
+
});
|
|
234030
|
+
if (restoredSelectionRange && restoredSelectionRange.from >= 0 && restoredSelectionRange.to <= tr.doc.content.size && restoredSelectionRange.from <= restoredSelectionRange.to)
|
|
234031
|
+
try {
|
|
234032
|
+
if (selection.empty && paragraphsInSelection.length === 1)
|
|
234033
|
+
tr.setSelection(Selection.near(tr.doc.resolve(restoredSelectionRange.to), -1));
|
|
234034
|
+
else
|
|
234035
|
+
tr.setSelection(TextSelection2.create(tr.doc, restoredSelectionRange.from, restoredSelectionRange.to));
|
|
234036
|
+
} catch {}
|
|
233705
234037
|
}
|
|
233706
234038
|
dispatch(tr);
|
|
233707
234039
|
return true;
|
|
@@ -243317,7 +243649,7 @@ var Node$13 = class Node$14 {
|
|
|
243317
243649
|
domAvailabilityCache = false;
|
|
243318
243650
|
return false;
|
|
243319
243651
|
}
|
|
243320
|
-
}, summaryVersion = "1.23.
|
|
243652
|
+
}, summaryVersion = "1.23.1", nodeKeys, markKeys, transformListsInCopiedContent = (html3) => {
|
|
243321
243653
|
const container = document.createElement("div");
|
|
243322
243654
|
container.innerHTML = html3;
|
|
243323
243655
|
const result = [];
|
|
@@ -243642,7 +243974,7 @@ var Node$13 = class Node$14 {
|
|
|
243642
243974
|
console.warn("Failed to initialize developer tools:", error3);
|
|
243643
243975
|
}
|
|
243644
243976
|
}
|
|
243645
|
-
}, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, PRESET_KIND_MAP, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, _setValueDelegate, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES$1, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART$1 = "word/settings.xml", WORD_DEFAULT_TBL_LOOK, FLAG_TO_OOXML_KEY, INVERTED_FLAGS, XML_KEY_TO_STYLE_OPTION, CLEARED_BORDER_OOXML, TABLE_MARGIN_KEY_GROUPS, TABLE_ADAPTER_DISPATCH, ROW_TARGETED_TABLE_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, V2_COVERAGE, SNAPSHOT_VERSION_V2 = "sd-diff-snapshot/v2", PAYLOAD_VERSION_V1 = "sd-diff-payload/v1", PAYLOAD_VERSION_V2 = "sd-diff-payload/v2", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SETTINGS_PART, SPECIAL_NOTE_TYPES, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.23.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension2) => {
|
|
243977
|
+
}, BLANK_DOCX_BASE64 = `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`, BLANK_DOCX_DATA_URI, TAB_LEADER_TO_SEPARATOR, SEPARATOR_TO_TAB_LEADER, DEFAULT_TOC_CONFIG, SWITCH_PATTERN$1, BULLET_FORMATS$1, LOCK_MODE_TO_SDT_LOCK, SNIPPET_PADDING = 30, DUAL_KIND_TYPES, KNOWN_BLOCK_PM_NODE_TYPES, KNOWN_INLINE_PM_NODE_TYPES, MAX_PATTERN_LENGTH = 1024, TOGGLE_MARK_SPECS, CORE_MARK_NAMES, METADATA_MARK_NAMES, CSS_NAMED_COLORS, V3_PREFIX = "text:", V4_PREFIX = "text:v4:", HEADING_STYLE_DEPTH, BULLET_FORMATS, MARK_PRIORITY, remarkProcessor, DEFAULT_UNFLATTEN_LISTS = true, HEADING_STYLE_PATTERN, REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, BOOLEAN_INLINE_MARK_KEYS, TEXT_STYLE_KEYS, PRESERVE_RUN_PROPERTIES_META_KEY = "sdPreserveRunPropertiesKeys", CONTENT_CAPABILITIES, INLINE_CAPABILITIES, SDT_LOCK_TO_LOCK_MODE, BODY_LOCATOR2, STUB_WHERE, EMPTY_RESOLUTION, CONTAINER_NODE_TYPES, VALID_EDGE_NODE_TYPES3, FALLBACK_STORE_KEY = "__documentApiComments", STYLES_PART = "word/styles.xml", PROPERTIES_KEY_BY_CHANNEL, XML_PATH_BY_CHANNEL2, UNDERLINE_API_TO_STORAGE, UNDERLINE_STORAGE_TO_API, HEX_SUBKEYS_BY_PROPERTY, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, INDENT_PER_LEVEL_TWIPS = 720, HANGING_INDENT_TWIPS = 360, ORDERED_PRESET_CONFIG, BULLET_PRESET_CONFIG, PRESET_TEMPLATES, LevelFormattingHelpers, PRESET_KIND_MAP, NUMBERING_PART = "word/numbering.xml", DEFAULT_PRESET_FOR_KIND, _setValueDelegate, PREVIEW_TEXT_MAX_LENGTH = 2000, BLOCK_PREVIEW_MAX_LENGTH = 200, EDGE_NODE_TYPES$1, POINTS_TO_PIXELS, POINTS_TO_TWIPS = 20, PIXELS_TO_TWIPS, DEFAULT_TABLE_GRID_WIDTH_TWIPS = 1500, SETTINGS_PART$1 = "word/settings.xml", WORD_DEFAULT_TBL_LOOK, FLAG_TO_OOXML_KEY, INVERTED_FLAGS, XML_KEY_TO_STYLE_OPTION, CLEARED_BORDER_OOXML, TABLE_MARGIN_KEY_GROUPS, TABLE_ADAPTER_DISPATCH, ROW_TARGETED_TABLE_OPS, registered = false, STYLES_PART_ID = "word/styles.xml", stylesPartDescriptor, settingsPartDescriptor, RELS_PART_ID2 = "word/_rels/document.xml.rels", RELS_XMLNS2 = "http://schemas.openxmlformats.org/package/2006/relationships", HEADER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE$1 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", relsPartDescriptor, HISTORY_UNSAFE_OPS, CANONICAL_COMMENT_IGNORED_KEYS, INITIAL_HASH, ROUND_CONSTANTS, V1_COVERAGE, V2_COVERAGE, SNAPSHOT_VERSION_V2 = "sd-diff-snapshot/v2", PAYLOAD_VERSION_V1 = "sd-diff-payload/v1", PAYLOAD_VERSION_V2 = "sd-diff-payload/v2", ENGINE_ID = "super-editor", STAGED_CONVERTER_KEYS, DiffServiceError, DEFAULT_LEVEL = 1, SWITCH_PATTERN, TOC_BOOKMARK_PREFIX = "_Toc", DEFAULT_RIGHT_TAB_POS = 9350, TAB_LEADER_MAP, NO_ENTRIES_PLACEHOLDER, TC_LEVEL_MIN = 1, TC_LEVEL_MAX = 9, ALLOWED_WRAP_ATTRS, WRAP_TYPES_SUPPORTING_SIDE, WRAP_TYPES_SUPPORTING_DISTANCES, RELATIVE_HEIGHT_MIN = 0, RELATIVE_HEIGHT_MAX = 4294967295, FORBIDDEN_RAW_PATCH_NAMES, CONTROL_TYPE_SDT_PR_ELEMENTS, DEFAULT_CHECKBOX_SYMBOL_FONT2 = "MS Gothic", DEFAULT_CHECKBOX_CHECKED_HEX2 = "2612", DEFAULT_CHECKBOX_UNCHECKED_HEX2 = "2610", VARIANT_ORDER, KIND_ORDER, HEADER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", FOOTER_RELATIONSHIP_TYPE3 = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", DOCUMENT_RELS_PATH2 = "word/_rels/document.xml.rels", HEADER_FILE_PATTERN2, FOOTER_FILE_PATTERN2, SETTINGS_PART, SPECIAL_NOTE_TYPES, RESTART_POLICY_TO_OOXML, VALID_DISPLAYS, REFERENCE_BLOCK_PREFIX, CAPTION_STYLE_NAMES, CAPTION_PARAGRAPH_STYLE_ID = "Caption", CAPTION_FORMAT_TO_OOXML, DOCUMENT_STAT_FIELD_TYPES, TOA_LEADER_REVERSE_MAP, EDGE_NODE_TYPES, CONTENT_TYPES_PART_ID = "[Content_Types].xml", CONTENT_TYPES_NS = "http://schemas.openxmlformats.org/package/2006/content-types", contentTypesPartDescriptor, empty_exports, init_empty, CURRENT_APP_VERSION2 = "1.23.1", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension2) => {
|
|
243646
243978
|
const extensionLike = extension2;
|
|
243647
243979
|
const config2 = extensionLike?.config;
|
|
243648
243980
|
const ExtensionCtor = extensionLike?.constructor;
|
|
@@ -244293,6 +244625,559 @@ var Node$13 = class Node$14 {
|
|
|
244293
244625
|
annotation.style.position = "relative";
|
|
244294
244626
|
annotation.appendChild(caretAnchor);
|
|
244295
244627
|
}
|
|
244628
|
+
}, PROOFING_CSS, splitOriginMap, PresentationProofingDecorator = class {
|
|
244629
|
+
#container = null;
|
|
244630
|
+
setContainer(container) {
|
|
244631
|
+
this.#container = container;
|
|
244632
|
+
}
|
|
244633
|
+
applyAnnotations(annotations) {
|
|
244634
|
+
const container = this.#container;
|
|
244635
|
+
if (!container)
|
|
244636
|
+
return false;
|
|
244637
|
+
if (!annotations || annotations.length === 0)
|
|
244638
|
+
return clearProofingDecorations(container);
|
|
244639
|
+
return applyProofingDecorations(container, annotations);
|
|
244640
|
+
}
|
|
244641
|
+
clear() {
|
|
244642
|
+
const container = this.#container;
|
|
244643
|
+
if (!container)
|
|
244644
|
+
return false;
|
|
244645
|
+
return clearProofingDecorations(container);
|
|
244646
|
+
}
|
|
244647
|
+
}, PresentationPostPaintPipeline = class {
|
|
244648
|
+
#fieldAnnotationLayer;
|
|
244649
|
+
#commentHighlightDecorator;
|
|
244650
|
+
#decorationBridge;
|
|
244651
|
+
#proofingDecorator;
|
|
244652
|
+
constructor(deps = {}) {
|
|
244653
|
+
this.#fieldAnnotationLayer = deps.fieldAnnotationLayer ?? new FieldAnnotationInteractionLayer;
|
|
244654
|
+
this.#commentHighlightDecorator = deps.commentHighlightDecorator ?? new CommentHighlightDecorator;
|
|
244655
|
+
this.#decorationBridge = deps.decorationBridge ?? new DecorationBridge;
|
|
244656
|
+
this.#proofingDecorator = deps.proofingDecorator ?? new PresentationProofingDecorator;
|
|
244657
|
+
}
|
|
244658
|
+
setContainer(container) {
|
|
244659
|
+
this.#fieldAnnotationLayer.setContainer(container);
|
|
244660
|
+
this.#commentHighlightDecorator.setContainer(container);
|
|
244661
|
+
this.#proofingDecorator.setContainer(container);
|
|
244662
|
+
}
|
|
244663
|
+
setActiveComment(commentId) {
|
|
244664
|
+
return this.#commentHighlightDecorator.setActiveComment(commentId);
|
|
244665
|
+
}
|
|
244666
|
+
recordDecorationTransaction(transaction) {
|
|
244667
|
+
this.#decorationBridge.recordTransaction(transaction);
|
|
244668
|
+
}
|
|
244669
|
+
hasDecorationChanges(editorState) {
|
|
244670
|
+
return this.#decorationBridge.hasChanges(editorState);
|
|
244671
|
+
}
|
|
244672
|
+
collectDecorationRanges(editorState) {
|
|
244673
|
+
return this.#decorationBridge.collectDecorationRanges(editorState);
|
|
244674
|
+
}
|
|
244675
|
+
syncDecorations(editorState, domPositionIndex, options) {
|
|
244676
|
+
if (!editorState)
|
|
244677
|
+
return false;
|
|
244678
|
+
return this.#decorationBridge.sync(editorState, domPositionIndex, options);
|
|
244679
|
+
}
|
|
244680
|
+
applyCommentHighlights() {
|
|
244681
|
+
this.#commentHighlightDecorator.apply();
|
|
244682
|
+
}
|
|
244683
|
+
syncInlineStyleLayers(editorState, domPositionIndex) {
|
|
244684
|
+
this.applyCommentHighlights();
|
|
244685
|
+
return this.syncDecorations(editorState, domPositionIndex);
|
|
244686
|
+
}
|
|
244687
|
+
applyProofingAnnotations(annotations, rebuildDomPositionIndex) {
|
|
244688
|
+
const mutated = this.#proofingDecorator.applyAnnotations(annotations);
|
|
244689
|
+
if (mutated)
|
|
244690
|
+
rebuildDomPositionIndex();
|
|
244691
|
+
return mutated;
|
|
244692
|
+
}
|
|
244693
|
+
refreshAfterPaint(options) {
|
|
244694
|
+
this.#fieldAnnotationLayer.apply(options.layoutEpoch);
|
|
244695
|
+
options.rebuildDomPositionIndex();
|
|
244696
|
+
this.syncInlineStyleLayers(options.editorState, options.domPositionIndex);
|
|
244697
|
+
this.applyProofingAnnotations(options.proofingAnnotations, options.rebuildDomPositionIndex);
|
|
244698
|
+
options.reapplyStructuredContentHover?.();
|
|
244699
|
+
}
|
|
244700
|
+
destroy() {
|
|
244701
|
+
this.#proofingDecorator.clear();
|
|
244702
|
+
this.#fieldAnnotationLayer.clear();
|
|
244703
|
+
this.#commentHighlightDecorator.destroy();
|
|
244704
|
+
this.#decorationBridge.destroy();
|
|
244705
|
+
}
|
|
244706
|
+
}, ProofingStore = class {
|
|
244707
|
+
#issuesBySegment = /* @__PURE__ */ new Map;
|
|
244708
|
+
addIssue(issue) {
|
|
244709
|
+
const list5 = this.#issuesBySegment.get(issue.segmentId);
|
|
244710
|
+
if (list5)
|
|
244711
|
+
list5.push(issue);
|
|
244712
|
+
else
|
|
244713
|
+
this.#issuesBySegment.set(issue.segmentId, [issue]);
|
|
244714
|
+
}
|
|
244715
|
+
remapIssues(segmentIds, mapping, recheckId) {
|
|
244716
|
+
for (const id2 of segmentIds) {
|
|
244717
|
+
const list5 = this.#issuesBySegment.get(id2);
|
|
244718
|
+
if (!list5)
|
|
244719
|
+
continue;
|
|
244720
|
+
const surviving = [];
|
|
244721
|
+
for (const issue of list5) {
|
|
244722
|
+
const fromResult = mapping.mapResult(issue.pmFrom, -1);
|
|
244723
|
+
const toResult2 = mapping.mapResult(issue.pmTo, 1);
|
|
244724
|
+
if (fromResult.deleted || toResult2.deleted)
|
|
244725
|
+
continue;
|
|
244726
|
+
if (fromResult.pos >= toResult2.pos)
|
|
244727
|
+
continue;
|
|
244728
|
+
issue.pmFrom = fromResult.pos;
|
|
244729
|
+
issue.pmTo = toResult2.pos;
|
|
244730
|
+
issue.state = "mapped";
|
|
244731
|
+
issue.recheckId = recheckId;
|
|
244732
|
+
surviving.push(issue);
|
|
244733
|
+
}
|
|
244734
|
+
if (surviving.length > 0)
|
|
244735
|
+
this.#issuesBySegment.set(id2, surviving);
|
|
244736
|
+
else
|
|
244737
|
+
this.#issuesBySegment.delete(id2);
|
|
244738
|
+
}
|
|
244739
|
+
}
|
|
244740
|
+
replaceBatchResults(recheckIds, coveredSegmentIds, freshIssues) {
|
|
244741
|
+
for (const segId of coveredSegmentIds) {
|
|
244742
|
+
const list5 = this.#issuesBySegment.get(segId);
|
|
244743
|
+
if (!list5)
|
|
244744
|
+
continue;
|
|
244745
|
+
const filtered = list5.filter((issue) => issue.recheckId === null || !recheckIds.has(issue.recheckId));
|
|
244746
|
+
if (filtered.length > 0)
|
|
244747
|
+
this.#issuesBySegment.set(segId, filtered);
|
|
244748
|
+
else
|
|
244749
|
+
this.#issuesBySegment.delete(segId);
|
|
244750
|
+
}
|
|
244751
|
+
for (const issue of freshIssues)
|
|
244752
|
+
this.addIssue(issue);
|
|
244753
|
+
}
|
|
244754
|
+
removeBySegmentIds(ids) {
|
|
244755
|
+
for (const id2 of ids)
|
|
244756
|
+
this.#issuesBySegment.delete(id2);
|
|
244757
|
+
}
|
|
244758
|
+
removeOrphanedSegments(currentSegmentIds) {
|
|
244759
|
+
for (const segId of this.#issuesBySegment.keys())
|
|
244760
|
+
if (!currentSegmentIds.has(segId))
|
|
244761
|
+
this.#issuesBySegment.delete(segId);
|
|
244762
|
+
}
|
|
244763
|
+
clear() {
|
|
244764
|
+
this.#issuesBySegment.clear();
|
|
244765
|
+
}
|
|
244766
|
+
getAllIssues() {
|
|
244767
|
+
const result = [];
|
|
244768
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244769
|
+
result.push(...list5);
|
|
244770
|
+
return result;
|
|
244771
|
+
}
|
|
244772
|
+
getDisplayIssues(ignoredWords) {
|
|
244773
|
+
const normalizedIgnored = new Set(ignoredWords.map((w) => w.normalize("NFC").toLowerCase()));
|
|
244774
|
+
const result = [];
|
|
244775
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244776
|
+
for (const issue of list5) {
|
|
244777
|
+
if (issue.kind !== "spelling")
|
|
244778
|
+
continue;
|
|
244779
|
+
if (isSuppressed(issue, normalizedIgnored))
|
|
244780
|
+
continue;
|
|
244781
|
+
result.push(issue);
|
|
244782
|
+
}
|
|
244783
|
+
return result;
|
|
244784
|
+
}
|
|
244785
|
+
getActiveRecheckIds() {
|
|
244786
|
+
const ids = /* @__PURE__ */ new Set;
|
|
244787
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244788
|
+
for (const issue of list5)
|
|
244789
|
+
if (issue.state === "mapped" && issue.recheckId !== null)
|
|
244790
|
+
ids.add(issue.recheckId);
|
|
244791
|
+
return ids;
|
|
244792
|
+
}
|
|
244793
|
+
get isEmpty() {
|
|
244794
|
+
return this.#issuesBySegment.size === 0;
|
|
244795
|
+
}
|
|
244796
|
+
get size() {
|
|
244797
|
+
let count2 = 0;
|
|
244798
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244799
|
+
count2 += list5.length;
|
|
244800
|
+
return count2;
|
|
244801
|
+
}
|
|
244802
|
+
}, NON_TEXT_INLINE_NODES, DEFAULT_DEBOUNCE_MS = 500, DEFAULT_MAX_WAIT_MS = 2000, DEFAULT_TIMEOUT_MS = 1e4, DEFAULT_MAX_CONCURRENT = 2, DEFAULT_MAX_SEGMENTS_PER_BATCH = 20, DEFAULT_MAX_SUGGESTIONS = 5, ProofingSessionManager = class {
|
|
244803
|
+
#config;
|
|
244804
|
+
#provider = null;
|
|
244805
|
+
#capabilities = null;
|
|
244806
|
+
#status = "disabled";
|
|
244807
|
+
#store = new ProofingStore;
|
|
244808
|
+
#offsetMaps = /* @__PURE__ */ new Map;
|
|
244809
|
+
#segmentHashes = /* @__PURE__ */ new Map;
|
|
244810
|
+
#debounceTimer = null;
|
|
244811
|
+
#pendingAbortControllers = /* @__PURE__ */ new Set;
|
|
244812
|
+
#inFlightCount = 0;
|
|
244813
|
+
#documentEpoch = 0;
|
|
244814
|
+
#disposed = false;
|
|
244815
|
+
#pendingSegments = [];
|
|
244816
|
+
#nextRecheckId = 0;
|
|
244817
|
+
#isComposing = false;
|
|
244818
|
+
#lastCheckFiredAt = 0;
|
|
244819
|
+
#visibilitySource = null;
|
|
244820
|
+
#documentId = null;
|
|
244821
|
+
#pageResolver = null;
|
|
244822
|
+
#lastDoc = null;
|
|
244823
|
+
#lastSegments = [];
|
|
244824
|
+
constructor(config2 = {}) {
|
|
244825
|
+
this.onResultsChanged = null;
|
|
244826
|
+
this.#config = {
|
|
244827
|
+
enabled: config2.enabled ?? false,
|
|
244828
|
+
debounceMs: config2.debounceMs ?? DEFAULT_DEBOUNCE_MS,
|
|
244829
|
+
maxSuggestions: config2.maxSuggestions ?? DEFAULT_MAX_SUGGESTIONS,
|
|
244830
|
+
visibleFirst: config2.visibleFirst ?? true,
|
|
244831
|
+
allowIgnoreWord: config2.allowIgnoreWord ?? true,
|
|
244832
|
+
defaultLanguage: config2.defaultLanguage ?? null,
|
|
244833
|
+
ignoredWords: config2.ignoredWords ?? [],
|
|
244834
|
+
timeoutMs: config2.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
244835
|
+
maxConcurrentRequests: config2.maxConcurrentRequests ?? DEFAULT_MAX_CONCURRENT,
|
|
244836
|
+
maxSegmentsPerBatch: config2.maxSegmentsPerBatch ?? DEFAULT_MAX_SEGMENTS_PER_BATCH,
|
|
244837
|
+
onProofingError: config2.onProofingError ?? null,
|
|
244838
|
+
onStatusChange: config2.onStatusChange ?? null
|
|
244839
|
+
};
|
|
244840
|
+
if (config2.provider)
|
|
244841
|
+
this.#provider = config2.provider;
|
|
244842
|
+
if (this.#config.enabled && this.#provider)
|
|
244843
|
+
this.#setStatus("idle");
|
|
244844
|
+
}
|
|
244845
|
+
get status() {
|
|
244846
|
+
return this.#status;
|
|
244847
|
+
}
|
|
244848
|
+
get isEnabled() {
|
|
244849
|
+
return this.#config.enabled && this.#provider !== null;
|
|
244850
|
+
}
|
|
244851
|
+
get config() {
|
|
244852
|
+
return this.#config;
|
|
244853
|
+
}
|
|
244854
|
+
setVisibilitySource(source) {
|
|
244855
|
+
this.#visibilitySource = source;
|
|
244856
|
+
}
|
|
244857
|
+
setDocumentId(id2) {
|
|
244858
|
+
this.#documentId = id2;
|
|
244859
|
+
}
|
|
244860
|
+
setPageResolver(resolver2) {
|
|
244861
|
+
this.#pageResolver = resolver2;
|
|
244862
|
+
}
|
|
244863
|
+
setComposing(composing) {
|
|
244864
|
+
this.#isComposing = composing;
|
|
244865
|
+
if (!composing && this.#lastSegments.length > 0 && this.isEnabled)
|
|
244866
|
+
this.#scheduleDebouncedCheck(this.#lastSegments);
|
|
244867
|
+
}
|
|
244868
|
+
getPaintSlices(activeWordRange) {
|
|
244869
|
+
if (!this.isEnabled)
|
|
244870
|
+
return [];
|
|
244871
|
+
const slices = buildPaintSlices(this.#store.getDisplayIssues(this.#config.ignoredWords));
|
|
244872
|
+
if (!activeWordRange)
|
|
244873
|
+
return slices;
|
|
244874
|
+
return slices.filter((s2) => s2.pmTo <= activeWordRange.from || s2.pmFrom >= activeWordRange.to);
|
|
244875
|
+
}
|
|
244876
|
+
getIssueAtPosition(pmPos, activeWordRange) {
|
|
244877
|
+
return findSliceAtPosition(this.getPaintSlices(activeWordRange), pmPos)?.issue ?? null;
|
|
244878
|
+
}
|
|
244879
|
+
updateConfig(patch3, doc$12) {
|
|
244880
|
+
const prevEnabled = this.#config.enabled;
|
|
244881
|
+
const prevProvider = this.#provider;
|
|
244882
|
+
const needsRecheck = patch3.provider !== undefined || patch3.defaultLanguage !== undefined;
|
|
244883
|
+
if (patch3.debounceMs !== undefined)
|
|
244884
|
+
this.#config.debounceMs = patch3.debounceMs;
|
|
244885
|
+
if (patch3.maxSuggestions !== undefined)
|
|
244886
|
+
this.#config.maxSuggestions = patch3.maxSuggestions;
|
|
244887
|
+
if (patch3.visibleFirst !== undefined)
|
|
244888
|
+
this.#config.visibleFirst = patch3.visibleFirst;
|
|
244889
|
+
if (patch3.allowIgnoreWord !== undefined)
|
|
244890
|
+
this.#config.allowIgnoreWord = patch3.allowIgnoreWord;
|
|
244891
|
+
if (patch3.timeoutMs !== undefined)
|
|
244892
|
+
this.#config.timeoutMs = patch3.timeoutMs;
|
|
244893
|
+
if (patch3.maxConcurrentRequests !== undefined)
|
|
244894
|
+
this.#config.maxConcurrentRequests = patch3.maxConcurrentRequests;
|
|
244895
|
+
if (patch3.maxSegmentsPerBatch !== undefined)
|
|
244896
|
+
this.#config.maxSegmentsPerBatch = patch3.maxSegmentsPerBatch;
|
|
244897
|
+
if (patch3.onProofingError !== undefined)
|
|
244898
|
+
this.#config.onProofingError = patch3.onProofingError ?? null;
|
|
244899
|
+
if (patch3.onStatusChange !== undefined)
|
|
244900
|
+
this.#config.onStatusChange = patch3.onStatusChange ?? null;
|
|
244901
|
+
if (patch3.defaultLanguage !== undefined)
|
|
244902
|
+
this.#config.defaultLanguage = patch3.defaultLanguage ?? null;
|
|
244903
|
+
if (patch3.ignoredWords !== undefined) {
|
|
244904
|
+
this.#config.ignoredWords = patch3.ignoredWords ?? [];
|
|
244905
|
+
this.onResultsChanged?.();
|
|
244906
|
+
}
|
|
244907
|
+
if (patch3.provider !== undefined) {
|
|
244908
|
+
if (prevProvider && prevProvider !== patch3.provider)
|
|
244909
|
+
prevProvider.dispose?.();
|
|
244910
|
+
this.#provider = patch3.provider ?? null;
|
|
244911
|
+
this.#capabilities = null;
|
|
244912
|
+
}
|
|
244913
|
+
if (patch3.enabled !== undefined) {
|
|
244914
|
+
this.#config.enabled = patch3.enabled;
|
|
244915
|
+
if (!patch3.enabled) {
|
|
244916
|
+
this.#cancelAll();
|
|
244917
|
+
this.#store.clear();
|
|
244918
|
+
this.#segmentHashes.clear();
|
|
244919
|
+
this.#offsetMaps.clear();
|
|
244920
|
+
this.#setStatus("disabled");
|
|
244921
|
+
this.onResultsChanged?.();
|
|
244922
|
+
return;
|
|
244923
|
+
}
|
|
244924
|
+
if (patch3.enabled && !prevEnabled && doc$12) {
|
|
244925
|
+
this.#setStatus("idle");
|
|
244926
|
+
this.#scheduleFullCheck(doc$12);
|
|
244927
|
+
return;
|
|
244928
|
+
}
|
|
244929
|
+
}
|
|
244930
|
+
if (needsRecheck && this.isEnabled && doc$12) {
|
|
244931
|
+
this.#cancelAll();
|
|
244932
|
+
this.#documentEpoch++;
|
|
244933
|
+
this.#store.clear();
|
|
244934
|
+
this.#segmentHashes.clear();
|
|
244935
|
+
this.onResultsChanged?.();
|
|
244936
|
+
this.#scheduleFullCheck(doc$12);
|
|
244937
|
+
}
|
|
244938
|
+
}
|
|
244939
|
+
onDocumentChanged(doc$12, changedRanges, mapping) {
|
|
244940
|
+
if (!this.isEnabled)
|
|
244941
|
+
return;
|
|
244942
|
+
this.#documentEpoch++;
|
|
244943
|
+
this.#lastDoc = doc$12;
|
|
244944
|
+
const { segments, offsetMaps, segmentPositions } = extractSegmentsWithMaps(doc$12, this.#config.defaultLanguage, this.#pageResolver ?? undefined);
|
|
244945
|
+
this.#lastSegments = segments;
|
|
244946
|
+
this.#offsetMaps = offsetMaps;
|
|
244947
|
+
const dirtyIds = computeDirtySegmentIds(segments, segmentPositions, changedRanges);
|
|
244948
|
+
for (const id2 of dirtyIds)
|
|
244949
|
+
this.#segmentHashes.delete(id2);
|
|
244950
|
+
if (dirtyIds.size > 0) {
|
|
244951
|
+
const recheckId = this.#nextRecheckId++;
|
|
244952
|
+
this.#store.remapIssues(dirtyIds, mapping, recheckId);
|
|
244953
|
+
this.#store.removeOrphanedSegments(new Set(segments.map((s2) => s2.id)));
|
|
244954
|
+
}
|
|
244955
|
+
this.#scheduleDebouncedCheck(segments);
|
|
244956
|
+
}
|
|
244957
|
+
runInitialCheck(doc$12) {
|
|
244958
|
+
if (!this.isEnabled)
|
|
244959
|
+
return;
|
|
244960
|
+
this.#scheduleFullCheck(doc$12);
|
|
244961
|
+
}
|
|
244962
|
+
ignoreWord(word$1) {
|
|
244963
|
+
const normalized = word$1.normalize("NFC").toLowerCase();
|
|
244964
|
+
if (!this.#config.ignoredWords.includes(normalized)) {
|
|
244965
|
+
this.#config.ignoredWords = [...this.#config.ignoredWords, normalized];
|
|
244966
|
+
this.onResultsChanged?.();
|
|
244967
|
+
}
|
|
244968
|
+
}
|
|
244969
|
+
removeIgnoredWord(word$1) {
|
|
244970
|
+
const normalized = word$1.normalize("NFC").toLowerCase();
|
|
244971
|
+
this.#config.ignoredWords = this.#config.ignoredWords.filter((w) => w !== normalized);
|
|
244972
|
+
this.onResultsChanged?.();
|
|
244973
|
+
}
|
|
244974
|
+
dispose() {
|
|
244975
|
+
this.#disposed = true;
|
|
244976
|
+
this.#cancelAll();
|
|
244977
|
+
this.#store.clear();
|
|
244978
|
+
this.#offsetMaps.clear();
|
|
244979
|
+
this.#segmentHashes.clear();
|
|
244980
|
+
this.#lastDoc = null;
|
|
244981
|
+
this.#lastSegments = [];
|
|
244982
|
+
this.#pendingSegments = [];
|
|
244983
|
+
this.#provider?.dispose?.();
|
|
244984
|
+
this.#provider = null;
|
|
244985
|
+
this.#setStatus("disabled");
|
|
244986
|
+
}
|
|
244987
|
+
#scheduleFullCheck(doc$12) {
|
|
244988
|
+
this.#lastDoc = doc$12;
|
|
244989
|
+
const { segments, offsetMaps } = extractSegmentsWithMaps(doc$12, this.#config.defaultLanguage, this.#pageResolver ?? undefined);
|
|
244990
|
+
this.#lastSegments = segments;
|
|
244991
|
+
this.#offsetMaps = offsetMaps;
|
|
244992
|
+
this.#segmentHashes.clear();
|
|
244993
|
+
this.#store.clear();
|
|
244994
|
+
this.#scheduleDebouncedCheck(segments);
|
|
244995
|
+
}
|
|
244996
|
+
#scheduleDebouncedCheck(segments) {
|
|
244997
|
+
if (this.#isComposing)
|
|
244998
|
+
return;
|
|
244999
|
+
if (this.#debounceTimer !== null)
|
|
245000
|
+
clearTimeout(this.#debounceTimer);
|
|
245001
|
+
const msSinceLastCheck = Date.now() - this.#lastCheckFiredAt;
|
|
245002
|
+
if (this.#lastCheckFiredAt > 0 && msSinceLastCheck >= DEFAULT_MAX_WAIT_MS)
|
|
245003
|
+
this.#fireCheck(segments);
|
|
245004
|
+
else
|
|
245005
|
+
this.#debounceTimer = setTimeout(() => {
|
|
245006
|
+
this.#debounceTimer = null;
|
|
245007
|
+
this.#fireCheck(segments);
|
|
245008
|
+
}, this.#config.debounceMs);
|
|
245009
|
+
}
|
|
245010
|
+
#fireCheck(segments) {
|
|
245011
|
+
this.#lastCheckFiredAt = Date.now();
|
|
245012
|
+
this.#runCheck(segments);
|
|
245013
|
+
}
|
|
245014
|
+
async#runCheck(segments) {
|
|
245015
|
+
if (this.#disposed || !this.#provider)
|
|
245016
|
+
return;
|
|
245017
|
+
if (!this.#capabilities && this.#provider.getCapabilities)
|
|
245018
|
+
try {
|
|
245019
|
+
this.#capabilities = await this.#provider.getCapabilities();
|
|
245020
|
+
} catch {}
|
|
245021
|
+
const unchecked = segments.filter((seg) => {
|
|
245022
|
+
const hash$3 = hashSegmentText(seg.text);
|
|
245023
|
+
return this.#segmentHashes.get(seg.id) !== hash$3;
|
|
245024
|
+
});
|
|
245025
|
+
if (unchecked.length === 0) {
|
|
245026
|
+
this.#setStatus("idle");
|
|
245027
|
+
return;
|
|
245028
|
+
}
|
|
245029
|
+
const activeRecheckIds = this.#store.getActiveRecheckIds();
|
|
245030
|
+
const ordered = this.#config.visibleFirst && this.#visibilitySource ? prioritizeByVisibility(unchecked, this.#visibilitySource) : unchecked;
|
|
245031
|
+
const batches = this.#batchSegments(ordered);
|
|
245032
|
+
const epoch = this.#documentEpoch;
|
|
245033
|
+
this.#pendingSegments = [];
|
|
245034
|
+
for (let i4 = 0;i4 < batches.length; i4++) {
|
|
245035
|
+
if (this.#disposed || epoch !== this.#documentEpoch)
|
|
245036
|
+
return;
|
|
245037
|
+
if (this.#inFlightCount >= this.#config.maxConcurrentRequests) {
|
|
245038
|
+
for (let j = i4;j < batches.length; j++)
|
|
245039
|
+
this.#pendingSegments.push(...batches[j]);
|
|
245040
|
+
break;
|
|
245041
|
+
}
|
|
245042
|
+
this.#sendBatch(batches[i4], epoch, activeRecheckIds);
|
|
245043
|
+
}
|
|
245044
|
+
}
|
|
245045
|
+
async#sendBatch(segments, epoch, recheckIds) {
|
|
245046
|
+
if (!this.#provider || this.#disposed)
|
|
245047
|
+
return;
|
|
245048
|
+
const controller = new AbortController;
|
|
245049
|
+
this.#pendingAbortControllers.add(controller);
|
|
245050
|
+
this.#inFlightCount++;
|
|
245051
|
+
this.#setStatus("checking");
|
|
245052
|
+
const timeoutId = setTimeout(() => controller.abort(), this.#config.timeoutMs);
|
|
245053
|
+
const request = {
|
|
245054
|
+
documentId: this.#documentId,
|
|
245055
|
+
defaultLanguage: this.#config.defaultLanguage,
|
|
245056
|
+
maxSuggestions: this.#config.maxSuggestions,
|
|
245057
|
+
segments,
|
|
245058
|
+
signal: controller.signal
|
|
245059
|
+
};
|
|
245060
|
+
try {
|
|
245061
|
+
const result = await this.#provider.check(request);
|
|
245062
|
+
clearTimeout(timeoutId);
|
|
245063
|
+
if (!this.#pendingAbortControllers.delete(controller))
|
|
245064
|
+
return;
|
|
245065
|
+
this.#inFlightCount--;
|
|
245066
|
+
if (epoch !== this.#documentEpoch || this.#disposed) {
|
|
245067
|
+
this.#drainPendingSegments();
|
|
245068
|
+
return;
|
|
245069
|
+
}
|
|
245070
|
+
const validSegmentIds = new Set(segments.map((s2) => s2.id));
|
|
245071
|
+
const segmentTextMap = new Map(segments.map((s2) => [s2.id, s2]));
|
|
245072
|
+
const freshIssues = [];
|
|
245073
|
+
for (const issue of result.issues) {
|
|
245074
|
+
if (!this.#validateIssue(issue, validSegmentIds, segmentTextMap))
|
|
245075
|
+
continue;
|
|
245076
|
+
const offsetMap = this.#offsetMaps.get(issue.segmentId);
|
|
245077
|
+
if (!offsetMap)
|
|
245078
|
+
continue;
|
|
245079
|
+
const resolved = resolveIssuePmRangeFromSlices(issue, offsetMap.slices);
|
|
245080
|
+
if (!resolved)
|
|
245081
|
+
continue;
|
|
245082
|
+
const segment = segmentTextMap.get(issue.segmentId);
|
|
245083
|
+
const storedIssue = {
|
|
245084
|
+
...resolved,
|
|
245085
|
+
state: "confirmed",
|
|
245086
|
+
recheckId: null
|
|
245087
|
+
};
|
|
245088
|
+
if (segment)
|
|
245089
|
+
storedIssue.word = segment.text.slice(issue.start, issue.end);
|
|
245090
|
+
freshIssues.push(storedIssue);
|
|
245091
|
+
}
|
|
245092
|
+
this.#store.replaceBatchResults(recheckIds, validSegmentIds, freshIssues);
|
|
245093
|
+
for (const seg of segments)
|
|
245094
|
+
this.#segmentHashes.set(seg.id, hashSegmentText(seg.text));
|
|
245095
|
+
this.#setStatus(this.#inFlightCount > 0 ? "checking" : "idle");
|
|
245096
|
+
this.onResultsChanged?.();
|
|
245097
|
+
this.#schedulePendingSegments(epoch, recheckIds);
|
|
245098
|
+
} catch (err) {
|
|
245099
|
+
clearTimeout(timeoutId);
|
|
245100
|
+
if (!this.#pendingAbortControllers.delete(controller))
|
|
245101
|
+
return;
|
|
245102
|
+
this.#inFlightCount--;
|
|
245103
|
+
if (this.#disposed)
|
|
245104
|
+
return;
|
|
245105
|
+
if (epoch !== this.#documentEpoch) {
|
|
245106
|
+
this.#drainPendingSegments();
|
|
245107
|
+
return;
|
|
245108
|
+
}
|
|
245109
|
+
const isTimeout = controller.signal.aborted;
|
|
245110
|
+
const proofingError = {
|
|
245111
|
+
kind: isTimeout ? "timeout" : "provider-error",
|
|
245112
|
+
message: isTimeout ? "Provider request timed out" : String(err),
|
|
245113
|
+
segmentIds: segments.map((s2) => s2.id),
|
|
245114
|
+
cause: err
|
|
245115
|
+
};
|
|
245116
|
+
this.#config.onProofingError?.(proofingError);
|
|
245117
|
+
this.#setStatus(this.#inFlightCount > 0 ? "checking" : "degraded");
|
|
245118
|
+
this.#schedulePendingSegments(epoch, recheckIds);
|
|
245119
|
+
}
|
|
245120
|
+
}
|
|
245121
|
+
#schedulePendingSegments(epoch, recheckIds) {
|
|
245122
|
+
if (this.#disposed || epoch !== this.#documentEpoch)
|
|
245123
|
+
return;
|
|
245124
|
+
if (this.#pendingSegments.length === 0)
|
|
245125
|
+
return;
|
|
245126
|
+
if (this.#inFlightCount >= this.#config.maxConcurrentRequests)
|
|
245127
|
+
return;
|
|
245128
|
+
const nextBatch = this.#pendingSegments.splice(0, this.#config.maxSegmentsPerBatch);
|
|
245129
|
+
if (nextBatch.length > 0)
|
|
245130
|
+
this.#sendBatch(nextBatch, epoch, recheckIds);
|
|
245131
|
+
}
|
|
245132
|
+
#drainPendingSegments() {
|
|
245133
|
+
if (this.#disposed || this.#pendingSegments.length === 0)
|
|
245134
|
+
return;
|
|
245135
|
+
this.#schedulePendingSegments(this.#documentEpoch, this.#store.getActiveRecheckIds());
|
|
245136
|
+
}
|
|
245137
|
+
#validateIssue(issue, validSegmentIds, segmentTextMap) {
|
|
245138
|
+
if (!validSegmentIds.has(issue.segmentId)) {
|
|
245139
|
+
this.#reportValidationError(`Unknown segmentId: ${issue.segmentId}`, [issue.segmentId]);
|
|
245140
|
+
return false;
|
|
245141
|
+
}
|
|
245142
|
+
const segment = segmentTextMap.get(issue.segmentId);
|
|
245143
|
+
if (!segment)
|
|
245144
|
+
return false;
|
|
245145
|
+
if (issue.start < 0 || issue.end <= issue.start || issue.end > segment.text.length) {
|
|
245146
|
+
this.#reportValidationError(`Invalid offsets [${issue.start}, ${issue.end}) for segment "${issue.segmentId}" (length ${segment.text.length})`, [issue.segmentId]);
|
|
245147
|
+
return false;
|
|
245148
|
+
}
|
|
245149
|
+
return true;
|
|
245150
|
+
}
|
|
245151
|
+
#reportValidationError(message, segmentIds) {
|
|
245152
|
+
this.#config.onProofingError?.({
|
|
245153
|
+
kind: "validation-error",
|
|
245154
|
+
message,
|
|
245155
|
+
segmentIds
|
|
245156
|
+
});
|
|
245157
|
+
}
|
|
245158
|
+
#batchSegments(segments) {
|
|
245159
|
+
const batches = [];
|
|
245160
|
+
for (let i4 = 0;i4 < segments.length; i4 += this.#config.maxSegmentsPerBatch)
|
|
245161
|
+
batches.push(segments.slice(i4, i4 + this.#config.maxSegmentsPerBatch));
|
|
245162
|
+
return batches;
|
|
245163
|
+
}
|
|
245164
|
+
#cancelAll() {
|
|
245165
|
+
if (this.#debounceTimer !== null) {
|
|
245166
|
+
clearTimeout(this.#debounceTimer);
|
|
245167
|
+
this.#debounceTimer = null;
|
|
245168
|
+
}
|
|
245169
|
+
for (const controller of this.#pendingAbortControllers)
|
|
245170
|
+
controller.abort();
|
|
245171
|
+
this.#pendingAbortControllers.clear();
|
|
245172
|
+
this.#inFlightCount = 0;
|
|
245173
|
+
this.#pendingSegments = [];
|
|
245174
|
+
}
|
|
245175
|
+
#setStatus(status) {
|
|
245176
|
+
if (this.#status !== status) {
|
|
245177
|
+
this.#status = status;
|
|
245178
|
+
this.#config.onStatusChange?.(status);
|
|
245179
|
+
}
|
|
245180
|
+
}
|
|
244296
245181
|
}, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
|
|
244297
245182
|
if (!str.includes('"') && !str.includes("'"))
|
|
244298
245183
|
return str.split(delimiter).map((p$12) => p$12.trim()).filter(Boolean);
|
|
@@ -247221,7 +248106,7 @@ var Node$13 = class Node$14 {
|
|
|
247221
248106
|
if (runToken === "totalPageCount")
|
|
247222
248107
|
return context.totalPages ? String(context.totalPages) : run2.text ?? "";
|
|
247223
248108
|
return run2.text ?? "";
|
|
247224
|
-
},
|
|
248109
|
+
}, createDomPainter = (options) => {
|
|
247225
248110
|
if ((options.blocks ?? []).length !== (options.measures ?? []).length)
|
|
247226
248111
|
throw new Error("DomPainter requires the same number of blocks and measures");
|
|
247227
248112
|
const painter = new DomPainter({
|
|
@@ -247278,559 +248163,6 @@ var Node$13 = class Node$14 {
|
|
|
247278
248163
|
painter.setScrollContainer(el);
|
|
247279
248164
|
}
|
|
247280
248165
|
};
|
|
247281
|
-
}, PresentationProofingDecorator = class {
|
|
247282
|
-
#container = null;
|
|
247283
|
-
setContainer(container) {
|
|
247284
|
-
this.#container = container;
|
|
247285
|
-
}
|
|
247286
|
-
applyAnnotations(annotations) {
|
|
247287
|
-
const container = this.#container;
|
|
247288
|
-
if (!container)
|
|
247289
|
-
return false;
|
|
247290
|
-
if (!annotations || annotations.length === 0)
|
|
247291
|
-
return clearProofingDecorations(container);
|
|
247292
|
-
return applyProofingDecorations(container, annotations);
|
|
247293
|
-
}
|
|
247294
|
-
clear() {
|
|
247295
|
-
const container = this.#container;
|
|
247296
|
-
if (!container)
|
|
247297
|
-
return false;
|
|
247298
|
-
return clearProofingDecorations(container);
|
|
247299
|
-
}
|
|
247300
|
-
}, PresentationPostPaintPipeline = class {
|
|
247301
|
-
#fieldAnnotationLayer;
|
|
247302
|
-
#commentHighlightDecorator;
|
|
247303
|
-
#decorationBridge;
|
|
247304
|
-
#proofingDecorator;
|
|
247305
|
-
constructor(deps = {}) {
|
|
247306
|
-
this.#fieldAnnotationLayer = deps.fieldAnnotationLayer ?? new FieldAnnotationInteractionLayer;
|
|
247307
|
-
this.#commentHighlightDecorator = deps.commentHighlightDecorator ?? new CommentHighlightDecorator;
|
|
247308
|
-
this.#decorationBridge = deps.decorationBridge ?? new DecorationBridge;
|
|
247309
|
-
this.#proofingDecorator = deps.proofingDecorator ?? new PresentationProofingDecorator;
|
|
247310
|
-
}
|
|
247311
|
-
setContainer(container) {
|
|
247312
|
-
this.#fieldAnnotationLayer.setContainer(container);
|
|
247313
|
-
this.#commentHighlightDecorator.setContainer(container);
|
|
247314
|
-
this.#proofingDecorator.setContainer(container);
|
|
247315
|
-
}
|
|
247316
|
-
setActiveComment(commentId) {
|
|
247317
|
-
return this.#commentHighlightDecorator.setActiveComment(commentId);
|
|
247318
|
-
}
|
|
247319
|
-
recordDecorationTransaction(transaction) {
|
|
247320
|
-
this.#decorationBridge.recordTransaction(transaction);
|
|
247321
|
-
}
|
|
247322
|
-
hasDecorationChanges(editorState) {
|
|
247323
|
-
return this.#decorationBridge.hasChanges(editorState);
|
|
247324
|
-
}
|
|
247325
|
-
collectDecorationRanges(editorState) {
|
|
247326
|
-
return this.#decorationBridge.collectDecorationRanges(editorState);
|
|
247327
|
-
}
|
|
247328
|
-
syncDecorations(editorState, domPositionIndex, options) {
|
|
247329
|
-
if (!editorState)
|
|
247330
|
-
return false;
|
|
247331
|
-
return this.#decorationBridge.sync(editorState, domPositionIndex, options);
|
|
247332
|
-
}
|
|
247333
|
-
applyCommentHighlights() {
|
|
247334
|
-
this.#commentHighlightDecorator.apply();
|
|
247335
|
-
}
|
|
247336
|
-
syncInlineStyleLayers(editorState, domPositionIndex) {
|
|
247337
|
-
this.applyCommentHighlights();
|
|
247338
|
-
return this.syncDecorations(editorState, domPositionIndex);
|
|
247339
|
-
}
|
|
247340
|
-
applyProofingAnnotations(annotations, rebuildDomPositionIndex) {
|
|
247341
|
-
const mutated = this.#proofingDecorator.applyAnnotations(annotations);
|
|
247342
|
-
if (mutated)
|
|
247343
|
-
rebuildDomPositionIndex();
|
|
247344
|
-
return mutated;
|
|
247345
|
-
}
|
|
247346
|
-
refreshAfterPaint(options) {
|
|
247347
|
-
this.#fieldAnnotationLayer.apply(options.layoutEpoch);
|
|
247348
|
-
options.rebuildDomPositionIndex();
|
|
247349
|
-
this.syncInlineStyleLayers(options.editorState, options.domPositionIndex);
|
|
247350
|
-
this.applyProofingAnnotations(options.proofingAnnotations, options.rebuildDomPositionIndex);
|
|
247351
|
-
options.reapplyStructuredContentHover?.();
|
|
247352
|
-
}
|
|
247353
|
-
destroy() {
|
|
247354
|
-
this.#proofingDecorator.clear();
|
|
247355
|
-
this.#fieldAnnotationLayer.clear();
|
|
247356
|
-
this.#commentHighlightDecorator.destroy();
|
|
247357
|
-
this.#decorationBridge.destroy();
|
|
247358
|
-
}
|
|
247359
|
-
}, ProofingStore = class {
|
|
247360
|
-
#issuesBySegment = /* @__PURE__ */ new Map;
|
|
247361
|
-
addIssue(issue) {
|
|
247362
|
-
const list5 = this.#issuesBySegment.get(issue.segmentId);
|
|
247363
|
-
if (list5)
|
|
247364
|
-
list5.push(issue);
|
|
247365
|
-
else
|
|
247366
|
-
this.#issuesBySegment.set(issue.segmentId, [issue]);
|
|
247367
|
-
}
|
|
247368
|
-
remapIssues(segmentIds, mapping, recheckId) {
|
|
247369
|
-
for (const id2 of segmentIds) {
|
|
247370
|
-
const list5 = this.#issuesBySegment.get(id2);
|
|
247371
|
-
if (!list5)
|
|
247372
|
-
continue;
|
|
247373
|
-
const surviving = [];
|
|
247374
|
-
for (const issue of list5) {
|
|
247375
|
-
const fromResult = mapping.mapResult(issue.pmFrom, -1);
|
|
247376
|
-
const toResult2 = mapping.mapResult(issue.pmTo, 1);
|
|
247377
|
-
if (fromResult.deleted || toResult2.deleted)
|
|
247378
|
-
continue;
|
|
247379
|
-
if (fromResult.pos >= toResult2.pos)
|
|
247380
|
-
continue;
|
|
247381
|
-
issue.pmFrom = fromResult.pos;
|
|
247382
|
-
issue.pmTo = toResult2.pos;
|
|
247383
|
-
issue.state = "mapped";
|
|
247384
|
-
issue.recheckId = recheckId;
|
|
247385
|
-
surviving.push(issue);
|
|
247386
|
-
}
|
|
247387
|
-
if (surviving.length > 0)
|
|
247388
|
-
this.#issuesBySegment.set(id2, surviving);
|
|
247389
|
-
else
|
|
247390
|
-
this.#issuesBySegment.delete(id2);
|
|
247391
|
-
}
|
|
247392
|
-
}
|
|
247393
|
-
replaceBatchResults(recheckIds, coveredSegmentIds, freshIssues) {
|
|
247394
|
-
for (const segId of coveredSegmentIds) {
|
|
247395
|
-
const list5 = this.#issuesBySegment.get(segId);
|
|
247396
|
-
if (!list5)
|
|
247397
|
-
continue;
|
|
247398
|
-
const filtered = list5.filter((issue) => issue.recheckId === null || !recheckIds.has(issue.recheckId));
|
|
247399
|
-
if (filtered.length > 0)
|
|
247400
|
-
this.#issuesBySegment.set(segId, filtered);
|
|
247401
|
-
else
|
|
247402
|
-
this.#issuesBySegment.delete(segId);
|
|
247403
|
-
}
|
|
247404
|
-
for (const issue of freshIssues)
|
|
247405
|
-
this.addIssue(issue);
|
|
247406
|
-
}
|
|
247407
|
-
removeBySegmentIds(ids) {
|
|
247408
|
-
for (const id2 of ids)
|
|
247409
|
-
this.#issuesBySegment.delete(id2);
|
|
247410
|
-
}
|
|
247411
|
-
removeOrphanedSegments(currentSegmentIds) {
|
|
247412
|
-
for (const segId of this.#issuesBySegment.keys())
|
|
247413
|
-
if (!currentSegmentIds.has(segId))
|
|
247414
|
-
this.#issuesBySegment.delete(segId);
|
|
247415
|
-
}
|
|
247416
|
-
clear() {
|
|
247417
|
-
this.#issuesBySegment.clear();
|
|
247418
|
-
}
|
|
247419
|
-
getAllIssues() {
|
|
247420
|
-
const result = [];
|
|
247421
|
-
for (const list5 of this.#issuesBySegment.values())
|
|
247422
|
-
result.push(...list5);
|
|
247423
|
-
return result;
|
|
247424
|
-
}
|
|
247425
|
-
getDisplayIssues(ignoredWords) {
|
|
247426
|
-
const normalizedIgnored = new Set(ignoredWords.map((w) => w.normalize("NFC").toLowerCase()));
|
|
247427
|
-
const result = [];
|
|
247428
|
-
for (const list5 of this.#issuesBySegment.values())
|
|
247429
|
-
for (const issue of list5) {
|
|
247430
|
-
if (issue.kind !== "spelling")
|
|
247431
|
-
continue;
|
|
247432
|
-
if (isSuppressed(issue, normalizedIgnored))
|
|
247433
|
-
continue;
|
|
247434
|
-
result.push(issue);
|
|
247435
|
-
}
|
|
247436
|
-
return result;
|
|
247437
|
-
}
|
|
247438
|
-
getActiveRecheckIds() {
|
|
247439
|
-
const ids = /* @__PURE__ */ new Set;
|
|
247440
|
-
for (const list5 of this.#issuesBySegment.values())
|
|
247441
|
-
for (const issue of list5)
|
|
247442
|
-
if (issue.state === "mapped" && issue.recheckId !== null)
|
|
247443
|
-
ids.add(issue.recheckId);
|
|
247444
|
-
return ids;
|
|
247445
|
-
}
|
|
247446
|
-
get isEmpty() {
|
|
247447
|
-
return this.#issuesBySegment.size === 0;
|
|
247448
|
-
}
|
|
247449
|
-
get size() {
|
|
247450
|
-
let count2 = 0;
|
|
247451
|
-
for (const list5 of this.#issuesBySegment.values())
|
|
247452
|
-
count2 += list5.length;
|
|
247453
|
-
return count2;
|
|
247454
|
-
}
|
|
247455
|
-
}, NON_TEXT_INLINE_NODES, DEFAULT_DEBOUNCE_MS = 500, DEFAULT_MAX_WAIT_MS = 2000, DEFAULT_TIMEOUT_MS = 1e4, DEFAULT_MAX_CONCURRENT = 2, DEFAULT_MAX_SEGMENTS_PER_BATCH = 20, DEFAULT_MAX_SUGGESTIONS = 5, ProofingSessionManager = class {
|
|
247456
|
-
#config;
|
|
247457
|
-
#provider = null;
|
|
247458
|
-
#capabilities = null;
|
|
247459
|
-
#status = "disabled";
|
|
247460
|
-
#store = new ProofingStore;
|
|
247461
|
-
#offsetMaps = /* @__PURE__ */ new Map;
|
|
247462
|
-
#segmentHashes = /* @__PURE__ */ new Map;
|
|
247463
|
-
#debounceTimer = null;
|
|
247464
|
-
#pendingAbortControllers = /* @__PURE__ */ new Set;
|
|
247465
|
-
#inFlightCount = 0;
|
|
247466
|
-
#documentEpoch = 0;
|
|
247467
|
-
#disposed = false;
|
|
247468
|
-
#pendingSegments = [];
|
|
247469
|
-
#nextRecheckId = 0;
|
|
247470
|
-
#isComposing = false;
|
|
247471
|
-
#lastCheckFiredAt = 0;
|
|
247472
|
-
#visibilitySource = null;
|
|
247473
|
-
#documentId = null;
|
|
247474
|
-
#pageResolver = null;
|
|
247475
|
-
#lastDoc = null;
|
|
247476
|
-
#lastSegments = [];
|
|
247477
|
-
constructor(config2 = {}) {
|
|
247478
|
-
this.onResultsChanged = null;
|
|
247479
|
-
this.#config = {
|
|
247480
|
-
enabled: config2.enabled ?? false,
|
|
247481
|
-
debounceMs: config2.debounceMs ?? DEFAULT_DEBOUNCE_MS,
|
|
247482
|
-
maxSuggestions: config2.maxSuggestions ?? DEFAULT_MAX_SUGGESTIONS,
|
|
247483
|
-
visibleFirst: config2.visibleFirst ?? true,
|
|
247484
|
-
allowIgnoreWord: config2.allowIgnoreWord ?? true,
|
|
247485
|
-
defaultLanguage: config2.defaultLanguage ?? null,
|
|
247486
|
-
ignoredWords: config2.ignoredWords ?? [],
|
|
247487
|
-
timeoutMs: config2.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
247488
|
-
maxConcurrentRequests: config2.maxConcurrentRequests ?? DEFAULT_MAX_CONCURRENT,
|
|
247489
|
-
maxSegmentsPerBatch: config2.maxSegmentsPerBatch ?? DEFAULT_MAX_SEGMENTS_PER_BATCH,
|
|
247490
|
-
onProofingError: config2.onProofingError ?? null,
|
|
247491
|
-
onStatusChange: config2.onStatusChange ?? null
|
|
247492
|
-
};
|
|
247493
|
-
if (config2.provider)
|
|
247494
|
-
this.#provider = config2.provider;
|
|
247495
|
-
if (this.#config.enabled && this.#provider)
|
|
247496
|
-
this.#setStatus("idle");
|
|
247497
|
-
}
|
|
247498
|
-
get status() {
|
|
247499
|
-
return this.#status;
|
|
247500
|
-
}
|
|
247501
|
-
get isEnabled() {
|
|
247502
|
-
return this.#config.enabled && this.#provider !== null;
|
|
247503
|
-
}
|
|
247504
|
-
get config() {
|
|
247505
|
-
return this.#config;
|
|
247506
|
-
}
|
|
247507
|
-
setVisibilitySource(source) {
|
|
247508
|
-
this.#visibilitySource = source;
|
|
247509
|
-
}
|
|
247510
|
-
setDocumentId(id2) {
|
|
247511
|
-
this.#documentId = id2;
|
|
247512
|
-
}
|
|
247513
|
-
setPageResolver(resolver2) {
|
|
247514
|
-
this.#pageResolver = resolver2;
|
|
247515
|
-
}
|
|
247516
|
-
setComposing(composing) {
|
|
247517
|
-
this.#isComposing = composing;
|
|
247518
|
-
if (!composing && this.#lastSegments.length > 0 && this.isEnabled)
|
|
247519
|
-
this.#scheduleDebouncedCheck(this.#lastSegments);
|
|
247520
|
-
}
|
|
247521
|
-
getPaintSlices(activeWordRange) {
|
|
247522
|
-
if (!this.isEnabled)
|
|
247523
|
-
return [];
|
|
247524
|
-
const slices = buildPaintSlices(this.#store.getDisplayIssues(this.#config.ignoredWords));
|
|
247525
|
-
if (!activeWordRange)
|
|
247526
|
-
return slices;
|
|
247527
|
-
return slices.filter((s2) => s2.pmTo <= activeWordRange.from || s2.pmFrom >= activeWordRange.to);
|
|
247528
|
-
}
|
|
247529
|
-
getIssueAtPosition(pmPos, activeWordRange) {
|
|
247530
|
-
return findSliceAtPosition(this.getPaintSlices(activeWordRange), pmPos)?.issue ?? null;
|
|
247531
|
-
}
|
|
247532
|
-
updateConfig(patch3, doc$12) {
|
|
247533
|
-
const prevEnabled = this.#config.enabled;
|
|
247534
|
-
const prevProvider = this.#provider;
|
|
247535
|
-
const needsRecheck = patch3.provider !== undefined || patch3.defaultLanguage !== undefined;
|
|
247536
|
-
if (patch3.debounceMs !== undefined)
|
|
247537
|
-
this.#config.debounceMs = patch3.debounceMs;
|
|
247538
|
-
if (patch3.maxSuggestions !== undefined)
|
|
247539
|
-
this.#config.maxSuggestions = patch3.maxSuggestions;
|
|
247540
|
-
if (patch3.visibleFirst !== undefined)
|
|
247541
|
-
this.#config.visibleFirst = patch3.visibleFirst;
|
|
247542
|
-
if (patch3.allowIgnoreWord !== undefined)
|
|
247543
|
-
this.#config.allowIgnoreWord = patch3.allowIgnoreWord;
|
|
247544
|
-
if (patch3.timeoutMs !== undefined)
|
|
247545
|
-
this.#config.timeoutMs = patch3.timeoutMs;
|
|
247546
|
-
if (patch3.maxConcurrentRequests !== undefined)
|
|
247547
|
-
this.#config.maxConcurrentRequests = patch3.maxConcurrentRequests;
|
|
247548
|
-
if (patch3.maxSegmentsPerBatch !== undefined)
|
|
247549
|
-
this.#config.maxSegmentsPerBatch = patch3.maxSegmentsPerBatch;
|
|
247550
|
-
if (patch3.onProofingError !== undefined)
|
|
247551
|
-
this.#config.onProofingError = patch3.onProofingError ?? null;
|
|
247552
|
-
if (patch3.onStatusChange !== undefined)
|
|
247553
|
-
this.#config.onStatusChange = patch3.onStatusChange ?? null;
|
|
247554
|
-
if (patch3.defaultLanguage !== undefined)
|
|
247555
|
-
this.#config.defaultLanguage = patch3.defaultLanguage ?? null;
|
|
247556
|
-
if (patch3.ignoredWords !== undefined) {
|
|
247557
|
-
this.#config.ignoredWords = patch3.ignoredWords ?? [];
|
|
247558
|
-
this.onResultsChanged?.();
|
|
247559
|
-
}
|
|
247560
|
-
if (patch3.provider !== undefined) {
|
|
247561
|
-
if (prevProvider && prevProvider !== patch3.provider)
|
|
247562
|
-
prevProvider.dispose?.();
|
|
247563
|
-
this.#provider = patch3.provider ?? null;
|
|
247564
|
-
this.#capabilities = null;
|
|
247565
|
-
}
|
|
247566
|
-
if (patch3.enabled !== undefined) {
|
|
247567
|
-
this.#config.enabled = patch3.enabled;
|
|
247568
|
-
if (!patch3.enabled) {
|
|
247569
|
-
this.#cancelAll();
|
|
247570
|
-
this.#store.clear();
|
|
247571
|
-
this.#segmentHashes.clear();
|
|
247572
|
-
this.#offsetMaps.clear();
|
|
247573
|
-
this.#setStatus("disabled");
|
|
247574
|
-
this.onResultsChanged?.();
|
|
247575
|
-
return;
|
|
247576
|
-
}
|
|
247577
|
-
if (patch3.enabled && !prevEnabled && doc$12) {
|
|
247578
|
-
this.#setStatus("idle");
|
|
247579
|
-
this.#scheduleFullCheck(doc$12);
|
|
247580
|
-
return;
|
|
247581
|
-
}
|
|
247582
|
-
}
|
|
247583
|
-
if (needsRecheck && this.isEnabled && doc$12) {
|
|
247584
|
-
this.#cancelAll();
|
|
247585
|
-
this.#documentEpoch++;
|
|
247586
|
-
this.#store.clear();
|
|
247587
|
-
this.#segmentHashes.clear();
|
|
247588
|
-
this.onResultsChanged?.();
|
|
247589
|
-
this.#scheduleFullCheck(doc$12);
|
|
247590
|
-
}
|
|
247591
|
-
}
|
|
247592
|
-
onDocumentChanged(doc$12, changedRanges, mapping) {
|
|
247593
|
-
if (!this.isEnabled)
|
|
247594
|
-
return;
|
|
247595
|
-
this.#documentEpoch++;
|
|
247596
|
-
this.#lastDoc = doc$12;
|
|
247597
|
-
const { segments, offsetMaps, segmentPositions } = extractSegmentsWithMaps(doc$12, this.#config.defaultLanguage, this.#pageResolver ?? undefined);
|
|
247598
|
-
this.#lastSegments = segments;
|
|
247599
|
-
this.#offsetMaps = offsetMaps;
|
|
247600
|
-
const dirtyIds = computeDirtySegmentIds(segments, segmentPositions, changedRanges);
|
|
247601
|
-
for (const id2 of dirtyIds)
|
|
247602
|
-
this.#segmentHashes.delete(id2);
|
|
247603
|
-
if (dirtyIds.size > 0) {
|
|
247604
|
-
const recheckId = this.#nextRecheckId++;
|
|
247605
|
-
this.#store.remapIssues(dirtyIds, mapping, recheckId);
|
|
247606
|
-
this.#store.removeOrphanedSegments(new Set(segments.map((s2) => s2.id)));
|
|
247607
|
-
}
|
|
247608
|
-
this.#scheduleDebouncedCheck(segments);
|
|
247609
|
-
}
|
|
247610
|
-
runInitialCheck(doc$12) {
|
|
247611
|
-
if (!this.isEnabled)
|
|
247612
|
-
return;
|
|
247613
|
-
this.#scheduleFullCheck(doc$12);
|
|
247614
|
-
}
|
|
247615
|
-
ignoreWord(word$1) {
|
|
247616
|
-
const normalized = word$1.normalize("NFC").toLowerCase();
|
|
247617
|
-
if (!this.#config.ignoredWords.includes(normalized)) {
|
|
247618
|
-
this.#config.ignoredWords = [...this.#config.ignoredWords, normalized];
|
|
247619
|
-
this.onResultsChanged?.();
|
|
247620
|
-
}
|
|
247621
|
-
}
|
|
247622
|
-
removeIgnoredWord(word$1) {
|
|
247623
|
-
const normalized = word$1.normalize("NFC").toLowerCase();
|
|
247624
|
-
this.#config.ignoredWords = this.#config.ignoredWords.filter((w) => w !== normalized);
|
|
247625
|
-
this.onResultsChanged?.();
|
|
247626
|
-
}
|
|
247627
|
-
dispose() {
|
|
247628
|
-
this.#disposed = true;
|
|
247629
|
-
this.#cancelAll();
|
|
247630
|
-
this.#store.clear();
|
|
247631
|
-
this.#offsetMaps.clear();
|
|
247632
|
-
this.#segmentHashes.clear();
|
|
247633
|
-
this.#lastDoc = null;
|
|
247634
|
-
this.#lastSegments = [];
|
|
247635
|
-
this.#pendingSegments = [];
|
|
247636
|
-
this.#provider?.dispose?.();
|
|
247637
|
-
this.#provider = null;
|
|
247638
|
-
this.#setStatus("disabled");
|
|
247639
|
-
}
|
|
247640
|
-
#scheduleFullCheck(doc$12) {
|
|
247641
|
-
this.#lastDoc = doc$12;
|
|
247642
|
-
const { segments, offsetMaps } = extractSegmentsWithMaps(doc$12, this.#config.defaultLanguage, this.#pageResolver ?? undefined);
|
|
247643
|
-
this.#lastSegments = segments;
|
|
247644
|
-
this.#offsetMaps = offsetMaps;
|
|
247645
|
-
this.#segmentHashes.clear();
|
|
247646
|
-
this.#store.clear();
|
|
247647
|
-
this.#scheduleDebouncedCheck(segments);
|
|
247648
|
-
}
|
|
247649
|
-
#scheduleDebouncedCheck(segments) {
|
|
247650
|
-
if (this.#isComposing)
|
|
247651
|
-
return;
|
|
247652
|
-
if (this.#debounceTimer !== null)
|
|
247653
|
-
clearTimeout(this.#debounceTimer);
|
|
247654
|
-
const msSinceLastCheck = Date.now() - this.#lastCheckFiredAt;
|
|
247655
|
-
if (this.#lastCheckFiredAt > 0 && msSinceLastCheck >= DEFAULT_MAX_WAIT_MS)
|
|
247656
|
-
this.#fireCheck(segments);
|
|
247657
|
-
else
|
|
247658
|
-
this.#debounceTimer = setTimeout(() => {
|
|
247659
|
-
this.#debounceTimer = null;
|
|
247660
|
-
this.#fireCheck(segments);
|
|
247661
|
-
}, this.#config.debounceMs);
|
|
247662
|
-
}
|
|
247663
|
-
#fireCheck(segments) {
|
|
247664
|
-
this.#lastCheckFiredAt = Date.now();
|
|
247665
|
-
this.#runCheck(segments);
|
|
247666
|
-
}
|
|
247667
|
-
async#runCheck(segments) {
|
|
247668
|
-
if (this.#disposed || !this.#provider)
|
|
247669
|
-
return;
|
|
247670
|
-
if (!this.#capabilities && this.#provider.getCapabilities)
|
|
247671
|
-
try {
|
|
247672
|
-
this.#capabilities = await this.#provider.getCapabilities();
|
|
247673
|
-
} catch {}
|
|
247674
|
-
const unchecked = segments.filter((seg) => {
|
|
247675
|
-
const hash$3 = hashSegmentText(seg.text);
|
|
247676
|
-
return this.#segmentHashes.get(seg.id) !== hash$3;
|
|
247677
|
-
});
|
|
247678
|
-
if (unchecked.length === 0) {
|
|
247679
|
-
this.#setStatus("idle");
|
|
247680
|
-
return;
|
|
247681
|
-
}
|
|
247682
|
-
const activeRecheckIds = this.#store.getActiveRecheckIds();
|
|
247683
|
-
const ordered = this.#config.visibleFirst && this.#visibilitySource ? prioritizeByVisibility(unchecked, this.#visibilitySource) : unchecked;
|
|
247684
|
-
const batches = this.#batchSegments(ordered);
|
|
247685
|
-
const epoch = this.#documentEpoch;
|
|
247686
|
-
this.#pendingSegments = [];
|
|
247687
|
-
for (let i4 = 0;i4 < batches.length; i4++) {
|
|
247688
|
-
if (this.#disposed || epoch !== this.#documentEpoch)
|
|
247689
|
-
return;
|
|
247690
|
-
if (this.#inFlightCount >= this.#config.maxConcurrentRequests) {
|
|
247691
|
-
for (let j = i4;j < batches.length; j++)
|
|
247692
|
-
this.#pendingSegments.push(...batches[j]);
|
|
247693
|
-
break;
|
|
247694
|
-
}
|
|
247695
|
-
this.#sendBatch(batches[i4], epoch, activeRecheckIds);
|
|
247696
|
-
}
|
|
247697
|
-
}
|
|
247698
|
-
async#sendBatch(segments, epoch, recheckIds) {
|
|
247699
|
-
if (!this.#provider || this.#disposed)
|
|
247700
|
-
return;
|
|
247701
|
-
const controller = new AbortController;
|
|
247702
|
-
this.#pendingAbortControllers.add(controller);
|
|
247703
|
-
this.#inFlightCount++;
|
|
247704
|
-
this.#setStatus("checking");
|
|
247705
|
-
const timeoutId = setTimeout(() => controller.abort(), this.#config.timeoutMs);
|
|
247706
|
-
const request = {
|
|
247707
|
-
documentId: this.#documentId,
|
|
247708
|
-
defaultLanguage: this.#config.defaultLanguage,
|
|
247709
|
-
maxSuggestions: this.#config.maxSuggestions,
|
|
247710
|
-
segments,
|
|
247711
|
-
signal: controller.signal
|
|
247712
|
-
};
|
|
247713
|
-
try {
|
|
247714
|
-
const result = await this.#provider.check(request);
|
|
247715
|
-
clearTimeout(timeoutId);
|
|
247716
|
-
if (!this.#pendingAbortControllers.delete(controller))
|
|
247717
|
-
return;
|
|
247718
|
-
this.#inFlightCount--;
|
|
247719
|
-
if (epoch !== this.#documentEpoch || this.#disposed) {
|
|
247720
|
-
this.#drainPendingSegments();
|
|
247721
|
-
return;
|
|
247722
|
-
}
|
|
247723
|
-
const validSegmentIds = new Set(segments.map((s2) => s2.id));
|
|
247724
|
-
const segmentTextMap = new Map(segments.map((s2) => [s2.id, s2]));
|
|
247725
|
-
const freshIssues = [];
|
|
247726
|
-
for (const issue of result.issues) {
|
|
247727
|
-
if (!this.#validateIssue(issue, validSegmentIds, segmentTextMap))
|
|
247728
|
-
continue;
|
|
247729
|
-
const offsetMap = this.#offsetMaps.get(issue.segmentId);
|
|
247730
|
-
if (!offsetMap)
|
|
247731
|
-
continue;
|
|
247732
|
-
const resolved = resolveIssuePmRangeFromSlices(issue, offsetMap.slices);
|
|
247733
|
-
if (!resolved)
|
|
247734
|
-
continue;
|
|
247735
|
-
const segment = segmentTextMap.get(issue.segmentId);
|
|
247736
|
-
const storedIssue = {
|
|
247737
|
-
...resolved,
|
|
247738
|
-
state: "confirmed",
|
|
247739
|
-
recheckId: null
|
|
247740
|
-
};
|
|
247741
|
-
if (segment)
|
|
247742
|
-
storedIssue.word = segment.text.slice(issue.start, issue.end);
|
|
247743
|
-
freshIssues.push(storedIssue);
|
|
247744
|
-
}
|
|
247745
|
-
this.#store.replaceBatchResults(recheckIds, validSegmentIds, freshIssues);
|
|
247746
|
-
for (const seg of segments)
|
|
247747
|
-
this.#segmentHashes.set(seg.id, hashSegmentText(seg.text));
|
|
247748
|
-
this.#setStatus(this.#inFlightCount > 0 ? "checking" : "idle");
|
|
247749
|
-
this.onResultsChanged?.();
|
|
247750
|
-
this.#schedulePendingSegments(epoch, recheckIds);
|
|
247751
|
-
} catch (err) {
|
|
247752
|
-
clearTimeout(timeoutId);
|
|
247753
|
-
if (!this.#pendingAbortControllers.delete(controller))
|
|
247754
|
-
return;
|
|
247755
|
-
this.#inFlightCount--;
|
|
247756
|
-
if (this.#disposed)
|
|
247757
|
-
return;
|
|
247758
|
-
if (epoch !== this.#documentEpoch) {
|
|
247759
|
-
this.#drainPendingSegments();
|
|
247760
|
-
return;
|
|
247761
|
-
}
|
|
247762
|
-
const isTimeout = controller.signal.aborted;
|
|
247763
|
-
const proofingError = {
|
|
247764
|
-
kind: isTimeout ? "timeout" : "provider-error",
|
|
247765
|
-
message: isTimeout ? "Provider request timed out" : String(err),
|
|
247766
|
-
segmentIds: segments.map((s2) => s2.id),
|
|
247767
|
-
cause: err
|
|
247768
|
-
};
|
|
247769
|
-
this.#config.onProofingError?.(proofingError);
|
|
247770
|
-
this.#setStatus(this.#inFlightCount > 0 ? "checking" : "degraded");
|
|
247771
|
-
this.#schedulePendingSegments(epoch, recheckIds);
|
|
247772
|
-
}
|
|
247773
|
-
}
|
|
247774
|
-
#schedulePendingSegments(epoch, recheckIds) {
|
|
247775
|
-
if (this.#disposed || epoch !== this.#documentEpoch)
|
|
247776
|
-
return;
|
|
247777
|
-
if (this.#pendingSegments.length === 0)
|
|
247778
|
-
return;
|
|
247779
|
-
if (this.#inFlightCount >= this.#config.maxConcurrentRequests)
|
|
247780
|
-
return;
|
|
247781
|
-
const nextBatch = this.#pendingSegments.splice(0, this.#config.maxSegmentsPerBatch);
|
|
247782
|
-
if (nextBatch.length > 0)
|
|
247783
|
-
this.#sendBatch(nextBatch, epoch, recheckIds);
|
|
247784
|
-
}
|
|
247785
|
-
#drainPendingSegments() {
|
|
247786
|
-
if (this.#disposed || this.#pendingSegments.length === 0)
|
|
247787
|
-
return;
|
|
247788
|
-
this.#schedulePendingSegments(this.#documentEpoch, this.#store.getActiveRecheckIds());
|
|
247789
|
-
}
|
|
247790
|
-
#validateIssue(issue, validSegmentIds, segmentTextMap) {
|
|
247791
|
-
if (!validSegmentIds.has(issue.segmentId)) {
|
|
247792
|
-
this.#reportValidationError(`Unknown segmentId: ${issue.segmentId}`, [issue.segmentId]);
|
|
247793
|
-
return false;
|
|
247794
|
-
}
|
|
247795
|
-
const segment = segmentTextMap.get(issue.segmentId);
|
|
247796
|
-
if (!segment)
|
|
247797
|
-
return false;
|
|
247798
|
-
if (issue.start < 0 || issue.end <= issue.start || issue.end > segment.text.length) {
|
|
247799
|
-
this.#reportValidationError(`Invalid offsets [${issue.start}, ${issue.end}) for segment "${issue.segmentId}" (length ${segment.text.length})`, [issue.segmentId]);
|
|
247800
|
-
return false;
|
|
247801
|
-
}
|
|
247802
|
-
return true;
|
|
247803
|
-
}
|
|
247804
|
-
#reportValidationError(message, segmentIds) {
|
|
247805
|
-
this.#config.onProofingError?.({
|
|
247806
|
-
kind: "validation-error",
|
|
247807
|
-
message,
|
|
247808
|
-
segmentIds
|
|
247809
|
-
});
|
|
247810
|
-
}
|
|
247811
|
-
#batchSegments(segments) {
|
|
247812
|
-
const batches = [];
|
|
247813
|
-
for (let i4 = 0;i4 < segments.length; i4 += this.#config.maxSegmentsPerBatch)
|
|
247814
|
-
batches.push(segments.slice(i4, i4 + this.#config.maxSegmentsPerBatch));
|
|
247815
|
-
return batches;
|
|
247816
|
-
}
|
|
247817
|
-
#cancelAll() {
|
|
247818
|
-
if (this.#debounceTimer !== null) {
|
|
247819
|
-
clearTimeout(this.#debounceTimer);
|
|
247820
|
-
this.#debounceTimer = null;
|
|
247821
|
-
}
|
|
247822
|
-
for (const controller of this.#pendingAbortControllers)
|
|
247823
|
-
controller.abort();
|
|
247824
|
-
this.#pendingAbortControllers.clear();
|
|
247825
|
-
this.#inFlightCount = 0;
|
|
247826
|
-
this.#pendingSegments = [];
|
|
247827
|
-
}
|
|
247828
|
-
#setStatus(status) {
|
|
247829
|
-
if (this.#status !== status) {
|
|
247830
|
-
this.#status = status;
|
|
247831
|
-
this.#config.onStatusChange?.(status);
|
|
247832
|
-
}
|
|
247833
|
-
}
|
|
247834
248166
|
}, PresentationPaintIndex = class {
|
|
247835
248167
|
#snapshot = null;
|
|
247836
248168
|
#annotationsByPmStart = /* @__PURE__ */ new Map;
|
|
@@ -257076,9 +257408,9 @@ var Node$13 = class Node$14 {
|
|
|
257076
257408
|
return;
|
|
257077
257409
|
console.log(...args$1);
|
|
257078
257410
|
}, HEADER_FOOTER_INIT_BUDGET_MS = 200, MAX_ZOOM_WARNING_THRESHOLD = 10, MAX_SELECTION_RECTS_PER_USER = 100, SEMANTIC_RESIZE_DEBOUNCE_MS = 120, MIN_SEMANTIC_CONTENT_WIDTH_PX = 1, GLOBAL_PERFORMANCE, PresentationEditor, ICONS, TEXTS, tableActionsOptions;
|
|
257079
|
-
var
|
|
257411
|
+
var init_src_sJ2EXqLW_es = __esm(() => {
|
|
257080
257412
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
257081
|
-
|
|
257413
|
+
init_SuperConverter_DerEPM5g_es();
|
|
257082
257414
|
init_jszip_ChlR43oI_es();
|
|
257083
257415
|
init_uuid_qzgm05fK_es();
|
|
257084
257416
|
init_constants_CIF8yzNk_es();
|
|
@@ -282564,6 +282896,24 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
282564
282896
|
CANONICAL: "canonical",
|
|
282565
282897
|
DERIVED: "derived"
|
|
282566
282898
|
};
|
|
282899
|
+
PROOFING_CSS = {
|
|
282900
|
+
SPELLING: "sd-proofing-spelling",
|
|
282901
|
+
GRAMMAR: "sd-proofing-grammar",
|
|
282902
|
+
STYLE: "sd-proofing-style",
|
|
282903
|
+
DATA_ATTR: "data-sd-proofing",
|
|
282904
|
+
SPLIT_ATTR: "data-sd-proofing-split"
|
|
282905
|
+
};
|
|
282906
|
+
splitOriginMap = /* @__PURE__ */ new WeakMap;
|
|
282907
|
+
NON_TEXT_INLINE_NODES = new Set([
|
|
282908
|
+
"fieldAnnotation",
|
|
282909
|
+
"image",
|
|
282910
|
+
"equation",
|
|
282911
|
+
"hardBreak",
|
|
282912
|
+
"lineBreak",
|
|
282913
|
+
"tab",
|
|
282914
|
+
"footnoteReference",
|
|
282915
|
+
"symbol"
|
|
282916
|
+
]);
|
|
282567
282917
|
FONT_FAMILY_FALLBACKS2 = Object.freeze({
|
|
282568
282918
|
swiss: "Arial, sans-serif",
|
|
282569
282919
|
roman: "Times New Roman, serif",
|
|
@@ -286519,24 +286869,6 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
286519
286869
|
"path(",
|
|
286520
286870
|
"rect("
|
|
286521
286871
|
];
|
|
286522
|
-
PROOFING_CSS = {
|
|
286523
|
-
SPELLING: "sd-proofing-spelling",
|
|
286524
|
-
GRAMMAR: "sd-proofing-grammar",
|
|
286525
|
-
STYLE: "sd-proofing-style",
|
|
286526
|
-
DATA_ATTR: "data-sd-proofing",
|
|
286527
|
-
SPLIT_ATTR: "data-sd-proofing-split"
|
|
286528
|
-
};
|
|
286529
|
-
splitOriginMap = /* @__PURE__ */ new WeakMap;
|
|
286530
|
-
NON_TEXT_INLINE_NODES = new Set([
|
|
286531
|
-
"fieldAnnotation",
|
|
286532
|
-
"image",
|
|
286533
|
-
"equation",
|
|
286534
|
-
"hardBreak",
|
|
286535
|
-
"lineBreak",
|
|
286536
|
-
"tab",
|
|
286537
|
-
"footnoteReference",
|
|
286538
|
-
"symbol"
|
|
286539
|
-
]);
|
|
286540
286872
|
SINGLE_COLUMN_DEFAULT = {
|
|
286541
286873
|
count: 1,
|
|
286542
286874
|
gap: 0
|
|
@@ -291641,8 +291973,8 @@ var init_zipper_YmNpPIyc_es = __esm(() => {
|
|
|
291641
291973
|
|
|
291642
291974
|
// ../../packages/superdoc/dist/super-editor.es.js
|
|
291643
291975
|
var init_super_editor_es = __esm(() => {
|
|
291644
|
-
|
|
291645
|
-
|
|
291976
|
+
init_src_sJ2EXqLW_es();
|
|
291977
|
+
init_SuperConverter_DerEPM5g_es();
|
|
291646
291978
|
init_jszip_ChlR43oI_es();
|
|
291647
291979
|
init_xml_js_40FWvL78_es();
|
|
291648
291980
|
init_constants_CIF8yzNk_es();
|
|
@@ -343039,16 +343371,17 @@ var init_operation_params = __esm(() => {
|
|
|
343039
343371
|
}
|
|
343040
343372
|
],
|
|
343041
343373
|
"doc.insert": [
|
|
343042
|
-
...
|
|
343374
|
+
...TEXT_TARGET_FLAT_PARAMS_AGENT_HIDDEN,
|
|
343043
343375
|
{
|
|
343044
343376
|
name: "offset",
|
|
343045
343377
|
kind: "flag",
|
|
343046
343378
|
type: "number",
|
|
343047
|
-
description: "Character offset for insertion (alias for --start/--end with same value)."
|
|
343379
|
+
description: "Character offset for insertion (alias for --start/--end with same value).",
|
|
343380
|
+
agentVisible: false
|
|
343048
343381
|
}
|
|
343049
343382
|
],
|
|
343050
|
-
"doc.replace": [...
|
|
343051
|
-
"doc.delete": [...
|
|
343383
|
+
"doc.replace": [...TEXT_TARGET_FLAT_PARAMS_AGENT_HIDDEN],
|
|
343384
|
+
"doc.delete": [...TEXT_TARGET_FLAT_PARAMS_AGENT_HIDDEN],
|
|
343052
343385
|
"doc.styles.apply": [
|
|
343053
343386
|
{
|
|
343054
343387
|
name: "target",
|