Skip to content

Commit eb48bf1

Browse files
authored
feat(document-api): more lists commands (#2288)
* feat(lists): more lists commands * chore: review fixes * chore: fix tests * chore: fix types
1 parent d624231 commit eb48bf1

45 files changed

Lines changed: 7857 additions & 43 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/cli/scripts/export-sdk-contract.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,17 @@ const INTENT_NAMES = {
127127
'doc.lists.canContinuePrevious': 'can_continue_previous_list',
128128
'doc.lists.setLevelRestart': 'set_list_level_restart',
129129
'doc.lists.convertToText': 'convert_list_to_text',
130+
'doc.lists.applyTemplate': 'apply_list_template',
131+
'doc.lists.applyPreset': 'apply_list_preset',
132+
'doc.lists.captureTemplate': 'capture_list_template',
133+
'doc.lists.setLevelNumbering': 'set_list_level_numbering',
134+
'doc.lists.setLevelBullet': 'set_list_level_bullet',
135+
'doc.lists.setLevelPictureBullet': 'set_list_level_picture_bullet',
136+
'doc.lists.setLevelAlignment': 'set_list_level_alignment',
137+
'doc.lists.setLevelIndents': 'set_list_level_indents',
138+
'doc.lists.setLevelTrailingCharacter': 'set_list_level_trailing_character',
139+
'doc.lists.setLevelMarkerFont': 'set_list_level_marker_font',
140+
'doc.lists.clearLevelOverrides': 'clear_list_level_overrides',
130141
'doc.comments.create': 'create_comment',
131142
'doc.comments.patch': 'patch_comment',
132143
'doc.comments.delete': 'delete_comment',

apps/cli/src/__tests__/conformance/scenarios.ts

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,6 +1516,189 @@ export const SUCCESS_SCENARIOS = {
15161516
],
15171517
};
15181518
},
1519+
'doc.lists.applyTemplate': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1520+
const stateDir = await harness.createStateDir('doc-lists-apply-template-success');
1521+
const docPath = await harness.copyListFixtureDoc('doc-lists-apply-template');
1522+
const target = await harness.firstListItemAddress(docPath, stateDir);
1523+
const template = {
1524+
version: 1,
1525+
levels: [{ level: 0, numFmt: 'decimal', lvlText: '%1.' }],
1526+
};
1527+
return {
1528+
stateDir,
1529+
args: [
1530+
'lists',
1531+
'apply-template',
1532+
docPath,
1533+
'--input-json',
1534+
JSON.stringify({ target, template }),
1535+
'--out',
1536+
harness.createOutputPath('doc-lists-apply-template-output'),
1537+
],
1538+
};
1539+
},
1540+
'doc.lists.applyPreset': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1541+
const stateDir = await harness.createStateDir('doc-lists-apply-preset-success');
1542+
const docPath = await harness.copyListFixtureDoc('doc-lists-apply-preset');
1543+
const target = await harness.firstListItemAddress(docPath, stateDir);
1544+
return {
1545+
stateDir,
1546+
args: [
1547+
'lists',
1548+
'apply-preset',
1549+
docPath,
1550+
'--input-json',
1551+
JSON.stringify({ target, preset: 'decimal' }),
1552+
'--out',
1553+
harness.createOutputPath('doc-lists-apply-preset-output'),
1554+
],
1555+
};
1556+
},
1557+
'doc.lists.captureTemplate': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1558+
const stateDir = await harness.createStateDir('doc-lists-capture-template-success');
1559+
const docPath = await harness.copyListFixtureDoc('doc-lists-capture-template');
1560+
const target = await harness.firstListItemAddress(docPath, stateDir);
1561+
return {
1562+
stateDir,
1563+
args: ['lists', 'capture-template', docPath, '--input-json', JSON.stringify({ target })],
1564+
};
1565+
},
1566+
'doc.lists.setLevelNumbering': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1567+
const stateDir = await harness.createStateDir('doc-lists-set-level-numbering-success');
1568+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-numbering');
1569+
const target = await harness.firstListItemAddress(docPath, stateDir);
1570+
return {
1571+
stateDir,
1572+
args: [
1573+
'lists',
1574+
'set-level-numbering',
1575+
docPath,
1576+
'--input-json',
1577+
JSON.stringify({ target, level: 0, numFmt: 'decimal', lvlText: '%1.' }),
1578+
'--out',
1579+
harness.createOutputPath('doc-lists-set-level-numbering-output'),
1580+
],
1581+
};
1582+
},
1583+
'doc.lists.setLevelBullet': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1584+
const stateDir = await harness.createStateDir('doc-lists-set-level-bullet-success');
1585+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-bullet');
1586+
const target = await harness.firstListItemAddress(docPath, stateDir);
1587+
return {
1588+
stateDir,
1589+
args: [
1590+
'lists',
1591+
'set-level-bullet',
1592+
docPath,
1593+
'--input-json',
1594+
JSON.stringify({ target, level: 0, markerText: '\u2022' }),
1595+
'--out',
1596+
harness.createOutputPath('doc-lists-set-level-bullet-output'),
1597+
],
1598+
};
1599+
},
1600+
'doc.lists.setLevelPictureBullet': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1601+
const stateDir = await harness.createStateDir('doc-lists-set-level-picture-bullet-success');
1602+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-picture-bullet');
1603+
const target = await harness.firstListItemAddress(docPath, stateDir);
1604+
return {
1605+
stateDir,
1606+
args: [
1607+
'lists',
1608+
'set-level-picture-bullet',
1609+
docPath,
1610+
'--input-json',
1611+
JSON.stringify({ target, level: 0, pictureBulletId: 0 }),
1612+
'--out',
1613+
harness.createOutputPath('doc-lists-set-level-picture-bullet-output'),
1614+
],
1615+
};
1616+
},
1617+
'doc.lists.setLevelAlignment': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1618+
const stateDir = await harness.createStateDir('doc-lists-set-level-alignment-success');
1619+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-alignment');
1620+
const target = await harness.firstListItemAddress(docPath, stateDir);
1621+
return {
1622+
stateDir,
1623+
args: [
1624+
'lists',
1625+
'set-level-alignment',
1626+
docPath,
1627+
'--input-json',
1628+
JSON.stringify({ target, level: 0, alignment: 'center' }),
1629+
'--out',
1630+
harness.createOutputPath('doc-lists-set-level-alignment-output'),
1631+
],
1632+
};
1633+
},
1634+
'doc.lists.setLevelIndents': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1635+
const stateDir = await harness.createStateDir('doc-lists-set-level-indents-success');
1636+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-indents');
1637+
const target = await harness.firstListItemAddress(docPath, stateDir);
1638+
return {
1639+
stateDir,
1640+
args: [
1641+
'lists',
1642+
'set-level-indents',
1643+
docPath,
1644+
'--input-json',
1645+
JSON.stringify({ target, level: 0, left: 1440, hanging: 720 }),
1646+
'--out',
1647+
harness.createOutputPath('doc-lists-set-level-indents-output'),
1648+
],
1649+
};
1650+
},
1651+
'doc.lists.setLevelTrailingCharacter': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1652+
const stateDir = await harness.createStateDir('doc-lists-set-level-trailing-character-success');
1653+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-trailing-character');
1654+
const target = await harness.firstListItemAddress(docPath, stateDir);
1655+
return {
1656+
stateDir,
1657+
args: [
1658+
'lists',
1659+
'set-level-trailing-character',
1660+
docPath,
1661+
'--input-json',
1662+
JSON.stringify({ target, level: 0, trailingCharacter: 'tab' }),
1663+
'--out',
1664+
harness.createOutputPath('doc-lists-set-level-trailing-character-output'),
1665+
],
1666+
};
1667+
},
1668+
'doc.lists.setLevelMarkerFont': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1669+
const stateDir = await harness.createStateDir('doc-lists-set-level-marker-font-success');
1670+
const docPath = await harness.copyListFixtureDoc('doc-lists-set-level-marker-font');
1671+
const target = await harness.firstListItemAddress(docPath, stateDir);
1672+
return {
1673+
stateDir,
1674+
args: [
1675+
'lists',
1676+
'set-level-marker-font',
1677+
docPath,
1678+
'--input-json',
1679+
JSON.stringify({ target, level: 0, fontFamily: 'Arial' }),
1680+
'--out',
1681+
harness.createOutputPath('doc-lists-set-level-marker-font-output'),
1682+
],
1683+
};
1684+
},
1685+
'doc.lists.clearLevelOverrides': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
1686+
const stateDir = await harness.createStateDir('doc-lists-clear-level-overrides-success');
1687+
const docPath = await harness.copyListFixtureDoc('doc-lists-clear-level-overrides');
1688+
const target = await harness.firstListItemAddress(docPath, stateDir);
1689+
return {
1690+
stateDir,
1691+
args: [
1692+
'lists',
1693+
'clear-level-overrides',
1694+
docPath,
1695+
'--input-json',
1696+
JSON.stringify({ target, level: 0 }),
1697+
'--out',
1698+
harness.createOutputPath('doc-lists-clear-level-overrides-output'),
1699+
],
1700+
};
1701+
},
15191702
'doc.insert': async (harness: ConformanceHarness): Promise<ScenarioInvocation> => {
15201703
const stateDir = await harness.createStateDir('doc-insert-success');
15211704
const docPath = await harness.copyFixtureDoc('doc-insert');
@@ -2327,6 +2510,9 @@ const RUNTIME_CONFORMANCE_SKIP = new Set<CliOperationId>([
23272510
// which the CLI test harness fixture does not populate.
23282511
'doc.tables.setDefaultStyle',
23292512
'doc.tables.clearDefaultStyle',
2513+
// clearLevelOverrides requires an instance-level override to exist on the fixture list,
2514+
// which the generic list fixture does not have.
2515+
'doc.lists.clearLevelOverrides',
23302516
]);
23312517

23322518
export const OPERATION_SCENARIOS = (Object.keys(SUCCESS_SCENARIOS) as CliOperationId[]).map((operationId) => {

apps/cli/src/cli/operation-hints.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ export const SUCCESS_VERB: Record<CliExposedOperationId, string> = {
105105
'lists.continuePrevious': 'continued previous list',
106106
'lists.canContinuePrevious': 'checked continue feasibility',
107107
'lists.setLevelRestart': 'set level restart',
108+
'lists.applyTemplate': 'applied list template',
109+
'lists.applyPreset': 'applied list preset',
110+
'lists.captureTemplate': 'captured list template',
111+
'lists.setLevelNumbering': 'set level numbering',
112+
'lists.setLevelBullet': 'set level bullet',
113+
'lists.setLevelPictureBullet': 'set level picture bullet',
114+
'lists.setLevelAlignment': 'set level alignment',
115+
'lists.setLevelIndents': 'set level indents',
116+
'lists.setLevelTrailingCharacter': 'set level trailing character',
117+
'lists.setLevelMarkerFont': 'set level marker font',
118+
'lists.clearLevelOverrides': 'cleared level overrides',
108119
'lists.convertToText': 'converted list to text',
109120
'comments.create': 'created comment',
110121
'comments.patch': 'patched comment',
@@ -256,6 +267,17 @@ export const OUTPUT_FORMAT: Record<CliExposedOperationId, OutputFormat> = {
256267
'lists.continuePrevious': 'listsMutationResult',
257268
'lists.canContinuePrevious': 'plain',
258269
'lists.setLevelRestart': 'listsMutationResult',
270+
'lists.applyTemplate': 'listsMutationResult',
271+
'lists.applyPreset': 'listsMutationResult',
272+
'lists.captureTemplate': 'plain',
273+
'lists.setLevelNumbering': 'listsMutationResult',
274+
'lists.setLevelBullet': 'listsMutationResult',
275+
'lists.setLevelPictureBullet': 'listsMutationResult',
276+
'lists.setLevelAlignment': 'listsMutationResult',
277+
'lists.setLevelIndents': 'listsMutationResult',
278+
'lists.setLevelTrailingCharacter': 'listsMutationResult',
279+
'lists.setLevelMarkerFont': 'listsMutationResult',
280+
'lists.clearLevelOverrides': 'listsMutationResult',
259281
'lists.convertToText': 'listsMutationResult',
260282
'comments.create': 'commentReceipt',
261283
'comments.patch': 'commentReceipt',
@@ -391,6 +413,17 @@ export const RESPONSE_ENVELOPE_KEY: Record<CliExposedOperationId, string | null>
391413
'lists.continuePrevious': 'result',
392414
'lists.canContinuePrevious': 'result',
393415
'lists.setLevelRestart': 'result',
416+
'lists.applyTemplate': 'result',
417+
'lists.applyPreset': 'result',
418+
'lists.captureTemplate': 'result',
419+
'lists.setLevelNumbering': 'result',
420+
'lists.setLevelBullet': 'result',
421+
'lists.setLevelPictureBullet': 'result',
422+
'lists.setLevelAlignment': 'result',
423+
'lists.setLevelIndents': 'result',
424+
'lists.setLevelTrailingCharacter': 'result',
425+
'lists.setLevelMarkerFont': 'result',
426+
'lists.clearLevelOverrides': 'result',
394427
'lists.convertToText': 'result',
395428
'comments.create': 'receipt',
396429
'comments.patch': 'receipt',
@@ -555,6 +588,17 @@ export const OPERATION_FAMILY: Record<CliExposedOperationId, OperationFamily> =
555588
'lists.continuePrevious': 'lists',
556589
'lists.canContinuePrevious': 'lists',
557590
'lists.setLevelRestart': 'lists',
591+
'lists.applyTemplate': 'lists',
592+
'lists.applyPreset': 'lists',
593+
'lists.captureTemplate': 'lists',
594+
'lists.setLevelNumbering': 'lists',
595+
'lists.setLevelBullet': 'lists',
596+
'lists.setLevelPictureBullet': 'lists',
597+
'lists.setLevelAlignment': 'lists',
598+
'lists.setLevelIndents': 'lists',
599+
'lists.setLevelTrailingCharacter': 'lists',
600+
'lists.setLevelMarkerFont': 'lists',
601+
'lists.clearLevelOverrides': 'lists',
558602
'lists.convertToText': 'lists',
559603
'comments.create': 'comments',
560604
'comments.patch': 'comments',

apps/cli/src/cli/operation-params.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,17 @@ const EXTRA_CLI_PARAMS: Partial<Record<string, CliOperationParamSpec[]>> = {
410410
...LIST_TARGET_FLAT_PARAMS,
411411
],
412412
'doc.lists.setLevelRestart': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
413+
'doc.lists.applyTemplate': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
414+
'doc.lists.applyPreset': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
415+
'doc.lists.captureTemplate': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
416+
'doc.lists.setLevelNumbering': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
417+
'doc.lists.setLevelBullet': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
418+
'doc.lists.setLevelPictureBullet': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
419+
'doc.lists.setLevelAlignment': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
420+
'doc.lists.setLevelIndents': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
421+
'doc.lists.setLevelTrailingCharacter': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
422+
'doc.lists.setLevelMarkerFont': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
423+
'doc.lists.clearLevelOverrides': [{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' }],
413424
'doc.lists.convertToText': [
414425
{ name: 'input', kind: 'jsonFlag', flag: 'input-json', type: 'json' },
415426
...LIST_TARGET_FLAT_PARAMS,

apps/cli/src/lib/invoke-input.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ const WRAPPED_INPUT_KEY: Partial<Record<CliExposedOperationId, string>> = {
3939
'lists.continuePrevious': 'input',
4040
'lists.canContinuePrevious': 'input',
4141
'lists.setLevelRestart': 'input',
42+
'lists.applyTemplate': 'input',
43+
'lists.applyPreset': 'input',
44+
'lists.captureTemplate': 'input',
45+
'lists.setLevelNumbering': 'input',
46+
'lists.setLevelBullet': 'input',
47+
'lists.setLevelPictureBullet': 'input',
48+
'lists.setLevelAlignment': 'input',
49+
'lists.setLevelIndents': 'input',
50+
'lists.setLevelTrailingCharacter': 'input',
51+
'lists.setLevelMarkerFont': 'input',
52+
'lists.clearLevelOverrides': 'input',
4253
'lists.convertToText': 'input',
4354
'create.paragraph': 'input',
4455
'create.heading': 'input',

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Use the tables below to see what operations are available and where each one is
2222
| Format | 44 | 1 | 45 | [Reference](/document-api/reference/format/index) |
2323
| History | 3 | 0 | 3 | [Reference](/document-api/reference/history/index) |
2424
| Images | 13 | 0 | 13 | [Reference](/document-api/reference/images/index) |
25-
| Lists | 17 | 0 | 17 | [Reference](/document-api/reference/lists/index) |
25+
| Lists | 28 | 1 | 29 | [Reference](/document-api/reference/lists/index) |
2626
| Mutations | 2 | 0 | 2 | [Reference](/document-api/reference/mutations/index) |
2727
| Paragraph Formatting | 17 | 0 | 17 | [Reference](/document-api/reference/format/paragraph/index) |
2828
| Paragraph Styles | 2 | 0 | 2 | [Reference](/document-api/reference/styles/paragraph/index) |
@@ -136,6 +136,18 @@ Use the tables below to see what operations are available and where each one is
136136
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.canContinuePrevious(...)</code></span> | [`lists.canContinuePrevious`](/document-api/reference/lists/can-continue-previous) |
137137
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelRestart(...)</code></span> | [`lists.setLevelRestart`](/document-api/reference/lists/set-level-restart) |
138138
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.convertToText(...)</code></span> | [`lists.convertToText`](/document-api/reference/lists/convert-to-text) |
139+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.applyTemplate(...)</code></span> | [`lists.applyTemplate`](/document-api/reference/lists/apply-template) |
140+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.applyPreset(...)</code></span> | [`lists.applyPreset`](/document-api/reference/lists/apply-preset) |
141+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.captureTemplate(...)</code></span> | [`lists.captureTemplate`](/document-api/reference/lists/capture-template) |
142+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelNumbering(...)</code></span> | [`lists.setLevelNumbering`](/document-api/reference/lists/set-level-numbering) |
143+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelBullet(...)</code></span> | [`lists.setLevelBullet`](/document-api/reference/lists/set-level-bullet) |
144+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelPictureBullet(...)</code></span> | [`lists.setLevelPictureBullet`](/document-api/reference/lists/set-level-picture-bullet) |
145+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelAlignment(...)</code></span> | [`lists.setLevelAlignment`](/document-api/reference/lists/set-level-alignment) |
146+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelIndents(...)</code></span> | [`lists.setLevelIndents`](/document-api/reference/lists/set-level-indents) |
147+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelTrailingCharacter(...)</code></span> | [`lists.setLevelTrailingCharacter`](/document-api/reference/lists/set-level-trailing-character) |
148+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setLevelMarkerFont(...)</code></span> | [`lists.setLevelMarkerFont`](/document-api/reference/lists/set-level-marker-font) |
149+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.clearLevelOverrides(...)</code></span> | [`lists.clearLevelOverrides`](/document-api/reference/lists/clear-level-overrides) |
150+
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.lists.setType(...)</code></span> | [`lists.applyPreset`](/document-api/reference/lists/apply-preset) |
139151
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.mutations.preview(...)</code></span> | [`mutations.preview`](/document-api/reference/mutations/preview) |
140152
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.mutations.apply(...)</code></span> | [`mutations.apply`](/document-api/reference/mutations/apply) |
141153
| <span style={{ whiteSpace: 'nowrap', wordBreak: 'normal', overflowWrap: 'normal' }}><code>editor.doc.format.paragraph.resetDirectFormatting(...)</code></span> | [`format.paragraph.resetDirectFormatting`](/document-api/reference/format/paragraph/reset-direct-formatting) |

0 commit comments

Comments
 (0)