@superdoc-dev/cli 0.5.0-next.43 → 0.5.0-next.45
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 +1922 -1332
- package/package.json +7 -7
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);
|
|
@@ -37821,7 +38015,7 @@ var init_dist3 = __esm(() => {
|
|
|
37821
38015
|
detectDupes(PKG_NAME3, PKG_VERSION3, PKG_FORMAT3);
|
|
37822
38016
|
});
|
|
37823
38017
|
|
|
37824
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38018
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/constants.js
|
|
37825
38019
|
var require_constants = __commonJS((exports, module) => {
|
|
37826
38020
|
var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
|
|
37827
38021
|
var hasBlob = typeof Blob !== "undefined";
|
|
@@ -37841,7 +38035,7 @@ var require_constants = __commonJS((exports, module) => {
|
|
|
37841
38035
|
};
|
|
37842
38036
|
});
|
|
37843
38037
|
|
|
37844
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38038
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/buffer-util.js
|
|
37845
38039
|
var require_buffer_util = __commonJS((exports, module) => {
|
|
37846
38040
|
var { EMPTY_BUFFER } = require_constants();
|
|
37847
38041
|
var FastBuffer = Buffer[Symbol.species];
|
|
@@ -37919,7 +38113,7 @@ var require_buffer_util = __commonJS((exports, module) => {
|
|
|
37919
38113
|
}
|
|
37920
38114
|
});
|
|
37921
38115
|
|
|
37922
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38116
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/limiter.js
|
|
37923
38117
|
var require_limiter = __commonJS((exports, module) => {
|
|
37924
38118
|
var kDone = Symbol("kDone");
|
|
37925
38119
|
var kRun = Symbol("kRun");
|
|
@@ -37951,7 +38145,7 @@ var require_limiter = __commonJS((exports, module) => {
|
|
|
37951
38145
|
module.exports = Limiter;
|
|
37952
38146
|
});
|
|
37953
38147
|
|
|
37954
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38148
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/permessage-deflate.js
|
|
37955
38149
|
var require_permessage_deflate = __commonJS((exports, module) => {
|
|
37956
38150
|
var zlib = __require("zlib");
|
|
37957
38151
|
var bufferUtil = require_buffer_util();
|
|
@@ -37967,11 +38161,11 @@ var require_permessage_deflate = __commonJS((exports, module) => {
|
|
|
37967
38161
|
var zlibLimiter;
|
|
37968
38162
|
|
|
37969
38163
|
class PerMessageDeflate {
|
|
37970
|
-
constructor(options
|
|
37971
|
-
this._maxPayload = maxPayload | 0;
|
|
38164
|
+
constructor(options) {
|
|
37972
38165
|
this._options = options || {};
|
|
37973
38166
|
this._threshold = this._options.threshold !== undefined ? this._options.threshold : 1024;
|
|
37974
|
-
this.
|
|
38167
|
+
this._maxPayload = this._options.maxPayload | 0;
|
|
38168
|
+
this._isServer = !!this._options.isServer;
|
|
37975
38169
|
this._deflate = null;
|
|
37976
38170
|
this._inflate = null;
|
|
37977
38171
|
this.params = null;
|
|
@@ -38215,7 +38409,7 @@ var require_permessage_deflate = __commonJS((exports, module) => {
|
|
|
38215
38409
|
}
|
|
38216
38410
|
});
|
|
38217
38411
|
|
|
38218
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38412
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/validation.js
|
|
38219
38413
|
var require_validation = __commonJS((exports, module) => {
|
|
38220
38414
|
var { isUtf8 } = __require("buffer");
|
|
38221
38415
|
var { hasBlob } = require_constants();
|
|
@@ -38402,7 +38596,7 @@ var require_validation = __commonJS((exports, module) => {
|
|
|
38402
38596
|
}
|
|
38403
38597
|
});
|
|
38404
38598
|
|
|
38405
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38599
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/receiver.js
|
|
38406
38600
|
var require_receiver = __commonJS((exports, module) => {
|
|
38407
38601
|
var { Writable } = __require("stream");
|
|
38408
38602
|
var PerMessageDeflate = require_permessage_deflate();
|
|
@@ -38783,7 +38977,7 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
38783
38977
|
module.exports = Receiver;
|
|
38784
38978
|
});
|
|
38785
38979
|
|
|
38786
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
38980
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/sender.js
|
|
38787
38981
|
var require_sender = __commonJS((exports, module) => {
|
|
38788
38982
|
var { Duplex } = __require("stream");
|
|
38789
38983
|
var { randomFillSync } = __require("crypto");
|
|
@@ -39137,7 +39331,7 @@ var require_sender = __commonJS((exports, module) => {
|
|
|
39137
39331
|
}
|
|
39138
39332
|
});
|
|
39139
39333
|
|
|
39140
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
39334
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/event-target.js
|
|
39141
39335
|
var require_event_target = __commonJS((exports, module) => {
|
|
39142
39336
|
var { kForOnEventAttribute, kListener } = require_constants();
|
|
39143
39337
|
var kCode = Symbol("kCode");
|
|
@@ -39288,7 +39482,7 @@ var require_event_target = __commonJS((exports, module) => {
|
|
|
39288
39482
|
}
|
|
39289
39483
|
});
|
|
39290
39484
|
|
|
39291
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
39485
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/extension.js
|
|
39292
39486
|
var require_extension = __commonJS((exports, module) => {
|
|
39293
39487
|
var { tokenChars } = require_validation();
|
|
39294
39488
|
function push(dest, name, elem) {
|
|
@@ -39453,7 +39647,7 @@ var require_extension = __commonJS((exports, module) => {
|
|
|
39453
39647
|
module.exports = { format, parse };
|
|
39454
39648
|
});
|
|
39455
39649
|
|
|
39456
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
39650
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/websocket.js
|
|
39457
39651
|
var require_websocket = __commonJS((exports, module) => {
|
|
39458
39652
|
var EventEmitter2 = __require("events");
|
|
39459
39653
|
var https = __require("https");
|
|
@@ -39842,7 +40036,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
39842
40036
|
} else {
|
|
39843
40037
|
try {
|
|
39844
40038
|
parsedUrl = new URL2(address2);
|
|
39845
|
-
} catch
|
|
40039
|
+
} catch {
|
|
39846
40040
|
throw new SyntaxError(`Invalid URL: ${address2}`);
|
|
39847
40041
|
}
|
|
39848
40042
|
}
|
|
@@ -39890,7 +40084,11 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
39890
40084
|
opts.path = parsedUrl.pathname + parsedUrl.search;
|
|
39891
40085
|
opts.timeout = opts.handshakeTimeout;
|
|
39892
40086
|
if (opts.perMessageDeflate) {
|
|
39893
|
-
perMessageDeflate = new PerMessageDeflate(
|
|
40087
|
+
perMessageDeflate = new PerMessageDeflate({
|
|
40088
|
+
...opts.perMessageDeflate,
|
|
40089
|
+
isServer: false,
|
|
40090
|
+
maxPayload: opts.maxPayload
|
|
40091
|
+
});
|
|
39894
40092
|
opts.headers["Sec-WebSocket-Extensions"] = format({
|
|
39895
40093
|
[PerMessageDeflate.extensionName]: perMessageDeflate.offer()
|
|
39896
40094
|
});
|
|
@@ -40215,7 +40413,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
40215
40413
|
}
|
|
40216
40414
|
});
|
|
40217
40415
|
|
|
40218
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
40416
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/stream.js
|
|
40219
40417
|
var require_stream = __commonJS((exports, module) => {
|
|
40220
40418
|
var WebSocket2 = require_websocket();
|
|
40221
40419
|
var { Duplex } = __require("stream");
|
|
@@ -40318,7 +40516,7 @@ var require_stream = __commonJS((exports, module) => {
|
|
|
40318
40516
|
module.exports = createWebSocketStream;
|
|
40319
40517
|
});
|
|
40320
40518
|
|
|
40321
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
40519
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/subprotocol.js
|
|
40322
40520
|
var require_subprotocol = __commonJS((exports, module) => {
|
|
40323
40521
|
var { tokenChars } = require_validation();
|
|
40324
40522
|
function parse(header) {
|
|
@@ -40363,7 +40561,7 @@ var require_subprotocol = __commonJS((exports, module) => {
|
|
|
40363
40561
|
module.exports = { parse };
|
|
40364
40562
|
});
|
|
40365
40563
|
|
|
40366
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
40564
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/websocket-server.js
|
|
40367
40565
|
var require_websocket_server = __commonJS((exports, module) => {
|
|
40368
40566
|
var EventEmitter2 = __require("events");
|
|
40369
40567
|
var http = __require("http");
|
|
@@ -40536,7 +40734,11 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
40536
40734
|
const secWebSocketExtensions = req.headers["sec-websocket-extensions"];
|
|
40537
40735
|
const extensions = {};
|
|
40538
40736
|
if (this.options.perMessageDeflate && secWebSocketExtensions !== undefined) {
|
|
40539
|
-
const perMessageDeflate = new PerMessageDeflate(
|
|
40737
|
+
const perMessageDeflate = new PerMessageDeflate({
|
|
40738
|
+
...this.options.perMessageDeflate,
|
|
40739
|
+
isServer: true,
|
|
40740
|
+
maxPayload: this.options.maxPayload
|
|
40741
|
+
});
|
|
40540
40742
|
try {
|
|
40541
40743
|
const offers = extension.parse(secWebSocketExtensions);
|
|
40542
40744
|
if (offers[PerMessageDeflate.extensionName]) {
|
|
@@ -40665,12 +40867,15 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
40665
40867
|
}
|
|
40666
40868
|
});
|
|
40667
40869
|
|
|
40668
|
-
// ../../node_modules/.pnpm/ws@8.
|
|
40669
|
-
var import_stream, import_receiver, import_sender, import_websocket, import_websocket_server, wrapper_default;
|
|
40870
|
+
// ../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/wrapper.mjs
|
|
40871
|
+
var import_stream, import_extension, import_permessage_deflate, import_receiver, import_sender, import_subprotocol, import_websocket, import_websocket_server, wrapper_default;
|
|
40670
40872
|
var init_wrapper = __esm(() => {
|
|
40671
40873
|
import_stream = __toESM(require_stream(), 1);
|
|
40874
|
+
import_extension = __toESM(require_extension(), 1);
|
|
40875
|
+
import_permessage_deflate = __toESM(require_permessage_deflate(), 1);
|
|
40672
40876
|
import_receiver = __toESM(require_receiver(), 1);
|
|
40673
40877
|
import_sender = __toESM(require_sender(), 1);
|
|
40878
|
+
import_subprotocol = __toESM(require_subprotocol(), 1);
|
|
40674
40879
|
import_websocket = __toESM(require_websocket(), 1);
|
|
40675
40880
|
import_websocket_server = __toESM(require_websocket_server(), 1);
|
|
40676
40881
|
wrapper_default = import_websocket.default;
|
|
@@ -62876,11 +63081,11 @@ function combineExtensions(extensions) {
|
|
|
62876
63081
|
syntaxExtension(all3, extensions[index2]);
|
|
62877
63082
|
return all3;
|
|
62878
63083
|
}
|
|
62879
|
-
function syntaxExtension(all3,
|
|
63084
|
+
function syntaxExtension(all3, extension2) {
|
|
62880
63085
|
let hook;
|
|
62881
|
-
for (hook in
|
|
63086
|
+
for (hook in extension2) {
|
|
62882
63087
|
const left = (hasOwnProperty.call(all3, hook) ? all3[hook] : undefined) || (all3[hook] = {});
|
|
62883
|
-
const right =
|
|
63088
|
+
const right = extension2[hook];
|
|
62884
63089
|
let code$1;
|
|
62885
63090
|
if (right)
|
|
62886
63091
|
for (code$1 in right) {
|
|
@@ -65039,7 +65244,7 @@ var init_remark_gfm_BUJjZJLy_es = __esm(() => {
|
|
|
65039
65244
|
emptyOptions2 = {};
|
|
65040
65245
|
});
|
|
65041
65246
|
|
|
65042
|
-
// ../../packages/superdoc/dist/chunks/SuperConverter-
|
|
65247
|
+
// ../../packages/superdoc/dist/chunks/SuperConverter-Dyz8lKjn.es.js
|
|
65043
65248
|
function getExtensionConfigField(extension$1, field, context = { name: "" }) {
|
|
65044
65249
|
const fieldValue = extension$1.config[field];
|
|
65045
65250
|
if (typeof fieldValue === "function")
|
|
@@ -66850,7 +67055,7 @@ function optionalTargetLocatorWithPayload2(payloadProperties, payloadRequired =
|
|
|
66850
67055
|
objectSchema2({
|
|
66851
67056
|
ref: {
|
|
66852
67057
|
type: "string",
|
|
66853
|
-
description: "Handle ref
|
|
67058
|
+
description: "Handle ref from superdoc_search result (pass handle.ref value directly). Preferred over building a target object."
|
|
66854
67059
|
},
|
|
66855
67060
|
...payloadProperties
|
|
66856
67061
|
}, ["ref", ...payloadRequired]),
|
|
@@ -69277,6 +69482,23 @@ function executeCreateTableOfContents2(adapter, input, options) {
|
|
|
69277
69482
|
};
|
|
69278
69483
|
return adapter.tableOfContents(normalized, normalizeMutationOptions2(options));
|
|
69279
69484
|
}
|
|
69485
|
+
function normalizeBlocksListInput2(input) {
|
|
69486
|
+
if (!input)
|
|
69487
|
+
return input;
|
|
69488
|
+
if (input.limit != null && input.limit === 0) {
|
|
69489
|
+
const { limit: _, ...rest } = input;
|
|
69490
|
+
input = Object.keys(rest).length > 0 ? rest : undefined;
|
|
69491
|
+
if (!input)
|
|
69492
|
+
return input;
|
|
69493
|
+
}
|
|
69494
|
+
if (Array.isArray(input.nodeTypes) && input.nodeTypes.length === 0) {
|
|
69495
|
+
const { nodeTypes: _, ...rest } = input;
|
|
69496
|
+
input = Object.keys(rest).length > 0 ? rest : undefined;
|
|
69497
|
+
if (!input)
|
|
69498
|
+
return input;
|
|
69499
|
+
}
|
|
69500
|
+
return input;
|
|
69501
|
+
}
|
|
69280
69502
|
function validateBlocksListInput2(input) {
|
|
69281
69503
|
if (!input)
|
|
69282
69504
|
return;
|
|
@@ -69334,8 +69556,9 @@ function validateBlocksDeleteRangeInput2(input) {
|
|
|
69334
69556
|
validateBlockNodeAddress2(input.end, "end");
|
|
69335
69557
|
}
|
|
69336
69558
|
function executeBlocksList2(adapter, input) {
|
|
69337
|
-
|
|
69338
|
-
|
|
69559
|
+
const normalized = normalizeBlocksListInput2(input);
|
|
69560
|
+
validateBlocksListInput2(normalized);
|
|
69561
|
+
return adapter.list(normalized);
|
|
69339
69562
|
}
|
|
69340
69563
|
function executeBlocksDelete2(adapter, input, options) {
|
|
69341
69564
|
validateBlocksDeleteInput2(input);
|
|
@@ -85929,18 +86152,21 @@ function sanitizeHtml(html2, forbiddenTags = [
|
|
|
85929
86152
|
}
|
|
85930
86153
|
const container = resolvedDocument.createElement("div");
|
|
85931
86154
|
container.innerHTML = html2;
|
|
86155
|
+
const domNode = resolvedDocument.defaultView?.Node ?? globalThis.Node;
|
|
86156
|
+
const COMMENT_NODE = domNode?.COMMENT_NODE ?? 8;
|
|
86157
|
+
const ELEMENT_NODE = domNode?.ELEMENT_NODE ?? 1;
|
|
85932
86158
|
const stripWordListConditionalPrefixes = (root2) => {
|
|
85933
86159
|
const stripFromNode = (node3) => {
|
|
85934
86160
|
if (!node3?.childNodes)
|
|
85935
86161
|
return;
|
|
85936
86162
|
for (let i$1 = 0;i$1 < node3.childNodes.length; i$1 += 1) {
|
|
85937
86163
|
const current = node3.childNodes[i$1];
|
|
85938
|
-
if (current?.nodeType ===
|
|
86164
|
+
if (current?.nodeType === COMMENT_NODE && current.nodeValue?.includes("[if !supportLists]")) {
|
|
85939
86165
|
const nodesToStrip = [];
|
|
85940
86166
|
let endifComment = null;
|
|
85941
86167
|
for (let j = i$1 + 1;j < node3.childNodes.length; j += 1) {
|
|
85942
86168
|
const next = node3.childNodes[j];
|
|
85943
|
-
if (next?.nodeType ===
|
|
86169
|
+
if (next?.nodeType === COMMENT_NODE && next.nodeValue?.includes("[endif]")) {
|
|
85944
86170
|
endifComment = next;
|
|
85945
86171
|
break;
|
|
85946
86172
|
}
|
|
@@ -85958,7 +86184,7 @@ function sanitizeHtml(html2, forbiddenTags = [
|
|
|
85958
86184
|
i$1 -= 1;
|
|
85959
86185
|
continue;
|
|
85960
86186
|
}
|
|
85961
|
-
if (current?.nodeType ===
|
|
86187
|
+
if (current?.nodeType === ELEMENT_NODE)
|
|
85962
86188
|
stripFromNode(current);
|
|
85963
86189
|
}
|
|
85964
86190
|
};
|
|
@@ -86293,16 +86519,18 @@ function hasPreservableContent(element, knownTags) {
|
|
|
86293
86519
|
function createDocFromHTML(content$2, editor, options = {}) {
|
|
86294
86520
|
const { isImport = false } = options;
|
|
86295
86521
|
let parsedContent;
|
|
86522
|
+
let domDocument = options.document ?? editor?.options?.document ?? editor?.options?.mockDocument ?? (typeof document !== "undefined" ? document : null);
|
|
86296
86523
|
if (typeof content$2 === "string") {
|
|
86297
|
-
const domDocument = options.document ?? editor?.options?.document ?? editor?.options?.mockDocument ?? (typeof document !== "undefined" ? document : null);
|
|
86298
86524
|
const tempDiv = htmlHandler(stripHtmlStyles(content$2, domDocument), editor, domDocument);
|
|
86299
86525
|
if (isImport)
|
|
86300
86526
|
tempDiv.dataset.superdocImport = "true";
|
|
86301
86527
|
parsedContent = tempDiv;
|
|
86302
86528
|
} else
|
|
86303
86529
|
parsedContent = content$2;
|
|
86304
|
-
|
|
86305
|
-
|
|
86530
|
+
const domElement = parsedContent?.ownerDocument?.defaultView?.Element ?? domDocument?.defaultView?.Element ?? globalThis.Element;
|
|
86531
|
+
const parsedElement = (options.onUnsupportedContent || options.warnOnUnsupportedContent) && domElement && parsedContent instanceof domElement ? parsedContent : null;
|
|
86532
|
+
if (parsedElement) {
|
|
86533
|
+
const unsupported = detectUnsupportedContent(parsedElement, editor.schema);
|
|
86306
86534
|
if (unsupported.length > 0)
|
|
86307
86535
|
if (options.onUnsupportedContent)
|
|
86308
86536
|
options.onUnsupportedContent(unsupported);
|
|
@@ -89437,7 +89665,7 @@ function preprocess() {
|
|
|
89437
89665
|
}
|
|
89438
89666
|
}
|
|
89439
89667
|
function fromMarkdown(value, encoding, options) {
|
|
89440
|
-
if (typeof encoding
|
|
89668
|
+
if (encoding && typeof encoding === "object") {
|
|
89441
89669
|
options = encoding;
|
|
89442
89670
|
encoding = undefined;
|
|
89443
89671
|
}
|
|
@@ -90071,10 +90299,10 @@ function configure(combined, extensions) {
|
|
|
90071
90299
|
if (Array.isArray(value))
|
|
90072
90300
|
configure(combined, value);
|
|
90073
90301
|
else
|
|
90074
|
-
|
|
90302
|
+
extension2(combined, value);
|
|
90075
90303
|
}
|
|
90076
90304
|
}
|
|
90077
|
-
function
|
|
90305
|
+
function extension2(combined, extension$1) {
|
|
90078
90306
|
let key;
|
|
90079
90307
|
for (key in extension$1)
|
|
90080
90308
|
if (own3.call(extension$1, key))
|
|
@@ -109930,7 +110158,19 @@ var isRegExp = (value) => {
|
|
|
109930
110158
|
typeOver = true;
|
|
109931
110159
|
}
|
|
109932
110160
|
}
|
|
109933
|
-
if (
|
|
110161
|
+
if (added.some((n) => n.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
110162
|
+
for (let node3 of added)
|
|
110163
|
+
if (node3.nodeName == "BR" && node3.parentNode) {
|
|
110164
|
+
let after2 = node3.nextSibling;
|
|
110165
|
+
while (after2 && after2.nodeType == 1) {
|
|
110166
|
+
if (after2.contentEditable == "false") {
|
|
110167
|
+
node3.parentNode.removeChild(node3);
|
|
110168
|
+
break;
|
|
110169
|
+
}
|
|
110170
|
+
after2 = after2.firstChild;
|
|
110171
|
+
}
|
|
110172
|
+
}
|
|
110173
|
+
} else if (gecko && added.length) {
|
|
109934
110174
|
let brs = added.filter((n) => n.nodeName == "BR");
|
|
109935
110175
|
if (brs.length == 2) {
|
|
109936
110176
|
let [a, b] = brs;
|
|
@@ -109946,13 +110186,6 @@ var isRegExp = (value) => {
|
|
|
109946
110186
|
br.remove();
|
|
109947
110187
|
}
|
|
109948
110188
|
}
|
|
109949
|
-
} else if ((chrome || safari) && added.some((n) => n.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
|
|
109950
|
-
for (let node3 of added)
|
|
109951
|
-
if (node3.nodeName == "BR" && node3.parentNode) {
|
|
109952
|
-
let after2 = node3.nextSibling;
|
|
109953
|
-
if (after2 && after2.nodeType == 1 && after2.contentEditable == "false")
|
|
109954
|
-
node3.parentNode.removeChild(node3);
|
|
109955
|
-
}
|
|
109956
110189
|
}
|
|
109957
110190
|
let readSel = null;
|
|
109958
110191
|
if (from4 < 0 && newSel && view.input.lastFocus > Date.now() - 200 && Math.max(view.input.lastTouch, view.input.lastClick.time) < Date.now() - 300 && selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) && readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {
|
|
@@ -110201,11 +110434,11 @@ var isRegExp = (value) => {
|
|
|
110201
110434
|
}
|
|
110202
110435
|
updateDraggedNode(dragging, prev) {
|
|
110203
110436
|
let sel = dragging.node, found$1 = -1;
|
|
110204
|
-
if (this.state.doc.nodeAt(sel.from) == sel.node)
|
|
110437
|
+
if (sel.from < this.state.doc.content.size && this.state.doc.nodeAt(sel.from) == sel.node)
|
|
110205
110438
|
found$1 = sel.from;
|
|
110206
110439
|
else {
|
|
110207
110440
|
let movedPos = sel.from + (this.state.doc.content.size - prev.doc.content.size);
|
|
110208
|
-
if ((movedPos > 0 && this.state.doc.nodeAt(movedPos)) == sel.node)
|
|
110441
|
+
if ((movedPos > 0 && movedPos < this.state.doc.content.size && this.state.doc.nodeAt(movedPos)) == sel.node)
|
|
110209
110442
|
found$1 = movedPos;
|
|
110210
110443
|
}
|
|
110211
110444
|
this.dragging = new Dragging(dragging.slice, dragging.move, found$1 < 0 ? undefined : NodeSelection.create(this.state.doc, found$1));
|
|
@@ -116546,7 +116779,7 @@ var isRegExp = (value) => {
|
|
|
116546
116779
|
if (id2)
|
|
116547
116780
|
return trackedChanges.filter(({ mark }) => mark.attrs.id === id2);
|
|
116548
116781
|
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.
|
|
116782
|
+
}, 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
116783
|
if (!runProps?.elements?.length || !state)
|
|
116551
116784
|
return;
|
|
116552
116785
|
const fontsNode = runProps.elements.find((el) => el.name === "w:rFonts");
|
|
@@ -116580,7 +116813,7 @@ var isRegExp = (value) => {
|
|
|
116580
116813
|
state.kern = kernNode.attributes["w:val"];
|
|
116581
116814
|
}
|
|
116582
116815
|
}, SuperConverter;
|
|
116583
|
-
var
|
|
116816
|
+
var init_SuperConverter_Dyz8lKjn_es = __esm(() => {
|
|
116584
116817
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
116585
116818
|
init_jszip_ChlR43oI_es();
|
|
116586
116819
|
init_xml_js_40FWvL78_es();
|
|
@@ -120525,7 +120758,9 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
120525
120758
|
throws: T_PARAGRAPH_MUTATION2
|
|
120526
120759
|
}),
|
|
120527
120760
|
referenceDocPath: "format/paragraph/set-flow-options.mdx",
|
|
120528
|
-
referenceGroup: "format.paragraph"
|
|
120761
|
+
referenceGroup: "format.paragraph",
|
|
120762
|
+
intentGroup: "format",
|
|
120763
|
+
intentAction: "set_flow_options"
|
|
120529
120764
|
},
|
|
120530
120765
|
"format.paragraph.setTabStop": {
|
|
120531
120766
|
memberPath: "format.paragraph.setTabStop",
|
|
@@ -121622,7 +121857,9 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
121622
121857
|
]
|
|
121623
121858
|
}),
|
|
121624
121859
|
referenceDocPath: "create/table.mdx",
|
|
121625
|
-
referenceGroup: "create"
|
|
121860
|
+
referenceGroup: "create",
|
|
121861
|
+
intentGroup: "create",
|
|
121862
|
+
intentAction: "table"
|
|
121626
121863
|
},
|
|
121627
121864
|
"tables.convertFromText": {
|
|
121628
121865
|
memberPath: "tables.convertFromText",
|
|
@@ -126141,7 +126378,11 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
126141
126378
|
success: { const: true },
|
|
126142
126379
|
paragraph: paragraphAddressSchema2,
|
|
126143
126380
|
insertionPoint: textAddressSchema2,
|
|
126144
|
-
trackedChangeRefs: arraySchema2(trackChangeRefSchema2)
|
|
126381
|
+
trackedChangeRefs: arraySchema2(trackChangeRefSchema2),
|
|
126382
|
+
ref: {
|
|
126383
|
+
type: "string",
|
|
126384
|
+
description: "Ref handle for the created block. Pass directly to superdoc_format or superdoc_edit ref param without searching."
|
|
126385
|
+
}
|
|
126145
126386
|
}, [
|
|
126146
126387
|
"success",
|
|
126147
126388
|
"paragraph",
|
|
@@ -126151,7 +126392,11 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
126151
126392
|
success: { const: true },
|
|
126152
126393
|
heading: headingAddressSchema2,
|
|
126153
126394
|
insertionPoint: textAddressSchema2,
|
|
126154
|
-
trackedChangeRefs: arraySchema2(trackChangeRefSchema2)
|
|
126395
|
+
trackedChangeRefs: arraySchema2(trackChangeRefSchema2),
|
|
126396
|
+
ref: {
|
|
126397
|
+
type: "string",
|
|
126398
|
+
description: "Ref handle for the created block. Pass directly to superdoc_format or superdoc_edit ref param without searching."
|
|
126399
|
+
}
|
|
126155
126400
|
}, [
|
|
126156
126401
|
"success",
|
|
126157
126402
|
"heading",
|
|
@@ -127664,6 +127909,10 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
127664
127909
|
type: "boolean",
|
|
127665
127910
|
description: "True if text is bold."
|
|
127666
127911
|
},
|
|
127912
|
+
color: {
|
|
127913
|
+
type: "string",
|
|
127914
|
+
description: "Text color when explicitly set (e.g. '#000000')."
|
|
127915
|
+
},
|
|
127667
127916
|
alignment: {
|
|
127668
127917
|
type: "string",
|
|
127669
127918
|
description: "Paragraph alignment."
|
|
@@ -127671,6 +127920,10 @@ var init_SuperConverter_C6rVgqDZ_es = __esm(() => {
|
|
|
127671
127920
|
headingLevel: {
|
|
127672
127921
|
type: "number",
|
|
127673
127922
|
description: "Heading level (1-6)."
|
|
127923
|
+
},
|
|
127924
|
+
ref: {
|
|
127925
|
+
type: "string",
|
|
127926
|
+
description: "Ref handle for this block. Pass directly to superdoc_format or superdoc_edit ref param. Only present for non-empty blocks."
|
|
127674
127927
|
}
|
|
127675
127928
|
}, [
|
|
127676
127929
|
"ordinal",
|
|
@@ -153649,28 +153902,28 @@ function zwitch(key, options) {
|
|
|
153649
153902
|
one2.unknown = settings.unknown;
|
|
153650
153903
|
return one2;
|
|
153651
153904
|
}
|
|
153652
|
-
function configure2(base3,
|
|
153905
|
+
function configure2(base3, extension3) {
|
|
153653
153906
|
let index2 = -1;
|
|
153654
153907
|
let key;
|
|
153655
|
-
if (
|
|
153656
|
-
while (++index2 <
|
|
153657
|
-
configure2(base3,
|
|
153658
|
-
for (key in
|
|
153659
|
-
if (own4.call(
|
|
153908
|
+
if (extension3.extensions)
|
|
153909
|
+
while (++index2 < extension3.extensions.length)
|
|
153910
|
+
configure2(base3, extension3.extensions[index2]);
|
|
153911
|
+
for (key in extension3)
|
|
153912
|
+
if (own4.call(extension3, key))
|
|
153660
153913
|
switch (key) {
|
|
153661
153914
|
case "extensions":
|
|
153662
153915
|
break;
|
|
153663
153916
|
case "unsafe":
|
|
153664
|
-
list3(base3[key],
|
|
153917
|
+
list3(base3[key], extension3[key]);
|
|
153665
153918
|
break;
|
|
153666
153919
|
case "join":
|
|
153667
|
-
list3(base3[key],
|
|
153920
|
+
list3(base3[key], extension3[key]);
|
|
153668
153921
|
break;
|
|
153669
153922
|
case "handlers":
|
|
153670
|
-
map5(base3[key],
|
|
153923
|
+
map5(base3[key], extension3[key]);
|
|
153671
153924
|
break;
|
|
153672
153925
|
default:
|
|
153673
|
-
base3.options[key] =
|
|
153926
|
+
base3.options[key] = extension3[key];
|
|
153674
153927
|
}
|
|
153675
153928
|
return base3;
|
|
153676
153929
|
}
|
|
@@ -155274,15 +155527,15 @@ var DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.docum
|
|
|
155274
155527
|
this.mediaFiles[name] = fileBase64;
|
|
155275
155528
|
} else {
|
|
155276
155529
|
const fileBase64 = await zipEntry.async("base64");
|
|
155277
|
-
let
|
|
155530
|
+
let extension3 = this.getFileExtension(name)?.toLowerCase();
|
|
155278
155531
|
let detectedType = null;
|
|
155279
|
-
if (!IMAGE_EXTS.has(
|
|
155532
|
+
if (!IMAGE_EXTS.has(extension3) || extension3 === "tmp") {
|
|
155280
155533
|
detectedType = detectImageType(fileBase64);
|
|
155281
155534
|
if (detectedType)
|
|
155282
|
-
|
|
155535
|
+
extension3 = detectedType;
|
|
155283
155536
|
}
|
|
155284
|
-
if (IMAGE_EXTS.has(
|
|
155285
|
-
const mimeSubtype = MIME_TYPE_FOR_EXT[
|
|
155537
|
+
if (IMAGE_EXTS.has(extension3)) {
|
|
155538
|
+
const mimeSubtype = MIME_TYPE_FOR_EXT[extension3] || extension3;
|
|
155286
155539
|
this.mediaFiles[name] = `data:image/${mimeSubtype};base64,${fileBase64}`;
|
|
155287
155540
|
const blob = await zipEntry.async("blob");
|
|
155288
155541
|
const fileObj = new File([blob], name, { type: blob.type });
|
|
@@ -173461,7 +173714,7 @@ var init_remark_gfm_DCND_V_3_es = __esm(() => {
|
|
|
173461
173714
|
init_remark_gfm_BUJjZJLy_es();
|
|
173462
173715
|
});
|
|
173463
173716
|
|
|
173464
|
-
// ../../packages/superdoc/dist/chunks/src-
|
|
173717
|
+
// ../../packages/superdoc/dist/chunks/src-wLlfPuEU.es.js
|
|
173465
173718
|
function deleteProps(obj, propOrProps) {
|
|
173466
173719
|
const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
|
|
173467
173720
|
const removeNested = (target, pathParts, index2 = 0) => {
|
|
@@ -174098,7 +174351,7 @@ function prosemirrorToYXmlFragment(doc$12, xmlFragment) {
|
|
|
174098
174351
|
}
|
|
174099
174352
|
function getSuperdocVersion() {
|
|
174100
174353
|
try {
|
|
174101
|
-
return "1.23.
|
|
174354
|
+
return "1.23.1";
|
|
174102
174355
|
} catch {
|
|
174103
174356
|
return "unknown";
|
|
174104
174357
|
}
|
|
@@ -176153,6 +176406,39 @@ function tableSeparatorNeeds$1(doc$12, pos) {
|
|
|
176153
176406
|
after: !nodeAfter || nodeAfter.type.name === "table"
|
|
176154
176407
|
};
|
|
176155
176408
|
}
|
|
176409
|
+
function computeParagraphContentBounds(paragraphPos, paragraphNode) {
|
|
176410
|
+
if (!Number.isFinite(paragraphPos) || !paragraphNode || !Number.isFinite(paragraphNode.nodeSize))
|
|
176411
|
+
return null;
|
|
176412
|
+
let from$1 = paragraphPos + 1;
|
|
176413
|
+
let to = paragraphPos + paragraphNode.nodeSize - 1;
|
|
176414
|
+
if (paragraphNode.firstChild?.type?.name === "run")
|
|
176415
|
+
from$1 = paragraphPos + 2;
|
|
176416
|
+
if (paragraphNode.lastChild?.type?.name === "run")
|
|
176417
|
+
to = paragraphPos + paragraphNode.nodeSize - 2;
|
|
176418
|
+
if (to < from$1)
|
|
176419
|
+
to = from$1;
|
|
176420
|
+
return {
|
|
176421
|
+
from: from$1,
|
|
176422
|
+
to
|
|
176423
|
+
};
|
|
176424
|
+
}
|
|
176425
|
+
function computeToggleListSelectionRange({ selectionWasCollapsed, affectedParagraphCount, firstParagraphPos, lastParagraphPos, firstNode, lastNode }) {
|
|
176426
|
+
if (affectedParagraphCount <= 0)
|
|
176427
|
+
return null;
|
|
176428
|
+
const firstBounds = computeParagraphContentBounds(firstParagraphPos, firstNode);
|
|
176429
|
+
const lastBounds = computeParagraphContentBounds(lastParagraphPos, lastNode);
|
|
176430
|
+
if (!firstBounds || !lastBounds)
|
|
176431
|
+
return null;
|
|
176432
|
+
if (selectionWasCollapsed && affectedParagraphCount === 1)
|
|
176433
|
+
return {
|
|
176434
|
+
from: lastBounds.to,
|
|
176435
|
+
to: lastBounds.to
|
|
176436
|
+
};
|
|
176437
|
+
return {
|
|
176438
|
+
from: firstBounds.from,
|
|
176439
|
+
to: lastBounds.to
|
|
176440
|
+
};
|
|
176441
|
+
}
|
|
176156
176442
|
function numFmtIsBullet(numFmt) {
|
|
176157
176443
|
if (numFmt == null)
|
|
176158
176444
|
return false;
|
|
@@ -185381,10 +185667,10 @@ function Item$1(fun, array) {
|
|
|
185381
185667
|
this.array = array;
|
|
185382
185668
|
}
|
|
185383
185669
|
function noop2() {}
|
|
185384
|
-
function isExtensionRulesEnabled(
|
|
185670
|
+
function isExtensionRulesEnabled(extension3, enabled) {
|
|
185385
185671
|
if (Array.isArray(enabled))
|
|
185386
185672
|
return enabled.some((enabledExtension) => {
|
|
185387
|
-
return (typeof enabledExtension === "string" ? enabledExtension : enabledExtension.name) ===
|
|
185673
|
+
return (typeof enabledExtension === "string" ? enabledExtension : enabledExtension.name) === extension3.name;
|
|
185388
185674
|
});
|
|
185389
185675
|
return enabled;
|
|
185390
185676
|
}
|
|
@@ -195811,6 +196097,21 @@ function collectTrackInsertRefsInRange(editor, from$1, to) {
|
|
|
195811
196097
|
entityId: id2
|
|
195812
196098
|
}));
|
|
195813
196099
|
}
|
|
196100
|
+
function mintBlockRef(editor, storyKey, nodeId, textLength) {
|
|
196101
|
+
return encodeV4Ref({
|
|
196102
|
+
v: 4,
|
|
196103
|
+
rev: getRevision(editor),
|
|
196104
|
+
storyKey,
|
|
196105
|
+
scope: "block",
|
|
196106
|
+
matchId: `create:${nodeId}`,
|
|
196107
|
+
segments: [{
|
|
196108
|
+
blockId: nodeId,
|
|
196109
|
+
start: 0,
|
|
196110
|
+
end: textLength
|
|
196111
|
+
}],
|
|
196112
|
+
blockIndex: 0
|
|
196113
|
+
});
|
|
196114
|
+
}
|
|
195814
196115
|
function resolveCreateInsertPosition(editor, at) {
|
|
195815
196116
|
const location$1 = at ?? { kind: "documentEnd" };
|
|
195816
196117
|
if (location$1.kind === "documentStart")
|
|
@@ -195838,7 +196139,7 @@ function resolveCreatedBlock(editor, nodeType, blockId) {
|
|
|
195838
196139
|
return fallback;
|
|
195839
196140
|
throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Created ${nodeType} could not be resolved after insertion.`, { [`${nodeType}Id`]: blockId });
|
|
195840
196141
|
}
|
|
195841
|
-
function buildParagraphCreateSuccess(paragraphNodeId, trackedChangeRefs, story) {
|
|
196142
|
+
function buildParagraphCreateSuccess(paragraphNodeId, trackedChangeRefs, story, ref$1) {
|
|
195842
196143
|
return {
|
|
195843
196144
|
success: true,
|
|
195844
196145
|
paragraph: {
|
|
@@ -195856,10 +196157,11 @@ function buildParagraphCreateSuccess(paragraphNodeId, trackedChangeRefs, story)
|
|
|
195856
196157
|
},
|
|
195857
196158
|
...story && { story }
|
|
195858
196159
|
},
|
|
195859
|
-
trackedChangeRefs
|
|
196160
|
+
trackedChangeRefs,
|
|
196161
|
+
...ref$1 ? { ref: ref$1 } : {}
|
|
195860
196162
|
};
|
|
195861
196163
|
}
|
|
195862
|
-
function buildHeadingCreateSuccess(headingNodeId, trackedChangeRefs, story) {
|
|
196164
|
+
function buildHeadingCreateSuccess(headingNodeId, trackedChangeRefs, story, ref$1) {
|
|
195863
196165
|
return {
|
|
195864
196166
|
success: true,
|
|
195865
196167
|
heading: {
|
|
@@ -195877,7 +196179,8 @@ function buildHeadingCreateSuccess(headingNodeId, trackedChangeRefs, story) {
|
|
|
195877
196179
|
},
|
|
195878
196180
|
...story && { story }
|
|
195879
196181
|
},
|
|
195880
|
-
trackedChangeRefs
|
|
196182
|
+
trackedChangeRefs,
|
|
196183
|
+
...ref$1 ? { ref: ref$1 } : {}
|
|
195881
196184
|
};
|
|
195882
196185
|
}
|
|
195883
196186
|
function createParagraphWrapper(editor, input2, options) {
|
|
@@ -195953,7 +196256,9 @@ function createParagraphWrapper(editor, input2, options) {
|
|
|
195953
196256
|
if (runtime.commit)
|
|
195954
196257
|
runtime.commit(editor);
|
|
195955
196258
|
const nonBodyStory = runtime.kind !== "body" ? runtime.locator : undefined;
|
|
195956
|
-
|
|
196259
|
+
const textLen = input2.text?.length ?? 0;
|
|
196260
|
+
const ref$1 = textLen > 0 ? mintBlockRef(storyEditor, runtime.storyKey, canonicalId, textLen) : undefined;
|
|
196261
|
+
return buildParagraphCreateSuccess(canonicalId, trackedChangeRefs, nonBodyStory, ref$1);
|
|
195957
196262
|
} finally {
|
|
195958
196263
|
disposeEphemeralWriteRuntime(runtime);
|
|
195959
196264
|
}
|
|
@@ -196033,7 +196338,9 @@ function createHeadingWrapper(editor, input2, options) {
|
|
|
196033
196338
|
if (runtime.commit)
|
|
196034
196339
|
runtime.commit(editor);
|
|
196035
196340
|
const nonBodyStory = runtime.kind !== "body" ? runtime.locator : undefined;
|
|
196036
|
-
|
|
196341
|
+
const textLen = input2.text?.length ?? 0;
|
|
196342
|
+
const ref$1 = textLen > 0 ? mintBlockRef(storyEditor, runtime.storyKey, canonicalId, textLen) : undefined;
|
|
196343
|
+
return buildHeadingCreateSuccess(canonicalId, trackedChangeRefs, nonBodyStory, ref$1);
|
|
196037
196344
|
} finally {
|
|
196038
196345
|
disposeEphemeralWriteRuntime(runtime);
|
|
196039
196346
|
}
|
|
@@ -196052,6 +196359,8 @@ function extractBlockFormatting(node3) {
|
|
|
196052
196359
|
let fontFamily;
|
|
196053
196360
|
let fontSize;
|
|
196054
196361
|
let bold2;
|
|
196362
|
+
let underline;
|
|
196363
|
+
let color2;
|
|
196055
196364
|
node3.descendants((child) => {
|
|
196056
196365
|
if (fontFamily !== undefined)
|
|
196057
196366
|
return false;
|
|
@@ -196059,19 +196368,28 @@ function extractBlockFormatting(node3) {
|
|
|
196059
196368
|
if (!child.isText || marks.length === 0)
|
|
196060
196369
|
return;
|
|
196061
196370
|
for (const mark2 of marks) {
|
|
196371
|
+
const markName = mark2.type.name;
|
|
196062
196372
|
const attrs = mark2.attrs;
|
|
196063
|
-
if (
|
|
196064
|
-
fontFamily
|
|
196065
|
-
|
|
196066
|
-
|
|
196067
|
-
|
|
196068
|
-
|
|
196373
|
+
if (markName === "textStyle") {
|
|
196374
|
+
if (typeof attrs.fontFamily === "string" && attrs.fontFamily)
|
|
196375
|
+
fontFamily = attrs.fontFamily;
|
|
196376
|
+
if (attrs.fontSize != null) {
|
|
196377
|
+
const raw = typeof attrs.fontSize === "string" ? parseFloat(attrs.fontSize) : attrs.fontSize;
|
|
196378
|
+
if (typeof raw === "number" && Number.isFinite(raw))
|
|
196379
|
+
fontSize = raw;
|
|
196380
|
+
}
|
|
196381
|
+
if (typeof attrs.color === "string" && attrs.color)
|
|
196382
|
+
color2 = attrs.color;
|
|
196069
196383
|
}
|
|
196070
|
-
if (attrs.
|
|
196384
|
+
if (markName === "bold" && attrs.value === true)
|
|
196071
196385
|
bold2 = true;
|
|
196386
|
+
if (markName === "underline")
|
|
196387
|
+
underline = true;
|
|
196072
196388
|
}
|
|
196073
196389
|
return false;
|
|
196074
196390
|
});
|
|
196391
|
+
if (color2 === "auto")
|
|
196392
|
+
color2 = undefined;
|
|
196075
196393
|
let headingLevel;
|
|
196076
196394
|
if (typeof styleId === "string") {
|
|
196077
196395
|
const m$1 = HEADING_PATTERN.exec(styleId);
|
|
@@ -196083,6 +196401,8 @@ function extractBlockFormatting(node3) {
|
|
|
196083
196401
|
...fontFamily ? { fontFamily } : {},
|
|
196084
196402
|
...fontSize !== undefined ? { fontSize } : {},
|
|
196085
196403
|
...bold2 ? { bold: bold2 } : {},
|
|
196404
|
+
...underline ? { underline } : {},
|
|
196405
|
+
...color2 ? { color: color2 } : {},
|
|
196086
196406
|
...pProps?.justification ? { alignment: pProps.justification } : {},
|
|
196087
196407
|
...headingLevel ? { headingLevel } : {}
|
|
196088
196408
|
};
|
|
@@ -196149,17 +196469,36 @@ function blocksListWrapper(editor, input2) {
|
|
|
196149
196469
|
const total = filtered.length;
|
|
196150
196470
|
const offset$1 = input2?.offset ?? 0;
|
|
196151
196471
|
const limit = input2?.limit ?? total;
|
|
196472
|
+
const paged = filtered.slice(offset$1, offset$1 + limit);
|
|
196473
|
+
const rev = getRevision(editor);
|
|
196152
196474
|
return {
|
|
196153
196475
|
total,
|
|
196154
|
-
blocks:
|
|
196155
|
-
|
|
196156
|
-
|
|
196157
|
-
|
|
196158
|
-
|
|
196159
|
-
|
|
196160
|
-
|
|
196161
|
-
|
|
196162
|
-
|
|
196476
|
+
blocks: paged.map((candidate, i4) => {
|
|
196477
|
+
const textLength = computeTextContentLength(candidate.node);
|
|
196478
|
+
const ref$1 = textLength > 0 ? encodeV4Ref({
|
|
196479
|
+
v: 4,
|
|
196480
|
+
rev,
|
|
196481
|
+
storyKey: "body",
|
|
196482
|
+
scope: "block",
|
|
196483
|
+
matchId: candidate.nodeId,
|
|
196484
|
+
segments: [{
|
|
196485
|
+
blockId: candidate.nodeId,
|
|
196486
|
+
start: 0,
|
|
196487
|
+
end: textLength
|
|
196488
|
+
}],
|
|
196489
|
+
blockIndex: offset$1 + i4
|
|
196490
|
+
}) : undefined;
|
|
196491
|
+
return {
|
|
196492
|
+
ordinal: offset$1 + i4,
|
|
196493
|
+
nodeId: candidate.nodeId,
|
|
196494
|
+
nodeType: candidate.nodeType,
|
|
196495
|
+
textPreview: extractTextPreview(candidate.node),
|
|
196496
|
+
isEmpty: textLength === 0,
|
|
196497
|
+
...extractBlockFormatting(candidate.node),
|
|
196498
|
+
...ref$1 ? { ref: ref$1 } : {}
|
|
196499
|
+
};
|
|
196500
|
+
}),
|
|
196501
|
+
revision: rev
|
|
196163
196502
|
};
|
|
196164
196503
|
}
|
|
196165
196504
|
function blocksDeleteWrapper(editor, input2, options) {
|
|
@@ -211906,6 +212245,502 @@ function resolveAnnotationDisplayLabel(annotation, contentEl) {
|
|
|
211906
212245
|
value: derivedLabel
|
|
211907
212246
|
};
|
|
211908
212247
|
}
|
|
212248
|
+
function cssClassForKind(kind) {
|
|
212249
|
+
switch (kind) {
|
|
212250
|
+
case "spelling":
|
|
212251
|
+
return PROOFING_CSS.SPELLING;
|
|
212252
|
+
case "grammar":
|
|
212253
|
+
return PROOFING_CSS.GRAMMAR;
|
|
212254
|
+
case "style":
|
|
212255
|
+
return PROOFING_CSS.STYLE;
|
|
212256
|
+
}
|
|
212257
|
+
}
|
|
212258
|
+
function computeSplitSegments(spanPmStart, spanPmEnd, spanText, annotations) {
|
|
212259
|
+
const boundaries = /* @__PURE__ */ new Set;
|
|
212260
|
+
boundaries.add(spanPmStart);
|
|
212261
|
+
boundaries.add(spanPmEnd);
|
|
212262
|
+
for (const annotation of annotations) {
|
|
212263
|
+
const clampedFrom = Math.max(annotation.pmFrom, spanPmStart);
|
|
212264
|
+
const clampedTo = Math.min(annotation.pmTo, spanPmEnd);
|
|
212265
|
+
if (clampedFrom > spanPmStart)
|
|
212266
|
+
boundaries.add(clampedFrom);
|
|
212267
|
+
if (clampedTo < spanPmEnd)
|
|
212268
|
+
boundaries.add(clampedTo);
|
|
212269
|
+
}
|
|
212270
|
+
const sortedBoundaries = Array.from(boundaries).sort((a2, b$1) => a2 - b$1);
|
|
212271
|
+
const segments = [];
|
|
212272
|
+
for (let index2 = 0;index2 < sortedBoundaries.length - 1; index2 += 1) {
|
|
212273
|
+
const segmentPmStart = sortedBoundaries[index2];
|
|
212274
|
+
const segmentPmEnd = sortedBoundaries[index2 + 1];
|
|
212275
|
+
const textStart = segmentPmStart - spanPmStart;
|
|
212276
|
+
const textEnd = segmentPmEnd - spanPmStart;
|
|
212277
|
+
if (textEnd <= textStart || textStart >= spanText.length)
|
|
212278
|
+
continue;
|
|
212279
|
+
const clampedTextEnd = Math.min(textEnd, spanText.length);
|
|
212280
|
+
let proofingClass = null;
|
|
212281
|
+
for (const annotation of annotations)
|
|
212282
|
+
if (annotation.pmFrom <= segmentPmStart && annotation.pmTo >= segmentPmEnd) {
|
|
212283
|
+
proofingClass = cssClassForKind(annotation.kind);
|
|
212284
|
+
break;
|
|
212285
|
+
}
|
|
212286
|
+
segments.push({
|
|
212287
|
+
textStart,
|
|
212288
|
+
textEnd: clampedTextEnd,
|
|
212289
|
+
pmStart: segmentPmStart,
|
|
212290
|
+
pmEnd: segmentPmEnd,
|
|
212291
|
+
proofingClass
|
|
212292
|
+
});
|
|
212293
|
+
}
|
|
212294
|
+
return segments;
|
|
212295
|
+
}
|
|
212296
|
+
function replaceSpanWithSiblings(originalSpan, segments, spanText) {
|
|
212297
|
+
const parent = originalSpan.parentNode;
|
|
212298
|
+
if (!parent)
|
|
212299
|
+
return [];
|
|
212300
|
+
const doc$12 = originalSpan.ownerDocument;
|
|
212301
|
+
const siblings = [];
|
|
212302
|
+
for (const segment of segments) {
|
|
212303
|
+
const text5 = spanText.slice(segment.textStart, segment.textEnd);
|
|
212304
|
+
if (text5.length === 0)
|
|
212305
|
+
continue;
|
|
212306
|
+
const span = doc$12.createElement("span");
|
|
212307
|
+
for (let index2 = 0;index2 < originalSpan.attributes.length; index2 += 1) {
|
|
212308
|
+
const attr = originalSpan.attributes[index2];
|
|
212309
|
+
span.setAttribute(attr.name, attr.value);
|
|
212310
|
+
}
|
|
212311
|
+
span.setAttribute("data-pm-start", String(segment.pmStart));
|
|
212312
|
+
span.setAttribute("data-pm-end", String(segment.pmEnd));
|
|
212313
|
+
if (segment.proofingClass) {
|
|
212314
|
+
span.classList.add(segment.proofingClass);
|
|
212315
|
+
span.setAttribute("aria-invalid", "spelling");
|
|
212316
|
+
}
|
|
212317
|
+
span.setAttribute(PROOFING_CSS.SPLIT_ATTR, "");
|
|
212318
|
+
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
212319
|
+
span.textContent = "";
|
|
212320
|
+
span.appendChild(doc$12.createTextNode(text5));
|
|
212321
|
+
splitOriginMap.set(span, originalSpan);
|
|
212322
|
+
siblings.push(span);
|
|
212323
|
+
}
|
|
212324
|
+
originalSpan.style.display = "none";
|
|
212325
|
+
originalSpan.setAttribute(PROOFING_CSS.DATA_ATTR, "original");
|
|
212326
|
+
const originalPmStart = originalSpan.getAttribute("data-pm-start");
|
|
212327
|
+
const originalPmEnd = originalSpan.getAttribute("data-pm-end");
|
|
212328
|
+
if (originalPmStart)
|
|
212329
|
+
originalSpan.setAttribute("data-sd-orig-pm-start", originalPmStart);
|
|
212330
|
+
if (originalPmEnd)
|
|
212331
|
+
originalSpan.setAttribute("data-sd-orig-pm-end", originalPmEnd);
|
|
212332
|
+
originalSpan.removeAttribute("data-pm-start");
|
|
212333
|
+
originalSpan.removeAttribute("data-pm-end");
|
|
212334
|
+
for (const sibling of siblings)
|
|
212335
|
+
parent.insertBefore(sibling, originalSpan);
|
|
212336
|
+
return siblings;
|
|
212337
|
+
}
|
|
212338
|
+
function restoreSplitSpans(container) {
|
|
212339
|
+
const splitSpans = Array.from(container.querySelectorAll(`[${PROOFING_CSS.SPLIT_ATTR}]`));
|
|
212340
|
+
if (splitSpans.length === 0)
|
|
212341
|
+
return false;
|
|
212342
|
+
const groupsByOriginal = /* @__PURE__ */ new Map;
|
|
212343
|
+
for (const span of splitSpans) {
|
|
212344
|
+
const original = splitOriginMap.get(span);
|
|
212345
|
+
if (!original)
|
|
212346
|
+
continue;
|
|
212347
|
+
const group = groupsByOriginal.get(original);
|
|
212348
|
+
if (group)
|
|
212349
|
+
group.push(span);
|
|
212350
|
+
else
|
|
212351
|
+
groupsByOriginal.set(original, [span]);
|
|
212352
|
+
}
|
|
212353
|
+
for (const [original, siblings] of groupsByOriginal) {
|
|
212354
|
+
const parent = original.parentNode;
|
|
212355
|
+
if (!parent)
|
|
212356
|
+
continue;
|
|
212357
|
+
unhideOriginalSpan(original);
|
|
212358
|
+
for (const sibling of siblings)
|
|
212359
|
+
parent.removeChild(sibling);
|
|
212360
|
+
}
|
|
212361
|
+
const remainingSplitSpans = Array.from(container.querySelectorAll(`[${PROOFING_CSS.SPLIT_ATTR}]`));
|
|
212362
|
+
for (const span of remainingSplitSpans)
|
|
212363
|
+
span.parentNode?.removeChild(span);
|
|
212364
|
+
const hiddenOriginals = Array.from(container.querySelectorAll(`[${PROOFING_CSS.DATA_ATTR}="original"]`));
|
|
212365
|
+
for (const element3 of hiddenOriginals)
|
|
212366
|
+
unhideOriginalSpan(element3);
|
|
212367
|
+
return true;
|
|
212368
|
+
}
|
|
212369
|
+
function unhideOriginalSpan(element3) {
|
|
212370
|
+
element3.style.display = "";
|
|
212371
|
+
if (!element3.style.cssText)
|
|
212372
|
+
element3.removeAttribute("style");
|
|
212373
|
+
element3.removeAttribute(PROOFING_CSS.DATA_ATTR);
|
|
212374
|
+
const savedStart = element3.getAttribute("data-sd-orig-pm-start");
|
|
212375
|
+
const savedEnd = element3.getAttribute("data-sd-orig-pm-end");
|
|
212376
|
+
if (savedStart) {
|
|
212377
|
+
element3.setAttribute("data-pm-start", savedStart);
|
|
212378
|
+
element3.removeAttribute("data-sd-orig-pm-start");
|
|
212379
|
+
}
|
|
212380
|
+
if (savedEnd) {
|
|
212381
|
+
element3.setAttribute("data-pm-end", savedEnd);
|
|
212382
|
+
element3.removeAttribute("data-sd-orig-pm-end");
|
|
212383
|
+
}
|
|
212384
|
+
}
|
|
212385
|
+
function applyProofingDecorations(container, annotations) {
|
|
212386
|
+
const hadPrevious = clearProofingDecorations(container);
|
|
212387
|
+
if (annotations.length === 0)
|
|
212388
|
+
return hadPrevious;
|
|
212389
|
+
const sortedAnnotations = [...annotations].sort((left$1, right$1) => left$1.pmFrom - right$1.pmFrom);
|
|
212390
|
+
const spans = Array.from(container.querySelectorAll("[data-pm-start][data-pm-end]"));
|
|
212391
|
+
let mutated = false;
|
|
212392
|
+
for (const span of spans) {
|
|
212393
|
+
const pmStart = Number.parseInt(span.getAttribute("data-pm-start") ?? "", 10);
|
|
212394
|
+
const pmEnd = Number.parseInt(span.getAttribute("data-pm-end") ?? "", 10);
|
|
212395
|
+
if (Number.isNaN(pmStart) || Number.isNaN(pmEnd) || pmEnd <= pmStart)
|
|
212396
|
+
continue;
|
|
212397
|
+
if (!isLeafTextSpan(span))
|
|
212398
|
+
continue;
|
|
212399
|
+
const overlappingAnnotations = findOverlappingAnnotations(sortedAnnotations, pmStart, pmEnd);
|
|
212400
|
+
if (overlappingAnnotations.length === 0)
|
|
212401
|
+
continue;
|
|
212402
|
+
const text5 = span.textContent ?? "";
|
|
212403
|
+
if (text5.length === 0)
|
|
212404
|
+
continue;
|
|
212405
|
+
if (isCoveredBySingleAnnotation(pmStart, pmEnd, overlappingAnnotations)) {
|
|
212406
|
+
span.classList.add(cssClassForKind(overlappingAnnotations[0].kind));
|
|
212407
|
+
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
212408
|
+
span.setAttribute("aria-invalid", "spelling");
|
|
212409
|
+
mutated = true;
|
|
212410
|
+
continue;
|
|
212411
|
+
}
|
|
212412
|
+
const segments = computeSplitSegments(pmStart, pmEnd, text5, overlappingAnnotations);
|
|
212413
|
+
if (segments.length > 1) {
|
|
212414
|
+
replaceSpanWithSiblings(span, segments, text5);
|
|
212415
|
+
mutated = true;
|
|
212416
|
+
continue;
|
|
212417
|
+
}
|
|
212418
|
+
if (segments.length === 1 && segments[0].proofingClass) {
|
|
212419
|
+
span.classList.add(segments[0].proofingClass);
|
|
212420
|
+
span.setAttribute(PROOFING_CSS.DATA_ATTR, "");
|
|
212421
|
+
span.setAttribute("aria-invalid", "spelling");
|
|
212422
|
+
mutated = true;
|
|
212423
|
+
}
|
|
212424
|
+
}
|
|
212425
|
+
return mutated || hadPrevious;
|
|
212426
|
+
}
|
|
212427
|
+
function clearProofingDecorations(container) {
|
|
212428
|
+
let cleared = false;
|
|
212429
|
+
const restoredSplits = restoreSplitSpans(container);
|
|
212430
|
+
const decoratedElements = Array.from(container.querySelectorAll(`[${PROOFING_CSS.DATA_ATTR}]`));
|
|
212431
|
+
for (const element3 of decoratedElements) {
|
|
212432
|
+
element3.classList.remove(PROOFING_CSS.SPELLING, PROOFING_CSS.GRAMMAR, PROOFING_CSS.STYLE);
|
|
212433
|
+
element3.removeAttribute(PROOFING_CSS.DATA_ATTR);
|
|
212434
|
+
element3.removeAttribute("aria-invalid");
|
|
212435
|
+
cleared = true;
|
|
212436
|
+
}
|
|
212437
|
+
return cleared || restoredSplits;
|
|
212438
|
+
}
|
|
212439
|
+
function isLeafTextSpan(element3) {
|
|
212440
|
+
const children = element3.childNodes;
|
|
212441
|
+
if (children.length === 0)
|
|
212442
|
+
return false;
|
|
212443
|
+
for (let index2 = 0;index2 < children.length; index2 += 1)
|
|
212444
|
+
if (children[index2].nodeType === Node.ELEMENT_NODE)
|
|
212445
|
+
return false;
|
|
212446
|
+
return true;
|
|
212447
|
+
}
|
|
212448
|
+
function findOverlappingAnnotations(sortedAnnotations, pmStart, pmEnd) {
|
|
212449
|
+
const overlapping = [];
|
|
212450
|
+
for (const annotation of sortedAnnotations) {
|
|
212451
|
+
if (annotation.pmFrom >= pmEnd)
|
|
212452
|
+
break;
|
|
212453
|
+
if (annotation.pmTo > pmStart)
|
|
212454
|
+
overlapping.push(annotation);
|
|
212455
|
+
}
|
|
212456
|
+
return overlapping;
|
|
212457
|
+
}
|
|
212458
|
+
function isCoveredBySingleAnnotation(pmStart, pmEnd, annotations) {
|
|
212459
|
+
return annotations.some((annotation) => annotation.pmFrom <= pmStart && annotation.pmTo >= pmEnd);
|
|
212460
|
+
}
|
|
212461
|
+
function isSuppressed(issue, normalizedIgnored) {
|
|
212462
|
+
if (normalizedIgnored.size === 0)
|
|
212463
|
+
return false;
|
|
212464
|
+
const raw = issue.word ?? issue.message;
|
|
212465
|
+
if (!raw)
|
|
212466
|
+
return false;
|
|
212467
|
+
const normalized = raw.normalize("NFC").toLowerCase();
|
|
212468
|
+
return normalizedIgnored.has(normalized);
|
|
212469
|
+
}
|
|
212470
|
+
function resolveSegmentLanguage(paraNode, defaultLanguage) {
|
|
212471
|
+
const runLanguage = findFirstRunLanguage(paraNode);
|
|
212472
|
+
if (runLanguage)
|
|
212473
|
+
return runLanguage;
|
|
212474
|
+
const paraLang = extractParagraphLanguage(paraNode);
|
|
212475
|
+
if (paraLang)
|
|
212476
|
+
return paraLang;
|
|
212477
|
+
return defaultLanguage;
|
|
212478
|
+
}
|
|
212479
|
+
function findFirstRunLanguage(paraNode) {
|
|
212480
|
+
let lang = null;
|
|
212481
|
+
paraNode.descendants((node3) => {
|
|
212482
|
+
if (lang)
|
|
212483
|
+
return false;
|
|
212484
|
+
if (node3.type.name === "run") {
|
|
212485
|
+
const runProps = node3.attrs.runProperties;
|
|
212486
|
+
if (runProps?.lang?.val) {
|
|
212487
|
+
lang = runProps.lang.val;
|
|
212488
|
+
return false;
|
|
212489
|
+
}
|
|
212490
|
+
}
|
|
212491
|
+
return true;
|
|
212492
|
+
});
|
|
212493
|
+
return lang;
|
|
212494
|
+
}
|
|
212495
|
+
function extractParagraphLanguage(paraNode) {
|
|
212496
|
+
return paraNode.attrs.paragraphProperties?.lang?.val ?? null;
|
|
212497
|
+
}
|
|
212498
|
+
function extractSegmentsWithMaps(doc$12, defaultLanguage, pageResolver) {
|
|
212499
|
+
const segments = [];
|
|
212500
|
+
const offsetMaps = /* @__PURE__ */ new Map;
|
|
212501
|
+
const segmentPositions = /* @__PURE__ */ new Map;
|
|
212502
|
+
walkParagraphs(doc$12, (paraNode, paraPos, surface) => {
|
|
212503
|
+
const { text: text5, slices } = extractParagraphText(paraNode, paraPos);
|
|
212504
|
+
if (text5.length === 0)
|
|
212505
|
+
return;
|
|
212506
|
+
const segmentId = buildSegmentId(paraNode, paraPos);
|
|
212507
|
+
const language = resolveSegmentLanguage(paraNode, defaultLanguage ?? null);
|
|
212508
|
+
const pageIndex = pageResolver?.(paraPos);
|
|
212509
|
+
segments.push({
|
|
212510
|
+
id: segmentId,
|
|
212511
|
+
text: text5,
|
|
212512
|
+
language,
|
|
212513
|
+
metadata: {
|
|
212514
|
+
blockId: paraNode.attrs.sdBlockId,
|
|
212515
|
+
pageIndex,
|
|
212516
|
+
surface
|
|
212517
|
+
}
|
|
212518
|
+
});
|
|
212519
|
+
offsetMaps.set(segmentId, {
|
|
212520
|
+
segmentId,
|
|
212521
|
+
slices
|
|
212522
|
+
});
|
|
212523
|
+
segmentPositions.set(segmentId, paraPos);
|
|
212524
|
+
});
|
|
212525
|
+
return {
|
|
212526
|
+
segments,
|
|
212527
|
+
offsetMaps,
|
|
212528
|
+
segmentPositions
|
|
212529
|
+
};
|
|
212530
|
+
}
|
|
212531
|
+
function walkParagraphs(doc$12, visitor) {
|
|
212532
|
+
doc$12.descendants((node3, pos) => {
|
|
212533
|
+
const typeName = node3.type.name;
|
|
212534
|
+
if (typeName === "header" || typeName === "footer")
|
|
212535
|
+
return false;
|
|
212536
|
+
if (typeName === "paragraph") {
|
|
212537
|
+
visitor(node3, pos, isInsideTableCell(doc$12, pos) ? "table-cell" : "body");
|
|
212538
|
+
return false;
|
|
212539
|
+
}
|
|
212540
|
+
return true;
|
|
212541
|
+
});
|
|
212542
|
+
}
|
|
212543
|
+
function isInsideTableCell(doc$12, pos) {
|
|
212544
|
+
const resolved = doc$12.resolve(pos);
|
|
212545
|
+
for (let depth = resolved.depth;depth > 0; depth--) {
|
|
212546
|
+
const ancestor = resolved.node(depth);
|
|
212547
|
+
if (ancestor.type.name === "tableCell" || ancestor.type.name === "tableHeader")
|
|
212548
|
+
return true;
|
|
212549
|
+
}
|
|
212550
|
+
return false;
|
|
212551
|
+
}
|
|
212552
|
+
function extractParagraphText(paraNode, paraPos) {
|
|
212553
|
+
const parts = [];
|
|
212554
|
+
const slices = [];
|
|
212555
|
+
let textOffset = 0;
|
|
212556
|
+
const contentStart = paraPos + 1;
|
|
212557
|
+
paraNode.forEach((child, offset$1) => {
|
|
212558
|
+
processNode(child, contentStart + offset$1);
|
|
212559
|
+
});
|
|
212560
|
+
return {
|
|
212561
|
+
text: parts.join(""),
|
|
212562
|
+
slices
|
|
212563
|
+
};
|
|
212564
|
+
function processNode(node3, pos) {
|
|
212565
|
+
const typeName = node3.type.name;
|
|
212566
|
+
if (typeName === "run") {
|
|
212567
|
+
const runProps = node3.attrs.runProperties;
|
|
212568
|
+
if (runProps?.vanish === true) {
|
|
212569
|
+
emitBoundary();
|
|
212570
|
+
return;
|
|
212571
|
+
}
|
|
212572
|
+
if (runProps?.noProof === true) {
|
|
212573
|
+
emitBoundary();
|
|
212574
|
+
return;
|
|
212575
|
+
}
|
|
212576
|
+
const runContentStart = pos + 1;
|
|
212577
|
+
node3.forEach((child, childOff) => {
|
|
212578
|
+
processNode(child, runContentStart + childOff);
|
|
212579
|
+
});
|
|
212580
|
+
return;
|
|
212581
|
+
}
|
|
212582
|
+
if (node3.isText && node3.text) {
|
|
212583
|
+
if (hasTrackDeleteMark(node3))
|
|
212584
|
+
return;
|
|
212585
|
+
const text5 = node3.text;
|
|
212586
|
+
const pmFrom = pos;
|
|
212587
|
+
const pmTo = pos + text5.length;
|
|
212588
|
+
slices.push({
|
|
212589
|
+
textStart: textOffset,
|
|
212590
|
+
textEnd: textOffset + text5.length,
|
|
212591
|
+
pmFrom,
|
|
212592
|
+
pmTo
|
|
212593
|
+
});
|
|
212594
|
+
parts.push(text5);
|
|
212595
|
+
textOffset += text5.length;
|
|
212596
|
+
return;
|
|
212597
|
+
}
|
|
212598
|
+
if (isNonTextInlineNode(typeName)) {
|
|
212599
|
+
emitBoundary();
|
|
212600
|
+
return;
|
|
212601
|
+
}
|
|
212602
|
+
if (node3.childCount > 0) {
|
|
212603
|
+
const contentStart$1 = pos + 1;
|
|
212604
|
+
node3.forEach((child, childOff) => {
|
|
212605
|
+
processNode(child, contentStart$1 + childOff);
|
|
212606
|
+
});
|
|
212607
|
+
}
|
|
212608
|
+
}
|
|
212609
|
+
function emitBoundary() {
|
|
212610
|
+
if (parts.length > 0 && !parts[parts.length - 1].endsWith(" ")) {
|
|
212611
|
+
parts.push(" ");
|
|
212612
|
+
textOffset += 1;
|
|
212613
|
+
}
|
|
212614
|
+
}
|
|
212615
|
+
}
|
|
212616
|
+
function hasTrackDeleteMark(node3) {
|
|
212617
|
+
return node3.marks?.some((m$1) => m$1.type.name === "trackDelete") ?? false;
|
|
212618
|
+
}
|
|
212619
|
+
function isNonTextInlineNode(typeName) {
|
|
212620
|
+
return NON_TEXT_INLINE_NODES.has(typeName);
|
|
212621
|
+
}
|
|
212622
|
+
function buildSegmentId(paraNode, paraPos) {
|
|
212623
|
+
const blockId = paraNode.attrs.sdBlockId;
|
|
212624
|
+
return blockId ? `blk-${blockId}` : `pos-${paraPos}`;
|
|
212625
|
+
}
|
|
212626
|
+
function resolveIssuePmRangeFromSlices(issue, slices) {
|
|
212627
|
+
const pmFrom = textOffsetToPmPos(issue.start, slices);
|
|
212628
|
+
const pmTo = textOffsetToPmPos(issue.end, slices);
|
|
212629
|
+
if (pmFrom === null || pmTo === null || pmFrom >= pmTo)
|
|
212630
|
+
return null;
|
|
212631
|
+
return {
|
|
212632
|
+
...issue,
|
|
212633
|
+
pmFrom,
|
|
212634
|
+
pmTo
|
|
212635
|
+
};
|
|
212636
|
+
}
|
|
212637
|
+
function textOffsetToPmPos(textOffset, slices) {
|
|
212638
|
+
for (const slice2 of slices)
|
|
212639
|
+
if (textOffset >= slice2.textStart && textOffset <= slice2.textEnd) {
|
|
212640
|
+
const delta = textOffset - slice2.textStart;
|
|
212641
|
+
return slice2.pmFrom + delta;
|
|
212642
|
+
}
|
|
212643
|
+
for (const slice2 of slices)
|
|
212644
|
+
if (slice2.textStart >= textOffset)
|
|
212645
|
+
return slice2.pmFrom;
|
|
212646
|
+
if (slices.length > 0) {
|
|
212647
|
+
const last2 = slices[slices.length - 1];
|
|
212648
|
+
if (textOffset >= last2.textEnd)
|
|
212649
|
+
return last2.pmTo;
|
|
212650
|
+
}
|
|
212651
|
+
return null;
|
|
212652
|
+
}
|
|
212653
|
+
function computeDirtySegmentIds(segments, segmentPositions, changedRanges) {
|
|
212654
|
+
if (changedRanges.length === 0)
|
|
212655
|
+
return /* @__PURE__ */ new Set;
|
|
212656
|
+
const dirty = /* @__PURE__ */ new Set;
|
|
212657
|
+
const sorted = segments.map((seg) => ({
|
|
212658
|
+
id: seg.id,
|
|
212659
|
+
pos: segmentPositions.get(seg.id) ?? -1
|
|
212660
|
+
})).filter((s2) => s2.pos >= 0).sort((a2, b$1) => a2.pos - b$1.pos);
|
|
212661
|
+
for (const range of changedRanges)
|
|
212662
|
+
for (let i4 = 0;i4 < sorted.length; i4++) {
|
|
212663
|
+
const seg = sorted[i4];
|
|
212664
|
+
const segEnd = sorted[i4 + 1]?.pos ?? Infinity;
|
|
212665
|
+
if (seg.pos < range.to && segEnd > range.from)
|
|
212666
|
+
dirty.add(seg.id);
|
|
212667
|
+
if (seg.pos <= range.from && segEnd >= range.from && i4 > 0)
|
|
212668
|
+
dirty.add(sorted[i4 - 1].id);
|
|
212669
|
+
}
|
|
212670
|
+
return dirty;
|
|
212671
|
+
}
|
|
212672
|
+
function hashSegmentText(text5) {
|
|
212673
|
+
let hash$3 = 2166136261;
|
|
212674
|
+
for (let i4 = 0;i4 < text5.length; i4++) {
|
|
212675
|
+
hash$3 ^= text5.charCodeAt(i4);
|
|
212676
|
+
hash$3 = Math.imul(hash$3, 16777619);
|
|
212677
|
+
}
|
|
212678
|
+
return (hash$3 >>> 0).toString(16);
|
|
212679
|
+
}
|
|
212680
|
+
function prioritizeByVisibility(segments, visibilitySource) {
|
|
212681
|
+
const visiblePages = visibilitySource.getVisiblePageIndices();
|
|
212682
|
+
if (!visiblePages || visiblePages.length === 0)
|
|
212683
|
+
return segments;
|
|
212684
|
+
const visibleSet = new Set(visiblePages);
|
|
212685
|
+
const visible = [];
|
|
212686
|
+
const rest = [];
|
|
212687
|
+
for (const seg of segments) {
|
|
212688
|
+
const pageIndex = seg.metadata.pageIndex;
|
|
212689
|
+
if (pageIndex !== undefined && visibleSet.has(pageIndex))
|
|
212690
|
+
visible.push(seg);
|
|
212691
|
+
else
|
|
212692
|
+
rest.push(seg);
|
|
212693
|
+
}
|
|
212694
|
+
return [...visible, ...rest];
|
|
212695
|
+
}
|
|
212696
|
+
function buildPaintSlices(issues) {
|
|
212697
|
+
const spellingIssues = issues.filter((i4) => i4.kind === "spelling");
|
|
212698
|
+
if (spellingIssues.length === 0)
|
|
212699
|
+
return [];
|
|
212700
|
+
const sorted = [...spellingIssues].sort((a2, b$1) => a2.pmFrom - b$1.pmFrom || a2.pmTo - b$1.pmTo);
|
|
212701
|
+
const slices = [];
|
|
212702
|
+
let current = null;
|
|
212703
|
+
for (const issue of sorted) {
|
|
212704
|
+
if (!current) {
|
|
212705
|
+
current = {
|
|
212706
|
+
pmFrom: issue.pmFrom,
|
|
212707
|
+
pmTo: issue.pmTo,
|
|
212708
|
+
kind: "spelling",
|
|
212709
|
+
issue
|
|
212710
|
+
};
|
|
212711
|
+
continue;
|
|
212712
|
+
}
|
|
212713
|
+
if (issue.pmFrom <= current.pmTo)
|
|
212714
|
+
current.pmTo = Math.max(current.pmTo, issue.pmTo);
|
|
212715
|
+
else {
|
|
212716
|
+
slices.push(current);
|
|
212717
|
+
current = {
|
|
212718
|
+
pmFrom: issue.pmFrom,
|
|
212719
|
+
pmTo: issue.pmTo,
|
|
212720
|
+
kind: "spelling",
|
|
212721
|
+
issue
|
|
212722
|
+
};
|
|
212723
|
+
}
|
|
212724
|
+
}
|
|
212725
|
+
if (current)
|
|
212726
|
+
slices.push(current);
|
|
212727
|
+
return slices;
|
|
212728
|
+
}
|
|
212729
|
+
function findSliceAtPosition(slices, pmPos) {
|
|
212730
|
+
let lo = 0;
|
|
212731
|
+
let hi = slices.length - 1;
|
|
212732
|
+
while (lo <= hi) {
|
|
212733
|
+
const mid = lo + hi >>> 1;
|
|
212734
|
+
const slice2 = slices[mid];
|
|
212735
|
+
if (pmPos < slice2.pmFrom)
|
|
212736
|
+
hi = mid - 1;
|
|
212737
|
+
else if (pmPos >= slice2.pmTo)
|
|
212738
|
+
lo = mid + 1;
|
|
212739
|
+
else
|
|
212740
|
+
return slice2;
|
|
212741
|
+
}
|
|
212742
|
+
return null;
|
|
212743
|
+
}
|
|
211909
212744
|
function mapWordFamilyFallback(wordFamily) {
|
|
211910
212745
|
if (!wordFamily)
|
|
211911
212746
|
return DEFAULT_GENERIC_FALLBACK2;
|
|
@@ -214117,217 +214952,6 @@ function sanitizeUrl(href) {
|
|
|
214117
214952
|
return null;
|
|
214118
214953
|
return sanitizeHref(href)?.href ?? null;
|
|
214119
214954
|
}
|
|
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
214955
|
function assertRequiredBlockMeasurePair(label, blocks2, measures) {
|
|
214332
214956
|
if (blocks2.length !== measures.length)
|
|
214333
214957
|
throw new Error(`${label} blocks and measures must have the same length.`);
|
|
@@ -214368,289 +214992,6 @@ function buildLegacyPaintInput(layout, legacyState, flowMode, pageGap) {
|
|
|
214368
214992
|
footerMeasures: legacyState.footerMeasures
|
|
214369
214993
|
};
|
|
214370
214994
|
}
|
|
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
214995
|
function appendToArrayMap(map$12, key$1, value) {
|
|
214655
214996
|
const existing = map$12.get(key$1);
|
|
214656
214997
|
if (existing) {
|
|
@@ -222762,7 +223103,7 @@ function hydrateImageBlocks(blocks2, mediaFiles) {
|
|
|
222762
223103
|
});
|
|
222763
223104
|
if (normalizedMedia.size === 0)
|
|
222764
223105
|
return blocks2;
|
|
222765
|
-
const resolveImageSrc = (src, relId, attrSrc,
|
|
223106
|
+
const resolveImageSrc = (src, relId, attrSrc, extension3) => {
|
|
222766
223107
|
if (!src || src.startsWith("data:"))
|
|
222767
223108
|
return;
|
|
222768
223109
|
const candidates = /* @__PURE__ */ new Set;
|
|
@@ -222770,7 +223111,7 @@ function hydrateImageBlocks(blocks2, mediaFiles) {
|
|
|
222770
223111
|
if (attrSrc)
|
|
222771
223112
|
candidates.add(attrSrc);
|
|
222772
223113
|
if (relId) {
|
|
222773
|
-
const inferredExt =
|
|
223114
|
+
const inferredExt = extension3 ?? inferExtensionFromPath(src) ?? "jpeg";
|
|
222774
223115
|
candidates.add(`word/media/${relId}.${inferredExt}`);
|
|
222775
223116
|
candidates.add(`media/${relId}.${inferredExt}`);
|
|
222776
223117
|
}
|
|
@@ -222781,7 +223122,7 @@ function hydrateImageBlocks(blocks2, mediaFiles) {
|
|
|
222781
223122
|
const base64 = normalizedMedia.get(normalized);
|
|
222782
223123
|
if (!base64)
|
|
222783
223124
|
continue;
|
|
222784
|
-
const finalExt =
|
|
223125
|
+
const finalExt = extension3 ?? inferExtensionFromPath(normalized) ?? "jpeg";
|
|
222785
223126
|
return base64.startsWith("data:") ? base64 : `data:image/${finalExt};base64,${base64}`;
|
|
222786
223127
|
}
|
|
222787
223128
|
};
|
|
@@ -222813,8 +223154,8 @@ function hydrateImageBlocks(blocks2, mediaFiles) {
|
|
|
222813
223154
|
const attrs = blk.attrs ?? {};
|
|
222814
223155
|
const relId = typeof attrs.rId === "string" ? attrs.rId : undefined;
|
|
222815
223156
|
const attrSrc = typeof attrs.src === "string" ? attrs.src : undefined;
|
|
222816
|
-
const
|
|
222817
|
-
const resolvedSrc = resolveImageSrc(blk.src, relId, attrSrc,
|
|
223157
|
+
const extension3 = typeof attrs.extension === "string" ? attrs.extension.toLowerCase() : undefined;
|
|
223158
|
+
const resolvedSrc = resolveImageSrc(blk.src, relId, attrSrc, extension3);
|
|
222818
223159
|
if (resolvedSrc)
|
|
222819
223160
|
return {
|
|
222820
223161
|
...blk,
|
|
@@ -231459,7 +231800,7 @@ var Node$13 = class Node$14 {
|
|
|
231459
231800
|
seededAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
231460
231801
|
source: "browser"
|
|
231461
231802
|
});
|
|
231462
|
-
}, initSyncListener = (ydoc, editor,
|
|
231803
|
+
}, initSyncListener = (ydoc, editor, extension3) => {
|
|
231463
231804
|
const provider = editor.options.collaborationProvider;
|
|
231464
231805
|
if (!provider)
|
|
231465
231806
|
return () => {};
|
|
@@ -231469,7 +231810,7 @@ var Node$13 = class Node$14 {
|
|
|
231469
231810
|
return;
|
|
231470
231811
|
if (synced === false)
|
|
231471
231812
|
return;
|
|
231472
|
-
|
|
231813
|
+
extension3.options.isReady = true;
|
|
231473
231814
|
editor.emit("collaborationReady", {
|
|
231474
231815
|
editor,
|
|
231475
231816
|
ydoc
|
|
@@ -231622,11 +231963,11 @@ var Node$13 = class Node$14 {
|
|
|
231622
231963
|
});
|
|
231623
231964
|
}
|
|
231624
231965
|
};
|
|
231625
|
-
for (const
|
|
231626
|
-
const addGlobalAttributes = getExtensionConfigField(
|
|
231627
|
-
name:
|
|
231628
|
-
options:
|
|
231629
|
-
storage:
|
|
231966
|
+
for (const extension3 of extensions) {
|
|
231967
|
+
const addGlobalAttributes = getExtensionConfigField(extension3, "addGlobalAttributes", {
|
|
231968
|
+
name: extension3.name,
|
|
231969
|
+
options: extension3.options,
|
|
231970
|
+
storage: extension3.storage
|
|
231630
231971
|
});
|
|
231631
231972
|
if (!addGlobalAttributes)
|
|
231632
231973
|
continue;
|
|
@@ -231641,11 +231982,11 @@ var Node$13 = class Node$14 {
|
|
|
231641
231982
|
const nodeAndMarkExtensions = extensions.filter((e) => {
|
|
231642
231983
|
return e.type === "node" || e.type === "mark";
|
|
231643
231984
|
});
|
|
231644
|
-
for (const
|
|
231645
|
-
const addAttributes = getExtensionConfigField(
|
|
231646
|
-
name:
|
|
231647
|
-
options:
|
|
231648
|
-
storage:
|
|
231985
|
+
for (const extension3 of nodeAndMarkExtensions) {
|
|
231986
|
+
const addAttributes = getExtensionConfigField(extension3, "addAttributes", {
|
|
231987
|
+
name: extension3.name,
|
|
231988
|
+
options: extension3.options,
|
|
231989
|
+
storage: extension3.storage
|
|
231649
231990
|
});
|
|
231650
231991
|
if (!addAttributes)
|
|
231651
231992
|
continue;
|
|
@@ -231658,7 +231999,7 @@ var Node$13 = class Node$14 {
|
|
|
231658
231999
|
if (typeof merged.default === "function")
|
|
231659
232000
|
merged.default = merged.default();
|
|
231660
232001
|
extensionAttributes.push({
|
|
231661
|
-
type:
|
|
232002
|
+
type: extension3.name,
|
|
231662
232003
|
name,
|
|
231663
232004
|
attribute: merged
|
|
231664
232005
|
});
|
|
@@ -233209,7 +233550,13 @@ var Node$13 = class Node$14 {
|
|
|
233209
233550
|
const attrs = {
|
|
233210
233551
|
...sdBlockId ? { sdBlockId } : undefined,
|
|
233211
233552
|
...paraId ? { paraId } : undefined,
|
|
233212
|
-
paragraphProperties: {
|
|
233553
|
+
paragraphProperties: {
|
|
233554
|
+
styleId: `Heading${level}`,
|
|
233555
|
+
numberingProperties: {
|
|
233556
|
+
numId: "0",
|
|
233557
|
+
ilvl: "0"
|
|
233558
|
+
}
|
|
233559
|
+
}
|
|
233213
233560
|
};
|
|
233214
233561
|
const normalizedText = typeof text5 === "string" ? text5 : "";
|
|
233215
233562
|
const textNode = normalizedText.length > 0 ? state.schema.text(normalizedText) : null;
|
|
@@ -233684,24 +234031,25 @@ var Node$13 = class Node$14 {
|
|
|
233684
234031
|
if (paragraphsInSelection.length > 0) {
|
|
233685
234032
|
const firstPara = paragraphsInSelection[0];
|
|
233686
234033
|
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
|
-
|
|
234034
|
+
const firstParagraphPos = firstPara.pos;
|
|
234035
|
+
const lastParagraphPos = lastPara.pos;
|
|
234036
|
+
const firstNode = tr.doc.nodeAt(firstParagraphPos);
|
|
234037
|
+
const lastNode = tr.doc.nodeAt(lastParagraphPos);
|
|
234038
|
+
const restoredSelectionRange = computeToggleListSelectionRange({
|
|
234039
|
+
selectionWasCollapsed: selection.empty,
|
|
234040
|
+
affectedParagraphCount: paragraphsInSelection.length,
|
|
234041
|
+
firstParagraphPos,
|
|
234042
|
+
lastParagraphPos,
|
|
234043
|
+
firstNode,
|
|
234044
|
+
lastNode
|
|
234045
|
+
});
|
|
234046
|
+
if (restoredSelectionRange && restoredSelectionRange.from >= 0 && restoredSelectionRange.to <= tr.doc.content.size && restoredSelectionRange.from <= restoredSelectionRange.to)
|
|
234047
|
+
try {
|
|
234048
|
+
if (selection.empty && paragraphsInSelection.length === 1)
|
|
234049
|
+
tr.setSelection(Selection.near(tr.doc.resolve(restoredSelectionRange.to), -1));
|
|
234050
|
+
else
|
|
234051
|
+
tr.setSelection(TextSelection2.create(tr.doc, restoredSelectionRange.from, restoredSelectionRange.to));
|
|
234052
|
+
} catch {}
|
|
233705
234053
|
}
|
|
233706
234054
|
dispatch(tr);
|
|
233707
234055
|
return true;
|
|
@@ -242578,12 +242926,12 @@ var Node$13 = class Node$14 {
|
|
|
242578
242926
|
});
|
|
242579
242927
|
}
|
|
242580
242928
|
static #createNodesSchema(nodeExtensions, attributes, editor) {
|
|
242581
|
-
const nodeEntries = nodeExtensions.map((
|
|
242582
|
-
const extensionAttributes = attributes.filter((a2) => a2.type ===
|
|
242929
|
+
const nodeEntries = nodeExtensions.map((extension3) => {
|
|
242930
|
+
const extensionAttributes = attributes.filter((a2) => a2.type === extension3.name);
|
|
242583
242931
|
const context = {
|
|
242584
|
-
name:
|
|
242585
|
-
options:
|
|
242586
|
-
storage:
|
|
242932
|
+
name: extension3.name,
|
|
242933
|
+
options: extension3.options,
|
|
242934
|
+
storage: extension3.storage,
|
|
242587
242935
|
editor
|
|
242588
242936
|
};
|
|
242589
242937
|
const attrs = Object.fromEntries(extensionAttributes.map((attr) => {
|
|
@@ -242593,80 +242941,80 @@ var Node$13 = class Node$14 {
|
|
|
242593
242941
|
const extendNodeSchema = getExtensionConfigField(e, "extendNodeSchema", context);
|
|
242594
242942
|
return {
|
|
242595
242943
|
...fields,
|
|
242596
|
-
...extendNodeSchema ? extendNodeSchema(
|
|
242944
|
+
...extendNodeSchema ? extendNodeSchema(extension3) : {}
|
|
242597
242945
|
};
|
|
242598
242946
|
}, {});
|
|
242599
242947
|
const schema = cleanSchemaItem({
|
|
242600
|
-
content: callOrGet(getExtensionConfigField(
|
|
242601
|
-
group: callOrGet(getExtensionConfigField(
|
|
242602
|
-
marks: callOrGet(getExtensionConfigField(
|
|
242603
|
-
inline: callOrGet(getExtensionConfigField(
|
|
242604
|
-
atom: callOrGet(getExtensionConfigField(
|
|
242605
|
-
selectable: callOrGet(getExtensionConfigField(
|
|
242606
|
-
draggable: callOrGet(getExtensionConfigField(
|
|
242607
|
-
code: callOrGet(getExtensionConfigField(
|
|
242608
|
-
defining: callOrGet(getExtensionConfigField(
|
|
242609
|
-
isolating: callOrGet(getExtensionConfigField(
|
|
242610
|
-
summary: getExtensionConfigField(
|
|
242948
|
+
content: callOrGet(getExtensionConfigField(extension3, "content", context)),
|
|
242949
|
+
group: callOrGet(getExtensionConfigField(extension3, "group", context)),
|
|
242950
|
+
marks: callOrGet(getExtensionConfigField(extension3, "marks", context)),
|
|
242951
|
+
inline: callOrGet(getExtensionConfigField(extension3, "inline", context)),
|
|
242952
|
+
atom: callOrGet(getExtensionConfigField(extension3, "atom", context)),
|
|
242953
|
+
selectable: callOrGet(getExtensionConfigField(extension3, "selectable", context)),
|
|
242954
|
+
draggable: callOrGet(getExtensionConfigField(extension3, "draggable", context)),
|
|
242955
|
+
code: callOrGet(getExtensionConfigField(extension3, "code", context)),
|
|
242956
|
+
defining: callOrGet(getExtensionConfigField(extension3, "defining", context)),
|
|
242957
|
+
isolating: callOrGet(getExtensionConfigField(extension3, "isolating", context)),
|
|
242958
|
+
summary: getExtensionConfigField(extension3, "summary", context),
|
|
242611
242959
|
attrs,
|
|
242612
242960
|
...additionalNodeFields
|
|
242613
242961
|
});
|
|
242614
|
-
if (typeof
|
|
242962
|
+
if (typeof extension3.validChildren === "function" || Array.isArray(extension3.validChildren))
|
|
242615
242963
|
Object.defineProperty(schema, "validChildren", {
|
|
242616
242964
|
enumerable: false,
|
|
242617
242965
|
configurable: false,
|
|
242618
|
-
get: () =>
|
|
242966
|
+
get: () => extension3.validChildren
|
|
242619
242967
|
});
|
|
242620
|
-
const parseDOM = callOrGet(getExtensionConfigField(
|
|
242968
|
+
const parseDOM = callOrGet(getExtensionConfigField(extension3, "parseDOM", context));
|
|
242621
242969
|
if (parseDOM)
|
|
242622
242970
|
schema.parseDOM = parseDOM.map((parseRule) => {
|
|
242623
242971
|
return Attribute2.insertExtensionAttrsToParseRule(parseRule, extensionAttributes);
|
|
242624
242972
|
});
|
|
242625
|
-
const renderDOM = getExtensionConfigField(
|
|
242973
|
+
const renderDOM = getExtensionConfigField(extension3, "renderDOM", context);
|
|
242626
242974
|
if (renderDOM)
|
|
242627
242975
|
schema.toDOM = (node3) => renderDOM({
|
|
242628
242976
|
node: node3,
|
|
242629
242977
|
htmlAttributes: Attribute2.getAttributesToRender(node3, extensionAttributes)
|
|
242630
242978
|
});
|
|
242631
|
-
const renderText = getExtensionConfigField(
|
|
242979
|
+
const renderText = getExtensionConfigField(extension3, "renderText", context);
|
|
242632
242980
|
if (renderText)
|
|
242633
242981
|
schema.toText = renderText;
|
|
242634
|
-
return [
|
|
242982
|
+
return [extension3.name, schema];
|
|
242635
242983
|
});
|
|
242636
242984
|
return Object.fromEntries(nodeEntries);
|
|
242637
242985
|
}
|
|
242638
242986
|
static #createMarksSchema(markExtensions, attributes, editor) {
|
|
242639
|
-
const markEntries = markExtensions.map((
|
|
242640
|
-
const extensionAttributes = attributes.filter((a2) => a2.type ===
|
|
242987
|
+
const markEntries = markExtensions.map((extension3) => {
|
|
242988
|
+
const extensionAttributes = attributes.filter((a2) => a2.type === extension3.name);
|
|
242641
242989
|
const context = {
|
|
242642
|
-
name:
|
|
242643
|
-
options:
|
|
242644
|
-
storage:
|
|
242990
|
+
name: extension3.name,
|
|
242991
|
+
options: extension3.options,
|
|
242992
|
+
storage: extension3.storage,
|
|
242645
242993
|
editor
|
|
242646
242994
|
};
|
|
242647
242995
|
const attrs = Object.fromEntries(extensionAttributes.map((attr) => {
|
|
242648
242996
|
return [attr.name, { default: attr?.attribute?.default }];
|
|
242649
242997
|
}));
|
|
242650
242998
|
const schema = cleanSchemaItem({
|
|
242651
|
-
group: callOrGet(getExtensionConfigField(
|
|
242652
|
-
inclusive: callOrGet(getExtensionConfigField(
|
|
242653
|
-
excludes: callOrGet(getExtensionConfigField(
|
|
242654
|
-
spanning: callOrGet(getExtensionConfigField(
|
|
242655
|
-
code: callOrGet(getExtensionConfigField(
|
|
242999
|
+
group: callOrGet(getExtensionConfigField(extension3, "group", context)),
|
|
243000
|
+
inclusive: callOrGet(getExtensionConfigField(extension3, "inclusive", context)),
|
|
243001
|
+
excludes: callOrGet(getExtensionConfigField(extension3, "excludes", context)),
|
|
243002
|
+
spanning: callOrGet(getExtensionConfigField(extension3, "spanning", context)),
|
|
243003
|
+
code: callOrGet(getExtensionConfigField(extension3, "code", context)),
|
|
242656
243004
|
attrs
|
|
242657
243005
|
});
|
|
242658
|
-
const parseDOM = callOrGet(getExtensionConfigField(
|
|
243006
|
+
const parseDOM = callOrGet(getExtensionConfigField(extension3, "parseDOM", context));
|
|
242659
243007
|
if (parseDOM)
|
|
242660
243008
|
schema.parseDOM = parseDOM.map((parseRule) => {
|
|
242661
243009
|
return Attribute2.insertExtensionAttrsToParseRule(parseRule, extensionAttributes);
|
|
242662
243010
|
});
|
|
242663
|
-
const renderDOM = getExtensionConfigField(
|
|
243011
|
+
const renderDOM = getExtensionConfigField(extension3, "renderDOM", context);
|
|
242664
243012
|
if (renderDOM)
|
|
242665
243013
|
schema.toDOM = (mark2) => renderDOM({
|
|
242666
243014
|
mark: mark2,
|
|
242667
243015
|
htmlAttributes: Attribute2.getAttributesToRender(mark2, extensionAttributes)
|
|
242668
243016
|
});
|
|
242669
|
-
return [
|
|
243017
|
+
return [extension3.name, schema];
|
|
242670
243018
|
});
|
|
242671
243019
|
return Object.fromEntries(markEntries);
|
|
242672
243020
|
}
|
|
@@ -242791,9 +243139,9 @@ var Node$13 = class Node$14 {
|
|
|
242791
243139
|
constructor(extensions, userExtensions, editor) {
|
|
242792
243140
|
this.editor = editor;
|
|
242793
243141
|
this.externalExtensions = userExtensions || [];
|
|
242794
|
-
this.externalExtensions = this.externalExtensions.map((
|
|
243142
|
+
this.externalExtensions = this.externalExtensions.map((extension3) => {
|
|
242795
243143
|
return {
|
|
242796
|
-
...
|
|
243144
|
+
...extension3,
|
|
242797
243145
|
isExternal: true
|
|
242798
243146
|
};
|
|
242799
243147
|
});
|
|
@@ -242824,13 +243172,13 @@ var Node$13 = class Node$14 {
|
|
|
242824
243172
|
}
|
|
242825
243173
|
get commands() {
|
|
242826
243174
|
let commandsObject = {};
|
|
242827
|
-
for (const
|
|
242828
|
-
const addCommands = getExtensionConfigField(
|
|
242829
|
-
name:
|
|
242830
|
-
options:
|
|
242831
|
-
storage:
|
|
243175
|
+
for (const extension3 of this.extensions) {
|
|
243176
|
+
const addCommands = getExtensionConfigField(extension3, "addCommands", {
|
|
243177
|
+
name: extension3.name,
|
|
243178
|
+
options: extension3.options,
|
|
243179
|
+
storage: extension3.storage,
|
|
242832
243180
|
editor: this.editor,
|
|
242833
|
-
type: getSchemaTypeByName(
|
|
243181
|
+
type: getSchemaTypeByName(extension3.name, this.schema)
|
|
242834
243182
|
});
|
|
242835
243183
|
if (addCommands)
|
|
242836
243184
|
commandsObject = {
|
|
@@ -242842,16 +243190,16 @@ var Node$13 = class Node$14 {
|
|
|
242842
243190
|
}
|
|
242843
243191
|
get helpers() {
|
|
242844
243192
|
const helpersObject = {};
|
|
242845
|
-
for (const
|
|
242846
|
-
const name =
|
|
243193
|
+
for (const extension3 of this.extensions) {
|
|
243194
|
+
const name = extension3.name;
|
|
242847
243195
|
if (!name)
|
|
242848
243196
|
continue;
|
|
242849
|
-
const addHelpers = getExtensionConfigField(
|
|
242850
|
-
name:
|
|
242851
|
-
options:
|
|
242852
|
-
storage:
|
|
243197
|
+
const addHelpers = getExtensionConfigField(extension3, "addHelpers", {
|
|
243198
|
+
name: extension3.name,
|
|
243199
|
+
options: extension3.options,
|
|
243200
|
+
storage: extension3.storage,
|
|
242853
243201
|
editor: this.editor,
|
|
242854
|
-
type: getSchemaTypeByName(
|
|
243202
|
+
type: getSchemaTypeByName(extension3.name, this.schema)
|
|
242855
243203
|
});
|
|
242856
243204
|
if (addHelpers)
|
|
242857
243205
|
helpersObject[name] = addHelpers();
|
|
@@ -242862,16 +243210,16 @@ var Node$13 = class Node$14 {
|
|
|
242862
243210
|
const editor = this.editor;
|
|
242863
243211
|
const extensions = ExtensionService2.sortByPriority([...this.extensions].reverse());
|
|
242864
243212
|
const inputRules = [];
|
|
242865
|
-
const allPlugins = extensions.map((
|
|
243213
|
+
const allPlugins = extensions.map((extension3) => {
|
|
242866
243214
|
const context = {
|
|
242867
|
-
name:
|
|
242868
|
-
options:
|
|
242869
|
-
storage:
|
|
243215
|
+
name: extension3.name,
|
|
243216
|
+
options: extension3.options,
|
|
243217
|
+
storage: extension3.storage,
|
|
242870
243218
|
editor,
|
|
242871
|
-
type: getSchemaTypeByName(
|
|
243219
|
+
type: getSchemaTypeByName(extension3.name, this.schema)
|
|
242872
243220
|
};
|
|
242873
243221
|
const plugins = [];
|
|
242874
|
-
const addShortcuts = getExtensionConfigField(
|
|
243222
|
+
const addShortcuts = getExtensionConfigField(extension3, "addShortcuts", context);
|
|
242875
243223
|
let bindingsObject = {};
|
|
242876
243224
|
if (addShortcuts) {
|
|
242877
243225
|
const entries2 = Object.entries(addShortcuts()).map(([shortcut, method]) => {
|
|
@@ -242883,10 +243231,10 @@ var Node$13 = class Node$14 {
|
|
|
242883
243231
|
bindingsObject = { ...Object.fromEntries(entries2) };
|
|
242884
243232
|
}
|
|
242885
243233
|
plugins.push(keymap(bindingsObject));
|
|
242886
|
-
const addInputRules = getExtensionConfigField(
|
|
242887
|
-
if (isExtensionRulesEnabled(
|
|
243234
|
+
const addInputRules = getExtensionConfigField(extension3, "addInputRules", context);
|
|
243235
|
+
if (isExtensionRulesEnabled(extension3, editor.options.enableInputRules) && addInputRules)
|
|
242888
243236
|
inputRules.push(...addInputRules());
|
|
242889
|
-
const addPmPlugins = getExtensionConfigField(
|
|
243237
|
+
const addPmPlugins = getExtensionConfigField(extension3, "addPmPlugins", context);
|
|
242890
243238
|
if (addPmPlugins)
|
|
242891
243239
|
plugins.push(...addPmPlugins());
|
|
242892
243240
|
return plugins;
|
|
@@ -242898,14 +243246,14 @@ var Node$13 = class Node$14 {
|
|
|
242898
243246
|
}
|
|
242899
243247
|
get nodeViews() {
|
|
242900
243248
|
const { editor } = this;
|
|
242901
|
-
const entries2 = this.extensions.filter((e) => e.type === "node").filter((
|
|
242902
|
-
const extensionAttrs = this.attributes.filter((a2) => a2.type ===
|
|
242903
|
-
const addNodeView = getExtensionConfigField(
|
|
242904
|
-
name:
|
|
242905
|
-
options:
|
|
242906
|
-
storage:
|
|
243249
|
+
const entries2 = this.extensions.filter((e) => e.type === "node").filter((extension3) => !!getExtensionConfigField(extension3, "addNodeView")).map((extension3) => {
|
|
243250
|
+
const extensionAttrs = this.attributes.filter((a2) => a2.type === extension3.name);
|
|
243251
|
+
const addNodeView = getExtensionConfigField(extension3, "addNodeView", {
|
|
243252
|
+
name: extension3.name,
|
|
243253
|
+
options: extension3.options,
|
|
243254
|
+
storage: extension3.storage,
|
|
242907
243255
|
editor,
|
|
242908
|
-
type: getNodeType(
|
|
243256
|
+
type: getNodeType(extension3.name, this.schema)
|
|
242909
243257
|
});
|
|
242910
243258
|
if (!addNodeView)
|
|
242911
243259
|
return null;
|
|
@@ -242919,47 +243267,47 @@ var Node$13 = class Node$14 {
|
|
|
242919
243267
|
getPos,
|
|
242920
243268
|
decorations,
|
|
242921
243269
|
htmlAttributes: Attribute2.getAttributesToRender(node3, extensionAttrs),
|
|
242922
|
-
extension:
|
|
243270
|
+
extension: extension3,
|
|
242923
243271
|
extensionAttrs
|
|
242924
243272
|
});
|
|
242925
243273
|
};
|
|
242926
|
-
return [
|
|
243274
|
+
return [extension3.name, nodeview];
|
|
242927
243275
|
}).filter(Boolean);
|
|
242928
243276
|
return Object.fromEntries(entries2);
|
|
242929
243277
|
}
|
|
242930
243278
|
#setupExtensions() {
|
|
242931
|
-
for (const
|
|
242932
|
-
this.editor.extensionStorage[
|
|
243279
|
+
for (const extension3 of this.extensions) {
|
|
243280
|
+
this.editor.extensionStorage[extension3.name] = extension3.storage;
|
|
242933
243281
|
const context = {
|
|
242934
|
-
name:
|
|
242935
|
-
options:
|
|
242936
|
-
storage:
|
|
243282
|
+
name: extension3.name,
|
|
243283
|
+
options: extension3.options,
|
|
243284
|
+
storage: extension3.storage,
|
|
242937
243285
|
editor: this.editor,
|
|
242938
|
-
type: getSchemaTypeByName(
|
|
243286
|
+
type: getSchemaTypeByName(extension3.name, this.schema)
|
|
242939
243287
|
};
|
|
242940
|
-
if (
|
|
242941
|
-
if (callOrGet(getExtensionConfigField(
|
|
242942
|
-
this.splittableMarks.push(
|
|
243288
|
+
if (extension3.type === "mark") {
|
|
243289
|
+
if (callOrGet(getExtensionConfigField(extension3, "keepOnSplit", context)) ?? true)
|
|
243290
|
+
this.splittableMarks.push(extension3.name);
|
|
242943
243291
|
}
|
|
242944
|
-
this.#attachEditorEvents(
|
|
243292
|
+
this.#attachEditorEvents(extension3);
|
|
242945
243293
|
}
|
|
242946
243294
|
}
|
|
242947
|
-
#attachEditorEvents(
|
|
243295
|
+
#attachEditorEvents(extension3) {
|
|
242948
243296
|
const context = {
|
|
242949
|
-
name:
|
|
242950
|
-
options:
|
|
242951
|
-
storage:
|
|
243297
|
+
name: extension3.name,
|
|
243298
|
+
options: extension3.options,
|
|
243299
|
+
storage: extension3.storage,
|
|
242952
243300
|
editor: this.editor,
|
|
242953
|
-
type: getSchemaTypeByName(
|
|
242954
|
-
};
|
|
242955
|
-
const onBeforeCreate = getExtensionConfigField(
|
|
242956
|
-
const onCreate2 = getExtensionConfigField(
|
|
242957
|
-
const onUpdate = getExtensionConfigField(
|
|
242958
|
-
const onSelectionUpdate = getExtensionConfigField(
|
|
242959
|
-
const onTransaction = getExtensionConfigField(
|
|
242960
|
-
const onFocus = getExtensionConfigField(
|
|
242961
|
-
const onBlur = getExtensionConfigField(
|
|
242962
|
-
const onDestroy2 = getExtensionConfigField(
|
|
243301
|
+
type: getSchemaTypeByName(extension3.name, this.schema)
|
|
243302
|
+
};
|
|
243303
|
+
const onBeforeCreate = getExtensionConfigField(extension3, "onBeforeCreate", context);
|
|
243304
|
+
const onCreate2 = getExtensionConfigField(extension3, "onCreate", context);
|
|
243305
|
+
const onUpdate = getExtensionConfigField(extension3, "onUpdate", context);
|
|
243306
|
+
const onSelectionUpdate = getExtensionConfigField(extension3, "onSelectionUpdate", context);
|
|
243307
|
+
const onTransaction = getExtensionConfigField(extension3, "onTransaction", context);
|
|
243308
|
+
const onFocus = getExtensionConfigField(extension3, "onFocus", context);
|
|
243309
|
+
const onBlur = getExtensionConfigField(extension3, "onBlur", context);
|
|
243310
|
+
const onDestroy2 = getExtensionConfigField(extension3, "onDestroy", context);
|
|
242963
243311
|
if (onBeforeCreate)
|
|
242964
243312
|
this.editor.on("beforeCreate", onBeforeCreate);
|
|
242965
243313
|
if (onCreate2)
|
|
@@ -243317,7 +243665,7 @@ var Node$13 = class Node$14 {
|
|
|
243317
243665
|
domAvailabilityCache = false;
|
|
243318
243666
|
return false;
|
|
243319
243667
|
}
|
|
243320
|
-
}, summaryVersion = "1.23.
|
|
243668
|
+
}, summaryVersion = "1.23.1", nodeKeys, markKeys, transformListsInCopiedContent = (html3) => {
|
|
243321
243669
|
const container = document.createElement("div");
|
|
243322
243670
|
container.innerHTML = html3;
|
|
243323
243671
|
const result = [];
|
|
@@ -243642,16 +243990,16 @@ var Node$13 = class Node$14 {
|
|
|
243642
243990
|
console.warn("Failed to initialize developer tools:", error3);
|
|
243643
243991
|
}
|
|
243644
243992
|
}
|
|
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) => {
|
|
243646
|
-
const extensionLike =
|
|
243993
|
+
}, 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 = (extension3) => {
|
|
243994
|
+
const extensionLike = extension3;
|
|
243647
243995
|
const config2 = extensionLike?.config;
|
|
243648
243996
|
const ExtensionCtor = extensionLike?.constructor;
|
|
243649
243997
|
if (!config2 || typeof config2 !== "object" || typeof ExtensionCtor !== "function")
|
|
243650
|
-
return
|
|
243998
|
+
return extension3;
|
|
243651
243999
|
try {
|
|
243652
244000
|
return new ExtensionCtor(config2);
|
|
243653
244001
|
} catch {
|
|
243654
|
-
return
|
|
244002
|
+
return extension3;
|
|
243655
244003
|
}
|
|
243656
244004
|
}, Editor, token = (varName, fallback) => ({
|
|
243657
244005
|
css: `var(${varName}, ${fallback})`,
|
|
@@ -244293,6 +244641,559 @@ var Node$13 = class Node$14 {
|
|
|
244293
244641
|
annotation.style.position = "relative";
|
|
244294
244642
|
annotation.appendChild(caretAnchor);
|
|
244295
244643
|
}
|
|
244644
|
+
}, PROOFING_CSS, splitOriginMap, PresentationProofingDecorator = class {
|
|
244645
|
+
#container = null;
|
|
244646
|
+
setContainer(container) {
|
|
244647
|
+
this.#container = container;
|
|
244648
|
+
}
|
|
244649
|
+
applyAnnotations(annotations) {
|
|
244650
|
+
const container = this.#container;
|
|
244651
|
+
if (!container)
|
|
244652
|
+
return false;
|
|
244653
|
+
if (!annotations || annotations.length === 0)
|
|
244654
|
+
return clearProofingDecorations(container);
|
|
244655
|
+
return applyProofingDecorations(container, annotations);
|
|
244656
|
+
}
|
|
244657
|
+
clear() {
|
|
244658
|
+
const container = this.#container;
|
|
244659
|
+
if (!container)
|
|
244660
|
+
return false;
|
|
244661
|
+
return clearProofingDecorations(container);
|
|
244662
|
+
}
|
|
244663
|
+
}, PresentationPostPaintPipeline = class {
|
|
244664
|
+
#fieldAnnotationLayer;
|
|
244665
|
+
#commentHighlightDecorator;
|
|
244666
|
+
#decorationBridge;
|
|
244667
|
+
#proofingDecorator;
|
|
244668
|
+
constructor(deps = {}) {
|
|
244669
|
+
this.#fieldAnnotationLayer = deps.fieldAnnotationLayer ?? new FieldAnnotationInteractionLayer;
|
|
244670
|
+
this.#commentHighlightDecorator = deps.commentHighlightDecorator ?? new CommentHighlightDecorator;
|
|
244671
|
+
this.#decorationBridge = deps.decorationBridge ?? new DecorationBridge;
|
|
244672
|
+
this.#proofingDecorator = deps.proofingDecorator ?? new PresentationProofingDecorator;
|
|
244673
|
+
}
|
|
244674
|
+
setContainer(container) {
|
|
244675
|
+
this.#fieldAnnotationLayer.setContainer(container);
|
|
244676
|
+
this.#commentHighlightDecorator.setContainer(container);
|
|
244677
|
+
this.#proofingDecorator.setContainer(container);
|
|
244678
|
+
}
|
|
244679
|
+
setActiveComment(commentId) {
|
|
244680
|
+
return this.#commentHighlightDecorator.setActiveComment(commentId);
|
|
244681
|
+
}
|
|
244682
|
+
recordDecorationTransaction(transaction) {
|
|
244683
|
+
this.#decorationBridge.recordTransaction(transaction);
|
|
244684
|
+
}
|
|
244685
|
+
hasDecorationChanges(editorState) {
|
|
244686
|
+
return this.#decorationBridge.hasChanges(editorState);
|
|
244687
|
+
}
|
|
244688
|
+
collectDecorationRanges(editorState) {
|
|
244689
|
+
return this.#decorationBridge.collectDecorationRanges(editorState);
|
|
244690
|
+
}
|
|
244691
|
+
syncDecorations(editorState, domPositionIndex, options) {
|
|
244692
|
+
if (!editorState)
|
|
244693
|
+
return false;
|
|
244694
|
+
return this.#decorationBridge.sync(editorState, domPositionIndex, options);
|
|
244695
|
+
}
|
|
244696
|
+
applyCommentHighlights() {
|
|
244697
|
+
this.#commentHighlightDecorator.apply();
|
|
244698
|
+
}
|
|
244699
|
+
syncInlineStyleLayers(editorState, domPositionIndex) {
|
|
244700
|
+
this.applyCommentHighlights();
|
|
244701
|
+
return this.syncDecorations(editorState, domPositionIndex);
|
|
244702
|
+
}
|
|
244703
|
+
applyProofingAnnotations(annotations, rebuildDomPositionIndex) {
|
|
244704
|
+
const mutated = this.#proofingDecorator.applyAnnotations(annotations);
|
|
244705
|
+
if (mutated)
|
|
244706
|
+
rebuildDomPositionIndex();
|
|
244707
|
+
return mutated;
|
|
244708
|
+
}
|
|
244709
|
+
refreshAfterPaint(options) {
|
|
244710
|
+
this.#fieldAnnotationLayer.apply(options.layoutEpoch);
|
|
244711
|
+
options.rebuildDomPositionIndex();
|
|
244712
|
+
this.syncInlineStyleLayers(options.editorState, options.domPositionIndex);
|
|
244713
|
+
this.applyProofingAnnotations(options.proofingAnnotations, options.rebuildDomPositionIndex);
|
|
244714
|
+
options.reapplyStructuredContentHover?.();
|
|
244715
|
+
}
|
|
244716
|
+
destroy() {
|
|
244717
|
+
this.#proofingDecorator.clear();
|
|
244718
|
+
this.#fieldAnnotationLayer.clear();
|
|
244719
|
+
this.#commentHighlightDecorator.destroy();
|
|
244720
|
+
this.#decorationBridge.destroy();
|
|
244721
|
+
}
|
|
244722
|
+
}, ProofingStore = class {
|
|
244723
|
+
#issuesBySegment = /* @__PURE__ */ new Map;
|
|
244724
|
+
addIssue(issue) {
|
|
244725
|
+
const list5 = this.#issuesBySegment.get(issue.segmentId);
|
|
244726
|
+
if (list5)
|
|
244727
|
+
list5.push(issue);
|
|
244728
|
+
else
|
|
244729
|
+
this.#issuesBySegment.set(issue.segmentId, [issue]);
|
|
244730
|
+
}
|
|
244731
|
+
remapIssues(segmentIds, mapping, recheckId) {
|
|
244732
|
+
for (const id2 of segmentIds) {
|
|
244733
|
+
const list5 = this.#issuesBySegment.get(id2);
|
|
244734
|
+
if (!list5)
|
|
244735
|
+
continue;
|
|
244736
|
+
const surviving = [];
|
|
244737
|
+
for (const issue of list5) {
|
|
244738
|
+
const fromResult = mapping.mapResult(issue.pmFrom, -1);
|
|
244739
|
+
const toResult2 = mapping.mapResult(issue.pmTo, 1);
|
|
244740
|
+
if (fromResult.deleted || toResult2.deleted)
|
|
244741
|
+
continue;
|
|
244742
|
+
if (fromResult.pos >= toResult2.pos)
|
|
244743
|
+
continue;
|
|
244744
|
+
issue.pmFrom = fromResult.pos;
|
|
244745
|
+
issue.pmTo = toResult2.pos;
|
|
244746
|
+
issue.state = "mapped";
|
|
244747
|
+
issue.recheckId = recheckId;
|
|
244748
|
+
surviving.push(issue);
|
|
244749
|
+
}
|
|
244750
|
+
if (surviving.length > 0)
|
|
244751
|
+
this.#issuesBySegment.set(id2, surviving);
|
|
244752
|
+
else
|
|
244753
|
+
this.#issuesBySegment.delete(id2);
|
|
244754
|
+
}
|
|
244755
|
+
}
|
|
244756
|
+
replaceBatchResults(recheckIds, coveredSegmentIds, freshIssues) {
|
|
244757
|
+
for (const segId of coveredSegmentIds) {
|
|
244758
|
+
const list5 = this.#issuesBySegment.get(segId);
|
|
244759
|
+
if (!list5)
|
|
244760
|
+
continue;
|
|
244761
|
+
const filtered = list5.filter((issue) => issue.recheckId === null || !recheckIds.has(issue.recheckId));
|
|
244762
|
+
if (filtered.length > 0)
|
|
244763
|
+
this.#issuesBySegment.set(segId, filtered);
|
|
244764
|
+
else
|
|
244765
|
+
this.#issuesBySegment.delete(segId);
|
|
244766
|
+
}
|
|
244767
|
+
for (const issue of freshIssues)
|
|
244768
|
+
this.addIssue(issue);
|
|
244769
|
+
}
|
|
244770
|
+
removeBySegmentIds(ids) {
|
|
244771
|
+
for (const id2 of ids)
|
|
244772
|
+
this.#issuesBySegment.delete(id2);
|
|
244773
|
+
}
|
|
244774
|
+
removeOrphanedSegments(currentSegmentIds) {
|
|
244775
|
+
for (const segId of this.#issuesBySegment.keys())
|
|
244776
|
+
if (!currentSegmentIds.has(segId))
|
|
244777
|
+
this.#issuesBySegment.delete(segId);
|
|
244778
|
+
}
|
|
244779
|
+
clear() {
|
|
244780
|
+
this.#issuesBySegment.clear();
|
|
244781
|
+
}
|
|
244782
|
+
getAllIssues() {
|
|
244783
|
+
const result = [];
|
|
244784
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244785
|
+
result.push(...list5);
|
|
244786
|
+
return result;
|
|
244787
|
+
}
|
|
244788
|
+
getDisplayIssues(ignoredWords) {
|
|
244789
|
+
const normalizedIgnored = new Set(ignoredWords.map((w) => w.normalize("NFC").toLowerCase()));
|
|
244790
|
+
const result = [];
|
|
244791
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244792
|
+
for (const issue of list5) {
|
|
244793
|
+
if (issue.kind !== "spelling")
|
|
244794
|
+
continue;
|
|
244795
|
+
if (isSuppressed(issue, normalizedIgnored))
|
|
244796
|
+
continue;
|
|
244797
|
+
result.push(issue);
|
|
244798
|
+
}
|
|
244799
|
+
return result;
|
|
244800
|
+
}
|
|
244801
|
+
getActiveRecheckIds() {
|
|
244802
|
+
const ids = /* @__PURE__ */ new Set;
|
|
244803
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244804
|
+
for (const issue of list5)
|
|
244805
|
+
if (issue.state === "mapped" && issue.recheckId !== null)
|
|
244806
|
+
ids.add(issue.recheckId);
|
|
244807
|
+
return ids;
|
|
244808
|
+
}
|
|
244809
|
+
get isEmpty() {
|
|
244810
|
+
return this.#issuesBySegment.size === 0;
|
|
244811
|
+
}
|
|
244812
|
+
get size() {
|
|
244813
|
+
let count2 = 0;
|
|
244814
|
+
for (const list5 of this.#issuesBySegment.values())
|
|
244815
|
+
count2 += list5.length;
|
|
244816
|
+
return count2;
|
|
244817
|
+
}
|
|
244818
|
+
}, 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 {
|
|
244819
|
+
#config;
|
|
244820
|
+
#provider = null;
|
|
244821
|
+
#capabilities = null;
|
|
244822
|
+
#status = "disabled";
|
|
244823
|
+
#store = new ProofingStore;
|
|
244824
|
+
#offsetMaps = /* @__PURE__ */ new Map;
|
|
244825
|
+
#segmentHashes = /* @__PURE__ */ new Map;
|
|
244826
|
+
#debounceTimer = null;
|
|
244827
|
+
#pendingAbortControllers = /* @__PURE__ */ new Set;
|
|
244828
|
+
#inFlightCount = 0;
|
|
244829
|
+
#documentEpoch = 0;
|
|
244830
|
+
#disposed = false;
|
|
244831
|
+
#pendingSegments = [];
|
|
244832
|
+
#nextRecheckId = 0;
|
|
244833
|
+
#isComposing = false;
|
|
244834
|
+
#lastCheckFiredAt = 0;
|
|
244835
|
+
#visibilitySource = null;
|
|
244836
|
+
#documentId = null;
|
|
244837
|
+
#pageResolver = null;
|
|
244838
|
+
#lastDoc = null;
|
|
244839
|
+
#lastSegments = [];
|
|
244840
|
+
constructor(config2 = {}) {
|
|
244841
|
+
this.onResultsChanged = null;
|
|
244842
|
+
this.#config = {
|
|
244843
|
+
enabled: config2.enabled ?? false,
|
|
244844
|
+
debounceMs: config2.debounceMs ?? DEFAULT_DEBOUNCE_MS,
|
|
244845
|
+
maxSuggestions: config2.maxSuggestions ?? DEFAULT_MAX_SUGGESTIONS,
|
|
244846
|
+
visibleFirst: config2.visibleFirst ?? true,
|
|
244847
|
+
allowIgnoreWord: config2.allowIgnoreWord ?? true,
|
|
244848
|
+
defaultLanguage: config2.defaultLanguage ?? null,
|
|
244849
|
+
ignoredWords: config2.ignoredWords ?? [],
|
|
244850
|
+
timeoutMs: config2.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
244851
|
+
maxConcurrentRequests: config2.maxConcurrentRequests ?? DEFAULT_MAX_CONCURRENT,
|
|
244852
|
+
maxSegmentsPerBatch: config2.maxSegmentsPerBatch ?? DEFAULT_MAX_SEGMENTS_PER_BATCH,
|
|
244853
|
+
onProofingError: config2.onProofingError ?? null,
|
|
244854
|
+
onStatusChange: config2.onStatusChange ?? null
|
|
244855
|
+
};
|
|
244856
|
+
if (config2.provider)
|
|
244857
|
+
this.#provider = config2.provider;
|
|
244858
|
+
if (this.#config.enabled && this.#provider)
|
|
244859
|
+
this.#setStatus("idle");
|
|
244860
|
+
}
|
|
244861
|
+
get status() {
|
|
244862
|
+
return this.#status;
|
|
244863
|
+
}
|
|
244864
|
+
get isEnabled() {
|
|
244865
|
+
return this.#config.enabled && this.#provider !== null;
|
|
244866
|
+
}
|
|
244867
|
+
get config() {
|
|
244868
|
+
return this.#config;
|
|
244869
|
+
}
|
|
244870
|
+
setVisibilitySource(source) {
|
|
244871
|
+
this.#visibilitySource = source;
|
|
244872
|
+
}
|
|
244873
|
+
setDocumentId(id2) {
|
|
244874
|
+
this.#documentId = id2;
|
|
244875
|
+
}
|
|
244876
|
+
setPageResolver(resolver2) {
|
|
244877
|
+
this.#pageResolver = resolver2;
|
|
244878
|
+
}
|
|
244879
|
+
setComposing(composing) {
|
|
244880
|
+
this.#isComposing = composing;
|
|
244881
|
+
if (!composing && this.#lastSegments.length > 0 && this.isEnabled)
|
|
244882
|
+
this.#scheduleDebouncedCheck(this.#lastSegments);
|
|
244883
|
+
}
|
|
244884
|
+
getPaintSlices(activeWordRange) {
|
|
244885
|
+
if (!this.isEnabled)
|
|
244886
|
+
return [];
|
|
244887
|
+
const slices = buildPaintSlices(this.#store.getDisplayIssues(this.#config.ignoredWords));
|
|
244888
|
+
if (!activeWordRange)
|
|
244889
|
+
return slices;
|
|
244890
|
+
return slices.filter((s2) => s2.pmTo <= activeWordRange.from || s2.pmFrom >= activeWordRange.to);
|
|
244891
|
+
}
|
|
244892
|
+
getIssueAtPosition(pmPos, activeWordRange) {
|
|
244893
|
+
return findSliceAtPosition(this.getPaintSlices(activeWordRange), pmPos)?.issue ?? null;
|
|
244894
|
+
}
|
|
244895
|
+
updateConfig(patch3, doc$12) {
|
|
244896
|
+
const prevEnabled = this.#config.enabled;
|
|
244897
|
+
const prevProvider = this.#provider;
|
|
244898
|
+
const needsRecheck = patch3.provider !== undefined || patch3.defaultLanguage !== undefined;
|
|
244899
|
+
if (patch3.debounceMs !== undefined)
|
|
244900
|
+
this.#config.debounceMs = patch3.debounceMs;
|
|
244901
|
+
if (patch3.maxSuggestions !== undefined)
|
|
244902
|
+
this.#config.maxSuggestions = patch3.maxSuggestions;
|
|
244903
|
+
if (patch3.visibleFirst !== undefined)
|
|
244904
|
+
this.#config.visibleFirst = patch3.visibleFirst;
|
|
244905
|
+
if (patch3.allowIgnoreWord !== undefined)
|
|
244906
|
+
this.#config.allowIgnoreWord = patch3.allowIgnoreWord;
|
|
244907
|
+
if (patch3.timeoutMs !== undefined)
|
|
244908
|
+
this.#config.timeoutMs = patch3.timeoutMs;
|
|
244909
|
+
if (patch3.maxConcurrentRequests !== undefined)
|
|
244910
|
+
this.#config.maxConcurrentRequests = patch3.maxConcurrentRequests;
|
|
244911
|
+
if (patch3.maxSegmentsPerBatch !== undefined)
|
|
244912
|
+
this.#config.maxSegmentsPerBatch = patch3.maxSegmentsPerBatch;
|
|
244913
|
+
if (patch3.onProofingError !== undefined)
|
|
244914
|
+
this.#config.onProofingError = patch3.onProofingError ?? null;
|
|
244915
|
+
if (patch3.onStatusChange !== undefined)
|
|
244916
|
+
this.#config.onStatusChange = patch3.onStatusChange ?? null;
|
|
244917
|
+
if (patch3.defaultLanguage !== undefined)
|
|
244918
|
+
this.#config.defaultLanguage = patch3.defaultLanguage ?? null;
|
|
244919
|
+
if (patch3.ignoredWords !== undefined) {
|
|
244920
|
+
this.#config.ignoredWords = patch3.ignoredWords ?? [];
|
|
244921
|
+
this.onResultsChanged?.();
|
|
244922
|
+
}
|
|
244923
|
+
if (patch3.provider !== undefined) {
|
|
244924
|
+
if (prevProvider && prevProvider !== patch3.provider)
|
|
244925
|
+
prevProvider.dispose?.();
|
|
244926
|
+
this.#provider = patch3.provider ?? null;
|
|
244927
|
+
this.#capabilities = null;
|
|
244928
|
+
}
|
|
244929
|
+
if (patch3.enabled !== undefined) {
|
|
244930
|
+
this.#config.enabled = patch3.enabled;
|
|
244931
|
+
if (!patch3.enabled) {
|
|
244932
|
+
this.#cancelAll();
|
|
244933
|
+
this.#store.clear();
|
|
244934
|
+
this.#segmentHashes.clear();
|
|
244935
|
+
this.#offsetMaps.clear();
|
|
244936
|
+
this.#setStatus("disabled");
|
|
244937
|
+
this.onResultsChanged?.();
|
|
244938
|
+
return;
|
|
244939
|
+
}
|
|
244940
|
+
if (patch3.enabled && !prevEnabled && doc$12) {
|
|
244941
|
+
this.#setStatus("idle");
|
|
244942
|
+
this.#scheduleFullCheck(doc$12);
|
|
244943
|
+
return;
|
|
244944
|
+
}
|
|
244945
|
+
}
|
|
244946
|
+
if (needsRecheck && this.isEnabled && doc$12) {
|
|
244947
|
+
this.#cancelAll();
|
|
244948
|
+
this.#documentEpoch++;
|
|
244949
|
+
this.#store.clear();
|
|
244950
|
+
this.#segmentHashes.clear();
|
|
244951
|
+
this.onResultsChanged?.();
|
|
244952
|
+
this.#scheduleFullCheck(doc$12);
|
|
244953
|
+
}
|
|
244954
|
+
}
|
|
244955
|
+
onDocumentChanged(doc$12, changedRanges, mapping) {
|
|
244956
|
+
if (!this.isEnabled)
|
|
244957
|
+
return;
|
|
244958
|
+
this.#documentEpoch++;
|
|
244959
|
+
this.#lastDoc = doc$12;
|
|
244960
|
+
const { segments, offsetMaps, segmentPositions } = extractSegmentsWithMaps(doc$12, this.#config.defaultLanguage, this.#pageResolver ?? undefined);
|
|
244961
|
+
this.#lastSegments = segments;
|
|
244962
|
+
this.#offsetMaps = offsetMaps;
|
|
244963
|
+
const dirtyIds = computeDirtySegmentIds(segments, segmentPositions, changedRanges);
|
|
244964
|
+
for (const id2 of dirtyIds)
|
|
244965
|
+
this.#segmentHashes.delete(id2);
|
|
244966
|
+
if (dirtyIds.size > 0) {
|
|
244967
|
+
const recheckId = this.#nextRecheckId++;
|
|
244968
|
+
this.#store.remapIssues(dirtyIds, mapping, recheckId);
|
|
244969
|
+
this.#store.removeOrphanedSegments(new Set(segments.map((s2) => s2.id)));
|
|
244970
|
+
}
|
|
244971
|
+
this.#scheduleDebouncedCheck(segments);
|
|
244972
|
+
}
|
|
244973
|
+
runInitialCheck(doc$12) {
|
|
244974
|
+
if (!this.isEnabled)
|
|
244975
|
+
return;
|
|
244976
|
+
this.#scheduleFullCheck(doc$12);
|
|
244977
|
+
}
|
|
244978
|
+
ignoreWord(word$1) {
|
|
244979
|
+
const normalized = word$1.normalize("NFC").toLowerCase();
|
|
244980
|
+
if (!this.#config.ignoredWords.includes(normalized)) {
|
|
244981
|
+
this.#config.ignoredWords = [...this.#config.ignoredWords, normalized];
|
|
244982
|
+
this.onResultsChanged?.();
|
|
244983
|
+
}
|
|
244984
|
+
}
|
|
244985
|
+
removeIgnoredWord(word$1) {
|
|
244986
|
+
const normalized = word$1.normalize("NFC").toLowerCase();
|
|
244987
|
+
this.#config.ignoredWords = this.#config.ignoredWords.filter((w) => w !== normalized);
|
|
244988
|
+
this.onResultsChanged?.();
|
|
244989
|
+
}
|
|
244990
|
+
dispose() {
|
|
244991
|
+
this.#disposed = true;
|
|
244992
|
+
this.#cancelAll();
|
|
244993
|
+
this.#store.clear();
|
|
244994
|
+
this.#offsetMaps.clear();
|
|
244995
|
+
this.#segmentHashes.clear();
|
|
244996
|
+
this.#lastDoc = null;
|
|
244997
|
+
this.#lastSegments = [];
|
|
244998
|
+
this.#pendingSegments = [];
|
|
244999
|
+
this.#provider?.dispose?.();
|
|
245000
|
+
this.#provider = null;
|
|
245001
|
+
this.#setStatus("disabled");
|
|
245002
|
+
}
|
|
245003
|
+
#scheduleFullCheck(doc$12) {
|
|
245004
|
+
this.#lastDoc = doc$12;
|
|
245005
|
+
const { segments, offsetMaps } = extractSegmentsWithMaps(doc$12, this.#config.defaultLanguage, this.#pageResolver ?? undefined);
|
|
245006
|
+
this.#lastSegments = segments;
|
|
245007
|
+
this.#offsetMaps = offsetMaps;
|
|
245008
|
+
this.#segmentHashes.clear();
|
|
245009
|
+
this.#store.clear();
|
|
245010
|
+
this.#scheduleDebouncedCheck(segments);
|
|
245011
|
+
}
|
|
245012
|
+
#scheduleDebouncedCheck(segments) {
|
|
245013
|
+
if (this.#isComposing)
|
|
245014
|
+
return;
|
|
245015
|
+
if (this.#debounceTimer !== null)
|
|
245016
|
+
clearTimeout(this.#debounceTimer);
|
|
245017
|
+
const msSinceLastCheck = Date.now() - this.#lastCheckFiredAt;
|
|
245018
|
+
if (this.#lastCheckFiredAt > 0 && msSinceLastCheck >= DEFAULT_MAX_WAIT_MS)
|
|
245019
|
+
this.#fireCheck(segments);
|
|
245020
|
+
else
|
|
245021
|
+
this.#debounceTimer = setTimeout(() => {
|
|
245022
|
+
this.#debounceTimer = null;
|
|
245023
|
+
this.#fireCheck(segments);
|
|
245024
|
+
}, this.#config.debounceMs);
|
|
245025
|
+
}
|
|
245026
|
+
#fireCheck(segments) {
|
|
245027
|
+
this.#lastCheckFiredAt = Date.now();
|
|
245028
|
+
this.#runCheck(segments);
|
|
245029
|
+
}
|
|
245030
|
+
async#runCheck(segments) {
|
|
245031
|
+
if (this.#disposed || !this.#provider)
|
|
245032
|
+
return;
|
|
245033
|
+
if (!this.#capabilities && this.#provider.getCapabilities)
|
|
245034
|
+
try {
|
|
245035
|
+
this.#capabilities = await this.#provider.getCapabilities();
|
|
245036
|
+
} catch {}
|
|
245037
|
+
const unchecked = segments.filter((seg) => {
|
|
245038
|
+
const hash$3 = hashSegmentText(seg.text);
|
|
245039
|
+
return this.#segmentHashes.get(seg.id) !== hash$3;
|
|
245040
|
+
});
|
|
245041
|
+
if (unchecked.length === 0) {
|
|
245042
|
+
this.#setStatus("idle");
|
|
245043
|
+
return;
|
|
245044
|
+
}
|
|
245045
|
+
const activeRecheckIds = this.#store.getActiveRecheckIds();
|
|
245046
|
+
const ordered = this.#config.visibleFirst && this.#visibilitySource ? prioritizeByVisibility(unchecked, this.#visibilitySource) : unchecked;
|
|
245047
|
+
const batches = this.#batchSegments(ordered);
|
|
245048
|
+
const epoch = this.#documentEpoch;
|
|
245049
|
+
this.#pendingSegments = [];
|
|
245050
|
+
for (let i4 = 0;i4 < batches.length; i4++) {
|
|
245051
|
+
if (this.#disposed || epoch !== this.#documentEpoch)
|
|
245052
|
+
return;
|
|
245053
|
+
if (this.#inFlightCount >= this.#config.maxConcurrentRequests) {
|
|
245054
|
+
for (let j = i4;j < batches.length; j++)
|
|
245055
|
+
this.#pendingSegments.push(...batches[j]);
|
|
245056
|
+
break;
|
|
245057
|
+
}
|
|
245058
|
+
this.#sendBatch(batches[i4], epoch, activeRecheckIds);
|
|
245059
|
+
}
|
|
245060
|
+
}
|
|
245061
|
+
async#sendBatch(segments, epoch, recheckIds) {
|
|
245062
|
+
if (!this.#provider || this.#disposed)
|
|
245063
|
+
return;
|
|
245064
|
+
const controller = new AbortController;
|
|
245065
|
+
this.#pendingAbortControllers.add(controller);
|
|
245066
|
+
this.#inFlightCount++;
|
|
245067
|
+
this.#setStatus("checking");
|
|
245068
|
+
const timeoutId = setTimeout(() => controller.abort(), this.#config.timeoutMs);
|
|
245069
|
+
const request = {
|
|
245070
|
+
documentId: this.#documentId,
|
|
245071
|
+
defaultLanguage: this.#config.defaultLanguage,
|
|
245072
|
+
maxSuggestions: this.#config.maxSuggestions,
|
|
245073
|
+
segments,
|
|
245074
|
+
signal: controller.signal
|
|
245075
|
+
};
|
|
245076
|
+
try {
|
|
245077
|
+
const result = await this.#provider.check(request);
|
|
245078
|
+
clearTimeout(timeoutId);
|
|
245079
|
+
if (!this.#pendingAbortControllers.delete(controller))
|
|
245080
|
+
return;
|
|
245081
|
+
this.#inFlightCount--;
|
|
245082
|
+
if (epoch !== this.#documentEpoch || this.#disposed) {
|
|
245083
|
+
this.#drainPendingSegments();
|
|
245084
|
+
return;
|
|
245085
|
+
}
|
|
245086
|
+
const validSegmentIds = new Set(segments.map((s2) => s2.id));
|
|
245087
|
+
const segmentTextMap = new Map(segments.map((s2) => [s2.id, s2]));
|
|
245088
|
+
const freshIssues = [];
|
|
245089
|
+
for (const issue of result.issues) {
|
|
245090
|
+
if (!this.#validateIssue(issue, validSegmentIds, segmentTextMap))
|
|
245091
|
+
continue;
|
|
245092
|
+
const offsetMap = this.#offsetMaps.get(issue.segmentId);
|
|
245093
|
+
if (!offsetMap)
|
|
245094
|
+
continue;
|
|
245095
|
+
const resolved = resolveIssuePmRangeFromSlices(issue, offsetMap.slices);
|
|
245096
|
+
if (!resolved)
|
|
245097
|
+
continue;
|
|
245098
|
+
const segment = segmentTextMap.get(issue.segmentId);
|
|
245099
|
+
const storedIssue = {
|
|
245100
|
+
...resolved,
|
|
245101
|
+
state: "confirmed",
|
|
245102
|
+
recheckId: null
|
|
245103
|
+
};
|
|
245104
|
+
if (segment)
|
|
245105
|
+
storedIssue.word = segment.text.slice(issue.start, issue.end);
|
|
245106
|
+
freshIssues.push(storedIssue);
|
|
245107
|
+
}
|
|
245108
|
+
this.#store.replaceBatchResults(recheckIds, validSegmentIds, freshIssues);
|
|
245109
|
+
for (const seg of segments)
|
|
245110
|
+
this.#segmentHashes.set(seg.id, hashSegmentText(seg.text));
|
|
245111
|
+
this.#setStatus(this.#inFlightCount > 0 ? "checking" : "idle");
|
|
245112
|
+
this.onResultsChanged?.();
|
|
245113
|
+
this.#schedulePendingSegments(epoch, recheckIds);
|
|
245114
|
+
} catch (err) {
|
|
245115
|
+
clearTimeout(timeoutId);
|
|
245116
|
+
if (!this.#pendingAbortControllers.delete(controller))
|
|
245117
|
+
return;
|
|
245118
|
+
this.#inFlightCount--;
|
|
245119
|
+
if (this.#disposed)
|
|
245120
|
+
return;
|
|
245121
|
+
if (epoch !== this.#documentEpoch) {
|
|
245122
|
+
this.#drainPendingSegments();
|
|
245123
|
+
return;
|
|
245124
|
+
}
|
|
245125
|
+
const isTimeout = controller.signal.aborted;
|
|
245126
|
+
const proofingError = {
|
|
245127
|
+
kind: isTimeout ? "timeout" : "provider-error",
|
|
245128
|
+
message: isTimeout ? "Provider request timed out" : String(err),
|
|
245129
|
+
segmentIds: segments.map((s2) => s2.id),
|
|
245130
|
+
cause: err
|
|
245131
|
+
};
|
|
245132
|
+
this.#config.onProofingError?.(proofingError);
|
|
245133
|
+
this.#setStatus(this.#inFlightCount > 0 ? "checking" : "degraded");
|
|
245134
|
+
this.#schedulePendingSegments(epoch, recheckIds);
|
|
245135
|
+
}
|
|
245136
|
+
}
|
|
245137
|
+
#schedulePendingSegments(epoch, recheckIds) {
|
|
245138
|
+
if (this.#disposed || epoch !== this.#documentEpoch)
|
|
245139
|
+
return;
|
|
245140
|
+
if (this.#pendingSegments.length === 0)
|
|
245141
|
+
return;
|
|
245142
|
+
if (this.#inFlightCount >= this.#config.maxConcurrentRequests)
|
|
245143
|
+
return;
|
|
245144
|
+
const nextBatch = this.#pendingSegments.splice(0, this.#config.maxSegmentsPerBatch);
|
|
245145
|
+
if (nextBatch.length > 0)
|
|
245146
|
+
this.#sendBatch(nextBatch, epoch, recheckIds);
|
|
245147
|
+
}
|
|
245148
|
+
#drainPendingSegments() {
|
|
245149
|
+
if (this.#disposed || this.#pendingSegments.length === 0)
|
|
245150
|
+
return;
|
|
245151
|
+
this.#schedulePendingSegments(this.#documentEpoch, this.#store.getActiveRecheckIds());
|
|
245152
|
+
}
|
|
245153
|
+
#validateIssue(issue, validSegmentIds, segmentTextMap) {
|
|
245154
|
+
if (!validSegmentIds.has(issue.segmentId)) {
|
|
245155
|
+
this.#reportValidationError(`Unknown segmentId: ${issue.segmentId}`, [issue.segmentId]);
|
|
245156
|
+
return false;
|
|
245157
|
+
}
|
|
245158
|
+
const segment = segmentTextMap.get(issue.segmentId);
|
|
245159
|
+
if (!segment)
|
|
245160
|
+
return false;
|
|
245161
|
+
if (issue.start < 0 || issue.end <= issue.start || issue.end > segment.text.length) {
|
|
245162
|
+
this.#reportValidationError(`Invalid offsets [${issue.start}, ${issue.end}) for segment "${issue.segmentId}" (length ${segment.text.length})`, [issue.segmentId]);
|
|
245163
|
+
return false;
|
|
245164
|
+
}
|
|
245165
|
+
return true;
|
|
245166
|
+
}
|
|
245167
|
+
#reportValidationError(message, segmentIds) {
|
|
245168
|
+
this.#config.onProofingError?.({
|
|
245169
|
+
kind: "validation-error",
|
|
245170
|
+
message,
|
|
245171
|
+
segmentIds
|
|
245172
|
+
});
|
|
245173
|
+
}
|
|
245174
|
+
#batchSegments(segments) {
|
|
245175
|
+
const batches = [];
|
|
245176
|
+
for (let i4 = 0;i4 < segments.length; i4 += this.#config.maxSegmentsPerBatch)
|
|
245177
|
+
batches.push(segments.slice(i4, i4 + this.#config.maxSegmentsPerBatch));
|
|
245178
|
+
return batches;
|
|
245179
|
+
}
|
|
245180
|
+
#cancelAll() {
|
|
245181
|
+
if (this.#debounceTimer !== null) {
|
|
245182
|
+
clearTimeout(this.#debounceTimer);
|
|
245183
|
+
this.#debounceTimer = null;
|
|
245184
|
+
}
|
|
245185
|
+
for (const controller of this.#pendingAbortControllers)
|
|
245186
|
+
controller.abort();
|
|
245187
|
+
this.#pendingAbortControllers.clear();
|
|
245188
|
+
this.#inFlightCount = 0;
|
|
245189
|
+
this.#pendingSegments = [];
|
|
245190
|
+
}
|
|
245191
|
+
#setStatus(status) {
|
|
245192
|
+
if (this.#status !== status) {
|
|
245193
|
+
this.#status = status;
|
|
245194
|
+
this.#config.onStatusChange?.(status);
|
|
245195
|
+
}
|
|
245196
|
+
}
|
|
244296
245197
|
}, FONT_FAMILY_FALLBACKS2, DEFAULT_GENERIC_FALLBACK2 = "sans-serif", normalizeParts = (value) => (value || "").split(",").map((part) => part.trim()).filter(Boolean), splitOutsideQuotes = (str, delimiter) => {
|
|
244297
245198
|
if (!str.includes('"') && !str.includes("'"))
|
|
244298
245199
|
return str.split(delimiter).map((p$12) => p$12.trim()).filter(Boolean);
|
|
@@ -247221,7 +248122,7 @@ var Node$13 = class Node$14 {
|
|
|
247221
248122
|
if (runToken === "totalPageCount")
|
|
247222
248123
|
return context.totalPages ? String(context.totalPages) : run2.text ?? "";
|
|
247223
248124
|
return run2.text ?? "";
|
|
247224
|
-
},
|
|
248125
|
+
}, createDomPainter = (options) => {
|
|
247225
248126
|
if ((options.blocks ?? []).length !== (options.measures ?? []).length)
|
|
247226
248127
|
throw new Error("DomPainter requires the same number of blocks and measures");
|
|
247227
248128
|
const painter = new DomPainter({
|
|
@@ -247278,559 +248179,6 @@ var Node$13 = class Node$14 {
|
|
|
247278
248179
|
painter.setScrollContainer(el);
|
|
247279
248180
|
}
|
|
247280
248181
|
};
|
|
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
248182
|
}, PresentationPaintIndex = class {
|
|
247835
248183
|
#snapshot = null;
|
|
247836
248184
|
#annotationsByPmStart = /* @__PURE__ */ new Map;
|
|
@@ -257076,9 +257424,9 @@ var Node$13 = class Node$14 {
|
|
|
257076
257424
|
return;
|
|
257077
257425
|
console.log(...args$1);
|
|
257078
257426
|
}, 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
|
|
257427
|
+
var init_src_wLlfPuEU_es = __esm(() => {
|
|
257080
257428
|
init_rolldown_runtime_B2q5OVn9_es();
|
|
257081
|
-
|
|
257429
|
+
init_SuperConverter_Dyz8lKjn_es();
|
|
257082
257430
|
init_jszip_ChlR43oI_es();
|
|
257083
257431
|
init_uuid_qzgm05fK_es();
|
|
257084
257432
|
init_constants_CIF8yzNk_es();
|
|
@@ -258194,7 +258542,7 @@ ${err.toString()}`);
|
|
|
258194
258542
|
}
|
|
258195
258543
|
static valid($pos) {
|
|
258196
258544
|
let parent = $pos.parent;
|
|
258197
|
-
if (parent.
|
|
258545
|
+
if (parent.inlineContent || !closedBefore($pos) || !closedAfter($pos))
|
|
258198
258546
|
return false;
|
|
258199
258547
|
let override = parent.type.spec.allowGapCursor;
|
|
258200
258548
|
if (override != null)
|
|
@@ -258257,11 +258605,11 @@ ${err.toString()}`);
|
|
|
258257
258605
|
addPmPlugins() {
|
|
258258
258606
|
return [gapCursor()];
|
|
258259
258607
|
},
|
|
258260
|
-
extendNodeSchema(
|
|
258261
|
-
return { allowGapCursor: callOrGet(getExtensionConfigField(
|
|
258262
|
-
name:
|
|
258263
|
-
options:
|
|
258264
|
-
storage:
|
|
258608
|
+
extendNodeSchema(extension3) {
|
|
258609
|
+
return { allowGapCursor: callOrGet(getExtensionConfigField(extension3, "allowGapCursor", {
|
|
258610
|
+
name: extension3.name,
|
|
258611
|
+
options: extension3.options,
|
|
258612
|
+
storage: extension3.storage
|
|
258265
258613
|
})) ?? null };
|
|
258266
258614
|
}
|
|
258267
258615
|
});
|
|
@@ -261705,11 +262053,11 @@ ${err.toString()}`);
|
|
|
261705
262053
|
})()
|
|
261706
262054
|
];
|
|
261707
262055
|
},
|
|
261708
|
-
extendNodeSchema(
|
|
261709
|
-
return { tableRole: callOrGet(getExtensionConfigField(
|
|
261710
|
-
name:
|
|
261711
|
-
options:
|
|
261712
|
-
storage:
|
|
262056
|
+
extendNodeSchema(extension3) {
|
|
262057
|
+
return { tableRole: callOrGet(getExtensionConfigField(extension3, "tableRole", {
|
|
262058
|
+
name: extension3.name,
|
|
262059
|
+
options: extension3.options,
|
|
262060
|
+
storage: extension3.storage
|
|
261713
262061
|
})) };
|
|
261714
262062
|
}
|
|
261715
262063
|
});
|
|
@@ -281286,6 +281634,10 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
281286
281634
|
pm.classList.remove("view-mode");
|
|
281287
281635
|
}
|
|
281288
281636
|
applyEffectiveEditability(this);
|
|
281637
|
+
this.emit("documentModeChange", {
|
|
281638
|
+
editor: this,
|
|
281639
|
+
documentMode: cleanedMode
|
|
281640
|
+
});
|
|
281289
281641
|
}
|
|
281290
281642
|
blur() {
|
|
281291
281643
|
this.view?.dom?.blur();
|
|
@@ -281503,11 +281855,11 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
281503
281855
|
SelectionHandleExtension
|
|
281504
281856
|
];
|
|
281505
281857
|
const externalExtensions = this.options.externalExtensions || [];
|
|
281506
|
-
const allExtensions = [...coreExtensions, ...this.options.extensions].filter((
|
|
281507
|
-
const extensionType = typeof
|
|
281858
|
+
const allExtensions = [...coreExtensions, ...this.options.extensions].filter((extension3) => {
|
|
281859
|
+
const extensionType = typeof extension3?.type === "string" ? extension3.type : undefined;
|
|
281508
281860
|
return extensionType ? allowedExtensions.includes(extensionType) : false;
|
|
281509
|
-
}).map((
|
|
281510
|
-
const isolatedExternalExtensions = externalExtensions.map((
|
|
281861
|
+
}).map((extension3) => cloneExtensionInstance(extension3));
|
|
281862
|
+
const isolatedExternalExtensions = externalExtensions.map((extension3) => cloneExtensionInstance(extension3));
|
|
281511
281863
|
this.extensionService = ExtensionService.create(allExtensions, isolatedExternalExtensions, this);
|
|
281512
281864
|
}
|
|
281513
281865
|
#createCommandService() {
|
|
@@ -282564,6 +282916,24 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
282564
282916
|
CANONICAL: "canonical",
|
|
282565
282917
|
DERIVED: "derived"
|
|
282566
282918
|
};
|
|
282919
|
+
PROOFING_CSS = {
|
|
282920
|
+
SPELLING: "sd-proofing-spelling",
|
|
282921
|
+
GRAMMAR: "sd-proofing-grammar",
|
|
282922
|
+
STYLE: "sd-proofing-style",
|
|
282923
|
+
DATA_ATTR: "data-sd-proofing",
|
|
282924
|
+
SPLIT_ATTR: "data-sd-proofing-split"
|
|
282925
|
+
};
|
|
282926
|
+
splitOriginMap = /* @__PURE__ */ new WeakMap;
|
|
282927
|
+
NON_TEXT_INLINE_NODES = new Set([
|
|
282928
|
+
"fieldAnnotation",
|
|
282929
|
+
"image",
|
|
282930
|
+
"equation",
|
|
282931
|
+
"hardBreak",
|
|
282932
|
+
"lineBreak",
|
|
282933
|
+
"tab",
|
|
282934
|
+
"footnoteReference",
|
|
282935
|
+
"symbol"
|
|
282936
|
+
]);
|
|
282567
282937
|
FONT_FAMILY_FALLBACKS2 = Object.freeze({
|
|
282568
282938
|
swiss: "Arial, sans-serif",
|
|
282569
282939
|
roman: "Times New Roman, serif",
|
|
@@ -286519,24 +286889,6 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
286519
286889
|
"path(",
|
|
286520
286890
|
"rect("
|
|
286521
286891
|
];
|
|
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
286892
|
SINGLE_COLUMN_DEFAULT = {
|
|
286541
286893
|
count: 1,
|
|
286542
286894
|
gap: 0
|
|
@@ -288171,6 +288523,10 @@ function print() { __p += __j.call(arguments, '') }
|
|
|
288171
288523
|
this.#scheduleRerender();
|
|
288172
288524
|
}
|
|
288173
288525
|
this.#updatePermissionOverlay();
|
|
288526
|
+
this.emit("documentModeChange", {
|
|
288527
|
+
editor: this.#editor,
|
|
288528
|
+
documentMode: mode
|
|
288529
|
+
});
|
|
288174
288530
|
}
|
|
288175
288531
|
#syncDocumentModeClass() {
|
|
288176
288532
|
if (!this.#visibleHost)
|
|
@@ -291641,8 +291997,8 @@ var init_zipper_YmNpPIyc_es = __esm(() => {
|
|
|
291641
291997
|
|
|
291642
291998
|
// ../../packages/superdoc/dist/super-editor.es.js
|
|
291643
291999
|
var init_super_editor_es = __esm(() => {
|
|
291644
|
-
|
|
291645
|
-
|
|
292000
|
+
init_src_wLlfPuEU_es();
|
|
292001
|
+
init_SuperConverter_Dyz8lKjn_es();
|
|
291646
292002
|
init_jszip_ChlR43oI_es();
|
|
291647
292003
|
init_xml_js_40FWvL78_es();
|
|
291648
292004
|
init_constants_CIF8yzNk_es();
|
|
@@ -343039,16 +343395,17 @@ var init_operation_params = __esm(() => {
|
|
|
343039
343395
|
}
|
|
343040
343396
|
],
|
|
343041
343397
|
"doc.insert": [
|
|
343042
|
-
...
|
|
343398
|
+
...TEXT_TARGET_FLAT_PARAMS_AGENT_HIDDEN,
|
|
343043
343399
|
{
|
|
343044
343400
|
name: "offset",
|
|
343045
343401
|
kind: "flag",
|
|
343046
343402
|
type: "number",
|
|
343047
|
-
description: "Character offset for insertion (alias for --start/--end with same value)."
|
|
343403
|
+
description: "Character offset for insertion (alias for --start/--end with same value).",
|
|
343404
|
+
agentVisible: false
|
|
343048
343405
|
}
|
|
343049
343406
|
],
|
|
343050
|
-
"doc.replace": [...
|
|
343051
|
-
"doc.delete": [...
|
|
343407
|
+
"doc.replace": [...TEXT_TARGET_FLAT_PARAMS_AGENT_HIDDEN],
|
|
343408
|
+
"doc.delete": [...TEXT_TARGET_FLAT_PARAMS_AGENT_HIDDEN],
|
|
343052
343409
|
"doc.styles.apply": [
|
|
343053
343410
|
{
|
|
343054
343411
|
name: "target",
|
|
@@ -347451,11 +347808,12 @@ var require_braces = __commonJS((exports, module) => {
|
|
|
347451
347808
|
module.exports = braces;
|
|
347452
347809
|
});
|
|
347453
347810
|
|
|
347454
|
-
// ../../node_modules/.pnpm/picomatch@2.3.
|
|
347811
|
+
// ../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/constants.js
|
|
347455
347812
|
var require_constants4 = __commonJS((exports, module) => {
|
|
347456
347813
|
var path2 = __require("path");
|
|
347457
347814
|
var WIN_SLASH = "\\\\/";
|
|
347458
347815
|
var WIN_NO_SLASH = `[^${WIN_SLASH}]`;
|
|
347816
|
+
var DEFAULT_MAX_EXTGLOB_RECURSION = 0;
|
|
347459
347817
|
var DOT_LITERAL = "\\.";
|
|
347460
347818
|
var PLUS_LITERAL = "\\+";
|
|
347461
347819
|
var QMARK_LITERAL = "\\?";
|
|
@@ -347503,6 +347861,7 @@ var require_constants4 = __commonJS((exports, module) => {
|
|
|
347503
347861
|
END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
|
|
347504
347862
|
};
|
|
347505
347863
|
var POSIX_REGEX_SOURCE = {
|
|
347864
|
+
__proto__: null,
|
|
347506
347865
|
alnum: "a-zA-Z0-9",
|
|
347507
347866
|
alpha: "a-zA-Z",
|
|
347508
347867
|
ascii: "\\x00-\\x7F",
|
|
@@ -347519,6 +347878,7 @@ var require_constants4 = __commonJS((exports, module) => {
|
|
|
347519
347878
|
xdigit: "A-Fa-f0-9"
|
|
347520
347879
|
};
|
|
347521
347880
|
module.exports = {
|
|
347881
|
+
DEFAULT_MAX_EXTGLOB_RECURSION,
|
|
347522
347882
|
MAX_LENGTH: 1024 * 64,
|
|
347523
347883
|
POSIX_REGEX_SOURCE,
|
|
347524
347884
|
REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
|
|
@@ -347528,6 +347888,7 @@ var require_constants4 = __commonJS((exports, module) => {
|
|
|
347528
347888
|
REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
|
|
347529
347889
|
REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
|
|
347530
347890
|
REPLACEMENTS: {
|
|
347891
|
+
__proto__: null,
|
|
347531
347892
|
"***": "*",
|
|
347532
347893
|
"**/**": "**",
|
|
347533
347894
|
"**/**/**": "**"
|
|
@@ -347591,7 +347952,7 @@ var require_constants4 = __commonJS((exports, module) => {
|
|
|
347591
347952
|
};
|
|
347592
347953
|
});
|
|
347593
347954
|
|
|
347594
|
-
// ../../node_modules/.pnpm/picomatch@2.3.
|
|
347955
|
+
// ../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/utils.js
|
|
347595
347956
|
var require_utils3 = __commonJS((exports) => {
|
|
347596
347957
|
var path2 = __require("path");
|
|
347597
347958
|
var win32 = process.platform === "win32";
|
|
@@ -347651,7 +348012,7 @@ var require_utils3 = __commonJS((exports) => {
|
|
|
347651
348012
|
};
|
|
347652
348013
|
});
|
|
347653
348014
|
|
|
347654
|
-
// ../../node_modules/.pnpm/picomatch@2.3.
|
|
348015
|
+
// ../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/scan.js
|
|
347655
348016
|
var require_scan = __commonJS((exports, module) => {
|
|
347656
348017
|
var utils = require_utils3();
|
|
347657
348018
|
var {
|
|
@@ -347966,7 +348327,7 @@ var require_scan = __commonJS((exports, module) => {
|
|
|
347966
348327
|
module.exports = scan;
|
|
347967
348328
|
});
|
|
347968
348329
|
|
|
347969
|
-
// ../../node_modules/.pnpm/picomatch@2.3.
|
|
348330
|
+
// ../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/parse.js
|
|
347970
348331
|
var require_parse2 = __commonJS((exports, module) => {
|
|
347971
348332
|
var constants2 = require_constants4();
|
|
347972
348333
|
var utils = require_utils3();
|
|
@@ -347993,6 +348354,213 @@ var require_parse2 = __commonJS((exports, module) => {
|
|
|
347993
348354
|
var syntaxError = (type2, char) => {
|
|
347994
348355
|
return `Missing ${type2}: "${char}" - use "\\\\${char}" to match literal characters`;
|
|
347995
348356
|
};
|
|
348357
|
+
var splitTopLevel = (input2) => {
|
|
348358
|
+
const parts = [];
|
|
348359
|
+
let bracket = 0;
|
|
348360
|
+
let paren = 0;
|
|
348361
|
+
let quote2 = 0;
|
|
348362
|
+
let value2 = "";
|
|
348363
|
+
let escaped = false;
|
|
348364
|
+
for (const ch of input2) {
|
|
348365
|
+
if (escaped === true) {
|
|
348366
|
+
value2 += ch;
|
|
348367
|
+
escaped = false;
|
|
348368
|
+
continue;
|
|
348369
|
+
}
|
|
348370
|
+
if (ch === "\\") {
|
|
348371
|
+
value2 += ch;
|
|
348372
|
+
escaped = true;
|
|
348373
|
+
continue;
|
|
348374
|
+
}
|
|
348375
|
+
if (ch === '"') {
|
|
348376
|
+
quote2 = quote2 === 1 ? 0 : 1;
|
|
348377
|
+
value2 += ch;
|
|
348378
|
+
continue;
|
|
348379
|
+
}
|
|
348380
|
+
if (quote2 === 0) {
|
|
348381
|
+
if (ch === "[") {
|
|
348382
|
+
bracket++;
|
|
348383
|
+
} else if (ch === "]" && bracket > 0) {
|
|
348384
|
+
bracket--;
|
|
348385
|
+
} else if (bracket === 0) {
|
|
348386
|
+
if (ch === "(") {
|
|
348387
|
+
paren++;
|
|
348388
|
+
} else if (ch === ")" && paren > 0) {
|
|
348389
|
+
paren--;
|
|
348390
|
+
} else if (ch === "|" && paren === 0) {
|
|
348391
|
+
parts.push(value2);
|
|
348392
|
+
value2 = "";
|
|
348393
|
+
continue;
|
|
348394
|
+
}
|
|
348395
|
+
}
|
|
348396
|
+
}
|
|
348397
|
+
value2 += ch;
|
|
348398
|
+
}
|
|
348399
|
+
parts.push(value2);
|
|
348400
|
+
return parts;
|
|
348401
|
+
};
|
|
348402
|
+
var isPlainBranch = (branch) => {
|
|
348403
|
+
let escaped = false;
|
|
348404
|
+
for (const ch of branch) {
|
|
348405
|
+
if (escaped === true) {
|
|
348406
|
+
escaped = false;
|
|
348407
|
+
continue;
|
|
348408
|
+
}
|
|
348409
|
+
if (ch === "\\") {
|
|
348410
|
+
escaped = true;
|
|
348411
|
+
continue;
|
|
348412
|
+
}
|
|
348413
|
+
if (/[?*+@!()[\]{}]/.test(ch)) {
|
|
348414
|
+
return false;
|
|
348415
|
+
}
|
|
348416
|
+
}
|
|
348417
|
+
return true;
|
|
348418
|
+
};
|
|
348419
|
+
var normalizeSimpleBranch = (branch) => {
|
|
348420
|
+
let value2 = branch.trim();
|
|
348421
|
+
let changed = true;
|
|
348422
|
+
while (changed === true) {
|
|
348423
|
+
changed = false;
|
|
348424
|
+
if (/^@\([^\\()[\]{}|]+\)$/.test(value2)) {
|
|
348425
|
+
value2 = value2.slice(2, -1);
|
|
348426
|
+
changed = true;
|
|
348427
|
+
}
|
|
348428
|
+
}
|
|
348429
|
+
if (!isPlainBranch(value2)) {
|
|
348430
|
+
return;
|
|
348431
|
+
}
|
|
348432
|
+
return value2.replace(/\\(.)/g, "$1");
|
|
348433
|
+
};
|
|
348434
|
+
var hasRepeatedCharPrefixOverlap = (branches) => {
|
|
348435
|
+
const values2 = branches.map(normalizeSimpleBranch).filter(Boolean);
|
|
348436
|
+
for (let i4 = 0;i4 < values2.length; i4++) {
|
|
348437
|
+
for (let j = i4 + 1;j < values2.length; j++) {
|
|
348438
|
+
const a2 = values2[i4];
|
|
348439
|
+
const b2 = values2[j];
|
|
348440
|
+
const char = a2[0];
|
|
348441
|
+
if (!char || a2 !== char.repeat(a2.length) || b2 !== char.repeat(b2.length)) {
|
|
348442
|
+
continue;
|
|
348443
|
+
}
|
|
348444
|
+
if (a2 === b2 || a2.startsWith(b2) || b2.startsWith(a2)) {
|
|
348445
|
+
return true;
|
|
348446
|
+
}
|
|
348447
|
+
}
|
|
348448
|
+
}
|
|
348449
|
+
return false;
|
|
348450
|
+
};
|
|
348451
|
+
var parseRepeatedExtglob = (pattern, requireEnd = true) => {
|
|
348452
|
+
if (pattern[0] !== "+" && pattern[0] !== "*" || pattern[1] !== "(") {
|
|
348453
|
+
return;
|
|
348454
|
+
}
|
|
348455
|
+
let bracket = 0;
|
|
348456
|
+
let paren = 0;
|
|
348457
|
+
let quote2 = 0;
|
|
348458
|
+
let escaped = false;
|
|
348459
|
+
for (let i4 = 1;i4 < pattern.length; i4++) {
|
|
348460
|
+
const ch = pattern[i4];
|
|
348461
|
+
if (escaped === true) {
|
|
348462
|
+
escaped = false;
|
|
348463
|
+
continue;
|
|
348464
|
+
}
|
|
348465
|
+
if (ch === "\\") {
|
|
348466
|
+
escaped = true;
|
|
348467
|
+
continue;
|
|
348468
|
+
}
|
|
348469
|
+
if (ch === '"') {
|
|
348470
|
+
quote2 = quote2 === 1 ? 0 : 1;
|
|
348471
|
+
continue;
|
|
348472
|
+
}
|
|
348473
|
+
if (quote2 === 1) {
|
|
348474
|
+
continue;
|
|
348475
|
+
}
|
|
348476
|
+
if (ch === "[") {
|
|
348477
|
+
bracket++;
|
|
348478
|
+
continue;
|
|
348479
|
+
}
|
|
348480
|
+
if (ch === "]" && bracket > 0) {
|
|
348481
|
+
bracket--;
|
|
348482
|
+
continue;
|
|
348483
|
+
}
|
|
348484
|
+
if (bracket > 0) {
|
|
348485
|
+
continue;
|
|
348486
|
+
}
|
|
348487
|
+
if (ch === "(") {
|
|
348488
|
+
paren++;
|
|
348489
|
+
continue;
|
|
348490
|
+
}
|
|
348491
|
+
if (ch === ")") {
|
|
348492
|
+
paren--;
|
|
348493
|
+
if (paren === 0) {
|
|
348494
|
+
if (requireEnd === true && i4 !== pattern.length - 1) {
|
|
348495
|
+
return;
|
|
348496
|
+
}
|
|
348497
|
+
return {
|
|
348498
|
+
type: pattern[0],
|
|
348499
|
+
body: pattern.slice(2, i4),
|
|
348500
|
+
end: i4
|
|
348501
|
+
};
|
|
348502
|
+
}
|
|
348503
|
+
}
|
|
348504
|
+
}
|
|
348505
|
+
};
|
|
348506
|
+
var getStarExtglobSequenceOutput = (pattern) => {
|
|
348507
|
+
let index2 = 0;
|
|
348508
|
+
const chars = [];
|
|
348509
|
+
while (index2 < pattern.length) {
|
|
348510
|
+
const match2 = parseRepeatedExtglob(pattern.slice(index2), false);
|
|
348511
|
+
if (!match2 || match2.type !== "*") {
|
|
348512
|
+
return;
|
|
348513
|
+
}
|
|
348514
|
+
const branches = splitTopLevel(match2.body).map((branch2) => branch2.trim());
|
|
348515
|
+
if (branches.length !== 1) {
|
|
348516
|
+
return;
|
|
348517
|
+
}
|
|
348518
|
+
const branch = normalizeSimpleBranch(branches[0]);
|
|
348519
|
+
if (!branch || branch.length !== 1) {
|
|
348520
|
+
return;
|
|
348521
|
+
}
|
|
348522
|
+
chars.push(branch);
|
|
348523
|
+
index2 += match2.end + 1;
|
|
348524
|
+
}
|
|
348525
|
+
if (chars.length < 1) {
|
|
348526
|
+
return;
|
|
348527
|
+
}
|
|
348528
|
+
const source = chars.length === 1 ? utils.escapeRegex(chars[0]) : `[${chars.map((ch) => utils.escapeRegex(ch)).join("")}]`;
|
|
348529
|
+
return `${source}*`;
|
|
348530
|
+
};
|
|
348531
|
+
var repeatedExtglobRecursion = (pattern) => {
|
|
348532
|
+
let depth = 0;
|
|
348533
|
+
let value2 = pattern.trim();
|
|
348534
|
+
let match2 = parseRepeatedExtglob(value2);
|
|
348535
|
+
while (match2) {
|
|
348536
|
+
depth++;
|
|
348537
|
+
value2 = match2.body.trim();
|
|
348538
|
+
match2 = parseRepeatedExtglob(value2);
|
|
348539
|
+
}
|
|
348540
|
+
return depth;
|
|
348541
|
+
};
|
|
348542
|
+
var analyzeRepeatedExtglob = (body2, options2) => {
|
|
348543
|
+
if (options2.maxExtglobRecursion === false) {
|
|
348544
|
+
return { risky: false };
|
|
348545
|
+
}
|
|
348546
|
+
const max5 = typeof options2.maxExtglobRecursion === "number" ? options2.maxExtglobRecursion : constants2.DEFAULT_MAX_EXTGLOB_RECURSION;
|
|
348547
|
+
const branches = splitTopLevel(body2).map((branch) => branch.trim());
|
|
348548
|
+
if (branches.length > 1) {
|
|
348549
|
+
if (branches.some((branch) => branch === "") || branches.some((branch) => /^[*?]+$/.test(branch)) || hasRepeatedCharPrefixOverlap(branches)) {
|
|
348550
|
+
return { risky: true };
|
|
348551
|
+
}
|
|
348552
|
+
}
|
|
348553
|
+
for (const branch of branches) {
|
|
348554
|
+
const safeOutput = getStarExtglobSequenceOutput(branch);
|
|
348555
|
+
if (safeOutput) {
|
|
348556
|
+
return { risky: true, safeOutput };
|
|
348557
|
+
}
|
|
348558
|
+
if (repeatedExtglobRecursion(branch) > max5) {
|
|
348559
|
+
return { risky: true };
|
|
348560
|
+
}
|
|
348561
|
+
}
|
|
348562
|
+
return { risky: false };
|
|
348563
|
+
};
|
|
347996
348564
|
var parse4 = (input2, options2) => {
|
|
347997
348565
|
if (typeof input2 !== "string") {
|
|
347998
348566
|
throw new TypeError("Expected a string");
|
|
@@ -348125,6 +348693,8 @@ var require_parse2 = __commonJS((exports, module) => {
|
|
|
348125
348693
|
token2.prev = prev;
|
|
348126
348694
|
token2.parens = state2.parens;
|
|
348127
348695
|
token2.output = state2.output;
|
|
348696
|
+
token2.startIndex = state2.index;
|
|
348697
|
+
token2.tokensIndex = tokens.length;
|
|
348128
348698
|
const output = (opts.capture ? "(" : "") + token2.open;
|
|
348129
348699
|
increment2("parens");
|
|
348130
348700
|
push2({ type: type2, value: value3, output: state2.output ? "" : ONE_CHAR });
|
|
@@ -348132,6 +348702,26 @@ var require_parse2 = __commonJS((exports, module) => {
|
|
|
348132
348702
|
extglobs.push(token2);
|
|
348133
348703
|
};
|
|
348134
348704
|
const extglobClose = (token2) => {
|
|
348705
|
+
const literal = input2.slice(token2.startIndex, state2.index + 1);
|
|
348706
|
+
const body2 = input2.slice(token2.startIndex + 2, state2.index);
|
|
348707
|
+
const analysis = analyzeRepeatedExtglob(body2, opts);
|
|
348708
|
+
if ((token2.type === "plus" || token2.type === "star") && analysis.risky) {
|
|
348709
|
+
const safeOutput = analysis.safeOutput ? (token2.output ? "" : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput) : undefined;
|
|
348710
|
+
const open2 = tokens[token2.tokensIndex];
|
|
348711
|
+
open2.type = "text";
|
|
348712
|
+
open2.value = literal;
|
|
348713
|
+
open2.output = safeOutput || utils.escapeRegex(literal);
|
|
348714
|
+
for (let i4 = token2.tokensIndex + 1;i4 < tokens.length; i4++) {
|
|
348715
|
+
tokens[i4].value = "";
|
|
348716
|
+
tokens[i4].output = "";
|
|
348717
|
+
delete tokens[i4].suffix;
|
|
348718
|
+
}
|
|
348719
|
+
state2.output = token2.output + open2.output;
|
|
348720
|
+
state2.backtrack = true;
|
|
348721
|
+
push2({ type: "paren", extglob: true, value: value2, output: "" });
|
|
348722
|
+
decrement("parens");
|
|
348723
|
+
return;
|
|
348724
|
+
}
|
|
348135
348725
|
let output = token2.close + (opts.capture ? ")" : "");
|
|
348136
348726
|
let rest;
|
|
348137
348727
|
if (token2.type === "negate") {
|
|
@@ -348744,7 +349334,7 @@ var require_parse2 = __commonJS((exports, module) => {
|
|
|
348744
349334
|
module.exports = parse4;
|
|
348745
349335
|
});
|
|
348746
349336
|
|
|
348747
|
-
// ../../node_modules/.pnpm/picomatch@2.3.
|
|
349337
|
+
// ../../node_modules/.pnpm/picomatch@2.3.2/node_modules/picomatch/lib/picomatch.js
|
|
348748
349338
|
var require_picomatch = __commonJS((exports, module) => {
|
|
348749
349339
|
var path2 = __require("path");
|
|
348750
349340
|
var scan = require_scan();
|