@superdoc-dev/cli 0.7.0-next.13 → 0.7.0-next.15

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.
Files changed (2) hide show
  1. package/dist/index.js +1003 -564
  2. package/package.json +8 -8
package/dist/index.js CHANGED
@@ -1241,7 +1241,7 @@ var init_operation_definitions = __esm(() => {
1241
1241
  INTENT_GROUP_META = {
1242
1242
  search: {
1243
1243
  toolName: "superdoc_search",
1244
- 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.",
1244
+ description: "Find text patterns or nodes in the document and get ref handles for targeting edits and formatting. " + "Refs expire after any mutation that changes the document. Re-search before the next edit when using individual tools (superdoc_edit, superdoc_format). " + 'Within a superdoc_mutations batch, selectors in "where" clauses resolve automatically at compile time; no manual re-searching needed between steps. ' + "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.",
1245
1245
  inputExamples: [
1246
1246
  { select: { type: "text", pattern: "Introduction" }, require: "first" },
1247
1247
  { select: { type: "text", pattern: "total amount" }, require: "all" },
@@ -1255,9 +1255,10 @@ var init_operation_definitions = __esm(() => {
1255
1255
  },
1256
1256
  get_content: {
1257
1257
  toolName: "superdoc_get_content",
1258
- 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.",
1258
+ 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, optional full text when includeText:true, formatting properties (fontFamily, fontSize, color, bold, underline, alignment), and ref handles for immediate use with superdoc_edit or superdoc_format. ' + 'When you need to evaluate or rewrite existing paragraphs or clauses, prefer action "blocks" with includeText:true so you can identify the correct block and then target it by nodeId. ' + '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.",
1259
1259
  inputExamples: [
1260
1260
  { action: "blocks" },
1261
+ { action: "blocks", includeText: true, offset: 0, limit: 20 },
1261
1262
  { action: "blocks", offset: 0, limit: 20, nodeTypes: ["heading", "paragraph"] },
1262
1263
  { action: "text" },
1263
1264
  { action: "info" }
@@ -1265,18 +1266,36 @@ var init_operation_definitions = __esm(() => {
1265
1266
  },
1266
1267
  edit: {
1267
1268
  toolName: "superdoc_edit",
1268
- 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.',
1269
+ description: "The primary tool for inserting content into documents. " + 'ALWAYS use action "insert" with type "markdown" to create headings, paragraphs, or any block content this is faster and creates proper document structure in one call. Do NOT use superdoc_create for headings or paragraphs. ' + "The markdown parser creates headings from # markers (# = Heading1, ## = Heading2), bold from **text**, italic from *text*, and numbered/bullet lists. " + 'Position markdown inserts with "target" (a BlockNodeAddress like {kind:"block", nodeType, nodeId}) and "placement" (before, after, insideStart, insideEnd). Without a target, content appends at the end of the document. ' + "IMPORTANT: After a markdown insert, analyze the document context (what kind of document, how titles and body text are styled) and follow up with ONE superdoc_mutations call to format inserted blocks so they look like they belong. " + 'Each format.apply step accepts "inline" (fontFamily, fontSize, bold, underline, color), "alignment", and "scope" in the same step. ' + 'Use scope: "block" so formatting covers the entire paragraph. ' + "Copy the exact property values from the existing get_content blocks (fontFamily, fontSize, color, alignment, bold, underline). Do NOT invent values — use what the blocks show. " + 'Also supports replace, delete, and undo/redo. 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. " + 'For multi-step redlines or whole-clause rewrites, prefer superdoc_mutations with where:{by:"block", nodeType, nodeId} from superdoc_get_content action "blocks" includeText:true rather than relying on text selectors. ' + "Refs expire after any mutation; always re-search before the next edit. " + "For 2+ edits that must succeed or fail atomically, use superdoc_mutations instead. " + 'Supports "dryRun" to preview changes and "changeMode: tracked" to record edits as tracked changes (not supported for markdown/html inserts). ' + 'Do NOT build "target" objects manually when a ref is available; prefer "ref" for simpler, more reliable targeting.',
1269
1270
  inputExamples: [
1271
+ {
1272
+ action: "insert",
1273
+ type: "markdown",
1274
+ target: { kind: "block", nodeType: "paragraph", nodeId: "<nodeId>" },
1275
+ placement: "before",
1276
+ value: `# Executive Summary
1277
+
1278
+ This agreement sets forth the principal terms...`
1279
+ },
1280
+ {
1281
+ action: "insert",
1282
+ type: "markdown",
1283
+ value: `# Section Title
1284
+
1285
+ Paragraph content here.
1286
+
1287
+ # Another Section
1288
+
1289
+ More content with **bold** and *italic*.`
1290
+ },
1270
1291
  { action: "replace", ref: "<handle.ref>", text: "new text here" },
1271
- { action: "insert", value: "Appended paragraph.", placement: "insideEnd" },
1272
- { action: "insert", ref: "<block.ref>", value: "Inserted before.", placement: "before" },
1273
1292
  { action: "delete", ref: "<handle.ref>" },
1274
1293
  { action: "undo" }
1275
1294
  ]
1276
1295
  },
1277
1296
  create: {
1278
1297
  toolName: "superdoc_create",
1279
- 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.',
1298
+ description: 'IMPORTANT: For headings and paragraphs, use superdoc_edit with type "markdown" instead it is faster, creates proper styles, and handles positioning via target + placement. ' + "Only use superdoc_create for tables or when markdown cannot express the content. " + "Creates a single paragraph, heading, or table. Returns nodeId and ref for the created block. " + "After creating, the returned ref is valid for ONE immediate superdoc_format call. For subsequent operations, re-fetch blocks with superdoc_get_content to get fresh refs (refs expire after any mutation). " + 'When the user asks for a "heading", use action "heading" with a level (default 1). Use action "paragraph" for regular body text. ' + '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.',
1280
1299
  inputExamples: [
1281
1300
  { action: "paragraph", text: "New paragraph content.", at: { kind: "documentEnd" } },
1282
1301
  {
@@ -1295,7 +1314,7 @@ var init_operation_definitions = __esm(() => {
1295
1314
  },
1296
1315
  format: {
1297
1316
  toolName: "superdoc_format",
1298
- 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.",
1317
+ description: "Change text and paragraph formatting. " + 'To format multiple items at once, use superdoc_mutations with format.apply steps instead of calling this tool repeatedly. Use require "all" with a node selector to format every heading or paragraph in one batch. ' + "Use this tool for single-item formatting when you have a valid ref or nodeId. " + '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.",
1299
1318
  inputExamples: [
1300
1319
  { action: "inline", ref: "<handle.ref>", inline: { bold: true } },
1301
1320
  {
@@ -1373,7 +1392,7 @@ var init_operation_definitions = __esm(() => {
1373
1392
  section: { toolName: "superdoc_section", description: "Page layout, margins, columns" },
1374
1393
  mutations: {
1375
1394
  toolName: "superdoc_mutations",
1376
- 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.",
1395
+ description: "All steps succeed or all fail; no partial application. " + "Execute multiple operations atomically in one batch. Use this for any workflow needing 2+ changes. " + "Supported step types: text (text.rewrite, text.insert, text.delete), format (format.apply), create (create.heading, create.paragraph, create.table), assert. " + 'Each step has an id, an op, a "where" clause for targeting ({by:"select", select:{...}, require:"first"|"exactlyOne"|"all"} or {by:"ref", ref:"..."} or {by:"block", nodeType:"paragraph", nodeId:"..."}), and "args" with operation-specific parameters. ' + 'Use {by:"block", nodeType, nodeId} when you want to rewrite, delete, format, or anchor against a whole known block from superdoc_get_content action "blocks" without relying on text matching. ' + 'For full-paragraph or full-clause rewrites, first call superdoc_get_content with action:"blocks" and includeText:true, then rewrite the matching block by nodeId. ' + 'Use {by:"select"} only for substring edits, discovery, or insertion relative to a sentence fragment; do NOT use a shortened text selector to replace an entire known block. ' + 'For create steps, "where" targets an existing anchor block and args.position ("before" or "after") controls placement. Sequential creates targeting the same anchor maintain correct order via internal position mapping. ' + 'For format.apply with require "all", use a node selector to format every heading or paragraph at once: {by:"select", select:{type:"node", nodeType:"heading"}, require:"all"}. ' + "Selectors resolve at compile time (before execution). This means format.apply steps CANNOT target content created by earlier create steps in the same batch. Split creates and formatting into separate batches: first a mutations call with creates, then a mutations call with format.apply. " + 'Action "preview" dry-runs the plan. Action "apply" executes it. ' + "If a selector matches nothing, the failure reports the step id plus selector details so you can retry with a shorter or more distinctive anchor. " + "Do NOT create two steps that target overlapping text in the same block; combine them into a single text.rewrite step.",
1377
1396
  inputExamples: [
1378
1397
  {
1379
1398
  action: "apply",
@@ -1393,6 +1412,29 @@ var init_operation_definitions = __esm(() => {
1393
1412
  args: {}
1394
1413
  }
1395
1414
  ]
1415
+ },
1416
+ {
1417
+ action: "apply",
1418
+ steps: [
1419
+ {
1420
+ id: "r1",
1421
+ op: "text.rewrite",
1422
+ where: { by: "block", nodeType: "paragraph", nodeId: "<nodeId>" },
1423
+ args: { replacement: { text: "Updated clause text." } }
1424
+ },
1425
+ {
1426
+ id: "f1",
1427
+ op: "format.apply",
1428
+ where: { by: "select", select: { type: "node", nodeType: "heading" }, require: "all" },
1429
+ args: { inline: { color: "#FF0000" } }
1430
+ },
1431
+ {
1432
+ id: "f2",
1433
+ op: "format.apply",
1434
+ where: { by: "select", select: { type: "text", pattern: "Confidential Information" }, require: "all" },
1435
+ args: { inline: { bold: true } }
1436
+ }
1437
+ ]
1396
1438
  }
1397
1439
  ]
1398
1440
  }
@@ -1735,8 +1777,8 @@ var init_operation_definitions = __esm(() => {
1735
1777
  },
1736
1778
  "blocks.list": {
1737
1779
  memberPath: "blocks.list",
1738
- description: "List top-level blocks in document order with IDs, types, and text previews. Supports pagination via offset/limit and optional nodeType filtering.",
1739
- expectedResult: "Returns a BlocksListResult with total block count, an ordered array of block entries (ordinal, nodeId, nodeType, textPreview, isEmpty), and the current document revision.",
1780
+ description: "List top-level blocks in document order with IDs, types, text previews, and optional full text when includeText:true. Supports pagination via offset/limit and optional nodeType filtering.",
1781
+ expectedResult: "Returns a BlocksListResult with total block count, an ordered array of block entries (ordinal, nodeId, nodeType, textPreview, optional text, isEmpty), and the current document revision.",
1740
1782
  requiresDocumentContext: true,
1741
1783
  metadata: readOperation({
1742
1784
  throws: ["INVALID_INPUT"]
@@ -9737,6 +9779,10 @@ var init_schemas = __esm(() => {
9737
9779
  type: "array",
9738
9780
  items: { enum: [...blockNodeTypeValues] },
9739
9781
  description: "Filter by block types (e.g. ['paragraph', 'heading']). Omit for all types."
9782
+ },
9783
+ includeText: {
9784
+ type: "boolean",
9785
+ description: "When true, includes the full flattened block text in each block entry."
9740
9786
  }
9741
9787
  }),
9742
9788
  output: objectSchema({
@@ -9748,6 +9794,10 @@ var init_schemas = __esm(() => {
9748
9794
  nodeId: { type: "string", description: "Block ID for targeting with other tools." },
9749
9795
  nodeType: { enum: [...blockNodeTypeValues] },
9750
9796
  textPreview: { oneOf: [{ type: "string" }, { type: "null" }] },
9797
+ text: {
9798
+ oneOf: [{ type: "string" }, { type: "null" }],
9799
+ description: "Full flattened block text when requested with includeText."
9800
+ },
9751
9801
  isEmpty: { type: "boolean" },
9752
9802
  styleId: { oneOf: [{ type: "string" }, { type: "null" }], description: "Named paragraph style." },
9753
9803
  fontFamily: { type: "string", description: "Font family from first text run." },
@@ -11097,13 +11147,27 @@ var init_schemas = __esm(() => {
11097
11147
  by: { const: "target", type: "string" },
11098
11148
  target: selectionTargetSchema
11099
11149
  }, ["by", "target"]);
11100
- const stepWhereSchema = { oneOf: [selectWhereSchema, refWhereSchema, targetWhereSchema] };
11101
- const insertWhereSchema = objectSchema({
11102
- by: { const: "select", type: "string" },
11103
- select: { oneOf: [textSelectorSchema, nodeSelectorSchema] },
11104
- within: blockNodeAddressSchema,
11105
- require: { enum: ["first", "exactlyOne"] }
11106
- }, ["by", "select", "require"]);
11150
+ const blockWhereSchema = objectSchema({
11151
+ by: { const: "block", type: "string" },
11152
+ nodeType: { enum: [...blockNodeTypeValues] },
11153
+ nodeId: { type: "string" }
11154
+ }, ["by", "nodeType", "nodeId"]);
11155
+ const stepWhereSchema = {
11156
+ oneOf: [selectWhereSchema, refWhereSchema, targetWhereSchema, blockWhereSchema]
11157
+ };
11158
+ const insertWhereSchema = {
11159
+ oneOf: [
11160
+ objectSchema({
11161
+ by: { const: "select", type: "string" },
11162
+ select: { oneOf: [textSelectorSchema, nodeSelectorSchema] },
11163
+ within: blockNodeAddressSchema,
11164
+ require: { enum: ["first", "exactlyOne"] }
11165
+ }, ["by", "select", "require"]),
11166
+ refWhereSchema,
11167
+ targetWhereSchema,
11168
+ blockWhereSchema
11169
+ ]
11170
+ };
11107
11171
  const assertWhereSchema = objectSchema({
11108
11172
  by: { const: "select", type: "string" },
11109
11173
  select: { oneOf: [textSelectorSchema, nodeSelectorSchema] },
@@ -11171,9 +11235,22 @@ var init_schemas = __esm(() => {
11171
11235
  id: { type: "string" },
11172
11236
  op: { const: "format.apply", type: "string" },
11173
11237
  where: stepWhereSchema,
11174
- args: objectSchema({
11175
- inline: buildInlineRunPatchSchema()
11176
- }, ["inline"])
11238
+ args: {
11239
+ ...objectSchema({
11240
+ inline: buildInlineRunPatchSchema(),
11241
+ alignment: {
11242
+ type: "string",
11243
+ enum: ["left", "center", "right", "justify"],
11244
+ description: "Set paragraph alignment on the target block(s). Can be combined with inline formatting in the same step."
11245
+ },
11246
+ scope: {
11247
+ type: "string",
11248
+ enum: ["match", "block"],
11249
+ description: 'When "block", inline formatting expands to cover the entire parent paragraph(s), not just the matched text. Use "block" after markdown inserts to format whole paragraphs with a short identifying pattern. Default: "match".'
11250
+ }
11251
+ }, []),
11252
+ minProperties: 1
11253
+ }
11177
11254
  }, ["id", "op", "where", "args"]);
11178
11255
  const assertStepSchema = objectSchema({
11179
11256
  id: { type: "string" },
@@ -14408,22 +14485,35 @@ function validateInsertInput(input) {
14408
14485
  }
14409
14486
  }
14410
14487
  function validateTextInsertInput(input) {
14411
- if ("placement" in input && input.placement !== undefined) {
14412
- throw new DocumentApiValidationError("INVALID_INPUT", '"placement" is only valid with structural content input, not with "value".', { field: "placement" });
14488
+ const contentType = typeof input.type === "string" ? input.type : "text";
14489
+ const isRichContent = contentType === "markdown" || contentType === "html";
14490
+ if ("placement" in input && input.placement !== undefined && !isRichContent) {
14491
+ throw new DocumentApiValidationError("INVALID_INPUT", '"placement" is only valid with structural content input or markdown/html inserts, not with plain "value".', { field: "placement" });
14413
14492
  }
14414
14493
  if ("nestingPolicy" in input && input.nestingPolicy !== undefined) {
14415
14494
  throw new DocumentApiValidationError("INVALID_INPUT", '"nestingPolicy" is only valid with structural content input, not with "value".', { field: "nestingPolicy" });
14416
14495
  }
14417
14496
  assertNoUnknownFields(input, TEXT_INSERT_ALLOWED_KEYS, "insert");
14497
+ if (isRichContent && "placement" in input && input.placement !== undefined) {
14498
+ if (typeof input.placement !== "string" || !PLACEMENT_VALUES.has(input.placement)) {
14499
+ throw new DocumentApiValidationError("INVALID_INPUT", `placement must be one of: before, after, insideStart, insideEnd. Got "${String(input.placement)}".`, { field: "placement", value: input.placement });
14500
+ }
14501
+ }
14418
14502
  const { target, ref: ref2, value, type } = input;
14419
14503
  if (target !== undefined && ref2 !== undefined) {
14420
14504
  throw new DocumentApiValidationError("INVALID_INPUT", 'Insert input must provide either "target" or "ref", not both.', { fields: ["target", "ref"] });
14421
14505
  }
14422
- if (target !== undefined && !isSelectionTarget(target)) {
14423
- throw new DocumentApiValidationError("INVALID_TARGET", "target must be a SelectionTarget object.", {
14424
- field: "target",
14425
- value: target
14426
- });
14506
+ if (target !== undefined) {
14507
+ if (isRichContent) {
14508
+ if (!isSelectionTarget(target) && !isBlockNodeAddress(target)) {
14509
+ throw new DocumentApiValidationError("INVALID_TARGET", "target must be a SelectionTarget or BlockNodeAddress for markdown/html inserts.", { field: "target", value: target });
14510
+ }
14511
+ } else if (!isSelectionTarget(target)) {
14512
+ throw new DocumentApiValidationError("INVALID_TARGET", "target must be a SelectionTarget object.", {
14513
+ field: "target",
14514
+ value: target
14515
+ });
14516
+ }
14427
14517
  }
14428
14518
  if (ref2 !== undefined && (typeof ref2 !== "string" || ref2 === "")) {
14429
14519
  throw new DocumentApiValidationError("INVALID_TARGET", "ref must be a non-empty string.", {
@@ -14487,7 +14577,7 @@ var init_insert = __esm(() => {
14487
14577
  init_selection_target_validator();
14488
14578
  init_fragment_validator();
14489
14579
  init_story_validator();
14490
- TEXT_INSERT_ALLOWED_KEYS = new Set(["value", "type", "target", "ref", "in"]);
14580
+ TEXT_INSERT_ALLOWED_KEYS = new Set(["value", "type", "target", "ref", "in", "placement"]);
14491
14581
  STRUCTURAL_INSERT_ALLOWED_KEYS = new Set(["content", "target", "placement", "nestingPolicy", "in"]);
14492
14582
  VALID_INSERT_TYPES = new Set(["text", "markdown", "html"]);
14493
14583
  });
@@ -15347,6 +15437,11 @@ function validateBlocksListInput(input) {
15347
15437
  }
15348
15438
  }
15349
15439
  }
15440
+ if (input.includeText != null && typeof input.includeText !== "boolean") {
15441
+ throw new DocumentApiValidationError("INVALID_INPUT", "blocks.list includeText must be a boolean.", {
15442
+ fields: ["includeText"]
15443
+ });
15444
+ }
15350
15445
  }
15351
15446
  function validateBlocksDeleteInput(input) {
15352
15447
  if (!input || typeof input !== "object") {
@@ -65398,7 +65493,7 @@ var init_remark_gfm_BhnWr3yf_es = __esm(() => {
65398
65493
  emptyOptions2 = {};
65399
65494
  });
65400
65495
 
65401
- // ../../packages/superdoc/dist/chunks/SuperConverter-CWhofwLf.es.js
65496
+ // ../../packages/superdoc/dist/chunks/SuperConverter-w6yaFRT5.es.js
65402
65497
  function getExtensionConfigField(extension$1, field, context = { name: "" }) {
65403
65498
  const fieldValue = extension$1.config[field];
65404
65499
  if (typeof fieldValue === "function")
@@ -68822,19 +68917,36 @@ function validateInsertInput2(input) {
68822
68917
  validateTextInsertInput2(input);
68823
68918
  }
68824
68919
  function validateTextInsertInput2(input) {
68825
- if ("placement" in input && input.placement !== undefined)
68826
- throw new DocumentApiValidationError2("INVALID_INPUT", '"placement" is only valid with structural content input, not with "value".', { field: "placement" });
68920
+ const contentType = typeof input.type === "string" ? input.type : "text";
68921
+ const isRichContent = contentType === "markdown" || contentType === "html";
68922
+ if ("placement" in input && input.placement !== undefined && !isRichContent)
68923
+ throw new DocumentApiValidationError2("INVALID_INPUT", '"placement" is only valid with structural content input or markdown/html inserts, not with plain "value".', { field: "placement" });
68827
68924
  if ("nestingPolicy" in input && input.nestingPolicy !== undefined)
68828
68925
  throw new DocumentApiValidationError2("INVALID_INPUT", '"nestingPolicy" is only valid with structural content input, not with "value".', { field: "nestingPolicy" });
68829
68926
  assertNoUnknownFields3(input, TEXT_INSERT_ALLOWED_KEYS2, "insert");
68927
+ if (isRichContent && "placement" in input && input.placement !== undefined) {
68928
+ if (typeof input.placement !== "string" || !PLACEMENT_VALUES2.has(input.placement))
68929
+ throw new DocumentApiValidationError2("INVALID_INPUT", `placement must be one of: before, after, insideStart, insideEnd. Got "${String(input.placement)}".`, {
68930
+ field: "placement",
68931
+ value: input.placement
68932
+ });
68933
+ }
68830
68934
  const { target, ref: ref$1, value, type } = input;
68831
68935
  if (target !== undefined && ref$1 !== undefined)
68832
68936
  throw new DocumentApiValidationError2("INVALID_INPUT", 'Insert input must provide either "target" or "ref", not both.', { fields: ["target", "ref"] });
68833
- if (target !== undefined && !isSelectionTarget2(target))
68834
- throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a SelectionTarget object.", {
68835
- field: "target",
68836
- value: target
68837
- });
68937
+ if (target !== undefined) {
68938
+ if (isRichContent) {
68939
+ if (!isSelectionTarget2(target) && !isBlockNodeAddress2(target))
68940
+ throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a SelectionTarget or BlockNodeAddress for markdown/html inserts.", {
68941
+ field: "target",
68942
+ value: target
68943
+ });
68944
+ } else if (!isSelectionTarget2(target))
68945
+ throw new DocumentApiValidationError2("INVALID_TARGET", "target must be a SelectionTarget object.", {
68946
+ field: "target",
68947
+ value: target
68948
+ });
68949
+ }
68838
68950
  if (ref$1 !== undefined && (typeof ref$1 !== "string" || ref$1 === ""))
68839
68951
  throw new DocumentApiValidationError2("INVALID_TARGET", "ref must be a non-empty string.", {
68840
68952
  field: "ref",
@@ -69673,6 +69785,8 @@ function validateBlocksListInput2(input) {
69673
69785
  nodeType: nt
69674
69786
  });
69675
69787
  }
69788
+ if (input.includeText != null && typeof input.includeText !== "boolean")
69789
+ throw new DocumentApiValidationError2("INVALID_INPUT", "blocks.list includeText must be a boolean.", { fields: ["includeText"] });
69676
69790
  }
69677
69791
  function validateBlocksDeleteInput2(input) {
69678
69792
  if (!input || typeof input !== "object")
@@ -117089,7 +117203,7 @@ var isRegExp = (value) => {
117089
117203
  state.kern = kernNode.attributes["w:val"];
117090
117204
  }
117091
117205
  }, SuperConverter;
117092
- var init_SuperConverter_CWhofwLf_es = __esm(() => {
117206
+ var init_SuperConverter_w6yaFRT5_es = __esm(() => {
117093
117207
  init_rolldown_runtime_Bg48TavK_es();
117094
117208
  init_jszip_C49i9kUs_es();
117095
117209
  init_xml_js_CqGKpaft_es();
@@ -120363,8 +120477,8 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
120363
120477
  },
120364
120478
  "blocks.list": {
120365
120479
  memberPath: "blocks.list",
120366
- description: "List top-level blocks in document order with IDs, types, and text previews. Supports pagination via offset/limit and optional nodeType filtering.",
120367
- expectedResult: "Returns a BlocksListResult with total block count, an ordered array of block entries (ordinal, nodeId, nodeType, textPreview, isEmpty), and the current document revision.",
120480
+ description: "List top-level blocks in document order with IDs, types, text previews, and optional full text when includeText:true. Supports pagination via offset/limit and optional nodeType filtering.",
120481
+ expectedResult: "Returns a BlocksListResult with total block count, an ordered array of block entries (ordinal, nodeId, nodeType, textPreview, optional text, isEmpty), and the current document revision.",
120368
120482
  requiresDocumentContext: true,
120369
120483
  metadata: readOperation2({ throws: ["INVALID_INPUT"] }),
120370
120484
  referenceDocPath: "blocks/list.mdx",
@@ -128278,6 +128392,10 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
128278
128392
  type: "array",
128279
128393
  items: { enum: [...blockNodeTypeValues2] },
128280
128394
  description: "Filter by block types (e.g. ['paragraph', 'heading']). Omit for all types."
128395
+ },
128396
+ includeText: {
128397
+ type: "boolean",
128398
+ description: "When true, includes the full flattened block text in each block entry."
128281
128399
  }
128282
128400
  }), objectSchema2({
128283
128401
  total: { type: "number" },
@@ -128291,6 +128409,10 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
128291
128409
  },
128292
128410
  nodeType: { enum: [...blockNodeTypeValues2] },
128293
128411
  textPreview: { oneOf: [{ type: "string" }, { type: "null" }] },
128412
+ text: {
128413
+ oneOf: [{ type: "string" }, { type: "null" }],
128414
+ description: "Full flattened block text when requested with includeText."
128415
+ },
128294
128416
  isEmpty: { type: "boolean" },
128295
128417
  styleId: {
128296
128418
  oneOf: [{ type: "string" }, { type: "null" }],
@@ -129449,7 +129571,57 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
129449
129571
  const queryMatchMetaSchema = objectSchema2({ effectiveResolved: { type: "boolean" } }, ["effectiveResolved"]);
129450
129572
  return discoveryResultSchema2({ oneOf: [textMatchItemSchema, nodeMatchItemSchema] }, queryMatchMetaSchema);
129451
129573
  })(), { ...(() => {
129574
+ const selectWhereSchema = objectSchema2({
129575
+ by: {
129576
+ const: "select",
129577
+ type: "string"
129578
+ },
129579
+ select: { oneOf: [textSelectorSchema2, nodeSelectorSchema2] },
129580
+ within: blockNodeAddressSchema2,
129581
+ require: { enum: [
129582
+ "first",
129583
+ "exactlyOne",
129584
+ "all"
129585
+ ] }
129586
+ }, [
129587
+ "by",
129588
+ "select",
129589
+ "require"
129590
+ ]);
129591
+ const refWhereSchema = objectSchema2({
129592
+ by: {
129593
+ const: "ref",
129594
+ type: "string"
129595
+ },
129596
+ ref: { type: "string" },
129597
+ within: blockNodeAddressSchema2
129598
+ }, ["by", "ref"]);
129599
+ const targetWhereSchema = objectSchema2({
129600
+ by: {
129601
+ const: "target",
129602
+ type: "string"
129603
+ },
129604
+ target: selectionTargetSchema2
129605
+ }, ["by", "target"]);
129606
+ const blockWhereSchema = objectSchema2({
129607
+ by: {
129608
+ const: "block",
129609
+ type: "string"
129610
+ },
129611
+ nodeType: { enum: [...blockNodeTypeValues2] },
129612
+ nodeId: { type: "string" }
129613
+ }, [
129614
+ "by",
129615
+ "nodeType",
129616
+ "nodeId"
129617
+ ]);
129452
129618
  const stepWhereSchema = { oneOf: [
129619
+ selectWhereSchema,
129620
+ refWhereSchema,
129621
+ targetWhereSchema,
129622
+ blockWhereSchema
129623
+ ] };
129624
+ const insertWhereSchema = { oneOf: [
129453
129625
  objectSchema2({
129454
129626
  by: {
129455
129627
  const: "select",
@@ -129457,45 +129629,16 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
129457
129629
  },
129458
129630
  select: { oneOf: [textSelectorSchema2, nodeSelectorSchema2] },
129459
129631
  within: blockNodeAddressSchema2,
129460
- require: { enum: [
129461
- "first",
129462
- "exactlyOne",
129463
- "all"
129464
- ] }
129632
+ require: { enum: ["first", "exactlyOne"] }
129465
129633
  }, [
129466
129634
  "by",
129467
129635
  "select",
129468
129636
  "require"
129469
129637
  ]),
129470
- objectSchema2({
129471
- by: {
129472
- const: "ref",
129473
- type: "string"
129474
- },
129475
- ref: { type: "string" },
129476
- within: blockNodeAddressSchema2
129477
- }, ["by", "ref"]),
129478
- objectSchema2({
129479
- by: {
129480
- const: "target",
129481
- type: "string"
129482
- },
129483
- target: selectionTargetSchema2
129484
- }, ["by", "target"])
129638
+ refWhereSchema,
129639
+ targetWhereSchema,
129640
+ blockWhereSchema
129485
129641
  ] };
129486
- const insertWhereSchema = objectSchema2({
129487
- by: {
129488
- const: "select",
129489
- type: "string"
129490
- },
129491
- select: { oneOf: [textSelectorSchema2, nodeSelectorSchema2] },
129492
- within: blockNodeAddressSchema2,
129493
- require: { enum: ["first", "exactlyOne"] }
129494
- }, [
129495
- "by",
129496
- "select",
129497
- "require"
129498
- ]);
129499
129642
  const assertWhereSchema = objectSchema2({
129500
129643
  by: {
129501
129644
  const: "select",
@@ -129626,7 +129769,27 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
129626
129769
  type: "string"
129627
129770
  },
129628
129771
  where: stepWhereSchema,
129629
- args: objectSchema2({ inline: buildInlineRunPatchSchema2() }, ["inline"])
129772
+ args: {
129773
+ ...objectSchema2({
129774
+ inline: buildInlineRunPatchSchema2(),
129775
+ alignment: {
129776
+ type: "string",
129777
+ enum: [
129778
+ "left",
129779
+ "center",
129780
+ "right",
129781
+ "justify"
129782
+ ],
129783
+ description: "Set paragraph alignment on the target block(s). Can be combined with inline formatting in the same step."
129784
+ },
129785
+ scope: {
129786
+ type: "string",
129787
+ enum: ["match", "block"],
129788
+ description: 'When "block", inline formatting expands to cover the entire parent paragraph(s), not just the matched text. Use "block" after markdown inserts to format whole paragraphs with a short identifying pattern. Default: "match".'
129789
+ }
129790
+ }, []),
129791
+ minProperties: 1
129792
+ }
129630
129793
  }, [
129631
129794
  "id",
129632
129795
  "op",
@@ -131595,7 +131758,8 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
131595
131758
  "type",
131596
131759
  "target",
131597
131760
  "ref",
131598
- "in"
131761
+ "in",
131762
+ "placement"
131599
131763
  ]);
131600
131764
  STRUCTURAL_INSERT_ALLOWED_KEYS2 = new Set([
131601
131765
  "content",
@@ -154285,7 +154449,7 @@ var init_SuperConverter_CWhofwLf_es = __esm(() => {
154285
154449
  };
154286
154450
  });
154287
154451
 
154288
- // ../../packages/superdoc/dist/chunks/create-headless-toolbar-C2iuH72Y.es.js
154452
+ // ../../packages/superdoc/dist/chunks/create-headless-toolbar-CHK8yJic.es.js
154289
154453
  function parseSizeUnit(val = "0") {
154290
154454
  const length3 = val.toString() || "0";
154291
154455
  const value = Number.parseFloat(length3);
@@ -155896,8 +156060,8 @@ var CSS_DIMENSION_REGEX, DOM_SIZE_UNITS, Extension = class Extension2 {
155896
156060
  return false;
155897
156061
  return Boolean(checker(attrs));
155898
156062
  };
155899
- var init_create_headless_toolbar_C2iuH72Y_es = __esm(() => {
155900
- init_SuperConverter_CWhofwLf_es();
156063
+ var init_create_headless_toolbar_CHK8yJic_es = __esm(() => {
156064
+ init_SuperConverter_w6yaFRT5_es();
155901
156065
  init_constants_CGhJRd87_es();
155902
156066
  init_dist_B8HfvhaK_es();
155903
156067
  CSS_DIMENSION_REGEX = /[\d-.]+(\w+)$/;
@@ -204335,7 +204499,7 @@ var init_remark_gfm_eZN6yzWQ_es = __esm(() => {
204335
204499
  init_remark_gfm_BhnWr3yf_es();
204336
204500
  });
204337
204501
 
204338
- // ../../packages/superdoc/dist/chunks/src-BBT_7sHt.es.js
204502
+ // ../../packages/superdoc/dist/chunks/src-966rF_JP.es.js
204339
204503
  function deleteProps(obj, propOrProps) {
204340
204504
  const props = typeof propOrProps === "string" ? [propOrProps] : propOrProps;
204341
204505
  const removeNested = (target, pathParts, index2 = 0) => {
@@ -220808,6 +220972,9 @@ function isRefWhere(where) {
220808
220972
  function isTargetWhere(where) {
220809
220973
  return where.by === "target";
220810
220974
  }
220975
+ function isBlockWhere(where) {
220976
+ return where.by === "block";
220977
+ }
220811
220978
  function validateCreateStepPosition(step3) {
220812
220979
  const args$1 = step3.args;
220813
220980
  if (args$1.position === undefined || args$1.position === null) {
@@ -221237,6 +221404,67 @@ function resolveTargetWhereClause(editor, step3, where) {
221237
221404
  capturedStyle
221238
221405
  };
221239
221406
  }
221407
+ function buildWholeBlockRangeTarget(editor, step3, candidate) {
221408
+ if (isTextBlockCandidate(candidate)) {
221409
+ const blockText = getBlockText(editor, candidate);
221410
+ return buildRangeTarget(editor, step3, {
221411
+ blockId: candidate.nodeId,
221412
+ from: 0,
221413
+ to: blockText.length,
221414
+ text: blockText,
221415
+ marks: [],
221416
+ blockPos: candidate.pos
221417
+ }, candidate);
221418
+ }
221419
+ return {
221420
+ kind: "range",
221421
+ stepId: step3.id,
221422
+ op: step3.op,
221423
+ blockId: candidate.nodeId,
221424
+ from: 0,
221425
+ to: 0,
221426
+ absFrom: candidate.pos,
221427
+ absTo: candidate.end,
221428
+ text: "",
221429
+ marks: [],
221430
+ capturedStyle: undefined
221431
+ };
221432
+ }
221433
+ function resolveBlockWhereClause(editor, index2, step3, where) {
221434
+ const key2 = `${where.nodeType}:${where.nodeId}`;
221435
+ if (index2.ambiguous.has(key2))
221436
+ throw planError("AMBIGUOUS_TARGET", `block "${key2}" matched multiple blocks`, step3.id, {
221437
+ stepId: step3.id,
221438
+ stepOp: step3.op,
221439
+ whereBy: "block",
221440
+ target: {
221441
+ nodeType: where.nodeType,
221442
+ nodeId: where.nodeId
221443
+ }
221444
+ });
221445
+ const candidate = index2.byId.get(key2);
221446
+ if (!candidate)
221447
+ throw planError("TARGET_NOT_FOUND", `block "${key2}" was not found`, step3.id, {
221448
+ stepId: step3.id,
221449
+ stepOp: step3.op,
221450
+ whereBy: "block",
221451
+ target: {
221452
+ nodeType: where.nodeType,
221453
+ nodeId: where.nodeId
221454
+ }
221455
+ });
221456
+ if (!isCreateOp(step3.op) && !isTextBlockCandidate(candidate))
221457
+ throw planError("INVALID_TARGET", `step "${step3.op}" requires a text-bearing block for where.by "block", but "${where.nodeType}" is not text-bearing`, step3.id, {
221458
+ stepId: step3.id,
221459
+ stepOp: step3.op,
221460
+ whereBy: "block",
221461
+ target: {
221462
+ nodeType: where.nodeType,
221463
+ nodeId: where.nodeId
221464
+ }
221465
+ });
221466
+ return buildWholeBlockRangeTarget(editor, step3, candidate);
221467
+ }
221240
221468
  function captureStyleAtAbsoluteRange(editor, absFrom, absTo) {
221241
221469
  const doc$12 = editor.state.doc;
221242
221470
  const allRuns = [];
@@ -221273,9 +221501,12 @@ function resolveStepTargets(editor, index2, step3) {
221273
221501
  const refWhere = isRefWhere(where) ? where : undefined;
221274
221502
  const selectWhere = isSelectWhere(where) ? where : undefined;
221275
221503
  const targetWhere = isTargetWhere(where) ? where : undefined;
221504
+ const blockWhere = isBlockWhere(where) ? where : undefined;
221276
221505
  let targets;
221277
221506
  if (targetWhere)
221278
221507
  targets = [resolveTargetWhereClause(editor, step3, targetWhere)];
221508
+ else if (blockWhere)
221509
+ targets = [resolveBlockWhereClause(editor, index2, step3, blockWhere)];
221279
221510
  else if (refWhere)
221280
221511
  targets = resolveRefTargets(editor, index2, step3, refWhere);
221281
221512
  else if (selectWhere) {
@@ -221318,7 +221549,7 @@ function resolveStepTargets(editor, index2, step3) {
221318
221549
  return true;
221319
221550
  return t.blockId !== prev.blockId || t.from !== prev.from || t.to !== prev.to;
221320
221551
  });
221321
- if (targetWhere)
221552
+ if (targetWhere || blockWhere)
221322
221553
  return targets;
221323
221554
  if (refWhere) {
221324
221555
  if (targets.length === 0)
@@ -221344,22 +221575,33 @@ function buildMatchNotFoundDetails(step3, editor) {
221344
221575
  const within$1 = "within" in where ? where.within : undefined;
221345
221576
  let textPreview;
221346
221577
  if (editor) {
221347
- const docSize = editor.state.doc.content.size;
221348
- const len3 = Math.min(docSize, 300);
221349
- if (len3 > 0)
221578
+ const rawDocSize = editor.state.doc.content?.size;
221579
+ const len3 = typeof rawDocSize === "number" ? Math.min(rawDocSize, 300) : 300;
221580
+ if (len3 > 0 && typeof editor.state.doc.textBetween === "function")
221350
221581
  textPreview = editor.state.doc.textBetween(0, len3, `
221351
221582
  `, `
221352
221583
  `);
221353
221584
  }
221354
221585
  return {
221586
+ stepId: step3.id,
221587
+ stepOp: step3.op,
221588
+ whereBy: where.by,
221355
221589
  selectorType: select2?.type ?? "unknown",
221356
221590
  selectorPattern: select2?.pattern ?? "",
221357
221591
  selectorMode: select2?.mode ?? "contains",
221358
- searchScope: within$1?.blockId ?? "document",
221592
+ searchScope: within$1?.nodeId ? `${within$1.nodeType ?? "block"}:${within$1.nodeId}` : "document",
221359
221593
  candidateCount: 0,
221360
221594
  ...textPreview ? { textPreview } : {}
221361
221595
  };
221362
221596
  }
221597
+ function buildMatchNotFoundMessage(step3) {
221598
+ const where = step3.where;
221599
+ const select2 = "select" in where ? where.select : undefined;
221600
+ const within$1 = "within" in where ? where.within : undefined;
221601
+ const selectorDescription = select2?.type === "node" ? `node selector for "${select2.nodeType ?? "unknown"}"` : `text selector for "${select2?.pattern ?? ""}"`;
221602
+ const scopeDescription = within$1?.nodeId ? ` within ${within$1.nodeType ?? "block"}:${within$1.nodeId}` : "";
221603
+ return `step "${step3.id}" (${step3.op}) matched zero ranges for ${selectorDescription}${scopeDescription}`;
221604
+ }
221363
221605
  function applyCardinalityCheck(step3, targets, editor) {
221364
221606
  const where = step3.where;
221365
221607
  if (!("require" in where) || where.require === undefined)
@@ -221367,15 +221609,15 @@ function applyCardinalityCheck(step3, targets, editor) {
221367
221609
  const require$1 = where.require;
221368
221610
  if (require$1 === "first") {
221369
221611
  if (targets.length === 0)
221370
- throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step3.id, buildMatchNotFoundDetails(step3, editor));
221612
+ throw planError("MATCH_NOT_FOUND", buildMatchNotFoundMessage(step3), step3.id, buildMatchNotFoundDetails(step3, editor));
221371
221613
  } else if (require$1 === "exactlyOne") {
221372
221614
  if (targets.length === 0)
221373
- throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step3.id, buildMatchNotFoundDetails(step3, editor));
221615
+ throw planError("MATCH_NOT_FOUND", buildMatchNotFoundMessage(step3), step3.id, buildMatchNotFoundDetails(step3, editor));
221374
221616
  if (targets.length > 1)
221375
221617
  throw planError("AMBIGUOUS_MATCH", `selector matched ${targets.length} ranges, expected exactly one`, step3.id, { matchCount: targets.length });
221376
221618
  } else if (require$1 === "all") {
221377
221619
  if (targets.length === 0)
221378
- throw planError("MATCH_NOT_FOUND", "selector matched zero ranges", step3.id, buildMatchNotFoundDetails(step3, editor));
221620
+ throw planError("MATCH_NOT_FOUND", buildMatchNotFoundMessage(step3), step3.id, buildMatchNotFoundDetails(step3, editor));
221379
221621
  }
221380
221622
  }
221381
221623
  function normalizeOpForMatrix(op) {
@@ -221587,6 +221829,360 @@ function compilePlan(editor, steps) {
221587
221829
  compiledRevision
221588
221830
  };
221589
221831
  }
221832
+ function resolveParagraphBlock(editor, target) {
221833
+ const candidate = findBlockByIdStrict(getBlockIndex(editor), target);
221834
+ if (!PARAGRAPH_NODE_TYPES.has(candidate.nodeType))
221835
+ throw new DocumentApiAdapterError("INVALID_TARGET", `format.paragraph.* / styles.paragraph.* operations require a paragraph, heading, or listItem target. Got "${candidate.nodeType}".`, { nodeType: candidate.nodeType });
221836
+ return candidate;
221837
+ }
221838
+ function successResult(target) {
221839
+ return {
221840
+ success: true,
221841
+ target,
221842
+ resolution: { target }
221843
+ };
221844
+ }
221845
+ function noOpResult(operation) {
221846
+ return {
221847
+ success: false,
221848
+ failure: {
221849
+ code: "NO_OP",
221850
+ message: `${operation} produced no changes.`
221851
+ }
221852
+ };
221853
+ }
221854
+ function getPreservedCharacterStyleAttrs(mark2) {
221855
+ const styleId = mark2.attrs?.[TEXT_STYLE_CHARACTER_STYLE_ATTR];
221856
+ if (typeof styleId !== "string" || styleId.length === 0)
221857
+ return null;
221858
+ return { [TEXT_STYLE_CHARACTER_STYLE_ATTR]: styleId };
221859
+ }
221860
+ function hasTextStyleDirectFormatting(mark2) {
221861
+ return Object.entries(mark2.attrs ?? {}).some(([key2, value]) => key2 !== TEXT_STYLE_CHARACTER_STYLE_ATTR && value != null);
221862
+ }
221863
+ function clearTextStyleDirectFormatting(tr, from$1, to, mark2) {
221864
+ const preservedCharacterStyle = getPreservedCharacterStyleAttrs(mark2);
221865
+ const hadDirectFormatting = hasTextStyleDirectFormatting(mark2);
221866
+ if (!hadDirectFormatting && preservedCharacterStyle)
221867
+ return false;
221868
+ tr.removeMark?.(from$1, to, mark2);
221869
+ if (hadDirectFormatting && preservedCharacterStyle && mark2.type?.create && tr.addMark)
221870
+ tr.addMark(from$1, to, mark2.type.create(preservedCharacterStyle));
221871
+ return true;
221872
+ }
221873
+ function clearDirectFormattingInBlock(tr, pos, nodeSize2) {
221874
+ if (!tr.doc?.nodesBetween || !tr.removeMark || nodeSize2 <= 2)
221875
+ return false;
221876
+ let changed = false;
221877
+ tr.doc.nodesBetween(pos + 1, pos + nodeSize2 - 1, (node3, nodePos) => {
221878
+ if (!node3.isText || !Array.isArray(node3.marks) || node3.marks.length === 0 || typeof node3.nodeSize !== "number")
221879
+ return true;
221880
+ node3.marks.forEach((mark2) => {
221881
+ const markName = mark2?.type?.name;
221882
+ if (!markName || !DIRECT_FORMATTING_MARK_NAMES.has(markName))
221883
+ return;
221884
+ if (markName === "textStyle") {
221885
+ changed = clearTextStyleDirectFormatting(tr, nodePos, nodePos + node3.nodeSize, mark2) || changed;
221886
+ return;
221887
+ }
221888
+ tr.removeMark(nodePos, nodePos + node3.nodeSize, mark2);
221889
+ changed = true;
221890
+ });
221891
+ return true;
221892
+ });
221893
+ return changed;
221894
+ }
221895
+ function mutateParagraphProperties(editor, candidate, operation, target, transform, options, extras) {
221896
+ if (options?.dryRun)
221897
+ return successResult(target);
221898
+ if (executeDomainCommand(editor, () => {
221899
+ const node3 = editor.state.doc.nodeAt(candidate.pos);
221900
+ if (!node3)
221901
+ return false;
221902
+ const existing = node3.attrs.paragraphProperties ?? {};
221903
+ const updated = transform({ ...existing });
221904
+ if (JSON.stringify(existing) === JSON.stringify(updated))
221905
+ return false;
221906
+ const tr = editor.state.tr;
221907
+ if (extras?.clearDirectFormatting)
221908
+ clearDirectFormattingInBlock(tr, candidate.pos, node3.nodeSize);
221909
+ tr.setNodeMarkup(candidate.pos, undefined, {
221910
+ ...node3.attrs,
221911
+ paragraphProperties: updated
221912
+ });
221913
+ editor.dispatch(tr);
221914
+ clearIndexCache(editor);
221915
+ return true;
221916
+ }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
221917
+ return noOpResult(operation);
221918
+ return successResult(target);
221919
+ }
221920
+ function mergeDefinedFields(existing, patch3) {
221921
+ const result = { ...existing ?? {} };
221922
+ for (const [key2, value] of Object.entries(patch3))
221923
+ if (value !== undefined)
221924
+ result[key2] = value;
221925
+ return result;
221926
+ }
221927
+ function mergeIndentationFields(existing, patch3) {
221928
+ const result = mergeDefinedFields(existing, patch3);
221929
+ const firstLineWasUpdated = patch3.firstLine !== undefined;
221930
+ const hangingWasUpdated = patch3.hanging !== undefined;
221931
+ if (firstLineWasUpdated && !hangingWasUpdated)
221932
+ delete result.hanging;
221933
+ if (hangingWasUpdated && !firstLineWasUpdated)
221934
+ delete result.firstLine;
221935
+ return result;
221936
+ }
221937
+ function deleteKey(obj, key2) {
221938
+ const result = { ...obj };
221939
+ delete result[key2];
221940
+ return Object.keys(result).length > 0 ? result : undefined;
221941
+ }
221942
+ function addOrReplaceTabStop(existing, entry) {
221943
+ return [...(existing ?? []).filter((t) => t.tab.pos !== entry.tab.pos), entry].sort((a2, b$1) => a2.tab.pos - b$1.tab.pos);
221944
+ }
221945
+ function removeTabStop(existing, position4) {
221946
+ const filtered = (existing ?? []).filter((t) => t.tab.pos !== position4);
221947
+ return filtered.length > 0 ? filtered : undefined;
221948
+ }
221949
+ function paragraphsSetStyleWrapper(editor, input2, options) {
221950
+ rejectTrackedMode("styles.paragraph.setStyle", options);
221951
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "styles.paragraph.setStyle", input2.target, (pPr) => ({
221952
+ ...pPr,
221953
+ styleId: input2.styleId
221954
+ }), options, { clearDirectFormatting: true });
221955
+ }
221956
+ function paragraphsClearStyleWrapper(editor, input2, options) {
221957
+ rejectTrackedMode("styles.paragraph.clearStyle", options);
221958
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "styles.paragraph.clearStyle", input2.target, (pPr) => {
221959
+ const result = { ...pPr };
221960
+ delete result.styleId;
221961
+ return result;
221962
+ }, options);
221963
+ }
221964
+ function paragraphsResetDirectFormattingWrapper(editor, input2, options) {
221965
+ rejectTrackedMode("format.paragraph.resetDirectFormatting", options);
221966
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.resetDirectFormatting", input2.target, (pPr) => {
221967
+ const result = {};
221968
+ if (pPr.styleId !== undefined)
221969
+ result.styleId = pPr.styleId;
221970
+ if (pPr.numberingProperties !== undefined)
221971
+ result.numberingProperties = pPr.numberingProperties;
221972
+ if (pPr.sectPr !== undefined)
221973
+ result.sectPr = pPr.sectPr;
221974
+ return result;
221975
+ }, options);
221976
+ }
221977
+ function paragraphsSetAlignmentWrapper(editor, input2, options) {
221978
+ rejectTrackedMode("format.paragraph.setAlignment", options);
221979
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setAlignment", input2.target, (pPr) => ({
221980
+ ...pPr,
221981
+ justification: ALIGNMENT_TO_JUSTIFICATION[input2.alignment]
221982
+ }), options);
221983
+ }
221984
+ function paragraphsClearAlignmentWrapper(editor, input2, options) {
221985
+ rejectTrackedMode("format.paragraph.clearAlignment", options);
221986
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearAlignment", input2.target, (pPr) => {
221987
+ const result = { ...pPr };
221988
+ delete result.justification;
221989
+ return result;
221990
+ }, options);
221991
+ }
221992
+ function paragraphsSetIndentationWrapper(editor, input2, options) {
221993
+ rejectTrackedMode("format.paragraph.setIndentation", options);
221994
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setIndentation", input2.target, (pPr) => ({
221995
+ ...pPr,
221996
+ indent: mergeIndentationFields(pPr.indent, {
221997
+ left: input2.left,
221998
+ right: input2.right,
221999
+ firstLine: input2.firstLine,
222000
+ hanging: input2.hanging
222001
+ })
222002
+ }), options);
222003
+ }
222004
+ function paragraphsClearIndentationWrapper(editor, input2, options) {
222005
+ rejectTrackedMode("format.paragraph.clearIndentation", options);
222006
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearIndentation", input2.target, (pPr) => {
222007
+ const result = { ...pPr };
222008
+ delete result.indent;
222009
+ return result;
222010
+ }, options);
222011
+ }
222012
+ function paragraphsSetSpacingWrapper(editor, input2, options) {
222013
+ rejectTrackedMode("format.paragraph.setSpacing", options);
222014
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setSpacing", input2.target, (pPr) => ({
222015
+ ...pPr,
222016
+ spacing: mergeDefinedFields(pPr.spacing, {
222017
+ before: input2.before,
222018
+ after: input2.after,
222019
+ line: input2.line,
222020
+ lineRule: input2.lineRule
222021
+ })
222022
+ }), options);
222023
+ }
222024
+ function paragraphsClearSpacingWrapper(editor, input2, options) {
222025
+ rejectTrackedMode("format.paragraph.clearSpacing", options);
222026
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearSpacing", input2.target, (pPr) => {
222027
+ const result = { ...pPr };
222028
+ delete result.spacing;
222029
+ return result;
222030
+ }, options);
222031
+ }
222032
+ function paragraphsSetKeepOptionsWrapper(editor, input2, options) {
222033
+ rejectTrackedMode("format.paragraph.setKeepOptions", options);
222034
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setKeepOptions", input2.target, (pPr) => {
222035
+ const result = { ...pPr };
222036
+ if (input2.keepNext !== undefined)
222037
+ result.keepNext = input2.keepNext;
222038
+ if (input2.keepLines !== undefined)
222039
+ result.keepLines = input2.keepLines;
222040
+ if (input2.widowControl !== undefined)
222041
+ result.widowControl = input2.widowControl;
222042
+ return result;
222043
+ }, options);
222044
+ }
222045
+ function paragraphsSetOutlineLevelWrapper(editor, input2, options) {
222046
+ rejectTrackedMode("format.paragraph.setOutlineLevel", options);
222047
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setOutlineLevel", input2.target, (pPr) => {
222048
+ if (input2.outlineLevel === null) {
222049
+ const result = { ...pPr };
222050
+ delete result.outlineLvl;
222051
+ return result;
222052
+ }
222053
+ return {
222054
+ ...pPr,
222055
+ outlineLvl: input2.outlineLevel
222056
+ };
222057
+ }, options);
222058
+ }
222059
+ function paragraphsSetFlowOptionsWrapper(editor, input2, options) {
222060
+ rejectTrackedMode("format.paragraph.setFlowOptions", options);
222061
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setFlowOptions", input2.target, (pPr) => {
222062
+ const result = { ...pPr };
222063
+ if (input2.contextualSpacing !== undefined)
222064
+ result.contextualSpacing = input2.contextualSpacing;
222065
+ if (input2.pageBreakBefore !== undefined)
222066
+ result.pageBreakBefore = input2.pageBreakBefore;
222067
+ if (input2.suppressAutoHyphens !== undefined)
222068
+ result.suppressAutoHyphens = input2.suppressAutoHyphens;
222069
+ return result;
222070
+ }, options);
222071
+ }
222072
+ function paragraphsSetTabStopWrapper(editor, input2, options) {
222073
+ rejectTrackedMode("format.paragraph.setTabStop", options);
222074
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setTabStop", input2.target, (pPr) => {
222075
+ const entry = { tab: {
222076
+ pos: input2.position,
222077
+ tabType: input2.alignment,
222078
+ ...input2.leader !== undefined && { leader: input2.leader }
222079
+ } };
222080
+ return {
222081
+ ...pPr,
222082
+ tabStops: addOrReplaceTabStop(pPr.tabStops, entry)
222083
+ };
222084
+ }, options);
222085
+ }
222086
+ function paragraphsClearTabStopWrapper(editor, input2, options) {
222087
+ rejectTrackedMode("format.paragraph.clearTabStop", options);
222088
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearTabStop", input2.target, (pPr) => {
222089
+ const updated = removeTabStop(pPr.tabStops, input2.position);
222090
+ if (updated === undefined) {
222091
+ const result = { ...pPr };
222092
+ delete result.tabStops;
222093
+ return result;
222094
+ }
222095
+ return {
222096
+ ...pPr,
222097
+ tabStops: updated
222098
+ };
222099
+ }, options);
222100
+ }
222101
+ function paragraphsClearAllTabStopsWrapper(editor, input2, options) {
222102
+ rejectTrackedMode("format.paragraph.clearAllTabStops", options);
222103
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearAllTabStops", input2.target, (pPr) => {
222104
+ const result = { ...pPr };
222105
+ delete result.tabStops;
222106
+ return result;
222107
+ }, options);
222108
+ }
222109
+ function paragraphsSetBorderWrapper(editor, input2, options) {
222110
+ rejectTrackedMode("format.paragraph.setBorder", options);
222111
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setBorder", input2.target, (pPr) => {
222112
+ const existing = pPr.borders ?? {};
222113
+ const border = { val: input2.style };
222114
+ if (input2.color !== undefined)
222115
+ border.color = input2.color;
222116
+ if (input2.size !== undefined)
222117
+ border.size = input2.size;
222118
+ if (input2.space !== undefined)
222119
+ border.space = input2.space;
222120
+ return {
222121
+ ...pPr,
222122
+ borders: {
222123
+ ...existing,
222124
+ [input2.side]: border
222125
+ }
222126
+ };
222127
+ }, options);
222128
+ }
222129
+ function paragraphsClearBorderWrapper(editor, input2, options) {
222130
+ rejectTrackedMode("format.paragraph.clearBorder", options);
222131
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearBorder", input2.target, (pPr) => {
222132
+ if (input2.side === "all") {
222133
+ const result = { ...pPr };
222134
+ delete result.borders;
222135
+ return result;
222136
+ }
222137
+ const updated = deleteKey(pPr.borders ?? {}, input2.side);
222138
+ if (updated === undefined) {
222139
+ const result = { ...pPr };
222140
+ delete result.borders;
222141
+ return result;
222142
+ }
222143
+ return {
222144
+ ...pPr,
222145
+ borders: updated
222146
+ };
222147
+ }, options);
222148
+ }
222149
+ function paragraphsSetShadingWrapper(editor, input2, options) {
222150
+ rejectTrackedMode("format.paragraph.setShading", options);
222151
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setShading", input2.target, (pPr) => ({
222152
+ ...pPr,
222153
+ shading: mergeDefinedFields(pPr.shading, {
222154
+ fill: input2.fill,
222155
+ color: input2.color,
222156
+ val: input2.pattern
222157
+ })
222158
+ }), options);
222159
+ }
222160
+ function paragraphsClearShadingWrapper(editor, input2, options) {
222161
+ rejectTrackedMode("format.paragraph.clearShading", options);
222162
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearShading", input2.target, (pPr) => {
222163
+ const result = { ...pPr };
222164
+ delete result.shading;
222165
+ return result;
222166
+ }, options);
222167
+ }
222168
+ function paragraphsSetDirectionWrapper(editor, input2, options) {
222169
+ rejectTrackedMode("format.paragraph.setDirection", options);
222170
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setDirection", input2.target, (pPr) => {
222171
+ const result = { ...pPr };
222172
+ result.rightToLeft = input2.direction === "rtl";
222173
+ if (input2.alignmentPolicy === "matchDirection")
222174
+ result.justification = input2.direction === "rtl" ? "right" : "left";
222175
+ return result;
222176
+ }, options);
222177
+ }
222178
+ function paragraphsClearDirectionWrapper(editor, input2, options) {
222179
+ rejectTrackedMode("format.paragraph.clearDirection", options);
222180
+ return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearDirection", input2.target, (pPr) => {
222181
+ const result = { ...pPr };
222182
+ delete result.rightToLeft;
222183
+ return result;
222184
+ }, options);
222185
+ }
221590
222186
  function resolveBlockInsertionPos(editor, anchorBlockId, position4, stepId) {
221591
222187
  const candidate = getBlockIndex(editor).candidates.find((c) => c.nodeId === anchorBlockId);
221592
222188
  if (!candidate)
@@ -222168,8 +222764,59 @@ function executeTextDelete(_editor, tr, target, _step, mapping) {
222168
222764
  tr.delete(absFrom, absTo);
222169
222765
  return { changed: true };
222170
222766
  }
222767
+ function applyAlignmentToRange(tr, absFrom, absTo, alignment$1) {
222768
+ const justification = ALIGNMENT_TO_JUSTIFICATION[alignment$1];
222769
+ if (!justification)
222770
+ return false;
222771
+ let changed = false;
222772
+ tr.doc.nodesBetween(absFrom, absTo, (node3, pos) => {
222773
+ if (!node3.isTextblock)
222774
+ return;
222775
+ const existing = node3.attrs.paragraphProperties;
222776
+ if (existing?.justification === justification)
222777
+ return;
222778
+ const updated = {
222779
+ ...existing ?? {},
222780
+ justification
222781
+ };
222782
+ tr.setNodeMarkup(pos, undefined, {
222783
+ ...node3.attrs,
222784
+ paragraphProperties: updated
222785
+ });
222786
+ changed = true;
222787
+ });
222788
+ return changed;
222789
+ }
222790
+ function expandToBlockBoundaries$1(doc$12, from$1, to) {
222791
+ let expandedFrom = from$1;
222792
+ let expandedTo = to;
222793
+ doc$12.nodesBetween(from$1, to, (node3, pos) => {
222794
+ if (!node3.isTextblock)
222795
+ return;
222796
+ const blockContentStart = pos + 1;
222797
+ const blockContentEnd = pos + node3.nodeSize - 1;
222798
+ expandedFrom = Math.min(expandedFrom, blockContentStart);
222799
+ expandedTo = Math.max(expandedTo, blockContentEnd);
222800
+ });
222801
+ return {
222802
+ from: expandedFrom,
222803
+ to: expandedTo
222804
+ };
222805
+ }
222171
222806
  function executeStyleApply3(editor, tr, target, step3, mapping) {
222172
- return { changed: applyInlinePatchToRange(editor, tr, mapping.map(target.absFrom), mapping.map(target.absTo), step3.args.inline) };
222807
+ let absFrom = mapping.map(target.absFrom);
222808
+ let absTo = mapping.map(target.absTo);
222809
+ if (step3.args.scope === "block") {
222810
+ const expanded = expandToBlockBoundaries$1(tr.doc, absFrom, absTo);
222811
+ absFrom = expanded.from;
222812
+ absTo = expanded.to;
222813
+ }
222814
+ let changed = false;
222815
+ if (step3.args.inline)
222816
+ changed = applyInlinePatchToRange(editor, tr, absFrom, absTo, step3.args.inline) || changed;
222817
+ if (step3.args.alignment)
222818
+ changed = applyAlignmentToRange(tr, absFrom, absTo, step3.args.alignment) || changed;
222819
+ return { changed };
222173
222820
  }
222174
222821
  function validateMappedSpanContiguity(target, mapping, stepId) {
222175
222822
  let lastMappedEnd = -1;
@@ -222237,7 +222884,19 @@ function executeSpanStyleApply(editor, tr, target, step3, mapping) {
222237
222884
  validateMappedSpanContiguity(target, mapping, step3.id);
222238
222885
  const firstSeg = target.segments[0];
222239
222886
  const lastSeg = target.segments[target.segments.length - 1];
222240
- return { changed: applyInlinePatchToRange(editor, tr, mapping.map(firstSeg.absFrom, 1), mapping.map(lastSeg.absTo, -1), step3.args.inline) };
222887
+ let absFrom = mapping.map(firstSeg.absFrom, 1);
222888
+ let absTo = mapping.map(lastSeg.absTo, -1);
222889
+ if (step3.args.scope === "block") {
222890
+ const expanded = expandToBlockBoundaries$1(tr.doc, absFrom, absTo);
222891
+ absFrom = expanded.from;
222892
+ absTo = expanded.to;
222893
+ }
222894
+ let changed = false;
222895
+ if (step3.args.inline)
222896
+ changed = applyInlinePatchToRange(editor, tr, absFrom, absTo, step3.args.inline) || changed;
222897
+ if (step3.args.alignment)
222898
+ changed = applyAlignmentToRange(tr, absFrom, absTo, step3.args.alignment) || changed;
222899
+ return { changed };
222241
222900
  }
222242
222901
  function getReplacementText(replacement) {
222243
222902
  if (replacement.blocks !== undefined)
@@ -224392,14 +225051,44 @@ function insertStructuredInner(editor, input2, options) {
224392
225051
  if (isStructuralInsertInput2(input2))
224393
225052
  return executeStructuralInsertWrapper(editor, input2, options);
224394
225053
  const contentType = input2.type ?? "text";
224395
- const { value, target, ref: ref$1 } = input2;
225054
+ const { value, ref: ref$1 } = input2;
225055
+ const rawTarget = input2.target;
225056
+ const placement2 = input2.placement;
224396
225057
  if ((options?.changeMode ?? "direct") === "tracked")
224397
225058
  throw new DocumentApiAdapterError("CAPABILITY_UNAVAILABLE", `Tracked mode is not supported for type: '${contentType}' insert operations.`);
224398
225059
  let resolvedRange;
224399
225060
  let effectiveTarget;
224400
225061
  if (ref$1 !== undefined && ref$1 === "")
224401
225062
  throw new DocumentApiAdapterError("INVALID_TARGET", "ref must be a non-empty string.", { ref: ref$1 });
224402
- if (target) {
225063
+ if (rawTarget && typeof rawTarget === "object" && "kind" in rawTarget && rawTarget.kind === "block") {
225064
+ const blockTarget = rawTarget;
225065
+ let resolved;
225066
+ try {
225067
+ resolved = resolveInsertTarget(editor, blockTarget);
225068
+ } catch (err) {
225069
+ if (err instanceof DocumentApiAdapterError)
225070
+ throw err;
225071
+ throw new DocumentApiAdapterError("TARGET_NOT_FOUND", `Cannot resolve insert target for block "${blockTarget.nodeId}".`);
225072
+ }
225073
+ let insertPos;
225074
+ if (resolved.targetNode && resolved.targetNodePos !== undefined)
225075
+ insertPos = resolvePlacement(editor.state.doc, resolved.targetNodePos, resolved.targetNode, placement2);
225076
+ else
225077
+ insertPos = resolved.insertPos;
225078
+ resolvedRange = {
225079
+ from: insertPos,
225080
+ to: insertPos
225081
+ };
225082
+ effectiveTarget = {
225083
+ kind: "text",
225084
+ blockId: blockTarget.nodeId,
225085
+ range: {
225086
+ start: 0,
225087
+ end: 0
225088
+ }
225089
+ };
225090
+ } else if (rawTarget) {
225091
+ const target = rawTarget;
224403
225092
  const resolved = resolveSelectionTarget(editor, target);
224404
225093
  resolvedRange = {
224405
225094
  from: resolved.absFrom,
@@ -224484,7 +225173,7 @@ function insertStructuredInner(editor, input2, options) {
224484
225173
  text: readTextAtResolvedRange(editor, resolvedRange)
224485
225174
  });
224486
225175
  const { from: from$1, to } = resolvedRange;
224487
- if (target && from$1 !== to)
225176
+ if (rawTarget && from$1 !== to)
224488
225177
  return {
224489
225178
  success: false,
224490
225179
  resolution,
@@ -225080,7 +225769,45 @@ function extractTextPreview(node3) {
225080
225769
  return text5;
225081
225770
  return text5.slice(0, TEXT_PREVIEW_MAX_LENGTH);
225082
225771
  }
225083
- function extractBlockFormatting(node3) {
225772
+ function extractBlockText$1(node3) {
225773
+ if (!node3.isTextblock)
225774
+ return null;
225775
+ return node3.textContent;
225776
+ }
225777
+ function buildStyleContext(editor) {
225778
+ const styleProps = readTranslatedLinkedStyles(editor);
225779
+ if (!styleProps)
225780
+ return null;
225781
+ return {
225782
+ styles: styleProps.styles ?? {},
225783
+ docDefaultsFontSizeHp: typeof styleProps.docDefaults?.runProperties?.fontSize === "number" ? styleProps.docDefaults.runProperties.fontSize : undefined
225784
+ };
225785
+ }
225786
+ function resolveBlockFontSizePt(styleCtx, styleId) {
225787
+ if (!styleCtx)
225788
+ return OOXML_DEFAULT_FONT_SIZE_PT;
225789
+ let currentId = styleId ?? "Normal";
225790
+ const visited = /* @__PURE__ */ new Set;
225791
+ while (currentId && !visited.has(currentId)) {
225792
+ visited.add(currentId);
225793
+ const style2 = styleCtx.styles[currentId];
225794
+ if (!style2)
225795
+ break;
225796
+ const fs = style2.runProperties?.fontSize;
225797
+ if (typeof fs === "number")
225798
+ return fs / 2;
225799
+ currentId = style2.basedOn ?? "";
225800
+ }
225801
+ if (!visited.has("Normal")) {
225802
+ const fs = styleCtx.styles["Normal"]?.runProperties?.fontSize;
225803
+ if (typeof fs === "number")
225804
+ return fs / 2;
225805
+ }
225806
+ if (typeof styleCtx.docDefaultsFontSizeHp === "number")
225807
+ return styleCtx.docDefaultsFontSizeHp / 2;
225808
+ return OOXML_DEFAULT_FONT_SIZE_PT;
225809
+ }
225810
+ function extractBlockFormatting(node3, styleCtx) {
225084
225811
  const pProps = node3.attrs.paragraphProperties;
225085
225812
  const styleId = pProps?.styleId ?? null;
225086
225813
  let fontFamily;
@@ -225126,7 +225853,7 @@ function extractBlockFormatting(node3) {
225126
225853
  return {
225127
225854
  ...styleId ? { styleId } : {},
225128
225855
  ...fontFamily ? { fontFamily } : {},
225129
- ...fontSize !== undefined ? { fontSize } : {},
225856
+ ...fontSize !== undefined ? { fontSize } : styleCtx ? { fontSize: resolveBlockFontSizePt(styleCtx, styleId) } : {},
225130
225857
  ...bold2 ? { bold: bold2 } : {},
225131
225858
  ...underline ? { underline } : {},
225132
225859
  ...color2 ? { color: color2 } : {},
@@ -225198,10 +225925,12 @@ function blocksListWrapper(editor, input2) {
225198
225925
  const limit = input2?.limit ?? total;
225199
225926
  const paged = filtered.slice(offset$1, offset$1 + limit);
225200
225927
  const rev = getRevision(editor);
225928
+ const styleCtx = buildStyleContext(editor);
225201
225929
  return {
225202
225930
  total,
225203
225931
  blocks: paged.map((candidate, i4) => {
225204
225932
  const textLength = computeTextContentLength(candidate.node);
225933
+ const fullText = input2?.includeText ? extractBlockText$1(candidate.node) : undefined;
225205
225934
  const ref$1 = textLength > 0 ? encodeV4Ref({
225206
225935
  v: 4,
225207
225936
  rev,
@@ -225220,8 +225949,9 @@ function blocksListWrapper(editor, input2) {
225220
225949
  nodeId: candidate.nodeId,
225221
225950
  nodeType: candidate.nodeType,
225222
225951
  textPreview: extractTextPreview(candidate.node),
225952
+ ...fullText !== undefined ? { text: fullText } : {},
225223
225953
  isEmpty: textLength === 0,
225224
- ...extractBlockFormatting(candidate.node),
225954
+ ...extractBlockFormatting(candidate.node, styleCtx),
225225
225955
  ...ref$1 ? { ref: ref$1 } : {}
225226
225956
  };
225227
225957
  }),
@@ -226844,360 +227574,6 @@ function stylesApplyAdapter(editor, input2, options) {
226844
227574
  }
226845
227575
  }).result;
226846
227576
  }
226847
- function resolveParagraphBlock(editor, target) {
226848
- const candidate = findBlockByIdStrict(getBlockIndex(editor), target);
226849
- if (!PARAGRAPH_NODE_TYPES.has(candidate.nodeType))
226850
- throw new DocumentApiAdapterError("INVALID_TARGET", `format.paragraph.* / styles.paragraph.* operations require a paragraph, heading, or listItem target. Got "${candidate.nodeType}".`, { nodeType: candidate.nodeType });
226851
- return candidate;
226852
- }
226853
- function successResult(target) {
226854
- return {
226855
- success: true,
226856
- target,
226857
- resolution: { target }
226858
- };
226859
- }
226860
- function noOpResult(operation) {
226861
- return {
226862
- success: false,
226863
- failure: {
226864
- code: "NO_OP",
226865
- message: `${operation} produced no changes.`
226866
- }
226867
- };
226868
- }
226869
- function getPreservedCharacterStyleAttrs(mark2) {
226870
- const styleId = mark2.attrs?.[TEXT_STYLE_CHARACTER_STYLE_ATTR];
226871
- if (typeof styleId !== "string" || styleId.length === 0)
226872
- return null;
226873
- return { [TEXT_STYLE_CHARACTER_STYLE_ATTR]: styleId };
226874
- }
226875
- function hasTextStyleDirectFormatting(mark2) {
226876
- return Object.entries(mark2.attrs ?? {}).some(([key2, value]) => key2 !== TEXT_STYLE_CHARACTER_STYLE_ATTR && value != null);
226877
- }
226878
- function clearTextStyleDirectFormatting(tr, from$1, to, mark2) {
226879
- const preservedCharacterStyle = getPreservedCharacterStyleAttrs(mark2);
226880
- const hadDirectFormatting = hasTextStyleDirectFormatting(mark2);
226881
- if (!hadDirectFormatting && preservedCharacterStyle)
226882
- return false;
226883
- tr.removeMark?.(from$1, to, mark2);
226884
- if (hadDirectFormatting && preservedCharacterStyle && mark2.type?.create && tr.addMark)
226885
- tr.addMark(from$1, to, mark2.type.create(preservedCharacterStyle));
226886
- return true;
226887
- }
226888
- function clearDirectFormattingInBlock(tr, pos, nodeSize2) {
226889
- if (!tr.doc?.nodesBetween || !tr.removeMark || nodeSize2 <= 2)
226890
- return false;
226891
- let changed = false;
226892
- tr.doc.nodesBetween(pos + 1, pos + nodeSize2 - 1, (node3, nodePos) => {
226893
- if (!node3.isText || !Array.isArray(node3.marks) || node3.marks.length === 0 || typeof node3.nodeSize !== "number")
226894
- return true;
226895
- node3.marks.forEach((mark2) => {
226896
- const markName = mark2?.type?.name;
226897
- if (!markName || !DIRECT_FORMATTING_MARK_NAMES.has(markName))
226898
- return;
226899
- if (markName === "textStyle") {
226900
- changed = clearTextStyleDirectFormatting(tr, nodePos, nodePos + node3.nodeSize, mark2) || changed;
226901
- return;
226902
- }
226903
- tr.removeMark(nodePos, nodePos + node3.nodeSize, mark2);
226904
- changed = true;
226905
- });
226906
- return true;
226907
- });
226908
- return changed;
226909
- }
226910
- function mutateParagraphProperties(editor, candidate, operation, target, transform, options, extras) {
226911
- if (options?.dryRun)
226912
- return successResult(target);
226913
- if (executeDomainCommand(editor, () => {
226914
- const node3 = editor.state.doc.nodeAt(candidate.pos);
226915
- if (!node3)
226916
- return false;
226917
- const existing = node3.attrs.paragraphProperties ?? {};
226918
- const updated = transform({ ...existing });
226919
- if (JSON.stringify(existing) === JSON.stringify(updated))
226920
- return false;
226921
- const tr = editor.state.tr;
226922
- if (extras?.clearDirectFormatting)
226923
- clearDirectFormattingInBlock(tr, candidate.pos, node3.nodeSize);
226924
- tr.setNodeMarkup(candidate.pos, undefined, {
226925
- ...node3.attrs,
226926
- paragraphProperties: updated
226927
- });
226928
- editor.dispatch(tr);
226929
- clearIndexCache(editor);
226930
- return true;
226931
- }, { expectedRevision: options?.expectedRevision }).steps[0]?.effect !== "changed")
226932
- return noOpResult(operation);
226933
- return successResult(target);
226934
- }
226935
- function mergeDefinedFields(existing, patch3) {
226936
- const result = { ...existing ?? {} };
226937
- for (const [key2, value] of Object.entries(patch3))
226938
- if (value !== undefined)
226939
- result[key2] = value;
226940
- return result;
226941
- }
226942
- function mergeIndentationFields(existing, patch3) {
226943
- const result = mergeDefinedFields(existing, patch3);
226944
- const firstLineWasUpdated = patch3.firstLine !== undefined;
226945
- const hangingWasUpdated = patch3.hanging !== undefined;
226946
- if (firstLineWasUpdated && !hangingWasUpdated)
226947
- delete result.hanging;
226948
- if (hangingWasUpdated && !firstLineWasUpdated)
226949
- delete result.firstLine;
226950
- return result;
226951
- }
226952
- function deleteKey(obj, key2) {
226953
- const result = { ...obj };
226954
- delete result[key2];
226955
- return Object.keys(result).length > 0 ? result : undefined;
226956
- }
226957
- function addOrReplaceTabStop(existing, entry) {
226958
- return [...(existing ?? []).filter((t) => t.tab.pos !== entry.tab.pos), entry].sort((a2, b$1) => a2.tab.pos - b$1.tab.pos);
226959
- }
226960
- function removeTabStop(existing, position4) {
226961
- const filtered = (existing ?? []).filter((t) => t.tab.pos !== position4);
226962
- return filtered.length > 0 ? filtered : undefined;
226963
- }
226964
- function paragraphsSetStyleWrapper(editor, input2, options) {
226965
- rejectTrackedMode("styles.paragraph.setStyle", options);
226966
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "styles.paragraph.setStyle", input2.target, (pPr) => ({
226967
- ...pPr,
226968
- styleId: input2.styleId
226969
- }), options, { clearDirectFormatting: true });
226970
- }
226971
- function paragraphsClearStyleWrapper(editor, input2, options) {
226972
- rejectTrackedMode("styles.paragraph.clearStyle", options);
226973
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "styles.paragraph.clearStyle", input2.target, (pPr) => {
226974
- const result = { ...pPr };
226975
- delete result.styleId;
226976
- return result;
226977
- }, options);
226978
- }
226979
- function paragraphsResetDirectFormattingWrapper(editor, input2, options) {
226980
- rejectTrackedMode("format.paragraph.resetDirectFormatting", options);
226981
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.resetDirectFormatting", input2.target, (pPr) => {
226982
- const result = {};
226983
- if (pPr.styleId !== undefined)
226984
- result.styleId = pPr.styleId;
226985
- if (pPr.numberingProperties !== undefined)
226986
- result.numberingProperties = pPr.numberingProperties;
226987
- if (pPr.sectPr !== undefined)
226988
- result.sectPr = pPr.sectPr;
226989
- return result;
226990
- }, options);
226991
- }
226992
- function paragraphsSetAlignmentWrapper(editor, input2, options) {
226993
- rejectTrackedMode("format.paragraph.setAlignment", options);
226994
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setAlignment", input2.target, (pPr) => ({
226995
- ...pPr,
226996
- justification: ALIGNMENT_TO_JUSTIFICATION[input2.alignment]
226997
- }), options);
226998
- }
226999
- function paragraphsClearAlignmentWrapper(editor, input2, options) {
227000
- rejectTrackedMode("format.paragraph.clearAlignment", options);
227001
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearAlignment", input2.target, (pPr) => {
227002
- const result = { ...pPr };
227003
- delete result.justification;
227004
- return result;
227005
- }, options);
227006
- }
227007
- function paragraphsSetIndentationWrapper(editor, input2, options) {
227008
- rejectTrackedMode("format.paragraph.setIndentation", options);
227009
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setIndentation", input2.target, (pPr) => ({
227010
- ...pPr,
227011
- indent: mergeIndentationFields(pPr.indent, {
227012
- left: input2.left,
227013
- right: input2.right,
227014
- firstLine: input2.firstLine,
227015
- hanging: input2.hanging
227016
- })
227017
- }), options);
227018
- }
227019
- function paragraphsClearIndentationWrapper(editor, input2, options) {
227020
- rejectTrackedMode("format.paragraph.clearIndentation", options);
227021
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearIndentation", input2.target, (pPr) => {
227022
- const result = { ...pPr };
227023
- delete result.indent;
227024
- return result;
227025
- }, options);
227026
- }
227027
- function paragraphsSetSpacingWrapper(editor, input2, options) {
227028
- rejectTrackedMode("format.paragraph.setSpacing", options);
227029
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setSpacing", input2.target, (pPr) => ({
227030
- ...pPr,
227031
- spacing: mergeDefinedFields(pPr.spacing, {
227032
- before: input2.before,
227033
- after: input2.after,
227034
- line: input2.line,
227035
- lineRule: input2.lineRule
227036
- })
227037
- }), options);
227038
- }
227039
- function paragraphsClearSpacingWrapper(editor, input2, options) {
227040
- rejectTrackedMode("format.paragraph.clearSpacing", options);
227041
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearSpacing", input2.target, (pPr) => {
227042
- const result = { ...pPr };
227043
- delete result.spacing;
227044
- return result;
227045
- }, options);
227046
- }
227047
- function paragraphsSetKeepOptionsWrapper(editor, input2, options) {
227048
- rejectTrackedMode("format.paragraph.setKeepOptions", options);
227049
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setKeepOptions", input2.target, (pPr) => {
227050
- const result = { ...pPr };
227051
- if (input2.keepNext !== undefined)
227052
- result.keepNext = input2.keepNext;
227053
- if (input2.keepLines !== undefined)
227054
- result.keepLines = input2.keepLines;
227055
- if (input2.widowControl !== undefined)
227056
- result.widowControl = input2.widowControl;
227057
- return result;
227058
- }, options);
227059
- }
227060
- function paragraphsSetOutlineLevelWrapper(editor, input2, options) {
227061
- rejectTrackedMode("format.paragraph.setOutlineLevel", options);
227062
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setOutlineLevel", input2.target, (pPr) => {
227063
- if (input2.outlineLevel === null) {
227064
- const result = { ...pPr };
227065
- delete result.outlineLvl;
227066
- return result;
227067
- }
227068
- return {
227069
- ...pPr,
227070
- outlineLvl: input2.outlineLevel
227071
- };
227072
- }, options);
227073
- }
227074
- function paragraphsSetFlowOptionsWrapper(editor, input2, options) {
227075
- rejectTrackedMode("format.paragraph.setFlowOptions", options);
227076
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setFlowOptions", input2.target, (pPr) => {
227077
- const result = { ...pPr };
227078
- if (input2.contextualSpacing !== undefined)
227079
- result.contextualSpacing = input2.contextualSpacing;
227080
- if (input2.pageBreakBefore !== undefined)
227081
- result.pageBreakBefore = input2.pageBreakBefore;
227082
- if (input2.suppressAutoHyphens !== undefined)
227083
- result.suppressAutoHyphens = input2.suppressAutoHyphens;
227084
- return result;
227085
- }, options);
227086
- }
227087
- function paragraphsSetTabStopWrapper(editor, input2, options) {
227088
- rejectTrackedMode("format.paragraph.setTabStop", options);
227089
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setTabStop", input2.target, (pPr) => {
227090
- const entry = { tab: {
227091
- pos: input2.position,
227092
- tabType: input2.alignment,
227093
- ...input2.leader !== undefined && { leader: input2.leader }
227094
- } };
227095
- return {
227096
- ...pPr,
227097
- tabStops: addOrReplaceTabStop(pPr.tabStops, entry)
227098
- };
227099
- }, options);
227100
- }
227101
- function paragraphsClearTabStopWrapper(editor, input2, options) {
227102
- rejectTrackedMode("format.paragraph.clearTabStop", options);
227103
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearTabStop", input2.target, (pPr) => {
227104
- const updated = removeTabStop(pPr.tabStops, input2.position);
227105
- if (updated === undefined) {
227106
- const result = { ...pPr };
227107
- delete result.tabStops;
227108
- return result;
227109
- }
227110
- return {
227111
- ...pPr,
227112
- tabStops: updated
227113
- };
227114
- }, options);
227115
- }
227116
- function paragraphsClearAllTabStopsWrapper(editor, input2, options) {
227117
- rejectTrackedMode("format.paragraph.clearAllTabStops", options);
227118
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearAllTabStops", input2.target, (pPr) => {
227119
- const result = { ...pPr };
227120
- delete result.tabStops;
227121
- return result;
227122
- }, options);
227123
- }
227124
- function paragraphsSetBorderWrapper(editor, input2, options) {
227125
- rejectTrackedMode("format.paragraph.setBorder", options);
227126
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setBorder", input2.target, (pPr) => {
227127
- const existing = pPr.borders ?? {};
227128
- const border = { val: input2.style };
227129
- if (input2.color !== undefined)
227130
- border.color = input2.color;
227131
- if (input2.size !== undefined)
227132
- border.size = input2.size;
227133
- if (input2.space !== undefined)
227134
- border.space = input2.space;
227135
- return {
227136
- ...pPr,
227137
- borders: {
227138
- ...existing,
227139
- [input2.side]: border
227140
- }
227141
- };
227142
- }, options);
227143
- }
227144
- function paragraphsClearBorderWrapper(editor, input2, options) {
227145
- rejectTrackedMode("format.paragraph.clearBorder", options);
227146
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearBorder", input2.target, (pPr) => {
227147
- if (input2.side === "all") {
227148
- const result = { ...pPr };
227149
- delete result.borders;
227150
- return result;
227151
- }
227152
- const updated = deleteKey(pPr.borders ?? {}, input2.side);
227153
- if (updated === undefined) {
227154
- const result = { ...pPr };
227155
- delete result.borders;
227156
- return result;
227157
- }
227158
- return {
227159
- ...pPr,
227160
- borders: updated
227161
- };
227162
- }, options);
227163
- }
227164
- function paragraphsSetShadingWrapper(editor, input2, options) {
227165
- rejectTrackedMode("format.paragraph.setShading", options);
227166
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setShading", input2.target, (pPr) => ({
227167
- ...pPr,
227168
- shading: mergeDefinedFields(pPr.shading, {
227169
- fill: input2.fill,
227170
- color: input2.color,
227171
- val: input2.pattern
227172
- })
227173
- }), options);
227174
- }
227175
- function paragraphsClearShadingWrapper(editor, input2, options) {
227176
- rejectTrackedMode("format.paragraph.clearShading", options);
227177
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearShading", input2.target, (pPr) => {
227178
- const result = { ...pPr };
227179
- delete result.shading;
227180
- return result;
227181
- }, options);
227182
- }
227183
- function paragraphsSetDirectionWrapper(editor, input2, options) {
227184
- rejectTrackedMode("format.paragraph.setDirection", options);
227185
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.setDirection", input2.target, (pPr) => {
227186
- const result = { ...pPr };
227187
- result.rightToLeft = input2.direction === "rtl";
227188
- if (input2.alignmentPolicy === "matchDirection")
227189
- result.justification = input2.direction === "rtl" ? "right" : "left";
227190
- return result;
227191
- }, options);
227192
- }
227193
- function paragraphsClearDirectionWrapper(editor, input2, options) {
227194
- rejectTrackedMode("format.paragraph.clearDirection", options);
227195
- return mutateParagraphProperties(editor, resolveParagraphBlock(editor, input2.target), "format.paragraph.clearDirection", input2.target, (pPr) => {
227196
- const result = { ...pPr };
227197
- delete result.rightToLeft;
227198
- return result;
227199
- }, options);
227200
- }
227201
227577
  function collectTrackInsertRefsInRange(editor, from$1, to) {
227202
227578
  if (to <= from$1)
227203
227579
  return;
@@ -233302,7 +233678,7 @@ function executeTextStep(ctx$1, targets, step3, rangeExecutor, spanExecutor) {
233302
233678
  };
233303
233679
  }
