Skip to content

Commit d3f7309

Browse files
list tool improvements (#2927)
* feat(lists): merge and split operations * fix(lists): restart numbering * fix(lists): return OOXML-stable paraId from lists.insert receipt * docs(prompt): sub-point + nested-list recipes for agents * test(lists): merge/split validator and wrapper tests * fix(query-match-adapter): enhance error handling for discontiguous text ranges * feat(numbering): add sanity checks for ordered list formatting and symbol font violations - Introduced `numbering-consistency.js` to validate that ordered list levels do not use symbol fonts, preventing rendering issues in Word. - Implemented `findSymbolFontsOnOrderedLevels` function to identify violations in OOXML abstractNum elements. - Added comprehensive tests in `numbering-consistency.test.js` to ensure correct functionality and edge case handling. * feat(lists): enhance list action validation and add new tests - Updated `package.json` to refine the `clean` script and introduce new prebuild commands for benchmark dependencies. - Added a new function `usesListAction` in `checks.cjs` to validate that the expected list action is called during evaluations. - Introduced a new document `basic-list.docx` for testing list operations. - Expanded benchmark and execution tests to include assertions for list actions, ensuring correct functionality for merging, splitting, and restarting lists. - Implemented regression guards to check for symbol font violations in ordered lists. * refactor(intent-dispatch): streamline case statements for intent actions * refactor(intent-dispatch): simplify case statements for intent actions and improve readability * refactor: require structural emptiness for paragraphs - Updated test descriptions for clarity, removing references to specific bugs. - Added new test cases for `lists.merge` and `lists.split` actions to ensure proper functionality and validation. - Refactored `listsMergeWrapper` and `listsSplitWrapper` to improve handling of empty paragraphs and revision management during list operations. * fix: update document API references to use 'document' instead of 'active editor' * test(evals): assert list structural changes for merge/split/restart Adds checkBulletsAndNumbersMerged, checkBulletListSplitAtWith, and checkRestartAtAllSorts in evals/shared/checks.cjs that read word/document.xml from the saved docx and verify the numId/ilvl change the agent was supposed to make. Without these the merge/split/restart evals could pass even if the list itself never changed. Also reword the listsSplitWrapper doc comment to drop the misleading "applied atomically" claim - the implementation runs as two sequential steps and the inline note already documents the partial-apply failure mode. And rename the validator test that read backwards (default is restart-on, not opt-out). --------- Co-authored-by: Caio Pizzol <caio@superdoc.dev> Co-authored-by: Caio Pizzol <97641911+caio-pizzol@users.noreply.github.com>
1 parent 5268a4d commit d3f7309

40 files changed

Lines changed: 2942 additions & 34 deletions

apps/docs/document-api/available-operations.mdx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Use the tables below to see what operations are available and where each one is
3232
| Hyperlinks | 6 | 0 | 6 | [Reference](/document-api/reference/hyperlinks/index) |
3333
| Images | 27 | 0 | 27 | [Reference](/document-api/reference/images/index) |
3434
| Index | 11 | 0 | 11 | [Reference](/document-api/reference/index/index) |
35-
| Lists | 36 | 0 | 36 | [Reference](/document-api/reference/lists/index) |
35+
| Lists | 38 | 0 | 38 | [Reference](/document-api/reference/lists/index) |
3636
| Mutations | 2 | 0 | 2 | [Reference](/document-api/reference/mutations/index) |
3737
| Paragraph Formatting | 19 | 0 | 19 | [Reference](/document-api/reference/format/paragraph/index) |
3838
| Paragraph Styles | 2 | 0 | 2 | [Reference](/document-api/reference/styles/paragraph/index) |
@@ -291,6 +291,8 @@ Use the tables below to see what operations are available and where each one is
291291
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.join(...)</code></span> | [`lists.join`](/document-api/reference/lists/join) |
292292
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.canJoin(...)</code></span> | [`lists.canJoin`](/document-api/reference/lists/can-join) |
293293
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.separate(...)</code></span> | [`lists.separate`](/document-api/reference/lists/separate) |
294+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.merge(...)</code></span> | [`lists.merge`](/document-api/reference/lists/merge) |
295+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.split(...)</code></span> | [`lists.split`](/document-api/reference/lists/split) |
294296
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevel(...)</code></span> | [`lists.setLevel`](/document-api/reference/lists/set-level) |
295297
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setValue(...)</code></span> | [`lists.setValue`](/document-api/reference/lists/set-value) |
296298
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.continuePrevious(...)</code></span> | [`lists.continuePrevious`](/document-api/reference/lists/continue-previous) |

apps/docs/document-api/reference/_generated-manifest.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@
299299
"apps/docs/document-api/reference/lists/insert.mdx",
300300
"apps/docs/document-api/reference/lists/join.mdx",
301301
"apps/docs/document-api/reference/lists/list.mdx",
302+
"apps/docs/document-api/reference/lists/merge.mdx",
302303
"apps/docs/document-api/reference/lists/outdent.mdx",
303304
"apps/docs/document-api/reference/lists/restart-at.mdx",
304305
"apps/docs/document-api/reference/lists/separate.mdx",
@@ -317,6 +318,7 @@
317318
"apps/docs/document-api/reference/lists/set-level.mdx",
318319
"apps/docs/document-api/reference/lists/set-type.mdx",
319320
"apps/docs/document-api/reference/lists/set-value.mdx",
321+
"apps/docs/document-api/reference/lists/split.mdx",
320322
"apps/docs/document-api/reference/markdown-to-fragment.mdx",
321323
"apps/docs/document-api/reference/mutations/apply.mdx",
322324
"apps/docs/document-api/reference/mutations/index.mdx",
@@ -576,6 +578,8 @@
576578
"lists.join",
577579
"lists.canJoin",
578580
"lists.separate",
581+
"lists.merge",
582+
"lists.split",
579583
"lists.setLevel",
580584
"lists.setValue",
581585
"lists.continuePrevious",
@@ -1027,5 +1031,5 @@
10271031
}
10281032
],
10291033
"marker": "{/* GENERATED FILE: DO NOT EDIT. Regenerate via `pnpm run docapi:sync`. */}",
1030-
"sourceHash": "f5c0786256e77432e9b9a58bc2009e39e2e832f6b0b2b625ee6dbeb3a762bdd6"
1034+
"sourceHash": "0bb50c2977e652d32a4c3dd591c774e7d164c013b53f2c951de8573911ecdef6"
10311035
}

apps/docs/document-api/reference/capabilities/get.mdx

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,6 +1645,11 @@ _No fields._
16451645
| `operations.lists.list.dryRun` | boolean | yes | |
16461646
| `operations.lists.list.reasons` | enum[] | no | |
16471647
| `operations.lists.list.tracked` | boolean | yes | |
1648+
| `operations.lists.merge` | object | yes | |
1649+
| `operations.lists.merge.available` | boolean | yes | |
1650+
| `operations.lists.merge.dryRun` | boolean | yes | |
1651+
| `operations.lists.merge.reasons` | enum[] | no | |
1652+
| `operations.lists.merge.tracked` | boolean | yes | |
16481653
| `operations.lists.outdent` | object | yes | |
16491654
| `operations.lists.outdent.available` | boolean | yes | |
16501655
| `operations.lists.outdent.dryRun` | boolean | yes | |
@@ -1735,6 +1740,11 @@ _No fields._
17351740
| `operations.lists.setValue.dryRun` | boolean | yes | |
17361741
| `operations.lists.setValue.reasons` | enum[] | no | |
17371742
| `operations.lists.setValue.tracked` | boolean | yes | |
1743+
| `operations.lists.split` | object | yes | |
1744+
| `operations.lists.split.available` | boolean | yes | |
1745+
| `operations.lists.split.dryRun` | boolean | yes | |
1746+
| `operations.lists.split.reasons` | enum[] | no | |
1747+
| `operations.lists.split.tracked` | boolean | yes | |
17381748
| `operations.markdownToFragment` | object | yes | |
17391749
| `operations.markdownToFragment.available` | boolean | yes | |
17401750
| `operations.markdownToFragment.dryRun` | boolean | yes | |
@@ -3871,6 +3881,11 @@ _No fields._
38713881
"dryRun": false,
38723882
"tracked": false
38733883
},
3884+
"lists.merge": {
3885+
"available": true,
3886+
"dryRun": true,
3887+
"tracked": false
3888+
},
38743889
"lists.outdent": {
38753890
"available": true,
38763891
"dryRun": true,
@@ -3961,6 +3976,11 @@ _No fields._
39613976
"dryRun": true,
39623977
"tracked": false
39633978
},
3979+
"lists.split": {
3980+
"available": true,
3981+
"dryRun": true,
3982+
"tracked": false
3983+
},
39643984
"markdownToFragment": {
39653985
"available": true,
39663986
"dryRun": false,
@@ -15729,6 +15749,41 @@ _No fields._
1572915749
],
1573015750
"type": "object"
1573115751
},
15752+
"lists.merge": {
15753+
"additionalProperties": false,
15754+
"properties": {
15755+
"available": {
15756+
"type": "boolean"
15757+
},
15758+
"dryRun": {
15759+
"type": "boolean"
15760+
},
15761+
"reasons": {
15762+
"items": {
15763+
"enum": [
15764+
"COMMAND_UNAVAILABLE",
15765+
"HELPER_UNAVAILABLE",
15766+
"OPERATION_UNAVAILABLE",
15767+
"TRACKED_MODE_UNAVAILABLE",
15768+
"DRY_RUN_UNAVAILABLE",
15769+
"NAMESPACE_UNAVAILABLE",
15770+
"STYLES_PART_MISSING",
15771+
"COLLABORATION_ACTIVE"
15772+
]
15773+
},
15774+
"type": "array"
15775+
},
15776+
"tracked": {
15777+
"type": "boolean"
15778+
}
15779+
},
15780+
"required": [
15781+
"available",
15782+
"tracked",
15783+
"dryRun"
15784+
],
15785+
"type": "object"
15786+
},
1573215787
"lists.outdent": {
1573315788
"additionalProperties": false,
1573415789
"properties": {
@@ -16359,6 +16414,41 @@ _No fields._
1635916414
],
1636016415
"type": "object"
1636116416
},
16417+
"lists.split": {
16418+
"additionalProperties": false,
16419+
"properties": {
16420+
"available": {
16421+
"type": "boolean"
16422+
},
16423+
"dryRun": {
16424+
"type": "boolean"
16425+
},
16426+
"reasons": {
16427+
"items": {
16428+
"enum": [
16429+
"COMMAND_UNAVAILABLE",
16430+
"HELPER_UNAVAILABLE",
16431+
"OPERATION_UNAVAILABLE",
16432+
"TRACKED_MODE_UNAVAILABLE",
16433+
"DRY_RUN_UNAVAILABLE",
16434+
"NAMESPACE_UNAVAILABLE",
16435+
"STYLES_PART_MISSING",
16436+
"COLLABORATION_ACTIVE"
16437+
]
16438+
},
16439+
"type": "array"
16440+
},
16441+
"tracked": {
16442+
"type": "boolean"
16443+
}
16444+
},
16445+
"required": [
16446+
"available",
16447+
"tracked",
16448+
"dryRun"
16449+
],
16450+
"type": "object"
16451+
},
1636216452
"markdownToFragment": {
1636316453
"additionalProperties": false,
1636416454
"properties": {
@@ -19766,6 +19856,8 @@ _No fields._
1976619856
"lists.join",
1976719857
"lists.canJoin",
1976819858
"lists.separate",
19859+
"lists.merge",
19860+
"lists.split",
1976919861
"lists.setLevel",
1977019862
"lists.setValue",
1977119863
"lists.continuePrevious",

apps/docs/document-api/reference/history/get.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
title: history.get
33
sidebarTitle: history.get
4-
description: Query the current undo/redo history state of the active editor.
4+
description: Query the current undo/redo history state of the document.
55
---
66

77
{/* GENERATED FILE: DO NOT EDIT. Regenerate via `pnpm run docapi:sync`. */}
88

99
## Summary
1010

11-
Query the current undo/redo history state of the active editor.
11+
Query the current undo/redo history state of the document.
1212

1313
- Operation ID: `history.get`
1414
- API member path: `editor.doc.history.get(...)`

apps/docs/document-api/reference/history/redo.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
title: history.redo
33
sidebarTitle: history.redo
4-
description: Redo the most recently undone action in the active editor.
4+
description: Redo the most recently undone action in the document.
55
---
66

77
{/* GENERATED FILE: DO NOT EDIT. Regenerate via `pnpm run docapi:sync`. */}
88

99
## Summary
1010

11-
Redo the most recently undone action in the active editor.
11+
Redo the most recently undone action in the document.
1212

1313
- Operation ID: `history.redo`
1414
- API member path: `editor.doc.history.redo(...)`

apps/docs/document-api/reference/history/undo.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
title: history.undo
33
sidebarTitle: history.undo
4-
description: Undo the most recent history-safe mutation in the active editor.
4+
description: Undo the most recent history-safe mutation in the document.
55
---
66

77
{/* GENERATED FILE: DO NOT EDIT. Regenerate via `pnpm run docapi:sync`. */}
88

99
## Summary
1010

11-
Undo the most recent history-safe mutation in the active editor.
11+
Undo the most recent history-safe mutation in the document.
1212

1313
- Operation ID: `history.undo`
1414
- API member path: `editor.doc.history.undo(...)`

apps/docs/document-api/reference/index.mdx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ This reference is sourced from `packages/document-api/src/contract/*`.
2626
| Sections | 18 | 0 | 18 | [Open](/document-api/reference/sections/index) |
2727
| Format | 44 | 1 | 45 | [Open](/document-api/reference/format/index) |
2828
| Styles | 1 | 0 | 1 | [Open](/document-api/reference/styles/index) |
29-
| Lists | 36 | 0 | 36 | [Open](/document-api/reference/lists/index) |
29+
| Lists | 38 | 0 | 38 | [Open](/document-api/reference/lists/index) |
3030
| Comments | 5 | 0 | 5 | [Open](/document-api/reference/comments/index) |
3131
| Track Changes | 3 | 0 | 3 | [Open](/document-api/reference/track-changes/index) |
3232
| Query | 1 | 0 | 1 | [Open](/document-api/reference/query/index) |
@@ -196,6 +196,8 @@ The tables below are grouped by namespace.
196196
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/join"><code>lists.join</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.join(...)</code></span> | Merge two adjacent list sequences into one. |
197197
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/can-join"><code>lists.canJoin</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.canJoin(...)</code></span> | Check whether two adjacent list sequences can be joined. |
198198
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/separate"><code>lists.separate</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.separate(...)</code></span> | Split a list sequence at the target item, creating a new sequence from that point forward. |
199+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/merge"><code>lists.merge</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.merge(...)</code></span> | Compound: merge two adjacent list sequences into one. Reassigns numId on the absorbed sequence (no strict abstractNumId check — absorbed items adopt the absorbing definition) and deletes empty paragraphs between the two sequences. Use this instead of lists.join for the user-facing "merge these lists" intent. |
200+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/split"><code>lists.split</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.split(...)</code></span> | Compound: split a list sequence at the target item into two independent sequences. Runs lists.separate then (by default) lists.setValue(1) so the new half starts numbering fresh at 1. Pass restartNumbering:false for raw separate semantics (new half continues the previous count). |
199201
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/set-level"><code>lists.setLevel</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevel(...)</code></span> | Set the absolute nesting level (0..8) of a list item. |
200202
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/set-value"><code>lists.setValue</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setValue(...)</code></span> | Set an explicit numbering value at the target item. Mid-sequence targets are atomically separated first. |
201203
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/continue-previous"><code>lists.continuePrevious</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.continuePrevious(...)</code></span> | Continue numbering from the nearest compatible previous list sequence. |
@@ -338,9 +340,9 @@ The tables below are grouped by namespace.
338340

339341
| Operation | API member path | Description |
340342
| --- | --- | --- |
341-
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/history/get"><code>history.get</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.history.get(...)</code></span> | Query the current undo/redo history state of the active editor. |
342-
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/history/undo"><code>history.undo</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.history.undo(...)</code></span> | Undo the most recent history-safe mutation in the active editor. |
343-
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/history/redo"><code>history.redo</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.history.redo(...)</code></span> | Redo the most recently undone action in the active editor. |
343+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/history/get"><code>history.get</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.history.get(...)</code></span> | Query the current undo/redo history state of the document. |
344+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/history/undo"><code>history.undo</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.history.undo(...)</code></span> | Undo the most recent history-safe mutation in the document. |
345+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/history/redo"><code>history.redo</code></a></span> | <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.history.redo(...)</code></span> | Redo the most recently undone action in the document. |
344346

345347
#### Table of Contents
346348

apps/docs/document-api/reference/lists/index.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ List inspection and list mutations.
2323
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/join"><code>lists.join</code></a></span> | `lists.join` | Yes | `conditional` | No | Yes |
2424
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/can-join"><code>lists.canJoin</code></a></span> | `lists.canJoin` | No | `idempotent` | No | No |
2525
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/separate"><code>lists.separate</code></a></span> | `lists.separate` | Yes | `conditional` | No | Yes |
26+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/merge"><code>lists.merge</code></a></span> | `lists.merge` | Yes | `conditional` | No | Yes |
27+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/split"><code>lists.split</code></a></span> | `lists.split` | Yes | `conditional` | No | Yes |
2628
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/set-level"><code>lists.setLevel</code></a></span> | `lists.setLevel` | Yes | `conditional` | No | Yes |
2729
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/set-value"><code>lists.setValue</code></a></span> | `lists.setValue` | Yes | `conditional` | No | Yes |
2830
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><a href="/document-api/reference/lists/continue-previous"><code>lists.continuePrevious</code></a></span> | `lists.continuePrevious` | Yes | `conditional` | No | Yes |

0 commit comments

Comments
 (0)