233304
233680
  function ensureFormatStepCapabilities(ctx$1, step3) {
233305
- const inlineKeys = Object.keys(step3.args.inline);
233681
+ const inlineKeys = step3.args.inline ? Object.keys(step3.args.inline) : [];
233306
233682
  const capabilityIssue = getInlinePropertyCapabilityIssue(ctx$1.editor, inlineKeys, step3.op);
233307
233683
  if (capabilityIssue)
233308
233684
  throw planError(capabilityIssue.code, capabilityIssue.message, step3.id, capabilityIssue.details);
@@ -245509,6 +245885,14 @@ function getDelimiterValue(properties, name, fallback) {
245509
245885
  return fallback;
245510
245886
  return property.attributes?.["m:val"] ?? "";
245511
245887
  }
245888
+ function isPlaceholderHidden(plcHide) {
245889
+ if (!plcHide)
245890
+ return false;
245891
+ const val = plcHide.attributes?.["m:val"];
245892
+ if (val === undefined)
245893
+ return true;
245894
+ return val === "1" || val === "true";
245895
+ }
245512
245896
  function convertChildNodes(children, doc$12) {
245513
245897
  const fragment2 = doc$12.createDocumentFragment();
245514
245898
  for (const child of children) {
@@ -273901,7 +274285,7 @@ var Node$13 = class Node$14 {
273901
274285
  console.warn("Failed to initialize developer tools:", error3);
273902
274286
  }
273903
274287
  }
273904
- }, 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, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, DEBUG_TEXT_REWRITE, 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, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, FALLBACK_STORE_KEY = "__documentApiComments", REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, 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, 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.26.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension3) => {
274288
+ }, BLANK_DOCX_BASE64 = `UEsDBBQAAAAIAAAAIQAykW9XXgEAAKUFAAATABwAW0NvbnRlbnRfVHlwZXNdLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1lMtqwzAQRfeF/oPRNthKuiilxMmij2UbaPoBijRORPVCmrz+vuM4NaWkMeSxMcgz994zQsxwvLEmW0FM2ruSDYo+y8BJr7Sbl+xz+po/sCyhcEoY76BkW0hsPLq9GU63AVJGapdKtkAMj5wnuQArUuEDOKpUPlqBdIxzHoT8EnPgd/3+PZfeITjMsfZgo+EzVGJpMHvZ0O+GJIJJLHtqGuuskokQjJYCqc5XTv1JyfcJBSl3PWmhQ+pRA+MHE+rK/wF73TtdTdQKsomI+CYsdfG1j4orL5eWlMVxmwOcvqq0hFZfu4XoJaREd25N0Vas0K7XxeGWdgaRlJcHaa07IRJuDaTLEzS+3fGASIJrAOydOxHWMPu4GsUv806QinKnYmbg8hitdScE0hqA5js4m2NncyySOifRh0RrJZ4w9s/eqNU5DRwgoj7+6tpEsj57PqhXkgJ1IJvvluzoG1BLAwQKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAcAGRvY1Byb3BzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhACEYr1llAQAAxQIAABAAHABkb2NQcm9wcy9hcHAueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ1STU/DMAy9I/Efqt63dBwmNHlBaAhx4GPSCpyjxG0j0iRKson9e5wVSoEbOdnP9st7TuDqvTfFAUPUzq7LxbwqC7TSKW3bdflc384uyyImYZUwzuK6PGIsr/j5GWyD8xiSxlgQhY3rskvJrxiLssNexDmVLVUaF3qRKA0tc02jJd44ue/RJnZRVUuG7wmtQjXzI2E5MK4O6b+kysmsL77UR098HGrsvREJ+WOeNHPlUg9sRKF2SZha98grgscEtqLFyBfAhgBeXVAx9wwBbDoRhEy0vwxOMrj23mgpEu2VP2gZXHRNKp5OYos8DWzaAmRgh3IfdDpmqmkK99ri6YIhIFVBtEH47gROMthJYXBD1nkjTERg3wBsXO+FJTo2RsT3Fp997W7yFj5HfoITi686dTsvJP4yO8FhRygqUj8KGAG4o8cIJrPTrG1RffX8LeT1vQy/ki+W84rOaV9fGLkevwv/AFBLAwQUAAAACAAAACEACvOn+GYBAADtAgAAEQAcAGRvY1Byb3BzL2NvcmUueG1sVVQJAAMw0M4SMNDOEnV4CwABBPUBAAAEFAAAAJ2SXU+DMBSG7038D6T3UGBqDAGWTLMrZ0yc0XhX27Otjn6k7cb27y0wmMRdeXc+nvP29G3z6UFUwR6M5UoWKIliFICkinG5LtDbch7eo8A6IhmplIQCHcGiaXl9lVOdUWXgxSgNxnGwgVeSNqO6QBvndIaxpRsQxEaekL65UkYQ51OzxprQLVkDTuP4DgtwhBFHcCMY6kERnSQZHST1zlStAKMYKhAgncVJlOAz68AIe3Gg7fwiBXdHDRfRvjnQB8sHsK7rqJ60qN8/wR+Lp9f2qiGXjVcUUJkzmjnuKihzfA59ZHdf30BdVx4SH1MDxClTPnO6DWZgJKlapq83jm/hWCvDrJ8eZR5jYKnh2vl37LRHBU9XxLqFf9gVBzY7jo/5224mDOx58y/KtCWGND+Z3K0GLPDmZJ2Vfed98vC4nKMyjdObMEnD5G6Zpll8m8XxZ7PdaP4sKE4L/FuxF+gMGn/Q8gdQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAYAHABfcmVscy9VVAkAA4Yc7WiHHO1odXgLAAEE9QEAAAQUAAAAUEsDBBQAAAAIAAAAIQAekRq36QAAAE4CAAALABwAX3JlbHMvLnJlbHNVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAArZLBasMwDEDvg/2D0b1R2sEYo04vY9DbGNkHCFtJTBPb2GrX/v082NgCXelhR8vS05PQenOcRnXglF3wGpZVDYq9Cdb5XsNb+7x4AJWFvKUxeNZw4gyb5vZm/cojSSnKg4tZFYrPGgaR+IiYzcAT5SpE9uWnC2kiKc/UYySzo55xVdf3mH4zoJkx1dZqSFt7B6o9Rb6GHbrOGX4KZj+xlzMtkI/C3rJdxFTqk7gyjWop9SwabDAvJZyRYqwKGvC80ep6o7+nxYmFLAmhCYkv+3xmXBJa/ueK5hk/Nu8hWbRf4W8bnF1B8wFQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAHAB3b3JkL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAHAB3b3JkL2ZvbnRUYWJsZS54bWxVVAkAA54c7WieHO1odXgLAAEE9QEAAAQUAAAAvZPBbqMwEIbvlfoOlu8NhpA0RSFV222kvexh1T6AY0ywFtvI44Tk7dcYiBSyuy3tqiCEGf75mPnHLO8PskR7bkBoleJwQjDiiulMqG2KX1/WNwuMwFKV0VIrnuIjB3y/ur5a1kmulQXk8hUkkqW4sLZKggBYwSWFia64ci9zbSS17tFsA0nNr111w7SsqBUbUQp7DCJC5vj6CrmjZZn3oHSeC8a/abaTXFkPCQwvHVYrKEQFZ8j6Pcham6wymnEA170sW6ikQp2zwviCJgUzGnRuJ663rjbPc4yQ+JUsB5TZOEr0Z8qc8cM40KIDBS7zAiaycbD5CSayIexjZQ0p2W4UJ5r2FTW3Jn0IhMxmxThmP8GgyaWWFhSKCywf1+/sxDxKNwgkWfJ9q7Shm9KR3CZDbosgD0btZJobaieO+j6Qdwiv2mK6nxLViaLSUV6E5IB+8Br91JKqXtZJK6o08NCp97RMMWkanZMpmZHYXZFbxTg4T2EFNcDtKYUMBTmVojz2743/6kBSCcuKXrGnRjQdD0Ugtk6ygw1J8TMhJHper3EbCVP85CK3i9ljF4maSvxx10WmpwhpIsxz/GPYcpjnnDT915dB6+Bf/HzSOyO4aRx908tb59+d97TxMv60l1Jn3PzbzFwcePYRJ+PpVzv54MZevunho9uPsfewPT/rIdQC4P/sx4evdrFfwuo3UEsDBBQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABwAd29yZC9kb2N1bWVudC54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAApZZbb9sgFMffJ+07WH5v8S1OYjWttGab+jCpWrcPQIDEqAYsILd9+h3s+LJ5qxz3CXPg/PjDORxz93AShXdg2nAlV354G/gek0RRLncr/+ePLzcL3zMWS4oLJdnKPzPjP9x//HB3zKgie8Gk9QAhTXYsycrPrS0zhAzJmcDmVnCilVFbe0uUQGq75YSho9IURUEYVF+lVoQZA+s9YnnAxr/gyGkcjWp8BGcHTBDJsbbs1DHCqyEztESLISiaAIIdRuEQFV+NSpFTNQAlk0CgakCaTSP9Y3PpNFI0JM2nkeIhaTGNNEgnMUxwVTIJg1ulBbbQ1TsksH7dlzcALrHlG15wewZmkDYYzOXrBEXg1RJETK8mzJFQlBUxbShq5e+1zC7+N62/k57V/pem9WDFuGVhuSViJ1sY2/jqMWdXu68vhaU6NaRZAeeopMl52VYHMZUGg3kDObx1AAdR+G1lC0detf+VtnUdhg44Rv4ldqKolb9NDIMR0XSI1mOMhD/XbJQIyOBu4UlH0zvccGTxaQDRAJASNvJn0TAWFwYi3e12HD7yWjWctOVw2uNME9MD0P1ViChudLjGufdYhlqaX4drYoScL7Y4xybvE9l1G5y1uLPonXe5e9+l+qrVvuxo/H20p668HuV1GwzSvyNYmveJeclxCVVXkOxpJ5XGmwIUwVXz4LZ4VQS8Ol1d49U3wGti7VUJ5Lmq5d/DO22j6Nm1JQwkWYk1foI0T8JlmqTz0K+s8Jezzhoks+VivpyBNYM3If0OJkiveD3/1JqetTPGYZA8fm6Na7bF+8IOpz/3JiMnwzBin/VYfiV89/ILBqFihVGUBG4iJHQ4W8A3qid8w45oFRTWMKmnaL7LbdfdKGuV6PoF2/ZGc4Ypg3XnUdXdKmV73d3eVt3LckQVBqymxITVcyozvIe/aheSrOCSPXNLQGWcVqOo2Xf1WUcEdU/o+99QSwMEFAAAAAgAAAAhAMrnZYorBAAAvgwAABEAHAB3b3JkL3NldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAAC1V22PmzgQ/n7S/QfE58uG1ySLmq3yervV5lqVre6zAZNYa2Nkm03T0/33GwwO9BZVSav9hJln5pnxeGYM795/ZdR6wUISXsxt98axLVykPCPFfm5/edqOZrYlFSoyRHmB5/YJS/v93e+/vTtGEisFatICikJGLJ3bB6XKaDyW6QEzJG94iQsAcy4YUvAq9mOGxHNVjlLOSqRIQihRp7HnOBO7peFzuxJF1FKMGEkFlzxXtUnE85ykuH0YC3GJ38ZkzdOK4UJpj2OBKcTAC3kgpTRs7GfZADwYkpcfbeKFUaN3dJ0LtnvkIjtbXBJebVAKnmIp4YAYNQGSonMcvCI6+74B3+0WNRWYu45e9SMPryPwXhFMUvz1Oo5ZyzEGyz4Pya7jmZx5SNbj+blgegRZdRWF55s46kdt3uOSmcoO19GZMxrXtkihA5KHPiO+boPhme7EunxLekkFNtAjSQQSp375sTR62BdcoIRCOFCGFlSSpaOzmqOsH1ZTHZbJg6WTa9/B1PnGObOOUYlFCq0HI8tz7HENQMHzPFZIAVEkS0ypnmEpxQj8HqO9QAymj5FomwznqKLqCSWx4iUovSDY3tRQpgckUKqwiEuUAtuKF0pwavQy/hdXK5hkAhqttdBzrVvFzYwEiwIx2PB3c2/HM1xHVgly+cnYxrsb9l3+3xGHmS5Ihp/qRMfqRPEWgo/JN7wosg+VVAQY9fT7hQh+FAAuas8foTSeTiXeYqQqSNMbOdMnsaWk3BEhuHgoMqiNN3NG8hwLcECg1nZQPkTwo87zPUYZXKVv5LeS+G9Qhs70n6Asn5dcKc7uT+UBcv1rJ6nrfdwvX/ggyKRZfOZcnVVhbPnr6bKJtEYvQXzXCVabQWTibN1hm0XgO/4gsnLXbjCMhLPlaggJboOJuxhCJqG3CcIhZLH0Zv5sCFku3Wk4iKxW/srfDiIbZz28n83Km04HY9vees7tpj2d9kxYVH9qfBJmVTe2xRqLFWKJIMja1R8j41ojEc9LUhg8wTClcR+Jq8SAo1EDSIYo3UKJGcBp5BmR5Rrnek13SOw73lZDDEphyn44c9VTG4s/Ba/KBj0KVDYNa1TcIGgtSaEeCTNyWSWxsSrgXulBVZF9fBE6T116jpGCBtCD7xHpRtK6uBh9idtGoyKumwTvUFk2vZbs3blNyf6g3Lo9FLxl8M2qX5K912KexrwG0y8orXcG2u2ik3lG1tPzjczvZIGRBZ0sNLKwk02MbFLLDjBdBVx1z9D2ZlnLc04pP+LsvsNficwlmBI48fjEku5uu2kwSiTMoRKuQcWFwf7QmBtEGU8f6vs6aOT+YhGuF860gUN9fSo9qiC1n3G+RBJnLWZMw8b0n8nEmbjuajYKZpvb0WYaBKOZu7wdTafO1PW3rufPnH/bPjA/Hnf/AVBLAwQUAAAACAAAACEA24Vsw30EAACXHQAAEgAcAHdvcmQvbnVtYmVyaW5nLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAADNmc1u4zYQx+8F+g6CgB4Tifq2sM4iySZFFttF0U3RMy3RlhB+CBRlx9d9mT5CH2tfoaRkyXLkxJIctz4pJjk/zQxnyL+dDx+fCdaWiOcpo1MdXJq6hmjE4pQupvqfj/cXga7lAtIYYkbRVF+jXP949fNPH1YhLcgMcblQkwyah6ssmuqJEFloGHmUIALzS5JGnOVsLi4jRgw2n6cRMlaMx4ZlArP8K+MsQnkuObeQLmGub3DRcz9azOFKGiugY0QJ5AI9bxlgMMQ1JkbQBVkjQDJCC3RR9mCUZyivOiBnFEh61SG540h7gvPGkawuyR9HsrukYBypU06kW+AsQ1ROzhknUMiPfGEQyJ+K7EKCMyjSWYpTsZZM06sxMKVPIzySVg2B2PFggm8QFiNsxzWFTfWC03Bjf9HYK9fDyn7zaCwQ7vda+bqJgZ4FzkVty/vkrjL/xKKCICrKrBkcYZlHRvMkzZrTgYylycmkhizfSsCSYL052UDPVnvtaPtUbcMW2Mf9zd4RXHn+NhGYPXZTIRqLPi7svrP2hMgK3r54VGpayQU9D58aYHUAXoR6XhY1I9gwjGjb3YqT9myrmuM1nDRuccY50wLExSCEZdd+qIcyb7HyWMTJMFy9R4ayhQImME/aRDQsQLfBrUkr39niuKb6lbMi29LS42gP2+N1RYcFaHovdzDLj3PmWwIzeeqSKHxYUMbhDEuPZKtpslu0cge0qlzVQ6s6QKv3WisLSFOnln4lhRqc5YLDSHwtiLbz6UFWuxR8khlyJFUeV4OVprueC8RvOIJPaomi0Fy9LVxCeQUAD1jejenrhpohBRbpF7RE+HGdoXpNsp7xNP5NzWE1V60VJMP1Chfc3Tp3ZlDN4KWaSOWjcioUGZb3remYE9M0QelD6WPjRGUnZeg9aQZnBcZINMRHeQfVUz++/9OMf47qUYzmm+XZ71w9UqrCVMNT3bdKTxJIF6Ugtj1TrTWaxXzzuGdU5Cq5eZTKOvy2JjOGS9NrmbedgZRKcIzmUGZmAyspRunYy0yATibsckTeZ/JSXCK14ujMsKF5AY4zLjG3rOAp4tpXtGpl58VolHcXDsua1cma+/5Z+/H976F5s4A3Lm9/ydXqO1neytru2LAE2Xsa7AQJGtxwVhD83x3nnGXHyTycdce5Z9pxjj3yCH/vjvPOtONcc+RR/n4d559lx7n+yLP6P+q44Ew7znNGHuHHd5yxo24PSl8wRvq6gW8C++b6OOl7d+c5wL91+kjf+57bGKMoJRDv3cdfwOU7a9+echVMRhYlZivEvyAh92J/RNbgiA6p1p5aEtwcE9IfjEC6PyJ7X0Q8XSQDBCUIeoTUVX/3I0N6s+acwTt0SP71VGynKzp3cEiHhFtPOXWyovOGF11HU/Uquq4AOknR+YN36JAC6ilaTld0wfCQDmiXnoriZEU3GV50HVnxStF1NQAt737auvPVD2dhXJQ/q5WDMlTHn3jWy5/LHpprv34X3cO09jGdwHWB7wDwOhO0mUbrH6pX/wJQSwMEFAAAAAgAAAAhAL5+dmJWAQAA0AMAABQAHAB3b3JkL3dlYlNldHRpbmdzLnhtbFVUCQADMNDOEjDQzhJ1eAsAAQT1AQAABBQAAACd01FvwiAQAOD3JfsPhHelumlMYzVZFpe9LEu2/QAKV0sGXAO46n79aLWuiy92T0DLfbnjYLneG02+wHmFNqOTcUIJWIFS2W1GP943owUlPnAruUYLGT2Ap+vV7c2yTmvI3yCEuNOTqFifGpHRMoQqZcyLEgz3Y6zAxp8FOsNDXLotM9x97qqRQFPxoHKlVTiwaZLM6Ylx1yhYFErAI4qdARvaeOZARxGtL1XlO62+RqvRycqhAO9jPUYfPcOVPTOT+wvIKOHQYxHGsZhTRi0VwydJOzP6F5gNA6YXwFzAfpixOBksRvYdJYc587OjZM/5XzI9QO4GEdO7Lo9maMJ7lpdBlsO4rkesieWBl9yXfRGGFTg7cwfTnLcR6fPWouO5jlK8QSReAtLC5NiFZiDHxpKuBNKeC13FJ4ZVUEZ9wwbdg8Pag2PNZ6411q8vT3HB/rzD1Q9QSwMEFAAAAAgAAAAhAD+v4WZfDwAADaYAAA8AHAB3b3JkL3N0eWxlcy54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA3Z1tc9s2Esff38x9B45e9V6ksp5lT92O7STnzCWpWzvX1xAJWaj5oCOpOO6nPwB8EKUlKC64UdRMZlqL4v4I4L+7xIIU+dMvXwLf+czjREThZW/w41nP4aEbeSJ8vOx9enj7at5zkpSFHvOjkF/2XnjS++Xnf/7jp+eLJH3xeeJIQJhcBO5lb5Wm64t+P3FXPGDJj9Gah/LLZRQHLJUf48d+wOKnzfqVGwVrloqF8EX60h+enU17OSZuQ4mWS+Hy15G7CXiYavt+zH1JjMJkJdZJQXtuQ3uOYm8dRy5PEtnpwM94ARNhiRmMASgQbhwl0TL9UXYmb5FGSfPBmf4r8LeACQ4wBICpy7/gGPOc0ZeWVY7wcJxpyRFehWPXmArA26AQw1HRDvU/ZV5hJV7qrXC4QqO+smUpW7FkVSVyXAcnJe4lUOMduBfvHsMoZgtfkqQHOdIJHA12MhXU/5xMWKfogqPHpfezjC4vcl/zJdv4aaI+xndx/jH/pP/3NgrTxHm+YIkrxGXvKhZMDvHzBWdJepUI9iBbLg8fCNmS26swEerLlfqjsrObXPYeRCBD+SN/dn6PAhY6P1xH3otzc/+vXl8d6InHodzzM/Mve8NsU/JXuWFcbLlJ9rf5LHwstvHw1af7ausqmxbCk01i8av7K204GF/44pGlm1g2S33ShCwRxd6N7Db/km5k++XO/Xw8+vujtC4/ZXvtDalMGDJ93GdZTH7Ll+8j94l796n84rJ31ss2fnp3F4solpnqsnd+nm+854G4FZ7Hw8qO4Up4/I8VDz8l3Ntu/+2tzjb5BjfahPLv0WyqZfYT780Xl69V7pLfhkzp9VEZaG02Yntwbf6/AjbIB7jOfsWZSuDOYB9xjkYMlUVS6W09c7PX9wH6QKNjHWh8rANNjnWg6bEONDvWgebHOtD51z6QCD2Z3wf1hwHUQxxDNKI5hmBDcwyxhOYYQgXNMUQCmmNwdDTH4MdojsFNEZw0ck1eWHH2kcHbm7mHzxF23MOnBDvu4TOAHfdwwrfjHs7vdtzD6dyOezh723EPJ2s8N5tqOe9kmIVp5yhbRlEaRil31PS0M42FkqWrWhqeOunxmKSTBJgss+Un4s40l+nPhz1k0u18nqqCzomWzlI8quKkc8N5+Jn70Zo7zPMkjxAYc1k+GUbExqdjvuQxD11O6dh0UF+E3Ak3wYLAN9fskYzFQ494+AoiSVIoHZpt0pUKEkHg1AFz44hgzsLI8sN7kXQfKwVxrje+z4lYH2lcTLO61wYa07000JjulYHGdC8MKppRDVFOIxqpnEY0YDmNaNwy/6Qat5xGNG45jWjcclr3cXsQqc/3Zx2D9mt3N36UUCS8e/EY6vXTzqR8zdS5YzF7jNl65ahl54MzLfRx9JLzA8U5rSRRzeu1i6hVZxFuug/oDo0quEoeUXiVPKIAK3ndQ+yDnCarCdotTT1zv1mktUHbviq4Z/4mm9B2jzaWdvewbQC8FXFCFgb1WAIP/qims7dEU71tK7s3bMvqHlb7WYm0eTmSoJV+5D7RpOHblzWPZVn21Jn0NvL96Jl7dMT7NI4yX6uG/HDYOuTfBOsVS0QCEO1P9cUdDM4Htu7coTufiZBGtzevAiZ8h24Gcfvw4b3zEK1VmakGhgZ4HaVpFJAx85XAH/7gi3/RNPBKFsHhC1Fvr4iWhzTsRhCcZDJS5BGR5DRThILkHKp5/+Evi4jFHg3tLubZTUMpJyLes2DtU8WWzIvPMv8QzIY0778sFmpdiCqoHkhglWXDZLP4k7vdU93HyCFZGfp1k+r1Rz3V7X61dwfXfZqwg+s+RdBqytOD8l+Czu7gund2B0fV2RufJYkwXkK15lF1t+BR97d78ZfzIj+KlxufbgALINkIFkCyIYz8TRAmlD3WPMIOax51fwldRvMIluQ079+x8MjE0DAqJTSMSgYNo9JAw0gF6H6HTgXW/TadCqz7vToZjGgKUIFR+Rnp6Z/oKk8FRuVnGkblZxpG5WcaRuVno9cOXy7lJJjuFFNBUvlcBUl3oglTHqyjmMUvRMg3Pn9kBAukGe0ujpbq1yRRmN3ETTGd3SxSysl2hqMS+Q++IGuaYlG2i2BFlPl+FBGtrW1PONpy9961Q2b65xydm3DnM5evIt/jsaFPjfXy/Zq5Ai6dtr9Y8l48rlLnflWu9lcx07ODlkXBvmN2+IB1Yz4dNl5m8sQmKBoKf0wxHbU3HgLj8WHj7Uxix3LS0hIec3rYcjtL3rGctbSEx5y3tBwBy6Z4eM3ip1pHmDX5T1njGZxv1nhhvjCuPWyTI5WWdS44a/KinVBxrlxXXS2A6rSLGbN9u+Ax22OiyEzBhJOZ0jquzIimAPudfxZJ7Rr1gevf5d0TIO+PW2fO3zZRCi5TD9v/qOudnDiFCXdqOaP2F652sox5HFunGzOidd4xI1onIDOiVSYymqNSkpnSOjeZEa2TlBmBzlbwjIDLVtAel62gvU22ghSbbNVhFmBGtJ4OmBHoQIUIdKB2mCmYEahABeZWgQop6ECFCHSgQgQ6UOEEDBeo0B4XqNDeJlAhxSZQIQUdqBCBDlSIQAcqRKADFSLQgWo5tzeaWwUqpKADFSLQgQoR6EAddwxUaI8LVGhvE6iQYhOokIIOVIhABypEoAMVItCBChHoQIUIVKACc6tAhRR0oEIEOlAhAh2ok46BCu1xgQrtbQIVUmwCFVLQgQoR6ECFCHSgQgQ6UCECHagQgQpUYG4VqJCCDlSIQAcqRKADddoxUKE9LlChvU2gQopNoEIKOlAhAh2oEIEOVIhABypEoAMVIlCBCsytAhVS0IEKEehAhYgm/8wvUZpusx/gVz2Nd+wjfueTNer36k+5d9ZQ26OKVplZ7X+LcB1FT07tDw9Ho/YQsfBFpJeoDZfVq9wZ+sLnrzfNv/Bp8RiPtl3Jfwuhr5kC+LitJVhTGTe5fNUSFHnjJk+vWoJZ57gp+1YtwWlw3JR0dVwWN6XI0xEwbkozFeOBwbwpW1fM4RA35eiKIRzhpsxcMYQD3JSPK4YTRyXnfetJy3GalveXAkKTO1YIMzOhyS2hVsa1/daimQlt1TMT2spoJqD0NGLwwppRaIXNKDupYZhhpbYPVDMBKzUkWEkNMPZSQ5S11BBlJzVMjFipIQErtX1yNhOspAYYe6khylpqiLKTGp7KsFJDAlZqSMBK3fGEbMTYSw1R1lJDlJ3UcHKHlRoSsFJDAlZqSLCSGmDspYYoa6khyk5qUCWjpYYErNSQgJUaEqykBhh7qSHKWmqIapJar6LYV0sVc9wkrGKIOyFXDHHJuWJoUS1VrC2rpQrBslqCWtlVS1XR7Kqlqnp21VJVRrtqCehpVy3VCmtXLdUqbFctmaXGVUt1UtsHql21VCc1rloySo2rlhqlxlVLjVLjqiWz1LhqqU5qXLVUJ7V9crarloxS46qlRqlx1VKj1LhqySw1rlqqkxpXLdVJjauW6qTueEK2q5YapcZVS41S46ols9S4aqlOaly1VCc1rlqqkxpXLRmlxlVLjVLjqqVGqXHVkllqXLVUJzWuWqqTGlct1UmNq5aMUuOqpUapcdVSo9S4aumDNBEEj4C6D1icOnTPi7tlySpl3R9O+CmMeRL5n7nn0Hb1PaqX/eed118ptn6dn9w/lWOmnoBe+bmSlz0BNgfqHd955WuqlLFqiZO/5yvfrBucX67NjqgNDxyqhOfXigcAv325lT7Cgsle/RrWHTxUD0as2a4cotheHOZmxeLs262rFvuc7/fl+SJO1Avcsq/Pzoaj0evZdbbXOns12xPn64/y+P3ig9SHJ/pTkv2AVpov1DPF5AiMpvq3V2yZ8viyN8+jNsqe2vT+s18eKZcuP0btW+CKV76xPyuvfNt/H5z68k2+TX2vXwlXa+kmaWXztfBE1jhXRXnZrrfj2VT7ht5ZZ4DLHtPxv92sbkpR9xm8zQjbF8gVF5urL5AbF30tXu1m4zxDo/MMKZ1n2MJ5tmGZ7bcTlF/ZvQYt3WvwfbrXaAjdK9vW0b1GRvcaUbrX6Dtxr2Gzex1yomO4ynAOXSXb1tFVxkZXGVO6yvjEXWVe9ZSx0VNGX8dTRPbfm4TEbzp6xMToERNKj5h8Hx4xPs3c0dEHpkYfmFL6wPTEfcAs++ToiWByrv7tO4F609LWBR6EeoPv1ZTAA2ZGD5hResDsb+sB0yME/pE1nxs1n1NqPj8pzaGys6PH9nCm/rXR+TXFnO/cqPM5pc7nJ67z/AgRTK+sKweVufkD1Q3rX/mLkcon++jXIu1rbnh7kkGvQTu9zO1O1SpsQ5v1Km3jwl3+sHaTQ7X2qHThZ1LLP96FyqGe83fYZy31vrBeseMN9/0PLNs7Wpt39fkyzb4dnM1rvl9kr4Qw2sf62oER0N9tTL/shHm8s5dE5j9qMa6T6keGweHOHiXWcaRb+rC7SeTQ6OXe/fbtrIHut/K2WG51tnlmL3HVxoEpXQ0OpCpz8vle1qO6LHciJR02SjokknSIO/t8/wp3WXFEKjxqVHhEpPDoayn8d1/0Q6o1blRrTKTW+NTUOvbCG1KVSaMqEyJVJqemysnpMG3UYUqkw/TUdDjqahRSklmjJDMiSWanJslpiTBvFGFOJML81EQ46koOUpLzRknOiSQ5PzVJvslyWvZgi/2xzrZSrKNpUtMi2iAv2FBrZNtF7r0L4656fcWXdMP8/En6jctjxyyBtk3W3XpV9PuJx+XgbifLZXqcwunzhDgRbiWqdYOu4VbxJbP6p1m2Hl+z+iAtX6K9L1D5BUWoFrDGaB1YRGu4CbI/hA/vhyq/BDE9mB64Je+bTECAVwwm36Lm3RHL5BZdQ3fXvczecOJzxq8sWX3MZq8B2Fcm20oRrZrUFKpDmztrD92ANige3venW3BUEcvj2khtmGSOz9S/NhpS18PbgasVp2vMVBQ2a3IwYI46cvUOrC6fbN+rsT9We6/dOOTRcChGYwv3FPpSl7pQpZ6R12LO19Jdyk7nD44rn2a3323wuDuco9R4BOqEetg7jnifVT4W9Ylu920oFAmverimvDeyKSjW117lAqneL5GelL9X+y91j5yTZUeuJ61OPuyW6+PlpdSvfKT+tmeHfhgxKjJ7NcbmU90afWU3+0SS/L/peijwo0bX7Xo62AmSAx57cnHfmCO3z9Y0DeB2j65Zsrjmh8qSi+yo+WglMqn4N2xNM3ZgSjmpH9Hir+Tn/wNQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL3RoZW1lL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAHAB3b3JkL3RoZW1lL3RoZW1lMS54bWxVVAkAAzDQzhIw0M4SdXgLAAEE9QEAAAQUAAAA7VlPb9s2FL8P2HcgdHf1x5IsBXUL/23XJm3RpB16ZGRaYkyJAkknMYoCQ3vaZcCAbthlwG47DMMKrMCKXfZhCrTYug8xSnZs0abatE23AksMxCL5e48/vvf4+ExdvHycEnCIGMc0axv2BcsAKIvoCGdx27izN2wEBuACZiNIaIbaxgxx4/KlTz+5CLdEglIEpHzGt2DbSITIt0yTR7Ib8gs0R5kcG1OWQiGbLDZHDB5JvSkxHcvyzRTizAAZTKXam+MxjhDYK1Qal06UD4j8lwledESE7UbljFWJEjua2MUXn/EeYeAQkrYh5xnRoz10LAxAIBdyoG1Y5Z9hXrpoLoWIqJGtyA3Lv4XcQmA0cUo5Fu8vBa2BE7j2Ur8z17+JGwTFZ6mvBMAokiu1N7C251uBs8BWQPNHje6wZTdVfEV/c1N/6HcdV8E3V3h3c43DcND3FLy7wnsb+I7ldMOmgvdWeH8D7w46LWeg4EtQQnA22UT7rSDwF+glZEzJVS089H2r1V/AVyizEl1z+UzUxVoKDygbSkDpXChwBsQsR2MYSVwnF5SDPuY5gTMD5DCjXHZbjm3LwHMtZ/kpLQ63EKxIz7sivtFV8AE8YjgXbeOa1GpUIC+ePXv+8Onzh789f/To+cNfwDaOE6GRuwqzuCr36sev//7+C/DXrz+8evyNHs+r+Jc/f/ny9z9ep14otL598vLpkxffffXnT4818A6D+1X4Hk4RBzfQEbhNU7lAzQRon72dxF4CcVWik8UcZrCQ0aAHIlHQN2aQQA2ui1Q73mUyXeiAV6YHCuHdhE0F1gCvJ6kC3KGUdCnTrul6MVfVCtMs1k/OplXcbQgPdXP31rw8mOYy7rFOZS9BCs1bRLocxihDAhRjdIKQRuwexopdd3DEKKdjAe5h0IVYa5I9vC/0QldxKv0y0xGU/lZss3MXdCnRqe+jQxUp9wYkOpWIKGa8AqcCplrGMCVV5DYUiY7k7oxFisG5kJ6OEaFgMEKc62RusplC9zqUeUvr9h0yS1UkE3iiQ25DSqvIPp30EpjmWs44S6rYz/hEhigEt6jQkqDqDina0g8wq3X3XYzE2+3tOzIN6QOkGJky3ZZAVN2PMzKGSKe8w1IlxXYY1kZHdxorob2NEIFHcIQQuPOZDk9zqid9LZFZ5SrS2eYaVGO1aGeIy1qpKG40jsVcCdldFNMaPjuztcQzg1kKWZ3mGxM1ZAb7TG5GXbySaKKkUsyKTasncZOn8FRabyVQCauizfXxOmPZ2+4xKXPwDjLorWVkYj+1bfYgQfqA2YMYbOvSrRSZ6kWK7VSKTbVyY3XTrtxgrhU9Kc7eUAH9N5XPB6t5zr7aqUso6zVOHW69sulRNsIff2HTh9PsFpJnyXldc17X/B/rmrr9fF7NnFcz59XMv1bNrAoYs3rZU2pJa29+xpiQXTEjaJuXpQ+Xe380lJ1loxRaXjTliXxcTKfgYgbLZ8Co+ByLZDeBuZzGLmeI+UJ1zEFOuSyfjFrdZfE1TXfoaHGPZ5/cbUoBKFb9lrfsl6WamPf6rdVF6FJ92Yp5lYBXKj09icpkKommhkSreToStnVWLEINi8B+HQuz4hV5OAFYXIt77pyRDDcZ0qPCT3P5E++euafrjKku29EsL3TPzNMKiUq4qSQqYZjIw2O9+4x9HYZ6VztaGq3gQ/ja3MwNJFNb4EjuuaYn1UQwbxtj+bNJPqa51MeLTAVJnLWNSCwM/S6ZJWdc9CFP5rByaL7+FAvEAMGpjPWqG0i24mY7LevjJRdaH5/lzHUno/EYRaKmZ9WUY3Ml2tH3BBcNOpWkd5PREdgnU3YbSkN5Lbsw4AhzsbTmCLNKcK+suJauFltReQO02qKQ5AlcnCjVZD6Hl89LOpV1lEzXV2XqTLgfD8/i1H2z0FrSrDlAWrVZ7MMd8hVWTT0rT5vrwsB6/Snx/gdChVqgp9bUU6s7O86wIKhM59fYzan15nueButRa1bqyrK18XKb7h/IyO/LanVKBJ9fkB3L8rt38lpyngnK3pPscizAlOG2cd/yOm7P8XoNK/AGDbfpWo3A6zQbHc9r2gPPtvpd54E0ikhS25vPPZQ/9sls8e6+7N94f5+elNoXIpqatKyDzVK4fH9vO/Xv7wGWlrnvO8OwGXb9RtjsDBtuvxs0wp7fbfT9Xqs/7Pe8IBw+MMBhCXY7zZ7rD4KGb/d6Dde3CvpB2Gi5jtNxW51g4HYeLGwtV37yfWLektelfwBQSwMECgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAHAB3b3JkL19yZWxzL1VUCQADhhztaIcc7Wh1eAsAAQT1AQAABBQAAABQSwMEFAAAAAgAAAAhALO+ix3+AAAAtgMAABwAHAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQJAAMw0M4SiBztaHV4CwABBPUBAAAEFAAAAK2TzWrDMBCE74W+g9h7LTttQwmRcymBXFv3AWR7/UP1Y6RNWr99RUoShwbTg44zYme+hdV6860VO6DzvTUCsiQFhqaydW9aAR/F9uEFmCdpaqmsQQEjetjk93frN1SSwpDv+sGzkGK8gI5oWHHuqw619Ikd0ISXxjotKUjX8kFWn7JFvkjTJXfTDMivMtmuFuB29SOwYhzwP9m2afoKX22112joRgX3SBQ28yFTuhZJwMlJQhbw2wiLqAg0KpwCHPVcfRaz3ux1iS5sfCE4W3MQy5gQFGbxAnCUv2Y2x/Ack6GxhgpZqgnH2ZqDeIoJ8YXl+5+TnJgnEH712/IfUEsBAh4DFAAAAAgAAAAhADKRb1deAQAApQUAABMAGAAAAAAAAQAAAKSBAAAAAFtDb250ZW50X1R5cGVzXS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UGrAQAAZG9jUHJvcHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhACEYr1llAQAAxQIAABAAGAAAAAAAAQAAAKSB7gEAAGRvY1Byb3BzL2FwcC54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEACvOn+GYBAADtAgAAEQAYAAAAAAABAAAApIGdAwAAZG9jUHJvcHMvY29yZS54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACTZE1bAAAAAAAAAAAAAAAABgAYAAAAAAAAABAA7UFOBQAAX3JlbHMvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAB6RGrfpAAAATgIAAAsAGAAAAAAAAQAAAKSBjgUAAF9yZWxzLy5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1BvAYAAHdvcmQvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAoWRNW+xw0GIQAgAAtAcAABIAGAAAAAAAAQAAAKSB+wYAAHdvcmQvZm9udFRhYmxlLnhtbFVUBQADnhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCWFrgr1QIAAIgLAAARABgAAAAAAAEAAACkgVcJAAB3b3JkL2RvY3VtZW50LnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDK52WKKwQAAL4MAAARABgAAAAAAAEAAACkgXcMAAB3b3JkL3NldHRpbmdzLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQDbhWzDfQQAAJcdAAASABgAAAAAAAEAAACkge0QAAB3b3JkL251bWJlcmluZy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAvn52YlYBAADQAwAAFAAYAAAAAAABAAAApIG2FQAAd29yZC93ZWJTZXR0aW5ncy54bWxVVAUAAzDQzhJ1eAsAAQT1AQAABBQAAABQSwECHgMUAAAACAAAACEAP6/hZl8PAAANpgAADwAYAAAAAAABAAAApIFaFwAAd29yZC9zdHlsZXMueG1sVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAk2RNWwAAAAAAAAAAAAAAAAsAGAAAAAAAAAAQAO1BAicAAHdvcmQvdGhlbWUvVVQFAAOGHO1odXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAAAAgAAAAhAGeA/LSbBgAAzSAAABUAGAAAAAAAAQAAAKSBRycAAHdvcmQvdGhlbWUvdGhlbWUxLnhtbFVUBQADMNDOEnV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJNkTVsAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQTEuAAB3b3JkL19yZWxzL1VUBQADhhztaHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAAAIAAAAIQCzvosd/gAAALYDAAAcABgAAAAAAAEAAACkgXYuAAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQFAAMw0M4SdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAARABEAqQUAAMovAAAAAA==`, 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, registry, VALID_CREATE_POSITIONS, REF_HANDLERS, STEP_INTERACTION_MATRIX, MATRIX_EXEMPT_OPS, PARAGRAPH_NODE_TYPES, TEXT_STYLE_CHARACTER_STYLE_ATTR = "styleId", DIRECT_FORMATTING_MARK_NAMES, ALIGNMENT_TO_JUSTIFICATION, DEFAULT_INLINE_POLICY, CORE_SET_MARK_KEYS, DEBUG_TEXT_REWRITE, 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, SUPPORTED_DELETE_NODE_TYPES3, REJECTED_DELETE_NODE_TYPES3, TEXT_PREVIEW_MAX_LENGTH = 80, RANGE_DELETE_SAFE_NODE_TYPES, HEADING_PATTERN, OOXML_DEFAULT_FONT_SIZE_PT = 10, FALLBACK_STORE_KEY = "__documentApiComments", REQUIRED_COMMANDS, VALID_CAPABILITY_REASON_CODES, REQUIRED_HELPERS, SCHEMA_NODE_GATES, schemaGatedIds, SUPPORTED_NON_UNIFORM_STRATEGIES, SUPPORTED_SET_MARKS, REGEX_MAX_PATTERN_LENGTH = 1024, 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, 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.26.0", PIXELS_PER_INCH2 = 96, MAX_HEIGHT_BUFFER_PX = 50, MAX_WIDTH_BUFFER_PX = 20, cloneExtensionInstance = (extension3) => {
273905
274289
  const extensionLike = extension3;
273906
274290
  const config2 = extensionLike?.config;
273907
274291
  const ExtensionCtor = extensionLike?.constructor;
@@ -277239,7 +277623,7 @@ var Node$13 = class Node$14 {
277239
277623
  }
277240
277624
  element3.style.textAlign = resolveTextAlign(attrs?.alignment, rtl);
277241
277625
  return rtl;
277242
- }, shouldUseSegmentPositioning = (hasExplicitPositioning, hasSegments, isRtl) => hasExplicitPositioning && hasSegments && !isRtl, MATHML_NS$17 = "http://www.w3.org/1998/Math/MathML", OPERATOR_CHARS, STY_TO_VARIANT, SCR_TO_VARIANT, convertMathRun = (node3, doc$12) => {
277626
+ }, shouldUseSegmentPositioning = (hasExplicitPositioning, hasSegments, isRtl) => hasExplicitPositioning && hasSegments && !isRtl, MATHML_NS$18 = "http://www.w3.org/1998/Math/MathML", OPERATOR_CHARS, STY_TO_VARIANT, SCR_TO_VARIANT, convertMathRun = (node3, doc$12) => {
277243
277627
  const elements = node3.elements ?? [];
277244
277628
  let text5 = "";
277245
277629
  for (const child of elements)
@@ -277253,66 +277637,66 @@ var Node$13 = class Node$14 {
277253
277637
  return null;
277254
277638
  const variant = resolveMathVariant(elements.find((el$1) => el$1.name === "m:rPr"));
277255
277639
  const tag = classifyMathText(text5);
277256
- const el = doc$12.createElementNS(MATHML_NS$17, tag);
277640
+ const el = doc$12.createElementNS(MATHML_NS$18, tag);
277257
277641
  el.textContent = text5;
277258
277642
  if (variant)
277259
277643
  el.setAttribute("mathvariant", variant);
277260
277644
  return el;
277261
- }, MATHML_NS$16 = "http://www.w3.org/1998/Math/MathML", convertFraction = (node3, doc$12, convertChildren) => {
277645
+ }, MATHML_NS$17 = "http://www.w3.org/1998/Math/MathML", convertFraction = (node3, doc$12, convertChildren) => {
277262
277646
  const elements = node3.elements ?? [];
277263
277647
  const num = elements.find((e) => e.name === "m:num");
277264
277648
  const den = elements.find((e) => e.name === "m:den");
277265
- const frac = doc$12.createElementNS(MATHML_NS$16, "mfrac");
277266
- const numRow = doc$12.createElementNS(MATHML_NS$16, "mrow");
277649
+ const frac = doc$12.createElementNS(MATHML_NS$17, "mfrac");
277650
+ const numRow = doc$12.createElementNS(MATHML_NS$17, "mrow");
277267
277651
  numRow.appendChild(convertChildren(num?.elements ?? []));
277268
277652
  frac.appendChild(numRow);
277269
- const denRow = doc$12.createElementNS(MATHML_NS$16, "mrow");
277653
+ const denRow = doc$12.createElementNS(MATHML_NS$17, "mrow");
277270
277654
  denRow.appendChild(convertChildren(den?.elements ?? []));
277271
277655
  frac.appendChild(denRow);
277272
277656
  return frac;
277273
- }, MATHML_NS$15 = "http://www.w3.org/1998/Math/MathML", convertBar = (node3, doc$12, convertChildren) => {
277657
+ }, MATHML_NS$16 = "http://www.w3.org/1998/Math/MathML", convertBar = (node3, doc$12, convertChildren) => {
277274
277658
  const elements = node3.elements ?? [];
277275
277659
  const isUnder = elements.find((e) => e.name === "m:barPr")?.elements?.find((e) => e.name === "m:pos")?.attributes?.["m:val"] !== "top";
277276
277660
  const base5 = elements.find((e) => e.name === "m:e");
277277
- const wrapper = doc$12.createElementNS(MATHML_NS$15, isUnder ? "munder" : "mover");
277661
+ const wrapper = doc$12.createElementNS(MATHML_NS$16, isUnder ? "munder" : "mover");
277278
277662
  const baseContent = convertChildren(base5?.elements ?? []);
277279
- const mrow = doc$12.createElementNS(MATHML_NS$15, "mrow");
277663
+ const mrow = doc$12.createElementNS(MATHML_NS$16, "mrow");
277280
277664
  mrow.appendChild(baseContent);
277281
277665
  wrapper.appendChild(mrow);
277282
- const accent = doc$12.createElementNS(MATHML_NS$15, "mo");
277666
+ const accent = doc$12.createElementNS(MATHML_NS$16, "mo");
277283
277667
  accent.setAttribute("stretchy", "true");
277284
277668
  accent.textContent = "‾";
277285
277669
  wrapper.appendChild(accent);
277286
277670
  return wrapper;
277287
- }, MATHML_NS$14 = "http://www.w3.org/1998/Math/MathML", FUNCTION_APPLY_OPERATOR = "⁡", convertFunction = (node3, doc$12, convertChildren) => {
277671
+ }, MATHML_NS$15 = "http://www.w3.org/1998/Math/MathML", FUNCTION_APPLY_OPERATOR = "⁡", convertFunction = (node3, doc$12, convertChildren) => {
277288
277672
  const elements = node3.elements ?? [];
277289
277673
  const functionName = elements.find((element3) => element3.name === "m:fName");
277290
277674
  const argument = elements.find((element3) => element3.name === "m:e");
277291
- const wrapper = doc$12.createElementNS(MATHML_NS$14, "mrow");
277292
- const functionNameRow = doc$12.createElementNS(MATHML_NS$14, "mrow");
277675
+ const wrapper = doc$12.createElementNS(MATHML_NS$15, "mrow");
277676
+ const functionNameRow = doc$12.createElementNS(MATHML_NS$15, "mrow");
277293
277677
  functionNameRow.appendChild(convertChildren(functionName?.elements ?? []));
277294
277678
  forceNormalMathVariant(functionNameRow);
277295
277679
  if (functionNameRow.childNodes.length > 0)
277296
277680
  wrapper.appendChild(functionNameRow);
277297
- const argumentRow = doc$12.createElementNS(MATHML_NS$14, "mrow");
277681
+ const argumentRow = doc$12.createElementNS(MATHML_NS$15, "mrow");
277298
277682
  argumentRow.appendChild(convertChildren(argument?.elements ?? []));
277299
277683
  if (functionNameRow.childNodes.length > 0 && argumentRow.childNodes.length > 0) {
277300
- const applyOperator = doc$12.createElementNS(MATHML_NS$14, "mo");
277684
+ const applyOperator = doc$12.createElementNS(MATHML_NS$15, "mo");
277301
277685
  applyOperator.textContent = FUNCTION_APPLY_OPERATOR;
277302
277686
  wrapper.appendChild(applyOperator);
277303
277687
  }
277304
277688
  if (argumentRow.childNodes.length > 0)
277305
277689
  wrapper.appendChild(argumentRow);
277306
277690
  return wrapper.childNodes.length > 0 ? wrapper : null;
277307
- }, MATHML_NS$13 = "http://www.w3.org/1998/Math/MathML", DEFAULT_BEGIN_DELIMITER = "(", DEFAULT_END_DELIMITER = ")", DEFAULT_SEPARATOR_DELIMITER = "│", convertDelimiter = (node3, doc$12, convertChildren) => {
277691
+ }, MATHML_NS$14 = "http://www.w3.org/1998/Math/MathML", DEFAULT_BEGIN_DELIMITER = "(", DEFAULT_END_DELIMITER = ")", DEFAULT_SEPARATOR_DELIMITER = "│", convertDelimiter = (node3, doc$12, convertChildren) => {
277308
277692
  const elements = node3.elements ?? [];
277309
277693
  const delimiterProps = elements.find((element3) => element3.name === "m:dPr");
277310
277694
  const expressions = elements.filter((element3) => element3.name === "m:e");
277311
277695
  const beginDelimiter = getDelimiterValue(delimiterProps, "m:begChr", DEFAULT_BEGIN_DELIMITER);
277312
277696
  const endDelimiter = getDelimiterValue(delimiterProps, "m:endChr", DEFAULT_END_DELIMITER);
277313
277697
  const separatorDelimiter = getDelimiterValue(delimiterProps, "m:sepChr", DEFAULT_SEPARATOR_DELIMITER);
277314
- const wrapper = doc$12.createElementNS(MATHML_NS$13, "mrow");
277315
- const begin = doc$12.createElementNS(MATHML_NS$13, "mo");
277698
+ const wrapper = doc$12.createElementNS(MATHML_NS$14, "mrow");
277699
+ const begin = doc$12.createElementNS(MATHML_NS$14, "mo");
277316
277700
  begin.textContent = beginDelimiter;
277317
277701
  wrapper.appendChild(begin);
277318
277702
  let renderedCount = 0;
@@ -277321,60 +277705,60 @@ var Node$13 = class Node$14 {
277321
277705
  if (fragment2.childNodes.length === 0)
277322
277706
  continue;
277323
277707
  if (renderedCount > 0) {
277324
- const separator = doc$12.createElementNS(MATHML_NS$13, "mo");
277708
+ const separator = doc$12.createElementNS(MATHML_NS$14, "mo");
277325
277709
  separator.textContent = separatorDelimiter;
277326
277710
  wrapper.appendChild(separator);
277327
277711
  }
277328
- const group = doc$12.createElementNS(MATHML_NS$13, "mrow");
277712
+ const group = doc$12.createElementNS(MATHML_NS$14, "mrow");
277329
277713
  group.appendChild(fragment2);
277330
277714
  wrapper.appendChild(group);
277331
277715
  renderedCount++;
277332
277716
  }
277333
- const end$1 = doc$12.createElementNS(MATHML_NS$13, "mo");
277717
+ const end$1 = doc$12.createElementNS(MATHML_NS$14, "mo");
277334
277718
  end$1.textContent = endDelimiter;
277335
277719
  wrapper.appendChild(end$1);
277336
277720
  return wrapper;
277337
- }, MATHML_NS$12 = "http://www.w3.org/1998/Math/MathML", convertSubscript = (node3, doc$12, convertChildren) => {
277721
+ }, MATHML_NS$13 = "http://www.w3.org/1998/Math/MathML", convertSubscript = (node3, doc$12, convertChildren) => {
277338
277722
  const elements = node3.elements ?? [];
277339
277723
  const base5 = elements.find((e) => e.name === "m:e");
277340
277724
  const sub = elements.find((e) => e.name === "m:sub");
277341
- const msub = doc$12.createElementNS(MATHML_NS$12, "msub");
277342
- const baseRow = doc$12.createElementNS(MATHML_NS$12, "mrow");
277725
+ const msub = doc$12.createElementNS(MATHML_NS$13, "msub");
277726
+ const baseRow = doc$12.createElementNS(MATHML_NS$13, "mrow");
277343
277727
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277344
277728
  msub.appendChild(baseRow);
277345
- const subRow = doc$12.createElementNS(MATHML_NS$12, "mrow");
277729
+ const subRow = doc$12.createElementNS(MATHML_NS$13, "mrow");
277346
277730
  subRow.appendChild(convertChildren(sub?.elements ?? []));
277347
277731
  msub.appendChild(subRow);
277348
277732
  return msub;
277349
- }, MATHML_NS$11 = "http://www.w3.org/1998/Math/MathML", convertSuperscript = (node3, doc$12, convertChildren) => {
277733
+ }, MATHML_NS$12 = "http://www.w3.org/1998/Math/MathML", convertSuperscript = (node3, doc$12, convertChildren) => {
277350
277734
  const elements = node3.elements ?? [];
277351
277735
  const base5 = elements.find((e) => e.name === "m:e");
277352
277736
  const sup = elements.find((e) => e.name === "m:sup");
277353
- const msup = doc$12.createElementNS(MATHML_NS$11, "msup");
277354
- const baseRow = doc$12.createElementNS(MATHML_NS$11, "mrow");
277737
+ const msup = doc$12.createElementNS(MATHML_NS$12, "msup");
277738
+ const baseRow = doc$12.createElementNS(MATHML_NS$12, "mrow");
277355
277739
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277356
277740
  msup.appendChild(baseRow);
277357
- const supRow = doc$12.createElementNS(MATHML_NS$11, "mrow");
277741
+ const supRow = doc$12.createElementNS(MATHML_NS$12, "mrow");
277358
277742
  supRow.appendChild(convertChildren(sup?.elements ?? []));
277359
277743
  msup.appendChild(supRow);
277360
277744
  return msup;
277361
- }, MATHML_NS$10 = "http://www.w3.org/1998/Math/MathML", convertSubSuperscript = (node3, doc$12, convertChildren) => {
277745
+ }, MATHML_NS$11 = "http://www.w3.org/1998/Math/MathML", convertSubSuperscript = (node3, doc$12, convertChildren) => {
277362
277746
  const elements = node3.elements ?? [];
277363
277747
  const base5 = elements.find((e) => e.name === "m:e");
277364
277748
  const sub = elements.find((e) => e.name === "m:sub");
277365
277749
  const sup = elements.find((e) => e.name === "m:sup");
277366
- const msubsup = doc$12.createElementNS(MATHML_NS$10, "msubsup");
277367
- const baseRow = doc$12.createElementNS(MATHML_NS$10, "mrow");
277750
+ const msubsup = doc$12.createElementNS(MATHML_NS$11, "msubsup");
277751
+ const baseRow = doc$12.createElementNS(MATHML_NS$11, "mrow");
277368
277752
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277369
277753
  msubsup.appendChild(baseRow);
277370
- const subRow = doc$12.createElementNS(MATHML_NS$10, "mrow");
277754
+ const subRow = doc$12.createElementNS(MATHML_NS$11, "mrow");
277371
277755
  subRow.appendChild(convertChildren(sub?.elements ?? []));
277372
277756
  msubsup.appendChild(subRow);
277373
- const supRow = doc$12.createElementNS(MATHML_NS$10, "mrow");
277757
+ const supRow = doc$12.createElementNS(MATHML_NS$11, "mrow");
277374
277758
  supRow.appendChild(convertChildren(sup?.elements ?? []));
277375
277759
  msubsup.appendChild(supRow);
277376
277760
  return msubsup;
277377
- }, MATHML_NS$9 = "http://www.w3.org/1998/Math/MathML", DEFAULT_ACCENT_CHAR = "̂", COMBINING_TO_SPACING, convertAccent = (node3, doc$12, convertChildren) => {
277761
+ }, MATHML_NS$10 = "http://www.w3.org/1998/Math/MathML", DEFAULT_ACCENT_CHAR = "̂", COMBINING_TO_SPACING, convertAccent = (node3, doc$12, convertChildren) => {
277378
277762
  const elements = node3.elements ?? [];
277379
277763
  const base5 = elements.find((e) => e.name === "m:e");
277380
277764
  if (!base5)
@@ -277382,37 +277766,37 @@ var Node$13 = class Node$14 {
277382
277766
  const chr = elements.find((e) => e.name === "m:accPr")?.elements?.find((e) => e.name === "m:chr");
277383
277767
  const rawVal = chr?.attributes?.["m:val"];
277384
277768
  const accentChar = chr === undefined ? DEFAULT_ACCENT_CHAR : rawVal && rawVal.length > 0 ? rawVal : "";
277385
- const baseRow = doc$12.createElementNS(MATHML_NS$9, "mrow");
277769
+ const baseRow = doc$12.createElementNS(MATHML_NS$10, "mrow");
277386
277770
  baseRow.appendChild(convertChildren(base5.elements ?? []));
277387
277771
  if (!accentChar)
277388
277772
  return baseRow;
277389
277773
  const renderChar = COMBINING_TO_SPACING[accentChar] ?? accentChar;
277390
- const mover = doc$12.createElementNS(MATHML_NS$9, "mover");
277774
+ const mover = doc$12.createElementNS(MATHML_NS$10, "mover");
277391
277775
  mover.setAttribute("accent", "true");
277392
277776
  mover.appendChild(baseRow);
277393
- const mo = doc$12.createElementNS(MATHML_NS$9, "mo");
277777
+ const mo = doc$12.createElementNS(MATHML_NS$10, "mo");
277394
277778
  mo.setAttribute("stretchy", "true");
277395
277779
  mo.textContent = renderChar;
277396
277780
  mover.appendChild(mo);
277397
277781
  return mover;
277398
- }, MATHML_NS$8 = "http://www.w3.org/1998/Math/MathML", convertPreSubSuperscript = (node3, doc$12, convertChildren) => {
277782
+ }, MATHML_NS$9 = "http://www.w3.org/1998/Math/MathML", convertPreSubSuperscript = (node3, doc$12, convertChildren) => {
277399
277783
  const elements = node3.elements ?? [];
277400
277784
  const base5 = elements.find((e) => e.name === "m:e");
277401
277785
  const sub = elements.find((e) => e.name === "m:sub");
277402
277786
  const sup = elements.find((e) => e.name === "m:sup");
277403
- const mmultiscripts = doc$12.createElementNS(MATHML_NS$8, "mmultiscripts");
277404
- const baseRow = doc$12.createElementNS(MATHML_NS$8, "mrow");
277787
+ const mmultiscripts = doc$12.createElementNS(MATHML_NS$9, "mmultiscripts");
277788
+ const baseRow = doc$12.createElementNS(MATHML_NS$9, "mrow");
277405
277789
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277406
277790
  mmultiscripts.appendChild(baseRow);
277407
- mmultiscripts.appendChild(doc$12.createElementNS(MATHML_NS$8, "mprescripts"));
277408
- const subRow = doc$12.createElementNS(MATHML_NS$8, "mrow");
277791
+ mmultiscripts.appendChild(doc$12.createElementNS(MATHML_NS$9, "mprescripts"));
277792
+ const subRow = doc$12.createElementNS(MATHML_NS$9, "mrow");
277409
277793
  subRow.appendChild(convertChildren(sub?.elements ?? []));
277410
277794
  mmultiscripts.appendChild(subRow);
277411
- const supRow = doc$12.createElementNS(MATHML_NS$8, "mrow");
277795
+ const supRow = doc$12.createElementNS(MATHML_NS$9, "mrow");
277412
277796
  supRow.appendChild(convertChildren(sup?.elements ?? []));
277413
277797
  mmultiscripts.appendChild(supRow);
277414
277798
  return mmultiscripts;
277415
- }, MATHML_NS$7 = "http://www.w3.org/1998/Math/MathML", stripAlignmentMarkers = (nodes) => nodes.map((node3) => {
277799
+ }, MATHML_NS$8 = "http://www.w3.org/1998/Math/MathML", stripAlignmentMarkers = (nodes) => nodes.map((node3) => {
277416
277800
  if (node3?.type === "text" && typeof node3.text === "string" && node3.text.includes("&"))
277417
277801
  return {
277418
277802
  ...node3,
@@ -277426,12 +277810,12 @@ var Node$13 = class Node$14 {
277426
277810
  return node3;
277427
277811
  }), convertEquationArray = (node3, doc$12, convertChildren) => {
277428
277812
  const rows = (node3.elements ?? []).filter((e) => e.name === "m:e");
277429
- const mtable = doc$12.createElementNS(MATHML_NS$7, "mtable");
277813
+ const mtable = doc$12.createElementNS(MATHML_NS$8, "mtable");
277430
277814
  mtable.setAttribute("columnalign", "left");
277431
277815
  for (const row2 of rows) {
277432
- const mtr = doc$12.createElementNS(MATHML_NS$7, "mtr");
277433
- const mtd = doc$12.createElementNS(MATHML_NS$7, "mtd");
277434
- const mrow = doc$12.createElementNS(MATHML_NS$7, "mrow");
277816
+ const mtr = doc$12.createElementNS(MATHML_NS$8, "mtr");
277817
+ const mtd = doc$12.createElementNS(MATHML_NS$8, "mtd");
277818
+ const mrow = doc$12.createElementNS(MATHML_NS$8, "mrow");
277435
277819
  const cleanedChildren = stripAlignmentMarkers(row2.elements ?? []);
277436
277820
  mrow.appendChild(convertChildren(cleanedChildren));
277437
277821
  mtd.appendChild(mrow);
@@ -277439,7 +277823,7 @@ var Node$13 = class Node$14 {
277439
277823
  mtable.appendChild(mtr);
277440
277824
  }
277441
277825
  return mtable.childNodes.length > 0 ? mtable : null;
277442
- }, MATHML_NS$6 = "http://www.w3.org/1998/Math/MathML", convertRadical = (node3, doc$12, convertChildren) => {
277826
+ }, MATHML_NS$7 = "http://www.w3.org/1998/Math/MathML", convertRadical = (node3, doc$12, convertChildren) => {
277443
277827
  const elements = node3.elements ?? [];
277444
277828
  const radPr = elements.find((e) => e.name === "m:radPr");
277445
277829
  const deg = elements.find((e) => e.name === "m:deg");
@@ -277447,45 +277831,45 @@ var Node$13 = class Node$14 {
277447
277831
  const degHideEl = radPr?.elements?.find((e) => e.name === "m:degHide");
277448
277832
  const degHideVal = degHideEl?.attributes?.["m:val"];
277449
277833
  if (degHideEl !== undefined && degHideVal !== "0" && degHideVal !== "false" && degHideVal !== "off" || !deg || (deg.elements ?? []).length === 0) {
277450
- const msqrt = doc$12.createElementNS(MATHML_NS$6, "msqrt");
277451
- const radicandRow$1 = doc$12.createElementNS(MATHML_NS$6, "mrow");
277834
+ const msqrt = doc$12.createElementNS(MATHML_NS$7, "msqrt");
277835
+ const radicandRow$1 = doc$12.createElementNS(MATHML_NS$7, "mrow");
277452
277836
  radicandRow$1.appendChild(convertChildren(radicand?.elements ?? []));
277453
277837
  msqrt.appendChild(radicandRow$1);
277454
277838
  return msqrt;
277455
277839
  }
277456
- const mroot = doc$12.createElementNS(MATHML_NS$6, "mroot");
277457
- const radicandRow = doc$12.createElementNS(MATHML_NS$6, "mrow");
277840
+ const mroot = doc$12.createElementNS(MATHML_NS$7, "mroot");
277841
+ const radicandRow = doc$12.createElementNS(MATHML_NS$7, "mrow");
277458
277842
  radicandRow.appendChild(convertChildren(radicand?.elements ?? []));
277459
277843
  mroot.appendChild(radicandRow);
277460
- const degRow = doc$12.createElementNS(MATHML_NS$6, "mrow");
277844
+ const degRow = doc$12.createElementNS(MATHML_NS$7, "mrow");
277461
277845
  degRow.appendChild(convertChildren(deg?.elements ?? []));
277462
277846
  mroot.appendChild(degRow);
277463
277847
  return mroot;
277464
- }, MATHML_NS$5 = "http://www.w3.org/1998/Math/MathML", convertLowerLimit = (node3, doc$12, convertChildren) => {
277848
+ }, MATHML_NS$6 = "http://www.w3.org/1998/Math/MathML", convertLowerLimit = (node3, doc$12, convertChildren) => {
277465
277849
  const elements = node3.elements ?? [];
277466
277850
  const base5 = elements.find((e) => e.name === "m:e");
277467
277851
  const lim = elements.find((e) => e.name === "m:lim");
277468
- const munder = doc$12.createElementNS(MATHML_NS$5, "munder");
277469
- const baseRow = doc$12.createElementNS(MATHML_NS$5, "mrow");
277852
+ const munder = doc$12.createElementNS(MATHML_NS$6, "munder");
277853
+ const baseRow = doc$12.createElementNS(MATHML_NS$6, "mrow");
277470
277854
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277471
277855
  munder.appendChild(baseRow);
277472
- const limRow = doc$12.createElementNS(MATHML_NS$5, "mrow");
277856
+ const limRow = doc$12.createElementNS(MATHML_NS$6, "mrow");
277473
277857
  limRow.appendChild(convertChildren(lim?.elements ?? []));
277474
277858
  munder.appendChild(limRow);
277475
277859
  return munder;
277476
- }, MATHML_NS$4 = "http://www.w3.org/1998/Math/MathML", convertUpperLimit = (node3, doc$12, convertChildren) => {
277860
+ }, MATHML_NS$5 = "http://www.w3.org/1998/Math/MathML", convertUpperLimit = (node3, doc$12, convertChildren) => {
277477
277861
  const elements = node3.elements ?? [];
277478
277862
  const base5 = elements.find((e) => e.name === "m:e");
277479
277863
  const lim = elements.find((e) => e.name === "m:lim");
277480
- const mover = doc$12.createElementNS(MATHML_NS$4, "mover");
277481
- const baseRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277864
+ const mover = doc$12.createElementNS(MATHML_NS$5, "mover");
277865
+ const baseRow = doc$12.createElementNS(MATHML_NS$5, "mrow");
277482
277866
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277483
277867
  mover.appendChild(baseRow);
277484
- const limRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277868
+ const limRow = doc$12.createElementNS(MATHML_NS$5, "mrow");
277485
277869
  limRow.appendChild(convertChildren(lim?.elements ?? []));
277486
277870
  mover.appendChild(limRow);
277487
277871
  return mover;
277488
- }, MATHML_NS$3 = "http://www.w3.org/1998/Math/MathML", DEFAULT_NARY_CHAR = "∫", INTEGRAL_CHARS, convertNary = (node3, doc$12, convertChildren) => {
277872
+ }, MATHML_NS$4 = "http://www.w3.org/1998/Math/MathML", DEFAULT_NARY_CHAR = "∫", INTEGRAL_CHARS, convertNary = (node3, doc$12, convertChildren) => {
277489
277873
  const elements = node3.elements ?? [];
277490
277874
  const naryPr = elements.find((e) => e.name === "m:naryPr");
277491
277875
  const sub = elements.find((e) => e.name === "m:sub");
@@ -277512,7 +277896,7 @@ var Node$13 = class Node$14 {
277512
277896
  const hasSub = renderSubChildren.length > 0 || sub !== undefined && !subHidden;
277513
277897
  const hasSup = renderSupChildren.length > 0 || sup !== undefined && !supHidden;
277514
277898
  const growOff = grow !== undefined && !isStOnOffTrue(grow);
277515
- const mo = doc$12.createElementNS(MATHML_NS$3, "mo");
277899
+ const mo = doc$12.createElementNS(MATHML_NS$4, "mo");
277516
277900
  mo.textContent = opChar;
277517
277901
  if (growOff) {
277518
277902
  mo.setAttribute("largeop", "false");
@@ -277521,38 +277905,38 @@ var Node$13 = class Node$14 {
277521
277905
  let operatorEl;
277522
277906
  if (hasSub && hasSup) {
277523
277907
  const tag = isUndOvr ? "munderover" : "msubsup";
277524
- operatorEl = doc$12.createElementNS(MATHML_NS$3, tag);
277908
+ operatorEl = doc$12.createElementNS(MATHML_NS$4, tag);
277525
277909
  operatorEl.appendChild(mo);
277526
- const subRow = doc$12.createElementNS(MATHML_NS$3, "mrow");
277910
+ const subRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277527
277911
  subRow.appendChild(convertChildren(renderSubChildren));
277528
277912
  operatorEl.appendChild(subRow);
277529
- const supRow = doc$12.createElementNS(MATHML_NS$3, "mrow");
277913
+ const supRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277530
277914
  supRow.appendChild(convertChildren(renderSupChildren));
277531
277915
  operatorEl.appendChild(supRow);
277532
277916
  } else if (hasSub) {
277533
277917
  const tag = isUndOvr ? "munder" : "msub";
277534
- operatorEl = doc$12.createElementNS(MATHML_NS$3, tag);
277918
+ operatorEl = doc$12.createElementNS(MATHML_NS$4, tag);
277535
277919
  operatorEl.appendChild(mo);
277536
- const subRow = doc$12.createElementNS(MATHML_NS$3, "mrow");
277920
+ const subRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277537
277921
  subRow.appendChild(convertChildren(renderSubChildren));
277538
277922
  operatorEl.appendChild(subRow);
277539
277923
  } else if (hasSup) {
277540
277924
  const tag = isUndOvr ? "mover" : "msup";
277541
- operatorEl = doc$12.createElementNS(MATHML_NS$3, tag);
277925
+ operatorEl = doc$12.createElementNS(MATHML_NS$4, tag);
277542
277926
  operatorEl.appendChild(mo);
277543
- const supRow = doc$12.createElementNS(MATHML_NS$3, "mrow");
277927
+ const supRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277544
277928
  supRow.appendChild(convertChildren(renderSupChildren));
277545
277929
  operatorEl.appendChild(supRow);
277546
277930
  } else
277547
277931
  operatorEl = mo;
277548
- const wrapper = doc$12.createElementNS(MATHML_NS$3, "mrow");
277932
+ const wrapper = doc$12.createElementNS(MATHML_NS$4, "mrow");
277549
277933
  wrapper.appendChild(operatorEl);
277550
- const bodyRow = doc$12.createElementNS(MATHML_NS$3, "mrow");
277934
+ const bodyRow = doc$12.createElementNS(MATHML_NS$4, "mrow");
277551
277935
  bodyRow.appendChild(convertChildren(body?.elements ?? []));
277552
277936
  if (bodyRow.childNodes.length > 0)
277553
277937
  wrapper.appendChild(bodyRow);
277554
277938
  return wrapper;
277555
- }, MATHML_NS$2 = "http://www.w3.org/1998/Math/MathML", convertPhantom = (node3, doc$12, convertChildren) => {
277939
+ }, MATHML_NS$3 = "http://www.w3.org/1998/Math/MathML", convertPhantom = (node3, doc$12, convertChildren) => {
277556
277940
  const elements = node3.elements ?? [];
277557
277941
  const phantPr = elements.find((e) => e.name === "m:phantPr");
277558
277942
  const base5 = elements.find((e) => e.name === "m:e");
@@ -277565,11 +277949,11 @@ var Node$13 = class Node$14 {
277565
277949
  const hasZeroDimension = zeroWid || zeroAsc || zeroDesc;
277566
277950
  const content3 = convertChildren(base5?.elements ?? []);
277567
277951
  if (!isVisible$1 && !hasZeroDimension) {
277568
- const mphantom = doc$12.createElementNS(MATHML_NS$2, "mphantom");
277952
+ const mphantom = doc$12.createElementNS(MATHML_NS$3, "mphantom");
277569
277953
  mphantom.appendChild(content3);
277570
277954
  return mphantom;
277571
277955
  }
277572
- const mpadded = doc$12.createElementNS(MATHML_NS$2, "mpadded");
277956
+ const mpadded = doc$12.createElementNS(MATHML_NS$3, "mpadded");
277573
277957
  const isZeroVal = (el) => el && (isOnOffTrue(el.attributes?.["m:val"]) || !el.attributes);
277574
277958
  if (isZeroVal(zeroWid))
277575
277959
  mpadded.setAttribute("width", "0");
@@ -277578,13 +277962,13 @@ var Node$13 = class Node$14 {
277578
277962
  if (isZeroVal(zeroDesc))
277579
277963
  mpadded.setAttribute("depth", "0");
277580
277964
  if (!isVisible$1) {
277581
- const mphantom = doc$12.createElementNS(MATHML_NS$2, "mphantom");
277965
+ const mphantom = doc$12.createElementNS(MATHML_NS$3, "mphantom");
277582
277966
  mphantom.appendChild(content3);
277583
277967
  mpadded.appendChild(mphantom);
277584
277968
  } else
277585
277969
  mpadded.appendChild(content3);
277586
277970
  return mpadded;
277587
- }, MATHML_NS$1 = "http://www.w3.org/1998/Math/MathML", DEFAULT_GROUP_CHAR = "⏟", VERT_JC_SHIFT_EM = 1, convertGroupCharacter = (node3, doc$12, convertChildren) => {
277971
+ }, MATHML_NS$2 = "http://www.w3.org/1998/Math/MathML", DEFAULT_GROUP_CHAR = "⏟", VERT_JC_SHIFT_EM = 1, convertGroupCharacter = (node3, doc$12, convertChildren) => {
277588
277972
  const elements = node3.elements ?? [];
277589
277973
  const groupChrPr = elements.find((e) => e.name === "m:groupChrPr");
277590
277974
  const base5 = elements.find((e) => e.name === "m:e");
@@ -277594,11 +277978,11 @@ var Node$13 = class Node$14 {
277594
277978
  const groupChar = chr ? chr.attributes?.["m:val"] ?? "" : DEFAULT_GROUP_CHAR;
277595
277979
  const position4 = pos?.attributes?.["m:val"] ?? "bot";
277596
277980
  const vertJustify = vertJc ? vertJc.attributes?.["m:val"] ?? "bot" : null;
277597
- const wrapper = doc$12.createElementNS(MATHML_NS$1, position4 === "top" ? "mover" : "munder");
277598
- const baseRow = doc$12.createElementNS(MATHML_NS$1, "mrow");
277981
+ const wrapper = doc$12.createElementNS(MATHML_NS$2, position4 === "top" ? "mover" : "munder");
277982
+ const baseRow = doc$12.createElementNS(MATHML_NS$2, "mrow");
277599
277983
  baseRow.appendChild(convertChildren(base5?.elements ?? []));
277600
277984
  wrapper.appendChild(baseRow);
277601
- const mo = doc$12.createElementNS(MATHML_NS$1, "mo");
277985
+ const mo = doc$12.createElementNS(MATHML_NS$2, "mo");
277602
277986
  mo.setAttribute("stretchy", "true");
277603
277987
  mo.textContent = groupChar;
277604
277988
  wrapper.appendChild(mo);
@@ -277610,6 +277994,31 @@ var Node$13 = class Node$14 {
277610
277994
  }
277611
277995
  }
277612
277996
  return wrapper;
277997
+ }, MATHML_NS$1 = "http://www.w3.org/1998/Math/MathML", EMPTY_CELL_PLACEHOLDER = "□", convertMatrix = (node3, doc$12, convertChildren) => {
277998
+ const elements = node3.elements ?? [];
277999
+ const rows = elements.filter((e) => e.name === "m:mr");
278000
+ const plcHide = elements.find((e) => e.name === "m:mPr")?.elements?.find((e) => e.name === "m:plcHide");
278001
+ const hidePlaceholders = isPlaceholderHidden(plcHide);
278002
+ const mtable = doc$12.createElementNS(MATHML_NS$1, "mtable");
278003
+ for (const row2 of rows) {
278004
+ const mtr = doc$12.createElementNS(MATHML_NS$1, "mtr");
278005
+ const cells = row2.elements?.filter((e) => e.name === "m:e") ?? [];
278006
+ for (const cell2 of cells) {
278007
+ const mtd = doc$12.createElementNS(MATHML_NS$1, "mtd");
278008
+ const mrow = doc$12.createElementNS(MATHML_NS$1, "mrow");
278009
+ const fragment2 = convertChildren(cell2.elements ?? []);
278010
+ if (fragment2.childNodes.length === 0 && !hidePlaceholders) {
278011
+ const placeholder = doc$12.createElementNS(MATHML_NS$1, "mi");
278012
+ placeholder.textContent = EMPTY_CELL_PLACEHOLDER;
278013
+ mrow.appendChild(placeholder);
278014
+ } else
278015
+ mrow.appendChild(fragment2);
278016
+ mtd.appendChild(mrow);
278017
+ mtr.appendChild(mtd);
278018
+ }
278019
+ mtable.appendChild(mtr);
278020
+ }
278021
+ return mtable.childNodes.length > 0 ? mtable : null;
277613
278022
  }, MATHML_NS = "http://www.w3.org/1998/Math/MathML", MATH_OBJECT_REGISTRY, ARGUMENT_ELEMENTS, LIST_MARKER_GAP$1 = 8, DEFAULT_PAGE_HEIGHT_PX = 1056, DEFAULT_VIRTUALIZED_PAGE_GAP = 72, LINK_DATASET_KEYS, MAX_HREF_LENGTH = 2048, SAFE_ANCHOR_PATTERN, MAX_DATA_URL_LENGTH, VALID_IMAGE_DATA_URL, MAX_RESIZE_MULTIPLIER = 3, FALLBACK_MAX_DIMENSION = 1000, MIN_IMAGE_DIMENSION = 20, AMBIGUOUS_LINK_PATTERNS, linkMetrics, TRACK_CHANGE_BASE_CLASS, TRACK_CHANGE_MODIFIER_CLASS, LINK_TARGET_SET, normalizeAnchor$1 = (value) => {
277614
278023
  if (typeof value !== "string")
277615
278024
  return null;
@@ -287725,12 +288134,12 @@ var Node$13 = class Node$14 {
287725
288134
  return;
287726
288135
  console.log(...args$1);
287727
288136
  }, 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;
287728
- var init_src_BBT_7sHt_es = __esm(() => {
288137
+ var init_src_966rF_JP_es = __esm(() => {
287729
288138
  init_rolldown_runtime_Bg48TavK_es();
287730
- init_SuperConverter_CWhofwLf_es();
288139
+ init_SuperConverter_w6yaFRT5_es();
287731
288140
  init_jszip_C49i9kUs_es();
287732
288141
  init_uuid_qzgm05fK_es();
287733
- init_create_headless_toolbar_C2iuH72Y_es();
288142
+ init_create_headless_toolbar_CHK8yJic_es();
287734
288143
  init_constants_CGhJRd87_es();
287735
288144
  init_dist_B8HfvhaK_es();
287736
288145
  init_unified_Dsuw2be5_es();
@@ -310196,6 +310605,27 @@ function print() { __p += __j.call(arguments, '') }
310196
310605
  ["text.insert::text.insert::same_target", "reject"]
310197
310606
  ]);
310198
310607
  MATRIX_EXEMPT_OPS = new Set(["assert"]);
310608
+ PARAGRAPH_NODE_TYPES = new Set([
310609
+ "paragraph",
310610
+ "heading",
310611
+ "listItem"
310612
+ ]);
310613
+ DIRECT_FORMATTING_MARK_NAMES = new Set([
310614
+ "textStyle",
310615
+ "bold",
310616
+ "italic",
310617
+ "underline",
310618
+ "strike",
310619
+ "subscript",
310620
+ "superscript",
310621
+ "highlight"
310622
+ ]);
310623
+ ALIGNMENT_TO_JUSTIFICATION = {
310624
+ left: "left",
310625
+ center: "center",
310626
+ right: "right",
310627
+ justify: "both"
310628
+ };
310199
310629
  DEFAULT_INLINE_POLICY = {
310200
310630
  mode: "preserve",
310201
310631
  onNonUniform: "majority"
@@ -310723,27 +311153,6 @@ function print() { __p += __j.call(arguments, '') }
310723
311153
  underline: new Set(["color", "w:color"]),
310724
311154
  borders: new Set(["color"])
310725
311155
  };
310726
- PARAGRAPH_NODE_TYPES = new Set([
310727
- "paragraph",
310728
- "heading",
310729
- "listItem"
310730
- ]);
310731
- DIRECT_FORMATTING_MARK_NAMES = new Set([
310732
- "textStyle",
310733
- "bold",
310734
- "italic",
310735
- "underline",
310736
- "strike",
310737
- "subscript",
310738
- "superscript",
310739
- "highlight"
310740
- ]);
310741
- ALIGNMENT_TO_JUSTIFICATION = {
310742
- left: "left",
310743
- center: "center",
310744
- right: "right",
310745
- justify: "both"
310746
- };
310747
311156
  ORDERED_PRESET_CONFIG = {
310748
311157
  decimal: {
310749
311158
  numFmt: "decimal",
@@ -313503,6 +313912,7 @@ function print() { __p += __j.call(arguments, '') }
313503
313912
  "m:func": convertFunction,
313504
313913
  "m:limLow": convertLowerLimit,
313505
313914
  "m:limUpp": convertUpperLimit,
313915
+ "m:m": convertMatrix,
313506
313916
  "m:nary": convertNary,
313507
313917
  "m:phant": convertPhantom,
313508
313918
  "m:rad": convertRadical,
@@ -313512,8 +313922,7 @@ function print() { __p += __j.call(arguments, '') }
313512
313922
  "m:sPre": convertPreSubSuperscript,
313513
313923
  "m:borderBox": null,
313514
313924
  "m:box": null,
313515
- "m:groupChr": convertGroupCharacter,
313516
- "m:m": null
313925
+ "m:groupChr": convertGroupCharacter
313517
313926
  };
313518
313927
  ARGUMENT_ELEMENTS = new Set([
313519
313928
  "m:e",
@@ -322485,11 +322894,11 @@ var init_zipper_DbkgrypV_es = __esm(() => {
322485
322894
 
322486
322895
  // ../../packages/superdoc/dist/super-editor.es.js
322487
322896
  var init_super_editor_es = __esm(() => {
322488
- init_src_BBT_7sHt_es();
322489
- init_SuperConverter_CWhofwLf_es();
322897
+ init_src_966rF_JP_es();
322898
+ init_SuperConverter_w6yaFRT5_es();
322490
322899
  init_jszip_C49i9kUs_es();
322491
322900
  init_xml_js_CqGKpaft_es();
322492
- init_create_headless_toolbar_C2iuH72Y_es();
322901
+ init_create_headless_toolbar_CHK8yJic_es();
322493
322902
  init_constants_CGhJRd87_es();
322494
322903
  init_dist_B8HfvhaK_es();
322495
322904
  init_unified_Dsuw2be5_es();
@@ -375057,6 +375466,31 @@ function extractConstValues(variants) {
375057
375466
  }
375058
375467
  return values2;
375059
375468
  }
375469
+ function isNestedValidationMessage(path2, message) {
375470
+ return message.startsWith(`${path2}.`) || message.startsWith(`${path2}[`);
375471
+ }
375472
+ function selectRepeatedActionableOneOfError(path2, errors2) {
375473
+ const counts = new Map;
375474
+ for (const error4 of errors2) {
375475
+ counts.set(error4, (counts.get(error4) ?? 0) + 1);
375476
+ }
375477
+ let bestMessage = null;
375478
+ let bestScore = 0;
375479
+ for (const [message, count2] of counts.entries()) {
375480
+ if (count2 < 2)
375481
+ continue;
375482
+ const nested = isNestedValidationMessage(path2, message);
375483
+ const isShapeError = message.includes(" is not allowed by schema.") || message.includes(" is required.");
375484
+ if (!nested && !isShapeError)
375485
+ continue;
375486
+ const score = count2 * 10 + (nested ? 2 : 0) + (isShapeError ? 1 : 0);
375487
+ if (score > bestScore) {
375488
+ bestScore = score;
375489
+ bestMessage = message;
375490
+ }
375491
+ }
375492
+ return bestMessage;
375493
+ }
375060
375494
  function validateValueAgainstTypeSpec(value2, schema, path2) {
375061
375495
  if ("const" in schema) {
375062
375496
  if (value2 !== schema.const) {
@@ -375076,8 +375510,9 @@ function validateValueAgainstTypeSpec(value2, schema, path2) {
375076
375510
  }
375077
375511
  }
375078
375512
  const allowedValues = extractConstValues(variants);
375079
- const message = allowedValues.length > 0 ? `${path2} must be one of: ${allowedValues.join(", ")}.` : `${path2} must match one of the allowed schema variants.`;
375080
- throw new CliError("VALIDATION_ERROR", message, { errors: errors2 });
375513
+ const selectedError = selectRepeatedActionableOneOfError(path2, errors2);
375514
+ const message = allowedValues.length > 0 ? `${path2} must be one of: ${allowedValues.join(", ")}.` : selectedError ?? `${path2} must match one of the allowed schema variants.`;
375515
+ throw new CliError("VALIDATION_ERROR", message, { errors: errors2, selectedError });
375081
375516
  }
375082
375517
  if (schema.type === "json")
375083
375518
  return;
@@ -375156,7 +375591,11 @@ function validateResponseValueAgainstTypeSpec(value2, schema, path2) {
375156
375591
  errors2.push(error4 instanceof Error ? error4.message : String(error4));
375157
375592
  }
375158
375593
  }
375159
- throw new CliError("VALIDATION_ERROR", `${path2} must match one of the allowed schema variants.`, { errors: errors2 });
375594
+ const selectedError = selectRepeatedActionableOneOfError(path2, errors2);
375595
+ throw new CliError("VALIDATION_ERROR", selectedError ?? `${path2} must match one of the allowed schema variants.`, {
375596
+ errors: errors2,
375597
+ selectedError
375598
+ });
375160
375599
  }
375161
375600
  if (schema.type === "json")
375162
375601
  return;